C++课程设计-学生管理系统

更新时间:2023-08-12 08:23:01 阅读量: 外语学习 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C++程序设计课程设计

1 概述

1.1 课程设计背景

学生成绩管理系统能有效地管理每个学生的各科成绩,还可以管理学生的基本信息以及课程信息。该系统能简便地实行相关记录的查询,添加,修改,删除操作。

目前,学校工作繁杂、资料重多,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,还没有一套完整的、统一的系统。因此,开发一套适合大众的、兼容性好的系统是很有必要的。根据开发要求,它主要应用于教育系统,完成对日常学生成绩的录入查询和更新删除等管理操作,实现学生成绩管理的计算机化。开发学生成绩管理系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理。本文叙述了现在高校学生成绩管理的现状以及C++语言和一些开源框架的概况。重点介绍了学生成绩管理系统的实现过程:包括系统分析、系统调查、数据库设计、功能设计、系统物理配置方案、系统实现、系统测试以及系统功能简介。

1.2 课程设计目标

建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平。帮助广大教师提高工作效率,实现学生成绩维护工作流程的系统化、规范化和自动化。为了使系统在学院的管理中发挥更大的作用,实现工作过程的计算机化,提高工作效率和工作质量,现提出如下的系统开发目标:

(1)提高学生管理次序,节约管理成绩,增强学生管理的安全性。

(2)系统应具有实用性、可靠性和适用性,同时注意到先进性。

(3)对各个数据库进行动态管理,防止混乱。

(4)能够对查询结果进行分类汇总,实现报表打印和下载。

(5)方便用户的操作,尽量减少用户的操作。

2 系统需求分析

2.1 系统调查

21世纪以来,人类经济高速发展,人们的生活发生了日新月异的变化,特别是计算机的应用及普及到经济和社会生活的各个领域,使原本的旧的管理方法越来越不适应现在社会的发展,许多人还停留在以前的手工操作,这大大地阻碍了人类经济的发展。

为了适应现代社会人们高度强烈的时间观念,我对陕西科技大学理学院的原有的学生成绩管理系统进行了调查研究,并对一些教师和学生进行了调查,听取他们对学生成绩管理的一些建议和要求以及他们对这方面的一些需求,根据我所具有的知识,决定开发的这个系统采用当前较为流行的编程软件C++作为实现语言,以实现学生成绩管理信息系统的

1

学生成绩管理系统

设计与开发。

2.2系统需求

为了实现数据录入、数据删除、数据浏览以及数据查询等功能,该学生成绩管理系统主要划分为学生信息的载入、创建、查询、修改、统计、显示以及保存等内容,这些管理职能统一由管理者负责。

在学生管理系统开发时应该满足以下具体的系统要求:

学生成绩管理系统中不同使用单位(用户)的学生人数事先无法确定.

(1)该学生成绩管理系统要求有学生成绩录入,查询,修改,删除,保存文件.

(2)系统使用文字菜单,用户通过选择菜单项的编号,实现系统对子模块的调用.也可用windows界面下的菜单栏、弹出式菜单、下拉菜单。

(3)每个班级每门课程的成绩可以从学生的成绩总表提取出子表并存储成一个文本文件,

以便在windows的notebook或者Microsoft word下打印,规定该文本文件名由班级号和课程名拼音字符串构成.输入班级号和课程名字符串后自动生成文件名.如1班,语文,则文件名为:c1yuwen.txt.

(4)每个学生学习的课程有语文,英语,数学,物理,化学,生物.

(5)学生的成绩总表结构约定为(学号,姓名,课程名,平时成绩,期末成绩,总评成绩).总评成绩由程序自动计算,总评成绩=平时成绩﹡30%+期末成绩﹡70%.

(6)学号是一个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 开发环境

软件环境:windows98/windowsXP/windows2000,Visual C++

2

C++程序设计课程设计

3 硬件环境:计算机(Pen4CPU, 256MRAM ,60G 以上硬盘,输入输出设备)

3系统概要设计

3.1 系统的功能模块划分

“学生成绩管理信息系统”包括九个模块:信息载入,信息创建,信息查询,信息修改,信息统计,信息显示,保存信息,感谢使用以及退出程序。这九个模块既相互联系又相互独立,其中信息查询,信息修改,信息统计,信息显示,保存信息这五个模块必须以信息载入或信息创建为基础。

(1)信息载入模块:主要是将已有的学生成绩总表提入到系统,以此为基础,再进行必要的操作;

(2)信息创建模块:对学生的成绩进行录入,然后通过其他的操作,保存为所需的文件;

(3)信息查询:在信息载入和信息创建的基础上,对学生的成绩进行查询;

(4)信息修改:在信息载入和信息创建的基础上,对所需学生的成绩进行修改;

(5)信息统计:在信息载入和信息创建的基础上,对学生的相关成绩进行统计,输出平均分及排名;

(6)信息显示:在信息载入和信息创建的基础上,显示出系统所有学生的成绩;

(7)保存信息:在信息载入和信息创建的基础上,对学生的成绩进行必要的编辑后,保存所需的文件;

(8)感谢使用:显示系统的创建者,并提示在退出程序前是否进行相关的操作;

(9)退出程序:退出该程序。

3.2 系统结构图

(1)学生成绩管理信息系统主模块如图 3-1所示

图3-1 学生成绩管理信息系统主模块

(2)学生信息查询模块如图3-2所示

学生成绩管理系统 学生信息统计 学生信息显示 学生信息保存 鸣谢 退出程序

学生信息修改 学生信息查询 学生信息创建 学生信息载入 学生信息查询

学生成绩管理系统

4

图3-2 学生信息查询模块

(3)学生信息修改模块如图3-3所示

图3-3 学生信息修改模块

(4)学生信息统计模块如图3-4所示

按姓名查询 返回上一级

按课程查找 按学号查找 学生信息修改

删除学生信息 显示学生信息

返回上一级

添加学生信息 修改学生信息 学生信息统计

C++程序设计课程设计

5

图3-4 学生信息统计模块

4系统详细设计

4.1 系统登录模块设计

学生成绩管理信息系统可以分为九个模块:

(1)学生信息载入

(2)学生信息创建

(3)学生信息查询

(4)学生信息修改

(5)学生信息统计

(6)学生信息显示

(7)学生信息保存

(8)鸣谢

(9)退出程序

系统业务处理结构如图4-1所示

查找学生平均成绩 查找学生单科平

均成绩 排序学生信息 返回上一级 学生成绩管理系统

学生成绩管理系统

6

4.2 系统主界面设计

系统主界面设计如图4-2所示

4.3 学生信息管理模块设计

图4-1 系统业务处理流程

图4-2 系统主界面设计

学生信息载入 学生信息创建

学生信息查询 学生信息修改 学生信息统计 学生信息显示 保存学生信息

鸣谢

退出程序

C++

程序设计课程设计

7 (1)学生信息载入模块如图

4-3所示

(2)学生信息创建模块如图4-4所示

4.4学生信息查询模块设计 (1)按姓名查找模块如图4-5所示

图4-3 学生信息载入模块

图4-4 学生信息创建模块

学生成绩管理系统

8

(2)按学号查找模块如图4-6所示

(3) 按课程查找模块如图4-7所示 图4-5 按姓名查找模块 图4-6 按学号查找模块

C++程序设计课程设计

9

4.5学生信息修改模块设计

(1)添加学生信息模块如图4-8

所示

(2)修改学生信息模块如图4-9所示

图4-7 按课程查找模块

图4-8 添加学生信息模块

学生成绩管理系统

10

(3)删除学生信息模块如图4-10所示

(4)显示学生信息模块如图4-11所示 图4-9 修改学生信息模块 图4-10 删除学生信息模块

C++程序设计课程设计

11

4.6学生信息统计模块设计

(1)查找学生平均成绩如图4-12所示

图4-12 查找学生平均成绩

(2)查找单科平均成绩如图4-13所示

图4-11 显示学生信息模块

学生成绩管理系统

12

4.7退出系统模块设计

(1)感谢使用模块如图4-14

所示(显示系统的设计者)

(2)退出程序模块如图4-15所示

图4-13 查找单科平均成绩

图4-14 感谢使用模块

C++程序设计课程设计

13

5 测试

5.1 测试目的

测试是为了发现程序中的错误而执行程序的过程,测试的目的就是在软件投入生产运行之前,尽可能的发现软件中的错误。成功的测试是发现了至今为止尚未发现的错误的测试。

5.2 测试方案

为了提高测试效率,降低测试成本,本测试方案采用黑盒法设计基本的测试方案,再用白盒法补充一些方案。在黑盒法测试方案中,采用等价划分技术,把所有可能的数据划分成几个等价类。

5.3 测试项目

(1)登录测试

(2)学生信息载入测试

(3)学生信息创建测试

(4)学生信息查询测试

(5)学生信息修改测试

(6)学生信息统计测试

5.4 测试结果

图4-15 退出程序模块

学生成绩管理系统

经过以上测试,可知各模块的测试过程都没有出现异常情况,程序在系统的要求下,能够实现所要求的各种功能。

6.设计体会及今后的改进意见

C++是一门魅力四射的课程,而编程实践更是检验自己学习成果的必修课,经过一个多月的努力,我终于完成了这次学生成绩管理系统的设计与开发。刚开始拿到这个题目确实让我感觉无从下手,之后在网上参考了一下其他人的设计流程,然后慢慢一步步的自己开始着手做,在设计的过程中,我遇到了很多的问题,起初是程序的设计,自己经过一个学期的C++的学习,独立编写的C++程序的总行数不过两百多行,而这次一下子要编写一个几百多行的程序,实在是一个巨大的挑战。就这方面来说,这是此次课程带给我的最大的收获,它让我明白了自身的不足之处,让我懂得在学习的过程更加虚心,认真,努力。

另外此次课程设计增加了自己编程的能力,将自己所学的理论知识与实践结合在一块,提高了自己对这门课程的兴趣。

经过一番努力,终于初步编写出了程序,但是它的功能还不是很完善,有些地方自己还没有彻底搞明白,以后必定要加强对程序设计的学习,不断完善自己的编程能力。

14

C++程序设计课程设计

参考文献

[1] 谭浩强.C++程序设计[M].北京:清华大学出版社.2005.10

[2] 谭浩强.C++程序设计题解与上机指导(第三版)[M].北京:清华大学出版社.2005.06

[3] 朱站立.数据结构[M].西安:交通大学出版社.2004.05

[4] 罗斌.Visual C++编程技巧[M].北京:中国水利水电出版社.2005.08

15

学生成绩管理系统

附录

附录1.1 源程序清单

void Sort()

{

struct STUDENT * headsa=NULL;

struct STUDENT *current;

struct STUDENT *p1,*p2,*p3,*max;

p1=p2=(struct STUDENT *)malloc(LEN);

max=(struct STUDENT *)malloc(LEN);

max->average =1000;

while(1){

p1->average=0.078;

current=head;

while(current!=NULL){

current->average =(current->chineseRecord +current->englishRecord

+current->mathematicsRecord +current->physicalRecord +current->chemistryRecord

+current->biologicalRecord )/6;

if(p1->average <=current->average && current->average <=max->average &&

current!=max ){

p1=current;

current=current->next;

}

else

current=current->next;

}

max=p1;

if(headsa==NULL){

p2->number=p1->number;strcpy(p2->name,p1->name);strcpy(p2->sex,p1->sex);

p2->age=p1->age;p2->chineseRecord=p1->chineseRecord;

p2->englishRecord=p1->englishRecord;p2->mathematicsRecord=p1->mathematicsR

ecord;

p2->physicalRecord=p1->physicalRecord;p2->chemistryRecord

=p1->chemistryRecord ;

p2->biologicalRecord=p1->biologicalRecord;

headsa=p2;

}

else{

p2->number=p1->number;strcpy(p2->name,p1->name);strcpy(p2->sex,p1->sex);

p2->age=p1->age;p2->chineseRecord=p1->chineseRecord;

16

C++程序设计课程设计

p2->englishRecord=p1->englishRecord;p2->mathematicsRecord=p1->mathematicsReco rd;

p2->physicalRecord=p1->physicalRecord;p2->chemistryRecord

=p1->chemistryRecord ;

p2->biologicalRecord=p1->biologicalRecord;

}

if(p1->average ==0.078){

p3->next =NULL;

break;

}

p1=(struct STUDENT *)malloc(LEN);

p2->next =p1;

p3=p2;

p2=p1;

}

struct STUDENT *q;

cout<<"\n排序所有学生的成绩:"<<endl;

q=headsa;

if(headsa!=NULL){

cout << setw(0) << "学号" << setw(8) << "姓名" << setw(8)<<"性别"<<setw(8)<<"年龄"

<< setw(8) << "语文" << setw(8) << "英语" << setw(8) << "数学"

<< setw(8) << "物理" <<setw(8)<<"化学" <<setw(8)<<"生物"<<setw(12)<<"平均分"<<endl;

do{

cout<< setw(0) << q->number << setw(8) << q->name << setw(8)<<q->sex<<setw(8)<<q->age

<< setw(8) << q->chineseRecord << setw(8) << q->englishRecord << setw(8)

<< q->mathematicsRecord << setw(8) << q->physicalRecord <<setw(8)<<q->chemistryRecord

<<setw(8)<<q->biologicalRecord<<setw(12)<<q->average<<endl;

q=q->next;

}while(q != NULL);

}

else

cout<<"\n学生成绩为空,请确认。"<<endl;

char filename[20];

cout<<"请输入保存的文件名: ";

cin>>filename;

17

学生成绩管理系统

ofstream fout(filename,ios::app);

if(!fout)

cout<<"文件不能打开!"<<endl;

else

{

struct STUDENT *p;

p=headsa;

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;

fout.close();

cout<<"现在返回上一级。"<<endl;

}

void FindStudentAverage()

{

long num;

struct STUDENT * p;

char flag='y';

do{

cout<<" 输入你要查找的学号: ";

cin>>num;

p=head;

while(p!=NULL){

if(p->number==num){

cout<<num<<"学号同学的平均分为:";

p->average =(p->chineseRecord +p->englishRecord +p->mathematicsRecord +p->physicalRecord +p->chemistryRecord

18

C++程序设计课程设计

+p->biologicalRecord )/6;

cout<<p->average<<endl;

break;

}

else

p=p->next;

}

if(p==NULL)

cout<<"没有该学号同学的信息,请确认。"<<endl;

cout<<" 要继续查找吗(y/n)";

cin>>flag;

while(flag != 'y' && flag != 'n'){

cout<<"输入错误,请输入(y/n)"<<endl;

cin>>flag;

}

if(flag=='n')

break;

}while(flag=='y');

cout<<"现在返回上一级。"<<endl;

}

void FindClassAverage()

{

struct STUDENT * p;

char flag='y';

char it;

do{

double sum=0;

double average=0;

p=head;

cout<<"请输入要查找科目所对应的序号:"<<endl;

cout<<"1--语文"<<setw(12)<<"2--英语"<<setw(12)<<"3--数学"<<setw(12)<<"4--物理"<<setw(12)<<"5--化学"<<setw(12)<<"6--生物"<<endl;

cin>>it;

cout<<it;

int n=0;

switch(it) {

case '1':

while (p!=NULL){

sum=sum+p->chineseRecord;

n++;

p=p->next;

19

学生成绩管理系统

}

average = sum/n;

cout << "语文平均成绩:" << average << endl;

break;

case '2':

while (p!=NULL){

sum=sum+p->englishRecord;

n++;

p=p->next;

}

average = sum/n;

cout << "英语平均成绩:" << average << endl;

break;

case '3':

while (p!=NULL){

sum=sum+p->mathematicsRecord;

n++;

p=p->next;

}

average = sum/n;

cout << "数学平均成绩:" << average << endl;

break;

case '4':

while (p!=NULL){

sum=sum+p->physicalRecord;

n++;

p=p->next;

}

average = sum/n;

cout << "物理平均成绩:" << average << endl;

break;

case '5':

while (p!=NULL){

sum=sum+p->chemistryRecord;

n++;

p=p->next;

}

average = sum/n;

cout << "化学平均成绩:" << average << endl;

break;

case '6':

while (p!=NULL){

sum=sum+p->biologicalRecord;

n++;

p=p->next;

20

C++程序设计课程设计

}

average = sum/n;

cout << "生物平均成绩:" << average << endl;

default:

cout<<"选择错误,请选择1 - 6 号"<<endl;

}

cout<<" 要继续查找吗(y/n)";

cin>>flag;

while(flag != 'y' && flag != 'n'){

cout<<"输入错误,请输入(y/n)"<<endl;

cin>>flag;

}

if(flag=='n')

break;

}while(flag=='y');

cout<<"现在返回上一级。"<<endl;

}

void AboutMe()

{

cout<<"***************************************************"<<endl;

cout<<"** 感谢使用本程序 **"<<endl;

cout<<"** 陕西科技大学 **"<<endl;

cout<<"** 理学院信息专业102班 **"<<endl;

cout<<"** 感谢帮助调试本程序的人 **"<<endl;

cout<<"** 现在返回上一级 **"<<endl;

cout<<"***************************************************"<<endl;

}

void main(){

int q=1;

char k;

while (q)

{

system("cls");

cout << "----------------------------------\n";

cout << " 学生成绩管理 \n";

cout << "----------------------------------\n";

cout << " 1 学生信息载入 \n";

cout << " 2 学生信息创建 \n";

cout << " 3 学生信息查询 \n";

cout << " 4 学生信息修改 \n";

cout << " 5 学生信息统计 \n";

21

本文来源:https://www.bwwdw.com/article/njmj.html

Top