1、数据结构课设任务书及题目小白发布数据结构及C语言或C+程序课程设计任务书一、课程设计的目的 本课程设计利用所学数据结构知识和c语言和c+程序设计知识、能力完成具有一定难度的综合设计任务,以提高学生综合运用所学的理论知识和实现方法,提高学生动手能力和解决问题的能力。 二、课程设计的内容与要求 选题原则是数据结构算法实现及在具体问题中的应用。可选择下列与实际应用紧密结合的较综合性的题目,也可自选。要求通过课程设计的实践,在数据结构的表示、数据结构的选择及应用、算法设计与实现等方面加深对数据结构课程基本内容的理解和综合运用能力的提高。三、课程设计题目以下题目自己组小组,每组2-3人,选题目,相互讨论
2、完成!感兴趣的同学参加,不是必须的!题目的功能等也可以自己增减。(一)学生点名系统 功能:、输入学生数据。、对学生点名。、统计3次没到学生记录并将其考试标记设为0。 、统计缺席次数少于3次的学生记录并将其考试标记设为1。、输出两种考试标记的学生记录。、随机查询任意学生信息并输出。 注:每个学生数据至少应包括学号、姓名、点名记录、考试标志,四项信息,学生数据保存在STUDENT.DAT文件中。(二)学生选修课程系统设计假定有n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由
3、选课。试设计一选修课程系统,使之能提供以下功能:1、系统以菜单方式工作 2、课程信息录入功能(课程信息用文件保存)输入3、课程信息浏览功能输出 4、课程信息查询功能算法 查询方式 : 按学分查询 ; 按课程性质查询 5、学生选修课程(可选项)(三)职工信息管理系统职工信息包括工号,姓名,性别,学历,工资,住址,电话等(职工号不能重复)。试设计一个职工管理信息管理系统史之提供以下功能:系统以菜单方式工作:职工信息录入功能(职工信息文件保存)-输入职工信息浏览功能-输出; 查询和排序功能(至少一种查询方式)-算法; 按工资查询; 按学历查询; 职工信息删除;修改功能(任选项)(四)职工工作量统计系
4、统 程序输入职工工号和完成的产品数量,允许同一职工有多次输入,由程序对其完成的产品数量实现累计。按完成数量对他们排序,并确定他们的名次按完成的产品数量由多到少的顺序输出名次,同一名次的职工人数及他们的工号(由大到小)。要求程序用有序链表存储信息(五)订票系统 任务:通过此系统可以实现如下功能:录入: 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询: 可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定) 可以订票,如
5、果该航班已经无票,可以提供相关可选择航班; 退票:可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 修改航班信息: 当航班信息改变可以修改航班数据文件 要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能(六)人事档案管理系统 设计要求:实现菜单设计,使用数据文件保存和修改,应用结构体和指针 功能要求:职工信息录入、信息存储、查询、统计、排序、打印等(七)设计一个学生成绩管理系统,对学生学习成绩进行管理,具有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件。 A、设计内容 学生成绩可以包括学生的学号、姓名、班级
6、、性别、学期、各门课成绩、平均成绩等。具体可以自己设置。1、每一条记录包括一个学生的学号、姓名、性别、各门课成绩(上学期的科目)、平均成绩。 2、输入功能:可以一次完成若干条记录的输入。 3、显示功能:完成全部学生记录的显示。 4、查找功能:完成按姓名或学号查找学生记录,并显示。 5、排序功能:按学生平均成绩进行排序。 6、插入功能:按平均成绩高低插入一条学生记录。 7、将学生记录存在文件student.dat中。 8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观! B、设计要求 已知有存储学生记录(学号、姓名、班级、性别、学期、各门课成绩、平均成绩等, 注平均成
7、绩是系统在输入成绩过程中自动计算并写入的)的文件student.dat,所有学生以学号从小到大排序(该文件自行建立)。要求编程序实现查询、排序、插入、删除诸功能。具体要求如下: A要求显示如下界面 * 1-输入数据2-查询 3-排序 4-插入 5-删除* 通过选择1-4来确定要做哪一个操作。 B若选1,则出现如下界面 * 2.1-按学号查询 2.2-按姓名查询 2.3-按成绩查询 通过选择2.1-2.3来确定要做哪一个操作,其中:按姓名查询用顺序法实现;按成绩查询实现查询成绩小于m分的学生;找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。 C若选2,则按成绩从大到小排序,姓名,学号顺序
8、也随之调整。 D若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。 E若选4,删除指定学生的记录,并把结果保存到文件student.dat中。 G不同的模块都要有出错处理,并能给出出错提示。如输入数据错误,文件操作错误等等 F以上各个功能均编写成子函数,由主函数调用实现。 G利用结构体数组实现学生成绩的数据结构设计;(八)个人账簿管理系统建立个人账簿管理系统用于记录个人每月的总收入,以及各方面的开支,以及总开支情况。通过建立链表把每个月的收支情况依次连接,每个月的开支包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等,将输入的信息存储到文本文件中。通过该
9、系统可以随意的添加修改某个月的收支情况,也可以对每个月的开支大小进行排序,登录该系统可以任意查询存储在文本文件中的收支信息,通过月份查找可以精确的查看每个月的收支情况。要求以菜单的方式显示系统功能,根据用户选择,完成相应的功能。该系统至少有5个模块:分别是主模块,编辑模块,排序模块,查询模块,修改模块。(九) 设计一个通讯录管理软件。实现功能:1) 通讯录编辑(添加、删除)。2) 按不同的项进行查找。3) 对已存在的通讯录按不同的项排序。4) 将通讯录写入文件5) 从文件读入通讯录备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。(十)汉诺塔问题(Towers of Ha
10、noi)汉诺塔的问题是假设有三根木桩A、B和C。在木桩A上放置了N个圆盘,由上到下编号为1,2,N,编号越大的圆盘直径与越大。而我们必须将圆盘由木桩A通过木桩B全部搬到木桩C,如图1所示。在移动过程中,必须按照下述移动规则:1直径较小的圆盘永远至于直径较大的圆盘上;2圆盘可任意地由任何一个木桩移到其他的木桩上;3每一次仅能移动一个圆盘。假设现在有三个木桩A、B、C,在木桩A上,由大到小依次放置了三个中空的圆盘,则按照上述的移动规则,其移动的过程如图2所示:因此当N=3时,移动次序如下:(1) 从木桩A将圆盘1移动到木桩C。(2) 从木桩A将圆盘2移动到木桩B。(3) 从木桩C将圆盘1移动到木桩
11、B。(4) 从木桩A将圆盘3移动到木桩C。(5) 从木桩B将圆盘1移动到木桩A。(6) 从木桩B将圆盘2移动到木桩C。(7) 从木桩A将圆盘1移动到木桩C。首先我们观察当圆盘只有一个(即N=1)的时候,就直接把圆盘由木桩A移动到木桩C即可,不必用到木桩B。当圆盘不只一个(即N1)的时候,因为我们必须遵守上述的移动规则,也就是直径较小的圆盘永远置于直径较大的圆盘上,所以一开始的目的就必须想办法先把木桩A最下面的圆盘,也就是最大的圆盘取出来,移到木桩C的最下面去放,这样木桩C才能再放第二大的圆盘上去,如此一层层垒上去,直到完成目标。根据这样的概念,对于N1的解,可以分解成下列三个子问题:(1) 将
12、木桩A项端的N-1个圆盘通过木桩C移动到木桩B。(2) 将木桩A唯一的圆盘移到木桩C:AC(3) 将木桩B顶端的N-1个圆盘通过木桩A移动到木桩C。观察上面的三个子问题,我们发现第一个子问题及第三个子问题已经构成了递归调用,且问题也较为简化,即从N个圆盘变成N-1个圆盘的问题。而递归的终止条件,也就是在N=1时,就是发生在第二个子问题上,就不必再递归下去了,直接输出移动方法即可,因此我们可以把解题方案看成是一个分治算法,因为N个圆盘的解可以被分解成N-1个圆盘的解与N=1个圆盘的解。算法如下:void hanoi (int n,char a,char b,char,c) if (n0) han
13、oi (n-1,a,c,b);printf (“move disk %d from %c to %cn”,n,a,c);hanoi (n-1,b,a,c);图3是当N=3时的递归调用树状图,可以使我们更清楚的了解递归的调用过程。(十一)设计一个用户登录软件。实现功能:1) 提示输入用户名和密码(初始用户名为:guest;密码为:123),对输入信息进行检测;正确则提示欢迎信息,错误则提示重新输入(错误三次,退出系统)。2) 提供密码的修改功能,输入原先的密码,正确则可以修改;输入新设定的密码,提示“再输入一遍”新设定的密码,2次一致则修改成功,否则提示有误,并允许重新设定或退出。6、设计一个加
14、密和解密软件。实现功能:1) 对输入的一串字符(或一个文件)进行加密(加密算法自定)。2) 对已加密的一串字符(或一个文件)进行解密。3) 提供有关提示信息和支持用户使用的辅助功能(根据实际情况自定)。(十二)冒泡排序问题:要求实现下面几个小问题 (1)提示用户输入数据(2)简单的冒泡排序(3)双向冒泡排序设计要求:设计算法,首先屏幕上显示上述菜单,用户选择1时,提示用户从键盘随机输入无序元素存入数组中,至少输入10个元素,然后,对数组中的元素进行冒泡排序。用户选择2时,可以进行最简单的冒泡排序,即通过大元素下沉或者小元素上浮进行排序,并且屏幕显示每一趟排序结果。用户选择3时,进行双向冒泡排序
15、,即这两周方式(大元素下沉或者小元素上浮)交替进行,先从底向上从无序区间冒出一个最小元素,再从上向底从无序区间冒出一个最大元素,这样交替进行,直至全部元素排序结束,屏幕显示每一趟排序结果。并且要求可以多次使用菜单进行选择。(十三)快速排序问题:要求实现下面几个小问题 (1)提示用户输入数据(2)快速排序设计要求:设计算法,首先屏幕上显示上述菜单,用户选择1时,提示用户从键盘随机输入无序元素存入数组中,至少输入10个元素。用户选择2时,对数组中的元素进行快速排序,要求屏幕显示每一趟快速排序结果。并且要求可以多次使用菜单进行选择。所谓快速排序,基本思路是,在待排序的n个记录中任取一个记录(一般都是
16、取第一个记录),通过一趟快排把该记录放入最终位置后,整个数据区间被此记录分割成了两个子区间。所有关键字比该记录小的放在前子区间中,所有比它大的放在后子区间中。并把该记录排在这两个子区间的中间。这个过程成为一趟快速排序。然后再分别对所有的两个子区间重复上述过程。直至每个区间内只有一个记录为止。(快速排序的思路请查阅数据结构相关书目)(十四)直接插入和直接选择排序问题:要求实现下面几个小问题 (1)提示用户输入数据(2)直接插入排序(3)选择排序设计要求:设计算法,首先屏幕上显示上述菜单,用户选择1时,提示用户从键盘随机输入无序元素存入数组中,至少输入10个元素。用户选择2时,对数组中的元素进行插
17、入排序,要求屏幕显示每一趟插入排序结果。用户选择3时,对数组中的元素进行选择排序,要求屏幕显示每一趟选择排序结果。并且要求可以多次使用菜单进行选择。(直接插入排序、选择排序的思路请查阅数据结构相关书目)(十五)希尔(shell)排序问题:要求实现下面几个小问题 (1)提示用户输入数据(2)希尔排序设计要求:设计算法,首先屏幕上显示上述菜单,用户选择1时,提示用户从键盘随机输入无序元素存入数组中,至少输入10个元素。用户选择2时,对数组中的元素进行希尔排序,要求屏幕显示每一趟插入排序结果。并且要求可以多次使用菜单进行选择。希尔排序又称为缩小增量排序方法,把待排记录按下标的一定增量d分组,对每组记
18、录采用直接插入排序方法进行排序,随着增量d逐渐减小,所分成的组包含的记录越来越多,到增量的值减小到1时,整个数据合为一个排好序的整体。(希尔排序的详细思路请查阅数据结构相关书目)(十六)二分查找问题:设计要求:二分查找算法也称为折半查找,是在有序序列中进行的查找方法。所以数据存放在数组中必须要有序。思路是,裆Rlowhigh是当前查找区间时,首先确定该区间的中点位置mid=(low+high)/2,然后将待查的k值与Rmid位置上的值进行比较。详细思路请自己查阅数据结构相关书目。在设计过程中,把每一趟中间点Rmid的值与k值比较的情况(、=、将字符转化成数字输出表达式判断表达式是否有误计算表达
19、式输出结果是否继续计算退出计算器(流程图本想以图表、箭头的形式呈现出来,但是由于技术限制,一直未能达到理想的版本,只好以简单的文字说明一下,忘谅解。)5源代码及调试程序代码#include #include /等待一个字符#include /数学#include /文件读写#include /输入,输出函数ofstream out(简单计算器.txt);int resultprocess(char mexp,double *result);int tokenprocess(char mexp,double num,char signs);double resultadd(double num,char signs,int sp);void main() char mexp100,conti; double result=0; whi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1