您好,欢迎访问三七文档
一.设计目的:课程设计内容:1.问题描述学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。设计以学生信息管理系统,使之能提供以下功能:(1).系统以菜单方式工作;(2).学生信息录入功能(学生信息用文件保存)---输入;(3).学生信息浏览功能---输出;(4).查询,排序功能---算法:a.按学号查询;b.按姓名查询。(5).学生信息的删除与修改。2.功能要求A.界面比较美观;B.有一定的容错能力。3.函数功能描述⑴输入部分通过键盘输入多位学生的学生信息。学生的信息包含有:学生姓名、性别、学号、出生年月、年龄等。此次做的学生管理系统是利用链表而完成的程序,故第一部分想要实现建立链表⑵、输出部分输出当前已存储的学生信息⑶、更新部分①删除删除用户指定的学生信息,这部分的功能是输入学生的学号,找到其在链表中存储的结点处,并将这整个结点删除,再把该结点的前驱结点和后驱节点连接,来实现这个学生信息的删除.②修改修改用户指定的学生信息,这部分是利用输入学生的学号,来找到存储该学生信息的结点,通过该结点的链域来修改其中的值域,来实现对学生信息的修改.⑷、查询部分①按名字查询输出用户查询的学生信息,这部分是利用输入学生的姓名,来找到存储该学生信息的结点,输出该结点的值域中的内容,来实现对学生信息的查询功能.②按学号查询输出用户查询的学生信息,同上,只是查询条件为学号.4.要求与限制条件①.各模块间通过菜单切换和调用②.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。③.程序能够保证各模块功能的独立和数据共享。不使用全局变量则能保证函数之间的独立性,利用形参与实参之间的数值传递来实现数据共享。二.总体设计:选择3增加数据Break选择4选择5修改数据增加数据BreakBreak输出界面选择操作选择9读取文件执行freeall()退出系统选择1帮助说明Break结束选择2录入数据break选择录入学生信息输入学生信息正确错误正确不录入学生信息录入学生信息结束选择6删除数据Break选择7选择8显示数据保存数据BreakBreak输出:无效选项Break结束主界面查找修改调用函数查找到相关结点地址修改相关结点的值域是否存在该学生信息修改完毕利用函数找到相关结点是否存在该学生信息输出该结点的值域的内容查询完毕该学生不存在三.详细设计:输入模块voidinsert()/*插入函数*/{inti=n,j,flag;printf(请输入待增加的学生数:\n);scanf(%d,&m);do{flag=1;while(flag){flag=0;printf(请输入第%d个学生的学号:\n,i+1);scanf(%s,stu[i].code);for(j=0;ji;j++)if(strcmp(stu[i].code,stu[j].code)==0){printf(已有该学号,请检查后重新录入!\n);flag=1;break;/*如有重复立即退出该层循环,提高判断速度*/}}printf(请输入第%d个学生的姓名:\n,i+1);scanf(%s,stu[i].name);printf(请输入第%d个学生的年龄:\n,i+1);scanf(%d,&stu[i].age);printf(请输入第%d个学生的性别:\n,i+1);scanf(%s,stu[i].sex);printf(请输入第%d个学生的出生年月:(格式:年.月)\n,i+1);scanf(%s,stu[i].time);printf(请输入第%d个学生的地址:\n,i+1);scanf(%s,stu[i].add);printf(请输入第%d个学生的电话:\n,i+1);scanf(%s,stu[i].tel);printf(请输入第%d个学生的E-mail:\n,i+1);scanf(%s,stu[i].mail);if(flag==0){i=i;i++;}}while(in+m);n+=m;printf(录入完毕!\n\n);sort();}查找模块voidseek()/*查找*/{inti,item,flag;chars1[21];/*以姓名和学号最长长度+1为准*/printf(------------------\n);printf(-----1.按学号查询-----\n);printf(-----2.按姓名查询-----\n);printf(-----3.退出本菜单-----\n);printf(------------------\n);while(1){printf(请选择子菜单编号:);scanf(%d,&item);flag=0;switch(item){case1:printf(请输入要查询的学生的学号:\n);scanf(%s,s1);for(i=0;in;i++)if(strcmp(stu[i].code,s1)==0){flag=1;printf(学生学号学生姓名年龄性别出生年月地址电话E-mail\n);printf(--------------------------------------------------------------------\n);printf(%6s%7s%6d%5s%9s%8s%10s%14s\n,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);}if(flag==0)printf(该学号不存在!\n);break;case2:printf(请输入要查询的学生的姓名:\n);scanf(%s,s1);for(i=0;in;i++)if(strcmp(stu[i].name,s1)==0){flag=1;printf(学生学号学生姓名年龄性别出生年月地址电话E-mail\n);printf(--------------------------------------------------------------------\n);printf(%6s%7s%6d%5s%9s%8s%10s%14s\n,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);}if(flag==0)printf(该姓名不存在!\n);break;case3:return;default:printf(请在1-3之间选择\n);}}}修改模块voidmodify()/*修改信息*/{inti,item,num;charsex1[3],s1[LEN+1],s2[LEN+1];/*以姓名和学号最长长度+1为准*/printf(请输入要要修改的学生的学号:\n);scanf(%s,s1);for(i=0;in;i++)if(strcmp(stu[i].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(item){case1:printf(请输入新的姓名:\n);scanf(%s,s2);strcpy(stu[num].name,s2);break;case2:printf(请输入新的年龄:\n);scanf(%d,&stu[num].age);break;case3:printf(请输入新的性别:\n);scanf(%s,sex1);strcpy(stu[num].sex,sex1);break;case4:printf(请输入新的出生年月:\n);scanf(%s,s2);strcpy(stu[num].time,s2);break;case5:printf(请输入新的地址:\n);scanf(%s,s2);strcpy(stu[num].add,s2);break;case6:printf(请输入新的电话号码:\n);scanf(%s,s2);strcpy(stu[num].tel,s2);break;case7:printf(请输入新的E-mail地址:\n);scanf(%s,s2);strcpy(stu[num].mail,s2);break;case8:return;default:printf(请在1-8之间选择\n);}}}四.调试:A先编译程序B再连接程序生成目标C运行程序1调试中的主要问题调试中主要出现的问题:⑴经常遇到程序执行到某部分就不运行,而编译和链接都成功,说明程序设计上有些问题,语法等并未出错,这时就要去再行考虑设计的程序哪部分考虑不周全。⑵因为这次使用链表来设计程序,就牵扯到形参和实参的问题。曾经因为考虑不周全,在自定义函数前的基类出错,导致相关的值未改变,这里就要考虑好形参和实参的问题。刚开始没有那个初始化函数,程序运行后没有输入任何数据就试得去执行显示功能,结果显示的是一些乱码!加入初始化函数后,这种现象也随之消失。在没有输入任何信息的情况下,不能执行查询、修改、删除、统计、排序功能。有时候,忘记定义就直接调用,使得出错。我这时候才真正体会到了一致性的重要。检查程序很多遍但却始终不知道输入的数据有错,很令人头疼。2程序的不足和改进之处因为用链表来设计一个程序,较复杂,最后没来得及,设计相关的文件存储来实现将数据保存,以致每次运行程序都要重新输入新的数据改进之处:可以再考虑编写一个函数,这个函数的功能是将数据写入文件中并保存。五.测试结果:程序运行:主界面:输入信息显示查询修改删除六.结束语:回想学习C语言的过程中,既有快乐又有烦恼。从领到书的那一刻,我就很郁闷,C语言到底事学什么的,有什么用。刚开始上课时,还在迷茫这门课程是用来做什么的。不过,这些感受都是在对这门课程不了解的情况下产生的。后来慢慢的接触多了,听老师讲的多了,了解多了,渐渐的产生了兴趣。尤其是学到语句和函数时,上机操作程序,经过编译,调试和运行后,出现界面,当时觉得很好奇,想真正的学好这门课程。通过一个学期的学习,我掌握了基本知识。期末,被通知要进行课程设计。当时有点懵,感觉学的东西很少,很零散,不知该怎么练到一起,就要课程设计,是不是太难为我们了。通过两周的自学,第二周结束的时候,我感觉自己收获挺大的,从一开始的迷茫,不知道从何下手到把程序中的几个模块编写出来,心里挺开心的。但是,我们又不得不再次陷入困境。在整个程序的编写过程中。最难的就是修改和删除这两个模块,这也是我们要解决的重点问题。开始编写修改和删除时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。困难之时,我们组的其他人,帮助了我,完成了修改和删除。这样的话,整个程序基本上全部完成了,就剩下完善工作了。我们组写了两个程序,最后,两个程序相互组合,互补,大功告成虽然设计时完成了,但是我觉得其中还是由一些不足之处:1.警告句。程序中缺少一些警告句,例如:“是否真的删除(y/n)?”。2.重名的情况。由于考虑的不周全,没有设计遇到重名的情况该怎么处理。整个程序完成了,还有很多不完善的地方,希望自己以后办事的时候要认真,仔细,考虑周全。短短的几周课程设计结束了,但是这段时间里,我又学到了更多C知识,如:对象数组,string类,文件流等,同时我也被提醒以后办事的时候要认真,仔
本文标题:学生信息管理系统
链接地址:https://www.777doc.com/doc-5337061 .html