常熟理工学院2016年春季学期《C语言案例实践》报告题目:学生成绩管理系统设计学号:092715217姓名:梁伟指导教师:赵秀兰日期:2016.05.101目录主要包含下列内容:(1)系统分析:包括设计题目、设计内容以及系统功能需求分析;(2)系统设计:包括总体设计(主要功能模块的划分)及详细设计(各功能模块的算法设计以及对应的流程图);(3)系统实现:包括使用的所有变量、自定义函数、结构体的说明,以及完整源程序清单,关键代码应加注释。(4)系统运行:包括系统操作使用的简单说明,使用测试数据运行的结果。(5)总结:包括课程设计过程中的学习体会与收获,出现的问题和解决的方法,没有完成的部分及原因,对C项目实践课程的认识以及自己的建议等内容。2目录正文····················31.系统需求分析·················32.系统总体设计·················43.详细设计···················64.系统测试···················95.软件使用说明书···············13总结·····················14附录:部分原程序代码·············153正文随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展要高效率的把内部活动有机的组织起来,就必须建立自身特点相适应的管理信息系统。本组设计的是一个关于学生信息管理的数据库系统,通过这个系统,管理员可以简捷方便的对学生信息进行增加、删除、修改等功能,而用户也可以通过这个系统对学生信息进行查询等功能。1.系统需求分析1.1需求概述:(1)学生信息录入功能;(2)学生信息浏览功能;(3)学生信息查询(或排序)功能;(4)学生信息删除功能;(5)学生信息修改功能;1.2需求说明:(1)学生信息包括姓名学号和成绩,并且要求学生号不重复。(2)学生信息的显示要求有一定的规范格式。(3)对学生信息应能够分别按学号及按姓名两种方式进行查询,要求能返回所有符合条件的学生的信息。(4)对学生信息的修改应逐个地进行,在一个学生的信息的更改不影响其他的学生记录。(5)所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能尽可能地兼容用户使用过程中的异常情况。42.系统总体设计一、编写目的根据需求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案,并写出书面文档总体设计说明书,为下一步进行详细设计做准备。二、总体设计1.功能划分该系统可以按功能进行模块划分,如图1所示。学生信息管理系统图1系统模块图其中:(1)菜单选择模块完成用户命令的接受,此模块也是学生信息管理的入口,用户所要进行的各种操作均需在此模块中进行选择,并进而调用其他模块实现相应的功能。(2)信息输入模块完成学生信息的输入功能,输入信息包括姓名学号和成绩。(3)信息浏览模块完成已录入学生信息的显示。(4)信息查询模块完成学生信息的查询,查询时对应有按编号查询和按姓名查询两种方式。(5)信息修改模块完成学生信息的修改功能。(6)信息删除功能模块完成学生信息的删除功能。2.数据结构本系统中主要的数据结构就是学生的信息,包含姓名学号和成绩,在处理过程中各项可以作为一个学生的不同属性来进行处理。信息输入信息浏览信息查询信息修改信息删除按编号查询按姓名查询菜单选择53.程序流程系统的执行应从功能菜单选择开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。系统的流程图如图2所示:图2程序流程图开始菜单选择输入?浏览?查询?修改?否否删除?信息输入信息浏览信息查询信息修改信息删除是是是是是结束否否否63.详细设计1.数据结构(1)性别:emumSex{male,female};(2)学历:enumEducation{high,junior,college,master,doctor};(3)日期:StructDate{intyear;intmonth;intday;};(4)学生信息:StructInfo{charnum[5];/*学生号*/charname[8];/*姓名*/enumSexsex;/*性别*/structDatebirthday;/*出生年月*/enumEducationeducation;/*学历*/charduty[8];/*职务*/doublewage;/*工资*/charaddr[12];/*地址*/charphone[8];/*电话*/};2.各个功能模块的处理流程对应于总体设计时的系统模块图,各个功能模块的处理流程如下:(1)信息输入模块输入三个学生信息以初始化系统;读入学生信息;(2)信息浏览模块依次输出学生信息;(3)信息查询模块while(继续查询){if(按编号查询){读入查询的学生编号;顺序读出一个学生的信息;if(该学生信息的编号符合条件)7输出该学生的信息;}}elseif(按姓名查询){读入查询的学生姓名;顺序读出一个学生的信息;if(该学生信息的姓名符合条件)输出该学生的信息;}}else提示输入不合适;提示是否继续查询;}(4)信息修改模版while(继续修改){提示并读入待修改的学生的编号;顺序读出一个学生的信息;if(该学生信息的编号符合条件)将学生的信息进行修改;}显示修改后所有学生的信息;}(5)信息删除模块while(继续删除){提示并读入待删除的学生号;查找是否有符合条件的学生记录;if(有符合条件的记录){while(所有学生信息未读完){读出下一条记录;if(此条记录不是待删除记录)}删除该学生信息记录;}else8提示没有符合条件的记录存在;}(7)信息排序模块if(按姓名排序){将第i个学生姓名和他的下一个学生姓名作对比}通过对比大小将学生信息交换依次排序;}elseif(按学号排序){将第i个学生学号和他的下一个学生学号作对比}通过对比大小将学生信息交换依次排序;}}elseif(按成绩排序){将第i个学生学号和他的下一个学生学号作对比}通过对比大小将学生信息交换依次排序;}}打印排序后的学生信息;94.系统测试一、设置测试数据根据以下几个列子分析测试:1.录入:姓名tom学号0001成绩982.录入:姓名lili学号0002成绩563.录入:姓名alin学号0003成绩742.显示所有学生的信息。3.增加一个学生的信息姓名john学号0004成绩88。4.删除学生号为0002的学生信息。5.将alin学号的信息由0003改为0005。6.查找学号为0001的学生信息。7.将所有学生的信息按成绩排序。8.退出。二、测试结果及分析(1)学生信息录入分析图如图1所示:10(2)学生信息系统菜单界面如图2所示:(3)显示学生信息如图3所示11(4)学生信息录入图如图4所示:(5)学生信息删除如图5所示12(6)学生信息修改图如图6所示:(7)学生信息查找图如图7所示:13(8)学生信息排序图如图8所示:5.软件使用说明书(1)根据正确的提示安装软件。(2)Intel486以上系列、AMDK6以上系列等PC台式机和便携式电脑都可运行。(3)打开该程序系统,浏览菜单,根据需要选择功能,进行各项操作。操作如下:输入三名学生信息以初始化程序根据菜单提示输入需要的信息即可完成指令。当信息输入正确,进入你所需要的菜单程序中:学生信息:显示姓名、学号、成绩。14设计总结在本系统的开发过程中,由于组是初次开发软件,在知识、经验方面都存在着不足。另外,在整个开发的过程中,时间也比较仓促。因此,该系统必然会存在一些缺陷和不足。因为对学生信息管理的整个流程不够熟悉,在需求分析时未能做到完全满足用户的需求。尽管本管理系统存在着很多不足,但其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点是本管理系统所必需的。通过开发这个系统,我组掌握了的项目基本开发过程,用到的知识巩固了我组对C语言的学习,但在这次设计中的最大收获并不是掌握这几门开发工具的应用,而是学会了设计系统的思维方法,以及与同学们之间相互帮助的精神。15附录:部分源程序代码#includestdio.h//写入头文件#includewindows.h#includeconio.h#includeprocess.h#includemath.h#includestring.htypedefstructSTU{//建立链表charname[10];charnum[10];intgrade;}st;typedefstructnode{stdata;structnode*next;}node;node*jianli();//函数定义intse();voidxianshi(node*head);voidzengjia(node*head);node*shanchu(node*head);voidxiugai(node*head);voidchazhao(node*head);voidpaixu(node*head);node*jianli()//建立函数{inti;node*he,*tail,*p;he=tail=NULL;printf(************************************\n\t学生管理系统初始化\n************************************\n\n\n请先输入3位学生的有效信息:\n);for(i=0;i3;i++){p=(node*)malloc(sizeof(node));p-next=NULL;printf(请输入第%d位学生的信息\n,i+1);16scanf(%s%s%d,p-data.name,p-data.num,&p-data.grade);while(atoi(p-data.num)==0||p-data.grade0){printf(您输入的信息有误,请重新输入!);printf(请输入第%d位学生的信息\n,i+1);scanf(%s%s%d,p-data.name,p-data.num,&p-data.grade);}if(he==NULL)he=p;elsetail-next=p;tail=p;}p=he;system(cls);printf(************************************\n\t学生管理系统初始化\n************************************\n\n\n\n);while(p!=NULL){printf(姓名:%s学号:%s分数:%d\n,p-data.name,p-data.num,p-data.grade);p=p-next;}printf(已录入三个基础学生信息,按任意键进入学生管理系统菜单\n);getch();returnhe;}voidmain()//主函数入口{inta;node*head;system(color2e);head=jianli();do{system(cls);a=se();switch(a)//输入选择{17case1:xianshi(head);break;case2:zengjia(head);break;case3:head=shanchu(head);break;case4:xiugai(head);break;case5:chazhao(head);break;case6:paixu(head);break;case7:exit(0);break;}}while(1);}intse()//菜单界面{inti,t;chars[10];char*menu[]={***********学生管理系统**************\n\n,1:显示学生