功能说明:实现两种权限的身份登陆的教务管理系统 */ #include \"stdio.h\" #include \"stdlib.h\" #include \"string.h\" #include \"time.h\" #include \"memory.h\" #define share \"d:\\share.dat\"
//定义邮件地址
#define manager \"d:\\manager.dat\"
#define outmsg
\"d:\\outmsg.dat\" //定义管理员邮件地址
//定义公告邮件地址 //定义用户登录时间信息 //定义学生起始文件信息
//定义学生成绩信息地址 #define logtimemsg \"d:\\used login time.dat\" #define star_stu
\"d:\\stu_scname.dat\"
#define stu_msg
#define ma_key \"3110008758\" typedef struct student stu; #define sc_num 4
#define uint unsigned int
\"d:\\stu.dat\"
//定义文件头部密码
//只设定4门科目,不允许改动
/*学生成绩管理系统结构*/ struct student {
char num[10]; /*学生学号*/ char name[10]; /*学生姓名*/ uint score[sc_num]; /*科目分数*/ uint average; /*科目平均分*/ stu *next;
}st; char gettemp=0; /*管理员身份识别结构*/ typedef struct username user; struct username { char username[20];// char paword[20]; }use; /*时间登录信息*/ struct Logtime { char userlogin[20]; struct tm; }; char logc;//登录次数
typedef struct Logtime logtime; //============ //定义通讯协议
//============
#define ma_max 200 struct Maage {
//定义信息量
int cont;
//文件数量 char username[15]; //发送人
char ma[ma_max];//信息 }mas; typedef struct Maage maage;
//============ //============ char userlogin[10]; char sc_name[sc_num][10]; /*以上是学生信息*/
char welcome(void);/*用户界面,返回0,则表示退出系统*/ /* ====================== 学生信息操作
====================== */ stu*creat();/*建立链表*/ void display(stu *head);/*显示用户信息*/ void insert(stu *head);/*增加学生信息*/ stu* delname(stu*head,char *stu_name);/*根据学生姓名删除用户信息*/ stu* delnum(stu *head,char *stu_num);/*根据学生学号删除用户信息*/ stu* checkname(stu *head,char *stu_name);/*输出指定学生的信息*/ stu* checknum(stu *head,char *stu_num);/*输出指定学生学号的学生信息*/ void changsc_name(stu *head,char *name);/*修改用户成绩*/ void changsc_num(stu *head,char *num);/*修改用户成绩*/ void waring(void);/*产生警告信息*/ char cheknum(char *num);/*检查学生学号是否符合格式*/ char chekname(char *name);/*检查学生姓名是否符合格式*/ char chekscore(char score);/*检查学生分数是否符合格式*/ stu* sortscore(stu *head);/*学生按平均成绩排序*/ stu* sortnum(stu *head);/*学生信息按学号排序*/ /* ====================== 学生用户登录
====================== */ char stulogin(void);/*进入普通用户登录界面*/ char stucheck(char *nam,char *stnum);/*查找是否存在该学生信息*/ char newlogin(char *nam,char *stnum);/*注册学生信息*/ void disnewst(void);/*获得学生信息*/ /* ====================== 系统管理选择,管理员权限
====================== */ void stu_system(void);/*对各种操作集中管理*/ void sentmsg(void);/*发送公告*/ char readmsg(void);/*浏览信息*/ char delemsg(void);//删除信息
void chagesbject(void);/*修改课程信息*/ /* ====================== 用户登录信息
====================== */ void setlogintime(void);/*记录用户登录时间*/ void dislogintime(void);/*显示用户登录信息*/ void setused(void);/*注册新用户资料*/ char usedcheckname(char *name);/*用户信息检查,若存在用户,则返回1,否则返回0*/ char usedcheckpa(char *name,char *paword);/*查看用户名密码是否符合*/ /* ====================== 存储操作
====================== */ char save(stu *head);/*保存用户数据*/ char disload();/*显示用户信息*/ stu* load(void);/*加载用户数据*/ void clrtxt(char *str);/*清除文本信息*/ char* creat_txt(char *username);/*根据用户名,创建一个用户文件*/ FILE* chekuser(char *username);/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ /* ====================== ---------------main函数---------- ====================== */ void main() {
FILE *fp; char i,j; char name[15]; system(\"color b5\"); memset(name,\'\\0\',sizeof(name)); if((fp=fopen(star_stu ,\"r+\"))==NULL) { printf(\"将新建文件!\\n\"); } fp=fopen(star_stu ,\"w+\"); fread(name,sizeof(name),1,fp); if(strcmp(name,ma_key)!=0) {
printf(\"文件载入出错!\\t N为退出 回车键继续...:\"); i=getchar(); if((i==\'n\')||(i==\'N\')) {
} else { fclose(fp); exit(1);
} else {
} printf(\"\\n\\n数据将重新初始化!\\n\"); printf(\"\\n\\n请输入4门科目名称\\n\"); memset(name,\'\\0\',sizeof(name)); fwrite(name,sizeof(name),5,fp); strcpy(name,ma_key); rewind(fp); fwrite(name,sizeof(name),1,fp); for(i=0;i
} printf(\"\\n\\n第%d门科目名称 : \",i+1); scanf(\"%s\",sc_name[i]);
if(fwrite(sc_name[i],sizeof(sc_name[i]),1,fp)!=1) {
} printf(\"\\n\\n\\t\\t\\t\\t保存出错!\\n\"); getchar(); exit(1);
if(fp==NULL) printf(\"\\n文件错误!\"); fscanf(fp,\"%s%s%s%s\",sc_name[0],sc_name[1],sc_name[2],sc_name[3]); } fclose(fp); fp=fopen(share,\"w\"); fclose(fp); fp=fopen(manager,\"w\"); fclose(fp); fp=fopen(outmsg,\"w\"); fclose(fp); do { j=welcome(); if(j==1) {
system(\"cls\"); printf(\"\\t\\t欢迎进入学生用户中心系统!\"); setlogintime();
//为防止文件在后面打开错误
j=stulogin(); } else if(j==2)
{ setlogintime(); stu_system(); } }while(j!=0);
//为防止文件未关闭,倒置文件内容 fp=fopen(share,\"w\"); 丢失
} fclose(fp); fp=fopen(manager,\"w\"); fclose(fp); fp=fopen(outmsg,\"w\"); fclose(fp); fp=fopen(logtimemsg,\"w\"); fclose(fp); fp=fopen(star_stu,\"w\"); fclose(fp); fp=fopen(stu_msg,\"w\"); fclose(fp); /* ====================== ---------------------------初始化用户界面--------------------------- ====================== */ //返回1,则进入stu用户界面 //返回0,则表示退出
//返回2,则表示进入管理员界面 char welcome(void) { char username[20];
char userpa[20]; char i,wrong_cont=0,key=0,weling=1,back=0; char temp; system(\"color b5\"); while(weling) { do{ system(\"cls\"); printf(\"\\t*********************欢迎进入教务管理系统********************\\n\"); printf(\"\\t*
*\\n\"); printf(\"\\t*
1.用户登录
*\\n\"); printf(\"\\t*
*\\n\"); printf(\"\\t*
2.用户注册
*\\n\"); printf(\"\\t*
*\\n\");
printf(\"\\t*
3.管理员登陆
*\\n\"); printf(\"\\t*
*\\n\"); printf(\"\\t*
4.管理员注册
*\\n\"); printf(\"\\t*
*\\n\"); printf(\"\\t*
5.退出系统
*\\n\"); printf(\"\\t*
*\\n\"); printf(\"\\t===============\\n\"); printf(\"\\t
请按命令提示操作\\n\"); printf(\"\\n\\n\\n\"); printf(\"\\n\\n\\n\"); printf(\"您输入的命令为:\\t\"); i=getchar(); if((i!=\'1\')&&(i!=\'2\')&&(i!=\'3\')&&(i!=\'4\')&&(i!=\'5\')) { printf(\"\\n输入错误的指令!请按命令提示操作 1-3\\n\"); getchar(); } }while((i!=\'1\')&&(i!=\'2\')&&(i!=\'3\')&&(i!=\'4\')&&(i!=\'5\')); switch(i) {
case \'1\': {
system(\"cls\"); memset(username,\'\\0\',sizeof(username)); memset(userpa,\'\\0\',sizeof(userpa)); printf(\"\\n\\t请输入用户名 :\\t\"); scanf(\"%s\",username); printf(\"\\n\\t请输入学号 :\\t\"); scanf(\"%s\",userpa); temp=stucheck(username,userpa); if(temp==0) {
} {
} printf(\"没有学生档案信息!请注册...\\n\"); getchar(); break; else if(temp==1) memset(userlogin,\'\\0\',sizeof(userlogin)); strcpy(userlogin,username);
printf(\"\\n\\t学生成绩登录有效!\"); getchar(); return 1;
getchar(); //======================= break; } case \'2\': {
} system(\"cls\"); memset(username,\'\\0\',sizeof(username)); memset(userpa,\'\\0\',sizeof(userpa)); printf(\"\\n\\t请输入用户名 :\\t\"); scanf(\"%s\",username); printf(\"\\n\\t请输入学号 :\\t\"); scanf(\"%s\",userpa); while(cheknum(userpa)!=1) {
printf(\"您的输入格式有误,请重新输入!\\n\"); printf(\"按回车键继续...\\n\"); getchar(); memset(userpa,\'\\0\',sizeof(userpa)); printf(\"\\n\\t请输入学号 :\\t\"); scanf(\"%s\",userpa); } if(newlogin(username,userpa)) printf(\"\\n\\t注册成功!用户名:%s\\t学号:%s\",username,userpa); getchar(); break; case \'3\': {
do
{
system(\"cls\"); memset(username,\'\\0\',sizeof(username)); memset(userpa,\'\\0\',sizeof(userpa)); printf(\"\\n\\t请输入用户名 :\\t\"); scanf(\"%s\",username); printf(\"\\n\\t请输入密码 :\\t\"); scanf(\"%s\",userpa); if(usedcheckpa(username,userpa)==0) {
wrong_cont++; if(wrong_cont==3) { printf(\"\\n\\t输入次数大于3次!请按回车键退出系统!\\n\");
getchar(); weling=0; return 0; } key=1; printf(\"\\n\\t按1选择返回主菜单\\n\\t按0继续输入用户验证码\\n\"); do {
back=getchar();
if((back!=\'1\')&&(back!=\'0\')) {
}
printf(\"\\n\\t输入错误!按回车键继续...\"); getchar(); }while((back!=\'1\')&&(back!=\'0\')); if(back==\'1\') key=0; } else {
key=0; weling =0; system(\"cls\"); printf(\"\\n\\n\\t\\t欢迎%s进入学生管理系统\\n\",username); memset(userlogin,\'\\0\',sizeof(userlogin)); strcpy(userlogin,username);
//记录用户
登录信息
return 2; } }while(key); back=0; weling=1; break; return 2; } case \'4\': {
} setused();/*注册新管理员资料*/ weling=1; break; case \'5\': { weling=0;
} /*
return 0; }
} } return 1; ====================== ---------------建立链表---------- ====================== */ stu*creat()/*建立链表*/ {
char i,j; char stu_num; stu *p1, *p2; stu *head; FILE *fp; fp=fopen(stu_msg,\"w+\"); head=(stu*)malloc(sizeof(stu)); head->next=NULL; p1=p2=(stu*)malloc(sizeof(stu)); i=0,j=0; system(\"cls\"); printf(\"\\n\\n请输入要录入的学生人数: \"); scanf(\"%d\",&stu_num); for(i=0;i
system(\"cls\"); p1->average=0; printf(\"\\n\\n请输入学生学号: \"); scanf(\"%s\",p1->num); while(!cheknum(p1->num)) { printf(\"\\n\\n输入格式错误!请重新输入学号 : \"); scanf(\"%s\",p1->num); } printf(\"\\n\\n请输入学生姓名 : \"); scanf(\"%s\",p1->name); while(!chekname(p1->name)) { printf(\"\\n\\n输入格式出错!不能带数字或下划线!\\n\");
printf(\"\\n\\n请重新输入学生姓名: \"); scanf(\"%s\",p1->name); }
do
{
printf(\"\\n\\n请输入学生%s成绩 :\",sc_name[j]);
scanf(\"%d\",&p1->score[j]);
while((100 { printf(\"\\n\\n成绩格式出错!\\n \"); getchar(); printf(\"\\n\\n请重新输入学生成绩 : \"); scanf(\"%d\",&p1->score[j]); } p1->average+=p1->score[j]; j++; }while(javerage=p1->average/4; if(i==0) /*分清楚是head->next=p还是 { head->next=p1; head=p*/ p2=p1; } } p1->next=NULL; } else { p2->next=p1; p2=p1; p2->next=NULL; /*产生新的节点*/ } fwrite(p1,sizeof(stu),1,fp); p1=(stu*)malloc(sizeof(stu)); display(head); getchar(); fclose(fp); return head; /* ====================== 检查学生学号是否符合格式,若正确,则返回1,否则返回0 ====================== */ char cheknum(char *num)/*检查学生学号是否符合格式*/ { char i; /*获取字符串长度*/ } char j=strlen(num); for(i=0;i } if((\'0\'>num[i])||(\'9\' } /* ====================== 显示学生成绩情况 ====================== */ void display(stu *head)/*显示用户信息*/ { for(i=0;i } /*if((\'A\'>name[i])||((\'Z\'name[i]))||(\'z\'next; system(\"cls\"); if(p1!=NULL) { while(p1!=NULL) { if(i==0) { printf(\"姓名\\t学号\\t %s\\t %s\\t %s\\t%s\\t 平均\\n\",sc_name[0],sc_name[1],sc_name[2],sc_name[3]); i++; } printf(\"%s\\t%s\\t %d\\t %d\\t%d\\t%d\\t%d\\n\",\\ p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); p1=p1->next; } getchar(); } else { printf(\"\\t\\t\\t链表为空!\\n\\n\\n请按回车键继续...\\n\"); getchar(); } } /* ====================== 插入学生信息 ====================== */ void insert(stu *head)/*增加学生信息*/ { stu *p1,*p2; char j=0; p1=head->next; p2=(stu*)malloc(sizeof(stu)); /*创建新的学生信息*/ p2->average=0; system(\"cls\"); printf(\"\\n\\n请输入要增加的学生学号: \"); scanf(\"%s\",p2->num); while(!cheknum(p2->num)) { 分 printf(\"\\n\\n输入格式错误!请重新输入学号 : \"); scanf(\"%s\",p2->num); } printf(\"\\n\\n请输入学生的姓名 : \"); scanf(\"%s\",p2->name); while(!chekname(p2->name)) { } do { printf(\"\\n\\n请输入学生%s成绩 :\",sc_name[j]); scanf(\"%d\",&p2->score[j]); while((100 { printf(\"\\n\\n成绩格式出错!\\n \"); getchar(); printf(\"\\n\\n请重新输入学生成绩 : \"); scanf(\"%d\",&p2->score[j]); printf(\"\\n\\n输入格式出错!不能带数字或下划线!\\n\"); printf(\"\\n\\n请重新输入学生姓名: \"); scanf(\"%s\",p2->name); } p2->average+=p2->score[j]; j++; }while(javerage=p2->average/4; if(head->next==NULL) { } else { } while(p1->next!=NULL) p1=p1->next; p1->next=p2; p2->next=NULL; printf(\"\\n原链表为空!\"); getchar(); head->next=p2; display(head); getchar(); } /* ====================== 删除学生信息 ====================== */ stu* delname(stu*head,char *stu_name)/*根据学生姓名删除用户信息*/ { stu *p1,*p2; char i,j=0; system(\"cls\"); if(head->next==NULL) { printf(\"\\n\\n没有学生信息!\\t操作错误!\\n\"); return head; } p1=head->next; p2=p1; while(p1!=NULL) { if(strcmp(p1->name,stu_name)==0) { printf(\"\\n\\n你所删除的学生姓名为: %s\\t学号为:%s\\n\",p1->name,p1->num); printf(\"\\n\\n确定为:y,取消为n\\t:\"); i=getchar(); while(!((i==\'y\')||(i==\'Y\')||(i==\'n\')||(i==\'N\'))) { printf(\"\\n\\n输入错误!\\t请重新输入 :\"); } i=getchar(); if((i==\'y\')||(i==\'Y\')) { if(j==0) } { } else { } printf(\"\\n\\n\\t\\t\\t\\t成功删除用户信息!\\n\\n\\t\\t\\t按回车键继续...\\n\"); free(p1); return head; p2->next=p1->next; head->next=p1->next;/*删除头部接点*/ else { return head; } } } j++; p2=p1; p1=p1->next; } printf(\"\\n\\n\\t\\t没有此用户记录信息!\\n按回车键继续\\n\"); getchar(); system(\"cls\"); display(head); getchar(); return head; /* ====================== 删除学生信息(以学号为对象) ====================== */ stu* delnum(stu *head,char *stu_num)/*根据学生学号删除用户信息*/ { stu *p1,*p2; char i,j=0; system(\"cls\"); if(head->next==NULL) { printf(\"\\n\\n\\t\\t没有存储学生信息!\\n\\n\\t\\t操作错误!\\n\"); return head; } p1=head->next; p2=p1; while(p1->next!=NULL) { if(strcmp(p1->num,stu_num)==0) { printf(\"\\n\\n你所删除的学生姓名为: %s\\t学号为:%s\\n\",p1->name,p1->num); printf(\"\\n\\n确定为:y,取消为n\\t:\"); i=getchar(); { } while(!((i==\'y\')||(i==\'Y\')||(i==\'n\')||(i==\'N\'))) printf(\"\\n\\n输入错误!\\t请重新输入 :\"); i=getchar(); } } if((i==\'y\')||(i==\'Y\')) { } if(j==0) { head->next=p1->next; } else { } printf(\"\\n\\n\\t\\t\\t\\t成功删除用户信息!\\n\\n\\t\\t\\t按回车键继续...\\n\"); free(p1); return head; p2->next=p1->next; else return head; } p2=p1; p1=p1->next; j++; printf(\"\\n\\n没有此用户信息!\\n按回车键继续...\\n\"); getchar(); system(\"cls\"); display(head); getchar(); return head; /* ====================== 输出指定学生信息(以学生姓名为对象) ====================== */ stu* checkname(stu *head,char *stu_name)/*输出指定学生的信息*/ { stu *p1; system(\"cls\"); if(head==NULL) { printf(\"\\n\\n\\t\\t没有存储学生信息!\\t操作错误!\\n\"); getchar(); return head; } } p1=head; while(p1->next!=NULL) { if(strcmp(p1->name,stu_name)==0) { printf(\"\\n\\n你所查找的学生信息如下\\n\"); printf(\" \\n\\n%s\\t学号为:%s\\n\",p1->name,p1->num); printf(\"姓名\\t学号\\t\\t %s\\t %s\\t %s\\t%s\\t平均分 \\n\",\\ sc_name[0],sc_name[1],sc_name[2],sc_name[3]); printf(\"%s\\t%s\\t\\t %d\\t %d\\t%d\\t%d\\t%d\\n\",\\ p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); } getchar(); return p1; } p1=p1->next; printf(\"\\n\\n\\t\\t找不到相关用户信息!\\n按回车键继续...\\n\"); getchar(); system(\"cls\"); display(head); getchar(); return (stu*)NULL; /* ====================== 输出指定学生信息(以学生学号为对象) ====================== */ stu* checknum(stu *head,char *stu_num)/*输出指定学生学号的学生信息*/ { stu *p1,*p2; p2=(stu*)malloc(sizeof(stu)); system(\"cls\"); if(head==NULL) { printf(\"\\n\\n\\t\\t没有存储学生信息!\\t操作错误!\\n\"); return head; } p1=head; } while(p1->next!=NULL) { p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); getchar(); return p1; if(strcmp(p1->num,stu_num)==0) { printf(\"\\n\\n你所查找的学生信息如下\\n\"); printf(\" %s\\t学号为:%s\\n\",p1->name,p1->num); printf(\"姓名\\t学号\\t\\t %s\\t %s\\t %s\\t%s\\t平均分 \\n\",\\ sc_name[0],sc_name[1],sc_name[2],sc_name[3]); printf(\"%s\\t%s\\t\\t %d\\t %d\\t%d\\t%d\\t%d\\n\",\\ } p1=p1->next; } printf(\"\\n\\n\\t\\t找不到相关用户信息!\\n按回车键继续...\\n\"); getchar(); return (stu*)NULL; /* ====================== 修改指定学生信息(以学生姓名为对象) ====================== */ void changsc_name(stu *head,char *name)/*修改用户成绩*/ { stu *p; char j=0; system(\"cls\"); p=checkname(head,name); if(p!=NULL) { p->average=0; printf(\"\\n\\n请输入学生新的学号: \"); scanf(\"%s\",p->num); while(!cheknum(p->num)) { printf(\"\\n\\n输入格式错误!请重新输入学号 :\\n \"); scanf(\"%s\",p->num); } do } { printf(\"\\n\\n请输入学生成绩%s :\",sc_name[j]); scanf(\"%d\",&p->score[j]); while((100 { j++; } printf(\"\\n\\n成绩格式出错!\\n \"); getchar(); printf(\"\\n\\n请重新输入学生成绩 : \"); scanf(\"%d\",&p->score[j]); p->average+=p->score[j]; }while(j p->average=p->average/4; printf(\"\\n\\n\\t\\t用户数据更新完毕!\\n请按回车键退出...\\n\"); getchar(); system(\"cls\"); display(head); getchar(); } /* ====================== 修改指定学生信息(以学生学号为对象) ====================== */ void changsc_num(stu *head,char *num)/*修改用户成绩*/ { stu *p2; char j=0; system(\"cls\"); p2=checknum(head,num); if(p2!=NULL) { p2->average=0; printf(\"\\n\\n请输入学生姓名: \"); scanf(\"%s\",p2->name); while(!chekname(p2->name)) { printf(\"\\n\\n输入格式错误!请重新输入学号 : \"); scanf(\"%s\",p2->name); } do { } printf(\"\\n\\n请输入学生成绩%s :\",sc_name[j]); scanf(\"%d\",&p2->score[j]); while((100 { printf(\"\\n\\n成绩格式出错!\\n \"); j++; } getchar(); printf(\"\\n\\n请重新输入学生成绩 : \"); scanf(\"%d\",&p2->score[j]); p2->average+=p2->score[j]; }while(j p2->average=p2->average/4; printf(\"\\n\\n\\t\\t用户数据更新完毕!请按回车键退出...\\n\"); getchar(); } /* ====================== ====================== ============================存储操作类函数========================== ====================== ====================== */ /* ====================== 加载学生信息 ====================== */ stu* load(void)/*加载用户数据*/ { FILE *fp; stu *p,*head,*p1; char i=0,j=0; fp=fopen(stu_msg,\"r\"); rewind(fp); head=(stu*)malloc(sizeof(stu)); p1=p=(stu *)malloc(sizeof(stu)); while(fread(p,sizeof(stu),1,fp)==1) { if(i==0) { head->next=p; p1=p; } } } else { p1->next=p; p1=p; p1->next=NULL; } i++; p=(stu*)malloc(sizeof(stu)); j++; if(j==0) { printf(\"\\n\\n\\t\\t\\t没有数据信息可载入!\\n\"); head=NULL; free(p); getchar(); } fclose(fp); return head; /* ====================== 显示学生信息 ====================== */ char disload()/*显示用户信息*/ { FILE *fp; stu *p1; char i=0; p1=(stu*)malloc(sizeof(stu)); if((fp=fopen(stu_msg,\"r+\"))==NULL)fp=fopen(stu_msg,\"w+\"); rewind(fp); while(fread(p1,sizeof(stu),1,fp)==1) { printf(\"%s\\t%s\\t %d\\t %d\\t%d\\t%d\\t%d\\n\",\\ p1->name,p1->num,p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->average); i++; //fread(p1,sizeof(stu),1,fp); } fclose(fp); if(i==0) } /* { printf(\"\\n\\t\\t\\t文件中不含学生信息!\\n\\t\\t\\t按回车键继续...\\n\"); getchar(); } else { } printf(\"\\n\\t\\t\\t一共记录了%d名学生信息!\\n\\t\\t\\t按回车键继续...\\n\",i); getchar(); ====================== 保存学生信息 ====================== */ char save(stu *head)/*保存用户数据*/ { stu *p; FILE *fp; stu stt; char i=0; p=head->next; system(\"cls\"); clrtxt(stu_msg); fp=fopen(stu_msg,\"w\"); rewind(fp); // if(head->next!=NULL) { while(p!=NULL) { fwrite(p,sizeof(stu),1,fp); p=p->next; i++; } if(i==0) { } else { printf(\"没有保存数据!\\n\"); getchar(); fclose(fp); return 0; } fclose(fp); return 1; } } else { } fclose(fp); return 0; fclose(fp); return 0; /* ====================== 创建文本信息 ====================== */ char* creat_txt(char *username)/*根据用户名,创建一个用户文件*/ { char name[20]; FILE *fp; strcpy(name,\"d:\"); strcat(name,username); strcat(name,\".txt\"); fp=fopen(name,\"w+\"); system(\"cls\"); if(fp!=NULL) { } else { } printf(\"\\n\\n\\t\\t无法创建用户文件!\\n\\n\\t\\t请按回车键继续...\\n\"); getchar(); fclose(fp); return name; //printf(\"\\n\\n文件路径为:%s\\n\\n\",name); //printf(\"\\n\\n\\t\\t用户文件创建成功!\\n\\n\\t\\t请按回车键继续...\\n\"); //getchar(); fclose(fp); return name; } /* ====================== 清除文本信息 ====================== */ FILE* chekuser(char *username)/*根据用户名,查找是否有此用户信息,若无,返回NULL*/ { } /* ====================== 清除文本信息 ====================== */ void clrtxt(char *str)/*清除文本信息*/ { char clrmem[10]; char semem[40]; FILE *fp; int i=0,j=0; if((fp=fopen(str,\"r\"))==NULL) { printf(\"\\n\\t无此文件!\"); getchar(); } else { fclose(fp); fp=fopen(str,\"w\"); memset(clrmem,\'\\0\',sizeof(clrmem)); rewind(fp); for(i=0;i if(fwrite(clrmem,sizeof(clrmem),1,fp)!=1) { if(j==0) { printf(\"\\n\\n\\t\\t文件清除失败!\\n\\n\\t\\t请按回车键继续...\\n\"); getchar(); break; } else { //printf(\"\\n\\n\\t\\t文件清除成功!\\n\\n\\t\\t请按回车键继续...\\n\"); //getchar(); break; } /* } } } else j++; } fclose(fp); ====================== 用户登录信息 ====================== */ void setlogintime(void)/*记录用户登录时间*/ { FILE *fp; int y,m,d,hour,min,sec; time_t T; struct tm *timeinfo; // 一个可以包含时间信息的长整型 // 得到机器的日历时间 time( &T ); if((fp=fopen(logtimemsg,\"a+\"))==NULL) { fp=fopen(logtimemsg,\"w\"); } time( &T ); // 得到机器的日历时间 timeinfo = localtime( &T ); 时间格式的指针 } /* // 将日历时间转换为当地时间,timeinfo 是一个// 年份 // 月份 // 日期 y=timeinfo->tm_year + 1900; m=timeinfo->tm_mon + 1; d=timeinfo->tm_mday; hour=timeinfo->tm_hour; min=timeinfo->tm_min; sec=timeinfo->tm_sec; fwrite(userlogin,sizeof(userlogin),1,fp); fwrite(timeinfo,sizeof(struct tm),1,fp);//写入用户登陆信息 printf(\"\\n\\n\\n\\t\\t登陆时间为:\\n\\t\\t%d年 %d月 %d日 %d时 %d分 %d秒\\n\\n\\n\", y, m, fclose(fp); d,hour,min,sec); ====================== 用户登录信息 ====================== */ void dislogintime(void)/*显示用户登录信息*/ { FILE *fp; int y,m,d,hour,min,sec; struct tm *timeinfo; char name[10]; int i=0; timeinfo=(struct tm*)malloc(sizeof(struct tm)); fp=fopen(logtimemsg,\"r+\"); if(fp==NULL) { } else { memset(name,\'\\0\',sizeof(name)); while(fread(name,sizeof(name),1,fp)==1) { fread(timeinfo,sizeof(struct tm),1,fp); y=timeinfo->tm_year + 1900; m=timeinfo->tm_mon + 1; d=timeinfo->tm_mday; hour=timeinfo->tm_hour; min=timeinfo->tm_min; sec=timeinfo->tm_sec; // 年份ins // 月份 // 日期 printf(\"\\n\\n\\t\\t找不到文件信息!\\n\\n\\t\\t按回车键继续...\\n\"); getchar(); i++; printf(\"\\n\\t第%d次登陆时间为:%d年 %d月 %d日 %d时 %d分 %d秒\\t%s用户登录\",i,y, m, d,hour,min,sec,name); } memset(name,\'\\0\',sizeof(name)); } if(i==0) printf(\"\\n没有记录用户登录时间!\\n\"); getchar(); free(timeinfo); fclose(fp); } /* ====================== 用户登录信息 ====================== */ void setused(void)/*注册新用户资料*/ { FILE *fp; char chekpaword[20]; char lgway[20]; char i=0; system(\"cls\"); memset(use.paword,\'\\0\',sizeof(use.paword)); memset(chekpaword,\'\\0\',sizeof(chekpaword)); memset(use.username,\'\\0\',sizeof(use.username)); do{ printf(\"\\n\\n请输入用户名:\\t\"); scanf(\"%s\",use.username); printf(\"\\n\\n请输入用户密码:\\t\"); scanf(\"%s\",use.paword); printf(\"\\n\\n请再次输入密码:\\t\"); scanf(\"%s\",chekpaword); if(strcmp(use.paword,chekpaword)!=0) { printf(\"\\n\\n\\t\\t密码不匹配!\\n按回车键继续\\n\"); getchar(); i=1; memset(use.paword,\'\\0\',sizeof(use.paword)); memset(chekpaword,\'\\0\',sizeof(chekpaword)); memset(use.username,\'\\0\',sizeof(use.username)); //10检查用户密码输入 } else i=0; } while(i); strcpy(lgway,creat_txt(use.username)); clrtxt(lgway); fp=fopen(lgway,\"w+\"); if(fp!=NULL) { rewind(fp);/*清除文本信息*/ if(fwrite(&use,sizeof(use),1,fp)==1) { rewind(fp); memset(use.username,\'\\0\',sizeof(use.username)); memset(use.paword,\'\\0\',sizeof(use.paword)); fscanf(fp,\"%s%s\",use.username,use.paword);/////////////////////////////////此处写有问题! //fread(&use,sizeof(use),1,fp); //printf(\"您保存的用户名为:%s\\n\",use.username); } /* } else { } else { //printf(\"您保存的密码是:%s\\n\",use.paword); //printf(\"\\n\\n\\t\\t数据保存成功!\\n按回车键继续...\\n\"); //getchar(); fclose(fp); printf(\"\\n数据保存失败!\\n按回车键继续...\\n\"); getchar(); fclose(fp); } printf(\"\\n用户注册失败!\\n按回车键继续...\\n\"); getchar(); fclose(fp); } fclose(fp); ====================== 用户登录信息 ====================== */ char usedcheckname(char *username)/*用户信息检查*/ { char name[20]; FILE *fp; system(\"color b5\"); strcpy(name,\"d:\"); strcat(name,username); strcat(name,\".txt\"); fp=fopen(name,\"r+\"); rewind(fp); if(fp!=NULL) { } else { printf(\"\\n\\n\\t\\t用户名输入错误!\\n\\n\\t\\t请按回车键继续...\\n\"); getchar(); fclose(fp); return 1; return 0; } } /* ====================== 检查输入密码是否正确 ====================== */ char usedcheckpa(char *user,char *pa)/*查看用户名密码是否符合*/ { char filename[20]; FILE *fp; memset(filename,\'\\0\',sizeof(filename)); strcpy(filename,\"d:\"); strcat(filename,user); strcat(filename,\".txt\"); if((fp=fopen(filename,\"r\"))==NULL) { printf(\"\\n操作错误!不存在此用户!\\n\"); getchar(); return 0; } //printf(\"\\n文件名为:%s\\n\",filename); getchar(); memset(use.username,\'\\0\',sizeof(use.username)); memset(use.paword,\'\\0\',sizeof(use.paword)); if(fp==NULL) { printf(\"\\n\\n\\t\\t用户名错误!\\n\\n\\t\\t请按回车键继续...\\n\"); getchar(); fclose(fp); return 0; } rewind(fp); fread(&use,sizeof(use),1,fp); //printf(\"用户名:%s\\t密码:%s\\n\",use.username,use.paword); //getchar(); if(strcmp(use.paword,pa)==0) { system(\"cls\"); printf(\"\\n\\n\\t\\t密码输入正确!\\n\\n\\t\\t请按回车键继续...\\n\"); getchar(); fclose(fp); return 1; } /* } else { printf(\"\\n\\n\\t\\t密码输入错误!\\n\\n\\t\\t请按回车键继续...\\n\"); getchar(); } fclose(fp); return 0; ====================== 系统管理选择 ====================== */ void stu_system(void)/*对各种操作集中管理*/ { FILE *fp; stu *head,*temp_str; char menue[8],reg[8],temp[10]; char key=0,i=0,quet=0,insert_num; char str3[10]; char loginout=0; system(\"color b4\"); head=load(); do { quet=0; loginout=0; system(\"color b5\"); getchar(); while(head==NULL) { } while(!quet) { do{ system(\"cls\"); printf(\"\\t\\t学生成绩管理系统\\t\\t\\t管理员%s登录\\n\",userlogin); printf(\"\\t==============\\n\"); printf(\"\\t||\\t\\t0.修改课程信息\\n\"); system(\"cls\"); printf(\"数表为空,请至少输入一个学生信息!\\n\"); head=creat(); printf(\"\\t||\\n\"); printf(\"\\t||\\t\\t1.查看学生信息\\t\\t2.增加学生信息\\n\"); printf(\"\\t||\\n\"); printf(\"\\t||\\t\\t3.删除学生信息\\t\\t4.修改学生信息\\n\"); printf(\"\\t||\\n\"); printf(\"\\t||\\t\\t5.查找学生信息\\t\\t6.广播信息管理\\n\"); printf(\"\\t||\\n\"); printf(\"\\t||\\t\\t7.历史登录信息\\t\\t8.注销用户信息\\n\"); printf(\"\\t||\\n\"); printf(\"\\t||\\t\\t9.整理学生信息\\t\\ta.退出系统\\n\"); printf(\"\\t==============\\n\"); printf(\"\\t\\t\\t\\t\\t\\t请按命令操作\\n\"); printf(\"您输入的命令是:\\t\"); i=getchar(); if(!((i>=\'0\')||(i=\'0\')||(i case \'0\': { chagesbject(); break; } case \'1\': { } system(\"cls\"); printf(\"姓名\\t学号\\t %s\\t %s\\t %s\\t%s\\t平均分 \\n\",\\ sc_name[0],sc_name[1],sc_name[2],sc_name[3]); disload(head); printf(\"\\n\\n\\t\\t按回车键返回...\\n\\n\"); getchar(); break; case \'2\': { system(\"cls\"); printf(\"\\n请输入要增加学生的个数:\\t\"); scanf(\"%d\",&insert_num); for(temp[2]=0;temp[2] break; } case \'3\': { do { system(\"cls\"); display(head); printf(\"\\t==============================\"); printf(\"\\n\\t请输入删除方式:\\t\"); printf(\"\\n\\t1.以学号方式\"); printf(\"\\n\\t2.以姓名方式\"); printf(\"\\n\\t3.退出\"); printf(\"\\n\\t==============================\"); printf(\"\\n\"); printf(\"您的选择是: \\t\"); temp[3]=getchar(); if(!((temp[3]==\'1\')||(temp[3]==\'2\')||(temp[3]==\'3\'))) { printf(\"\\n您的输入格式不正确,请重新输入!\\n按回车键继续...\"); getchar(); } }while(!((temp[3]==\'1\')||(temp[3]==\'2\')||(temp[3]==\'3\'))); if(temp[3]==\'1\') { } else { memset(str3,\'\\0\',sizeof(str3)); printf(\"\\n请输入您要删除的学生姓名:\\t\"); scanf(\"%s\",str3); head=delname(head,str3); system(\"cls\"); display(head); save(head); getchar(); memset(str3,\'\\0\',sizeof(str3)); printf(\"\\n请输入您要删除的学生学号:\\t\"); scanf(\"%s\",str3); head=delnum(head,str3); system(\"cls\"); display(head); save(head); getchar(); } break; } case \'4\': { do { system(\"cls\"); display(head); printf(\"==============================\"); printf(\"\\n\\t请输入修改方式:\\t\"); printf(\"\\n\\t1.以学号方式\"); printf(\"\\n\\t2.以姓名方式\"); printf(\"\\n\\t3.退出\"); printf(\"\\n==============================\"); printf(\"\\n\\n\\n\\n\\n\"); printf(\"您的选择是: \\t\"); temp[4]=getchar(); if(!((temp[4]==\'1\')||(temp[4]==\'2\')||(temp[4]==\'3\'))) { printf(\"\\n您的输入格式不正确,请重新输入!\\n按回车键继续...\"); getchar(); } }while(!((temp[4]==\'1\')||(temp[4]==\'2\')||(temp[4]==\'3\'))); if(temp[4]==\'1\') { } memset(str3,\'\\0\',sizeof(str3)); printf(\"\\n请输入您要修改的学生学号:\\t\"); scanf(\"%s\",str3); changsc_num(head,str3); save(head); else if(temp[4]==\'2\') { memset(str3,\'\\0\',sizeof(str3)); printf(\"\\n请输入您要修改的学生姓名:\\t\"); scanf(\"%s\",str3); changsc_name(head,str3); save(head); } break; } case \'5\': { } { do { system(\"cls\"); printf(\"\\t==============================\"); printf(\"\\n\\t\\t请输入查找方式:\\t\"); printf(\"\\n\\t\\t1.以学号方式\"); printf(\"\\n\\t\\t2.以姓名方式\"); printf(\"\\n\\t\\t3.退出\"); printf(\"\\t\\n==============================\"); printf(\"\\n\"); printf(\"您的选择是: \\t\"); temp[5]=getchar(); if(!((temp[5]==\'1\')||(temp[5]==\'2\')||(temp[5]==\'3\'))) { printf(\"\\n您的输入格式不正确,请重新输入!\\n按回车键继续...\"); getchar(); } }while(!((temp[5]==\'1\')||(temp[5]==\'2\')||(temp[5]==\'3\'))); if(temp[5]==\'1\') { memset(str3,\'\\0\',sizeof(str3)); printf(\"\\n请输入您要查找的学生学号:\\t\"); scanf(\"%s\",str3); checknum(head,str3); getchar(); } else if(temp[5]==\'2\') { memset(str3,\'\\0\',sizeof(str3)); printf(\"\\n请输入您要查找的学生姓名:\\t\"); scanf(\"%s\",str3); checkname(head,str3); getchar(); } break; case \'6\': do { system(\"cls\"); printf(\"\\t==============================\"); printf(\"\\n\\t请输入信息管理操作:\\n\"); printf(\"\\n\\t1.发布公告\\n\"); } printf(\"\\n\\t2.删除信息\\n\"); printf(\"\\n\\t3.查看信息\\n\"); printf(\"\\n\\t4.退出\"); printf(\"\\n\\t==============================\"); printf(\"\\n\"); printf(\"您的选择是: \\t\"); temp[6]=getchar(); if(!((temp[6]>\'0\')&&(temp[6] printf(\"\\n您的输入格式不正确,请重新输入!\\n按回车键继续...\"); getchar(); } }while(!((temp[6]>\'0\')&&(temp[6] case \'1\': { sentmsg(); break; } case \'2\': { } while(delemsg()); break; case \'3\': { } while(readmsg()); break; case \'4\': { } break; //disload(); break; } break; case \'7\': { system(\"cls\"); dislogintime(); getchar(); getchar(); break; } case \'8\': { } case \'9\': { do { system(\"cls\"); printf(\"\\t==============================\"); printf(\"\\n\\t请输入信息管理操作:\\n\"); printf(\"\\n\\t1.学号排序\\n\"); printf(\"\\n\\t2.平均分信息\\n\"); printf(\"\\n\\t3.退出\"); printf(\"\\n\\t==============================\"); printf(\"\\n\"); printf(\"您的选择是: \\t\"); temp[9]=getchar(); if(!((temp[9]>\'0\')&&(temp[9] //先退出系统,然后进入用户登录界面 } }while(!((temp[9]>\'0\')&&(temp[9] case \'1\': { head=sortnum(head); save(head); disload(head); getchar(); break; } case \'2\': { } } } head=sortscore(head); save(head); disload(head); getchar(); break; break; case \'a\': { } quet=1; loginout=0; do { system(\"cls\"); printf(\"\\n\\n\\t您将退出教务管理系统...\\n\"); printf(\"\\n\\n\\tY:确认退出\\t\\tN:返回\\n\"); printf(\"\\n\\n\\n\"); printf(\"您的选择是:\\t\"); i=getchar(); if(!((i==\'y\')||(i==\'Y\')||(i==\'n\')||(i==\'N\'))) { printf(\"\\n您的输入有误!请按回车键继续...\"); getchar(); menue[7]=1; } else menue[7]=0; } while(menue[7]); if((i==\'N\')||(i==\'n\')) quet=0; break; } } if(quet==1) { } }while(loginout); } /* ====================== 学生用户登录 ====================== */ char stulogin(void)/*进入普通用户登录界面*/ { char temp[6];//定义数据项的变量 int tem[6]; char going[6]; FILE *fp; maage *msg;//定义信息载体 char key,i,logout=0; while(!logout) { do { system(\"cls\"); printf(\" %s学生登录\\n\",userlogin); printf(\"\\t=============================================\\n\"); printf(\"\\t\\t欢迎进入学生信息中心\\n\"); printf(\"\\n\"); printf(\"\\t\\t1.查看学生信息\\n\"); printf(\"\\n\"); printf(\"\\t\\t2.给管理员留言\\n\"); printf(\"\\n\"); printf(\"\\t\\t3.查看广播\\n\"); printf(\"\\n\"); printf(\"\\t\\t4.发送广播\\n\"); printf(\"\\n\"); printf(\"\\t\\t5.查看公告\\n\"); printf(\"\\n\"); printf(\"\\t\\t6.注销用户\\n\"); printf(\"\\t=============================================\\n\"); printf(\" 请按数字进行菜单选择\\n\"); printf(\"\\n您的选择是:\\t\"); key=getchar(); if(!((key>\'0\')&&(key } printf(\"\\n您的输入有误,请重新输入!\"); printf(\"\\n\\n请按回车键继续...\"); getchar(); //如果不是选择退出 }while(!((key>\'0\')&&(key } case \'2\': { system(\"cls\"); msg=(maage*)malloc(sizeof(maage)); memset(msg->username,\'\\0\',sizeof(msg->username));//清除数组内容 strcpy(msg->username,\"学生\"); strcpy(msg->username,userlogin); //加载用户名 printf(\"\\n您最大能留言的字数不超过ma_max个英文字符\"); printf(\"\\n\\n\\t请输入您要留言的信息,按回车键结束:\\t\"); scanf(\"%s\",msg->ma); fp=fopen(manager,\"a+\"); fwrite(msg,sizeof(maage),1,fp); fclose(fp); printf(\"\\n留言成功!按回车键继续...\"); getchar(); getchar(); free(msg); //结束操作 disnewst(); getchar(); getchar(); break; //显示学生信息 break; } case \'3\': { system(\"cls\"); msg=(maage*)malloc(sizeof(maage)); fp=fopen(share,\"r\"); memset(msg,\'\\0\',sizeof(maage));//清除信息内容 going[5]=1; rewind(fp); while((fread(msg,sizeof(maage),1,fp)!=0)) { printf(\"%s用户:\\t\",msg->username); printf(\"%s:\\n\\n\",msg->ma); //结束操作 } fclose(fp); printf(\"\\n退出成功!按回车键继续...\"); } getchar(); getchar(); free(msg); break; case \'4\': { } system(\"cls\"); msg=(maage*)malloc(sizeof(maage)); memset(msg->username,\'\\0\',sizeof(msg->username));//清除数组内容 strcpy(msg->username,\"学生\"); strcpy(msg->username,userlogin); //加载用户名 system(\"cls\"); printf(\"\\n\\t您最大能留言的字数不能超过200个英文字符\"); printf(\"\\n\\n请输入您要留言的信息,按回车键结束:\\t\"); scanf(\"%s\",msg->ma); fp=fopen(share,\"a+\"); fwrite(msg,sizeof(maage),1,fp); fclose(fp); //结束操作 printf(\"\\n信息发送成功!按回车键继续...\"); getchar(); getchar(); free(msg); break; case \'5\': { system(\"cls\"); msg=(maage*)malloc(sizeof(maage)); fp=fopen(outmsg,\"r\"); memset(msg,\'\\0\',sizeof(maage));//清除信息内容 going[5]=1; rewind(fp); while((fread(msg,sizeof(maage),1,fp)!=0)) { printf(\"%s用户:\\t\",msg->username); printf(\"%s:\\n\\n\",msg->ma); //结束操作 } fclose(fp); printf(\"\\n退出成功!按回车键继续...\"); getchar(); getchar(); free(msg); break; } } } } case \'6\': { system(\"cls\"); do{ } printf(\"\\n\\t\\t您将退出学生用户中心\\n\"); printf(\"\\n\\t\\tY:确认\\tN:取消\"); printf(\"\\n\\n您的选择是:\\t\"); temp[5]=getchar(); }while(!((temp[5]==\'y\')||(temp[5]==\'Y\')||(temp[5]==\'n\')||(temp[5]==\'N\'))); if(temp[5]==\'y\'||temp[5]==\'Y\') { } return 1; break; /* ====================== 学生用户登录返回0,则说明文件不存在,返回1,则说明找到用户信息,返回2,说明刚注册了该用户信息 ====================== */ char stucheck(char *nam,char *stnum)/*查找是否存在该学生信息*/ { FILE *fp; /*用于打开用户数据库*/ stu *st; /*目的用于寻找学生信息*/ st=(stu*)malloc(sizeof(stu)); fp=fopen(stu_msg,\"r\"); if(fp==NULL) { } rewind(fp); while((fread(st,sizeof(stu),1,fp))==1) { if((strcmp(st->name,nam)==0)&&(strcmp(st->num,stnum)==0)) /*核实用户名和学号printf(\"\\n\\t\\t没有用户数据!请重新注册用户信息...\"); getchar(); return 0; 是否正确*/ { memset(userlogin,\'\\0\',sizeof(userlogin)); } strcpy(userlogin,st->name); /*存在该学生用户,保存用户姓名*/ } printf(\"\\n\\t\\t用户存在!请按回车键继续...\"); getchar(); fclose(fp); return 1; /*关闭学生文件*/ /*操作成功*/ if(strcmp(st->name,nam)==0) { } printf(\"\\n\\t\\t用户名存在,学号错误!请按回车键继续...\\n\"); getchar(); fclose(fp); return 2; } fclose(fp); printf(\"\\n\\t\\t学生用户不存在\\n\"); getchar(); return 3; /* ====================== 学生用户登录返回0,则说明文件不存在,返回1,则说明找到用户信息,返回2,说明刚注册了该用户信息 ====================== */ char newlogin(char *nam,char *stnum)/*注册学生信息*/ { char i=0; FILE *fp; stu *st; st=(stu*)malloc(sizeof(stu)); i=stucheck(nam,stnum); switch(i) { case 0: { fp=fopen(stu_msg,\"w\"); printf(\"\\n\\t\\t%s信息将被注册...\",nam); getchar(); memset(st->num,\'\\0\',sizeof(st->num)); memset(st->name,\'\\0\',sizeof(st->name)); /*对数据进行清零*/ /*对数据进行清零*/ strcpy(st->name,nam); strcpy(st->num,stnum); st->score[0]=0; st->score[1]=0; st->score[2]=0; st->score[3]=0; st->average=0; fwrite(st,sizeof(stu),1,fp); fclose(fp); return 1; } case 1: { return 0; break; } case 2: { return 0; break; } case 3: { memset(userlogin,\'\\0\',sizeof(userlogin)); strcpy(userlogin,st->name); fp=fopen(stu_msg,\"a\"); printf(\"\\n\\t\\t%s信息将被注册...\"); memset(st->num,\'\\0\',sizeof(st->num)); memset(st->name,\'\\0\',sizeof(st->name)); strcpy(st->name,nam); strcpy(st->num,stnum); st->score[0]=0; st->score[1]=0; st->score[2]=0; st->score[3]=0; st->average=0; fwrite(st,sizeof(stu),1,fp); fclose(fp); return 1; } default :return 0; } } /*保存学生信息*/ /*对数据进行清零*/ /*对数据进行清零*/ /*保存学生信息*/ /* ====================== 显示学生用户信息 ====================== */ void disnewst(void)/*获得学生信息*/ { stu *p; FILE *fp; char temp,full=0; printf(\"姓名\\t学号\\t %s\\t %s\\t %s\\t%s\\t平均分 \\n\",\\ sc_name[0],sc_name[1],sc_name[2],sc_name[3]); fp=fopen(stu_msg,\"r\"); p=(stu*)malloc(sizeof(stu)); do { if(fread(p,sizeof(stu),1,fp)==1) { if(strcmp(userlogin,p->name)==0) { full=1; /*已找到用户信息*/ /*退出循环*/ } else { temp=0; full =0; temp =1; } } else { temp=0; } }while(temp); if(full==1) { printf(\"%s\\t%s\\t %d\\t %d\\t%d\\t%d\\t%d\\n\",\\ p->name,p->num,p->score[0],p->score[1],p->score[2],p->score[3],p->average); } getchar(); else { printf(\"\\n\\n\\t\\t找不到学生用户信息!按回车键继续...\"); } /* getchar(); getchar(); } fclose(fp); /*关闭文件信息*/ ====================== 发送公告 ====================== */ void sentmsg(void)/*发送公告*/ { } /* ====================== 浏览公告 ====================== */ char readmsg(void)/*浏览信息*/ { FILE *fp; maage *msg; FILE *fp; maage *msg; int i=0; fp=fopen(outmsg,\"a+\"); if(fp==NULL) { } fp=fopen(outmsg,\"w+\"); msg=(maage*)malloc(sizeof(maage)); system(\"cls\"); printf(\"\\n\\n请输入您要公布的信息,按回车键结束:\\t\"); memset(msg,\'\\0\',sizeof(maage));//清除 scanf(\"%s\",msg->ma); strcpy(msg->username,\"管理员\"); strcpy(msg->username,userlogin); fwrite(msg,sizeof(maage),1,fp); printf(\"\\n\\n公告发布成功!\"); getchar(); getchar(); free(msg); fclose(fp); int i=0; char key=0; char chose,temp=1; do{ system(\"cls\"); printf(\"======================================\\n\"); printf(\"请输入您要浏览的信息:\"); printf(\" \\n\"); printf(\"1.管理员邮箱\\n\"); printf(\"\\n\"); printf(\"2.学生共享信息\\n\"); printf(\"\\n\"); printf(\"3.公告邮箱信息\\n\"); printf(\"\\n\"); printf(\"4.退出\"); printf(\"\\n======================================\\n\"); printf(\"\\t\\t\\t\\t请按照提示选择\\n\\n\"); printf(\"\\n\\n您的选择是:\\t\"); key=getchar(); if(!((key>\'0\')&&(key\'0\')&&(key case \'1\': { fp=fopen(manager,\"r\"); msg=(maage*)malloc(sizeof(maage)); memset(msg,\'\\0\',sizeof(maage)); rewind(fp); while((fread(msg,sizeof(maage),1,fp)==1)) { } printf(\"%s用户:\\t\",msg->username); printf(\"%s\\n\",msg->ma); memset(msg,\'\\0\',sizeof(maage)); getchar(); getchar(); free(msg); fclose(fp); return 1; break; } case \'2\': { msg=(maage*)malloc(sizeof(maage)); } fp=fopen(share,\"r\"); memset(msg,\'\\0\',sizeof(maage));//清除信息内容 rewind(fp); while((fread(msg,sizeof(maage),1,fp))!=0) { printf(\"%s用户:\\t\",msg->username); printf(\"%s:\\n\\n\",msg->ma); } fclose(fp); printf(\"\\n\\n信息读取完毕!按回车键继续...\");//结束操作 getchar(); getchar(); free(msg); return 1; break; case \'3\': { fp=fopen(outmsg,\"r\"); msg=(maage*)malloc(sizeof(maage)); memset(msg,\'\\0\',sizeof(maage)); rewind(fp); while((fread(msg,sizeof(maage),1,fp)==1)&&temp) { printf(\"%s用户:\\t\",msg->username); printf(\"%s\\n\",msg->ma); memset(msg,\'\\0\',sizeof(maage)); } getchar(); getchar(); free(msg); fclose(fp); return 1; break; } case \'4\': { return 0; break; } /* } } ====================== 浏览公告 ====================== */ char delemsg(void)//删除信息 { FILE *fp; maage *msg; int i=0; char key=0; char chose,temp=1; do{ system(\"cls\"); printf(\"======================================\\n\"); printf(\"请输入您要删除的信息:\"); printf(\" \\n\"); printf(\"1.管理员邮箱\\n\"); printf(\"\\n\"); printf(\"2.学生共享信息\\n\"); printf(\"\\n\"); printf(\"3.公告信息\\n\"); printf(\"\\n\"); printf(\"4.退出\"); printf(\"\\n======================================\\n\"); printf(\"\\t\\t\\t\\t请按照提示选择\\n\\n\"); printf(\"\\n\\n您的选择是:\\t\"); key=getchar(); if(!((key>\'0\')&&(key printf(\"\\n您的输入有误,请按回车键继续...\\n\"); getchar(); } }while(!((key>\'0\')&&(key