学生成绩管理信息系统设计与开发

更新时间:2024-01-11 03:41:01 阅读量: 教育文库 文档下载

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

C++程序设计课程设计说明书

题目: 学生成绩管理信息系统设计与开发

学生姓名: 陈 浩 学 号:200912010220 院 (系):理 学 院 专 业: 数学与应用数学 指导教师:刘 海 峰

2011 年 6 月 15 日

陕 西 科 技 大 学

C++程序设计课程设计任务书

理学院 应用数学 专业 数学092班级 姓名: 陈浩 学号:200912010220.

题目: 学生成绩管理信息系统设计与开发 课程设计从 2011 年 5 月 10日起到 2011 年 6 月 15 日

1、课程设计的内容和要求(包括原始数据、技术要求、工作要求等):

1)、设计内容:

制作学生成绩管理系统,实现数据录入、数据删除、数据浏览以及数据查询等功能。 2)、课程设计的要求:

包括系统设计要求,开发环境要求,技术文档要求三部分。 系统设计要求:

a) 学生成绩管理系统中不同使用单位(用户)的学生人数事先无法确定. b) 该学生成绩管理系统要求有学生成绩录入,查询,修改,删除,保存文件. c) 系统使用文字菜单,用户通过选择菜单项的编号,实现系统对子模块的调用.也

可用windows界面下的菜单栏、弹出式菜单、下拉菜单。

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

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

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

f) 学生的成绩总表结构约定为(学号,姓名,课程名,平时成绩,期末成绩,总评

成绩).总评成绩由程序自动计算,总评成绩=平时成绩﹡30%+期末成绩﹡70%. g) 学号是一个9位整数构成的字符串, 学号的编码规则:入学年份+在读年级+在读

班级+班内编号;入学年份用4位整数构成字符串,如2003年入学则表示为:”2003”;在读年级用1位整数构成字符串,如正在1年级读书则表示为:”1”;在读班级用2位整数构成字符串,如正在1班读书则表示为:”01”;班内编号用2位整数构成字符串,如在班内编号为23号则表示为:”23” 开发环境要求:

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

硬件环境:计算机(Pen4CPU, 256MRAM,60G以上硬盘,输入输出设备) 技术文档要求:

按照软件工程技术文档编写要求进行。要求流程图绘制规范,模块功能描述清晰,数据字典齐全。

2、对课程设计成果的要求〔包括图表、实物等硬件要求〕: 1)提交课程设计报告

按照系统设计要求,用Visual C++设计和开发一个应用程序—学生成绩管理信息系统,提交由需求分析;系统设计说明(包括主菜单、子菜单、模块功能简介、数据字典、系统结构图);系统技术文档 (包括系统各模块主要流程图,软件总体测试方案与测试记录、局部测试方案与测试记录、软件调试和修改记录、测试结论、运行情况记录),系统使用说明书,源程序代码为附录构成的课程设计报告。 2)课程设计报告版式要求

打印版面要求:A4纸,页边距:上2cm,下2cm,左2.5cm、右2cm;字体:正文宋

体、小四号;行距:固定值20;页眉1.5cm ,页脚1.75cm;页码位于页脚居中打印;奇数页页眉“C++程序设计课程设计”,偶数页页眉“人事信息管理系统”,页眉宋体小5号;段落及层次要求:每节标题以四号黑体左起打印(段前段后各0.5行),节下为小节,以小四号黑体左起打印(段前段后各0.5行)。换行后以小四号宋体打印正文。节、小节分别以1、1.1、1.1.1依次标出,空一字符后接各部分的标题。

当论文结构复杂,小节以下的标题,左起顶格书写,编号依次用(1)、(2)……或1)、2)……顺序表示。字体为小四号宋体。

对条文内容采用分行并叙时,其编号用(a)、(b)……或a)、b)……顺序表示,如果编号及其后内容新起一个段落,则编号前空两个中文字符。 3)设计报告装订顺序与规范

封面

C++程序设计课程设计任务书 目录

C++程序设计设计课程设计报告正文 设计体会及今后的改进意见 参考文献(资料) 左边缘装订

3、课程设计工作进度计划: 时间 第13周 第14周 第15周 设计任务及要求 需求分析分析、功能分解并深入学习动态链表知识 编写程序代码(教师指导1周) 调试、完善、编写课程设计报告 指导教师: 日期:

教研室主任: 日期:

3

学生成绩管理信息系统设计与开发 1 概 述 1.1 课程设计背景

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

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

a) 提高学生管理次序,节约管理成绩,增强学生管理的安全性。 b) 系统应具有实用性、可靠性和适用性,同时注意到先进性。 c) 对各个数据库进行动态管理,防止混乱。

d) 能够对查询结果进行分类汇总,实现报表打印和下载。 e) 方便用户的操作,尽量减少用户的操作。

2 系统需求分析

2.1 系统调查

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

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

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

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

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

i) 该学生成绩管理系统要求有学生成绩录入,查询,修改,删除,保存文件. j) 系统使用文字菜单,用户通过选择菜单项的编号,实现系统对子模块的调用.也

可用windows界面下的菜单栏、弹出式菜单、下拉菜单。

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

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

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

m) 学生的成绩总表结构约定为(学号,姓名,课程名,平时成绩,期末成绩,总评

成绩).总评成绩由程序自动计算,总评成绩=平时成绩﹡30%+期末成绩﹡70%. n) 学号是一个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++

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

3系统概要设计

3.1 系统的功能模块划分

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

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

必要的操作;

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

件;

3) 信息查询:在信息载入和信息创建的基础上,对学生的成绩进行查询; 4) 信息修改:在信息载入和信息创建的基础上,对所需学生的成绩进行修改; 5) 信息统计:在信息载入和信息创建的基础上,对学生的相关成绩进行统计,输出

平均分及排名;

6) 信息显示:在信息载入和信息创建的基础上,显示出系统所有学生的成绩; 7) 保存信息:在信息载入和信息创建的基础上,对学生的成绩进行必要的编辑后,

保存所需的文件;

5

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

1)学生成绩管理信息系统主模块如下:

?信息载入???信息创建???信息查询????信息修改???学生成绩管理信息系统?信息统计?系统管理员?信息显示????保存信息???感谢使用???退出程序???2)学生信息查询模块如下:

3)学生信息修改模块如下

?按姓名查找??按学号查找学生信息查询??按课程查找?返回上一级?

4)学生信息统计模块如下:

?添加学生信息??修改学生信息?学生信息修改?删除学生信息?显示学生信息???返回上一级?查找学生平均成绩??查找学生成绩排名学生信息统计??排序学生成绩?返回上一级?

4系统详细设计

4.1 系统登录模块设计

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

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

1) 学生信息载入 2) 学生信息创建 3) 学生信息查询 4) 学生信息修改 5) 学生信息统计 6) 学生信息显示 7) 保存学生信息

8) 感谢使用 9) 退出程序

系统业务处理流程如图1-5

4.2 系统主界面设计

系统主界面设计如图1-6

4.3 学生信息管理模块设计 1)学生信息载入模块如图1-7

7

2)学生信息创建模块如图1-8

4.4学生信息查询模块设计

1)按姓名查找模块如图1-9

2) 按学号查找模块如图1-10

3) 按课程查找模块如图1-11所示

9

4.5学生信息修改模块设计 1)添加学生信息模块如图1-12

2)修改学生信息模块如图1-13

3)删除学生信息模块如图1-14

11

4)显示学生信息模块如图1-15

4.6学生信息统计模块设计 1)查找学生平均成绩如图1-16

2)查找单科平均成绩如图1-17

4.7退出系统模块设计

1)感谢使用模块如图1-18(显示系统的设计者)

2)退出程序模块如图1-19

13

5 测试

5.1 测试目的

测试是为了发现程序中的错误而执行程序的过程,测试的目的就是在软件投入生产运

行之前,尽可能的发现软件中的错误。成功的测试是发现了至今为止尚未发现的错误的测试。

5.2 测试方案

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

(1)登录测试

测试结果如图1-6; (2)学生信息载入测试

测试结果如图1-7; (3)学生信息创建测试

测试结果如图1-8; (4)学生信息查询测试

测试结果如图1-9,1-10,1-11; (5)学生信息修改测试

测试结果如图1-12,1-13,1-14,1-15; (6)学生信息统计测试

测试结果如图1-16,1-17;

5.2 测试结果

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

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

经过快一个月的努力,我终于完成了这次学生成绩管理信息系统的设计与开发。在设计的过程中,我遇到了很多的问题,起初是程序的设计,自己经过一个学期的C++的学习,独立编写的C++程序的总行数不过两百多行,而这次一下子要编写一个一百多行的程序,实在是一个巨大的挑战!这次课程要实现的功能繁多,自己以前接触的都是一些简单的功能的实现,而这次要实现用链表来查询学生的信息,以及有关文件的使用,并且要把它们结合成一个统一的整体,其难度是可想而知的!自己所学的知识有限,技术尚未达到很高的水准,不得不虚心向老师及同学求教,以及多多地查询有关的资料,就这方面来说,这是此次课程带给我的最大的收获,它让我明白了自身的不足之处,让我懂得在学习的过程更加虚心!学习是无止境的,自己要以一种海纳百川的姿态来接受每一次学习的洗礼!

另外此次课程设计增加了自己动手的能力,将自己所学的理论知识与实践结合在一块,拓宽了自己的视野,提高了自己学习理论知识的兴趣,以及应用理论知识解决实际问题的能力!

本系统的缺点之处在于不能分别为管理者,教师和学生三方面提供必要的服务,以及不支持密码登录等服务,信息容易泄露,功能还比较单一,今后将从这方面加以改进,将在系统登录模块增设密码登录等服务,并且实现管理者,教师和学生三方面的服务。

15

参考文献

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

[2] 谭浩强.C程序设计旦角与上机指导(第三版).北京:清华大学出版社,2005. [3] 朱站立.数据结构. 西安:交通大学出版社,2004

附 录

附录1 源程序清单

附录1.1系统登录模块源程序

#include \#include \#include \#include \#include \#include \

#include \ #include \

#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 LoadData(); void SaveData(); void Add(); void Input();

void Show();

void FindName(); void FindNumber(); void FindClass();

void Modify(); void Del(); void Sort();

void FindStudentAverage(); void FindClassAverage(); void AboutMe();

void LoadData() {

char filename[20]; cout<<\请输入你要读取的文件名: \ cin>>filename; ifstream fin(filename,ios::in); if(!fin) cout<<\文件打不开 !\ else { struct STUDENT *p1,*p2; p1=p2=(struct STUDENT *)malloc(LEN); fin>>p1->number>>p1->name>>p1->sex >> p1->age >> p1->chineseRecord >> p1->englishRecord >> p1->mathematicsRecord >> p1->physicalRecord>>p1->chemistryRecord >> p1->biologicalRecord ; int n=0; while(1){ if(fin.eof()) break; n++; if(n==1) head=p1; else

p2->next=p1;

p2=p1;

p1=(struct STUDENT *)malloc(LEN); fin>>p1->number>>p1->name>>p1->sex >> p1->age >> p1->chineseRecord >> p1->englishRecord >> p1->mathematicsRecord >> p1->physicalRecord>>p1->chemistryRecord >> p1->biologicalRecord ; }

p2->next=NULL; cout<<\文件已读取成功!\ }

fin.close(); cout<<\显示如下。\ }

void SaveData() //保存函数 { char filename[20]; cout<<\请输入文件名: \ cin>>filename; ofstream fout(filename); if(!fout) cout<<\文件不能打开!\ else { struct STUDENT *p; p=head; fout << setw(0) <<\学号\姓名\性别\年龄\ << setw(8) << \语文\英语\ <<\数学\物理\化学\ <

fout << setw(0) << p->number << setw(8) << p->name << setw(8)<sex<age << setw(8) << p->chineseRecord << setw(8) << p->englishRecord << setw(8) << p->mathematicsRecord << setw(8) << p->physicalRecord <chemistryRecord <biologicalRecord<next; }while(p != NULL); } cout<<\保存成功!\ cout<<\将返回上一级。\ fout.close(); getchar(); }

int n=0; void Input() { struct STUDENT *p1,*p2; char flag='y'; p1=p2=(struct STUDENT *)malloc(LEN); cout << \请按照以下顺序,输入您要输入的学生信息:\ cout << setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\ cin >> p1->number >> p1->name >>p1->sex >> p1->age >> p1->chineseRecord >> p1->englishRecord >> p1->mathematicsRecord >> p1->physicalRecord>>p1->chemistryRecord >> p1->biologicalRecord ;

19

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)\ cin>>flag; } if(flag=='n'){ cout<<\请及时保存数据,现在返回上一级\ break; }

p1=(struct STUDENT *)malloc(LEN); cout << \请按照以下顺序,输入您要输入的学生信息:\ cout << setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\ 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(numnumber ){ cout << \请按照以下顺序,输入您要输入的学生信息:\

cout << setw(0) << \姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\ 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 && numnext->number ){ cout << \请按照以下顺序,输入您要输入的学生信息:\ cout << setw(0) << \姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\ 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<< \请按照以下顺序,输入您要输入的学生信息:\ cout << setw(0) << \姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\ 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; }

21

cout<<\要继续添加吗(y/n)\ cin>>flag; while(flag != 'y' && flag != 'n'){ cout<<\输入错误,请输入(y/n)\ cin>>flag; } if(flag=='n'){ cout<<\请及时保存数据,现在返回上一级\ break; } }while(flag=='y'); }

void Show(){ struct STUDENT *p;

cout<<\所有学生的成绩:\ p=head;

if(head!=NULL){ cout << setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\ do{

cout<< setw(0) << p->number << setw(8) << p->name << setw(8)<sex<age << setw(8) << p->chineseRecord << setw(8) << p->englishRecord << setw(8) << p->mathematicsRecord << setw(8) << p->physicalRecord <chemistryRecord <biologicalRecord<next; }while(p != NULL); cout<<\请及时保存数据,现在返回上一级\ } else cout<<\学生成绩为空,请确认。\ }

void Del(){ long num;

struct STUDENT *p1,*p2; char flag; flag='y'; do{ cout<<\请输入要删除学生的学号:\ cin>>num; p1=head; p2=head; while(p1!=NULL){ if(p1->number == num && p1==head){ head=p1->next ; delete p1; cout<<\已成功删除,请及时保存数据。\ break;

} if(p1->next->number ==num && p1->next->next==NULL){ delete p1->next ; cout<<\已成功删除,请及时保存数据。\ p1->next=NULL; break; } if(p1->next->number == num){ p2=p1->next ; p1->next=p2->next ; delete p2; cout<<\已成功删除,请及时保存数据。\ break; } p1=p1->next; }

cout<<\要继续删除吗(y/n)\ cin>>flag;

while(flag != 'y' && flag != 'n'){ cout<<\输入错误,请输入(y/n)\ cin>>flag; } if(flag=='n'){ cout<<\请及时保存数据,现在返回上一级\ 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;

23

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)\ cin>>flag; } if(flag=='n') break; p1=(struct STUDENT *)malloc(LEN); }while(flag=='y'); p2->next=NULL; struct STUDENT *w;

cout<<\所有被查找学生的成绩:\ w=headna;

if(headna!=NULL){ cout << setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\ do{

cout<< setw(0) << w->number << setw(8) << w->name << setw(8)<sex<age << setw(8) << w->chineseRecord << setw(8) << w->englishRecord << setw(8) << w->mathematicsRecord << setw(8) <physicalRecord <chemistryRecord << setw(8) <biologicalRecord<next; }while(w != NULL); char filename[20]; cout<<\请输入保存的文件名: \ cin>>filename; ofstream fout(filename,ios::app); if(!fout) cout<<\文件不能打开!\

else { struct STUDENT *p; p=headna; fout << setw(0) <<\学号\姓名\性别\年龄\ << setw(8) << \语文\英语\ <<\数学\物理\化学\ <

fout << setw(0) << p->number << setw(8) << p->name << setw(8)<sex<age << setw(8) << p->chineseRecord << setw(8) << p->englishRecord << setw(8) << p->mathematicsRecord << setw(8) << p->physicalRecord <chemistryRecord <biologicalRecord<next; }while(p != NULL); } cout<<\保存成功!\ cout<<\现在返回上一级。\ fout.close(); } else cout<<\没有被查找的学生,不会保存,请确认。\ }

void FindNumber() { struct STUDENT * headnu=NULL; long num; struct STUDENT *p; struct STUDENT *p1,*p2; char flag='y'; p1=p2=(struct STUDENT *)malloc(LEN); do{

p=head; cout<<\输入你要查找的学号: \ cin>>num; while(p!=NULL){ if(p->number==num){ if(headnu==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; headnu=p1; break; } else{ p2->next=p1; p2=p1; p1->number=p->number;strcpy(p1->name,p->name);strcpy(p1->sex,p->sex);

25

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)\ cin>>flag; } if(flag=='n') break; p1=(struct STUDENT *)malloc(LEN); }while(flag=='y'); p2->next=NULL; struct STUDENT *w;

cout<<\所有被查找学生的成绩:\ w=headnu;

if(headnu!=NULL){ cout << setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\ do{

cout<< setw(0) << w->number << setw(8) << w->name << setw(8)<sex<age << setw(8) << w->chineseRecord << setw(8) << w->englishRecord << setw(8) << w->mathematicsRecord << setw(8) <physicalRecord <chemistryRecord << setw(8) <biologicalRecord<next; }while(w != NULL); char filename[20]; cout<<\请输入保存的文件名: \ cin>>filename; ofstream fout(filename,ios::app); if(!fout) cout<<\文件不能打开!\ else { struct STUDENT *p; p=headnu; fout << setw(0) <<\学号\姓名\性别\年龄\ << setw(8) << \语文\英语\ <<\数学\物理\化学\

<

fout << setw(0) << p->number << setw(8) << p->name << setw(8)<sex<age << setw(8) << p->chineseRecord << setw(8) << p->englishRecord << setw(8) << p->mathematicsRecord << setw(8) << p->physicalRecord <chemistryRecord <biologicalRecord<next; }while(p != NULL); } cout<<\保存成功!\ cout<<\现在返回上一级。\ fout.close(); } else cout<<\没有被查找的学生,不会保存,请确认。\ }

void FindClass() { struct STUDENT *p; char flag='y'; char it; do{ p=head; cout<<\请输入要查找科目所对应的序号:\ cout<<\语文\英语\数学\物理\化学\生物\ cin>>it; while(it !='1' && it!='2' && it!='3' && it!='4'&& it!='5'&&it!='6'){ cout<<\输入错误,请重新输入\ cin>>it; } switch(it) { case '1': cout<<\ 语文单科成绩表 \ cout<< setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \语文\ while(p!=NULL){

cout<< setw(0) << p->number << setw(8) << p->name << setw(8)<sex<age << setw(8) << p->chineseRecord <next; } break; case '2': cout<<\ 英语单科成绩表 \ cout<< setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \英语\

27

while(p!=NULL){

cout<< setw(0) << p->number << setw(8) << p->name setw(8)<sex<age << setw(8) << p->englishRecord <next; } break; case '3': cout<<\ 数学单科成绩表 \ cout<< setw(0) << \学号\姓名\性别\年龄\<<

<< setw(8) << \数学\ while(p!=NULL){

cout<< setw(0) << p->number << setw(8) << p->name setw(8)<sex<age << setw(8) << p->mathematicsRecord <next; } break; case '4': cout<<\ 物理单科成绩表 \ cout<< setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \物理\ while(p!=NULL){

cout<< setw(0) << p->number << setw(8) << p->name setw(8)<sex<age << setw(8) << p->physicalRecord <next; } break; case '5': cout<<\ 化学单科成绩表 \ cout<< setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \化学\ while(p!=NULL){

cout<< setw(0) << p->number << setw(8) << p->name setw(8)<sex<age << setw(8) << p->chemistryRecord <next; } break; case '6': cout<<\ 生物单科成绩表 \ cout<< setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \生物\ while(p!=NULL){

cout<< setw(0) << p->number << setw(8) << p->name setw(8)<sex<age << setw(8) << p->biologicalRecord <next; } break; } char filename[20];

<<

<<

<<

<<

cout<<\请输入保存的文件名: \ cin>>filename; ofstream fout(filename,ios::app); if(!fout) cout<<\文件不能打开!\ else { struct STUDENT *q; int w; q=head; switch(it){ case '1': w=q->chineseRecord; case '2': w=q->englishRecord; case '3': w=q->mathematicsRecord; case '4': w=q->physicalRecord; case '5': w=q->chemistryRecord; case '6': w=q->biologicalRecord; } fout << setw(0) << \学号\姓名\性别\年龄\ << setw(8) <<\成绩\ do{ fout << setw(0) << q->number << setw(8) << q->name << setw(8)<sex<age << setw(8) <next; }while(q != NULL); } cout<<\保存成功!\ cout<<\现在返回上一级。\ fout.close(); cout<<\要继续查找吗(y/n)\ cin>>flag; while(flag != 'y' && flag != 'n'){ cout<<\输入错误,请输入(y/n)\ cin>>flag; } if(flag=='n') break; }while(flag=='y'); }

void Modify() {

29

long num;

struct STUDENT *p1; char flag='y'; do{ cout<<\请输入要修改成绩的学生的学号:\ cin>>num; p1=head;

while(p1!=NULL ){ if(p1->number==num){ cout<<\请按以下的格式修改:\ cout<< setw(0) << \姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\ cin >> p1->name >>p1->sex >> p1->age>> p1->chineseRecord >> p1->englishRecord >> p1->mathematicsRecord >> p1->physicalRecord>>p1->chemistryRecord >> p1->biologicalRecord ; break; } else p1=p1->next; } if(p1==NULL) cout<<\没有该学号的同学,请查证:\ cout<<\要继续查找吗(y/n)\ cin>>flag; while(flag != 'y' && flag != 'n'){ cout<<\输入错误,请输入(y/n)\ cin>>flag; } if(flag=='n') break; }while(flag=='y'); cout<<\请及时保存数据,现在返回上一级\ }

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->mathematicsRecord; 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; p2->englishRecord=p1->englishRecord;p2->mathematicsRecord=p1->mathematicsRecord; 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<<\排序所有学生的成绩:\ q=headsa;

if(headsa!=NULL){ cout << setw(0) << \学号\姓名\性别\年龄\ << setw(8) << \语文\英语\数学\ << setw(8) << \物理\化学\生物\平均分\ do{

31

cout<< setw(0) << q->number << setw(8) << q->name << setw(8)<sex<age << setw(8) << q->chineseRecord << setw(8) << q->englishRecord << setw(8) << q->mathematicsRecord << setw(8) << q->physicalRecord <chemistryRecord <biologicalRecord<average<next; }while(q != NULL); }

else cout<<\学生成绩为空,请确认。\ char filename[20]; cout<<\请输入保存的文件名: \ cin>>filename; ofstream fout(filename,ios::app); if(!fout) cout<<\文件不能打开!\ else { struct STUDENT *p; p=headsa; fout << setw(0) <<\学号\姓名\性别\年龄\ << setw(8) << \语文\英语\ <<\数学\物理\化学\ <

fout << setw(0) << p->number << setw(8) << p->name << setw(8)<sex<age << setw(8) << p->chineseRecord << setw(8) << p->englishRecord << setw(8) << p->mathematicsRecord << setw(8) << p->physicalRecord <chemistryRecord <biologicalRecord<next; }while(p != NULL); } cout<<\保存成功!\ fout.close(); cout<<\现在返回上一级。\ }

void FindStudentAverage() { long num; struct STUDENT * p; char flag='y'; do{ cout<<\输入你要查找的学号: \ cin>>num; p=head; while(p!=NULL){ if(p->number==num){ cout<

p->average =(p->chineseRecord +p->englishRecord +p->mathematicsRecord +p->physicalRecord +p->chemistryRecord +p->biologicalRecord )/6; cout<average<next; } if(p==NULL) cout<<\没有该学号同学的信息,请确认。\ cout<<\要继续查找吗(y/n)\ cin>>flag; while(flag != 'y' && flag != 'n'){ cout<<\输入错误,请输入(y/n)\ cin>>flag; } if(flag=='n') break; }while(flag=='y'); cout<<\现在返回上一级。\}

void FindClassAverage() { struct STUDENT * p; char flag='y'; char it; do{ double sum=0; double average=0; p=head; cout<<\请输入要查找科目所对应的序号:\ cout<<\语文\英语\数学\物理\化学\生物\ cin>>it; cout<chineseRecord; n++; p=p->next; } average = sum/n; cout << \语文平均成绩:\ break; case '2': while (p!=NULL){ sum=sum+p->englishRecord;

33

n++; p=p->next; } average = sum/n; cout << \英语平均成绩:\ break; case '3': while (p!=NULL){ sum=sum+p->mathematicsRecord; n++; p=p->next; } average = sum/n; cout << \数学平均成绩:\ break; case '4': while (p!=NULL){ sum=sum+p->physicalRecord; n++; p=p->next; } average = sum/n; cout << \物理平均成绩:\ break; case '5': while (p!=NULL){ sum=sum+p->chemistryRecord; n++; p=p->next; } average = sum/n; cout << \化学平均成绩:\ break; case '6': while (p!=NULL){ sum=sum+p->biologicalRecord; n++; p=p->next; } average = sum/n; cout << \生物平均成绩:\ default: cout<<\选择错误,请选择1 - 6 号\ } cout<<\要继续查找吗(y/n)\ cin>>flag; while(flag != 'y' && flag != 'n'){ cout<<\输入错误,请输入(y/n)\ cin>>flag; } if(flag=='n') break;

}while(flag=='y'); cout<<\现在返回上一级。\}

void AboutMe() { cout<<\ cout<<\ 感谢使用本程序! --\ cout<<\ 现在返回上一级。 --\ cout<<\ }

void main(){ int q=1; char k; while (q) { system(\ cout << \ cout << \ 学生成绩管理信息管理系统 \\n\ cout << \ cout << \ 1 学生信息载入 \\n\ cout << \ 2 学生信息创建 \\n\ cout << \ 3 学生信息查询 \\n\ cout << \ 4 学生信息修改 \\n\ cout << \ 5 学生信息统计 \\n\ cout << \ 6 学生信息显示 \\n\ cout << \ 7 保存学生信息 \\n\ cout << \ 8 感谢使用 \\n\ cout << \ 0 退出程序 \\n\ cout << \ cout << \ cout << \请输入选择的功能序号: \\n\ cin>> k; while(k !='1' && k!='2' && k!='3' && k!='4'&& k!='5'&& k!='6'&& k!='7' && k!='8' && k!='0'){ cout<<\输入错误,请重新输入\ cin>>k; }

char x; if(k=='0'){ cout<<\退出前请确定没有忘记保存数据。\ cout<<\确定退出 按y ,取消退出按n\ cin>>x; while(x !='y' && x !='n' ){ cout<<\输入错误,请重新输入\ cin>>x; } } if(x=='n') continue;

35

switch(k) { case '1': system(\ LoadData(); Show(); getchar(); break; case '2': system(\ Input(); getchar(); break; case '3': while(q){ system(\ cout << \ cout << \ 1 按姓名查找 \\n\ cout << \ 2 按学号查找 \\n\ cout << \ 3 按课程查找 \\n\ cout << \ 0 返回上一级 \\n\ cout << \ cout << \请输入选择的功能序号: \\n\ cin>>k; while(k!='1' && k!='2' && k!='3'&& k!='0'){ cout<<\输入错误,请重新输入\ cin>>k; } switch(k){ case '1': FindName(); getchar(); break; case '2':

FindNumber(); getchar(); break; case '3': FindClass(); getchar(); break; case '0': q=0; break; } } q=1; break; case '4': while(q){ system(\ cout << \

cout << \ 1 添加学生信息 \\n\ cout << \ 2 修改学生信息 \\n\ cout << \ 3 删除学生信息 \\n\ cout << \ 4 显示学生信息 \\n\ cout << \ 0 返回上一级 \\n\ cout << \ cout << \请输入选择的功能序号: \\n\ cin>>k; while(k!='1' && k!='2' && k!='3' && k!='4'&&k!='0'){ cout<<\输入错误,请重新输入\ cin>>k; } switch(k){ case '1': Add(); getchar(); break; case '2': Modify(); getchar(); break; case '3': Del(); getchar(); break; case '4': Show(); getchar(); break; case '0': q=0; break; } } q=1; break; case '5': while(q){ system(\ cout << \ cout << \ 1 查找学生平均成绩 \\n\ cout << \ 2 查找单科平均成绩 \\n\ cout << \ 3 排序学生信息 \\n\ cout << \ 0 返回上一级 \\n\ cout << \ cout << \请输入选择的功能序号: \\n\ cin>>k; while(k!='1' && k!='2' && k!='3' && k!='0'){ cout<<\输入错误,请重新输入\ cin>>k; } switch(k){

37

case '1': FindStudentAverage(); getchar(); break; case '2': FindClassAverage(); getchar(); break; case '3': Sort(); getchar(); break; case '0': q=0; break; } } q=1; break; case '6': system(\ Show(); getchar(); break; case '7': system(\ SaveData(); getchar(); break; case '8': system(\ AboutMe(); getchar(); break; case '0': q=0; break; } } }

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

Top