📄 function.h
字号:
}
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 + -