您好,欢迎来到易妖游戏网。
搜索
您的当前位置:首页学生管理系统课设报告

学生管理系统课设报告

来源:易妖游戏网


目录:

一、目的-------------------------------3

二、需求分析---------------------------3

三、详细设计---------------------------4

四、调试过程(不足及对策)------------14

五、使用说明--------------------------15

六、心得------------------------------15

1

一、目的

1.通过本项课程设计,可以培养思考、 综合运用所学有关相应知识的能力,能更好的巩固《C++语言程序设计》课程学习的内容,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了C++语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!

2.通过C++语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础

二、需求分析

★主要功能

① 每一条记录包括一个学生的学号、姓名、3门课成绩、平均成绩。 ② 输入功能:能按学期、班级完成对学生成绩的录入、修改。 ③ 显示功能:完成全部学生记录的显示,能按班级输入学生的成绩单。 ④ 查找功能:完成按姓名查找学生记录,能查询学生成绩、不及格科

目及学生名单及显示。

⑤ 排序功能:能按班级统计学生的成绩,求学生的总分及平均分,并

能根据学生的平均成绩进行排序。

★要求

界面友好、美观,易于操作

★实现

该学生成绩管理系统,运用了I/O流的输入输出、链表、友元类等基本功能,利用C++的封装性把多个类和函数放在一起,使主程序看起来很明了。在程序的界面里面可以选择添加、删除、查询、更新和输出学生信息,并有学生成绩排序、分析以及把链表保存到文件、从文件输出链表的功能

§输入信息模块:

①录入:由STUDENT类中的定义Input()函数实现学生基本信息及各科成绩的录入,由Output(ofstream &f)函数通过输出流对象将学生所有信息的总标题按一定规范的格式写到文件中。Add()实现添加新的学生信息,创建一个新学生结点链接学生结点,然后再执行Iuput()函数,输入学生信息。

2

②修改:CLASS类中Modify()先执行Find()查找在学生链表中与用户输入的信息相匹配的记录,找到后就调用Input()和Output()函数修改信息。

§显示模块:CLASS类中定义Print(),创建STUDENT指针对象,通过for循环查找用户输入的学期班级信息,找到学生记录后调用STUDENT的Output()函数输出同一个班所有学生的信息

§查找模块:创建两个STUDENT指针对象通过for循环查找满足不及格成绩的学生,找到后调用Output()输出显示不及格科目及名单。

§排序模块:在ValueS2ToS1()中创建两个学生引用对象,把其中一个的所有成绩赋给另一个对象。接着在AverSort()中定义两个STUDENT指针对象,一个指向头结点,一个指向下一个结点,从学生链表的头结点开始依次把前后两个学生的平均分进行比较,若前者小于后者,就创建一个学生类的对象t,再执行三次ValueS2ToS1 (STUDENT &s1,STUDENT &s2),交换前后两者的信息,最终分数高的排在前面,并对结果进行打印输出。

三、详细设计

本系统涉及到两个类: CLASS(班级) 与STUDENT(学生)。这两个类存在“一对多”关联关系,导航方向为STUDENT指向CLASS。并且互为对方的友元类。类关系图如下:

分析系统中各个对象之间的关系及其属性和行为 以对象为中心组织数据与操作

◆ 识别系统中的对象 班级、学生

◆ 对象之间的关系 班级与学生:关联关系 对象的属性 ◆ 学生的属性 ※ 一个学生

※ 多项关于此学生的信息

3

◆ 班级的属性 ※ 多个学生

※ 多项关于学生的操作 对象的行为 ◆ 学生的行为 ※ 学生信息的输入;

※ 学生信息的输出;

※ 学生信息通过输出流对象写入文件中; ※ 学生信息通过输入流对象从文件中读出; ◆ 班级的行为

※ Void Add()按班插入一个学生某学期的成绩; ※ Void Delete()按学期、按班级修改学生的信息; ※ Void Modify()按班修改一个学生的某学期的成绩; ※ Void Print()输出某班某学期所有学生的成绩; ※ Void Query()按学期按班级按姓名查询某学生的成绩; ※ Void Query2()按学期按班级按姓名查询某学生的成绩; ※ Void Average()按平均分排序;

※ Void Printtwo()打印某班级的学生的名单; ※ Void Print1()打印所有学生的信息;

※ Void Fail()按班级查找不及格的学生的信息; ※ Void Save()数据存盘; ※ Void Load()数据转入

类中的各个成员函数的功能和算法 STUDENT类中

◆ void Input(),录入学生的基本信息、各科成绩,然后再统计总分和平均分。

◆ void Input(ifstream &f),通过输入流对象把用户输入的信息从

文件中读出。 ◆ void OutputT(),按一定规范的格式输出学生基本信息的总标题。 ◆ void OutputTtwo(),按一定规范的格式输出学生基本信息的标题。 ◆ void Output(),按一定规范的格式输出用户输入的学生的所有的信息。 ◆ void Outputtwo(),按一定规范的格式输出用户输入的学生的基本

信息。

◆ void Output(ofstream &f),通过输出流对象按一定规范的格式将

4

用户输入的学生的基本信息写到文件中。

◆ void Outouttwo(ofstream &f), 通过输出流对象将学生所有信息的总标题按一定规范的格式写到文件中。

◆ void OutputT(ofstream &f),通过输出流对象将学生所有信息的

总标题按一定规范的格式写到文件中。

◆ void OutputTtwo(ofstream &f),通过输出流对象将学生基本信息

的总标题按一定规范的格式写到文件中。

CLASS类中 ◆ void Add(),添加新的学生信息。创建一个新学生结点,然后查找

学生链表表尾结点,链接学生结点,然后在执行Iuput()函数,输入学生信息。 ◆ int

Find(char*nterm,char*NCLASS,char*nname,STUDENT**p1,STUDEN

T**p2),用在多个成员函数中,查找在学生链表中与用户输入的信息相匹配的记录。定义两个学生类中的指针变量一个指向头结点,另一个指向头结点的下一个结点,依次去找链表中符合要求的记录,若找到了则返回1,没找到就把指针往下移,若整个学生链表中都没有则返回0;(其他几个Find函数功能也类似)。 ◆ void Delete(),其功能是删除某学生的信息。提示用户要删除的

学生的信息,再执行int Find(char *id,STUDENT**p1,STUDENT**p2),若找到就删除结点,并提示用户:“正确删除!”,并把删除结点的前后两个结点连接起来;没找到就输出:“抱歉,指定的学生没有找到!”

◆ void Modify(),修改某学生的信息。提示用户输入要修改的学生

的信息,再执行int Find(char*id,STUDENT**p1,STUDENT**p2)或Findtwo(char*nterm,char*NCLASS,char*nname,STUDENT**p1,STUDENT**p2),若找到就先执行OutputT()和Outout()输出学生的原信息,再执行Input()函数,提示用户输入学生的新信息;再输出“好的,修改完成了!”;若没找到则输出“抱歉,指定的学生没有找到!”

◆ void Query(),查找某个学生。提示用户输入要查找的学生的信息,

再执行int Find(char*id,STUDENT**p1,STUDENT**p2)或int

Findtwo(char*nterm,char*NCLASS,char*nname,STUDENT**p1,STUDENT**p2),若找到就先执行OutputT()和Outout()输出学生的信息,若没找到就输出“抱歉,指定的学生没有找到!”

5

◆ void Print(),其功能是输出同一个班所有学生的信息。提示用户

输入要查找的信息:term(学期)、class(班级)、然后再做循

for(p1=SL->next;Findtwo(nterm,NCLASS,&p1,&p2);p1=p1->next);若找到则执行OutputT()和Outout()一次输出同一个班所有学生的所有信息。

◆ void Fail(),按班查找不及格的学生名单。提示用户输入要查找

的信息:term、class,做循环for(p1=SL->next;Findtwo(nterm,NCLASS,&p1,&p2);p1=p1->next),设置条件语句

if(p1->english<60||p1->math<60||p1->c<60||p1->wl<60),把同一个班、满足任意一科不及格的学生的信息依次打印出来。

◆ void Printtwo(),打印同班所有人的名单,提示用户输入要输入

查找的信息时:class(班级),然后在做循环

for(p1=SL->next;Findthree(NCLASS,&p1,&p2);p1=p1->next)找到在一个班的所有的学生,执行OutputTtwo()和Outouttwo(),一次打印他们的名单

◆ void ValueS2ToS1(STUDENT &s1,STUDENT &s2),它用在 AverSort()

中,功能是把s2中的所有数据成员( num、name、sex、cname、

English、math、c、w)的值赋给sl。

◆ void AverSort(),以平均分排序,创建两个学生类的指针变量,

一个指向头结点,一个指向下一个结点,从学生链表的头结点开始

依次把前后两个学生的平均分进行比较,若前者小于后者,就创建一个学生类的对象t,再执行三次ValueS2ToS1 (STUDENT &s1,STUDENT &s2),交换前后两者的信息,最终分数高的排在前面,并对结果进行打印输出。

◆ void Print1(),从头结点开始依次打印出所有学生的所有信息。 ◆ void Save(),将学生数据存盘。创建一个输出流对象,同时创建

一个student.txt文件,遍历学生链表执行Outout(f),即将此时学生链表中的所有信息写入到student.txt文件中。

◆ void Load(),装入学生数据,执行clear(),清空学生链表。创

建一个输入流对象,同时打开student.txt,遍历学生链表执行Input(f),将文件中的所有信息读到学生链表中。

6

系统总框图

主程序流程图如下:

7

增加信息模块:

添加新的学生信息。创建一个新学生结点,然后查找学生链表表尾结点,然后查找学生链表表尾结点,链接学生结点,然后在执行Iuput()函数,输入学生信息。

8

显示信息模块:

提示用户输入要查找的信息:term、class、然后再做循环for(p1=SL->next;Findtwo(nterm,NCLASS,&p1,&p2);p1=p1->next);若找到则执行OutputT()和Outout()一次输出同一个班所有学生的所有信息。

9

查找模块:

提示用户输入要查找的学生的信息,用for循环通过Find()函数查找在学生链表中与用户输入的信息相匹配的记录。定义两个学生类中的指针变量一个指向头结点,另一个指向头结点的下一个结点,依次去找链表中符合要求的记录N-S流程图如下:

10

排序模块:

创建两个学生类的指针变量,一个指向头结点,一个指向下一个结点,从学生链表的头结点开始依次把前后两个学生的平均分进行比较,若前者小于后者,就创建一个学生类的对象t,再执行三次ValueS2ToS1 (STUDENT &s1,STUDENT &s2),交换前后两者的信息,最终分数高的排在前面,并对结果进行打印输出。AverSort()的N-S流程图如下:

11

数据导入导出模块:

Save()实现将学生数据存盘。创建一个输出流对象,同时创建一个txt文件,遍历学生链表执行Outout(f),即将此时学生链表中的所有信息写入到student.txt文件中。Load()实现装入学生数据,执行clear(),清空学生链表。创建一个输入流对象,同时打开txt,遍历学生链表执将文件中的所有信息读到学生链表中。两个函数的N-S流程图如下:

12

四、调试过程(不足与对策)

1、 首先由于题目中没要求实现存盘等功能,程序编完后,我在运行时

总是需要反复的输入数据对程序的各个功能进行调试,我觉得这些随机输入的数据纯粹是为了调通程序随机输入的,并没有任何实际意义,最重要的是,我们这次的题目是学生成绩管理系统,这是给用户用的,如果不能存储信息就更没有现实意义了,于是我增加了Save()和Load()两个函数。Save()能按用户要求把用户需要存储的数据写入一个文件保存起来,Load()能把用户所存储的数据读出来,进行学生成绩管理系统的多项操作,这使系统使用起来更加方便。

2、 在程序中有一个函数要求按学期按班级输出所有不及格学生的信

息,我编的程序是用在循环在找到与条件相匹配的记录后就输出,

否则就break,所以运行时只会出现标题,因为第一条记录不符合的话就直接跳出来不再循环了。后来把break改为continue,程序正常运行。

3、 开始在查找班级相同的学生时,用的是

Findtwo(nterm,NCLASS,&p1,&p2);p1->Output()只能输出一个学

生的信息,for(p1=SL->next;) Findtwo(nterm,NCLASS,&p1,&p2); p1=p1->next;p1->>Output();使用该循环语句后,程序正常运行。

13

五、使用说明:

程序调试运行后进入主界面如下:

根据提示输入标号选择需要的功能

五、心得:

1、

在学生成绩管理系统的编写过程中也体会到了做事情一顶要细心、认真。更加知道了要掌握好基础知识。还有体会到了成功的感觉!在学生成绩管理系统的设计过程中更加体会到了团队合作的重要性,“一个诸葛亮比不上三个臭皮匠。”知道了只有团队合作才会更好的完成设计!也体会到以后在工作中团队合作的必要性和重要性!

2、

通过本项课程设计也培养了我思考、 综合运用所学有关相应知识的能力,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!

3、

在C语言程序设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有

14

些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础!

参考文献:

C++Primer中文版(第4版) C++编程金典(第3版) Effective C++ 第2版 侯捷 高质量C_C编程指南

15

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- vipyiyao.com 版权所有 湘ICP备2023022495号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务