C++学生成绩统计管理系统范本模板.docx
《C++学生成绩统计管理系统范本模板.docx》由会员分享,可在线阅读,更多相关《C++学生成绩统计管理系统范本模板.docx(47页珍藏版)》请在冰豆网上搜索。
C++学生成绩统计管理系统范本模板
湖南科技学院
课程设计报告
课程名称:
计算机高级语言(C++)课程设计
课程设计题目:
学生通讯管理系统
系:
数学与计算科学系
专业:
信息与计算科学
年级、班:
信计0801
姓名:
谭鄱仑
学号:
200905002109
指导教师:
牛志毅
职称:
讲师
2010年12月
课程实验报告——--—-——-————--—--—--———-——-———-3
一、需求分析—--——-———-—-—--—-—---—-—-————--—-——-———-———-—3
二、概要设计------——-——-—-——-----——--—--—————-—-——-——-—-—3
三、程序实现思路——-——-———----———---—————-——--——-—-—--—--—7
四、设计总结--—-——————--—————--——-—---———--—-—-—--—-—---—7
五、参考文献-———----———-——-——-—--—--———--—-—--——-—-----——7
六、源代码-——-—----——-—-——----—-—--—--———-—--—-—---—-————8
七、运行情况…………………………………………………………16
C++语言程序设计报告
一、需求分析
用C++编写下面程序
学生成绩统计管理系统(*****)
要求实现如下功能:
①成绩的输入(学号、姓名、英语、数学、C++语言…)。
②成绩统计(各科平均成绩、各科成绩“优秀"、“良好”、“中等”、“及格”、“不及格"的人数及其所占比例).
③总成绩统计(学生的总成绩、平均成绩及成绩排名)。
④成绩的统计结果显示。
⑤学生数据的添加、修改、与删除。
⑥学生数据的读取与存储。
二、概要设计
主要数据定义以及各程序模块的功能:
Student类中:
classStudent
{
private:
intid;//学号
stringname;//姓名
doublescore[3];
intx;//指示是否存储了数据
doubleall;//总成绩
intrank;//名次
stringdengji;//等级
public:
Student();//构造函数
voidSetStudentID(int);//输入学生学号
intStudentID();//返回学生学号
voidSetStudentName(stringstr);//输入学生姓名
stringStudentName();//返回学生姓名
voidSetStudentScore(doubley,doubles,doublec);//输入学生成绩
doubleStudentYscore();//返回学生英语成绩
doubleStudentSscore();//返回学生数序成绩
doubleStudentCscore();//返回学生C++成绩
voidSetStudentX(intn);//给判定学生数据存在与否的X赋值
voidGetall();//计算学生总成绩
voidSetRank();//给学生名次值加1
intRank();//返回学生名次值
intStudentX();//返回判定X的值,判定是否修改
voidRankClear();//给学生的名次赋值为1
voidSetdengji(stringdengji);//输入等级
doubleAll();//返回学生总成绩
stringStudentDengji();//返回学生等级值
};
Studentifo类中:
classStudentifo
{
private:
intnum;//学生个数
Student*stu;//定义指向存储学生类的指针
public:
Studentifo(intn);//构造函数
voidLoadID(intn);//输入学生学号
voidLoadName(int,stringname);//输入学生姓名
voidLoadScore(int,double,double,double);//输入学生各科成绩
voidSetifo();//插入学生数据
voidPutifo();//输出所有学生数据
voidClear();//清除所有学生数据
voidPutID();//输出指定学生数据
voidClearID();//删除指定学生数据
voidMakeRank();//给所有学生排名
voidReSetifo();//修改指定学生数据
voidClearRank();//给指定学生的名次值赋为1
voidMakeAll();//计算各个学生的总成绩
voidPutifoRank();//按名次输出所有学生数据
intID(intn);//返回学生学号
doubleYscore(int);//返回学生英语成绩
doubleSscore(int);//返回学生数学成绩
doubleCscore(int);//返回学生C++成绩
doubleStudentAll(intn);//返回学生总成绩
intStudentRank(intn);//返回学生名次
stringName(int);//返回学生名次
intX(int);//指定X值,确定是否有存储数据
stringDengji(intn);//返回学生等级
voidNumadd();//num值加1
voidXfix(int);//将指定学生的X指示值赋为1
~Studentifo();//析构函数释放new创建的空间
};
类外:
voidDoMenu(intn,Studentifo*t);//将类里的各个函数组合起来实现各个功能,按指定数字执行
voidLoad(Studentifo*S);//从文件中载入学生信息
voidSave(Studentifo*S);//将学生信息保存到文件
voidShowTip();//显示操作提示
voidShowMenu();//显示菜单
主函数的程序流程图
N
Y
三程序实现思路
本程序通过Studentifo类开辟一个Student的类数组用已储存学生数据。
通过Studentifo类的公有函数和Student的公有函数进行关联,对Student类里的私有学生数据进行操作,达到输入,处理,输出学生数据的功能。
同时利用文件输入输出流在项目文件夹中创建一个date。
txt文档进行学生数据的保存与读取。
四设计总结
(1)摆正心态,不心浮气躁
刚拿到题目,难免会觉得特别迷茫,无从下手,这时如果心浮气躁则会更加的觉得困难重重。
但当我摆正心态,静小心来慢慢思考的时候,一个个的思路不断的的冒出,头脑中的想法远比实践过的多。
此时,困难已不是从何下手,而是如何下手会是程序更趋完美。
(2)一鼓作气,个个击破
一旦开始了编程后,就要一鼓作气的继续下去。
选择个个击破,然后将所有的程序在组合起来,很快主程序的雏形就能展现出来,接下来的就只是一点点的修改关联是的小错误了.用不了多久任务即可完成,特有成就感。
但是如果断断续续的则会在每次编的时候被冗杂而繁多的定义弄糊涂,从而没有心情继续下去.
(3)有目的地修改、完善
运行时会出现一些错误,但我发现其实里面的参数并不复杂,只要跟着那个error的提示,一个一个的改下去,其实很简单的。
结果事实也是如此,看完书后,只用了一个小时多一点,102个错误全部搞定了。
错误几乎为以下三类:
1.冒号,分号等符号打错了;
2.大小写等造成的对应问题;
3.变量的不完全修改。
改完以后,在执行时我发现界面不好看,于是我又将主界面略加修改了些。
看上去美观了不少。
再运行功能,前四个都能顺利运行,但对百分比饼状图我傻眼了。
不管我输入数据与否,输入了什么数据,结果都是一样的,相当离谱。
我又糊涂了,搞不清是怎么回事。
于是,又去问同学,在他们的帮助下,成功解决这个问题,在此真要好好谢谢他们!
终于大功告成!
欣慰在这次实践中,我不仅弥补了自己在C++课上所落下的内容,尤其是指针那块部分,虽然现在概念搞的还不是很懂,但看见程序是能够理解的.这次C++实践是给我们这一学期来所学知识的一个总复习,总的实践。
它让我们把所知道的知识点运用的更好,把不知道的知识点搞得明白了.实践出真知,通过这次实践,我也系统的把课本好好的回顾了下.猛然觉得,C++二级考试也有些把握了。
五参考文献
谭浩强。
C++程序设计。
清华大学出版社,2007。
5
六源程序
main.cpp
/*****************************************
课程设计题目:
学生信息管理系统
班级:
0901
学号:
200905002109
姓名:
谭鄱仑
*****************************************/
#include”student。
h”
intmain()
{
inti=0;
charok;
Studentifostuifo;
Studentifo*ifo=&stuifo;
ShowMenu();
cout<〈"选择对应数字进行操作:
";
while(i!
=9)
{
cin>>i;
system(”cls”);
ShowMenu();
DoMenu(i,ifo);
ShowTip();
}
if(flag)
cout〈<"数据已改动,是否保存Y/N”;
cin>〉ok;
if(ok==’Y'||ok=='y')
{
ifo-〉MakeAll();
ifo-〉ClearRank();
ifo—〉MakeRank();
Save(ifo);
cout<〈”数据已保存.。
.按任意键安全退出”;
}
else
cout<〈"已安全退出。
.。
按任意键返回”;
}
Student.h
#ifndefSTUDENT_H_INCLUDED
#defineSTUDENT_H_INCLUDED
#include
#include
#include〈string>
#include〈fstream〉
#include〈sstream>
#include〈iomanip>
usingnamespacestd;
classStudent
{
private:
intid;//学号
stringname;//姓名
doublescore[3];
intx;//指示是否存储了数据
doubleall;//总成绩
intrank;//名次
stringdengji;//等级
public:
Student();//构造函数
voidSetStudentID(int);//输入学生学号
intStudentID();//返回学生学号
voidSetStudentName(stringstr);//输入学生姓名
stringStudentName();//返回学生姓名
voidSetStudentScore(doubley,doubles,doublec);//输入学生成绩
doubleStudentYscore();//返回学生英语成绩
doubleStudentSscore();//返回学生数序成绩
doubleStudentCscore();//返回学生C++成绩
voidSetStudentX(intn);//给判定学生数据存在与否的X赋值
voidGetall();//计算学生总成绩
voidSetRank();//给学生名次值加1
intRank();//返回学生名次值
intStudentX();//返回判定X的值,判定是否修改
voidRankClear();//给学生的名次赋值为1
voidSetdengji(stringdengji);//输入等级
doubleAll();//返回学生总成绩
stringStudentDengji();//返回学生等级值
};
classStudentifo
{
private:
intnum;//学生个数
Student*stu;//定义指向存储学生类的指针
public:
Studentifo(intn);//构造函数
voidLoadID(intn);//输入学生学号
voidLoadName(int,stringname);//输入学生姓名
voidLoadScore(int,double,double,double);//输入学生各科成绩
voidSetifo();//插入学生数据
voidPutifo();//输出所有学生数据
voidClear();//清除所有学生数据
voidPutID();//输出指定学生数据
voidClearID();//删除指定学生数据
voidMakeRank();//给所有学生排名
voidReSetifo();//修改指定学生数据
voidClearRank();//给指定学生的名次值赋为1
voidMakeAll();//计算各个学生的总成绩
voidPutifoRank();//按名次输出所有学生数据
intID(intn);//返回学生学号
doubleYscore(int);//返回学生英语成绩
doubleSscore(int);//返回学生数学成绩
doubleCscore(int);//返回学生C++成绩
doubleStudentAll(intn);//返回学生总成绩
intStudentRank(intn);//返回学生名次
stringName(int);//返回学生名次
intX(int);//指定X值,确定是否有存储数据
stringDengji(intn);//返回学生等级
voidNumadd();//num值加1
voidXfix(int);//将指定学生的X指示值赋为1
~Studentifo();//析构函数释放new创建的空间
};
voidDoMenu(intn,Studentifo*t);//将类里的各个函数组合起来实现各个功能,按指定数字执行
voidLoad(Studentifo*S);//从文件中载入学生信息
voidSave(Studentifo*S);//将学生信息保存到文件
voidShowTip();//显示操作提示
voidShowMenu();//显示菜单
#include"studentifo。
h"
#endif//STUDENT_H_INCLUDED
Studentifo.h
#ifndefSTUDENTIFO_H_INCLUDED
#defineSTUDENTIFO_H_INCLUDED
boolflag=false;//数据是否修改过的标志
Student:
:
Student()
{
id=0;
name=””;
score[0]=0;
score[1]=0;
score[2]=0;
x=2;
all=0;
rank=1;
dengji="";
}
voidStudent:
:
SetStudentID(intn)
{
id=n;
}
voidStudent:
:
SetStudentName(stringstr)
{
if(str==”\0")
{
stringstr1;
cout〈<"输入姓名:
”;
cin>〉str1;
this->name=str1;
}
else
this—>name=str;
}
voidStudent:
:
SetStudentScore(doubley,doubles,doublec)
{
if(y!
=0||s!
=0||c!
=0)
{
score[0]=y;
score[1]=s;
score[2]=c;
}
else
{
doublea,b,c;
cout<<”输入英语成绩:
”;
cin〉>a;
cout<〈"输入数学成绩:
";
cin〉>b;
cout<<”输入C++成绩:
”;
cin〉>c;
score[0]=a;
score[1]=b;
score[2]=c;
}
}
intStudent:
:
StudentID()
{
returnid;
}
stringStudent:
:
StudentName()
{
returnname;
}
doubleStudent:
:
StudentYscore()
{
returnscore[0];
}
doubleStudent:
:
StudentSscore()
{
returnscore[1];
}
doubleStudent:
:
StudentCscore()
{
returnscore[2];
}
voidStudent:
:
SetStudentX(intn)
{
x=n;
}
intStudent:
:
StudentX()
{
returnx;
}
voidStudent:
:
Getall()
{
this-〉all=0;
this-〉all=score[0]+score[1]+score[2];
doublen;
n=all/3;
if(0〈=n&&n<60)
this->dengji=”不及格”;
elseif(60<=n&&n〈70)
this->dengji="及格”;
elseif(70〈=n&&n<80)
this—〉dengji=”中等”;
elseif(80<=n&&n〈90)
this—〉dengji="良好”;
else
this->dengji=”优秀";
}
doubleStudent:
:
All()
{
returnall;
}
voidStudent:
:
SetRank()
{
rank+=1;
}
intStudent:
:
Rank()
{
returnrank;
}
voidStudent:
:
RankClear()
{
rank=1;
}
voidStudent:
:
Setdengji(stringdengji)
{
this-〉dengji=dengji;
}
stringStudent:
:
StudentDengji()
{
returndengji;
}
Studentifo:
:
Studentifo(intn=100)
{
num=0;
stu=newStudent[n];
}
Studentifo:
:
~Studentifo()
{
deletestu;
}
voidStudentifo:
:
Numadd()
{
num+=1;
}
voidStudentifo:
:
LoadID(intn)
{
stu[n].SetStudentID(n);
}
voidStudentifo:
:
LoadName(intn,stringname)
{
stu[n].SetStudentName(name);
}
voidStudentifo:
:
LoadScore(intn,doubley,doubles,doublec)
{
stu[n]。
SetStudentScore(y,s,c);
}
voidStudentifo:
:
Setifo()
{
intn;
cout〈〈”输入学号:
";
cin〉>n;
if(stu[n].StudentX()==1||n<=0)
cout〈<"该学号已有或者学号信息错误”<else
{
stu[n]。
SetStudentID(n);
stu[n].SetStudentName(”\0");
stu[n].SetStudentScore(0,0,0);
stu[n]。
SetStudentX
(1);
num++;
cout<〈endl;
}
}
voidStudentifo:
:
Putifo()
{
inti,s1=0,y1=0,c1=0,y2=0,s2=0,c2=0,y3=0,s3=0,c3=0,y4=0,s4=0,c4=0,y5=0,s5=0,c5=0;
doubleY=0,S=0,C=0;
if(num==0)
cout<〈”没有学生数据"<〈endl;
else
{
cout<<"|***************************学生综合信息**************************|”〈〈endl;
cout<〈”|学号”〈<"\t”<<”姓名”<<”\t”〈<"英语"<<"\t”〈〈”数学"〈<”\t”<<"C++”<<"\t”〈〈"总成绩”〈〈”\t”<<"名次"<<"\t"〈〈"等级|”<cout〈〈"|*****************************************************************|”<〈endl;
for(i=1;i〈=100;i++)
{
if(stu[i].StudentX()==1)
{
Y+=stu[i]。
StudentYscore();
S+=stu[i]。
StudentSscore();
C+=stu[i].StudentCscore();
cout<〈”|"<〈stu[i]。
StudentID()<〈'\t';
cout〈〈stu[i]。
StudentName()<〈’\t’;
cout〈StudentYscore()〈〈’\t’;
cout〈StudentSscore()<<’\t';
cout<〈stu[i]。
StudentCscore()〈<’\t’;
stu[i]。
Getall();
cout〈〈stu[i]。
All()〈〈’\t';
cout<cout〈cout〈<"\t|”<〈endl;
cout〈<”|*******************************************************