资源描述
C++程序设计课程设计
学生成绩管理信息系统设计与开发
1 概 述
1.1 课程设计背景
当今时代是飞速发展的信息时代。在各行各业中都离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
管理信息系统是进行信息的采集、存储、加工、维护和使用的系统。它是随着管理科学和技术科学的发展而形成的。学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理学生成绩,这种管理方式存在着效率低、保密性差等诸多缺点同时,在更新和维护时都会带来不少困难。
作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有着手工管理所无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生成绩管理的效率,也是学校科学化、正规化管理,与世界接轨的重要条件。因此,开发这样一套管理软件是很有必要的。
学生成绩管理系统提供了强大的学生成绩管理功能,方便管理员对学生成绩信息的创建、查询、修改、删除、查询、汇总、统计、保存等操作,可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理。
因此,本文将用Visual C++设计和开发一个应用程序—学生成绩管理信息系统,介绍了学生成绩管理系统的实现过程:包括系统分析、 系统调查、 数据库设计、功能设计、系统物理配置方案、 系统实现、系统测试以及系统功能简介。
1.2 课程设计目标
建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平。帮助广大教师提高工作效率,实现学生成绩维护工作流程的系统化、规范化和自动化。为了使系统在学院的管理中发挥更大的作用,实现工作过程的计算机化,提高工作效率和工作质量,现提出如下的系统开发目标:
(1)方便管理员对学生成绩信息的创建、查询、修改、删除、查询、汇总、统计、保存等操作;
(2)提高学生管理次序,节约管理成绩,增强学生管理的安全性;
(3)系统应具有实用性、可靠性和适用性,同时注意到先进性;
(4)对各个数据库进行动态管理,防止混乱;
(5)方便用户的操作,尽量减少用户的操作;
2 系统需求分析
2.1 系统调查
21世纪以来,人类经济高速发展,人们的生活发生了日新月异的变化,特别是计算机的应用及普及到经济和社会生活的各个领域,使原本的旧的管理方法越来越不适应现在社会的发展,许多人还停留在以前的手工操作,这大大地阻碍了人类经济的发展。
为了适应现代社会人们高度强烈的时间观念,学生成绩管理系统软件为教学带来了极大的方便。该软件是以汉语编程语言为实现语言,其功能在系统内部有源代码直接完成,通过操作手册,使用者可以了解本软件的基本工作原理,操作人员只需输入一些简单的汉字、数字,即可达到自己的目标。
2.2系统需求
为了实现数据创建、数据删除、数据浏览以及数据查询等功能,该学生成绩管理系统主要划分为学生信息的创建、查询、修改、统计、显示以及保存等内容,这些管理职能统一由管理者负责。
在学生管理系统开发时应该满足以下具体的系统要求:
(1)学生成绩管理系统中不同使用单位(用户)的学生人数事先无法确定;
(2)该学生成绩管理系统要求有学生成绩创建、查询、修改、、删除、保存文件;
(3)系统使用文字菜单,用户通过选择菜单项的编号,实现系统对子模块的调用,也可用windows界面下的菜单栏、弹出式菜单、下拉菜单;
(4)每个班级每门课程的成绩可以从学生的成绩总表提取出子表并存储成一个文本文件,以便在windows的notebook或者Microsoft word下打印,规定该文本文件名由班级号和课程名拼音字符串构成.输入班级号和课程名字符串后自动生成文件名.如1班,语文,则文件名为:c1yuwen.txt;
(5)每个学生学习的课程有语文,英语,数学,物理,化学,生物。
(6)学生的成绩总表结构约定为(学号,姓名,课程名,平时成绩,期末成绩,总评成绩).总评成绩由程序自动计算,总评成绩=平时成绩﹡30%+期末成绩﹡70%。
(7)学号是一个9位整数构成的字符串, 学号的编码规则:入学年份+在读年级+在读班级+班内编号;入学年份用4位整数构成字符串,如2003年入学则表示为:”2003”;在读年级用1位整数构成字符串,如正在1年级读书则表示为:”1”;在读班级用2位整数构成字符串,如正在1班读书则表示为:”01”;班内编号用2位整数构成字符串,如在班内编号为23号则表示为:”23”。
2.3 功能需求
基于系统需求分析,该系统需要实现以下基本功能:
(1)查询所有学生的所有成绩(包括各科成绩,平时成绩以及总评成绩);
(2)查询所有学生某一单科的成绩;
(3)修改学生的成绩;
(4)删除学生的成绩;
(5)对学生的成绩进行保存,并可以在windows notebook或Microsoft word下打印。
2.4 开发环境
(1)软件环境:windows98/windowsXP/windows2000,Visual C++
(2)硬件环境:计算机(Pen4CPU, 256MRAM,60G以上硬盘,输入输出设备)
3系统概要设计
3.1 系统的功能模块划分
“学生成绩管理信息系统”包括八个模块:信息创建,信息查询,信息修改,信息统计,信息显示,保存信息,谢谢使用以及退出程序。这九个模块既相互联系又相互独立,其中信息查询,信息修改,信息统计,信息显示,保存信息这五个模块必须以信息载入或信息创建为基础。
(1)信息创建模块:对学生的成绩进行录入,然后通过其他操作,保存所需的文件;
(2)信息查询:在信息载入和信息创建的基础上,对学生的成绩进行查询;
(3)信息修改:在信息载入和信息创建的基础上,对所需学生的成绩进行修改;
(4)信息统计:在信息载入和信息创建的基础上,对学生的相关成绩进行统计,输出平均分及排名;
(5)信息显示:在信息载入和信息创建的基础上,显示出系统所有学生的成绩;
(6)保存信息:在信息载入和信息创建的基础上,对学生的成绩进行必要的编辑后,保存所需的文件;
(7)感谢使用:显示系统的创建者,并提示在退出程序前是否进行相关的操作;
(8)退出程序:退出该程序。
4系统详细设计
4.1 系统登录模块设计
学生成绩管理信息系统可以分为九个模块:
(1)学生信息创建
(2)学生信息查询
(3)学生信息修改
(4)学生信息统计
(5)学生信息显示
(6)保存学生信息
(7)谢谢使用
(8)退出程序
4.2 系统主界面设计运行:
图4-1系统主界面设计运行图
4.3 学生信息创建模块运行:
图4-2 学生信息创建模块运行图
4.4学生信息查询模块设计
(1)学生信息查询模块主界面设计:
图4-3 学生信息查询模块运行图
(2)按姓名查找模块:
图4-4按学生姓名查找模块运行图
图4-5按学生姓名查找模块运行保存文件图
(3)按学号查找模块:
图4-6 按学生学号查找模块运行图
图4-7 按学生学号查找模块运行保存文件图
(4) 按课程查找模块如:
图4-8 按学生课程查找模块运行图
图4-9 按学生课程查找模块运行保存文件图
4.5学生信息修改模块设计
(1)学生信息修改模块主界面:
图4-10 学生信息修改模块主界面运行图
(2)添加学生信息模块:
图4-11 添加学生信息模块运行图
(3)修改学生信息模块:
图4-12 修改学生信息模块运行图
(4)删除学生信息模块:
图4-13 删除学生信息模块运行图
(5)显示学生信息模块:
图4-14 显示学生信息模块运行图
4.6学生信息统计模块设计
(1)学生信息统计模块设计主界面:
图4-15 学生信息统计模块运行图
(2)查找学生平均成绩模块:
图4-16 查找学生平时成绩模块运行图
(3)查找单科平均成绩模块:
图4-17 查找单科平均成绩模块运行图
4.7学生信息显示模块设计:
图4-18 学生信息显示模块运行效果图
4.8保存学生信息模块:
图4-19 保存学生信息模块运行效果图
图4-20 保存学生信息模块运行保存文件图
4.9谢谢使用模块:
图4-21 谢谢使用模块运行效果图
4.10退出程序模块:
图4-22 退出程序模块运行图
5 测试
5.1 测试目的
测试的目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性,测试是为了发现程序中的错误而执行程序的过程,好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错误的测试。测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生趋势
5.2 测试方案
按照编写的程序,进行编译,运行,发现其中存在的问题,并及时改正,不断完善程序中存在的不足之处,以提高此系统的效率。
5.3 测试项目
(1)系统主界面设计测试
(2)学生信息创建模块测试:
(3)学生信息查询模块设计测试
(a)学生信息查询模块主界面测试
(b)按姓名查找模块测试
(c)按学号查找模块测试
(d)按课程查找模块测试
(4)学生信息修改模块设计测试
(a)学生信息修改模块主界面测试
(b)添加学生信息模块测试
(c)修改学生信息模块测试
(d)删除学生信息模块测试
(e)显示学生信息模块测试
(5)学生信息统计模块设计测试
(a)学生信息统计模块设计主界面测试
(b)查找学生平均成绩模块测试
(c)查找单科平均成绩模块测试
(6)学生信息显示模块设计测试
(7)保存学生信息模块测试
(8)谢谢使用模块测试
(9)退出程序模块测试
以上各个模板的测试结果均在上面以图的形式对应给出。
5.4 测试结果
经过对以上各个模板的测试,可以得出各模块的测试过程都没有出现异常情况,程序在系统的要求下,能够实现所要求的各种功能。
6设计体会及今后的改进意见
6.1设计体会
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程。”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
通过这次“C++课程设计”,使得我在多方面都有所提高。通过这次课程设计,综合运用本专业所学课程的理论和C++语言编程的实际训练从而培养和提高学生独立工作能力,巩固与扩充了数值分析所学的内容,通过对编程的锻炼,对C++运行的环境有了更深入的了解。
感谢对我帮助过的老师们、同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。
由于我的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,我将万分感谢。
6.2改进意见
本系统的缺点之处在于不能分别为管理者,教师和学生三方面提供必要的服务,以及不支持密码登录等服务,信息容易泄露,功能还比较单一,今后将从这方面加以改进,将在系统登录模块增设密码登录等服务,并且实现管理者,教师和学生三方面的服务。
通过这次课程设计,我也发现自己还有许多需要改进的地方。但是,经过这次课程设计我相信我的程序设计能力又一次进步了很多。因此,自己将更加勤奋地学习理论知识,并且将理论与实践结合起来,使自己能更加熟练地运用理论知识解决实际问题的能力!为自己以后的编程生涯积累一点经验,为自己以后的事业打好基础。
参 考 文 献
[1] 谭浩强.C++程序设计.[M].北京:清华大学出版社,2005.
[2] 谭浩强.C++程序设计与上机指导(第三版).[M].北京:清华大学出版社,2005.
附 录
附:学生成绩管理信息系统程序清单
#include "iostream.h"
#include "string.h"
#include "malloc.h"
#include "stdlib.h"
#include "fstream.h"
#include "stdio.h"
#include "iomanip.h"
#include "conio.h"
#define NULL 0
#define LEN sizeof(struct STUDENT)
struct STUDENT
{
long number;
char name[20];
char sex[10];
int age;
int chineseRecord;
int mathematicsRecord;
int englishRecord;
int physicalRecord;
int chemistryRecord;
int biologicalRecord;
double average;
struct STUDENT *next;
};
struct STUDENT * head=NULL;
void SaveData();
void Input();
void Add();
void Show();
void Del();
void FindName();
void FindNumber();
void FindClass();
void Modify();
void Sort();
void FindStudentAverage();
void FindClassAverage();
void AboutMe();
void SaveData() //保存函数
{
char filename[20];
cout<<"请输入文件名: ";
cin>>filename;
ofstream fout(filename);
if(!fout)
cout<<"文件不能打开!"<<endl;
else
{
struct STUDENT *p;
p=head;
fout << setw(0) <<"学号"<< setw(8) <<"姓名"<< setw(8)<<"性别"<<setw(8)<<"年龄"
<< setw(8) << "语文"<< setw(8) <<"英语"<< setw(8)
<<"数学"<< setw(8) <<"物理"<<setw(8)<<"化学"
<<setw(8)<<"生物"<<endl;
do{
fout << setw(0) << p->number << setw(8) << p->name << setw(8)<<p->sex<<setw(8)<<p->age
<< setw(8) << p->chineseRecord << setw(8) << p->englishRecord << setw(8)
<< p->mathematicsRecord << setw(8) << p->physicalRecord <<setw(8)<<p->chemistryRecord
<<setw(8)<<p->biologicalRecord<<endl;
p=p->next;}
while(p != NULL);
}
cout<<"保存成功!"<<endl;
cout<<"将返回上一级。"<<endl;
fout.close();
getchar();
}
void Input()
{ int n=0;
struct STUDENT *p1,*p2;
char flag='y';
p1=p2=(struct STUDENT *)malloc(LEN);
cout << "请按照以下顺序,输入您要输入的学生信息:"<< endl;
cout << setw(0) << "学号" << setw(8) << "姓名" << setw(8)<<"性别"<<setw(8)<<"年龄"
<< setw(8) << "语文" << setw(8) << "英语" << setw(8) << "数学"
<< setw(8) << "物理" <<setw(8)<<"化学" <<setw(8)<<"生物"<<endl;
cin >> p1->number >> p1->name >>p1->sex
>> p1->age >> p1->chineseRecord
>> p1->englishRecord >> p1->mathematicsRecord
>> p1->physicalRecord>>p1->chemistryRecord
>> p1->biologicalRecord ;
while(flag=='y'){
n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
cout<<" 要继续添加吗(y/n)";
cin>>flag;
while(flag != 'y' && flag != 'n'){
cout<<"输入错误,请输入(y/n)"<<endl;
cin>>flag;
}
if(flag=='n'){
cout<<"请及时保存数据,现在返回上一级"<<endl;
break;
}
p1=(struct STUDENT *)malloc(LEN);
cout << "请按照以下顺序,输入您要输入的学生信息:"<<endl;
cout << setw(0) << "学号" << setw(8) << "姓名" << setw(8)<<"性别"<<setw(8)<<"年龄"
<< setw(8) << "语文" << setw(8) << "英语" << setw(8) << "数学"
<< setw(8) << "物理" <<setw(8)<<"化学" <<setw(8)<<"生物"<<endl;
cin >> p1->number >> p1->name >>p1->sex
>> p1->age>> p1->chineseRecord
>> p1->englishRecord >> p1->mathematicsRecord
>> p1->physicalRecord>>p1->chemistryRecord
>> p1->biologicalRecord ;
}
p2->next=NULL;}
void Add(){
struct STUDENT *p1,*p;
char flag='y';
long num;
do{
p1=(struct STUDENT *)malloc(LEN);
p=head;
cout<<" 输入你要添加的学号: ";
cin>>num;
while(p!=NULL){
if(num<head->number ){
cout << "请按照以下顺序,输入您要输入的学生信息:"<< endl;
cout << setw(0) << "姓名" << setw(8)<<"性别"<<setw(8)<<"年龄"
<< setw(8) << "语文" << setw(8) << "英语" << setw(8) << "数学"
<< setw(8) << "物理" <<setw(8)<<"化学" <<setw(8)<<"生物"<<endl;
cin >> p1->name >>p1->sex
>> p1->age >> p1->chineseRecord
>> p1->englishRecord >> p1->mathematicsRecord
>> p1->physicalRecord>>p1->chemistryRecord
>> p1->biologicalRecord ;
p1->number =num;
p1->next =head ;
head=p1;
break;
}
else{
if(p->next !=NULL && num>p->number && num<p->next->number ){
cout << "请按照以下顺序,输入您要输入的学生信息:"<< endl;
cout << setw(0) << "姓名" << setw(8)<<"性别"<<setw(8)<<"年龄"
<< setw(8) << "语文" << setw(8) << "英语" << setw(8) << "数学"
<< setw(8) << "物理" <<setw(8)<<"化学" <<setw(8)<<"生物"<<endl;
cin >> p1->name >>p1->sex
>> p1->age >> p1->chineseRecord
>> p1->englishRecord >> p1->mathematicsRecord
>> p1->physicalRecord>>p1->chemistryRecord
>> p1->biologicalRecord ;
p1->number=num;
p1->next =p->next;
p->next=p1;
break;
}
}
if(p->next ==NULL){
cout<< "请按照以下顺序,输入您要输入的学生信息:"<< endl;
cout << setw(0) << "姓名" << setw(8)<<"性别"<<setw(8)<<"年龄"
<< setw(8) << "语文" << setw(8) << "英语" << setw(8) << "数学"
<< setw(8) << "物理" <<setw(8)<<"化学" <<setw(8)<<"生物"<<endl;
cin >> p1->name >>p1->sex
>> p1->age >> p1->chineseRecord
>> p1->englishRecord >> p1->mathematicsRecord
>> p1->physicalRecord>>p1->chemistryRecord
>> p1->biologicalRecord ;
p1->number =num;
p->next=p1;
p1->next =NULL;
break;
}
p=p->next;
}
cout<<" 要继续添加吗(y/n)";
cin>>flag;
while(flag != 'y' && flag != 'n'){
cout<<"输入错误,请输入(y/n)"<<endl;
cin>>flag;
}
if(flag=='n'){
cout<<"请及时保存数据,现在返回上一级"<<endl;
break;
}
}while(flag=='y');
}
void Show(){
struct STUDENT *p;
cout<<"\n所有学生的成绩:"<<endl;
p=head;
if(head!=NULL){
cout << setw(0) << "学号" << setw(8) << "姓名" << setw(8)<<"性别"<<setw(8)<<"年龄"
<< setw(8) << "语文" << setw(8) << "英语" << setw(8) << "数学"
<< setw(8) << "物理" <<setw(8)<<"化学" <<setw(8)<<"生物"<<endl;
do{
cout<< setw(0) << p->number << setw(8) << p->name << setw(8)<<p->sex<<setw(8)<<p->age
<< setw(8) << p->chineseRecord << setw(8) << p->englishRecord << setw(8)
<< p->mathematicsRecord << setw(8) << p->physicalRecord <<setw(8)<<p->chemistryRecord <<setw(8)<<p->biologicalRecord<<endl;
p=p->next;
}while(p != NULL);
cout<<"请及时保存数据,现在返回上一级"<<endl;
}
else
cout<<"\n学生成绩为空,请确认。"<<endl;
}
void Del(){
long num;
struct STUDENT *p1,*p2;
char flag;
flag='y';
do{
cout<<"请输入要删除学生的学号:"<<endl;
cin>>num;
p1=head;
p2=head;
while(p1!=NULL){
if(p1->number == num && p1==head){
head=p1->next ;
delete p1;
cout<<"已成功删除,请及时保存数据。"<<endl;
break;
}
if(p1->next->number ==num && p1->next->next==NULL){
delete p1->next ;
cout<<"已成功删除,请及时保存数据。"<<endl;
p1->next=NULL;
break;
}
if(p1->next->number == num){
p2=p1->next ;
p1->next=p2->next ;
delete p2;
cout<<"已成功删除,请及时保存数据。"<<endl;
break;
}
p1=p1->next;
}
cout<<" 要继续删除吗(y/n)";
cin>>flag;
while(flag != 'y' && flag != 'n'){
cout<<"输入错误,请输入(y/n)"<<endl;
cin>>flag;
}
if(flag=='n'){
cout<<"请及时保存数据,现在返回上一级"<<endl;
break;
}
}while(flag=='y');
}
void FindName()
{
char name[20];
struct STUDENT *p;
struct STUDENT *p1,*p2;
struct STUDENT * headna=NULL;
char flag='y';
p1=p2=(struct STUDENT *)malloc(LEN);
do{
p=head;
cout<<" 输入你要查找的姓名: ";
cin>>name;
while(p!=NULL){
if(strcmp(p->name,name)==0){
if(headna==NULL){
p1->number=p->number;strcpy(p1->name,p->name);strcpy(p1->sex,p->sex);
p1->age=p->age;p1->chineseRecord=p->chineseRecord;
p1->englishRecord=p->englishRecord;p1->mathematicsRecord=p->mathematicsRecord;
p1->physicalRecord=p->physicalRecord;p1->chemistryRecord =p->chemistryRecord ;
p1->biologicalRecord =p->biologicalRecord;
headna=p1;
break;
}
else{
p2->next=p1;
p2=p1;
p1->number=p->number;strcpy(p1->name,p->name);strcpy(p1->sex,p->sex);
p1->age=p->age;p1->chineseRecord=p->chineseRecord;
p1->englishRecord=p->englishRecord;p1->mathematicsRecord=p->mathematicsRecord;
p1->physicalRecord=p->physicalRecord;p1->chemistryRecord =p->chemistryRecord ;
p1->biologicalRecord =p->biologicalRecord;
break;
}
}
else
p=p->next;
}
cout<<" 要继续查找吗(y/n)";
cin>>flag;
while(flag != 'y' && flag != 'n'){
cout<<"输入错误,请输入(y/n)"<<endl;
cin>>flag;
}
if(flag=='n')
break;
p1=(struct STUDENT *)malloc(LEN);
}while(flag=='y');
p2->next=NULL;
struct STUDENT *w;
cout<<"\n所有被查找学生的成绩:"<<endl;
w=headna;
if(headna!=NULL){
cout << setw(0) << "学号" << setw(8) << "姓名" << setw(8)<<"性别"<<setw(8)<<"年龄"
<< setw(8) << "语文" << setw(8) << "英语" << setw(8) << "数学"
<< setw(8) << "物理" <<setw(8)<<"化学" <<setw(8)<<"生物"<<endl;
do{
cout<< setw(0) << w->number << setw(8) << w->name << setw(8)<<w->sex<<setw(8)<<w->age
<< setw(8) << w->chineseRecord << setw(8) << w->englishRecord << setw(8)
<< w->mathematicsRecord << setw(8) <<w->physicalRecord <<setw(8)<<w->chemistryRecord
<< setw(8) <<w->biologicalRecord<<endl;
w=w->next;
}while(w != NULL);
char filename[20];
cout<<"请输入保存的文件名: ";
cin>>filename;
ofstream fout(filename,ios::app);
if(!fout)
cout<<"文件不能打开!"<<endl;
else
{
struct STUDENT *p;
p=headna;
fout << setw(0) <<"学号"<< setw(8) <<"姓名"<< setw(8)<<"性别"<<setw(8)<<"年龄"
<< setw(8) << "语文"<< setw(8) <<"英语"<< setw(8)
<<"数学"<< setw(8) <<"物理"<<setw(8)<<"化学"
<<setw(8)<<"生物"<<endl;
do{
fout << setw(0) << p->number << setw(8) << p->name << setw(8)<<p->sex<<setw(8)<<p->age
<< setw(8) << p->chineseRecord << setw(8) << p->englishRecord << setw(8)
<< p->mathematicsRecord << setw(8) << p->physicalRecord <<setw(8)<<p->che
展开阅读全文