学生信息管理系统课 程 设 计 报 告.docx
- 文档编号:9491043
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:30.50KB
学生信息管理系统课 程 设 计 报 告.docx
《学生信息管理系统课 程 设 计 报 告.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统课 程 设 计 报 告.docx(16页珍藏版)》请在冰豆网上搜索。
学生信息管理系统课程设计报告
课程设计报告
课程设计名称:
学生信息管理系统
系别:
三系
学生姓名:
班级:
学号:
成绩:
指导教师:
汤亮
开课时间:
2010-2011学年2学期
一、课程设计目的
本课程设计是在学习面向对象基本理论之后的实践教学环节。
该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。
要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。
学生通过课程设计在下述各方面得到锻炼:
(1)能根据实际问题的具体情况,结合面向对象的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。
(2)提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法和程序的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。
二、课程设计要求
1、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;
(4)在系统的设计中,要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。
2、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能及设计出比较友好的界面等。
三、课程设计内容
设计要求:
使用C++类实现
设计要求实现如下功能:
(1)建立学生信息数据,包括学号、姓名、性别、三科成绩、出生时间、年龄(必须计算得到)。
(2)使用继承的方法构造至少3个类,(即学生类——虚基类,一年级学生和二年级学生类——派生类)使用相应的对象放置10个学生信息。
(3)编写同名display()成员函数,用来输出数组的内容。
(4)按不同类别输出学生信息,比如按性别。
(可选功能)
(5)要求对“<<”和“>>”运算符进行重载。
考虑到输人学号时,也会因不小心引人空格,而且名字中也需要有空格,所以重载“>>’’运算符时,需要满足这个要求。
(6)抽取并计算学生的平均成绩。
(7)按照至少一科成绩进行排序。
(8)检索(查找)指定信息。
(如按姓名检索、按年龄检索)
(9)显示成绩分布的柱状图,示例如下:
(10)参考界面如下:
增加学生
显示全部学生
计算平均成绩
删除一个学生
按年级输出学生信息
按性别输出学生信息
按姓名检索学生
结束程序运行
四、课程设计概要设计
(一)写出必要的头文件
(二)定义一个学生类Student作为基类
公有数据成员:
name(姓名),year,month,day,number(学号),sex(性别),age(年龄),score1(语文),scres2(英语),scores3(数学),aver(三门学科平均成绩)。
公有成员函数:
(1)voiddisplay()用于输出学生的所有信息。
(2)intget_number()用于输出并返回学号number。
(3)floatget_score()用于返回所选的学科。
(4)voidaverage()求解并输出一个学生三科成绩的平均成绩。
将数据成员和成员函数等封装起来,将每个功能函数在类外定义。
(三)Student类派生出两个类Class1类和Class2类
(四)主函数中通过菜单调用各功能函数
用一个switch(m)通过输入m的值来决定执行界面中的哪一个功能。
五、课程设计详细设计与实现
写入头文件:
#include
公有数据成员:
name(姓名),year,month,day,number(学号),sex(性别),age(年龄),score1(语文),scres2(英语),scores3(数学),aver(三门学科平均成绩)。
公有成员函数:
(1)display()
输出一些提示语和输出类中的所有数据成员
(2)intget_number()
在这个函数里可以先输入一个学号,然后把这个学号返回。
(3)floatget_score(int&n)
用于返回Student类中学生的所选的学科。
先判断是哪一门学科,如果输入1就返回第一门学科语文。
(4)voidaverage()
求解并输出一个学生三科成绩的平均成绩。
将scores1,scores2,scores3相加除以3后赋给一个变量并输出它。
主函数:
用一个switch(m)通过输入m的值来决定执行界面中的哪一个功能。
输入一个m值:
case1:
执行录入数据功能,先判断是一年级还是二年级,如果是一年级
记数变量n1++,输入对象class1[n1-1].rewrite(),输入学生全部信息,二年级一样
case2:
执行输出全部数据功能,通过for循环,多次通过类定义的对象数组调用display(),对于一年级用n1控制调用display()次数,二年级一样。
case3:
执行计算三门学科平均成绩,先判断是一年级还是二年级,如果是一年级,通过for循环,t_1.get_number()==class1[i].number找出要求平均数的学生,然后通过for循环调用average()函数,二年级一样。
case4:
删除一个学生功能,输入要删除学生的年级和学号,如果是一年级,通过for循环看class1[i].number是否等于输入的学号,如果是就通过for(j=i;j class1[j]=class1[j+1],覆盖要删除的学号,否就不执行结束,二年级一样。 case5: 按年级输出信息,输入一个数如果是1就调用class1定义的对象的display()成员函数,如果是2就调用class2定义的对象的display()成员函数。 case6: 按性别输出学生信息,输入一个字符型变量c如果c==class1[i].sex,就调用class1定义的对象的display()成员函数,如果c==class2[i].sex,就调用class2定义的对象的display()成员函数 case7: 按姓名检索学生信息,方法同case6。 case8: 按照至少一科成绩进行排序,输入年级和课程代号,然后通过冒泡排序法进行排序。 具体实现代码: for(i=0;i {t1=i; for(j=i;j if(class1[j].get_score(n)>class1[t1].get_score(n))t1=j; if(t1! =i)t_1=class1[t1],class1[t1]=class1[i],class1[i]=t_1;} 六、源代码与注释 #include #include usingnamespacestd; classStudent { public: //类公有数据成员和成员函数 stringname; intnumber; charsex; intyear,month,day; intage; floatscores1; floatscores2; floatscores3; floataver; virtualvoiddisplay();//虚成员函数,输出Student类中学生的所有信息 intget_number();//用于输入并返回Student类中学生的学号number floatget_score(int&n);//用于返回Student类中学生的所选的学科 voidaverage();//求解并输出Student类中学生的三科成绩的平均成绩aver voidrewrite(); }; voidStudent: : display()//类外成员函数voiddisplay()定义 {cout<<"学号: "< cout<<"姓名: "< cout<<"性别: "< cout<<"三门分数: "<<"语文: "< "< "< intStudent: : get_number() {cout<<"请输入学生学号: "< cin>>number; returnnumber;} floatStudent: : get_score(int&n)//类外成员函数定义 {if(n==1) returnscores1; elseif(n==2) returnscores2; elseif(n==3) returnscores3;} voidStudent: : average()//类外成员函数定义 {aver=(scores1+scores2+scores3)/3; cout< voidStudent: : rewrite() {cout<<"请输入学生学号: "< cin>>number; cout<<"请输入学生姓名: "< cin>>name; cout<<"请输入学生性别,M代表男生W代表女生: "< cin>>sex; cout<<"请输入学生语文分数: "< cin>>scores1; cout<<"请输入学生英语分数: "< cin>>scores2; cout<<"请输入学生数学分数: "< cin>>scores3; cout<<"请输入出生日期: "< cin>>year>>month>>day; age=2011-year; } classClass1: publicStudent//声明公用派生类Class1 {public: voiddisplay()//同名display()函数重新定义 {cout<<"年级: 一年级"< cout<<"学号: "< cout<<"姓名: "< cout<<"性别: "< cout<<"三门分数: "<<"语文: "< "< "< cout<<"出生日期: "< cout<<"年龄: "< }; classClass2: publicStudent//声明公用派生类Class2 {public: voiddisplay()//同名display()函数重新定义 {cout<<"年级: 二年级"< cout<<"学号: "< cout<<"姓名: "< cout<<"性别: "< cout<<"三门分数: "<<"语文: "< "< "< cout<<"出生日期: "< cout<<"年龄: "< }; intmain() { Studentclasst[10]; Student*pt=&classt[0]; boolq;//q为booi型,返回一个逻辑值并决定程序何时结束 intm,n,n1=0,n2=0,i,j,w;//声明整型变量 charc; Class1class1[10];//声明Class1类的对象数组class1[10] Class2class2[10]; Class1t_1; Class2t_2; stringt_s; cout<<"**************************************"< cout<<"\t欢迎使用学生信息管理系统"< cout<<"**************************************"< do{q=false;//q决定程序何时结束 cout< cout<<"1.增加一名学生"< cout<<"2.显示全部学生信息"< cout<<"3.计算平均成绩"< cout<<"4.删除一个学生"< cout<<"5.按年级输出学生信息"< cout<<"6.按性别输出学生信息"< cout<<"7.按姓名检索学生信息"< cout<<"8.按照一门课程排序"< cout<<"9.退出系统"< cin>>m; switch(m)//通过不同的m值执行不同的case {case1: cout<<"1代表一年级\t2代表二年级"< cin>>n; if(n==1) {n1++; class1[n1-1].rewrite();} elseif(n==2) {n2++; class2[n2-1].rewrite();} break; case2: //显示全部学生 for(i=0;i {pt=&class1[0]; (pt+i)->display(); cout< for(i=0;i {pt=&class2[0]; (pt+i)->display(); cout< break; case3: //计算平均成绩 cout<<"输入年级: "; cin>>n; if(n==1) {for(i=0;i {if(t_1.get_number()==class1[i].number) class1[i].average();} cout< elseif(n==2) {for(i=0;i {if(t_2.get_number()==class2[i].number) class2[i].average();} cout< break; case4: //删除一个学生 cout<<"请输入要删除学生的年级和学号: "; cin>>n>>w; if(n==1) {for(i=0;i if(class1[i].number==w) {for(j=i;j class1[j]=class1[j+1]; cout<<"信息已删除: "; n1--; break;} elseif(class1[i].number! =w) {cout<<"未找到该学号"< break;} } elseif(n==2) {for(i=0;i if(class2[i].number==w) {for(j=i;j class2[j]=class2[j+1]; cout<<"信息已删除: "; n2--; break;} elseif(class2[i].number! =w) {cout<<"未找到该学号"< break;} } break; case5: //按年级输出学生信息 cout<<"请输入年级: \n1.代表一年级\t2.代表二年级"< cin>>n; if(n==1)for(i=0;i {pt=&class1[0]; (pt+i)->display();} elseif(n==2)for(i=0;i (pt+i)->display();} break; case6: //按性别输出学生信息 cout<<"请输入性别: \n'M'男\t'W'女"< cin>>c; for(i=0;i { if(c==class1[i].sex) {pt=&class1[0]; (pt+i)->display(); cout< } for(i=0;i { if(c==class2[i].sex) {pt=&class2[0]; (pt+i)->display(); cout< } break; case7: //按姓名检索学生 cout<<"请输入要检索的姓名: "; cin>>t_s; cout<<"以下是所有符合要求的信息"< for(i=0;i {if(class1[i].name==t_s) {pt=&class1[0]; (pt+i)->display();} cout< for(i=0;i {if(class2[i].name==t_s) {pt=&class2[0]; (pt+i)->display();} cout< break; case8: //按照至少一科成绩进行排序 cout<<"请输入要排序的年级和课程代号(1代表语文,2代表英语,3代表数学)"< cin>>m>>n; intt1; if(m==1) for(i=0;i {t1=i; for(j=i;j if(class1[j].get_score(n)>class1[t1].get_score(n))t1=j; if(t1! =i)t_1=class1[t1],class1[t1]=class1[i],class1[i]=t_1;} elseif(m==2) for(i=0;i {t1=i;for(j=i;j if(t1! =i)t_2=class2[t1],class2[t1]=class2[i],class2[i]=t_2;} cout<<"排序已完成"< break; case9: //结束程序运行 q=true;break;}} while(! q);cout<<"谢谢你的使用"< return0;} 七、总结 这次编程题是我学C和C++以来做的最大的题目,这次编程我花了很长的时间。 通过该课程设计,我收获很多,而我的收获就是这学期学的理论有了用武之地,学到了不少只有通过上级才知道的知识,让我对编程有了新的认识,这次编程我翻了很多书,耐心地编写,一遍又一遍地调试,在调试过程中发现了自己很多的低级错误,慢慢地改正,终于编译通过并执行了。 我发现编程一定要有耐心,平时多加练习才能又快有准地完成任务。 给我的收获还有就是在编程钱一定要给自己规划好步骤,给自己搭建好一个框架,现在纸上写出大体的思路,这样编程起来就不会混乱,思路就会清晰。 当有了大体思路厚按照题目的要求先编写一小块的内容,每一小块地实现,最后在整合起来。 在审题并构造大体思路是,要根据C++课本中的主流知识,大多数程序编写的模式先写一个基类,然后派生出几个类这样大体的思路来思考,这样能够很快想出程序大体思想,然后花时间去编写出来,加上编写是注意到很多细节,这样程序就很容易完成了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生信息管理系统课 学生 信息管理 系统