学生信息管理系统课 程 设 计 报 告文档格式.docx
- 文档编号:22627089
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:16
- 大小:30.50KB
学生信息管理系统课 程 设 计 报 告文档格式.docx
《学生信息管理系统课 程 设 计 报 告文档格式.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统课 程 设 计 报 告文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
(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<
iostream.h>
(1)display()
输出一些提示语和输出类中的所有数据成员
(2)intget_number()
在这个函数里可以先输入一个学号,然后把这个学号返回。
(3)floatget_score(int&
n)
用于返回Student类中学生的所选的学科。
先判断是哪一门学科,如果输入1就返回第一门学科语文。
(4)voidaverage()
求解并输出一个学生三科成绩的平均成绩。
将scores1,scores2,scores3相加除以3后赋给一个变量并输出它。
主函数:
输入一个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<
n1-1;
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<
i++)
{t1=i;
for(j=i;
n1;
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;
}
六、源代码与注释
iostream>
#include<
string>
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<
<
"
学号:
number<
endl;
cout<
姓名:
name<
性别:
sex<
三门分数:
语文:
scores1<
'
'
英语:
scores2<
数学:
scores3<
}
intStudent:
get_number()
请输入学生学号:
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;
aver<
rewrite()
请输入学生姓名:
name;
请输入学生性别,M代表男生W代表女生:
sex;
请输入学生语文分数:
scores1;
请输入学生英语分数:
scores2;
请输入学生数学分数:
scores3;
请输入出生日期:
year>
month>
day;
age=2011-year;
classClass1:
publicStudent//声明公用派生类Class1
{public:
voiddisplay()//同名display()函数重新定义
{cout<
年级:
一年级"
出生日期:
year<
"
month<
day<
年龄:
age<
classClass2:
publicStudent//声明公用派生类Class2
{public:
voiddisplay()//同名display()函数重新定义
二年级"
;
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;
**************************************"
\t欢迎使用学生信息管理系统"
do{q=false;
//q决定程序何时结束
1.增加一名学生"
2.显示全部学生信息"
3.计算平均成绩"
4.删除一个学生"
5.按年级输出学生信息"
6.按性别输出学生信息"
7.按姓名检索学生信息"
8.按照一门课程排序"
9.退出系统"
cin>
m;
switch(m)//通过不同的m值执行不同的case
{case1:
1代表一年级\t2代表二年级"
//增加学生
n;
if(n==1)
{n1++;
class1[n1-1].rewrite();
{n2++;
class2[n2-1].rewrite();
break;
case2:
//显示全部学生
for(i=0;
i++)
{pt=&
class1[0];
(pt+i)->
display();
n2;
class2[0];
}
break;
case3:
//计算平均成绩
输入年级:
if(n==1)
{for(i=0;
{if(t_1.get_number()==class1[i].number)
class1[i].average();
elseif(n==2)
{if(t_2.get_number()==class2[i].number)
class2[i].average();
case4:
//删除一个学生
请输入要删除学生的年级和学号:
n>
w;
if(n==1)
{for(i=0;
if(class1[i].number==w)
{for(j=i;
class1[j]=class1[j+1];
cout<
信息已删除:
n1--;
elseif(class1[i].number!
=w)
{cout<
未找到该学号"
break;
elseif(n==2)
if(class2[i].number==w)
{for(j=i;
n2-1;
class2[j]=class2[j+1];
n2--;
}
elseif(class2[i].number!
{cout<
case5:
//按年级输出学生信息
请输入年级:
\n1.代表一年级\t2.代表二年级"
if(n==1)for(i=0;
elseif(n==2)for(i=0;
i++){pt=&
case6:
//按性别输出学生信息
请输入性别:
\n'
M'
男\t'
W'
女"
c;
{
if(c==class1[i].sex)
if(c==class2[i].sex)
case7:
//按姓名检索学生
请输入要检索的姓名:
t_s;
以下是所有符合要求的信息"
{if(class1[i].name==t_s)
{pt=&
(pt+i)->
{if(class2[i].name==t_s)
case8:
//按照至少一科成绩进行排序
请输入要排序的年级和课程代号(1代表语文,2代表英语,3代表数学)"
m>
intt1;
if(m==1)
elseif(m==2)
j++)if(class2[j].get_score(n)>
class2[t1].get_score(n))t1=j;
if(t1!
=i)t_2=class2[t1],class2[t1]=class2[i],class2[i]=t_2;
排序已完成"
case9:
//结束程序运行
q=true;
}}
while(!
q);
谢谢你的使用"
return0;
七、总结
这次编程题是我学C和C++以来做的最大的题目,这次编程我花了很长的时间。
通过该课程设计,我收获很多,而我的收获就是这学期学的理论有了用武之地,学到了不少只有通过上级才知道的知识,让我对编程有了新的认识,这次编程我翻了很多书,耐心地编写,一遍又一遍地调试,在调试过程中发现了自己很多的低级错误,慢慢地改正,终于编译通过并执行了。
我发现编程一定要有耐心,平时多加练习才能又快有准地完成任务。
给我的收获还有就是在编程钱一定要给自己规划好步骤,给自己搭建好一个框架,现在纸上写出大体的思路,这样编程起来就不会混乱,思路就会清晰。
当有了大体思路厚按照题目的要求先编写一小块的内容,每一小块地实现,最后在整合起来。
在审题并构造大体思路是,要根据C++课本中的主流知识,大多数程序编写的模式先写一个基类,然后派生出几个类这样大体的思路来思考,这样能够很快想出程序大体思想,然后花时间去编写出来,加上编写是注意到很多细节,这样程序就很容易完成了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生信息管理系统课 学生 信息管理 系统