c++学生成绩管理系统
学号07770234
(面向对象程序设计课程设计)
设计说明书
学生成绩管理系统
起止日期:2008年11月15 日至2008 年12 月27 日
学生姓名战秋媛
班级07软件2班
成绩
指导教师(签字)
电子与信息工程系
2008年12 月24 日
天津城市建设学院
课程设计任务书
2008 —2009 学年第二学期
电子与信息工程系软件工程专业07软件2 班级
课程设计名称:面向对象程序设计课程设计
设计题目:学生成绩管理系统
完成期限:自2008 年11 月15 日至2008 年12 月27 日共 5 周
设计依据、要求及主要内容:
设计依据:C++程序设计
设计要求:通过这次课程设计,需要对C++的各个环节知识形成一个有结构的整体,可以熟练的对C++知识进行综合应用,同时达到对已学知识的全面复习。
主要内容:
利用C++高级程序设计语言编写小型的学生成绩管理系统,实现对学生3门课程成绩的管理。学生信息包括学号、姓名、3门考试成绩(英语、数学、计算机)。并利用菜单的形式进行管理。
系统菜单的主要功能:
1.录入学生成绩数据,包括学号、姓名、数学、英语、计算机三门课程的成绩。
2.计算学生成绩的总分和平均分,并对其输出。
3.按照学号大小进行排序。
4.查找学生信息。输入所要查找的学生学号,就能查看对应此学号学生的成绩。 5.插入学生信息。根据学号进行顺序插入。
6.删除不需要的学生信息功能,通过输入学号能查找出学生信息并进行删除。
7.退出系统。
指导教师(签字):
教研室主任(签字):
批准日期:年月日
课程设计进度计划表
目录
1、设计目的 (5)
2、总体设计 (5)
3、详细设计: (5)
3.1、程序具体功能: (5)
3.2、函数功能: (6)
3.3、调试分析 (7)
4、源程序和运行结果 (7)
4.1、源程序 .............................................................................. 错误!未定义书签。
4.2、运行结果 (22)
4.3、心得体会 (22)
5、参考文献 (23)
学生成绩管理系统
1、设计目的
○1.通过实验实现对学生信息系统的管理操作;
○2.进一步掌握和利用C++进行程设计的能力;
○3.进一步理解和运用结构化程序设计的思想和方法;
○4.初步掌握开发一个小型实用系统的基本方法;
○5.学会利用流程图或N-S图表示算法;
○6.掌握书写程设计开发文档的能力(书写课程设计报告);
2、总体设计
3、详细设计:
3.1、程序具体功能:
①.录入学生成绩数据,包括学号、姓名、数学、英语、计算机三门课程的成绩。
②.计算学生成绩的总分和平均分,并对其输出。
③.按照学号大小进行排序。
④.查找学生信息。输入所要查找的学生学号,就能查看对应此学号学生的成绩。
⑤.插入学生信息。根据学号进行顺序插入。
⑥.删除不需要的学生信息功能,通过输入学号能查找出学生信息并进行删除。
⑦.退出系统。
3.2、函数功能:
○1、函数开头进行宏定义
○2、struct student和struct record
开始对结构体student、record的声明;
○3、对函数进行声明,这些函数将在后面进行定义。
1.void input_rec(); 录入数据的函数,用于录入多条学生记录
void input(int); 输入信息的函数,包括学号、课程、成绩、平时成绩等
void insert(); 添加数据,添加学生信息
void del(); 删除数据,删除学生信息
void write(); 将数据写入文件的函数
void read(); 从文件读取数据
void printstu(); 显示学生信息的函数
void printrec(int,int); 显示学生成绩的函数
void cal(int); 计算成绩及学分的函数
void q_dat(); 查询数据子菜单
void q_stud(); 查询学生资料子菜单
void q_sin1(); 查询个人资料子菜单
void q_num1(); 按学号查询
void q_name1(); 按姓名查询
void q_sco(); 查询成绩
void q_sin2(); 查询个人成绩子菜单
void q_num2(); 按学号查询
void q_name2(); 按姓名查询
void sortbyname(); 按姓名排序
void sortbynumber(); 按学号排序
void sort(); 排序
○4、采用if-else语句、for语句、switch语句、do-while语句
○5、void printstu();void printrec(int,int);
显示学生信息的函数和显示学生成绩的函数,用for语句循环。
○6、void cal(int);
计算成绩及学分函数,用于计算综合成绩和实得学分,用if-else语句判断。
○7、void q_dat();void q_stud();void q_sin1();void q_sin2();
查询菜单采用多个子菜单形式,便于用户选择,可以实现不同查询方式,例如按学号、姓名查询。实现查询种类多样,可以查询学生信息和成绩。
○8、void q_num1();void q_name1();void q_num2();void q_name2();
按学号查询函数和按姓名查询函数,实现按学号和姓名查询个人基本信息和成绩信息。
⑨、void write();void read(); 保存数据和读取数据函数
⑩、void del()删除数据的函数,根据用户需要选择删除。
○11、void sortbyname();void sortbynumber();void sort();选择两种方式的排序方式进行排序的函数。○12、int main();
主函数将以上函数联系起来,以实现各个函数的功能,达到理想的结果,此程序采用switch语句,格式清晰,容易接受.
3.3、调试分析
上机调试之前我们对所编的程序作了纸面上的检查,先改正一些不该犯错误,如{ }没有搭配完整,漏写,拼写错误等,这些都是我们通过认真的态度在运行之前可以解决、避免的。而且还可以减少机器时间。往往一连串的错误是由于漏写或写错一个字符引起的。
在上机调试过程中,对文件这一节的知识还不够熟悉,所以在解决输入输出流的过程中出了很多问题。
4、源程序和运行结果
1、源程序
#include
#include
#include
#include
using namespace std; //声明命名空间
#define M 10 //宏定义
#define N 10
int k[2]; //全局数组,用于记数
struct student //定义学生信息结构体
{
int num;
char name[20];
char sex[10];
}stu[M];
struct record //定义成绩记录结构体{
int num;
char c_num[5],c_name[10];
int xf;
int sco[4];
int sdxf;
}rec[N];
//-------------------------------------------------------
void input_rec(); //录入数据
void input(int); //输入
void insert(); //添加数据
void del(); //删除数据
void write(); //将数据写入文件
void read(); //从文件读取数据
void printstu(); //显示学生信息
void printrec(int,int); //显示学生成绩
void cal(int); //计算成绩及学分
void q_dat(); //查询数据子菜单
void q_stud(); //查询学生资料子菜单
void q_sin1(); //查询个人资料子菜单
void q_num1(); //按学号查询
void q_name1(); //按姓名查询
void q_sco(); //查询成绩
void q_sin2(); //查询个人成绩子菜单
void q_num2(); //按学号查询
void q_name2(); //按姓名查询
void sortbyname(); //按姓名排序
void sortbynumber(); //按学号排序
void sort(); //排序
//-----------------------------------------------------------------
int main() //主函数
{ char ch='1';
while(ch!='0')
{
cout<<"\n\t 学生管理系统"< cout<<"\t 主菜单\t"< cout<<"*******************************"< cout<<"\t 1、录入\t"< cout<<"\t 2、查询\t"< cout<<"\t 3、删除\t"< cout<<"\t 4、添加\t"< cout<<"\t 5、排序\t"< cout<<"\t 0、退出\t"< cout<<"*******************************"< cout<<"请输入你的选择:(0-5)"< cin>>ch; switch(ch) { case '1':input_rec();break; case '2':q_dat();break; case '3':del();break; case '4':insert();break; case '5':sort();break; case '0':break; default:cout<<"选择错误,请再次选择!!!"< } } return 0; } //--------------------------------------------------------------------- void input_rec() //定义录入函数 { read(); int i; cout<<"记录的条数:"; cin>>k[1]; //计数数组 for(i=0;i { cout<<"输入第"< input(i); } write(); printrec(1,k[1]); } //--------------------------------------------------------- void read() //从文件读取数据 { ifstream arfile("a.txt",ios::out); //定义文件流对象if(!arfile) { cerr<<"open a.txt error!"< abort(); } arfile>>k[0]; for(int i=0;i arfile>>stu[i].num>>stu[i].name>>stu[i].sex; arfile.close(); ifstream brfile("b.txt",ios::out); //定义文件流对象 if(!brfile) { cerr<<"open b.txt error!"< abort(); } brfile>>k[1]; for(i=0;i brfile>>rec[i].num>>rec[i].c_num>>rec[i].c_name>>rec[i].xf>>rec[i].sco[0]>>rec[i].sco[1]>>rec[i].sco[2]>>rec[i].sco[3]>>r ec[i].sdxf; brfile.close(); } void write() //将数据写入文件 { ofstream awfile("a.txt",ios::out); //定义文件流对象 if(!awfile) //如果打开awfile失败,返回0值 { cerr<<"open a.txt error!"< abort(); } awfile< for(int i=0;i awfile< awfile.close(); //关闭磁盘文件"a.txt" ofstream bwfile("b.txt",ios::out); //定义文件流对象 if(!bwfile) { cerr<<"open b.txt error!"< abort(); } bwfile< for(i=0;i bwfile< bwfile.close(); } //------------------------------------------------ void input(int i) //输入函数 { char ch[10]; cout<<"学号:(101-199)"< cin>>in; while(in<101||in>199) { cout<<"输入错误,请重新输入:"< cin>>in; } rec[i].num=in; cout<<"课程编号:"< cin>>ch; while(strlen(ch)<1||strlen(ch)>10) { cout<<"输入错误,请重新输入:"< cin>>ch; } strcpy(rec[i].c_num,ch); cout<<"课程名称:"< cin>>ch; while(strlen(ch)<1||strlen(ch)>10) { cout<<"输入错误,请重新输入:"< cin>>ch; } strcpy(rec[i].c_name,ch); cout<<"学分:(1-10)"< cin>>in; while(in<1||in>10) { cout<<"输入错误,请重新输入:"< cin>>in; } rec[i].xf=in; cout<<"平时成绩:(0-100)"< cin>>in; while(in<0||in>100) { cout<<"输入错误,请重新输入:"< cin>>in; } rec[i].sco[0]=in; cout<<"实验成绩(0-100)"; cout<<"无实验请输入-1:"< while(in<-1||in>100) { cout<<"输入错误,请重新输入:"< cin>>in; } rec[i].sco[1]=in; cout<<"卷面成绩:(0-100)"< cin>>in; while(in<0||in>100) { cout<<"输入错误,请重新输入:"< cin>>in; } rec[i].sco[2]=in; cal(i); cout< } //------------------------------------------------ void q_dat() //查询子菜单,有两种方式查询:按学生信息和成绩{ char ch='1'; while(ch!='0') { cout<<"\n\t 查询数据菜单"< cout<<"*******************************"< cout<<"\t 1、学生基本情况查询"< cout<<"\t 2、成绩查询"< cout<<"\t 0、返回上一层"< cout<<"*******************************"< cout<<"请输入你的选择:(0-2)"< cin>>ch; switch(ch) { case '1':q_stud();break; case '2':q_sco();break; case '0':break; default:cout<<"选择错误,请再次选择!!!"< } } } //--------------------------------------------------------- void q_stud() //查询学生基本情况子菜单 { while(ch!='0') { cout<<"\n\t 学生基本情况查询菜单"< cout<<"*******************************"< cout<<"\t 1、显示所有学生情况"< cout<<"\t 2、个人情况查询"< cout<<"\t 0、返回上一层"< cout<<"*******************************"< cout<<"请输入你的选择:(0-2)"< cin>>ch; switch(ch) { case '1':printstu();break; case '2':q_sin1();break; case '0':break; default:cout<<"选择错误,请再次选择!!!"< } } } void q_sin1() //查询个人情况子菜单 { char ch='1'; while(ch!='0') { cout<<"\n\t 个人情况查询菜单"< cout<<"*******************************"< cout<<"\t 1、按学号查询"< cout<<"\t 2、按姓名查询"< cout<<"\t 0、返回上一层"< cout<<"*******************************"< cout<<"请输入你的选择:(0-2)"< cin>>ch; switch(ch) { case '1':q_num1();break; case '2':q_name1();break; case '0':break; default:cout<<"选择错误,请再次选择!!!"< } } } //---------------------------------- void q_sin2() //成绩查询子菜单,有两种方式查询:按学号和姓名 { char ch='1'; while(ch!='0') { cout<<"\n\t 个人成绩查询菜单"< cout<<"*******************************"< cout<<"\t 1、按学号查询"< cout<<"\t 2、按姓名查询"< cout<<"\t 0、返回上一层"< cout<<"*******************************"< cout<<"请输入你的选择:(0-2)"< cin>>ch; switch(ch) { case '1':q_num2();break; case '2':q_name2();break; case '0':break; default:cout<<"选择错误,请再次选择!!!"< } } } //---------------------------------------------------------------------- void q_sco() //定义查询成绩函数 { char ch='1'; read(); while(ch!='0') { cout<<"\n\t 成绩查询菜单"< cout<<"*******************************"< cout<<"\t 1、所有成绩记录列表"< cout<<"\t 2、个人成绩查询"< cout<<"\t 0、返回上一层"< cout<<"*******************************"< cout<<"请输入你的选择:(0-2)"< cin>>ch; switch(ch) { case '1':printrec(1,k[1]);break; case '2':q_sin2();break; case '0':break; default:cout<<"选择错误,请再次选择!!!"< } } //-------------------------------------------------------------- void q_num1() //定义按学号查询函数 { int q,i,j=0; bool find=true; read(); cout<<"请输入你要查询的学生的学号:"< cin>>q; for(i=0;i if(stu[i].num==q) { find=false; cout< cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'< cout<<"━━━━━━━━━━━━━━━━"< cout< cout< break; } if(find) cout<<"\n没有您查询的数据!\n"< } void q_num2() //定义按学号查询函数 { int q,i,n=0,sum=0; bool find=true; cout<<"请输入你要查询的学生的学号:"< cin>>q; read(); for(i=0;i if(stu[i].num==q) { find=false; cout< cout<<"学号:"< cout<<"姓名:"< break; } cout<<"\n没有您查询的数据!\n"< else { for(i=0;i if(rec[i].num==q) { n++; sum+=rec[i].sdxf; cout<<"课程编号:"< cout<<"课程名称:"< cout<<"综合成绩:"< cout<<"实得学分:"< cout< } cout<<"共修:"< cout< } } //-------------------------------------------- void q_name1() //定义按姓名查询函数 { int i,j=0; char name[20]; bool find=true; read(); cout<<"请输入你要查询的学生的姓名:"< cin>>name; for(i=0;i if(!strcmp(stu[i].name,name)) { find=false; cout< cout<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'< cout<<"━━━━━━━━━━━━━━━━"< cout< cout< break; } if(find) cout<<"\n没有您查询的数据!\n"< } void q_name2() //定义按姓名查询函数 { int q,i,n=0,sum=0; char name[20]; bool find=true; read(); cout<<"请输入你要查询的学生的姓名:"< cin>>name; for(i=0;i if(!strcmp(stu[i].name,name)) { find=false; cout< cout<<"学号:"< cout<<"姓名:"< q=stu[i].num; break; } if(find) cout<<"\n没有您查询的数据!\n"< else { for(i=0;i if(rec[i].num==q) { n++; sum+=rec[i].sdxf; cout<<"课程编号:"< cout<<"课程名称:"< cout<<"综合成绩:"< cout<<"实得学分:"< cout< } cout<<"共修:"< cout< } } //----------------------------------------------------- void del() //定义删除数据函数 { int t1; char t2[10]; char del; bool find=false; read(); printrec(1,k[1]); cout<<"请输入学号和课程编号(用空格隔开):"< cin>>t1>>t2; for(int i=0;i