📄 用户收件箱函数.txt
字号:
#define MAX_USER_LEN 100
#define MAX_INFO_NUM 100 //收件箱/发件箱的最大容量
#define MAX_INFO_SMY_LEN 20 //信件内容摘要的最大长度
#define MAX_INFO_LEN 500 //信件的最大长度
={"adm","adm",{""},{{"","","",0}},0,1,0}
typedef struct //发件箱结构体定义
{ char sender_name[MAX_USER_LEN];
char send_time[MAX_USER_LEN];
char info_body[MAX_INFO_LEN]; //信件主体内容数组
}Send_Box;
typedef struct //收件箱结构体定义
{ char sender_name[MAX_USER_LEN];
char send_time[MAX_USER_LEN];
char info_summary[MAX_INFO_SMY_LEN]; //内容摘要数组
int flag;//标记信件状态已读或未读(初始化为0)
}Rec_Box;
typedef struct user //用户结构体定义
{char user_name[MAX_USER_LEN];
char user_code[MAX_USER_LEN];
char gname[MAX_USER_LEN]; //用户所在的组名
Rec_Box user_info_box[MAX_INFO_NUM]; //用户收件箱数组
int count; //记录收到的信件数(初始化值为0)
struct user *next;//指向同一组的下一个用户
}User_Item;
typedef struct usergrou //用户组结构体定义
{char group_name[MAX_USER_LEN]; //用户组名
struct usergroup *glink; //指向下一个用户组的指针
User_Item *ulink; //指向组里的第一个用户的指针
int b; //用户组包含的用户个数
}User_Group;
typedef struct //管理员结构体定义
{
char admin_name[MAX_MENU_LEN];
char admin_code[MAX_MENU_LEN];
char user[100][MAX_USER_LEN];
Rec_Box admin_info_box[MAX_INFO_NUM]; //管理员收件箱数组
int count;
int a; //已存在的用户组个数
int num; //已注册的用户个数
} admin;
Send_Box info_box[MAX_INFO_NUM]; //全局发件箱数组
char status[2][10]={"未读","已读"};//flag对应的状态标示数组
int display_rec_box() //收件箱显示函数,按收到时间顺序排列 问题:如何将用户信息传递给收件箱显示函数
{int i,j,choice,num;
while(1)
{
message(INFO,"信件编号 发布时间 状态",NULL);
message(INFO,"____________________________________________________________",NULL);
if(count==0) {message(INFO,"收件箱为空!",NULL); return 0;}
else
{for(i=count-1,j=1;i>=0;i--) //应用堆栈,后进先出
{printf("【%d】 %s %s\n",j++,user_info_box[i].send_time,status[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);
goto read_info(count-num);
}
case'2':
{goto dele_info(num,&count);
message(INFO,"正在更新收件箱列表",WC);
}
case'3':
return 1;
}
}
}
int read_info(int i)//读取信件函数,num为用户选择的要读取信件的编号(即display_rec_box函数中显示时的编号)
{Rec_Box box;
box=userpt->user_info_box[i];
message(INFO,"正在读取信件",WC);
printf("【information body】:\n");
scanf("%s\n",box.info_summary);
printf("【information send time】:\n");
scanf("%s\n",box.send_time);
printf("【information sender】:\n");
scanf("%s\n",box.sender_name);
if(!box.flag)
box.flag; //"未读"则改变信件状态
return 1;
}
int dele_info(int num;int *count) //删除信件函数
{Rec_Box box; int i,j=*count-num; //j为要删除的信件在数组中的编号
box=userpt->user_info_box[j];
for(i=j;i<*count;i++) //将所选删除信件后面的信件前移
userpt->user_info_box[i]=userpt->user_info_box[i+1];
*count--;
message(INFO,"删除信件成功!",NULL);
message(INFO,"正在返回上一层菜单",WC);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -