学生信息管理系统(代码已改).doc_第1页
学生信息管理系统(代码已改).doc_第2页
学生信息管理系统(代码已改).doc_第3页
学生信息管理系统(代码已改).doc_第4页
学生信息管理系统(代码已改).doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机科学系C+课程设计20132014学年第一学期课 程 名 称 C+面向对象程序设计 设 计 题 目 学生信息管理 系统 学 生 姓 名 周慧 向静 雷娜 聂佩 学 号 44 41 34 36 专 业 班 级 12级计科二班 指 导 教 师 刘灵丽 目 录1.设计任务 1.1题目与要求(1)1.2本系统涉及的知识点(2) 2.功能设计 2.1算法设计(3) 2.2主要模块流程图(5) 3.程序代码设计 3.1输入模块(6) 3.2输出模块(7) 4.总结(8) 参考文献(12) 附录(13) 1 设计任务书 1.1题目与要求本组计划(成员为:周慧,向静,雷娜,聂佩合作)编写一个学生信息管理系统,主要用来管理学生基本信息及成绩信息。具体要求如下:(1)建立学生信息数据,包括学号、姓名、性别、三科成绩、出生时间、年龄(必须计算得到)。(2)使用继承的方法构造至少3个类,(即学生类虚基类,一年级学生和二年级学生类派生类)使用相应的对象放置10个学生信息。(3)编写同名display()成员函数,用来输出数组的内容。(4)按不同类别输出学生信息,比如按性别。(可选功能)(5)要求对“”和“”运算符进行重载。考虑到输人学号时,也会因不小心引人空格,而且名字中也需要有空格,所以重载“运算符时,需要满足这个要求。(6)抽取并计算学生的平均成绩。(7)按照至少一科成绩进行排序。(8)检索(查找)指定信息。(如按姓名检索)(9)参考界面如下:* 学生信息管理*增加学生*显示全部学生*计算平均成绩*删除一个学生*按年级输出学生信息*按性别输出学生信息*按姓名检索学生*结束程序运行(10)输出:相应的学生信息。根据分工,周慧的主要工作是运算符重载。根据分工,向静的主要工作是按成绩排序和按性别输出。根据分工,雷娜的主要工作是计算年龄和平均成绩。 根据分工,聂佩的主要工作是按姓名检索和按学号删除。22 l.2本系统涉及的知识点类、数组、循环、函数、分支、指针。利用虚函数由学生类派生出大一学生,大二学生这两个类。同名的display()函数,用来作为数组的输出。“”和“”运算符的重载,目的是为了避免输人学号时,因不小心引人空格,还有就是名字中也需要有空格。利用for语句进行按某一要求的排名,修改学生的相关信息,及求取学生的平均成绩。2 功能设计2.1 算法设计1、本系统需要实现的功能要求:(1)利用switch语句设计如图1所示的主菜单:请输入选项编号(011) 1增加一位一年级学生 2增加一位二年级学生 3显示所有学生 4计算一年级学生平均成绩 5- 计算二年级学生平均成绩 6按成绩排序一年级学生的信息 7按成绩排序二年级学生的信息 8删除一年级学生的学号 9删除二年级学生的学号 10-按性别输出 11-按姓名检索 0-结束程序运行图 1 学生通讯录系统主菜单(2) 选择6或者7后,调用排序函数,进入函数后利用switch语句实现一个如图2所示的菜单,该菜单中每个选项调用一个函数 请选择科目请输入选项编号(13)1数学2语文3英语图2 成绩排序3、 根据所选菜单设计相应的功能函数:(1) 输入函数cin:利用循环输入的方式,将有关信息存入数组,数组根据实际的人数,采用动态方式建立学生信息。(2) 输出函数display():循环输出数组中的内容。(3) 求平均分函数average:利用循环方式求得每个学生三科的平均成绩。按成绩排序显示所有学生按学号删除2年级学生按学号删除1年级学生按姓名检索按性别输出2年级平均成绩按英语成绩排序按语文成绩排序按数学成绩排序1年级平均成绩增加2年级学生增加1年级学生学生信息管理系统2.2主要模块流程图图3 学生信息管理系统流程图 3.程序代码设计3.1输入模块1.函数原形: void getdata(),int getage(),int getnumber(),string getname(),double getaverage(),void meum(int &choice)2. 功能:用来选择菜单和输入相应的学生信息(包括:学号,姓名,性别,年龄,出生时间,三科成绩,如今年份,平均成绩)3. 变量及类型:s1i,s2i:对象数组变量。4、说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中。5、模块代码及其相关注释void getdata() cout学号 姓名 性别 出生时间 如今年份 语文 数学 英语numbernamesexyear1year2ChineseMathEnglish;age=int(year2-year1);int getage()age=year2-year1;return age; int getnumber()return number; string getname()return name;文件代码分析:当选择完选项后,系统就会调用相应函数,再输入相应的信息。 3.2输出模块1. 函数原形:virtual void display(),void display()2.功能:用来作为数组的输出,输出学生的信息(包括:学号,姓名,性别,年龄,出生时间,三科成绩,如今年份,平均成绩)3.变量及类型:inti,j:循环控制变量。4.说明:在进入输出函数后,就会清屏,再在缓冲区域找到相应学生信息管理系统,并输出相应的学生信息。5、 模块代码及其相关注释virtual void display() cout学号 姓名 年龄 性别 出生时间 如今年份 语文数学 英语endl; coutnumber name age sex year1 year2 Chinese Math Englishendl; void display()cout学号 姓名 年龄 性别 出生时间 如今年份 语文 数学 英语endl; coutnumber name age sex year1 year2 Chinese Math Englishendl;代码分析:virtual void display()是一个虚函数,每个派生类中都有void display()函数,当选择完所需的选项后,就会调用相应的void display()函数,输出一年级或者二年级学生的信息。4. 总结1、 程序调试情况图4 主菜单图5 增加学生图6 显示所有学生图7 平均成绩图8 成绩排序 图9 删除学生图10 按姓名检索图11 按性别输出2. 本组成员在程序设计中感想雷娜:这是我们第二次做课程设计,虽然比第一次多了很多的经验,但是不知道是因为题目比上次要难,还是因为我们对C+的掌握没那么透彻,我们需要不停的翻阅课本,或者从网上查找一些我们在书本上找不到的资料,所以感觉花费的时间比一次还要多。这次课程设计虽然完成的有点艰辛,但是我觉得自己收获的不少知识,通过这次做课程设计,我发现了自己在C+上的一些问题,对类的继承掌握的不够,对运算符的重载也不是怎么理解,还有就是缺乏刻苦专研的精神,总是遇到一点难题就选择退缩,还有点喜欢拖拖拉拉,总是喜欢把今天的事,拖到明天。通过这次实验让我知道了,编程需要细心,尤其是那么比较复杂的程序,要想理清自己的思路再做,不能想到哪就做到哪,这样反而会弄巧成拙,只有一步一个脚印,踏踏实实,才能更好地完成任务。聂佩:通过这次做课程设计,我发现自己很多的不足,对于书本知识掌握的不够好,特别是继承与派生、虚函数以及运算符重载这部分的内容自己理解得还不够透彻,不能熟练应用,总是要通过不断地翻书,问同学,上网搜等方法去编写程序。而且在这次课程设计中,我发现自己存在严重的畏难情绪,遇到难题就不去做想放弃,没有去试着解决难题就开始打退堂鼓,而且编程不够耐心与细心。在编程时只是想到什么就写什么,没有全局思维,总是改了就改。在这一次编程过程中遇到许多问题,同时也让我们学到了很多,认识到自己的不足之处,从而在以后改正并警醒。周慧:相比第一次的课程设计,在此次课程设计中,更加体会到程序的严密性,在查漏补缺的过程中,发现很多细节稍微不注意就可能导致程序出现很大的错误。而且在设计程序当中方法多种,通过我们小组的每个成员的努力结合大家对自己编程部分的认识,共同解决了程序运行的错误问题。在小组成员的积极配合中,也让我认识到了程序设计语言往往需要团队精神,而且在诸多问题中,我们还可以通过查阅书籍和上网了解,这样才能更快得学到我们所需要的知识点。向静:相比第一次做课程设计有了一点经验,但是还是手忙脚乱的,其中也遇到很多的问题。这次课程设计相比上次来说好多了,上次的课程设计很多方面的只是都是在百度或者问别人才了解,但是这次所涉及的只是都是书上的知识点,如:继承、虚函数、虚基类等。不过由于自己对知识点掌握的不牢固,总是需要翻教科书才能继续下去,最后在我们组成员的共同努力下才完成这次设计。通过做课程设计,让我知道:我们做事情首先要打好基础,只有打好基础才能进一步巩固,而书上的知识是我们学习的最基本的东西。 参考文献【1】 陈维兴 林小茶 ,C+面向对象程序设计( 第二版),中国铁道出版社【2】 陈维兴 林小茶 ,C+面向对象程序设计习题解答与上机指导( 第二版),中国铁道出版社附录#include #include using namespace std;class studentpublic:virtual void display() cout学号 姓名 年龄 性别 出生时间 如今年份 语文 数学 英语endl; coutnumber name age sex year1 year2 Chinese Math Englishendl;int number,year1,year2,age;double Chinese, Math, English,sum,average;string name;string sex;friend ostream& operator(ostream& out, student& right) outright.number right.age right.sex right.year1 right.year2 right.Chinese right.Math right.English(istream& in,student& right) right.sexright.year1right.year2right.Chineseright.Mathright.English; return in;class student1:public student public:void getdata() cout学号 姓名 性别 出生时间 如今年份 语文 数学 英语numbernamesexyear1year2ChineseMathEnglish;age=int(year2-year1);void display() cout学号 姓名 年龄 性别 出生时间 如今年份 语文 数学 英语endl; coutnumber name age sex year1 year2 Chinese Math Englishendl;int getage()age=year2-year1;return age;int getnumber()return number;string getname()return name;double getaverage()sum=Chinese+Math+English;average=sum/3;return average;class student2:public student public: void getdata() cout学号 姓名 性别 出生时间 如今年份 语文 数学 英语numbernamesexyear1year2ChineseMathEnglish;age=int(year2-year1); void display() cout学号 姓名 年龄 性别 出生时间 如今年份 语文 数学 英语endl; coutnumber name age sex year1 year2 Chinese Math Englishendl; int getage()return age; int getnumber()return number; string getname()return name; double getaverage() sum=Chinese+Math+English;average=sum/3;return average;void menu(int &choice) coutttt*endl; coutttt 学生信息管理系统endl; coutttt*endl; coutttt1、增加一位一年级学生endl; coutttt2、增加一位二年级学生endl; coutttt3、显示所有学生endl; coutttt4、计算一年级学生平均成绩endl;coutttt5、计算二年级学生平均成绩endl; coutttt6、按成绩排序一年级学生信息endl; coutttt7、按成绩排序二年级学生信息endl; coutttt8、删除一年级学生的学号endl; coutttt9、删除二年级学生的学号endl; coutttt10、按姓名检索学生endl; coutttt11、按性别输出学生endl; coutttt0、结束程序运行endl;coutchoice; int choice; int a1=0,a2=0,n=1;student1 s150,t; student2 s250,m;int i=0,j=0;int average=0;int temp;string s1name,sex;void case3()cout显示一年级所有学生信息:endl; for (i=0;i!=a1;+i)s1i.display();cout显示二年级所有学生信息:endl; for (i=0;i!=a2;+i)s2i.display(); return;void case4()cout一年级学生平均成绩:endl; for (i=0;i!=a1;+i)average+=s1i.getaverage(); coutaverage/(a1)endl;return;void case5()cout二年级学生平均成绩:endl; for (i=0;i!=a2;+i)average+=s2i.getaverage(); coutaverage/(a2)endl;return;void case6()coutchoice; switch (choice) case 1:for (i=0;i!=a1-1;+i) for(j=i+1;j!=a1;j+) if (s1i.Maths1j.Math) t=s1i;s1i=s1j;s1j=t; for (i=0;i!=a1;+i)s1i.display(); break; case 2:for (i=0;i!=a1-1;+i) for(j=i+1;j!=a1;j+) if (s1i.Chineses1j.Chinese) t=s1i;s1i=s1j;s1j=t; for (i=0;i!=a1;+i)s1i.display(); break; case 3:for (i=0;i!=a1-1;+i) for(j=i+1;j!=a1;j+) if (s1i.Englishs1j.English) t=s1i;s1i=s1j;s1j=t; for (i=0;i!=a1;+i)s1i.display(); break; default:cout请重新输入有效数字;break; return;void case7()coutchoice; switch (choice) case 1:for (i=0;i!=a2-1;+i) for(j=i+1;j!=a2;j+) if (s2i.Maths2j.Math) m=s2i;s2i=s2j;s2j=m; for (i=0;i!=a2;+i)s2i.display(); break; case 2:for (i=0;i!=a2-1;+i) for(j=i+1;j!=a2;j+) if (s2i.Chineses2j.Chinese) m=s2i;s2i=s2j;s2j=m; for (i=0;i!=a2;+i)s2i.display(); break; case 3:for (i=0;i!=a2-1;+i) for(j=i+1;j!=a2;j+) if (s2i.Englishs2j.English) m=s2i;s2i=s2j;s2j=m; for (i=0;i!=a2;+i)s2i.display(); break; default:cout请重新输入有效数字endl;break; return;void case8()cout请输入要删除一年级学生的学号temp; for (i=0;i!=a1;+i) if (temp=s1i.getnumber() s1i=s1i+1;cout已删除endl;-a1;break; return;void case9()cout请输入要删除二年级学生的学号temp; for (i=0;i!=a1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论