《2023年C语言课程设计报告——教务管理系统.docx》由会员分享,可在线阅读,更多相关《2023年C语言课程设计报告——教务管理系统.docx(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023年C语言课程设计报告教务管理系统 功能说明:实现两种权限的身份登陆的教务管理系统 */ #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 logtimem
2、sg 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 num10; /*学生学号*/ char name10; /*学生姓名*/ uint scoresc_num; /*
3、科目分数*/ uint average; /*科目平均分*/ stu *next; st; char gettemp=0; /*管理员身份识别结构*/ typedef struct username user; struct username char username20;/ char paword20; use; /*时间登录信息*/ struct Logtime char userlogin20; struct tm; ; char logc;/登录次数 typedef struct Logtime logtime; /= /定义通讯协议 /= #define ma_max 200 st
4、ruct Maage /定义信息量 int cont; /文件数量 char username15; /发送人 char mama_max;/信息 mas; typedef struct Maage maage; /= /= char userlogin10; char sc_namesc_num10; /*以上是学生信息*/ char welcome(void);/*用户界面,返回0,则表示退出系统*/ /* = 学生信息操作 = */ stu*creat();/*建立链表*/ void display(stu *head);/*显示用户信息*/ void insert(stu *head)
5、;/*增加学生信息*/ 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
6、(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(v
7、oid);/*进入普通用户登录界面*/ 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 cha
8、gesbject(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)
9、;/*保存用户数据*/ 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 name15; system(color b5); memset
10、(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(nn数据将重新初始化!n); printf(nn请输入4门科目名称n); memset(name,0,
11、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(nn第%d门科目名称 : ,i+1); scanf(%s,sc_namei); if(fwrite(sc_namei,sizeof(sc_namei),1,fp)!=1) printf(nntttt保存出错!n); getchar(); exit(1); if(fp=NULL) printf(n文件错误!); fscanf(fp,%s%s%s
12、%s,sc_name0,sc_name1,sc_name2,sc_name3); 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(tt欢迎进入学生用户中心系统!); setlogintime(); /为防止文件在后面打开错误 j=stulogin(); else if(j=2) setlogintime(); stu_system(); wh
13、ile(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 we
14、lcome(void) char username20; char userpa20; 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); pri
15、ntf(t* 4.管理员注册 *n); printf(t* *n); printf(t* 5.退出系统 *n); printf(t* *n); printf(t=n); printf(t 请按命令提示操作n); printf(nnn); printf(nnn); printf(您输入的命令为:t); i=getchar(); if(i!=1)&(i!=2)&(i!=3)&(i!=4)&(i!=5) printf(n输入错误的指令!请按命令提示操作 1-3n); getchar(); while(i!=1)&(i!=2)&(i!=3)&(i!=4)&(i!=5); switch(i) case
16、1: system(cls); memset(username,0,sizeof(username); memset(userpa,0,sizeof(userpa); printf(nt请输入用户名 :t); scanf(%s,username); printf(nt请输入学号 :t); scanf(%s,userpa); temp=stucheck(username,userpa); if(temp=0) printf(没有学生档案信息!请注册.n); getchar(); break; else if(temp=1) memset(userlogin,0,sizeof(userlogin)
17、; strcpy(userlogin,username); printf(nt学生成绩登录有效!); getchar(); return 1; getchar(); /= break; case 2: system(cls); memset(username,0,sizeof(username); memset(userpa,0,sizeof(userpa); printf(nt请输入用户名 :t); scanf(%s,username); printf(nt请输入学号 :t); scanf(%s,userpa); while(cheknum(userpa)!=1) printf(您的输入格式
18、有误,请重新输入!n); printf(按回车键继续.n); getchar(); memset(userpa,0,sizeof(userpa); printf(nt请输入学号 :t); scanf(%s,userpa); if(newlogin(username,userpa) printf(nt注册成功!用户名:%st学号:%s,username,userpa); getchar(); break; case 3: do system(cls); memset(username,0,sizeof(username); memset(userpa,0,sizeof(userpa); prin
19、tf(nt请输入用户名 :t); scanf(%s,username); printf(nt请输入密码 :t); scanf(%s,userpa); if(usedcheckpa(username,userpa)=0) wrong_cont+; if(wrong_cont=3) printf(nt输入次数大于3次!请按回车键退出系统!n); getchar(); weling=0; return 0; key=1; printf(nt按1选择返回主菜单nt按0继续输入用户验证码n); do back=getchar(); if(back!=1)&(back!=0) printf(nt输入错误!
20、按回车键继续.); getchar(); while(back!=1)&(back!=0); if(back=1) key=0; else key=0; weling =0; system(cls); printf(nntt欢迎%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();/*注册新管理员资料*
21、/ 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(nn请输入要录入的学生人数: );
22、 scanf(%d,&stu_num); for(i=0;i system(cls); p1-average=0; printf(nn请输入学生学号: ); scanf(%s,p1-num); while(!cheknum(p1-num) printf(nn输入格式错误!请重新输入学号 : ); scanf(%s,p1-num); printf(nn请输入学生姓名 : ); scanf(%s,p1-name); while(!chekname(p1-name) printf(nn输入格式出错!不能带数字或下划线!n); printf(nn请重新输入学生姓名: ); scanf(%s,p1-na
23、me); do printf(nn请输入学生%s成绩 :,sc_namej); scanf(%d,&p1-scorej); while(100scorej)|(p1-scorej printf(nn成绩格式出错!n ); getchar(); printf(nn请重新输入学生成绩 : ); scanf(%d,&p1-scorej); p1-average+=p1-scorej; j+; while(javerage=p1-average/4; if(i=0) /*分清楚是head-next=p还是 head-next=p1; head=p*/ p2=p1; p1-next=NULL; else
24、 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(0numi)|(9 /* =
25、显示学生成绩情况 = */ void display(stu *head)/*显示用户信息*/ for(i=0;i /*if(Anamei)|(Znamei)|(znext; system(cls); if(p1!=NULL) while(p1!=NULL) if(i=0) printf(姓名t学号t %st %st %st%st 平均n,sc_name0,sc_name1,sc_name2,sc_name3); i+; printf(%st%st %dt %dt%dt%dt%dn, p1-name,p1-num,p1-score0,p1-score1,p1-score2,p1-score3,
26、p1-average); p1=p1-next; getchar(); else printf(ttt链表为空!nnn请按回车键继续.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(nn请输入要增加的学生学号: ); scanf(%s,p2-num); while(!cheknum(p2-n
27、um) 分 printf(nn输入格式错误!请重新输入学号 : ); scanf(%s,p2-num); printf(nn请输入学生的姓名 : ); scanf(%s,p2-name); while(!chekname(p2-name) do printf(nn请输入学生%s成绩 :,sc_namej); scanf(%d,&p2-scorej); while(100scorej)|(p2-scorej printf(nn成绩格式出错!n ); getchar(); printf(nn请重新输入学生成绩 : ); scanf(%d,&p2-scorej); printf(nn输入格式出错!不
28、能带数字或下划线!n); printf(nn请重新输入学生姓名: ); scanf(%s,p2-name); p2-average+=p2-scorej; 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
29、,char *stu_name)/*根据学生姓名删除用户信息*/ stu *p1,*p2; char i,j=0; system(cls); if(head-next=NULL) printf(nn没有学生信息!t操作错误!n); return head; p1=head-next; p2=p1; while(p1!=NULL) if(strcmp(p1-name,stu_name)=0) printf(nn你所删除的学生姓名为: %st学号为:%sn,p1-name,p1-num); printf(nn确定为:y,取消为nt:); i=getchar(); while(!(i=y)|(i=Y
30、)|(i=n)|(i=N) printf(nn输入错误!t请重新输入 :); i=getchar(); if(i=y)|(i=Y) if(j=0) else printf(nntttt成功删除用户信息!nnttt按回车键继续.n); free(p1); return head; p2-next=p1-next; head-next=p1-next;/*删除头部接点*/ else return head; j+; p2=p1; p1=p1-next; printf(nntt没有此用户记录信息!n按回车键继续n); getchar(); system(cls); display(head); ge
31、tchar(); return head; /* = 删除学生信息(以学号为对象) = */ stu* delnum(stu *head,char *stu_num)/*根据学生学号删除用户信息*/ stu *p1,*p2; char i,j=0; system(cls); if(head-next=NULL) printf(nntt没有存储学生信息!nntt操作错误!n); return head; p1=head-next; p2=p1; while(p1-next!=NULL) if(strcmp(p1-num,stu_num)=0) printf(nn你所删除的学生姓名为: %st学号
32、为:%sn,p1-name,p1-num); printf(nn确定为:y,取消为nt:); i=getchar(); while(!(i=y)|(i=Y)|(i=n)|(i=N) printf(nn输入错误!t请重新输入 :); i=getchar(); if(i=y)|(i=Y) if(j=0) head-next=p1-next; else printf(nntttt成功删除用户信息!nnttt按回车键继续.n); free(p1); return head; p2-next=p1-next; else return head; p2=p1; p1=p1-next; j+; printf
33、(nn没有此用户信息!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(nntt没有存储学生信息!t操作错误!n); getchar(); return head; p1=head; while(p1-next!=NULL) if(strcmp(p
34、1-name,stu_name)=0) printf(nn你所查找的学生信息如下n); printf( nn%st学号为:%sn,p1-name,p1-num); printf(姓名t学号tt %st %st %st%st平均分 n, sc_name0,sc_name1,sc_name2,sc_name3); printf(%st%stt %dt %dt%dt%dt%dn, p1-name,p1-num,p1-score0,p1-score1,p1-score2,p1-score3,p1-average); getchar(); return p1; p1=p1-next; printf(nn
35、tt找不到相关用户信息!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(nntt没有存储学生信息!t操作错误!n); return head; p1=head; w
36、hile(p1-next!=NULL) p1-name,p1-num,p1-score0,p1-score1,p1-score2,p1-score3,p1-average); getchar(); return p1; if(strcmp(p1-num,stu_num)=0) printf(nn你所查找的学生信息如下n); printf( %st学号为:%sn,p1-name,p1-num); printf(姓名t学号tt %st %st %st%st平均分 n, sc_name0,sc_name1,sc_name2,sc_name3); printf(%st%stt %dt %dt%dt%dt%dn, p1=p1-next; printf(n