1、一.设计目:课程设计内容:1.问题描述学生信息涉及:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail 等。设计以学生信息管理系统,使之能提供如下功能:(1).系统以菜单方式工作;(2).学生信息录入功能(学生信息用文献保存)-输入;(3).学生信息浏览功能-输出;(4).查询,排序功能-算法:a.按学号查询;b.按姓名查询。(5).学生信息删除与修改。2.功能规定A界面比较美观;B有一定容错能力。3.函数功能描述输入某些通过键盘输入多位学生学生信息。学生信息包具有:学生姓名、性别、学号、出生年月、年龄等。本次做学生管理系统是运用链表而完毕程序,故第一某些想要实现建立链表、输出某些输出
2、当前已存储学生信息、更新某些删除 删除顾客指定学生信息 ,这某些功能是输入学生学号,找到其在链表中存储结点处,并将这整个结点删除,再把该结点前驱结点和后驱节点连接,来实现这个学生信息删除.修改 修改顾客指定学生信息 ,这某些是运用输入学生学号,来找到存储该学生信息结点,通过该结点链域来修改其中值域,来实现对学生信息修改.、查询某些按名字查询 输出顾客查询学生信息,这某些是运用输入学生姓名,来找到存储该学生信息结点,输出该结点值域中内容,来实现对学生信息查询功能.按学号查询 输出顾客查询学生信息,同上,只是查询条件为学号 .4.规定与限制条件 .各模块间通过菜单切换和调用 .主函数通过调用菜单函
3、数实现对各功能模块调用,各功能模块间依照需要可互相调用。.程序可以保证各模块功能独立和数据共享。不使用全局变量则能保证函数之间独立性,运用形参加实参之间数值传递来实现数据共享。二.总体设计:录入数据break选取2输出界面选取操作选取9读取文献执行freeall()退出系统选取1协助阐明Break结束选取3增长数据Break选取4选取5修改数据增长数据BreakBreak选取6删除数据Break选取7选取8显示数据保存数据BreakBreak输出:无效选项Break结束主界面选取录入学生信息输入学生信息对的 错误 对的 不录入学生信息录入学生信息结束查找运用函数找到有关结点与否存在该学生信息输
4、出该结点值域内容查询完毕该学生不存在修改调用函数查找到有关结点地址修改有关结点值域与否存在该学生信息修改完毕三.详细设计:输入模块void insert() /*插入函数*/ int i=n,j,flag;printf(请输入待增长学生数:n);scanf(%d,&m);do flag=1;while(flag)flag=0;printf(请输入第 %d 个学生学号:n,i+1);scanf(%s,stui.code);for(j=0;ji;j+)if(strcmp(stui.code,stuj.code)=0)printf(已有该学号,请检查后重新录入!n);flag=1;break;/*如
5、有重复及时退出该层循环,提高判断速度*/printf(请输入第 %d 个学生姓名:n,i+1);scanf(%s,stui.name);printf(请输入第 %d 个学生年龄:n,i+1);scanf(%d,&stui.age);printf(请输入第 %d 个学生性别:n,i+1);scanf(%s,stui.sex);printf(请输入第 %d 个学生出生年月:(格式:年.月)n,i+1);scanf(%s,stui.time);printf(请输入第 %d 个学生地址:n,i+1);scanf(%s,stui.add);printf(请输入第 %d 个学生电话:n,i+1);scan
6、f(%s,stui.tel);printf(请输入第 %d 个学生E-mail:n,i+1);scanf(%s,stui.mail);if(flag=0) i=i;i+;while(in+m);n+=m;printf(录入完毕!nn);sort(); 查找模块void seek() /*查找*/int i,item,flag;char s121;/* 以姓名和学号最长长度+1为准 */printf(-n);printf(-1.按学号查询-n);printf(-2.按姓名查询-n);printf(-3.退出本菜单-n);printf(-n);while(1)printf(请选取子菜单编号:);s
7、canf(%d,&item);flag=0;switch(item)case 1:printf(请输入要查询学生学号:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.code,s1)=0)flag=1;printf(学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mailn);printf(-n);printf(%6s %7s %6d %5s %9s %8s %10s %14sn,stui.code,stui.name,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(fl
8、ag=0)printf(该学号不存在!n);break;case 2:printf(请输入要查询学生姓名:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.name,s1)=0)flag=1;printf(学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mailn);printf(-n);printf(%6s %7s %6d %5s %9s %8s %10s %14sn,stui.code,stui.name,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)p
9、rintf(该姓名不存在!n);break;case 3:return;default:printf(请在1-3之间选取n);修改模块void modify() /*修改信息*/int i,item,num;char sex13,s1LEN+1,s2LEN+1;/* 以姓名和学号最长长度+1为准 */printf(请输入要要修改学生学号:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.code,s1)=0) /*比较字符串与否相等*/num=i;printf(-n);printf(1.修改姓名n);printf(2.修改年龄n);printf(3.修改
10、性别n);printf(4.修改出生年月n);printf(5.修改地址n);printf(6.修改电话号码n);printf(7.修改E-mail地址n);printf(8.退出本菜单n);printf(-n);while(1)printf(请选取子菜单编号:);scanf(%d,&item);switch(item)case 1:printf(请输入新姓名:n);scanf(%s,s2);strcpy(stunum.name,s2);break;case 2:printf(请输入新年龄:n);scanf(%d,&stunum.age);break;case 3:printf(请输入新性别:
11、n);scanf(%s,sex1);strcpy(stunum.sex,sex1);break;case 4:printf(请输入新出生年月:n);scanf(%s,s2);strcpy(stunum.time,s2);break;case 5:printf(请输入新地址:n);scanf(%s,s2);strcpy(stunum.add,s2);break;case 6:printf(请输入新电话号码:n);scanf(%s,s2);strcpy(stunum.tel,s2);break;case 7:printf(请输入新E-mail地址:n);scanf(%s,s2);strcpy(st
12、unum.mail,s2);break;case 8:return;default:printf(请在1-8之间选取n);四.调试:A先编译程序 B再连接程序 生成目的 C运营程序1调试中重要问题调试中重要浮现问题:经常遇到程序执行到某某些就不运营,而编译和链接都成功,阐明程序设计上有些问题,语法等并未出错,这时就要去再行考虑设计程序哪某些考虑不周全。由于这次使用链表来设计程序,就牵扯到形参和实参问题。曾经由于考虑不周全,在自定义函数前基类出错,导致有关值未变化,这里就要考虑好形参和实参问题。刚开始没有那个初始化函数,程序运营后没有输入任何数据就试得去执行显示功能,成果显示是某些乱码!加入初始
13、化函数后,这种现象也随之消失。在没有输入任何信息状况下,不能执行查询、修改、删除、记录、排序功能 。 有时候,忘掉定义就直接调用,使得出错。我这时候才真正体会到了一致性重要。检查程序诸多遍但却始终不懂得输入数据有错,很令人头疼。2程序局限性和改进之处由于用链表来设计一种程序,较复杂,最后没来得及,设计有关文献存储来实现将数据保存,以致每次运营程序都要重新输入新数据改进之处:可以再考虑编写一种函数,这个函数功能是将数据写入文献中并保存。五.测试成果:程序运营:主界面:输入信息显示查询修改删除六.结束语:回忆学习C语言 过程中,既有高兴又有烦恼。从领到书那一刻,我就很郁闷,C 语言究竟事学什么,有
14、什么用。刚开始上学时,还在迷茫这门课程是用来做什么。但是,这些感受都是在对这门课程不理解状况下产生。日后慢慢接触多了,听教师讲多了,理解多了,徐徐产生了兴趣。特别是学到语句和函数时,上机操作程序,通过编译,调试和运营后,浮现界面,当时觉得较好奇,想真正学好这门课程。通过一种学期学习,我掌握了基本知识。期末,被告知要进行课程设计。当时有点懵,感觉学东西很少,很零散,不知该怎么练到一起,就要课程设计,是不是太难为咱们了。通过两周自学,第二周结束时候,我感觉自己收获挺大,从一开始迷茫,不懂得从何下手到把程序中几种模块编写出来,心里挺开心。但是,咱们又不得不再次陷入困境。在整个程序编写过程中。最难就是
15、修改和删除这两个模块,这也是咱们要解决重点问题。开始编写修改和删除时,很头疼,去向其她人谋求协助,在别人协助和提示下,我编完了修改程序,但编译时老出错,修改后内容将文本内信息所有覆盖了。困难之时,咱们组其她人,协助了我,完毕了修改和删除。这样话,整个程序基本上所有完毕了,就剩余完善工作了。咱们组写了两个程序,最后,两个程序互相组合,互补,大功告成虽然设计时完毕了,但是我觉得其中还是由某些局限性之处:1. 警告句。程序中缺少某些警告句,例如:“与否真删除(y/n)?”。2. 重名状况。由于考虑不周全,没有设计遇到重名状况该怎么解决。整个程序完毕了,尚有诸多不完善地方,但愿自己后来办事时候要认真,
16、仔细,考虑周全。短短几周课程设计结束了,但是这段时间里,我又学到了更多C 知识,如:对象数组,string类,文献流等,同步我也被提示后来办事时候要认真,仔细,考虑周全。,也看到了团队精神和互帮互助重要性。这一点会让我终身受益。通过这次课程设计,我觉得自己肚子里墨水多了,收获也挺大,这几周过挺充实! 七.源程序清单:#include /*I/O函数*/#include /*其他阐明*/#include /*字符串函数*/#define BUFLEN 100 /* 缓冲区最大字符数 */#define LEN 15 /* 学号和姓名最大字符数,实际请更改 */#define N 100 /* 最
17、大学生人数,实际请更改*/struct record /*构造体*/char codeLEN+1;/* 学号 */char nameLEN+1;/* 姓名 */int age;/* 年龄 */char sex3;/* 性别 */char timeLEN+1;/* 出生年月 */char add30;/* 家庭地址 */char telLEN+1;/* 电话号码 */char mail30;/* 电子邮件地址 */stuN;int k=1,n,m;/* 定义全局变量 */ void readfile();/* 声明函数 */void seek();void modify();void inser
18、t();void del();void display();void save();void menu();int main() while(k)menu();system(pause);return 0; void help() /* 协助*/ printf(n1.欢迎使用系统协助!n);printf(n2.进入系统后,先刷新学生信息,再查询;n);printf(n3.按照菜单提示键入数字代号;n);printf(n4.增长学生信息后,牢记保存按8;n);printf(n5.谢谢您使用!n); void readfile()/* 建立信息 */char *p=student.txt;FILE
19、 *fp;int i=0;if (fp=fopen(student.txt,r)=NULL) printf(Open file %s error!Strike any key to exit!,p);system(pause);exit(0);while(fscanf(fp,%s %s%d%s %s %s %s %s,stui.code,stui.name,&stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail)=8)i+;i=i;fclose(fp);n=i;printf(录入完毕!n); void seek() /*查找*/int
20、i,item,flag;char s121;/* 以姓名和学号最长长度+1为准 */printf(-n);printf(-1.按学号查询-n);printf(-2.按姓名查询-n);printf(-3.退出本菜单-n);printf(-n);while(1)printf(请选取子菜单编号:);scanf(%d,&item);flag=0;switch(item)case 1:printf(请输入要查询学生学号:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.code,s1)=0)flag=1;printf(学生学号 学生姓名 年龄 性别 出生年月 地址
21、 电话 E-mailn);printf(-n);printf(%6s %7s %6d %5s %9s %8s %10s %14sn,stui.code,stui.name,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf(该学号不存在!n);break;case 2:printf(请输入要查询学生姓名:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.name,s1)=0)flag=1;printf(学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-
22、mailn);printf(-n);printf(%6s %7s %6d %5s %9s %8s %10s %14sn,stui.code,stui.name,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf(该姓名不存在!n);break;case 3:return;default:printf(请在1-3之间选取n); void modify() /*修改信息*/int i,item,num;char sex13,s1LEN+1,s2LEN+1;/* 以姓名和学号最长长度+1为准 */prin
23、tf(请输入要要修改学生学号:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.code,s1)=0) /*比较字符串与否相等*/num=i;printf(-n);printf(1.修改姓名n);printf(2.修改年龄n);printf(3.修改性别n);printf(4.修改出生年月n);printf(5.修改地址n);printf(6.修改电话号码n);printf(7.修改E-mail地址n);printf(8.退出本菜单n);printf(-n);while(1)printf(请选取子菜单编号:);scanf(%d,&item);switch
24、(item)case 1:printf(请输入新姓名:n);scanf(%s,s2);strcpy(stunum.name,s2);break;case 2:printf(请输入新年龄:n);scanf(%d,&stunum.age);break;case 3:printf(请输入新性别:n);scanf(%s,sex1);strcpy(stunum.sex,sex1);break;case 4:printf(请输入新出生年月:n);scanf(%s,s2);strcpy(stunum.time,s2);break;case 5:printf(请输入新地址:n);scanf(%s,s2);st
25、rcpy(stunum.add,s2);break;case 6:printf(请输入新电话号码:n);scanf(%s,s2);strcpy(stunum.tel,s2);break;case 7:printf(请输入新E-mail地址:n);scanf(%s,s2);strcpy(stunum.mail,s2);break;case 8:return;default:printf(请在1-8之间选取n); void sort()/*按学号排序*/int i,j,*p,*q,s; char temp10;for(i=0;ii;j-)if(strcmp(stuj-1.code,stuj.cod
26、e)0)strcpy(temp,stuj-1.code);strcpy(stuj-1.code,stuj.code);strcpy(stuj.code,temp);strcpy(temp,stuj-1.name);strcpy(stuj-1.name,stuj.name);strcpy(stuj.name,temp);strcpy(temp,stuj-1.sex);strcpy(stuj-1.sex,stuj.sex);strcpy(stuj.sex,temp);strcpy(temp,stuj-1.time);strcpy(stuj-1.time,stuj.time);strcpy(stuj
27、.time,temp);strcpy(temp,stuj-1.add);strcpy(stuj-1.add,stuj.add);strcpy(stuj.add,temp);strcpy(temp,stuj-1.tel);strcpy(stuj-1.tel,stuj.tel);strcpy(stuj.tel,temp);strcpy(temp,stuj-1.mail);strcpy(stuj-1.mail,stuj.mail);strcpy(stuj.mail,temp); p=&stuj-1.age; q=&stuj.age; s=*q; *q=*p; *p=s; void insert()
28、/*插入函数*/ int i=n,j,flag;printf(请输入待增长学生数:n);scanf(%d,&m);do flag=1;while(flag)flag=0;printf(请输入第 %d 个学生学号:n,i+1);scanf(%s,stui.code);for(j=0;ji;j+)if(strcmp(stui.code,stuj.code)=0)printf(已有该学号,请检查后重新录入!n);flag=1;break;/*如有重复及时退出该层循环,提高判断速度*/printf(请输入第 %d 个学生姓名:n,i+1);scanf(%s,stui.name);printf(请输入第
29、 %d 个学生年龄:n,i+1);scanf(%d,&stui.age);printf(请输入第 %d 个学生性别:n,i+1);scanf(%s,stui.sex);printf(请输入第 %d 个学生出生年月:(格式:年.月)n,i+1);scanf(%s,stui.time);printf(请输入第 %d 个学生地址:n,i+1);scanf(%s,stui.add);printf(请输入第 %d 个学生电话:n,i+1);scanf(%s,stui.tel);printf(请输入第 %d 个学生E-mail:n,i+1);scanf(%s,stui.mail);if(flag=0) i
30、=i;i+;while(in+m);n+=m;printf(录入完毕!nn);sort(); void del() /* 删除信息 */int i,j,flag=0;char s1LEN+1;printf(请输入要删除学生学号:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.code,s1)=0) flag=1;for(j=i;jn-1;j+)stuj=stuj+1;if(flag=0)printf(该学号不存在!n);if(flag=1)printf(删除成功,显示成果请选取菜单6n);n-; void display() /* 显示信息 */ in
31、t i;printf(所有学生信息为:n);printf(学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mailn);printf(-n);for(i=0;in;i+) printf(%6s %7s %5d %5s %9s %8s %10s %14sn,stui.code,stui.name,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail); void save() /* 保存 */int i;FILE *fp;fp=fopen(student.txt,w);/*写入*/for(i=0;i系统功能菜单= n);prin
32、tf(查询前请先刷新系统! n);printf( n);printf( - n);printf( 1.系统协助及阐明 2.刷新学生信息 n);printf( - n);printf( 3.查询学生信息 4.修改学生信息 n);printf( - n);printf( 5.增长学生信息 6.按学号删除信息 n);printf( - n);printf( 7.显示当前信息 8.保存当前学生信息 n);printf( - n);printf( 9.退出系统 n);printf( - n);printf( n);printf(请选取菜单编号:);scanf(%d,&num);switch(num) case 1:help();break;case 2:readfile();break;case 3:seek();break;case 4:modify();break;case 5:insert();break;case 6:del();break;case 7:display();break;case 8:save();break;case 9:k=0;break;default:printf(请在1-9之间选取n);