C语言课程设计

2024-05-08

1. C语言课程设计

 3、班级通讯录管理系统设计与实现   以本班同学的具体数据为背景,设计一个本班同学实现以下功能:   1)通讯录编辑(添加、删除) ;   2)按不同的项进行查找;   3)对已存在的通讯录按不同的项排序;   4)将通讯录写入文件;   5)从文件读入通讯录。   备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。
   链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag    提取码: 1111 
   6、成绩记录簿设计与实现   实现以下功能:   1)创建信息并以磁盘文件保存;   2)读取磁盘文件并显示输出所有学生的成绩;   3)按学号或姓名查询成绩;   4)添加成绩记录;   5)修改指定姓名或学号的学生的成绩并可存盘;   6)显示输出60分以下、60 79、80 89、90分以上各分数段的学生信息。   备注:每个学生信息包括:学号、姓名、C语言成绩。
   链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag    提取码: 1111 
   7、学生籍贯信息记录簿设计与实现   实现以下功能:   1)创建信息并以磁盘文件保存;   2)读取磁盘文件并显示输出所有学生的籍贯信息;   3)按学号或姓名查询其籍贯;   4)按籍贯查询并输出该籍贯的所有学生;   5)能添加、删除和修改学生的籍贯信息;   6)显示输出四川籍和非四川籍学生的信息并可分别存盘。   备注:每个学生信息包括:学号、姓名、籍贯
   链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag    提取码: 1111 
   9、图书信息管理系统设计与实现   实现以下功能:   1)系统以菜单方式工作;   2)图书信息录入功能(图书信息用文件保存);   3)图书信息浏览功能;   4)查询和排序功能;   备注:图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
   链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag    提取码: 1111 
   10、学生信息管理系统设计与实现   实现以下功能:   1)系统以菜单方式工作;   2)学生信息录入功能(学生信息用文件保存) ;   3)学生信息浏览功能;   4)查询、排序功能(至少两种查询依据和两种排序依据);   5)学生信息删除、修改功能。   备注:学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-   mail等。
   链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag    提取码: 1111 
   12、职工工作量统计系统设计与实现   完成以下功能:   1)输入职工工号和完成的产品数量,程序允许同- -职工有多次输入,由程序对   其完成的产品数量实现累计;   2)按完成数量对职工排序,并确定名次;   3)按完成的产品数量由多到少的顺序,输出名次、同一名次的职工人数及他们   的工号(工号由小到大顺序输出)。
   链接: https://pan.baidu.com/s/1mq8kqN3BvK0IvZBEUP9Oag    提取码: 1111 

C语言课程设计

2. C语言课程设计


3. C语言课程设计题目

 例:学生管理系统设计   设计内容:   详见视频,要求数据结构用链表,数据存储使用文件。
   计算每个老师在一个学期中所教课程的总工作量。(教师单个教学任务的信息为:教师号、姓名、性别、职称、认教课程、班级、班级数目、理论课时、实验课时、单个教学任务总课时)   A、教师信息处理   (1) 输入教师授课教学信息,包括教师号、姓名、性别、职称、认教课程、班级、班级数目、理论课时、实验课时。   (2) 插入(修改)教师授课教学信息:   (3) 删除教师授课教学信息:   (4) 浏览教师授课教学信息:   B、教师工作量数据处理:   (1) 计算单个教学任务总课时。计算原则如下表:
   (2) 计算一个教师一个学期总的教学工作量。总的教学工作量=所有单个教学任务总课时之和。   (3)教师数据查询:     提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。   C、教师综合信息输出     提示:输出教师信息到屏幕。
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   该系统是一个进行选择题测试的考试系统,具有测试、练习功能,具有系统设置功能,具有查分和帮助功能。   一、功能要求:   1、用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案)   2、试题录入:可随时增加试题到试题库中   3、试题抽取:每次从试题库中可以随机抽出N道题及每题的得分K(N、K由键盘输入)。   4、可以设置考试时间。   5、用户可以选择“考试”和“练习”两种方式。   5、答题:用户可实现输入自己的答案,“考试”时系统不能显示答案。“练习”时每一题都可以通过查看“按钮”显示标准答案。可以用“上一题”、“下一题”翻页。选择“交卷”按钮则显示得分;   6、自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。   7、考试开始系统显示倒计时。时间为零自动交卷。   二、其它要求:   1、源程序要有适当的注释,使程序容易阅读   2、至少采用文本菜单界面(如果能采用图形菜单界面更好)   3、学生可自动增加新功能模块(视情况可另外加分)   4、写出课程设计报告,具体要求见相关说明文档
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   设计内容:   设计一个简单的英语字典,输入英语单词,显示中文含义,设计要求:
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   设计内容:   设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等)。该学生通信录电话簿管理程序具有加入、删除、显示和查询等功能。   设计要求:   1、  能建立、修改和增删学生通讯录   2、  具有群组工能,可以增加群组和记录。   3、  删除可以删除一条、一个群组、全部记录。   4、  查询包含模糊查询。   5、  显示可以以页面和列表方式显示。   6、  有自动排序的功能。   7、  要求:界面友好,易于操作,采用文件存储数据。
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   [设计内容]   实现一个完整的小型音像店对录像带进行管理的系统。   [设计要求]   系统要求具有以下功能:   (1) 管理音像店中的所有录像带,包括新录像带入库、录像带出租、录像带的返还、所有录像带清单的显示、根据指定条件进行查找删除录像带等各种基本操作。   (2) 客户数据维护,可以将客户分为不同等级,可以根据指定客户显示其所借录像带详细信息。   (3) 租金管理,根据所借日期自动计算所需交纳的租金。   (4) 系统要求界面美观,菜单设计合理,操作方便。   [实验提示]   音像店有两个主要的组成部分:录像带和客户。可以构造3个链表存储以下数据:   (1) 商店中所有录像带的链表;   (2) 商店所有客户的链表;   (3) 当前已出租的录像带链表;
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   [设计内容]   航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。设计一个航空订票系统实现上述功能。   [设计要求]   (1) 将每条航线的有关信息存入计算机,如:终点站名、航班号、飞机号、飞行周日(星期几)、时间、乘员定额、余票量、票价,已定票客户名单和等候替补客户名单(包括姓名,所需票数);   (2) 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞、最近一天航班的日期和余票量。   (3) 订票:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补;   (4) 退票:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他候补客户。   发挥想像,增加新的功能,完善系统。   系统要求界面美观,菜单设计合理,操作方便。
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   [设计内容]   某旅馆有n个等级的房间,第I等级有 个房间,每个等级的房间有 个床位(1≤i≤n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。   [设计要求]   (1) 旅客登记,即为旅客分配床位。输入旅客姓名、年龄、性别、到达日期和所需房间等级。分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。   (2) 旅客离开时,即进行床位回收。输入房间等级、房间号和床位号。
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   设计内容:   职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。   设计要求:   1、系统以菜单方式工作   2、职工信息录入功能(职工信息用文件保存)--输入   3、职工信息浏览功能--输出   4、职工信息查询功能--算法   查询方式   按学历查询等   按职工号查询等   5、职工信息删除、修改功能(可选项)   6、按工号排序
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   设计内容:   图书信息包括:书号、书名、作者名、分类号、出版社、出版时间、价格等。   设计功能:   1、系统以菜单方式工作   2、图书信息录入功能(图书信息用文件保存)--输入   3、图书信息的编辑功能(插入、删除、修改)   4、图书信息浏览功能(按书号、书名、出版时间、价格等排序输出)。   5、图书信息查询功能(按书号、书名、作者名、出版社查询,提供模糊查询的功能)
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   设计内容:   实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。   设计功能:   1、能够完成对设备的录入和修改   2、对设备进行分类统计   3、设备的破损耗费和遗损处理   4、设备的查询   要求:采用文件方式存储数据,系统以菜单方式工作
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   设计内容:   设计一个学生选修课程系统,假定有n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。   设计功能:   1、系统以菜单方式工作   2、课程信息录入功能(课程信息用文件保存)--输入   3、课程信息的编辑功能(插入、删除、修改)   4、课程信息浏览功能(按课程编号、课程名称、总学时、学分等排序输出)。   5、课程信息查询功能(按课程编号、课程名称、课程性质、开课学期等查询,提供模糊查询的功能)   6、学生选修课程   7、学生选课信息查询
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   设计内容:   某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1)销售员的代号,2)产品的代号,3)这种产品的当天的销售额。每位销售员每天上缴1张便条。试设计一个便条管理系统。   设计功能:   1、系统以菜单方式工作   2、便条信息录入功能(便条信息用文件保存)--输入   3、收集到了上个月的所有便条后,读取销售情况   1)计算每个人每种产品的销售额。   2)按销售额对销售员进行排序,输出排序结果(销售员代号)   3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)(可选项)
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   设计内容:   设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理。   设计功能:   (1)查看功能:选择此功能时,列出下列三类选择。   A.办公类  B.个人类 C.商务类,当选中某类时,显示出此类所有数据中的姓名和电话号码)   (2)增加功能:能录入新数据   一个结点包括:姓名、电话号码、分类(A  办公类  B  个人类 C 商务类)、电子邮件)。   例如:  杨春   13589664454  商务类   chuny@126.com    当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。   (3)拔号功能:   能显示出通信录中所有人的姓名,当选中某个姓名时,屏幕上模拟打字机的效果依次显示出此人的电话号码中的各个数字,并伴随相应的拔号声音。   (4)修改功能:   选中某个人的姓名时,可对此人的相应数据进行修改   (5)删除功能:   选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 
   每个教师的信息为:教师号、姓名、性别、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资。注:应发工资=基本工资+津贴+生活补贴;合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资 - 合计扣款。   A、教师信息处理   (1) 输入教师信息   (2) 插入(修改)教师信息:   (3) 删除教师信息:   (4) 浏览教师信息:     提示:具体功能及操作参考题1。   B、教师数据处理:   (1) 按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。   (2) 教师实发工资、应发工资、合计扣款计算。     提示:计算规则如题目。   (3) 教师数据管理     提示:输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件   (4) 教师数据查询:     提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。   (5) 教师综合信息输出     提示:输出教师信息到屏幕。
   链接: https://pan.baidu.com/s/1AdMlIyDVtLtuVVNf62As-Q?pwd=1111    提取码: 1111 

C语言课程设计题目

4. C语言程序设计课程设计


5. c语言课程设计


c语言课程设计

6. c语言课程设计

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。
我的题目是文章处理系统的设计,对于我们这些新手来说,这是很大的考验,我一千次一万次的问自己,怎么才能找到课堂所学与实际应用的最佳结合点?怎么才能让自己的程序在篇幅上简单,在使用价值上丰富?怎样让自己的业余更靠近专业?怎样让自己的计划更具有序性,而不会忙无一用?机会是老师,学校,以及无数代教育工作者给的,而能力是自己的,耐性是需要的。经过自己的琢磨,听取了师姐,师兄们的建议,还查阅了很多书籍,才做到了心中有数,才了解了C语言课程设计的真正用意——培养自学能力,养成程序编辑的好习惯。我从来不相信车到山前必有路的说法,认为那只是懒惰者自寻懒惰的借口,我要积极,要把握,要努力。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在郭老师的辛勤指导下,终于游逆而解。同时,在郭老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢
在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。没有了柳暗花明的一天,那么我怎么能说经受住了考验?谢谢老师的那句话,她说:人力有所不能及,然而,人的精神是不会败倒的。我鼓起勇气,到处问,到处查资料,黄天不负有心人,在一篇文章上,终于看到了我所特别要求的函数,我实现了组合是关键的理论。不得不说这是精神的胜利,是永不言败的精神让我的程序重见天日。谢谢给我指点迷津的老师。
6月11日,我们的课程设计结束了,但是它留给我的印象是不可磨灭的。无论我以后会不会涉及到C语言程序编译的研究,我想,我至少掌握了一种系统的研究方法,我们学习的目的就在于运用,我们运用这种研究方法的时候会很多,我最后要感谢课程设计,它的确教会我很多。
另外,虚机团上产品团购,超级便宜

7. c++课程设计

图书借阅管理系统具有以下功能:
图书资料管理
   图书资料管理主要完成图书资料的新增、修改和报废,并生成图书资料库的功能。按采购员的要求,供书商提供需要的书籍。进行分类新增修改处理。并对已报废图书进行处理。
读者资料管理
   读者资料管理主要完成读者资料的新增、修改和撤消,并生成读者资料库。按读者要求进行读者资料的新增、修改和撤消。
借书操作
   借书操作主要完成读者的借书、续借及预订处理,并生成读者借阅库。首先进行读者资格的审核,符合要求后查阅书库是否有书,如有则修改图书资料库,书库取书书交读者。书库无书则进行预订处理。用户续借则修改还书日期。并将借书信息汇总后交统计员。
还书操作
    还书操作主要完成读者的还书及罚款处理,并修改读者借阅库。首先进行读者资格的审核,符合要求后则修改图书资料库,读者还书书还书库。书籍逾期或遗失则进行罚款处理。并将还书信息汇总后交统计员。
查询处理
    查询处理主要完成读者对书是否逾期、书是否未借、书籍排行榜的查询处理。并及时地把查询结果反馈给读者,并将查询信息汇总给统计员。
系统维护
    包括权限管理、数据恢复和数据备份。数据恢复和数据备份是对数据的有效保护。权限管理是对系统使用者规定相关的权限,以免系统数据被非法访问和使用。
(访问时需要密码,密码错误要有提示重输,登陆分为管理员登陆和用户登陆两项,用户只能进行查询操作,而管理员能进行所有操作)
#include  
#include  

class Book{ // 书籍基类 
protected: 
char Title[40]; // 书名 
long Code; // 条码 
int Type; // 0表示书,1表示杂志 
public: 
Book(); 
Book(char *title,long code); 
void SetCode(long code){ Code = code; } 
void SetTitle(char* tl){ strcpy(Title,tl); } 
void SetType(bool type){Type = type; } 
int GetType(){ return Type; } 
long GetCode(){ return Code;} 
virtual void Show(); // 显示书的信息 
friend ostream& operator<<(ostream& , Book&); // 重载插入运算符 
friend istream& operator>>(istream& is, Book&); // 重载提取运算符 
Book *Next; // 为创建每个读者所借书链表而定义指针 
}; 

class Item :public Book{ //书的款目 
// char Title[40]; // 书名 
char Author[20]; // 著者名 
char IndexCode[10]; // 分类号 
// long Code; // 条码 
public: 
Item(); 
Item(char *author,char *title,char *index,int code); 
Item(Item &); 
void SetAuthor(char*); 
void SetIndexCode(char*); 
virtual void Show(); // 显示书的信息 
friend ostream& operator<<(ostream& os, Item&); // 重载插入运算符 
friend istream& operator>>(istream& is, Item&); // 重载提取运算符 
public: 

}; 

class Magazine:public Book { //杂志类 
int Volume; 
enum LANG {CHINESE=1,ENGLISH} Lang; // 枚举变量,确定语言类别 
public: 
Magazine():Book(){Volume = 0; Lang = CHINESE; Type = 1; } 
Magazine(char *title,int vol,LANG lang,int code); 
Magazine(Magazine&); 
void SetVolume(int vol){Volume = vol;} 
void SetLang(int lang){Lang = (LANG)lang;} 
virtual void Show(); // 显示杂志的信息 
friend ostream& operator<<(ostream& os, Magazine&); // 重载插入运算符 
friend istream& operator>>(istream& is, Magazine&); // 重载提取运算符 
}; 

class Reader{ // 读者信息类 

char Name[20]; // 姓名 
char Position[20]; // 职务 
int Age; // 年龄 
long Code; // 借书证号 
Book* items; // 所借书链表 
public: 
Reader(); 
Reader(char *name,char *posi,int age,int code); 
// Reader(Reader&); 
~Reader(); 
long GetCode(){return Code;} 
void SetName(char*); 
void SetPosition(char*); 
void SetAge(int); 
void SetCode(long); 
void AddBook(Item); // 添加所借书 
void AddBook(Magazine); // 添加所借杂志 
void DelBook(Book it); // 还书后减少所借书 
void ShowBooks(); // 显示所借书 
void Show(); // 显示读者信息 
friend ostream& operator<<(ostream& os, Reader&); // 重载插入运算符 
friend istream& operator>>(istream& is, Reader&); // 重载提取运算符 
public: 
int Counter; //计数器,统计所借书数目 
}; 

class Manager{ // 管理员类 
char Name[20]; // 姓名 
int Age; // 年龄 
int Code; // 工号 
friend class Library; // 将图书馆类声明为友元 
public: 
Manager(){} 
Manager(char*,int,int); 
long GetCode(){ return Code;} 
void Show(); 
friend ostream& operator<<(ostream& os, Manager&); // 重载插入运算符 
friend istream& operator>>(istream& is, Manager&); // 重载提取运算符 
}; 

class Loan { // 借阅信息类 
int Type; // 0表示书,1表示杂志 
Item item; // 借阅书 
Magazine mag; // 借阅杂志 
Reader reader; // 借阅者 
Manager manager; // 借书操作员 
int Code; 
friend class Library; // 将图书馆类声明为友元 
public: 
Loan(){ } 
Loan(Loan & l); 
int GetCode(){ return Code;} 
void Show(); 
friend ostream& operator<<(ostream& os, Loan&); // 重载插入运算符 
friend istream& operator>>(istream& is, Loan&); // 重载提取运算符 
}; 
、、、、、、、、、、、、、、、、、、、、、、、 
#include 
#include 
class Reader; 
template class DblList; 
template class DblNode{ 
public: 
T Info;//数据域 
DblNode *llink,*rlink; //前驱(左链)、后继(右链)指针 
public: 
DblNode(T data);//一般结点 
DblNode();//头结点 
T GetInfo(){return Info;}; 
friend class DblList; 
friend class Library; 
}; 

templateclass DblList{ 
DblNode *head,*current; 
public: 
DblList(); 
~DblList(); 
void Insert(const T& data); 
DblNode* Remove(DblNode* p); 
void Print(); 
int Length();//计算链表长度 
DblNode *Find(T data);//搜索数据与定值相同的结点 
DblNode* Find(int data);//按某个关键字查找 
void MakeEmpty(); //清空链表 
void ShowList(); //显示链表各结点 
friend istream& operator>>(istream&, DblList&); // 重载输入流运算符 

friend ostream& operator& dlist); // 重载输出流运算符 
friend class Library; 
//其它操作 
}; 


template DblNode::DblNode(){ 
llink=rlink=NULL; 
} 
template DblNode::DblNode(T data){ 
info=data; 
llink=NULL; 
rlink=NULL; 
} 


template DblList::DblList(){//建立表头结点 
head=new DblNode(); 
head->rlink=head->llink=head; 
current=NULL; 
} 
template DblList::~DblList(){ 
MakeEmpty();//清空链表 
delete head; 
} 
template void DblList::MakeEmpty(){ 
DblNode *tempP; 
while(head->rlink!=head){ 
tempP=head->rlink; 
head->rlink=tempP->rlink;//把头结点后的第一个节点从链中脱离 
tempP->rlink->llink=head;//处理左指针 
delete tempP; //删除(释放)脱离下来的结点 
} 
current=NULL; //current指针恢复 
} 
template void DblList::Insert(const T & data){//新节点在链尾 
current=new DblNode; 
current->Info=data; 
current->rlink=head;//注意次序 
current->llink=head->llink; 
head->llink->rlink=current; 
head->llink=current;//最后做 
} 
template DblNode* DblList::Remove(DblNode* p){ // 删除结点 
current=head->rlink; 
while(current!=head&¤t!=p) current=current->rlink; 
if(current==head) current=NULL; 
else{//结点摘下 
p->llink->rlink=p->rlink; 
p->rlink->llink=p->llink; 
p->rlink=p->llink=NULL; 
} 
return current; 
} 

template DblNode* DblList::Find(T data){ // 按结点查找 
current=head->rlink; 
while(current!=head&¤t->Info!=data) current=current->rlink; 
if(current==head) current=NULL; 
return current; 
} 

template DblNode* DblList::Find(int data){ // 按数据值查找结点 
current=head->rlink; 
int temp =current->Info.GetCode(); 
while(current!=head&&temp!=data){ 
current=current->rlink; 
temp = current->Info.GetCode(); 
} 
if(current==head) current=NULL; 
return current; 
} 

template void DblList::Print(){ // 输出链表 
current=head->rlink; 
while(current!=head){ 
coutInfo<<'\t'; 
current=current->rlink; 
} 
cout<<endl; 
} 
template int DblList::Length(){ // 取得链表长度 
int count=0; 
current=head->rlink; 
while(current!=head){ 
count++; 
current=current->rlink; 
} 
return count; 
} 

template void DblList::ShowList(){ // 输出链表各结点 
int count=0; 
current=head->rlink; 
while(current!=head){ 
current->GetInfo().Show(); 
current=current->rlink; 
} 
return ; 
} 

template 
istream& operator>>(istream& is, DblList &dlist){ 
int len; 
T tt; // 定义局部变量读入一个结点 
is>>len; 
for(int i= 0 ;i<len; i++){ // 循环读入链表各结点 
is>>tt; 
dlist.Insert(tt); 
} 
return is; 
} 

template 
ostream& operator &dlist){ 
DblNode *tempP; 
int len = dlist.Length(); 
os<<len<<' '; 
tempP=dlist.head->rlink; 
while(tempP!=dlist.head){ // 循环输出链表各结点 
osInfo; 
tempP = tempP->rlink; 
} 
return os; 
} 
#include "class.h" 
#include "dblist.h" 
#include  
class Library{ // 封装图书馆流通业务的类 
DblList item; // 在馆图书链表 
DblList mag; // 在馆杂志链表 
DblList reader; // 读者链表 
DblList loan; // 借阅信息链表 
DblList manager; // 管理员信息链表 

int itemNum; // 记录在馆图书数目 
int magNum; // 记录在馆杂志数目 
int readerNum; // 记录读者数目 
int loanNum; // 记录借阅信息数目 
int managerNum; // 记录管理员数目 
ofstream itemFileOut; // 文件流对象,保存图书馆书籍数据 
ifstream itemFileIn; // 文件流对象,读入图书馆书籍数据 
ofstream magFileOut; // 文件流对象,保存图书馆杂志数据 
ifstream magFileIn; // 文件流对象,读入图书馆杂志数据 
ofstream readerFileOut; // 文件流对象,保存图书馆读者数据 
ifstream readerFileIn; // 文件流对象,读入图书馆读者数据 
ofstream loanFileOut; // 文件流对象,保存图书馆借阅信息数据 
ifstream loanFileIn; // 文件流对象,读入图书馆借阅信息 
ofstream managerFileOut; // 文件流对象,保存图书馆管理员数据 
ifstream managerFileIn; // 文件流对象,读入图书馆管理员数据 
public: 
Library(); // 构造函数 
~Library(); //析构函数 
void Run(); // 图书馆类的运行函数 
void CreateBibliotheca(); // 创建书目 
void CreateReader(); // 创建读者库 
void CreateManager(); // 创建管理员信息 
int ShowMainMenu(); // 显示主菜单函数 
void Borrow(); // 借书操作 
void Return(); // 还书操作 
void Require(); // 查询操作 
void SaveInfo(); // 保存图书馆信息 
void OpenInfo(); // 读入图书馆信息 
};

c++课程设计

8. C++课程设计

《C++课程设计》 

课程设计题目:学生成绩管理系统 

学生班级:***** 

学生姓名:***** 

学生学号:***** 

(2)学生成绩管理系统需求与功能分析 

学生成绩的录入、统计、查询、修改、删除、输出。 画出功能结构图。 

(3)学生成绩管理系统的数据结构表 

序号       成员名(字段名)       数据类型       长度       字段含义       

1     class_0    char 20    班级       

2     num int        学号       

3     name       char 8     姓名      

4     elec  flaot      电子技术       

5     c_prog    float      C 程序设计   

6     media      flaot      多媒体技术    

7     eng  float      大学英语       

8     math       float      高等数学       

9     sport       float      大学体育       

10    polity      float      马克思主义政治经济学       

11    ave  float      平均成绩       

12    order       int        名次       

(4)学生成绩管理系统测试数据表

class_0    num name       elec  c_prog    media      eng  math       sport       polity      ave  order       

网络30331     3033101  马云飞    80    70    60    70    70    60    80                                                                                                                                                        表中其余数据自己编造。 

(5)使用链表编写程序(手写源程序代码,并给出注解) 

0)定义链表结点 

1)主函数main():定义链表头指针,调用录入、统计等函数对成绩表进行处理; 

2)建立链表函数Create():输入班级到政治课成绩信息; 

3)统计函数Statistic():计算平均成绩; 

4)查询函数Lookup():查询指定学号学生成绩记录; 

5)修改函数Modify():修改指定学号学生成绩记录; 

6)删除函数Delete():删除指定学号学生记录; 

7)输出函数Output():输出班级所有学生成绩记录; 

8)插入函数Insert():按平均分顺序插入新结点。 

9) 排序函数Sort():按平均分对学生成绩记录项进行降序排序; 

 程序如下:

#include 
#include 
#include 
#include 
#include 
using namespace std;

struct Node//定义链表结点
{

 char* class_0;//班级
 int number;
 char* name;//姓名
 float elec;//电子技术成绩
 float c_prog;//C程序设计成绩
 float media;//多媒体技术成绩
 float eng;//大学英语成绩
 float math;//高等数学成绩
 float sport;//大学体育成绩
 float polity;//马克思主义政治经济学成绩
 float ave;//平均成绩
 int order;//名次
 Node* link;
 Node(){link=NULL;}
 Node(int _number,char* _class_0,char* _name,float _elec,
  float _c_prog,float _media,float _eng,float _math,
  float _sport,float _polity,float _ave,int _order,Node* next)
 {
  number=_number;
  class_0=new char[21];
  strcpy(class_0,_class_0);
  name=new char[9];
  strcpy(name,_name);
  elec=_elec;
  c_prog=_c_prog;
  media=_media;
  eng=_eng;
  math=_math;
  sport=_sport;
  polity=_polity;
  ave=_ave;
  order=_order;
  link=next;
 }
 ~Node()
 {
  delete []class_0;
  delete []name;
 }

};
class StudentScore
{
private:
 Node* first;//链表的头指针
 int choice;//选择数据的读入方式
 int fileNum;//当前文件数减一
 int fileLoc;//定位当前文件
 string* fileName;
 int operChoice;
 int RecordLength;
public:
 StudentScore();
 void Save();
void BuildList();//手工建立成绩链表
void ReadInfo(int k);//从内存中读入学生信息
void ClearList();
void Statistic();
void Sort();
void Add();
void Delete();
void PrintList();
void Menu();
};
StudentScore::StudentScore()
{
 RecordLength=0;
 operChoice=0;
 first=NULL;
 choice=0;
 fileLoc=0;
 fileNum=0;
 fileName=new string[10];//最多可以存10个文件
}
int GetOrder(Node* first,float ave);
void StudentScore::BuildList()
{
 int _number;//学号
 char* _class_0=new char[21];//班级
 char* _name=new char[9];//姓名
 float _elec;//电子技术成绩
 float _c_prog;//C程序设计成绩
 float _media;//多媒体技术成绩
 float _eng;//大学英语成绩
 float _math;//高等数学成绩
 float _sport;//大学体育成绩
 float _polity;//马克思主义政治经济学成绩
 float _ave;//平均成绩
 int _order;//名次
 char c;
 Node *p,*r=NULL;
 first=NULL;
 cout<<"您要输入学生成绩信息?"<<endl;
 while((c=getchar())=='n');
 while(tolower(c)!='n')
 {
  cin>>_class_0;//班级
  cin>>_number;
  cin>>_name;//姓名
  cin>>_elec;
  cin>>_c_prog;
  cin>>_media;
  cin>>_eng;
  cin>>_math;
  cin>>_sport;
  cin>>_polity;
  _ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//求得平均成绩
  _order=GetOrder(first,_ave);

  p=new Node(_number,_class_0,_name,_elec,
   _c_prog,_media,_eng,_math,_sport,_polity,
   _ave,_order,NULL);//建立一个新的结点储存信息

  if(first!=NULL)
   r->link=p;
  else first=p;
  r=p;
  RecordLength++;
  cout<<"您要输入学生成绩信息?"<<endl;
  while((c=getchar())=='n');
 }
}
int GetOrder(Node* first,float ave)//名次记录有严重问题
{
 int order=1;
 Node* temp=first;
 for(;temp;temp=temp->link)
 { if(temp->ave>ave) order++;
  if(temp->aveorder)++;
 }
  return order;
}

void StudentScore::Statistic()
{
 Node* temp=first;
 float a_elec=0.0;//电子技术成绩
 float a_c_prog=0.0;//C程序设计成绩
 float a_media=0.0;//多媒体技术成绩
 float a_eng=0.0;//大学英语成绩
 float a_math=0.0;//高等数学成绩
 float a_sport=0.0;//大学体育成绩
 float a_polity=0.0;//马克思主义政治经济学成绩
 int i=0;
 while(temp)
 {
  a_elec+=temp->elec;
  a_c_prog+=temp->c_prog;
  a_media+=temp->media;
  a_eng+=temp->eng;
  a_math+=temp->math;
  a_sport+=temp->sport;
  a_polity+=temp->polity;
  i++;
  temp=temp->link;
 }
  a_elec=a_elec/i;
  a_c_prog=a_c_prog/i;
  a_media=a_media/i;
  a_eng=a_eng/i;
  a_math=a_math/i;
  a_sport=a_sport/i;
  a_polity=a_polity/i;
  cout<<"电子技术平均成绩为:"<<a_elec<<endl;
  cout<<"c程序设计平均成绩为:"<<a_c_prog<<endl;
  cout<<"多媒体技术平均成绩为:"<<a_media<<endl;
  cout<<"英语平均成绩为:"<<a_eng<<endl;
  cout<<"高等数学平均成绩为:"<<a_math<<endl;
  cout<<"体育平均成绩为:"<<a_sport<<endl;
  cout<<"政治平均成绩为:"<<a_polity<<endl;
}
void StudentScore::Delete()
{
 int studNum;
 Node* p;
 Node* temp=first;
 cout<<"请输入要删除的学生学号"<<endl;
 cin>>studNum;
 float average;
 for(;temp;temp=temp->link)
 {
  coutnumber;
  
  if(temp->number==studNum)
  {
   average=temp->ave;

   if(temp==first)//说明是第一次
   {
    first=first->link;
    delete temp;
    break;//如果不跳出的话 temp=temp->link会出错
   }
   else
   {
    p->link=temp->link;
    delete temp;
    break;
   }
  }
  p=temp;
  RecordLength--;
  
  
 }  
 //下面修改学生排名
 temp=first;
 for(;temp;temp=temp->link)
  if(temp->aveorder--;

}
void StudentScore::Add()
{
 int _number;//学号
 char* _class_0=new char[21];//班级
 char* _name=new char[9];//姓名
 float _elec;//电子技术成绩
 float _c_prog;//C程序设计成绩
 float _media;//多媒体技术成绩
 float _eng;//大学英语成绩
 float _math;//高等数学成绩
 float _sport;//大学体育成绩
 float _polity;//马克思主义政治经济学成绩
 float _ave;//平均成绩
 int _order;//名次
 char c;
 Node *p,*r=NULL;
 r=first;
 while(r->link)
  r=r->link;

// first=NULL;
 cout<<"您要输入学生成绩信息?"<<endl;
 while((c=getchar())=='n');
 while(tolower(c)!='n')
 {
  cin>>_class_0;//班级
  cin>>_number;
  cin>>_name;//姓名
  cin>>_elec;
  cin>>_c_prog;
  cin>>_media;
  cin>>_eng;
  cin>>_math;
  cin>>_sport;
  cin>>_polity;
  _ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//求得平均成绩
  //写一个返回排名的程序
  _order=GetOrder(first,_ave);

  p=new Node(_number,_class_0,_name,_elec,
   _c_prog,_media,_eng,_math,_sport,_polity,
   _ave,_order,NULL);//建立一个新的结点储存信息

  if(first!=NULL)
   r->link=p;
  else first=p;
  r=p;
  RecordLength++;
  cout<<"您要输入学生成绩信息?"<<endl;
  while((c=getchar())=='n');
 }

}
void StudentScore::Sort()//简单bubble排序从高分到低分排序
{
 int i=0;
 Node* temp=first;
 Node* before;
// Node* p=first;
 for(;temp->link;)
 {
  if(temp->avelink->ave)
  {
 
   if(temp==first)//说明是第一个结点
   { 
    first=first->link;
  // p=temp;
  // temp=temp->link;
   temp->link=temp->link->link;
   first->link=temp;
   before=first;
   }
   else//不是第一个结点
   {
    before->link=temp->link;
    temp->link=temp->link->link;
    before->link->link=temp;
    before=before->link;
   }
  }
  else
  {
   temp=temp->link;
  }
  
  
  i++;//计算次数
 }
 for(;i>0;i--)
 {
  temp=first;
  for(int j=0;j<i;j++)
  {
   if(temp->avelink->ave)
   {
    cout<<"small!"<<endl;
    if(temp==first)//说明是第一个结点
    { 
     first=first->link;
     // p=temp;
     // temp=temp->link;
     temp->link=temp->link->link;
     first->link=temp;
     before=first;
    }
    else//不是第一个结点
    {
     before->link=temp->link;
     temp->link=temp->link->link;
     before->link->link=temp;
     before=before->link;
    }
   }
   else
   {
    temp=temp->link;
   }
  }
 }
 
}
/*
bool IsSorted(Node* first)
{
 for(;first;first=first->link)
  if(first->avelink->ave) return false;
 return true;
}*/

void StudentScore::PrintList()//打印链表程序
{
 cout<<"The list contains:"<<endl;
 Node* temp=first;
 for(;temp;temp=temp->link)
 {
  coutclass_0name<<endl;
  coutorder<<endl;
 }
}

void StudentScore::ClearList()//清除链表
{
 Node* p=new Node;
 while(first)
 {
  p=first->link;
  delete first;
  first=p;
 }
}

//读函数
void StudentScore::ReadInfo(int k)//读第k个文件的信息存入链表
{
// int wordLength;//记录子段长度
 int _number;//学号
 char* _class_0=new char[21];//班级
 char* _name=new char[9];//姓名
 float _elec;//电子技术成绩
 float _c_prog;//C程序设计成绩
 float _media;//多媒体技术成绩
 float _eng;//大学英语成绩
 float _math;//高等数学成绩
 float _sport;//大学体育成绩
 float _polity;//马克思主义政治经济学成绩
 float _ave;//平均成绩
 int _order;//名次
 Node *p,*r=NULL;
 first=NULL;
 ifstream Infile(fileName[k].c_str());
 if(!Infile)
 {
  cout<<"file is not present!"<<endl;
  return;
 }
 Infile>>RecordLength;
 cout<<RecordLength;
 for(int i=0;i<RecordLength;i++)
 {
  Infile>>_class_0;//班级
//  cout<<_class_0;
  Infile>>_number;
  Infile>>_name;//姓名
  Infile>>_elec;
  Infile>>_c_prog;
  Infile>>_media;
  Infile>>_eng;
  Infile>>_math;
  Infile>>_sport;
  Infile>>_polity;
  Infile>>_ave;
  Infile>>_order;
  _ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//求得平均成绩
  //写一个返回排名的程序
  _order=GetOrder(first,_ave);

  p=new Node(_number,_class_0,_name,_elec,
   _c_prog,_media,_eng,_math,_sport,_polity,
   _ave,_order,NULL);//建立一个新的结点储存信息

  if(first!=NULL)
   r->link=p;
  else first=p;
  r=p;
 }

}
void StudentScore::Save()
{
 string tempName;
 cout<<"请输入将要保存的文件名:"<<endl;
 //要判断是否跟现有文件重名
 cin>>tempName;
 ofstream savefile(tempName.c_str());//要做一个转换
 Node* temp=first;
 savefile<<RecordLength<<endl;
 for(;temp;temp=temp->link)
 {
  savefileclass_0numbernameelec<<" "
   c_progmediaengmath<<" "
   sportpolityaveorder<<endl;
 }
 savefile.close();
 
 //读取文件表信息
 ifstream Readfileinfo("FileRecord.txt");
 Readfileinfo>>fileNum;
 for(int i=0;i<fileNum;i++)
  Readfileinfo>>fileName[i];
 Readfileinfo.close();
 fileNum++;
 fileName[i]=tempName;
 //修改文件表信息
 ofstream changefile("FileRecord.txt");
 changefile<<fileNum<<endl;
 for(i=0;i<fileNum;i++)
  changefile<<fileName[i]<<endl;
 changefile.close();
}

void StudentScore::Menu()
{
 cout<<"请您选择数据的读入方式:"<<endl;
 cout<<"(1) 重新手动建立一份新的数据表"<<endl;
 cout<<"(2) 从文件中读入数据"<<endl;
 cout<<"请选择:";
 cin>>choice;
 if(choice==1)
 {
  BuildList();
 }
 if(choice==2)
 {
  cout<<"当前有如下文件,请选择读入文件:"<<endl;
  ifstream fileRecord("fileRecord.txt");
  if(!fileRecord)
  {
   cout<<"fileRecord is not present!"<<endl;
   return;
  }
  fileRecord>>fileNum;
  cout<<"当前有"<<fileNum<<"个文件:"<<endl;
  for(int i=0;i<fileNum;i++)
  {
   fileRecord>>fileName[i];
   cout<<fileName[i]<<" ";
  }
  cout<<"请您选择一个文件:";
  cin>>fileLoc;
  ReadInfo(fileLoc-1);
  PrintList();

 }
 cout<<"请选择您需要的操作:"<<endl;
 cout<<"(1) 统计学生各科成绩"<<endl;
 cout<<"(2) 删除某个学生成绩记录"<<endl;
 cout<<"(3) 增加某个学生成绩记录"<<endl;
 cout<<"(4) 在链表中为所有学生成绩记录排序"<<endl;
 cin>>operChoice;
 if(operChoice==1)
  Statistic();
 if(operChoice==2)
  Delete();
 if(operChoice==3)
  Add();
 if(operChoice==4)
  Sort();
 Save();
 ClearList();
}

int main()
{
 cout<<"//////////////////////////////////"<<endl;
 cout<<"欢迎使用学生成绩管理系统!"<<endl;
 cout<<"//////////////////////////////////"<<endl;
 cout<<endl;
 cout<<endl;
 StudentScore s;
 s.Menu();
 return 0;
}