最新c++课程设计.doc

上传人:1595****071 文档编号:33832380 上传时间:2022-08-12 格式:DOC 页数:30 大小:1.66MB
返回 下载 相关 举报
最新c++课程设计.doc_第1页
第1页 / 共30页
最新c++课程设计.doc_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《最新c++课程设计.doc》由会员分享,可在线阅读,更多相关《最新c++课程设计.doc(30页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精品资料c+课程设计.课程设计(论文)课程名称程序设计实践题 目学生成绩管理系统设计与实现实现院 (系)理学院专业班级应数1401姓 名张丹莉学 号141003131指导教师鲁萍 白燕 2017年 1 月 12 日学生成绩管理系统的设计与实现摘要 学生成绩管理系统是典型的信息管理系统,是学校教务管理的重要组成部分,其处理信息量很大。本课程设计是用C+实现对学生的成绩管理作一个简单的模拟,实质是建立学生成绩单链表,每条记录由学号、姓名与成绩组成,即链表中每个结点由4个域组成,分别为:学号、姓名、成绩存放下一个结点地址的next域。用菜单选择操作方式完成6项功能分别写成六个函数,创建学生成绩对应建

2、立学生单链表的功能,对全部学生成绩的排序,最后保存在文件中,另外四个功能分别对应单链表的显示、查询、修改与删除四大基本操作。该系统中的数据采用线性表中的链式存储结构即单链表来存储,用类类型定义每个学生记录并采用外部文件方式记录数据简便数据的读取与保存。通过对学生成绩管理系统的制作,能够让使用者迅速地对学生的成绩做各项处理和显示,最终的到想要的信息,方便且易于操作。关键词 学生成绩管理系统 , C+, 链表 ,文件 目录1 总体介绍课程设计内容1.1 课设内容总体介绍1.1.1设计内容制作学生成绩管理系统,实现数据录入、数据删除、数据浏览以及数据查询等功能。1.1.2课程设计的要求包括系统设计要

3、求,开发环境要求,技术文档要求三部分。(1)系统设计要求:(a)学生成绩管理系统中不同使用单位(用户)的学生人数事先无法确定。(b) 该学生成绩管理系统要求有学生成绩录入,查询,修改,删除,排序。(c) 系统使用文字菜单,用户通过选择菜单项的编号,实现系统对子模块的调用。(d) 每个班级每门课程的成绩可以从学生的成绩总表提取出子表并存储成一个文本文件。该文本文件名由班级号和课程名拼音字符串构成。输入班级号和课程名字符串后自动生成文件名。 (e) 每个学生学习的课程有数学,英语,C+。(f) 学生的成绩总表结构约定为(学号,姓名,课程名,总评成绩)总评成绩等于各科成绩之和。(g)学号是一个9位整

4、数构成的字符串, 学号的编码规则:入学年份+在读年级+在读班级+班内编号;入学年份用4位整数构成字符串,如2014年入学则表示为:”2014”;在读年级用1位整数构成字符串,如正在1年级读书则表示为:”1”;在读班级用2位整数构成字符串,如正在1班读书则表示为:”01”;班内编号用2位整数构成字符串,如在班内编号为23号则表示为:”23”。(2)开发环境要求软件环境:windows XP/windows 7,Visual C+硬件环境:计算机(Pen4 CPU, 512MRAM,60G以上硬盘,输入输出设备)(3)技术文档要求:按软件工程技术文档要求。要求流程图绘制规范,模块功能描述清晰1.2

5、 个人完成部分第一阶段:学习链表相关知识来动态分配存储空间,并作出链表的程序及学习文件在C+中的应用;第二阶段:录入学生成绩、显示学生成绩、查询学生成绩并画出相关流程图,并与队友共同把所有的程序进行整理并调试成功;第三阶段:独立完成论文的书写。2 主要算法与原理2.1 链表2.1.1 链表的介绍数组式计算机根据事先定义好的数组类型与长度自动为其分配一连续的存储单元,相同数组的位置和距离都是固定的,也就是说,任何一个数组元素的地址都可一个简单的公式计算出来,因此这种结构可以有效的对数组元素进行随机访问。但若对数组元素进行插入和删除操作,则会引起大量数据的移动,从而使简单的数据处理变得非常复杂,低

6、效。链表是一种动态数据结构,用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素。 链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。可以看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。实际上,链表中的每个结点可以用若干个数据和若干个指针。结点中只有一个指针的链表称为单链表,这是最简单的链表结构。2.1.2 链表的创建与输出开辟一个新节点,并使p1,p2指向所建立的对

7、象当p指向的不是表尾P指向下一个结点输出p所指向的结点假真p指向的不是尾结点P=head,使p指向第一个结点n=n+1head=NULL当读入的p1_num读入一个学生的数据给p1所指的结点 p2-next=p1(把p1所指的结点连接到 表尾head=p1(把p1所指的结点再开辟一个新结点,使p1指向它表尾结点的指针变量置NULL读入一个学生数据给p1所指的结点图1 动态链表创建 图 2 链表输出2.1.3链表结点的访问 由于链表中的各个结点是由指针链接在一起的,其存储单元文笔是连续的,因此,对其中任意结点的地址无法向数组一样,用一个简单的公式计算出来,进行随机访问。只能从链表的头指针(即he

8、ad)开始,用一个指针p先指向第一个结点,然后根据结点p找到下一个结点。以此类推,直至找到所要访问的结点或到最后一个结点(指针为空)为止。2.1.4链表结点的插入 如果要在链表中的结点a之前插入结点b,则需要考虑下面几点情况。(1)插入前链表是一个空表,这时插入新结点b后。(2)若a是链表的第一个结点,则插入后,结点b为第一个结点。(3)若链表中存在a,且不是第一个结点,则首先要找出a的上一个结点a_k,然后使a_k的指针域指向b,在令b的指针域指向a,即可完成插入。(4)如链表中不存在a,则插在最后。先找到链表的最后一个结点a_n,然后使a_n的指针域指向结点b,而b指针的指针为空。2.1.

9、5链表结点的删除 如果要在链表中删除结点a并释放被删除的结点所占的存储空间,则需要考虑下列几种情况。(1)若要删除的结点a是第一个结点,则把head指向a的下一个结点。(2)若要删除的结点a存在于链表中,但不是第一个结点,则应使a得上一个结点a_k-1的指针域指向的下一个结点a_k+1。(3)空表或要删除的结点a不存在,则不做任何改变。2.2 文件的使用2.2.1.打开文件在ofstream类中,成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作函数:open()参数: filename 操作文件名

10、 mode 打开文件的方式 prot 打开文件的属性2.2.2关闭文件当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。成员函数close(),它负责将缓存中的数据排放出来并关闭文件。这个函数一旦被调用,原先的流对象就可以被用来打开其它的文件了,这个文件也就可以重新被其它的进程所访问了。为防止流对象被销毁时还联系着打开的文件,析构函数将会自动调用关闭函数close()。2.2.3文本文件的读写Read成员函数从一个文件读字节到一个指定的存储器区域,由长度参数确定要读的字节数。如果给出长度参数,当遇到文件结束或者在文本模式文件中遇到文件结束标记字符时结束。3 学生成绩管理系统的

11、设计与实现3.1 学生类成员及函数表一 学生类成员(函数)类型含义Name20char姓名ID20char学号(九位)Subject3int 科目sumint总成绩Input()void输入函数ReadFile(istream & in)void读入文件函数Showvoid显示函数3.2 学生信息类成员及函数表二 学生信息类函数(成员)类型含义* Head,* End; ; Student用于链表的开始和结束Studentmassage()构造函数Studentmassage()析构函数ShowMenu()void菜单函数AddItem() void创建信息函数Sort()void排序函数Di

12、splay()void显示信息函数RemoveItem()void删除信息函数ModifyItem()void修改信息函数ListCount()int记录当前链表数目Swap(Student *,Student *)void删除结点save ()void保存函数3.3 主要函数说明首先在创建菜单时,应包括创建学生成绩录入,显示,查询,修改,删除,排序这六个功能,然后通过调用创建信息函数完成学生成绩的录入,显示函数实现学生信息的全部显示,通过修改可以改变输入错的信息,针对有的学生如果转学什么的可以对其信息进行删除,利用姓名来调用查询函数能够得到所想要的学生信息;最后,通过调用排序函数后在,可以在

13、所见的文件夹里打开所有录入的学生信息及最终排序结果。3.4 学生成绩管理系统的总结构图 通过总结构图能够直观地看出所制作的成绩管理系统的各项功能,总结构图如下图3.图3 学生成绩管理系统的总结构3.5 模块的流程图根据系统提示,选择1创建学生信息,根据系统提示可以一次输入姓名,学号,成绩,如果要对成绩显示则继续选择2,可以对成绩显示,当创建的信息大于等于2时可以继续选择3,进行排序,最终的结果可以在当前所建的记事本里显示各项成绩及排序,要对信息查询选择4来查询你想要的信息,也可以对信息修改等,最终可以选择0安全退出系统。 进入系统根据系统提示来选择想要进行的操作,从而完成各项的功能,利用信息查

14、询也可以来判断所操作的删除是否删除成功的测试,查询流程如下,图4. 图4 信息查询流程图3.6 难点及难点的解决难点:通过构造两个类来实现各种功能,使用链表来对各项功能的实现及使用文件来保存所得到的成绩排序结果的连接中相对较难。解决:通过自己认真学习课本所学过的链表及文件相关的知识,并通过上网查找类似的链表和文件在C+中的应用来完成。4 结果分析及改进首先进入系统界面后,会有时间,日期的显示,并提示密码的输入,如下图5. 图5 首界面 根据界面提示进入菜单界面,可以对想要的操作进行选择,如图6. 图6 菜单界面 选择1,创建学生信息,创建学生的姓名、学号,各科成绩,最后会显示添加成功,结果如下

15、图7.图7 创建学生信息根据刚才创建更多的学生信息后,选择3,可以显示创建的所有学生的信息,如图8.图8 显示学生信息根据刚才创建的所有信息可以进行查询自己所想要的学生信息,如下图9.图9 查询学生信息如果有的同学转学或其他什么的,该信息已经无意义,可以对该信息进行删除,如图9.图10 删除学生信息 如果第一次创建信息过程中出现错误或输入的姓名与学号不对应,则可以通过修改学生的信息,如图10.图11 修改信息最后完成所有输入的成绩排序,得到最终的结果显示,如图11.图12 排序结果所有的操作完成后,选择0,可以安全退出系统。如下图12.图13 系统安全退出系统5 小结和心得 对于我们所选的学生

16、成绩管理系统的设计与实现,我是根据我们所做的ssrt 的项目有启发而做的,经过查阅资料发现利用文件和链表来实现,所以自己又把我们学过的链表和文件进行学习,查阅相关的实例练习链表的应用,但刚开始我们想的比较简单是依据C语言而实现的,到后来经老师的点拨,发现我们做的应该是基于C+ 的程序,虽然仅剩一天半左右的时间,我和队友能够更根据自己前期准备的基础上,进一步查阅资料并对自己原有的程序进行修改,最终的以完成。通过这次C+的课程设计的学习,让我体会到我们所学的C+课程的实用性,以前我认为计算机方面的课程仅仅是我所要必修的,没有什么的实际价值,但是经过这次课程设计,看到同学们所做的小游戏后,我发现其实

17、我们所学的都是非常有用的,只是在以前我们缺乏思考和锻炼,仅仅把游戏当作一种娱乐,并没有发现用我们所学的知识也是可以制作的,所以启发我们以后需要多思考,多进行实际操作。利用这次训练,我发现自己能够掌握更多的知识,通过两个人的合作,能够相互取长补短,对我后期的学习也有很大的帮助,让我不再对计算机课程感到头疼,同时也增加了我对编程的兴趣与爱好,希望以后的学习、生活中,我能够和做这次课程设计一样,勤于动手,动脑,努力来弥补不足之处。6 参考文献1 谭浩强.C+程序设计M.北京.清华大学出版社,2004.6.2 谭浩强.C+程序设计解题与上机指导M.北京.清华大学出版社.2005.3.3 钱新贤,杨猛,

18、程兆炜,张少东VisualC+编程疑难详解M北京.人民邮电出版社,2000.54 5 附录#include #include #include#include #include/用getch(); using namespace std; /Student类 class Student public: char name20; char Id20; int Cnum; /C+课程得分 int Mnum; /数学课程得分 int Enum; /英语课程得分 int sum; /总分 Student * Next; void Input() coutname; coutId; coutCnum;

19、coutMnum; coutEnum; sum=Cnum+Mnum+Enum; void ReadFile(istream & in) innameIdCnumMnumEnumsum; void Show() cout 姓名 学号 C+ 数学 英语 总成绩 endl; cout name Id Cnum Mnum Enum sumNext;p!=End;p=p-Next) p-Show(); coutInput(); End-Next=new Student; End=End-Next; cout添加成功!endl; coutNext!=End;p=p-Next)/匹配成功则返回上一个指针,不

20、成功就返回空 if(!strcmp(p-Next-name,name)return p; return NULL; Student *FindID(char * Id) for(Student * p=Head;p-Next!=End;p=p-Next)/匹配成功则返回上一个指针,不成功就返回空 if(!strcmp(p-Next-Id,Id)return p; return NULL; ; /构造函数 Studentmassage:Studentmassage() Head=new Student; Head-Next=new Student; End=Head-Next; in.open(

21、sort.txt); if(!in) cout这是一个新系统,无学生信息。请先输入。ReadFile(in); if(End-name0=0)break; End-Next=new Student; End=End-Next; in.close(); couttt读取学生信息成功!Next!=End;) temp=Head-Next; Head-Next=Head-Next-Next; delete temp; delete Head,End; /菜单 void Studentmassage:ShowMenu() cout*endl; cout*制作人:西安建筑科技大学 张丹莉 周春燕*end

22、l; cout* 欢迎来到学生成绩管理系统 *endl; cout* 1 创建学生信息 *endl; cout* 2 显示学生信息 *endl; cout* 3 排序学生信息 *endl; cout* 4 查询学生信息 *endl; cout* 5 删除学生信息 *endl; cout* 6 修改学生信息 *endl; cout* 0 成功退出系统 *endl; cout*endl; cout*endl; cout请输入您想完成的操作:; /查找函数 void Studentmassage:Find() char name20 ,Id10; int x; Student * p=NULL; c

23、outntt*n; couttt 1.按学生的姓名查找ntt 2.按学生学号查找; coutx; switch(x) case 1:coutname; if(p=FindItem(name) p-Next-Show(); cout输入任意字符!继续; getch(); else couttt没有找到该姓名的学生!nendl; cout输入任意字符!继续; getch(); break; case 2: coutId; if(p=FindID(Id) p-Next-Show(); cout输入任意字符!继续; getch(); else couttt没有找到该学好的学生!nendl; cout输

24、入任意字符!继续; getch(); break; /修改信息 void Studentmassage:ModifyItem() /修改信息 char name20; Student * p=NULL; coutname; if(p=FindItem(name) couttt已找到学生的信息,请输入新的信息!Next-Input(); cout修改成功!endl; cout输入任意字符!继续; getch(); else couttt没有找到!endl; cout输入任意字符!继续; getch(); /删除信息 void Studentmassage:RemoveItem() / 删除信息

25、char name20; Student * p=NULL,*temp=NULL; couttt请输入要删除的学生的姓名:name; if(p=FindItem(name) temp=p-Next; p-Next=p-Next-Next; delete temp; couttt删除成功!endl; cout输入任意字符!继续; getch(); else couttt没有找到!endl; coutname,p1-name); strcpy(temp-Id,p1-Id); temp-Cnum=p1-Cnum; temp-Mnum=p1-Mnum; temp-Enum=p1-Enum; temp-

26、sum=p1-sum; strcpy(p1-name,p2-name); strcpy(p1-Id,p2-Id); p1-Cnum=p2-Cnum; p1-Mnum=p2-Mnum; p1-Enum=p2-Enum; p1-sum=p2-sum; strcpy(p2-name,temp-name); strcpy(p2-Id,temp-Id); p2-Cnum=temp-Cnum; p2-Mnum=temp-Mnum; p2-Enum=temp-Enum; p2-sum=temp-sum; / int Studentmassage:ListCount()/统计当前链表的记录总数,返回一个整数

27、if(! Head) return 0; int n=0; for(Student * p=Head-Next;p!=End;p=p-Next) n+; return n; / void Studentmassage:Sort()/对当前链表进行排序 cout Sorting.endl; Student *p=NULL,*p1=NULL,*k=NULL; int n=Studentmassage:ListCount(); if(nNext;p!=End;p=p-Next) for(k=p-Next;k!=End;k=k-Next) if(p-sumk-sum) Studentmassage:S

28、wap(p,k); cout 排序完成!Next;p!=End;p=p-Next) outnametIdtCnumt MnumtEnumtsumn; out.close(); /主函数 int main() int x; bool quit=false; system(cls); time_t t; time(&t); cout *欢迎进入西安建筑科技大学学生管理系统*nendl 当前系统时间是: ctime(&t)endl; /密码设置 cout 进入该系统设有密码,只有2次机会! nendl; cout 温馨向您提示,登录密码为 123456 nendl; coutstr; if(str=

29、123456) cin.get(); Studentmassage Grade; coutx; switch(x) case 0:quit=true; cout-endl; cout 西安建筑科技大学学生成绩管理系统 =endl; /*结束程序*/ cout * 西安建筑科技大学*endl; cout * 理 学 院 *endl; cout * 应 数 1401 班 *endl; cout * 141003133 *endl; cout 欢迎使用西安建筑科技大学生成绩管理系统 =endl; cout-endl; break; case 1:Grade.AddItem();break; case 2:Grade.Display();break; case 3:Grade.Sort();break; case 4:Grade.Find();break; case 5:Grade.RemoveItem();break; case 6:Grade.ModifyItem();break; else cout第一次密码错误,请重新输入密码!str; if(str=123456)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com