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

if(rec[i].num==t1&&!strcmp(rec[i].c_num,t2))

{

find=true;

cout<<"以下数据符合您的要求:"<

printrec(i+1,i+1);

cout<<"确认要删除吗?(y/n)"<

do

{

cin>>del;

if(del=='y'||del=='Y')

{

for(int j=i;j

{

rec[j].num=rec[j+1].num;

strcpy(rec[j].c_num,rec[j+1].c_num);

strcpy(rec[j].c_name,rec[j+1].c_name);

rec[j].sdxf=rec[j+1].sdxf;

rec[j].xf=rec[j+1].xf;

for(int k=0;k<4;k++)

rec[j].sco[k]=rec[j+1].sco[k];

}

k[1]--;

cout<<"删除完毕!"<

write();

printrec(1,k[1]);

}

else if(del=='n'||del=='N')

cout<<"操作已取消!";

else

cout<<"无效操作,请重新输入:";

}while(del!='y'&&del!='Y'&&del!='n'&&del!='N');

}

if(!find)

cout<<"\n没有您查询的数据!\n"<

}

//-----------------------------------------------------

void insert() //定义添加数据函数

{

read();

int i=k[1],x;

cout<<"插入的条数:";

cin>>x;

k[1]+=x;

for(;i

{

cout<<"请录入第"<

input(i);

}

cout<<"成功插入数据!"<

write();

printrec(1,k[1]);

}

//----------------------------------------------

void cal(int i) //定义计算成绩和学分函数

{

if(rec[i].sco[1]==-1) //计算综合成绩

rec[i].sco[3]=rec[i].sco[0]*0.3+rec[i].sco[2]*0.7;

else

rec[i].sco[3]=rec[i].sco[0]*0.15+rec[i].sco[1]*0.15+rec[i].sco[2]*0.7;

if(rec[i].sco[3]>=90) //计算实得学分

rec[i].sdxf=rec[i].xf;

else if(rec[i].sco[3]>=70)

rec[i].sdxf=rec[i].xf*0.8;

else if(rec[i].sco[3]>=60)

rec[i].sdxf=rec[i].xf*0.65;

else

rec[i].sdxf=0;

}

//---------------------------------------------------------------------

void sortbyname() //按姓名排序

{char name;student t;

read();

stu[M] ; //t中间变量

for(int i=0;i

for(int j=i;j

if(strcmp(stu[i].name,stu[j].name)>0)

{t=stu[i];stu[i]=stu[j];stu[j]=t;}

write();printstu();

}

//--------------------

void sortbynumber() //按学号排序

{int num;student t;

read();

stu[M]; //t中间变量

for(int i=0;i

for(int j=i;j

if(stu[i].num>stu[j].num)

{t=stu[i];stu[i]=stu[j];stu[j]=t;}

write();printstu();

}

//--------------------

void sort() //排序功能函数

{

char ch='1';

while(ch!='0')

{

cout<<"\n\t\t 排序方式\n";

cout<<"\t\t******************\n";

cout<<"\t\t 1.按姓名排序\n";

cout<<"\t\t 2.按学号排序\n";

cout<<"\t\t 0.退出\n";

cout<<"\t\t******************\n";

cout<<"请你选择0-2:\n";

cin>>ch;

switch(ch)

{

case '1':sortbyname();break;

case '2':sortbynumber();break;

case '0':break;

default:cout<<"input error!input again please:\n";

}

}

}

//----------------------------------------

void printstu() //定义显示学生信息函数

{

read();

cout<<'\n'<<"学生数据:"<

cout<<"***************************************"<

cout<<"学号"<

for(int i=0;i

{

cout<

相关主题
相关文档
最新文档