学生信息管理系统课 程 设 计 报 告.docx

上传人:b****8 文档编号:9491043 上传时间:2023-02-04 格式:DOCX 页数:16 大小:30.50KB
下载 相关 举报
学生信息管理系统课 程 设 计 报 告.docx_第1页
第1页 / 共16页
学生信息管理系统课 程 设 计 报 告.docx_第2页
第2页 / 共16页
学生信息管理系统课 程 设 计 报 告.docx_第3页
第3页 / 共16页
学生信息管理系统课 程 设 计 报 告.docx_第4页
第4页 / 共16页
学生信息管理系统课 程 设 计 报 告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

学生信息管理系统课 程 设 计 报 告.docx

《学生信息管理系统课 程 设 计 报 告.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统课 程 设 计 报 告.docx(16页珍藏版)》请在冰豆网上搜索。

学生信息管理系统课 程 设 计 报 告.docx

学生信息管理系统课程设计报告

 

课程设计报告

 

课程设计名称:

学生信息管理系统

系别:

三系

学生姓名:

班级:

学号:

成绩:

指导教师:

汤亮

开课时间:

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;jclass2[t1].get_score(n))t1=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++课本中的主流知识,大多数程序编写的模式先写一个基类,然后派生出几个类这样大体的思路来思考,这样能够很快想出程序大体思想,然后花时间去编写出来,加上编写是注意到很多细节,这样程序就很容易完成了。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1