资源描述
*******************
实践教学
*******************
XXX大学
计算机与通信学院
2015年秋季学期
C++程序设计 课程设计
题 目:学生成绩管理系统
专业班级:
姓 名: 学号:
指导教师:
学生成绩管理系统
摘要:本次课程设计采用面向对象C++语言,开发了一个基本的学生成绩管理系统,该系统具备了按班级完成对学生成绩信息的录入和修改,并用文件保存。实现按班级输出学生的成绩单;实现按学号和姓名进行查询,按平均成绩进行排序功能,对学生的管理也可以更加方便快捷。
采用的的方法和过程:
(1)将学生的信息存入文件中,并命名为:score.txt;
(2)编译一个C++语言函数,其中包含三个类:Person类(人员的基本属性),student类(继承Person),Manage类(实现对成绩信息的操作)。
(输入学号时必须是6位以上字符串,不允许重复。)
意义:
使学生对成绩管理有所了解,并且培养学生的分析能力和动手能力、增强学生对课本理论知识的巩固。
关键词:面向对象C++;课程设计;学生成绩管理系统。
目 录
2需求分析 4
2.1 产品需求概述 4
2.1.1 功能简介 4
2.1.2 运行环境 5
2.1.3 限制条件(可选) 5
2.2 功能需求 5
2.2.1功能1 6
2.2.2功能2 6
2.2.3功能3 6
2.2.4功能4 6
管理员可以按照班级输出学生成绩单。 6
2.2.5功能5 6
2.2.6 功能6 6
退出系统 6
2.3 数据描述 6
3概要 7
3详细设计 7
3.1 系统主要函数说明 7
3.1.1 函数 7
源程序: 16
学生成绩管理系统
(1)以学校学生成绩管理业务为背景,通过调研、分析现有的管理模式和已有的管理软件,建立系统模型;
(2)完成软件结构设计和算法设计;
(3)完成系统的软件开发和测试工作;
(4)撰写设计说明书;
(5)做好答辩工作。
2需求分析
2.1 产品需求概述
2.1.1 功能简介
1.学生成绩管理在日常生活中运用十分广泛,因此需要用许多程序来对它们进行管理,此程序包含了学生成绩的录入,学生成绩的查询和排序,学生成绩添加及修改等。
2.总体程序框图学生成绩管理系统
按平均分显示
退出系统
按班录入学生成绩
按班输出学生成绩
修改成绩
查询个人成绩
按学号查询
按姓名查询
2.1.2 运行环境
1.硬件环境:
主机、显示器、优盘、外部设备等。
2.软件环境:
操作系统、网络软件、数据库系统以及其它特殊软件要求。
2.1.3 限制条件(可选)
(1)必须使用或者避免的特定技术、工具、编程语言和数据库;
(2)目前所掌握的只是较少,对于有些函数不能很好的编译,使系统不能完成一些高端的任务;
(3)系统对外部因素存在依赖,需要有其他组件的参与才能够完成任务。
2.2 功能需求
按班级完成对学生成绩信息的录入和修改,并用文件保存。实现按班级输出学生的成绩单;实现按学号和姓名进行查询,按平均成绩进行排序功能。
2.2.1功能1
按班录入所有的学生成绩信息
管理员可以录入学生的班级,姓名,学号,各科成绩等信息。
2.2.2功能2
查询个人成绩(拥有二级菜单:学号,姓名)
可以通过输入学号或姓名查询学生成绩。
2.2.3功能3
修改成绩(按学号,课程)
管理员可以修改学生信息。
2.2.4功能4
按班输出成绩单
管理员可以按照班级输出学生成绩单。
2.2.5功能5
按平均分显示
可以直接按照平均分显示学生成绩。
2.2.6 功能6
退出系统
2.3 数据描述
学生成绩管理系统
退出系统
按平均分显示
按班输出学生成绩
修改成绩
查询个人成绩
按班录入学生成绩
按姓名查询
按学号查询
3概要
本系统主要依据学生成绩管理为背景,进行软件的设计和开发。该系统主要通过三个类,一个文件用于录入学生成绩信息。分为五大模块,以完成对学生成绩的录入,查询,修改,显示,输出等功能。
3详细设计
3.1 系统主要函数说明
1)主函数main():定义学生结构体数组,调用录入、统计等函数对成绩表进行处理;
2)录入函数Input():输入班级到政治课成绩;
3)统计函数Statistic():计算平均成绩;
4)查询函数Lookup():查询指定学号学生成绩记录;
5)修改函数Modify():修改指定学号学生成绩记录;
6)删除函数Delete():删除指定学号学生记录;
7)输出函数Output():输出班级所有学生成绩记录;
8) 排序函数Sort():按平均分对学生成绩记录项进行降序排序;
9)插入函数Insert():按平均分顺序插入新记录。
3.1.1 函数
【功能】主函数
根据学生成绩管理系统的要求,对学生成绩等信息实现录入,查询,修改,输出,显示等功能。
4系统测试
界面
功能一:录入学生成绩
功能二:显示学生成绩
功能三:查找学生成绩
1. 按学号查找
2. 按姓名查找
功能四:修改学生成绩
功能五:插入学生信息
功能六:排列管理成绩
功能七:显示班级学生成绩
功能零:退出系统
5总结
通过这次课程设计,使我对面向对象C++语言有了更进一步的认识和了解,想要学好它重在于实践,要通过不断地上机操作才能更好的学习它,我也发现我自己的好多不足之处。通过学习也有所改进,再又对面向对象C++语言的一些函数不太了解,所以在以后的学习过程中我会更加注重实践操作。在课程设计的过程中,收获知识和提高能力的同时,我也懂得如何去制定和实现计划。课程设计是培养学生综合运用所学知识发展提出分析和解决实际问题,锻炼实践能力的重要环节是对学生实际工作能力的具体训练和考察过程 。随着科学技术的的日新月异,从拿到题目到完成整个编程,从理论到实践,可以学到很多的东西。同时不仅可以巩固以前课本中的知识,而且还学到课本以外的知识。
通过课程设计使我们知道理论和实践的结合是十分重要的,只有理论知识是远远不够的,只有把所学的理论知识和课外实践很好地结合起来,才能对自己的的专业知识有所了解,或者说是为自己以后专业知识的学习做以铺垫。在课程过程中发现了自己一些明显的不足,如对面向对象C++语言基础知识掌握的不牢靠,不能很好地运用自己以前所学内容进行编程,而且不能够在特定的环境下做到仔细认真,很小的问题在编程过程中出现很多次。但是在老师的耐心教导下,我们逐步进入状态,并且做了一个简单的学生成绩管理系统。通过对整个系统的设计,编译,使我们对各个系统有所了解。在整个系统中,内容包括很多,运用的函数也十分复杂,所以过程中容不得半点马虎。当然在操作过程中也遇到一些大的问题,如文件的操作,需要有模块化思维能力,也就是在编程任意功能模块和函数的时候需要全面的思考,不能够局限于完成当前任务的简单思路上,不能够让模块脱离整个系统。
总之,在课设过程中,学到了很多课外的东西 ,并且自己对面向对象C++语言有了更进一步的了解。自己的动手能力和分析能力有了很大程度的提高,这两周看似过的很是悠闲但却是受益匪浅。
致 谢
非常感谢张玺君老师和马维俊老师的指导,在设计中我们遇到了很多编程问题,最后在老师的指导下,我们慢慢地进入状态,顺利的完成了所有编程题目。每天我们在机房编写程序,老师们也是寸步不离,帮助我们解决问题,由于编程是在英文状态下进行的,很多单词不知道意思,导致不懂提示错误源头的意思,从而无法找出错误的原因。在这方面老师给我们提供很大帮助。在程序出现错误的时候老师耐心讲解,查找错误帮我们调试。在此,我们对各位辛勤工作的老师致以最诚挚的感谢。
附录:
源程序:
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
class Person
{ public:char name[8];
};
class student:public Person //构建学生类
{public:
friend void Manage(student stud[]) ;
friend void Input(student stud[]) ;
friend void Statistic(student stud[]);
friend void Lookup(student stud[]) ;
friend void Modify(student stud[]) ;
friend void Output(student stud[]) ;
friend void Insert(student stud[]) ;
friend void Write(student stud[],int n);
friend int Read(student stud[]);
private:
int num;
char name[8];
char class_0[20];
float c_program;
float english;
float math;
float average;
int order;
}stud[100];
class Manage:public student
{};
void Write(student stud[],int n) //向文件中写入数据
{
fstream myFile;
myFile.open("score.txt",ios::out|ios::binary);
if(!myFile)
{
cout<<"score.txt can't open!"<<endl;
abort();
}
int count=n;
myFile<<count<<endl<<endl;
for(int i=0;i<=count;i++)
{
myFile<<stud[i].class_0<<" "<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].c_program<<" "<<stud[i].english<<" "<<stud[i].math<<" "<<stud[i].average<<endl;
}
myFile.close();
}
int Read(student stud[]) //从文件中读数据
{
fstream myFile;
myFile.open("score.txt",ios::in|ios::binary);
if(!myFile)
{
cout<<"score.txt can't open!"<<endl;
abort();
}
int count;
myFile.seekg(0);
myFile>>count;
for(int i=0;i<=count;i++)
{
myFile>>stud[i].class_0>>stud[i].num>>stud[i].name>>stud[i].c_program>>stud[i].english>>stud[i].math >>stud[i].average;
}
myFile.close();
return count ;
}
void Input(student stud[]) //---------------输入学生成绩
{
system("cls"); /*运行前清屏*/
int i=0;
int flag;
char sign;
cout<<endl<<">>>>>>>> 请输入学生成绩 <<<<<<<<\n"<<endl;
while(sign!='n'&&sign!='N') /*判断*/
{
cout<<"班级:"; /*交互输入*/
cin>>stud[i].class_0;
loop:
cout<<"学号:";
cin>>stud[i].num;
int c=0;
while(c<i)
{
c++;
if(stud[i].num==stud[i-c].num)
{
cout<<"你输入的学号已经存在!请重新输入!"<<endl;
goto loop;
}
}
cout<<"姓名:";
cin>>stud[i].name;
do{
flag=0;
cout<<"C++成绩:";
cin>>stud[i].c_program;
if(stud[i].c_program>100 ||stud[i].c_program<1)
cout<<"请输入1-100之间的数字!\n";
else
flag=1;
}while(flag==0);
do{
flag=0;
cout<<"英语成绩:";
cin>>stud[i].english;
if(stud[i].english>100 ||stud[i].english<1)
cout<<"请输入1-100之间的数字!\n";
else
flag=1;
}while(flag==0);
do{
flag=0;
cout<<"数学成绩:";
cin>>stud[i].math;
if(stud[i].math>100 ||stud[i].math<1)
cout<<"请输入1-100之间的数字!\n";
else
flag=1;
}while(flag==0);
stud[i].average=(stud[i].c_program+stud[i].english+stud[i].math)/3;
cout<<"平均分:"<<stud[i].average<<endl;
cout<<"继续录入学生成绩?(y/n)";
cin>>sign; /*输入判断*/
i++;
}
Write(stud,i);
}
void Statistic(student stud[]) //---------------统计学生数据
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
cout<<endl<<">>>>>>>> 输出学生成绩 <<<<<<<<\n"<<endl;
cout<<"班级"<<"\t "<<"学号"<<"\t "<<" 姓名"<<"\t "<<" 平均分"<<endl;
for(int i=0;i<n;i++)
cout<<stud[i].class_0<<"\t"<<stud[i].num<<"\t"<<stud[i].name<<"\t "<<stud[i].average<<endl;
system("pause");
}
void Lookup(student stud[]) //---------------查找学生成绩
{int p;
cout<<"请选择1.按学号查找 2.按姓名查找"<<endl;
cin>>p;
if(p==1)
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
int s;
int i=0;
cout<<endl<<">>>>>>>> 查找学生成绩 <<<<<<<<\n"<<endl;
cout<<"请输入查找学生的学号:"<<endl;
cin>>s;
while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
cout<<"没有该学生的信息!"<<endl; /*输入失败信息*/
}
else
{
cout<<"---------------------------"<<endl;
cout<<"班级:"<<stud[i].class_0<<endl; /*输出该学生信息*/
cout<<"学号:"<<stud[i].num<<endl;
cout<<"姓名:"<<stud[i].name<<endl;
cout<<"C++:"<<stud[i].c_program<<endl;
cout<<"英语:"<<stud[i].english<<endl;
cout<<"数学:"<<stud[i].math<<endl;
cout<<"平均分:"<<stud[i].average<<endl;
}
}
if(p==2)
{system("cls"); /*运行前清屏*/
int m=Read(stud);
char t;
int i=0;
cout<<endl<<">>>>>>>> 查找学生成绩 <<<<<<<<\n"<<endl;
cout<<"请输入查找学生的姓名:"<<endl;
cin>>t;
while(strcmp(stud[i].name-t,stud[i].name)==0&&i<m) i++; /*查找判断*/
{
cout<<"---------------------------"<<endl;
cout<<"班级:"<<stud[i].class_0<<endl; /*输出该学生信息*/
cout<<"学号:"<<stud[i].num<<endl;
cout<<"姓名:"<<stud[i].name<<endl;
cout<<"C++:"<<stud[i].c_program<<endl;
cout<<"英语:"<<stud[i].english<<endl;
cout<<"数学:"<<stud[i].math<<endl;
cout<<"平均分:"<<stud[i].average<<endl;
}
}
}
void Modify(student stud[]) //---------------修改学生成绩
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
int s,a; float q;
int i=0;
cout<<endl<<">>>>>>>> 修改学生成绩 <<<<<<<<\n"<<endl;
cout<<"输入修改成绩学生的学号:"<<endl;
cin>>s;
while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
cout<<"没有该学生的成绩!"<<endl; /*输入失败信息*/
}
else
{
cout<<"----------该学生的信息----------\n"<<endl; /*格式头*/
cout<<"班级"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"c++"<<"\t"<<"英语"<<"\t"<<"数学"<<"\t"<<"平均分"<<endl;
cout<<"---------------------------------"<<endl;
cout<<stud[i].class_0<<"\t"<<stud[i].num<<"\t"<<stud[i].name<<"\t"<<stud[i].c_program<<"\t"<<stud[i].english<<"\t"<<stud[i].math<<"\t"<<stud[i].average<<endl;
cout<<"---------------------------------"<<endl;
cout<<"请输入要修改的课程号"<<endl;
cout<<"1.c语言 2.英语 3.数学"<<endl;
cin>>a;
cout<<"重新输入分数"<<endl;
cin>>q;
if(a==1) stud[i].c_program=q;
if(a==2)stud[i].english=q;
if(a==3)stud[i].math=q;
stud[i].average=(stud[i].c_program+stud[i].english+stud[i].math)/3;
cout<<"----------该学生的信息----------\n"<<endl; /*格式头*/
cout<<"班级"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"c++"<<"\t"<<"英语"<<"\t"<<"数学"<<"\t"<<"平均分"<<endl;
cout<<"---------------------------------"<<endl;
cout<<stud[i].class_0<<"\t"<<stud[i].num<<"\t"<<stud[i].name<<"\t"<<stud[i].c_program<<"\t"<<stud[i].english<<"\t"<<stud[i].math<<"\t"<<stud[i].average<<endl;
char c;
cout<<"是否保存数据?(y/n)"<<endl;
cin>>c;
if(c!='n'&&c!='N')
Write(stud,n);
}
}
void Insert(student stud[]) //---------------增加学生成绩
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
char s;
cout<<endl<<"************ 插入学生成绩***********\n"<<endl;
while(s!='n'&&s!='N')
{
cout<<"班级:"<<endl; /*交互输入*/
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].english;
cout<<"数学成绩:";
cin>>stud[n].math;
stud[n].average=(stud[n].c_program+stud[n].english+ stud[n].math)/3;
cout<<"平均分"<<stud[n].average;
n++;
cout<<"插入成功!"<<endl; /*返回成功信息*/
cout<<"是否继续输入(y/n)"<<endl;
cin>>s;
}
Write(stud,n);
}
void Manage(student stud[]) //---------------按平均分对学生成绩记录项进行降序排序
{
system("cls"); /*运行前清屏*/
int i,j,k;
float s;
char t[20];
cout<<endl<<"********** 排列管理成绩 **********\n"<<endl;
int n=Read(stud);
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(stud[j].average<stud[j+1].average)
{
strcpy(t,stud[j+1].class_0);
strcpy(stud[j+1].class_0,stud[j].class_0);
strcpy(stud[j].class_0,t);
k=stud[j+1].num;
stud[j+1].num=stud[j].num;
stud[j].num=k;
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
s=stud[j+1].c_program;
stud[j+1].c_program=stud[j].c_program;
stud[j].c_program=s;
s=stud[j+1].english;
stud[j+1].english=stud[j].english;
stud[j].english=s;
s=stud[j+1].math;
stud[j+1].math=stud[j].math;
s=stud[j+1].average;
stud[j+1].average=stud[j].average;
stud[j].average=s;
}
cout<<"-------------------------------------"<<endl; /*格式头*/
cout<<"班级"<<"\t "<<"学号"<<"\t "<<"姓名"<<"\t"<<"C++"<<"\t"<<"英语"<<"\t"<<"数学"<<"\t"<<"平均分"<<"\t"<<"名次"<<endl;
for(i=0;i<n;i++) /*循环输入*/
{
stud[i].order=i+1;
cout<<stud[i].class_0<<"\t"<<stud[i].num<<"\t"<<stud[i].name<<"\t"<<stud[i].c_program<<"\t"<<stud[i].english<<"\t"<<stud[i].math<<"\t"<<stud[i].average<<"\t "<<stud[i].order<<endl;
}
Write(stud,n);
}
void Output(student stud[]) //---------------显示全部学生成绩
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
cout<<"***************** 显示班级学生成绩 *****************\n"<<endl;
if(!stud)
cout<<"没有记录";
else
{
cout<<"-------------------------------------------------------------------------"<<endl; /*格式头*/
cout<<"班级"<<"\t "<<"学号"<<"\t "<<"姓名"<<"\t"<<"c++"<<"\t"<<"英语"<<"\t"<<"数学"<<"\t"<<"平均分"<<endl;
for(int i=0;i<n;i++) /*循环输入*/
{
cout<<stud[i].class_0<<"\t"<<stud[i].num<<"\t"<<stud[i].name<<"\t"<<stud[i].c_program<<"\t "<<stud[i].english<<"\t " <<stud[i].math<<"\t"<<stud[i].average<<endl;
}
cout<<"-------------------------------------------------------------------------"<<endl;
}
}
int menu() /*菜单函数*/
{
char c;
do
{
system("cls"); /*运行前清屏*/
cout<<"*******************************************************\n"<<endl;
cout<<" -----------------欢迎使用学生成绩管理系统-------------\n"<<endl;
cout<<" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<" * 【1】输入学生成绩 * "<<endl;
cout<<" * 【2】显示学生成绩 * "<<endl;
cout<<" * 【3】查找学生成绩 * "<<endl;
cout<<" * 【4】修改学生成绩 * "<<endl;
cout<<" * 【5】插入学生成绩 * "<<endl;
cout<<" * 【6】排列管理成绩 * "<<endl;
cout<<" * 【7】显示班级学生成绩 * "<<endl;
cout<<" * 【0】退出本系统 * " <<endl;
cout<<" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ "<<endl;
cout<<"请你选择(0-7):"<<endl;
c=getchar(); /*读入选择*/
}
while(c<'0'||c>'8');
return(c-'0'); /*返回选择*/
}
void main() /*主函数*/
{
for(;;)
{
switch(menu()) /*选择判断*/
{
case 1:
Input(stud);/*输入学生成绩*/
break;
case 2:
Statistic(stud); /*输出学生统计数据*/
break;
case 3:
Lookup(stud); /*查找学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case 4:
Modify(stud); /*修改学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case 5:
Insert(stud);/*增加学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case 6:
Manage(stud); /*按平均分对成绩记录项进行降序排序*/
cout<<"\t\t\t";
system("pause");
break;
case 7:
Output(stud); /*显示全部学生成绩*/
cout<<"\t\t\t";
system("pause");
break;
case 0:
cout<<endl<<" ===========================感谢您使用学生成绩管理系统==========================\n"<<endl; /*结束程序*/
cout<<"\t\t\t";
system("pause");
exit(0);
} }
}
展开阅读全文