学生成绩管理系统课程设计.docx
《学生成绩管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统课程设计.docx(37页珍藏版)》请在冰点文库上搜索。
![学生成绩管理系统课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/14/038ad6b3-20e6-4bee-baca-43493c26550e/038ad6b3-20e6-4bee-baca-43493c26550e1.gif)
学生成绩管理系统课程设计
软件与通信工程学院
课程设计报告
2015学年 第一学期
课程名称c++课程设计
设计题目学生成绩管理系统
学生姓名陈莉范玲陈慧琳庞昭君
学号06080424
专业班级计算机科学与技术2班
指导教师郭美
1设计任务书
1.1题目与要求
本组计划(成员为:
陈莉,范玲,庞昭君,陈慧琳)编写一个学生成绩管理系统,主要用来管理学生的成绩。
具体要求如下:
1、建立一个学生类,保存学生的班级、姓名、学号、各科成绩、平均分。
2、求出每个学生的平均分。
3、增加和删除学生的学生信息。
4、根据条件查询学生的信息。
5、按条件统计学生的信息。
6、退出系统
根据分工,陈莉的主要工作是编写学生成绩管理系统的输入、删除和管理。
根据分工,范玲的主要工作是编写学生成绩管理系统的统计和查找。
根据分工,庞昭君的主要工作是编写学生成绩管理系统的菜单函数、主函数、显示、修改。
根据分工,陈慧琳的主要工作是编写学生的成绩管理系统的函数定义、文件的输入和输出。
1.2本系统涉及的知识点
类、数组、循环、函数、分支。
1、类的实现
定义一个类,类的代码如下:
classStu//构建学生类
{public:
friendvoidshuru(Stustud[]);//输入
friendvoidtongji(Stustud[]);//统计
friendvoidchazhao(Stustud[]);//查找
friendvoidxiugai(Stustud[]);//修改
friendvoidshanchu(Stustud[]);//删除
friendvoidshuchu(Stustud[]);//输出
friendvoidzengjia(Stustud[]);//增加
friendvoidWrite(Stustud[],intn);//文件写
friendintRead(Stustud[]);//文件读
private:
charclass_0[20];
intnum;
charname[8];
floatc_program;
floatmedia;
floatenglish;
floathuibian;
floataverage;
intorder;
}stud[100];
2、数组的实现
在输入学生信息,存入类的对象数组里,部分代码如下:
voidshuru(Stustud[])//---------------输入学生成绩
{system("cls");/*运行前清屏*/
inti=0;
intflag;
charsign;
cout<>请输入学生成绩<<===="<while(sign!
='n'&&sign!
='N')/*判断*/
{cout<<"班级:
";/*交互输入*/
cin>>stud[i].class_0;
loop:
cout<<"学号:
";
cin>>stud[i].num;
intc=0;
while(c
{c++;
if(stud[i].num==stud[i-c].num)
{cout<<"你输入的学号已经存在!
请重新输入。
"<gotoloop;
}
}
3、循环的实现
在找到要删除的学生后,用for循环语句将后面的学生的信息往前覆盖,代码如下:
voidshanchu(Stustud[])//---------------按学号查找,删除学生信息
{system("cls");/*运行前清屏*/
intn=Read(stud);
ints;
inti=0,j;
cout<>删除学生成绩<<===="<cout<<"请输入需要删除学生的学号:
"<cin>>s;
while((stud[i].num-s)!
=0&&iif(i==n)
{cout<<"====>提示:
对不起,无法找到该学生……"<}
else
{for(j=i;j{strcpy(stud[j].class_0,stud[j+1].class_0);
stud[j].num=stud[j+1].num;
strcpy(stud[j].name,stud[j+1].name);
stud[j].c_program=stud[j+1].c_program;
stud[j].media=stud[j+1].media;
stud[j].english=stud[j+1].english;
stud[j].huibian=stud[j+1].huibian;
stud[j].average=stud[j+1].average;}
cout<<"====>提示:
已成功删除!
"<4、函数的实现
在类外定义函数,用来进行删除、增加、修改等功能,部分代码如下:
voidzengjia(Stustud[])//---------------增加学生成绩
{system("cls");/*运行前清屏*/
intn=Read(stud);
chars;
cout<>增加学生成绩<<===="<while(s!
='n'&&s!
='N')
{cout<<"班级:
"<cin>>stud[n].class_0;
cout<<"学号:
";
cin>>stud[n].num;
cout<<"姓名:
";
cin>>stud[n].name;
cout<<"C++程序设计成绩:
";
cin>>stud[n].c_program;
cout<<"多媒体成绩:
";
cin>>stud[n].media;
cout<<"大学英语成绩:
";
cin>>stud[n].english;
cout<<"汇编成绩:
";
cin>>stud[n].huibian;
stud[n].average=(stud[n].c_program+stud[n].media+stud[n].english+stud[n].huibian)/4;
cout<<"平均分"<n++;
cout<<"=====>提示:
插入成功!
"<cout<<"是否继续输入(y/n)"<cin>>s;}
5、分支的实现
在主函数用switch用来选择功能,代码如下:
voidmain()/*主函数*/
{for(;;)
{switch(menu())/*选择判断*/
{case1:
shuru(stud);/*输入学生成绩*/
break;
case2:
shuchu(stud);/*输出学生统计数据*/
break;
case3:
chazhao(stud);/*查找学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case4:
xiugai(stud);/*修改学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case5:
shanchu(stud);/*按学号查找,删除学生信息*/
cout<<"\t\t\t";
system("pause");
break;
case6:
zengjia(stud);/*增加学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case7:
tongji(stud);/*显示全部学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case0:
cout<>===============================\n"<cout<<"\t\t\t";
system("pause");exit(0);}}}
2功能设计
2.1算法设计
1、本系统需要实现的功能要求:
利用switch语句设计如图1所示的主菜单:
请输入选项编号(1~6)
图1学生管理系统主菜单
2、根据所选菜单设计相应的功能函数:
1)输入函数shuru(stu[]):
利用while循环输入的方式将学生信息存入学生数组对象,最后调用文件函数write(stu,i)保存在文件。
2)求平均分:
在输入完所有的成绩信息后,stud[i].average保存了所有的科目的平均成绩。
3)文件保存函数Write(Stustud[],intn):
在对正在操作后的学生的信息进行保存,fstreammyFile;函数建立一个文件对象,再测试文件是否能打开,最后用文件函数myFile将学生数组对象中的所有信息都写入到文件中保存。
4)查找函数chazhao(Stustud[]):
定义了整型变量i、j、s和字符变量a[20],运用if判断语句来判断j是用学号查找还是用姓名查找,用whilewhile(strcmp(a,stud[i].name)!
=0&&i5)增加信息函数zengjia(Stustud[]):
定义字符变量s用来记录输入的字符是否是’N’试试’n’,如果都不是则输入要添加的学生的信息,最后在根据cout<<"是否继续输入(y/n)"<6)删除信息函数shanchu(Stustu[]):
定义字符变量s,整型变量i、j,i用来接收学生的个数,while((stud[i].num-s)!
=0&&i如果找到了则用for(j=i;j7)统计信息函数tongji(Stustu[]):
定义了字符变量,用if和比较函数语句来判断输入的是课程名,最后输出统计的信息。
8)输出信息函数shuchu(Stustu[]):
定义整型变量i来接收输入的学生个数,运用for循环语句,将所有的学生信息一一输出。
2.2主要模块流程图
主要模块流程图如图2学生管理系统流程所示
3程序代码设计
3.1菜单模块
1、函数原形:
intmenu()。
2、功能:
利用while判断函数getchar和标准输出函数来完成主菜单以及功能的选择。
该菜单包含了该系统的8大功能(有输入、显示、查找、修改、删除、插入、统计、退出)。
3、变量以及类型
Charc:
字符变量,接收8大功能的序号,用来判断系统该执行什么功能。
4、说明:
该函数只是用来显示系统的功能和来选择功能,只要输入的字符不是0~7,就返回选择。
5、模块代码及其相关注释
intmenu()/*菜单函数*/
{charc;
do
{system("cls");/*运行前清屏*/
cout<<"-----------------<<欢迎您使用学生成绩管理系统--------------\n"<cout<<"*******************************************\n\n"<cout<<"1、输入学生成绩"<cout<<"2、显示统计数据"<cout<<"3、查找学生成绩"<cout<<"4、修改学生成绩"<cout<<"5、删除学生成绩"<cout<<"6、插入学生成绩"<cout<<"7、统计学生成绩"<cout<<"0、退出本系统"<cout<<"*********************************************"<cout<<"请你选择操作(0-7):
"<c=getchar();/*读入选择*/}
while(c<'0'||c>'7');
return(c-'0');/*返回选择*/}
图2学生管理系统流程
3.2主函数模块
1、函数原型:
voidmain()。
2、功能:
执行switch()来调用menu()函数,然后接收menu函数传递回来的数值,然后经过case语句的选择,调用相应的函数,达到相应的目的。
3、说明:
我们用system("pause");来暂停查询,等待操作者按键。
4、模块代码及其相关注释
voidmain()/*主函数*/
{for(;;)
{switch(menu())/*选择判断*/
{case1:
shuru(stud);/*输入学生成绩*/
break;
case2:
Shuchu(stud);/*输出学生统计数据*/
break;
case3:
chazhao(stud);/*查找学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case4:
xiugai(stud);/*修改学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case5:
shanchu(stud);/*按学号查找,删除学生信息*/
cout<<"\t\t\t";
system("pause");
break;
case6:
zengjia(stud);/*增加学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case7:
tongji(stud);/*统计学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case0:
cout<>===============================\n"<cout<<"\t\t\t";
system("pause");
exit(0);}}}
3.3定义类模块
1、定义一个学生类classStu。
2、定义友元函数(输入、统计、查找、修改、删除、输出、增加、文件写入、文件读出)构建每一个模块。
3、定义对象和数据成员(班级、学号、姓名、c++、多媒体、汇编、英语、平均成绩)。
3.4文件输入模块
1、函数原形:
voidWrite(Stustud[],intn)。
2、功能:
定义输出文件流对象myfile,打开输入文件“student.dat”,用if语句判断文件,如果打开文件失败,myfile返回0值并退出。
把变量n传给变量count,把信息个数count写到磁盘文件”student.dat”中,利用for(inti=0;i<=count;i++)这循环把所有的信息(班级、学号、姓名、c++、多媒体、汇编、英语、平均成绩)写到磁盘文件”student.dat”文件中,然后将与流对象myfile所关联的输入文件”student.dat”关闭。
3、变量类型:
int i:
循环控制量。
int n :
整型形参变量,接收main()传过来的人数。
stu stud[ ]:
接收主函数传过来的数组首地址。
Count:
信息个数变量。
5、说明:
执行该函数时,把学生的所有信息写到文件中。
6、模块代码及其相关注释
voidWrite(Stustud[],intn)//向文件中写入数据
{fstreammyFile;
if(!
myFile)
{cout<<"student.datcan'topen!
"<exit
(1);
}
intcount=n;
myFile<for(inti=0;i<=count;i++)
{myFile<<<""<}
myFile.close();
}
3.5文件输出模块
1、函数原形:
intRead(Stustud[])。
2、功能:
定义输如文件流对象myfile,打开输出文件“student.dat”,用if语句判断文件,如果打开文件失败,myfile返回0值并退出。
将文件指针myFile.seekg(0)移到文件开头,把信息个数count从磁盘文件”student.dat”中读出来,利用for(inti=0;i<=count;i++)这循环把所有的信息(班级、学号、姓名、c++、多媒体、汇编、英语、平均成绩)从磁盘文件”student.dat”中读出来,然后将与流对象myfile所关联的输入文件”student.dat”关闭。
3、变量及类型:
fstreammyFile;定义一个文件。
int i:
循环控制变量。
myFile.seekg(0):
文件指针移到文件开头。
Returncount;count返回到main()函数。
stu stud[ ]:
接收主函数传过来的数组首地址。
Count:
信息个数变量。
4、说明:
执行该函数时,把学生的所有信息从文件中读出。
5、模块代码及其相关注释
intRead(Stustud[])//从文件中读数据
{fstreammyFile;
myFile.open("student.dat",ios:
:
in);
if(!
myFile)
{cout<<"student.datcan'topen!
"<exit
(1);
}
intcount;
myFile.seekg(0);//文件指针移到文件开头
myFile>>count;
for(inti=0;i<=count;i++)
{myFile>>stud[i].class_0>>stud[i].num>>stud[i].name>>stud[i].c_program>>stud[i].media>>stud[i].english>>stud[i].huibian>>stud[i].average;}
myFile.close();
returncount;
3.6信息输入模块
1、函数原型voidshuru(Stustu[])。
2、变量及类型:
inti=0;整型变量,记录人数。
intflag;整型变量,记录判断后的结果是为1还是0。
charsign;字符变量,接收输入的字符进行while循环。
3、功能:
定义两个整型变量i、flag,一个字符变量sign,在字符变量中输入任意的字符,然后进入while(sign!
='n'&&sign!
='N')循环判断sign中的字符是否为’n’或’N’,如果都不是怎进行学生信息的输入。
先将班级输入,在loop:
跳转语句下输入学号,定义一个c用来记录输入的人数,进入while循环,用if(stud[i].num==stud[i-c].num)来判断这次输入的学号是否与以输入的学号重复了,如果重复了系统将会提示"你输入的学号已经存在!
请重新输入。
"然后gotoloop;语句则跳转到loop重新输入学号,直到不相同为止,输入完学号后再继续输入姓名。
然后进入do-while语句,定义一个flag=0,用它来记录输入的成绩是否是在1--100之间,if(stud[i].c_program>100||stud[i].c_program<1)cout<<"对不起,请输入1-100之间的数字!
!
\n";如果if不成立,则flag=1,否则flag=0,则继续循环,输入正确的成绩。
随后将运用同样的方法依次输入c++程序设计、多媒体成绩、英语成绩和汇编成绩。
在输入完所有的成绩信息后,运用简单的求平均分运算的stud[i].average=(stud[i].c_program+stud[i].media+stud[i].english+stud[i].huibian)/4;这条语句,将每一个学生的成绩的平均分都求出并保存下来。
cout<<"====>提示:
是否继续写入学生成绩?
(Y/N)";
cin>>sign;/*输入判断*/
根据提示进入判断是否继续进行学生成绩的输入,如果是就输入y,否则就输入n.i自加一,最后根据sign的输入决定是否继续循环本段函数。
本段程序结束后调用函数Write(stud,i)将所有的信息都保存在文件中,以便后面程序的使用。
4、说明:
在执行函数前,运用清屏函数system("cls");清除掉上段函数运行的数据,以便后面函数运行时主界面的整洁清晰。
5、相关代码及注释
voidshuru(Stustud[])//---------------输入学生成绩
{system("cls");/*运行前清屏*/
inti=0;
intflag;
charsign;
cout<>请输入学生成绩<<===="<while(sign!
='n'&&sign!
='N')/*判断*/
{cout<<"班级:
";/*交互输入*/
cin>>stud[i].class_0;
loop:
cout<<"学号:
";
cin>>stud[i].num;
intc=0;
while(c
{c++;
if(stud[i].num==stud[i-c].num)
{cout<<"你输入的学号已经存在!
请重新输入。
"<gotoloop;