成绩管理系统数据结构课设论文doc.docx
- 文档编号:30753633
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:22
- 大小:294.16KB
成绩管理系统数据结构课设论文doc.docx
《成绩管理系统数据结构课设论文doc.docx》由会员分享,可在线阅读,更多相关《成绩管理系统数据结构课设论文doc.docx(22页珍藏版)》请在冰豆网上搜索。
成绩管理系统数据结构课设论文doc
摘要
随着科学的发展和社会的进步,计算机技术的飞速发展,尤其是网络技术的超速发展,带动了信息的广泛交流甚至导致了信息爆炸,许多过去由人工处理的繁杂事务开始交付计算机来完成。
明显地加快了经济信息化和社会信息化的进程。
因此,计算机教育在各国备受重视,计算机知识与能力已成为21世纪人才素质的基本要素之一。
使用计算机进行信息管理,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
目前学校资料繁重、工作复杂,学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,使教职员工减轻工作压力,比较系统方便的对学生成绩进行管理,减少劳动力的使用,加快查询速度、加强管理,加快国家各部门信息化的步伐,使各项管理更加规范化。
本文设计的学生成绩管理系统,是针对于高中的学生成绩管理,学生成绩为语文、数学、英语、综合(文综或者理综)四科。
系统主要实现以下功能:
1.学生成绩的录入2.学生成绩的删除3.学生成绩的修改
4.查看所有学生成绩5.学生成绩的查询6.学生成绩的排名
7.各科成绩的统计
等七个模块。
此平台的搭建能够为较好的提高高校教学单位日常的行政办公效率,具有一定的实用性。
关键词:
高中学生成绩管理系统;文件;指针;链表;排序
目录
引言…………………………………………………………………………3
1系统概述…………………………………………………………………3
1.1系统说明…………………………………………………………………3
1.2成绩管理系统概述…………………………………………………………3
2需求分析…………………………………………………………………3
2.1系统要求分析………………………………………………………………3
2.2功能需求分析………………………………………………………………5
2.3界面需求……………………………………………………………………5
2.4可行性分析…………………………………………………………………5
2.5开发环境……………………………………………………………………6
3详细设计…………………………………………………………………6
3.1系统结构……………………………………………………………………6
3.2数据结构设计………………………………………………………………7
3.3各个模块功能………………………………………………………………8
3.4功能模块的设计……………………………………………………………9
3所遇到的问题和分析解决………………………………………………12
4系统特色和关键技术……………………………………………………13
6测试结果…………………………………………………………………13
7总结和感受………………………………………………………………15
参考文献……………………………………………………………………16
引言
背景:
21世纪,科学技术突飞猛进,特别是信息技术和网络技术的迅速发展,各个学校的规模也随之不断增大,有关学生成绩管理工作所涉及的数据量越来越大,如若进行的仍是手工的学生成绩管理,学校就不得不靠增加人力、物力来进行学生成绩管理。
即使如此,手工管理仍具有效率低、管理复杂和易出错等诸多问题。
所以在学校这样一个具有超大数据量的机构中,通过应用信息技术和网络技术对学生成绩信息进行系统化的管理是必须的。
将计算机这一信息处理器应用于学生的个人信息管理已是势必所然,而且这也将为学生信息管理带来前所未有的改变。
采用计算机对学生的信息管理是信息科学化和现代的重要标志,它也给各大高校带来了明显的社会效益。
主要体现在:
极大地提高了管理工作人员的工作效率,大大地减少了以往的资料室所存在的各种弊端,同时也加强和规范学习对于学生信息的管理。
目的:
本系统运用C++语言进行开发,C++语言能够简单的进行编译一些程序,来实现对问题的解决。
它能够呈现出清晰的界面,使人们能够很好的理解,并能在一些方面给人们更好的服务,所以,它能够被大多数用户所接受。
经过一个学期对《数据结构与算法》的学习,我们都学到了不少东西,可能学得还不够透彻,但无论如何这都为我们以后的学习打下一定坚实的基础。
在通过运用类与对象和调用各种数据结构算法与C++语言相结合来完成下面的学生成绩管理系统,一方面是为了检查我们一个学期以来的学习成果,另一方面是为了更进一步对数据结构与算法的掌握和运用,同时也让我们清楚的知道自己的掌握水平和不足之处。
一、系统概述
1.1系统说明
1.1.1管理信息系统概述
管理信息系统(ManagementInformationSystem,简称MIS)是一个由管理人员和计算机组成的用以进行信息的收集、传输、加工、存储、维护和使用的系统。
它是一门综合了管理科学,系统理论,计算机科学的系统性边缘科学。
管理信息系统的物理组成:
(1)计算机硬件系统:
包括主机、外部存储器、输入输出设备等。
(2)计算机软件系统:
包括系统软件和应用软件两大部分。
(3)通信系统:
包括线路等通信设施和与计算机网络、数据通信有关的软件等。
(4)工作人员:
包括系统分析员、程序设计员、维护人员、管理员、操作人员等。
1.1.2管理信息系统的发展
管理信息系统通过对企业当前运行的数据进行处理来获得有关信息,以控制企业的行为;利用过去和现在的数据及相应的模型,对未来的发展进行预测;能从全局目标出发,对企业的管理决策活动予以辅助。
从工业发达国家来看,管理信息系统的发展经历了以下几个阶段。
第一阶段:
(1953年至1965年)单项数据处理阶段,也称电子数据处理(EDP)阶段。
这是电子计算机在管理领域应用的起步阶段。
这一阶段,由于当时计算机硬、软件的限制,数据处理的性质只是使用计算机代替人的手工劳动,进行简单的单项数据处理工作,如计算工资、数据统计、报表登记、编制计划等。
这个阶段的处理方式主要是集中式的批处理。
第二阶段:
(1965年至1970年)综合数据处理阶段,也称事务处理系统(TPS)阶段。
这个阶段计算机硬、软件有了很大的发展,出现了多用户的分时系统,计算机开始应用于对某一个管理子系统的控制,并具有一定的反馈功能。
如库存管理系统、生产调度系统、物资管理系统等。
这个阶段的处理方式已发展为面向终端的联机实时处理。
第三阶段:
(1970年至今)管理信息系统(MIS)阶段。
这个阶段是在企业中全面的使用计算机把各种管理子系统的功能集中起来,构成了计算机化的全方位的信息系统,即现代管理信息系统。
这个阶段的处理方式是在数据库和网络基础上组成分布式处理系统。
它的特点是使用数据库和分时处理的计算机网络,并充分利用运筹学等数学方法,实现了硬件、软件和数据资源的共享。
1.2成绩管理系统概述
学生成绩管理系统在学校中占有重要的地位,它关系这学校内部各种管理,包括工作流程、成绩、排名等信息的管理。
此学生成绩管理系统实现了学生成绩的基本管理操作。
具体内容如下:
1.信息的录入。
此成绩管理系统使用链表存储信息,每个结点是一个封装好的对象,包含各科成绩和总分,以及指向下一个结点的指针,这样对信息的完善,扩展和处理非常方便。
各科成绩录入时,自动计算总成绩。
2.信息的查询。
信息查询可按两种方式。
按学号查询,按姓名查询。
填写完信息之后,对其进行输出。
3.信息的删除。
删除的是整条记录。
先显示所有的记录,删除记录后回到主界面,重新查看所有信息就会发现已经删除了。
4.信息的修改。
按学号查询出要修改的学生,并重新输入该记录,对其修改。
5.成绩的排序。
分别按照各科成绩以及总分排序,并且采用不同的排序算法来完成排序功能,学号按照升序排序,成绩按照降序排序。
6.成绩的统计。
统计是指,在文件中,统计出各科的不及格人数和优秀人数。
以上就是对本系统的整个流程和功能的大概描述,界面简洁、清楚、功能齐全,使用方便,让使用的人一看就知道如何操作。
系统采用txt文件存储学生数据,每次读入数据到链表中,所有操作均在链表中操作,占用内存小,速度快,运行稳定,容错性好,操作简洁明了,能大大提高成绩管理的工作效率,充分发挥计算机的优势,对学生成绩管理工作有很大的作用。
二、需求分析
2.1系统要求分析
作为一个中小型的校园成绩管理系统,其要求主要为以下几点:
(1)成绩管理能实现对学生记录的输入输出,添加,修改删除,查找,统计与排序功能。
(2)系统管理员可以通过系统对操作人员和记录的数据进行添加、删除和修改等操作,并且可以查看学生的信息单。
(3)数据统计及时、准确,用户界面友好。
2.2功能需求分析
(1)使用中文菜单,界面设计和用户输入输出要人性化些;
(2)将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。
(3)具有数据输入功能,输入的数据能最终保存在文件中;
(4)具有数据删除功能,能最终从文件中删除;
(5)具有多种查询(如按学号查询、按姓名查询等)及输出功能;
(6)学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩);
(7)排序功能,可以按照各科成绩排序,总成绩排序;
(8)统计功能,统计各科成绩的及格人数和优秀人数等)。
2.3界面需求
系统界面要具有广泛的实用性,便于移植。
界面友好,操作简便。
根据软件的使用环境、用户的要求,系统界面应该简单、友好、易于使用、方便查看、简洁明快。
而且系统是在Windows环境下的应用软件,软件产品的界面应该与操作系统的界面相切合,产品的主界面因该功能齐全,分类明确,让用户一眼看去就能明白大致的功能。
在人们的心理学角度来说,一样东西给人的印象是非常重要的。
本人想大家都希望看都本人们使用的东西都是令人神往的吧,还有友好的界面可以给人一种优越感和先进感,因为事情总是不断的完善的,一定是一代比一代好。
2.4可行性分析
可行性分析是在用户的要求和系统调研的基础上进行的,对新系统的开发从社会、技术、经济、管理等方面进行分析,并得出新系统的开发工作可行、不可行、需要修改、追加投资、暂缓开发、分步实施等方案和结论,最后完成可行性分析。
可行性分析一般可定义为:
可行性分析是在建设的前期对工程项目的一种考察和鉴定,对拟议中的项目进行全面与综合的技术、经济能力的调查,判断它是否可行。
(1)可行性分析阶段的主要工作包括以下几个方面:
①新系统目标可行性分析:
分析新系统的目标是否符合企业的现状和发展的需要。
本系统针对学校内部发展需要和企业发展现状开发的,保证了系统的可行性。
②社会可行性分析:
本管理系统的开发符合国家法律、政策,能够与社会大系统实现良好的对接。
③技术可行性分析:
技术可行性分析是根据新系统的目标来衡量是否具备所需要的技术,包括系统开发人员数量和水平,硬件方面,软件方面及其它应用技术。
④经济可行性分析
新的学生成绩管理系统针对学生信息进行处理,如果学校将其运用于学生的日常管理,必将带来很大的方便。
管理方便了,企业的效益也会大大的提高。
所以说一个好的学生成绩管理系统不会使学校亏损的。
⑤管理可行性分析:
管理可行性分析主要是分析企业现行的管理体制和企业领导是否具有现代化的管理意识和管理水平。
2.5开发环境
操作系统:
MicrosoftWindows7
C++语言编程软件:
MicrosoftVisualStudio2010
三、详细设计
3.1系统结构
此学生成绩管理系统主要利用单链表实现,从整体结构看,分为五大功能模块:
输入记录模块、查询记录模块、更新记录模块、统计记录模块和输出记录模块。
其系统模块构成如图3-1所示。
图3-1学生成绩管理系统功能模块图
本系统的各个模块都是相关联的。
3.2数据结构设计
(1)、文件组织形式:
main.cpp文件,主函数入口;
student.cpp文件,学生成绩类的函数实现;
transcript.cpp文件,成绩单类的函数实现。
student.h文件,学生成绩类声明;
transcript.h文件,成绩单类声明。
图3-2文件组织形式
(2)、学生成绩信息类
classstudent
{
public:
student*next;
stringnum;//学号
stringname;//姓名
intch,math,en,zh,sum;//数学,语文,英语,综合,总分;
//语数外150,综合300;总分,构造的时候自动计算,便于总分排名;
//输出单个人的信息,学号,姓名,语文,数学,英语,综合,总分
voidstushow();
//构造函数,语数外综合,总分为四者之和,指针域置为NULL
student(stringsnum,stringsname,intsch,intsmath,intsen,intszh);
student();
};
1单链表node结构体
classtranscript
{
private:
student*stu;//头接点
public:
transcript();//构造函数,构造时自动读取文件存储的信息
~transcript();//析构函数,析构之前自动保存信息至文本
voidadd();//添加
voidremove();//删除
voidmodify();//修改
voidsearch();//查询
voidrank();//排序
voidstatistics();//统计每一门平均分,及格人数,优秀人数
intshow_transcript();//显示所有的成绩信息,返回记录数
private:
//排序函数,分别按照学号,语数外综合总分排序
voidpnum();
voidpch();
voidpmath();
voidpen();
voidpzh();
voidpsum();
voidsave();//保存,退出之前默认保存(析构时)
voidload();//读取,程序开始就载入(构造时)
};
3.3各个模块功能
为了满足系统需求要求,系统所需的主要模块与功能如下:
(1)输入记录模块。
输入记录模块主要完成将数据存入单链表中的工作。
在此成绩管理系统中,记录可以从以二进制形式存储的数据文件中读入(当成绩单对象构造时调用load函数),也可以从键盘逐个输入学生记录(调用add函数从键盘输入新纪录)。
当从数据文件中读入记录时,它就是以记录为单位存储的数据文件中,将记录逐条复制到链表中。
(2)查询记录模块。
查询记录模块主要完成在单链表中查找满足相关条件的学生记录。
在此管理系统中,用户可以按照学生的学号或姓名在单链表中进行查找。
若找到该学生的记录,则返回指向该学生记录的指针;否则,返回一个值为NULL的空指针,并输出没有找到该学生的信息。
(3)更新记录模块。
该模块主要完成对学生记录的维护。
在此系统中它实现了对学生记录的修改、删除、排序和插入等操作。
Modify函数修改记录时,按照学号查询,如果没有查到,提示用户没有该同学信息,查到该同学,则输出该同学信息,同时提示用户输入要修改的信息;remove函数删除用户,同理找到就使该结点拖链,然后释放结点所占内存;最重要的是排序,本系统分别采用冒泡排序、直接选择排序、表插入排序实现了按照学号(升序)、语文成绩、数学成绩、英语成绩、综合成绩,总分对学生成绩记录排序。
(4)统计记录模块。
用一个循环,完成了对全部学生记录总人数的统计和各科成绩不及格人数以及优秀人数的统计,并计算了每一门以及总分的平均成绩。
(5)输出记录模块。
该模块主要完成两个任务:
一是实现对学生记录的存盘操作,即将单链表中的各节点中存储的学生记录信息写入数据文件中;二是实现将单链表中存储的学生成绩和基本信息在屏幕界面上输出来。
4.4功能模块的设计
(1)main()函数执行流程
本高中成绩管理系统执行主流程如图3-4所示。
它可以以读的方式打开数据文件,此文件默认为data.txt,若该文件不存在,则新建此文件。
当打开文件操作成功后,从文件中一次读入一条记录,添加到新建的单链表中,然后执行显示主菜单和进入主循环操作,进行功能选择。
主界面如下图3-3:
在判断输入值时,有效输入为0~8之间的任意数值,其他输入均为错误输入。
若选择1,则调用add()函数,执行添加学生记录的操作;若选择2,则调用search()函数,执行查询学生成绩记录操作;若选择3,则调用remove()函数,执行删除学生成绩记录操作;若选择4,则调用modify()函数,执行修改学生成绩记录操作;若选择5,则调用show_transcript()函数,执行显示所有学生成绩操作;若选择6,则调用rank()函数,执行学生成绩记录排序操作;若选择7,则调用statistics()函数,执行显示学生成绩统计结果操作;若选择8,则退出系统,退出系统之前执行将链表中的内容写入文本,并析构相应对象,释放结点内存。
(2)输入记录模块
主要实现将数据存入单链表中。
当从数据文件中读出记录时,它使用ifstreamtfile("date.txt",ios_base:
:
binary);tfile>>num>>name>>ch>>math>>en>>zh>>sum;
执行一次从文件中读取一条学生记录存入指针变量所指的节点中的操作,并且此操作在main()中执行,即当成成绩管理系统进入显示菜单界面时。
若该文件中没有数据,系统会提示单链表为空,没有任何学生记录可操作,此时,应选择1,调用Add()函数,进行学生记录的输入,即完成单链表1中的添加节点操作。
(3)查询记录模块
查询记录模块主要实现了在单链表中按学号或姓名查找满足相关条件的学生记录。
在查询函数search()中,有一个子菜单,提示用户输入查询条件(按照学号或者按照姓名),如果没有找到,提示用户没有找到相应的记录,找到则输出该记录。
图3-4主控函数执行流程图
4更新记录模块
此模块主要实现了对学生记录的修改、删除和插入操作。
因为学生记录是以单链表的结构形式存储的,所以这些操作都在单链表中完成。
以下介绍3个模块的详细设计。
1修改模块
修改记录操作需要对单链表中目标节点的数据域中的值进行修改,它分两步完成。
第一步,输入要修改的学号,输入用循环在单链表中逐个对节点数据域中学号字段的值进行比较,直到找到该学号的学生记录;第二步,若找到该学生记录,修改不包括学号在内的各字段的值,将用户输入的值相应更新至链表。
2删除模块
删除记录操作完成删除指定学号的学生记录,它也分为两步完成。
第一,输入要删除的学号或姓名,输入后用循环在单链表中逐个对节点数据域中学号字段的值进行比较,直到找到该学号或姓名的学生记录,返回指向该学生记录的节点指针;第二,若找到该学生记录,将该学生记录所在节点的前驱节点的指针域指向目标节点的后继节点。
3插入记录
插入记录操作完成在最后一条记录的位置后。
即输入记录。
4排序记录
在单链表中,实现直接插入排序的基本步骤如下:
第一、新建一个单链表l,用来保存排序结果,其初始值为待排序单链表的头节点。
第二、从待排序链表中取出下一个节点,将其总分字段值与单链表l中的各节点中总分字段的值进行比较,直到在链表l中找到总分小于它的节点。
若找到如此节点,系统将待排序链表中取出的节点插入此节点前,作为其前驱。
否则,将取出的节点放在单链表l的尾部。
第三、重复第二步,直到从待排序链表取出的节点的指针域为NULL,即此节点为链表的尾部节点,排序完成。
类似还有简单的冒泡排序,和稍微复杂点的表插入排序,不同的排序有不同的算法,时间空间复杂度也稍有不同。
(4)统计记录模块
该模块的实现比较简单,它主要通过循环读取指针变量p所指的当前节点的数据域中各字段的值,并对各个成绩字段进行逐个判断的形式。
例如对于语文成绩的统计,每读取一个结点的语文成绩就做判断,如果小于90,则np_ch++(语文不及格人数加一),如果大于120,则g_ch++(语文优秀人数加一),同时ave_ch=ave_ch+p->ch,语文成绩累加求和,用于计算语文平均成绩。
(5)出记录模块
当把记录输出至屏幕界面时,调用voidshow_transcript()函数,将单链表中存储的学生记录信息以一定的格式形式在屏幕上输出。
输出到文件时,调用save()函数,ofstreamtfile("date.txt",ios_base:
:
binary),以一定的格式写入tfile<
四、遇到问题的分析和解决
遇到的问题主要异常处理,没有一定的容错机制的系统是很不健全的系统,因此要做相关的异常处理。
1、菜单选择的输入判断:
case为1~8,如果都不是,则进入default块,
default:
cout<<"\n\n输入有误,请输入正确的操作标号!
"< cin.clear(); cin.sync(); 说明: cin.clear();//用clear()让cin的状态为正常,但是内存这时未清空 cin.sync();//用来清空cin缓冲区里面未读取的信息,sync是输入输出都清空,输入是丢掉,输出是打印出来; 2、从键盘输入时,输入不合法数据,例如成绩输入字母或者汉字,或者小数,或者超过范围(语数外0~150,综合0~300),要能判断,并给用户提示,让用户重新输入。 部分代码如下: cout<<"\n**增加的学生成绩信息(中间用空格间隔)**\n"< cout<<"学号姓名语文数学英语文/理综(语数外0~150,综合0~300,成绩为整数): "< //对错误输入数据类型处理 cin.sync(); while(! (cin>>num>>name>>ch>>math>>en>>zh)||(ch<0||ch>150)||(math<0||math>150)||(en<0||en>150)||(zh<0||zh>300)) { cout<<"输入非法数据,请检查后重新输入! (语数外0~150,综合0~300,成绩为整数)"< cout<<"学号姓名语文数学英语文/理综: "< cin.clear(); cin.sync(); } 五、系统特色及使用的关键技术 本学生成绩管理系统界面友好,操作菜单清晰,使用起来也很简便。 能够快速的查询,添加统计等操作。 在开发过程中,使用了.txt文本记录了用户输入的数据,防止数据丢失,能按需求完成学生成绩管理的各项操作。 在开发系统的过程中,用到了对象链表的操作,结合指针,使该系统的实现成为可能。 在链表的存储方式中,用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)。 链表中结点的逻辑次序和物理次序不一定相同。 为了能正确表示结点间的逻辑关系,在存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成绩管理系统 数据结构 论文 doc