⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function.h

📁 一个典型的小区消息管理系统
💻 H
📖 第 1 页 / 共 3 页
字号:
					}
		           else
				   {
			         p->next=up->next;
				     message(INFO,"该用户已从原组删除!",WC);
					 break;
				   }
				 if(up)
				   {
                    if(!strcmp(uname,up->user_name))
					break;
				   } 
				 }
		           p=up;
		           up=up->next;
		     }
		 
             gp=gp->glink;
		 }
   if(!gp) 
   {
	   message(ERROR,"该用户名不存在,转移用户失败!",WC); 
   }  
   message(INFO,"请选择你要转入的组",WC);
   gets(uname);
   gp=head->glink;
   while(gp)
   {
	   if(strcmp(gp->group_name,uname)==0)
	   { 
		   p=gp->ulink;
	       gp->ulink=up;
		   up->next=p;
	   }
	   gp=gp->glink;
		   
   }
  if(!gp) 
   {
	   message(ERROR,"该用组不存在,转移用户失败!",WC); 
   }  
   
   return 1;
 
 }*/ 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
int send_user_message(User_Group *g)
{  
	char time[MAX_INFO_SMY_LEN],messg[MAX_USER_LEN],mess[MAX_USER_LEN],
		gname[MAX_INFO_SMY_LEN],uname[MAX_INFO_SMY_LEN];
	FILE *fp;
	char filepath[MAX_MENU_LEN];
	User_Group *q=g->glink;
	User_Item *p;
	display(g);
    message(INFO,"请输入你要发信的人所属组",NULL);
	
	  scanf("%s",gname);
		while(q)
	{
		if(strcmp(q->group_name,gname)==0&&(q->b)>0)
		{
			message(INFO,"此用户组存在且有用户发送有效",NULL);
			break;
		}
		q=q->glink;
	}
		if(!q)
		{
			message(INFO,"此用户组不存在,发信失败",NULL);
		    return 0;
		}
		p=q->ulink;

	message(INFO,"请输入你要发送的用户",NULL);
	scanf("%s",uname);
	while(p)
	{
		if(strcmp(p->user_name,uname)==0)
    	message(INFO,"此用户存在发送有效",NULL);
			break;
	}
	if(!p)
	{
		message(INFO,"此用户不存在发送无效",NULL);

	}
    message(INFO,"请输入你要发信时间",NULL);
	scanf("%s",time);
	message(INFO,"请输入你要发信的概要",NULL);
	scanf("%s",messg);
	build_i_dir("userinf",mess);
	message(INFO,"请输入你要发的内容",NULL);
	scanf("%s",mess);
	create_i_dir(filepath,"userinf",mess);

	fp=fopen(filepath, "wb");
	if(!fp) 
	{printf("can not open file\n"); return 0;}
	fputs(mess,fp);
	fclose(fp);
	(p->user_info_box)[p->count].flag=0;
    strcmp((p->user_info_box)[p->count].info_summary,messg);
	strcmp((p->user_info_box)[p->count].send_time,time);
	strcmp((p->user_info_box)[p->count].sender_name,"admin");
	save_user_info_b(p);
	return 1;
}
int send_group_message(User_Group *g)
{ 
	char time[MAX_INFO_SMY_LEN],messg[MAX_USER_LEN],mess[MAX_USER_LEN],
		gname[MAX_INFO_SMY_LEN];
	FILE *fp;
	char filepath[MAX_MENU_LEN];
	User_Group *q=g->glink;
	User_Item *p;
	display(g);
    message(INFO,"请输入你要发信的人或组",NULL);
	scanf("%s",gname);
		while(q)
	{
		if(strcmp(q->group_name,gname)==0&&q->b)
		{
			message(INFO,"此用户存在发送有效",NULL);
			break;
		}
		q=q->glink;
	}
		if(!q)
		{
			message(INFO,"此用户组不存在或无用户,发信失败",NULL);
		    return 0;
		}

    message(INFO,"请输入你要发信时间",NULL);
	scanf("%s",time);
	message(INFO,"请输入你要发信的概要",NULL);
	scanf("%s",messg);
	build_i_dir("userinf",mess);
	message(INFO,"请输入你要发的内容",NULL);
	scanf("%s",mess);
	create_i_dir(filepath,"userinf",mess);
    fp=fopen(filepath, "wb");
	if(!fp) 
	{
		printf("can not open file\n"); return 0;}
	    fputs(mess,fp);
	    fclose(fp);
	    p=q->ulink;
	while(p)
	{
		(p->user_info_box)[p->count].flag=0;
		strcpy((p->user_info_box)[p->count].info_summary,messg);
		strcpy((p->user_info_box)[p->count].send_time,time);
		strcpy((p->user_info_box)[p->count].sender_name,"admin");
		save_user_info_b(p);
		p=p->next;
	}
	
			return 1;
}
int send_admin_message(admin *adpt,User_Item *use)
{   
	CLS;
	char time[MAX_INFO_SMY_LEN],messg[MAX_USER_LEN],mess[MAX_USER_LEN];
    FILE *fp;
	char filepath[MAX_MENU_LEN];
	message(INFO,"请输入你要发信时间",NULL);
	scanf("%s",time);
	message(INFO,"请输入你要发信的概要",NULL);
	scanf("%s",messg);
	build_i_dir("admininf",mess);
	message(INFO,"请输入你要发的内容",NULL);
	scanf("%s",mess);
	create_i_dir(filepath,"admininf",mess);
    fp=fopen(filepath, "wb");
	if(!fp) 
	{printf("can not open file\n"); return 0;}
	fputs(mess,fp);
	fclose(fp);
	
	strcpy((adpt->admin_info_box)[adpt->count].info_summary,messg);
	strcpy((adpt->admin_info_box)[adpt->count].send_time,time);
	strcpy((adpt->admin_info_box)[adpt->count].sender_name,use->user_name);
    adpt->count++;
	save_system_info(adpt);
	return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////
int  admin_read_info(int num,admin *adpt)    //管理员读取信件函数,num为用户选择的要读取信件的编号(即display_admin_box函数中显示时的编号)
{int i;  Rec_Box box; FILE *fp; 
 char filepath[MAX_MENU_LEN],note[MAX_INFO_LEN];
 i=adpt->count-num;
 box=adpt->admin_info_box[i]; 
 message(INFO,"正在读取消息",WC);
 printf("【消息内容】:\n");
 create_i_dir(filepath, "admininf",box.info_summary);
 fp=fopen(filepath, "rb+");    // 随机读写使用 rb+ 方式打开文件
 if(!fp) 
    {message(ERROR,"加载消息内容失败",NULL);
     message(ERROR,"正在返回上一层菜单",WC);
     return 0;
    }
 fread(note,sizeof(sizeof(note)),1,fp);
 fclose(fp); 
 puts(note);

 printf("\n【发布时间】:\n");
 printf("%s\n",box.send_time); 
 printf("【回复者姓名】:\n");
 printf("%s\n",box.sender_name);

 if(!adpt->admin_info_box[i].flag)
    {adpt->admin_info_box[i].flag++;   //"未读"则改变信件状态
     save_system_info(adpt);
    } 
 return 1;
}
 
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

int admin_dele_info(int num,admin *adpt)     //管理员删除信件函数
{ int i=adpt->count-num;   //i初始值为要删除的信件在数组中的编号
  for(;i<(adpt->count);i++)     //将所选删除信件后面的信件前移
      adpt->admin_info_box[i]=adpt->admin_info_box[i+1]; 
  adpt->count--;       //收件数减1
  message(INFO,"删除信件成功!",NULL);
  save_system_info(adpt);
  message(INFO,"正在返回上一层菜单",WC);
  
  return 1;
}

//////////////////////////////////////////////////////////////////////////////////////

int  display_admin_box(admin *adpt)   //管理员收件箱函数,按时间排列信件
{CLS;
 int i,j,choice,num;
 while(1)
 {if(adpt->count==0)  
    {message(INFO,"收件箱为空!",NULL); 
     message(INFO,"正在返回上一层菜单,请等待......",WC); 
     return 1;
    }  
  printf("【信息】收件箱中共有%d信件\n",adpt->count);
  message(INFO,"信件编号        消息摘要         发布时间            状态",NULL);
  message(INFO,"____________________________________________________________",NULL);
  for(i=adpt->count-1,j=1;i>=0;i--)      //应用堆栈,后进先出
      printf("【%d】         %s                %s          %s\n",j++,adpt->admin_info_box[i].info_summary,adpt->admin_info_box[i].send_time,status[adpt->admin_info_box[i].flag]);
    
  message(INFO,"请选择操作:",NULL);
  printf("【1】阅读来信:\n");
  printf("【2】删除信件:\n");
  printf("【3】返回上一层菜单:\n");
  printf("请输入操作编号:");
  scanf("%d",&choice);
  switch(choice)
        {case'1':
               {message(TIP,"请选择要阅读的信件编号:",NULL);
                scanf("%d",&num);
                admin_read_info(num,adpt);
               }
         case'2':
                {admin_dele_info(num,adpt);
                 message(INFO,"正在更新收件箱列表",WC); 
                }
         case'3': 
                 return 1;          
        }   
 }
}





//////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

int user_read_info(int num,User_Item *upt)  //用户读取信件函数,num为用户选择的要读取信件的编号(即display_user_box函数中显示时的编号)
{int i;  Rec_Box box; FILE *fp; 
 char filepath[MAX_MENU_LEN],note[MAX_INFO_LEN];
 i=upt->count-num;
 box=upt->user_info_box[i]; 
 message(INFO,"正在读取消息",WC);
 printf("【消息内容】:\n");
 create_i_dir(filepath, "userinf",box.info_summary);
 fp=fopen(filepath, "rb+");    // 随机读写使用 rb+ 方式打开文件
 if(!fp) 
    {message(ERROR,"加载消息内容失败",NULL);
     message(ERROR,"正在返回上一层菜单",WC);
     return 0;
    }
 fread(note,sizeof(sizeof(note)),1,fp);
 fclose(fp); 
 puts(note);

 printf("\n【发布时间】:\n");
 printf("%s\n",box.send_time); 
 printf("【发布者姓名】:\n");
 printf("%s\n",box.sender_name);

 if(!upt->user_info_box[i].flag)
    {upt->user_info_box[i].flag++;   //"未读"则改变信件状态
     save_user_info_b(upt);
    } 
 return 1;
}
 
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

int user_dele_info(int num,User_Item *upt)    //用户删除信件函数
{ int i=upt->count-num;   //i初始值为要删除的信件在数组中的编号
  for(;i<(upt->count);i++)     //将所选删除信件后面的信件前移
      upt->user_info_box[i]=upt->user_info_box[i+1]; 
  upt->count--;       //收件数减1
  message(INFO,"删除信件成功!",NULL);
  save_user_info_b(upt);
  message(INFO,"正在返回上一层菜单,请等待.......",WC);
  
  return 1;
} 

//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

int  display_user_box(User_Item temp,User_Group *head)    //用户收件箱函数,按发布时间顺序排列      
{CLS;
 int i,j,choice,num; User_Group *pt; User_Item *upt;
 pt=head->glink;
 while(pt)              
    {upt=pt->ulink;
     while(upt)
        {if(!strcmp(temp.user_name,upt->user_name))
            break;   
         upt=upt->next;
        }
     if(upt) break;
     pt=pt->glink;
    }                 //upt指向进行操作的用户结点
 while(1)
 { 
  if(upt->count==0)  
    {message(INFO,"收件箱为空!",NULL); 
     message(INFO,"正在返回上一层菜单,请等待......",WC); 
     return 1;
    } 
  printf("【信息】收件箱中共有%d信件\n",upt->count); 
  message(INFO,"信件编号        消息摘要         发布时间            状态",NULL);
  message(INFO,"____________________________________________________________",NULL);
   for(i=upt->count-1,j=1;i>=0;i--)      //应用堆栈,后进先出
       printf("    【%d】         %s                %s          %s\n",j++,upt->user_info_box[i].info_summary,upt->user_info_box[i].send_time,status[upt->user_info_box[i].flag]);
    
  message(INFO,"请选择操作:",NULL);
  printf("【1】阅读来信:\n");
  printf("【2】删除信件:\n");
  printf("【3】返回上一层菜单:\n");
  printf("请输入操作编号:");
  scanf("%d",&choice);
  switch(choice)
        {case'1':
               {message(TIP,"请选择要阅读的信件编号:",NULL);
                scanf("%d",&num);
                user_read_info(num,upt);
               }
         case'2':
                {user_dele_info(num,upt);
                 message(INFO,"正在更新收件箱列表",WC); 
                }
         case'3': 
                 return 1;          
        }   
 }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -