数据结构课设任务书及题目小白发布.docx

上传人:b****5 文档编号:5371808 上传时间:2022-12-15 格式:DOCX 页数:23 大小:58.64KB
下载 相关 举报
数据结构课设任务书及题目小白发布.docx_第1页
第1页 / 共23页
数据结构课设任务书及题目小白发布.docx_第2页
第2页 / 共23页
数据结构课设任务书及题目小白发布.docx_第3页
第3页 / 共23页
数据结构课设任务书及题目小白发布.docx_第4页
第4页 / 共23页
数据结构课设任务书及题目小白发布.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数据结构课设任务书及题目小白发布.docx

《数据结构课设任务书及题目小白发布.docx》由会员分享,可在线阅读,更多相关《数据结构课设任务书及题目小白发布.docx(23页珍藏版)》请在冰豆网上搜索。

数据结构课设任务书及题目小白发布.docx

数据结构课设任务书及题目小白发布

数据结构及C语言或C++程序课程设计任务书

一、课程设计的目的

本课程设计利用所学数据结构知识和c语言和c++程序设计知识、能力完成具有一定难度的综合设计任务,以提高学生综合运用所学的理论知识和实现方法,提高学生动手能力和解决问题的能力。

二、课程设计的内容与要求

选题原则是数据结构算法实现及在具体问题中的应用。

可选择下列与实际应用紧密结合的较综合性的题目,也可自选。

要求通过课程设计的实践,在数据结构的表示、数据结构的选择及应用、算法设计与实现等方面加深对数据结构课程基本内容的理解和综合运用能力的提高。

三、课程设计题目

以下题目自己组小组,每组2-3人,选题目,相互讨论完成!

感兴趣的同学参加,不是必须的!

题目的功能等也可以自己增减。

(一)学生点名系统 

功能:

⑴、输入学生数据。

⑵、对学生点名。

⑶、统计3次没到学生记录并将其考试标记设为0。

 

⑷、统计缺席次数少于3次的学生记录并将其考试标记设为1。

⑸、输出两种考试标记的学生记录。

⑹、随机查询任意学生信息并输出。

 

注:

每个学生数据至少应包括学号、姓名、点名记录、考试标志,四项信息,学生数据保存在STUDENT.DAT文件中。

(二)学生选修课程系统设计

假定有n门课程,每门课程有:

课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。

试设计一选修课程系统,使之能提供以下功能:

1、系统以菜单方式工作

2、课程信息录入功能(课程信息用文件保存)--输入

3、课程信息浏览功能--输出

4、课程信息查询功能--算法

查询方式:

 按学分查询; 按课程性质查询

5、学生选修课程(可选项)

(三)职工信息管理系统

职工信息包括工号,姓名,性别,学历,工资,住址,电话等(职工号不能重复)。

试设计一个职工管理信息管理系统史之提供以下功能:

系统以菜单方式工作:

职工信息录入功能(职工信息文件保存)-输入

职工信息浏览功能--输出;

查询和排序功能(至少一种查询方式)--算法;

按工资查询;按学历查询;职工信息删除;

修改功能(任选项)

(四)职工工作量统计系统 

程序输入职工工号和完成的产品数量,允许同一职工有多次输入,由程序对其完成的产品数量实现累计。

按完成数量对他们排序,并确定他们的名次按完成的产品数量由多到少的顺序输出名次,同一名次的职工人数及他们的工号 (由大到小)。

要求程序用有序链表存储信息

(五)订票系统

任务:

通过此系统可以实现如下功能:

  录入:

  可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)

  查询:

  可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);

  可以输入起飞抵达城市,查询飞机航班情况;

  订票:

(订票情况可以存在一个数据文件中,结构自己设定)

  可以订票,如果该航班已经无票,可以提供相关可选择航班;

  退票:

 可退票,退票后修改相关数据文件;

  客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

  修改航班信息:

  当航班信息改变可以修改航班数据文件

  要求:

  根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能

(六)人事档案管理系统

 设计要求:

实现菜单设计,使用数据文件保存和修改, 应用结构体和指针

 功能要求:

职工信息录入、信息存储、查询、统计、排序、打印等

(七)设计一个学生成绩管理系统,对学生学习成绩进行管理,具有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件。

A、 设计内容

学生成绩可以包括学生的学号、姓名、班级、性别、学期、各门课成绩、平均成绩等。

具体可以自己设置。

1、每一条记录包括一个学生的学号、姓名、性别、各门课成绩(上学期的科目)、平均成绩。

2、输入功能:

可以一次完成若干条记录的输入。

3、显示功能:

完成全部学生记录的显示。

4、查找功能:

完成按姓名或学号查找学生记录,并显示。

5、排序功能:

按学生平均成绩进行排序。

6、插入功能:

按平均成绩高低插入一条学生记录。

7、将学生记录存在文件student.dat中。

8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!

B、 设计要求

已知有存储学生记录(学号、姓名、班级、性别、学期、各门课成绩、平均成绩等,注平均成绩是系统在输入成绩过程中自动计算并写入的)的文件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,则按成绩从大到小排序,姓名,学号顺序也随之调整。

D.若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。

E.若选4,删除指定学生的记录,并把结果保存到文件student.dat中。

G.不同的模块都要有出错处理,并能给出出错提示。

如输入数据错误,文件操作错误等等

F.以上各个功能均编写成子函数,由主函数调用实现。

G.利用结构体数组实现学生成绩的数据结构设计;

(八)个人账簿管理系统

建立个人账簿管理系统用于记录个人每月的总收入,以及各方面的开支,以及总开支情况。

通过建立链表把每个月的收支情况依次连接,每个月的开支包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等,将输入的信息存储到文本文件中。

通过该系统可以随意的添加修改某个月的收支情况,也可以对每个月的开支大小进行排序,登录该系统可以任意查询存储在文本文件中的收支信息,通过月份查找可以精确的查看每个月的收支情况。

要求以菜单的方式显示系统功能,根据用户选择,完成相应的功能。

该系统至少有5个模块:

分别是主模块,编辑模块,排序模块,查询模块,修改模块。

(九)设计一个通讯录管理软件。

实现功能:

1)通讯录编辑(添加、删除)。

2)按不同的项进行查找。

3)对已存在的通讯录按不同的项排序。

4)将通讯录写入文件

5)从文件读入通讯录

备注:

通讯录至少应该有以下数据项:

姓名,地址,电话,邮编,E-mail。

(十)汉诺塔问题(TowersofHanoi)

汉诺塔的问题是假设有三根木桩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移动到木桩B。

(4)从木桩A将圆盘3移动到木桩C。

(5)从木桩B将圆盘1移动到木桩A。

(6)从木桩B将圆盘2移动到木桩C。

(7)从木桩A将圆盘1移动到木桩C。

首先我们观察当圆盘只有一个(即N=1)的时候,就直接把圆盘由木桩A移动到木桩C即可,不必用到木桩B。

当圆盘不只一个(即N>1)的时候,因为我们必须遵守上述的移动规则,也就是直径较小的圆盘永远置于直径较大的圆盘上,所以一开始的目的就必须想办法先把木桩A最下面的圆盘,也就是最大的圆盘取出来,移到木桩C的最下面去放,这样木桩C才能再放第二大的圆盘上去,如此一层层垒上去,直到完成目标。

根据这样的概念,对于N>1的解,可以分解成下列三个子问题:

(1)将木桩A项端的N-1个圆盘通过木桩C移动到木桩B。

(2)将木桩A唯一的圆盘移到木桩C:

A→C

(3)将木桩B顶端的N-1个圆盘通过木桩A移动到木桩C。

观察上面的三个子问题,我们发现第一个子问题及第三个子问题已经构成了递归调用,且问题也较为简化,即从N个圆盘变成N-1个圆盘的问题。

而递归的终止条件,也就是在N=1时,就是发生在第二个子问题上,就不必再递归下去了,直接输出移动方法即可,因此我们可以把解题方案看成是一个分治算法,因为N个圆盘的解可以被分解成N-1个圆盘的解与N=1个圆盘的解。

算法如下:

voidhanoi(intn,chara,charb,char,c)

{

if(n>0)

{

hanoi(n-1,a,c,b);

printf(“movedisk%dfrom%cto%c\n”,n,a,c);

hanoi(n-1,b,a,c);

}

}

图3是当N=3时的递归调用树状图,可以使我们更清楚的了解递归的调用过程。

(十一)设计一个用户登录软件。

实现功能:

1)提示输入用户名和密码(初始用户名为:

guest;密码为:

123),对输入信息进行检测;正确则提示欢迎信息,错误则提示重新输入(错误三次,退出系统)。

2)提供密码的修改功能,输入原先的密码,正确则可以修改;输入新设定的密码,提示“再输入一遍”新设定的密码,2次一致则修改成功,否则提示有误,并允许重新设定或退出。

6、设计一个加密和解密软件。

实现功能:

1)对输入的一串字符(或一个文件)进行加密(加密算法自定)。

2)对已加密的一串字符(或一个文件)进行解密。

3)提供有关提示信息和支持用户使用的辅助功能(根据实际情况自定)。

(十二)冒泡排序问题:

要求实现下面几个小问题

(1)提示用户输入数据

(2)简单的冒泡排序

(3)双向冒泡排序

设计要求:

设计算法,首先屏幕上显示上述菜单,用户选择1时,提示用户从键盘随机输入无序元素存入数组中,至少输入10个元素,然后,对数组中的元素进行冒泡排序。

用户选择2时,可以进行最简单的冒泡排序,即通过大元素下沉或者小元素上浮进行排序,并且屏幕显示每一趟排序结果。

用户选择3时,进行双向冒泡排序,即这两周方式(大元素下沉或者小元素上浮)交替进行,先从底向上从无序区间冒出一个最小元素,再从上向底从无序区间冒出一个最大元素,这样交替进行,直至全部元素排序结束,屏幕显示每一趟排序结果。

并且要求可以多次使用菜单进行选择。

(十三)快速排序问题:

要求实现下面几个小问题

(1)提示用户输入数据

(2)快速排序

设计要求:

设计算法,首先屏幕上显示上述菜单,用户选择1时,提示用户从键盘随机输入无序元素存入数组中,至少输入10个元素。

用户选择2时,对数组中的元素进行快速排序,要求屏幕显示每一趟快速排序结果。

并且要求可以多次使用菜单进行选择。

所谓快速排序,基本思路是,在待排序的n个记录中任取一个记录(一般都是取第一个记录),通过一趟快排把该记录放入最终位置后,整个数据区间被此记录分割成了两个子区间。

所有关键字比该记录小的放在前子区间中,所有比它大的放在后子区间中。

并把该记录排在这两个子区间的中间。

这个过程成为一趟快速排序。

然后再分别对所有的两个子区间重复上述过程。

直至每个区间内只有一个记录为止。

(快速排序的思路请查阅《数据结构》相关书目)

(十四)直接插入和直接选择排序问题:

要求实现下面几个小问题

(1)提示用户输入数据

(2)直接插入排序

(3)选择排序

设计要求:

设计算法,首先屏幕上显示上述菜单,用户选择1时,提示用户从键盘随机输入无序元素存入数组中,至少输入10个元素。

用户选择2时,对数组中的元素进行插入排序,要求屏幕显示每一趟插入排序结果。

用户选择3时,对数组中的元素进行选择排序,要求屏幕显示每一趟选择排序结果。

并且要求可以多次使用菜单进行选择。

(直接插入排序、选择排序的思路请查阅《数据结构》相关书目)

(十五)希尔(shell)排序问题:

要求实现下面几个小问题

(1)提示用户输入数据

(2)希尔排序

设计要求:

设计算法,首先屏幕上显示上述菜单,用户选择1时,提示用户从键盘随机输入无序元素存入数组中,至少输入10个元素。

用户选择2时,对数组中的元素进行希尔排序,要求屏幕显示每一趟插入排序结果。

并且要求可以多次使用菜单进行选择。

希尔排序又称为缩小增量排序方法,把待排记录按下标的一定增量d分组,对每组记录采用直接插入排序方法进行排序,随着增量d逐渐减小,所分成的组包含的记录越来越多,到增量的值减小到1时,整个数据合为一个排好序的整体。

(希尔排序的详细思路请查阅《数据结构》相关书目)

(十六)二分查找问题:

设计要求:

二分查找算法也称为折半查找,是在有序序列中进行的查找方法。

所以数据存放在数组中必须要有序。

思路是,裆R[low…high]是当前查找区间时,首先确定该区间的中点位置mid=(low+high)/2,然后将待查的k值与R[mid]位置上的值进行比较。

详细思路请自己查阅《数据结构》相关书目。

在设计过程中,把每一趟中间点R[mid]的值与k值比较的情况(>、=、<)显示在屏幕上。

(十七)模式匹配问题:

要求实现下面几个小问题

(1)提示用户输入数据,建立两个串S和T

(2)进行模式匹配判断

设计要求:

模式匹配:

假设主串s和子串t(都是由字符构成的,每个串中可以包含空格,并且每个串的长度尽量长),分表放在两个一维数组中,m、n分别为他们的长度,判断t是否为s的子串,如果是子串,则求出t在s中的位置(第一个字符在s中的位置),如果不是子串,对用户进行提示。

并且要求可以多次使用菜单进行选择。

(十八)字符串操作问题:

要求实现下面几个小问题

(1)提示用户输入数据,建立一个字符串S

(2)在原来数组的空间上对字符串S进行逆置(即不允许额外利用辅助数组)

(3)提示用户输入某个元素,删除S中所有元素值为X的元素,并且显示结果

设计要求:

上述的几个问题用菜单的方式显示在屏幕上。

用户选择1时,提示用户进行键盘输入,至少输入10个元素。

用户选择2时,对数组中的元素进行逆置,并且显示逆置结果。

用户选择3时,提示用户输入某个数据X,并且删除串中所有的X,显示最终结果。

并且要求可以多次使用菜单进行选择。

(十九)顺序表操作问题:

要求实现下面几个小问题

(1)提示用户输入数据,建立一个顺序表,表中的数据可以是字符也可以是数值

(2)删除表中所有重复的元素(注意:

表中重复的元素肯定不止一个),并且使得剩余元素间的相对次序保持不变。

设计要求:

上述的几个问题用菜单的方式显示在屏幕上。

用户选择1时,提示用户进行键盘输入,至少输入10个元素。

用户选择2时,对顺序表进行操作,删除所有重复的元素。

并且要求可以多次使用菜单进行选择。

(二十)集合操作问题:

要求实现下面几个小问题

(1)提示用户输入数据,建立两个集合A和B(集合可以用数组表示)

(2)设计一个算法实现两个集合的求交集运算。

(3)设计一个算法实现两个集合的求并集运算。

设计要求:

上述的几个问题用菜单的方式显示在屏幕上。

用户选择1时,提示用户进行键盘输入,每个集合至少输入10个元素。

用户选择2时,对两个集合进行求交集运算,并且显示交集的结果。

用户选择3时,对两个集合进行求并集运算,并且显示并集结果。

并且要求可以多次使用菜单进行选择。

(十七)顺序表操作问题:

要求实现下面几个小问题

(1)提示用户输入数据,建立一个顺序表L,表中的数据可以是字符也可以是数值

(2)查找操作:

用户输入数值i,则返回顺序表中第i个元素的值

(3)插入操作:

用户输入数值j,则在顺序表中第j个位置上插入一个元素,由用户输入新元素的值。

显示插入后的结果

(4)删除操作:

用户输入数值m,则删除顺序表中第m个位置删除的一个元素。

显示删除后的结果。

设计要求:

上述的几个问题用菜单的方式显示在屏幕上。

用户选择1时,提示用户进行键盘输入,至少输入10个元素,建立顺序表。

用户选择2时,进行查找操作。

用户选择3时,进行插入操作,并且显示插入后新的顺序表的结果。

用户选择3时,进行删除操作,并且显示删除后的结果。

并且要求可以多次使用菜单进行选择。

(二十一)二维数组问题:

求马鞍点

二维数组的马鞍点:

如果矩阵A中存在这样的一个元素A[I,j]满足条件:

A[i,j]是第i行中值最小的元素,并且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。

请编写程序计算出m*n的矩阵A的所有马鞍点。

要求实现如下几个小问题:

(1)建立m*n的二维数组,提示用户输入m、n以及各个具体二维数组元素

(2)求马鞍点,并且打印出马鞍点所在的行、列值以及具体数据值。

设计要求:

上述的几个问题用菜单的方式显示在屏幕上。

用户选择1时,提示用户进行键盘输入,至少输入10个元素,建立二维数组。

用户选择2时,求马鞍点,并且打印出相关的具体信息。

并且要求可以多次使用菜单进行选择。

(二十二)设计一个多功能计算软件

实现功能:

1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。

依次输入运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果。

结果可以作为下一个运算的第一运算数。

按‘C’清屏,按‘R’返回菜单。

例如:

输入:

2

+

5

输出:

7

2)实现单运算符表达式计算的功能。

输入的操作数可以包含整数或浮点数。

输入表达式如下:

例如:

输入:

2+5

输出:

7

四、数据结构课程设计及报告撰写要求

报告要求(参考附录样本)

(一)纸张与页面要求

1.采用国际标准A4型打印纸或复印纸,纵向打印。

2.页面行距及字形、字号按照下面模板书写。

3.图表及图表标题按照模板中的表示书写。

(二)课设报告书的内容应包括以下各个部分:

(按照以下顺序装订)

1.封页(见课设模版)

2.任务书(学生教师均要签字,信息填写完整)

3.正文一般应包括以下内容:

1)题目介绍和功能要求(或描述)

课程设计任务的详细描述(注意不能直接抄任务书),将内容做更详细的具体的分析与描述;

2)系统功能模块结构图

绘制系统功能结构框图及主要模块的功能说明;

3)使用的数据结构的描述:

数据结构设计及用法说明;

4)涉及到的函数的描述;

5)主要算法描述(程序流程图)

6)给出程序测试/运行的结果

设计多组数据加以描述(包括输入数据和输出结果)

7)课程设计的总结及体会

8)参考文献

格式要求:

[1]作者,等.书名.出版地:

出版社,出版年

4.附录:

程序清单(应带有必要的注释)

 

附录:

《课程设计》报告

 

课题名称:

简易计算器应用程序

专业:

班级:

学号:

姓名:

指导教师:

成绩:

 

 

目录

1前言1

2需求分析2

3概要设计(特殊功能)2

4详细设计2

5源代码及调试3

6特殊问题解决方法9

7使用说明及测试结果10

8结论10

9总结与体会11

10参考文献12

1前言

1.1课题简介

课程设计题目名称:

简易计算器应用程序

课程设计目的:

通过《数据结构》课程的学习,将数据结构应用在具体的编程方面,更加了解课程所学习的内容及思维逻辑。

课程设计意义:

利用数据结构课程设计,了解学生对《数据结构》的理解和加强学生对数据结构方面的应用知识。

希望今后学生好好利用数据结构的知识和思想,解决各方面的编程难题。

课程设计内容:

实现简单的加、减、乘、除四则运算,如实现括号的功能更佳。

课程设计预期实现效果:

能实现简单的加、减、乘、除四则运算,并实现次方、括号的运算功能。

 

1.2方案及其论证

语言:

C++

运行环境:

MicrosoftVisualC++6.0

可行性分析:

模拟一个小型的计算器界面,能够输入数学表达式并计算出表达式的结果。

设计进度安排:

第一天

第二天

第三天

第四天

第五天

设计计算器界面,查找资料

完成初步的程序设计

查资料解决调试中的问题

答疑,改进程序

验收并完成报告

 

2需求分析

这个系统使用对象为需要简单的四则运算的人或事物,如小学生,零售商,会计人员等。

系统需要满足的要求1、加减乘除四则运算。

2、满足常用的次方运算,如52,43,10。

3、能实现括号优先运算的功能。

根据第一个要求,系统实现是没有问题的,简单易行;第二个要求可以通过运算符号来实现,也是简单易行的;第三个要求实现较为困难,需要通过严密的思维逻辑一一实现完成,是本次编程的重难点。

 

3概要设计(特殊功能)

对于本次编程的概要设计,有如下内容:

功能设计1:

构建对象doubleresultadd来实现四则运算的基本功能。

功能设计2:

构建对象inttokenprocess实现字符与数字间的转化问题。

功能设计3:

完成以上两个功能后,通过添加完善程序的括号功能,注意前后的衔接问题;如果在改功能上有困难,可以暂时放弃该功能的实现,因为在一般计算器中,很少遇到加括号运算的功能。

 

4详细设计

流程图:

输入表达式——>将字符转化成数字——>输出表达式——>判断表达式是否有误——>计算表达式——>输出结果——>是否继续计算——>退出计算器

(流程图本想以图表、箭头的形式呈现出来,但是由于技术限制,一直未能达到理想的版本,只好以简单的文字说明一下,忘谅解。

5源代码及调试

程序代码

#include

#include//等待一个字符

#include//数学

#include//文件读写

#include//输入,输出函数

ofstreamout("简单计算器.txt");

intresultprocess(charmexp[],double*result);

inttokenprocess(charmexp[],doublenum[],charsigns[]);

doubleresultadd(doublenum[],charsigns[],intsp);

voidmain()

{

charmexp[100],conti;

doubleresult=0;

whi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1