当前位置:文档之家› 学生综合测评系统 C++设计报告

学生综合测评系统 C++设计报告

上海电力学院《高级程序设计C++》课程设计题目:学生综合测评系统院系:计算机科学与技术学院专业年级:计算机科学与技术学生姓名:学号:********指导教师:2013年1月目录目录 (2)1.需求分析 (3)2.概要设计 (4)3.详细设计 (6)4.用户使用手册 (9)4.1 环境设置 (9)4.2 操作步骤 (10)5.程序创新点............................................ 错误!未定义书签。

6.使用的主要技术.................................... 错误!未定义书签。

7.总结 ....................................................... 错误!未定义书签。

附录 .................................................................. 错误!未定义书签。

1.需求分析本系统旨在便于学校管理和查阅学生信息并计算学生的考试成绩和名次以及综合测评成绩和名次。

每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、高等数学、物理、英语三门单科成绩、、同学互评分、品德成绩、任课教师评分。

考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。

程序的基本功能:1.学生信息处理:(1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。

(2) 插入(修改)同学信息。

(3) 删除同学信息。

(4) 浏览学生信息。

2.学生数据处理:(1) 按考试科目录入学生成绩并且按公式:考试成绩=(语文+数学+外语)/3 计算考试成绩,并计算考试名次。

(2) 学生测评数据输入并计算综合测评总分及名次。

(3) 学生数据管理。

(4) 学生数据查询。

3.学生综合信息输出2.概要设计根据需求分析中的描述,知道需要一个帐户类型,由于基本数据类型无法实现将一个用户的信息绑定在一起,所以需要定义一个抽象数据类型帐户,命名为Student,其定义如下:class Student{public:int num;//学号string name;//姓名string sex;//性别string address;//家庭住址string phone;//联系电话double english;//英语成绩double math;//数学成绩double physics;//物理分数double average;//考试成绩double grade1;//同学互评分double grade2;//品德成绩double grade3;//任课教室评分double gradesum;//综合测评成绩int ranking1;//考试名次int ranking2;//综合测评名次};为了方便外部函数进行操作,以上全为共有变量。

定义一个对象数组Student stud[100];方便对Student类中数据进行输入和输出以及排序等等功能。

外部操作函数有:void read()//从文件中读取学生信息函数void show()//显示学生信息函数void save()//保存学生信息函数void SR()//输入学生信息函数void SC()//删除学生信息函数void TJ()//添加学生信息函数void XG()//修改学生信息函数void PM1()//计算考试成绩以及排名函数void PM2()//计算综合测评成绩以及排名函数void sn()//按学生学号查找学生信息void sm()//按学生姓名查找学生信息void Fire()//学生信息管理界面void statistics()//学生成绩统计管理界面void inquiry()//学生查询管理界面void about()//关于系统界面void thanks()//退出程序界面主函数为学生测评系统主界面3、详细设计void read(){char filename[20];cout<<"从文件中读取信息!"<<endl;cout<<"请输入文件名:"<<endl;cin>>filename;cout<<"请问要读取几名学生信息:"<<endl;cin>>n;ifstream infile;infile.open(filename,ios::in|ios::out);if(!infile){cerr<<"open error!"<<endl;exit(1);}int i=0;do{infile>>stud[i].num>>stud[i].name>>stud[i].sex>>stud[i].address>>stud[i].phone>>stud[i].english>>stud[i].math>>stud[i].physics>>stud[i].grade1>>stud[i].grade2>>stud[i].grade3;i++;}while(!infile.eof());infile.close();cout<<"读取成功!"<<endl;}以上为读取文件中学生信息的函数,当信息成功读取后才可进行修改或添加或删除,所以在许多外部函数里面都必须要有读取函数的功能为前提。

void save(){int i;char filename[20];cout<<"将记录保存在文件夹!"<<endl;cout<<"请输入文件名:";cin>>filename;ofstream outfile(filename);if(!outfile){cerr<<"open error!"<<endl;}//保存时按学号排序,采用冒泡排序法实现数组内的排序……for(i=0;i<n;i++){outfile<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].sex<<" "<<stud[i].address<<" "<<stud[i].phone<<" "<<stud[i].english<<" "<<stud[i].math<<" "<<stud[i].physics<<" "<<stud[i].grade1<<" "<<stud[i].grade2<<" "<<stud[i].grade3<<endl;}outfile.close();cout<<"保存成功!"<<endl;}在每次保存时都先按学号排序,保证信息是按学号从小到大的顺序存入文件。

在输入、修改、添加和删除函数的末端都有保存函数以实现信息的保存。

void XG(){read();begin:string find_name;int i;cout<<"请输入你要修改的学生名字:"<<endl;cin>>find_name;for(i=0;i<n;i++)if(stud[i].name==find_name){……}//输出修改前学生信息if(stud[i].name!=find_name){cout<<"can't find this name"<<endl;cout<<"请重新查找!"<<endl;goto begin;}cout<<"请输入新的信息:"<<endl;cout<<"学号:"<<' ';cin>>stud[i].num;…………cout<<"修改成功,是否保存?(y/n)"<<endl;cin>>press;switch(press){case 'y' : save();break;default: cout<<"不保存!";break;}}基于数组形式对数据进行修改。

基本上所有函数都是基于数组进行操作,像删除函数是用循环先匹配类中的一个数据,找到之后再以此开始用对象数组后面的替换掉前一个,以实现删除功能。

string SC_name;cout<<"请输入你要删除的学生名字:"<<endl;int i=0;cin>>SC_name;while(stud[i].name!=SC_name && i<n)i++; //查找判断if(stud[i].name==SC_name){for(int j=i;j<n+1;j++){stud[i].num=stud[i+1].num;stud[i].name=stud[i+1].name;…………}}考试成绩排名和综合测评成绩排名都是采用冒泡排序法实现:double temp[100];for(int a=0;a<n;a++)//计算考试成绩并赋值给temp{stud[a].average=(stud[a].english+stud[a].math+stud[a].physics)/3;temp[a]=stud[a].average;}double t;for(int j=0;j<n;j++) //temp中的考试成绩按从大到小冒泡排序{for(int k=0;k<n-1-j;k++){f(temp[k]<temp[k+1]){t=temp[k]; temp[k]=temp[k+1]; temp[k+1]=t;}}}for(int q=0;q<n;q++)//判定考试成绩名次{for(int p=0;p<n;p++){if(stud[p].average==temp[q])stud[p].ranking1=q+1;}}最后各种界面函数通过switch语句进行调用,以实现各种功能来完成此系统:void Fire()//学生信息管理系统界面{ while(choose!=0){ //输出界面样式略。

相关主题