您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 《学生档案管理系统》的设计与实现
苏州科技学院二○一三~二○一四学年第二学期电子与信息工程系课程设计报告书课程名称:程序设计基础实践班级:电气1311学号:13200117129姓名:沈文荟指导教师:吴勇二○一四年四月1.题目《学生档案管理系统》的设计与实现2.功能(1)每一条记录包括一个学生的姓名、学号、性别、出生日期、班级、联系电话、地址(2)录入功能:可以一次完成无数条记录的输入,管理员通过该功能对新生的录入。(3)删除功能:能够对一个学生的信息进行删除,对历届毕业生(已毕业)的信息,先进行保存档案,再删除。(4)查询功能:根据你键入学生的某一信息,显示其详细信息,完成查找学生记录,并显示。(5)浏览功能:完成全部学生记录的显示,可以查看学校所有学生信息。(6)修改功能:能够根据自己的要求对学生信息中有错的地方进行修改,填写个人信息出错,可以通过该功能修改基本信息。(7)保存功能:将学生记录保存在任何自定义的文件中(8)读取功能:将保存在文件中的学生记录读取出来。(9)有一个清晰美观界面来调用各个功能。3.要求(1)整个系统均用C语言实现;(2)利用指针、链表来实现学生档案的数据结构设计;(3)系统具有录入、删除、查询、浏览、修改、保存、读取基本功能;(4)系统的各个功能模块都用函数的形式来实现;(5)可以将学生档案信息保存在文件中;(6)可以将学生档案信息从文件中读取出来。4.总体设计(1)输入功能的实现:要想实现学生档案管理系统的输入,必须要建立一个学生档案系统的抽象数据类型,其中学生档案以链表的存储方式实现。由键盘输入学生信息,以文件方式保存。程序执行时先将文件读入内存。(2)系统处理功能的实现:系统管理员根据学校的学生变化情况,在提示信息的提示下,选择相应的服务进行操作。(3)输出的实现:根据选择的操作,输出与之对应的信息。综上可以绘制出学生档案管理功能的系统流程图,如下图所示(4)系统功能结构:根据学生档案管理系统问题的分析和设计要求,可以得到该学生档案管理系统可以分为六个模块:录入学生信息模块、删除学生信息模块、查询学生信息模块、学生信息排序模块、修改学生信息模块、保存学生信息模块。其系统功能结构如下图所示。学生档案管理系统录入学生信息模块删除学生信息模块查询学生信息模块学生信息排序模块修改学生信息模块保存学生信息模块姓名学号性别出生日期班级联系电话地址对学号排序总控模块测试模块输入系统处理输出5.详细设计5.1主函数main()利用格式化输出函数printf(),提供一个清晰美观的开始界面。利用swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。5.2抽象数据类型的定义1)定义学生档案信息structstudent_book{charname[20];intnum;charsex;structdatabirthday;charclas[20];chartelephone[20];charaddr[40];}stud[200];2)定义出生日期structdata{intyear,month,day;};5.3模块函数构造学生信息录入函数:voidadd()学生信息删除函数:voiddel()学生信息查询函数:voidfind()学生信息排序函数:voidarrange()学生信息修改函数:voidchange()5.4主程序流程图5.调试分析测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验是否满足规定的需求或弄清预期结果与实际结果之间的差别。程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果。程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误。要正确利用编辑时提示的错误信息。1)大括号混乱造成错误2)频繁切换输入法,导致经常打出中文输入法的“;”“,”“()”“[]”等3)在定义和运用数据类型时出现问题,不清楚字符串的输出用s,而错用为c4)在排序阶段遇到瓶颈,借助多方资源才最终完成5)开始将生日定义为字符数组,当用scanf来输入年月日时,年月日之间用空格分隔,但在输出时发现年月日出现错误。分析原因:用系统会把用来分隔的空格当做字符读入。解决方法:将年月日定义为整型,这样就可以用scanf输入,用空格隔开运行结果开始界面主菜单录入学生信息修改学生信息保存学生信息学生信息排序删除学生信息查询学生信息6.运行结果1.开始界面2.主菜单3.录入学生信息4.删除学生信息a.输入正确学号b.输入错误学号5.查询学生信息6.学生信息排序7.修改学生信息7.总结虽然,刚开始做程序的时候,很多知识已经忘却,对那些代码基本上就是什么都不会,刚开始的时候特别苦恼,什么都不懂。但是在我们尝试与成功的过程中,当最终程序不再有错误和警告,能正常运行时,我感受到了成功的快乐。另外,我觉得自己的基本功不够,如清屏clrscr()等函数用的不好,有时同样的问题多次犯。这说明我的知识不够,有很多有用的书中内容没有学好,认识程度不够深刻。C语言这门课程结束后,也应多看相关东西,多上机练习,才能真正从本质上提高自己。通过编写该程序,熟悉了C语言的基本语法,选择,循环等结构,深入练习了函数的调用方法,和文件的读写方法,熟悉了结构体的使用,更加深化了面向过程语言思想,和一些基本算法。通过对程序的后期调试,熟悉了常见错误,锻炼了思维的严密性和完备性。通过对程序的注释和画流程图,形成了一套自己编程的风格和清晰地思路,使思维更加条理化、清晰化。8.附录#includestdio.h#includeconio.h#includestring.h#includestdlib.hstaticintn,i;structdata//定义出生日期{intyear,month,day;};structstudent_book//定义学生档案信息{charname[20];intnum;charsex;structdatabirthday;charclas[20];chartelephone[20];charaddr[40];}stud[200];voidadd()//学生信息录入函数{charj;front1:system(cls);/*清屏*/printf(\n);printf(\n请输入要添加的姓名:);scanf(%s,stud[n].name);printf(\n请输入要添加的学号(8位及以下):);scanf(%d,&stud[n].num);printf(\n请输入要添加的性别(F/M):);scanf(\n%c,&stud[n].sex);printf(\n请输入要添加的出生日期:);scanf(\n%d%d%d,&stud[n].birthday.year,&stud[n].birthday.month,&stud[n].birthday.day);printf(\n请输入要添加的班级:);scanf(%s,&stud[n].clas);printf(\n请输入要添加的电话号码:);scanf(%s,&stud[n].telephone);printf(\n请输入要添加的地址:);scanf(%s,stud[n].addr);getchar();n++;printf(是否继续(Y/N)?:);j=getchar();getchar();if(j=='y'||j=='Y')gotofront1;/*再输入记录*/}voiddel()//学生信息删除函数{intk=0,m,i;charj;front2:system(cls);/*清屏*/printf(\n请输入要删除的学号:);scanf(%d,&m);getchar();for(i=0;in;i++)if(m==stud[i].num){k=1;break;}/*查找记录*/if(k==1)/*删除记录*/{for(k=i;kn-1;k++){stud[k]=stud[k+1];}n--;printf(已删除\n\n);}else{printf(找不到要删除的记录!\n);printf(按回车键返回:);getchar();}printf(是否继续(Y/N)?:);j=getchar();getchar();if(j=='y'||j=='Y')gotofront2;}voidfind()//学生信息查询函数{inti,k,s=0;charj;front3:s=0;system(cls);/*清屏*/printf(\n请输入要查询的学号:);scanf(%d,&k);for(i=0;in;i++)if(k==stud[i].num){printf(姓名\t学号\t性别\t出生日期\t班级\t电话\t\t地址\n);printf(%-s\t%-8d%c\t%d/%d/%d\t%-s\t%s\t%s\n,stud[i].name,stud[i].num,stud[i].sex,stud[i].birthday.year,stud[i].birthday.month,stud[i].birthday.day,stud[i].clas,stud[i].telephone,stud[i].addr);s=1;}if(s==0)printf(查无此人!\n);getchar();printf(是否继续查询(Y/N)?:);j=getchar();if(j=='y'||j=='Y')gotofront3;getchar();}voidarrange()//学生信息排序函数{intk,i,temp;chart1[20],t2,t3[20],t4[20],t5[20];structdatat;for(k=0;kn-1;k++)//排序所需趟数for(i=0;in-k-1;i++)//每趟排序所需交换次数if(stud[i].numstud[i+1].num)//信息交换{{temp=stud[i].num;stud[i].num=stud[i+1].num;stud[i+1].num=temp;}//学号换位{strcpy(t1,stud[i].name);strcpy(stud[i].name,stud[i+1].name);strcpy(stud[i+1].name,t1);}//姓名换位{t2=stud[i].sex;stud[i].sex=stud[i+1].sex;stud[i+1].sex=t2;}//性别换位{strcpy(t3,stud[i].clas);strcpy(stud[i].clas,stud[i+1].clas);strcpy(stud[i+1].clas,t3);}//班级换位{strcpy(t4,stud[i].telephone);strcpy(stud[i].telephone,stud[i+1].telephone);strcpy(stud[i+1].telephone,t4);}//电话换位{strcpy(t5,stud[i].addr);strcpy(stud[i].addr,stud[i+1].addr);strcpy(stud[i+1].addr,t5);}//地址换位{t=stud[i].birthday;stud[i].birthday=stud[i+1].birthday;stud[i+1].birthday=t;}//出生日期换位}system(cls);/*清屏*/printf(姓名\t学号\t性别\t出生日期\t班级\t电话\t\t地址\n);for(i=0;i=n-1;i++)//输出学生信息if(stud[i].num!=0)printf(%-s\t%-8d%c\t%d/%d/%d\t%-s\t%s\t%s\n,stud[i].name,stud[i].num,stud[i].sex,stud[i].birthday.year,stud[i].birthday.month,stud[i].birthday.day,stud[i].clas,stud[i].te
本文标题:《学生档案管理系统》的设计与实现
链接地址:https://www.777doc.com/doc-2834223 .html