《面向对象语言程序设计》课程设计报告设计题目:学生信息管理系统专业:数学与应用数学班级学号:0909401-07姓名:周建华指导教师:秦姣华成绩:2011年12月25日目录1设计目的..............................................32设计要求..............................................33设计原理..............................................34设计内容.............................................44.1功能描述………………………………………………………..44.2程序流程…………………………………………………..……54.3设计步骤………………………………………………….……..84.4程序调试………………………………………………….……174.5运行结果……………………………………………………....174.6心得体会……………………………………………………….195总结...............................................19参考文献:..............................................19学生信息管理系统1设计目的1.通过C++课程设计,使学生能够将学到的面向对象的设计思想运用在具体的工作和学习中,加深对类和对象的理解,要求学生对生活中许多具体的事物抽象出类,并掌握继承和派生类、基类、虚函数和多态的概念。2、通过这次课程设计掌握《C++语言程序设计》的编程思想,为后续课程打下基础。3、培养我实际操作能力和实践能力,为以后的工作打下坚实的基础。.2设计要求利用学到的编程知识和编程技巧,要求学生:1、对系统进行功能模块分析、控制模块分析正确2、系统设计要能完成题目所要求的功能。3、编程简练,可用,尽可能的使系统的功能更加完善和全面4、使用说明书、流程图要清楚。5、特别要求自己独立完成。1)程序的内容很简单,分为两个大的方面:1.新增学生信息、删除学生信息、导入学生信息(已经保存于的文件信息)主要是负责程序的输入、删除、修改等功能。2.和学生信息搜索(按姓名)、学生信息统计(按专业或性别或年龄---年龄要自动计算)、按英语成绩排序、学生信息保存、最后退出。主要负责程序的查询、统计、排序、显示等功能。(2)组长周建华负责第1方面,组员何桂芳负责第2部分。3设计原理有新生来报到,要逐个录入其信息,如:学生姓名,性别,专业,出生日期,家庭地址、英语入学成绩。要求设计链表类来实现,并统计学生人数。文本界面为:1.新增学生信息2.删除学生信息3.导入学生信息(已经保存于的文件信息)4.学生信息搜索(按姓名)5.学生信息统计(按专业或性别或年龄---年龄要自动计算)6.按英语成绩排序7.学生信息保存8.退出4设计内容(1)总体结构我们采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。也可根据自己的理解增加新的功能模块。(2)系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行(3)每一条记录包括一个学生的姓名、性别、专业、出生日期、家庭住址、英语成绩。同时,应具备以下功能:1、输入功能:一次可以完成自定义学生人数的学生信息记录的输入。2、删除功能:对指定学生的信息进行删除。3、修改功能:对指定学生的信息进行修改。4、查询功能:选择某种方式并输入该信息查询符合条件的学生信息。5、统计功能:对某几个专业的人数、男女性别学生信息进行统计。6、排序功能:以英语课程的分数为依据对学生信息进行排序。7、显示功能:将以上功能操作后的学生信息显示出来。8、退出主菜单。4.1功能描述1.此程序的功能全部写成了学生信息类的函数成员。第一方面功能描述。第一,新增学生信息。输入功能:一次可以完成自定义学生人数的学生信息记录的输入。此功能会按照学生信息逐项进行添加,按照提示输入即可,如果输入不符合要求程序会报错。第二,删除学生信息,删除功能:对指定学生的信息进行删除。删除之要求输入所要删除学生的编号即可,当然,删除之后学生的信息就不存在了,也无法继续进行管理了。第三,导入学生信息,修改功能:对指定学生的信息进行修改。修改会首先提示所要修改的学生的编号,之后再按照学生的基本信息逐项进行修改。2.第二方面功能描述。第四,修改员工信息。查询功能:选择某种方式并输入该信息查询符合条件的学生信息。修改会首先提示所要修改的学生的编号,之后再按照学生的基本信息逐项进行修改。第五,学生信息搜索。查询功能:选择某种方式并输入该信息查询符合条件的学生信息。搜索比较简单,不需要做任何操作,程序会自动将静态数据成员所记载的人数显示输出。第六,学生信息统计。统计功能:对某几个专业的人数、男女性别学生信息进行统计。第七,学生信息保存。显示功能:将以上功能操作后的学生信息显示出来。最后退出。4.2程序流程各功能模块的实现流程图:1.增加学生信息调用函数Node*Create()判断gg是否等于一如果是可创建链表输入相应的学生信息如果不是则需要运用Insert(p)函数插入结点增加学生信息的,并通过chundang(p)函数进行存档,具体流程如下图所示流程图2.删除学生信息调用函数Node*Delete(Node*head,intnum)删除学生的信息则必须对链表结点进行删除意味着将某个要删除结点前后的连续打断,去掉该结点,使前后指针变量重新连接,完成链表结点的删除任务流程图3.导入学生信息打开存档文件ifstreamFilein(out.txt);输出说存档的学生信息输入要删除信息的编号该生信息已删除,显示其他同学的信息输出所有学生的信息新增学生信息按提示:输入学个的各种信息按格式显示输入的学生信息退出该功能,返回主菜单,继续选择退出该功能,返回主菜单,继续选择导入学生信息显示学生的信息退出该功能,返回主菜单,继续选择判断以前是否存储了学生信息是新增信息输入要删除学生信息24、学生信息的搜索调用函数Node*sousuo(Node*head,charna[20]),按学生的姓名进行搜索流程图:5、信息的统计调用函数Node*tongji(Node*head)运用一个for循环,将输入的相应的学生信息用strcmp()函数与对应的数组进行比较,然后再进行统计。6、按英语成绩进行排序:调用函数Node*paixu(Node*head)完成排序功能它的主要思想的:首先设置英语成绩的最大值100,最小值0(也可以使150或者其他)然后让输入的学生信息英语成绩一次比较进行比较,(如果有相等的就输出排名1,然后排名加1),否则最大值减1,然后再次进行比较(如果等于99且上次没有等于100的,就输出排名1,然后排名加1,如果上次有等于100的排名为2),如果没有与99相等的.,则继续循环……流程图:搜索学生信息4按照提示输入学生的姓名进行搜索输出所以查询的学生信息退出该功能,返回主菜单,继续选择信息的统计:5统计所设定的专业人数和男女性别的人数,计算学生的年龄并统计输出统计的信息退出该功能,返回主菜单,继续选择对英语成绩进行排序输出排序之后的学生信息退出该功能,返回主菜单,继续选择按学生信息进行排序5总功能模块图:2、输入要删除的学生的编号,删除学生信息。1输入学生的信息:姓名、性别、专业、出生日期、家庭地址、英语成绩菜单1.新增学生信息2.删除学生信息3.导入学生信息4.学生信息搜索5.学生信息统计6.按英语成绩排序7.学生信息保存8.退出5统计各种专业、男女、相应年龄的人数6按英语成绩降序排列,输出学生的姓名排名和英语成绩7保存学生信息:提示保存成功4、输入你要查找你学生姓名3、输出学生的编号、姓名、性别、专业、出生日期、家庭地址、英语成绩8、退出系统学生管理系统功能模块图4.3设计步骤首先建立学生信息类,在类中添加类的属性以及方法,类的属性包括:charname[10],longnumber,charsex,intpay。类的方法包括:构造函数Member(),学生信息初始化函数StartMember(charNewname[10],longNewnumber,charNewsex,intNewold),析构函数~Member(),学生信息修改函数AmendMember(charNewname[10],longNewnumber,charNewsex,intNewold),学生信息新建函数SetMember(charNewname[10],longNewnumber,charNewsex,intNewold),学生信息显示函数ShowMember(),学生员工信息删除函数DeleteMember(),判断编号时候为空函数Getnumber()。然后在类外实现类的所有方法。完成后开始写主函数,主函数先初始化一些数据,在数组中添加一些成员,然后利用循环,选择和顺序结构来实现程序的执行步骤。程序代码#includeiostream.h#includestring.h#includefstream#includecassertusingnamespacestd;intnn=0;structNode{intnum;charname[20];charxb[20];charzy[20];intnian,yue,ri;chardz[20];intmark;Node*next;};//*********************************************************************************Node*Create()//链表创建{cout请输入学生信息(输入0退出):endl;intn=0;Node*p1,*p2,*head;p1=p2=newNode;p1-num=1;head=NULL;n++;while(p1-num!=NULL){if(n==1){head=p1;}elsep2-next=p1;p2=p1;p1=newNode;inta;nn++;p1-num=nn;cout姓名:;cinp1-name;a=(int)p1-name[0]-48;if(a==0)break;cout性别:;cinp1-xb;cout专业:;cinp1-zy;cout出生日期:;cinp1-nian;cinp1-yue;cinp1-ri;cout家庭地址:;cinp1-dz;cout英语入学成绩:;cinp1-mark;n++;}p2-next=NULL;returnhead;}//***********************************************************************************//***********************************************************************************voidchundang(Node*head)//存档{Node*p=head;p=p-next;ofstreamFileout(out.txt);Fileout学生资料endl;Fileout-------------------------------------------------------------------endl;while(p){Fileout--编号:p-num姓名:p-name性别:p-xb专业:p-zy出生日期:p-nian/p-yue/p-ri/地址:p-