数据结构课程设计汇总

2023-02-21

第一篇:数据结构课程设计汇总

《数据结构课程设计》课程设计教学大纲

Course Design of Data Structure

课程代码:

适用专业:信息计算、信息安全 总学时数:1周

编写年月:2004年7月

执 笔:刘科峰、李小英、高学军

课程性质:设计(论文)/必修 开课学期:5 总学分数:1 修订年月:2007年7月

一、课程设计的性质和目的

《数据结构课程设计》是本学院本科专业的集中实践性环节之一,是学习完《数据结构》课程后进行的一次全面的综合应用练习。其目的就是要达到理论与实际相结合,使学生能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养良好的程序设计技能。

二、课程设计内容及学时分配

写出不少于3000字的课程设计说明书。说明书中除了在封面中应有题目、班级、姓名、学号和课程设计日期以外,其正文一般有如下几个方面的内容:

1. 需求分析 2. 概要设计 3. 详细设计 4. 调试分析 5. 测试结果 6. 附录或参考资料

三、课程设计教学基本要求

四、课程设计选题

根据教材《数据结构题集(C语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,或选择下列与实际应用紧密结合的较综合性的题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。

1. 运动会分数统计系统; 2. 停车场管理系统; 3. 民航售票系统; 4. 有理数四则运算器; 5. 文本格式化器; 6. 哈夫曼编/译码器; 7. 教学计划编制; 8. 计算机辅助考核系统;

9. 学籍管理系统; 10. 图书管理系统。

五、本课程与其它课程的联系与分工

本课程是《数据结构》的配套课程,学完《数据结构》后进行的综合性课程设计。

六、成绩评定

由指导教师根据学生完成任务的情况、课程设计说明书的质量和课程设计过程中的工作态度等综合打分。课程设计结束时,要求学生写出课程设计报告,可运行的软件系统(包括源程序)。课程设计成绩:上机情况(20%)包括出勤情况、调试表现。设计报告占40%,设计作品占40%。

成绩评定实行优、良、中、及格和不及格五个等级。优秀者人数一般不得超过总人数的20%。不及格者不能得到相应的学分,需重新做课程设计,经指导教师考核及格后,方可取得相应学分。有关的考查相关材料(文字材料以及磁盘或光盘)统一妥善保管。

七、建议教材与教学参考书

[1] 《数据结构》,严蔚敏 吴伟民 编著,清华大学出版社

[2] 《数据结构题集》严蔚敏 吴伟民 米宁 编著,清华大学出版社

第二篇:数据结构课程设计

一、考核方法和内容

根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。

评分标准:

优秀:答辩所有问题都能答出+报告良好

报告良好+实现“提高部分”的功能;

良好:答辩所有问题都能答出+报告一般;

报告一般+实现“提高部分”的功能;

中等:答辩大部分问题能答出+报告良好; 及格:答辩大部分问题能答出+报告一般; 以下四种,都不及格:

1)答辩几乎答不出问题; 2)报告几乎都是代码; 3)雷同部分达到60%;

4)课设报告与数据结构和c/c++关联不大。

课设报告的装订顺序如下:

任务书(签名,把题目要求贴在相应位置,注意下划线)-----目录(注意目录的格式,页码)-----

1、设计任务(题目要求)-----

2、需求分析(准备选用什么数据逻辑结构?数据元素包含哪些属性?需要哪些函数?为什么要这样设计?最后列出抽象数据类型定义)-----

3、系统设计(设计实现抽象数据类型,包含选择什么物理存储方式?数据元素的结构体或类定义,以及各函数的设计思路,算法,程序流程图等)----

4、编码实现(重要函数的实现代码)-----

5、调试分析(选择多组测试数据、运行截图、结果分析)-----

6、课设总结(心得体会)-----

7、谢辞-----

8、参考文献;

课设报告打印要求:

B5纸张打印,报告总页数控制在10—15页内,报告中不能全是代码,报告中代码总量控制在3页内。 版式:无页眉,有页码,页码居中

字号:小四,单倍行距

字体:宋体+Times new Romar 截图:截图要配图的编号和图的题目,如:“图1 Insert函数流程图”

二、课程设计的题目

1.长整数的加法运算

2.通讯录管理系统的设计与实现——顺序表 3.广义表的应用

4.学生成绩管理系统的设计与实现 5.家谱管理系统的设计与实现 6.集合的并、交和差运算的程序 7.运动会分数统计 8.一元多项式计算器 9.文章编辑

10.哈夫曼树及其编码 11.校园导游咨询

12.通讯录管理系统的设计与实现——单链表 13.地图着色问题 14.内部排序算法比较 15.火车售票系统 16.图书管理系统

17.客户消费积分管理系统 18.产品进销存管理系统 19. 迷宫求解 20.通讯录管理系统的设计与实现——哈希表---线性探测再散列 21.语言中平衡符号的问题 22.算术表达式求解 23.数制转换问题 24.九宫格问题 25.停车场管理

26.关键路径问题

27.通讯录管理系统的设计与实现——哈希表——链地址法 28.歌星大奖赛 29.病人就医管理

30.简单目录管理系统的设计与实现 31.最短旅程的求解

32.通讯录管理系统的设计与实现——哈希表——二次探测再散列 33.宿舍管理查询软件

34.表达式求值,并能给出分数,可供小学生作业练习的小程序 35.服装销售系统

36.机房机位预约模拟系统 37.歌曲信息管理系统 38.学生点名系统 39.猜数游戏

三、数据结构课程设计的具体内容(想要优,必须实现“提高部分”的功能,其他,不用完成“提高部分”)

要求:全部采用数据结构课程中的内容实现,采用C或C++实现,逻辑结构只能选线性结构、树型结构、图型结构、集合结构中的一种,不能用数据库。

1.长整数的加法运算

基本要求:设计一个实现任意长的整数进行加法、减法运算的演示程序。

⑴利用链表实现长整数的存储,每个结点含一个整型变量。提醒:任何整型变量int的范围是-(2^15-1)~(2^15-1)。

⑵输入和输出形式按照中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 如:-2345,6789,3211;

⑶演示程序以用户和计算机的对话方式执行,可进行多次运算。

提高部分:增加利用顺序表存储结构来实现长整数的加、减和输出功能。 2.通讯录管理系统的设计与实现——顺序表

基本要求:利用顺序表完成通讯录的一般性管理工作。其中,每条记录至少包括姓名、手机号、QQ、电子邮箱、地址等信息。功能主要包括: (1)添加信息:可新增人员信息;

(2)显示信息:可以按照手机号或联系人的姓名拼音排序显示; (3)查找:用名字和手机号分别作为查找的依据,进行查找; (4)编辑信息:修改完善人员信息; (5)删除信息:删除人员信息;

(6)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。 提高部分:利用外部.txt文件同步存储通讯录信息。

3.广义表的应用

基本要求:要求实现的广义表的建立、查找、输出、取表头和取表尾以及求深度等。 演示程序以用户和计算机的对话方式执行,并可进行多次交互。 用一个主控菜单程序控制,共分为6个子功能。 (1)建立广义表 (2)输出广义表 (3)结点的查找 (4)求广义表表头 (5)求广义表表尾 (6)求广义表的深度。(7)求广义表的长度。 提高部分:利用外部.txt文件输入数据信息建立广义表。 4.学生成绩管理系统的设计与实现

基本要求:能够实现对学生成绩的常用管理功能。 ⑴采用一定的存储结构对学生成绩进行管理;

⑵可以进行成绩的录入、查询、修改、删除等操作; ⑶可以查询某门课程的平均分,学生的排名,不同分数段的学生人数及学生信息等; ⑷可以查询某学生的各课程分数,总分及学生的班级排名等; ⑸可以按学号排序输出全部学生的成绩信息、总分及班级排名等。 ⑹演示程序以用户和计算机的对话方式进行。

提高部分:利用外部.txt文件同步存储学生成绩信息。 5.家谱管理系统的设计与实现

基本要求: 设计并实现一个简单的家谱管理系统。 (1)建立家族关系树,并能存储到外部文件中。 (2)实现家族成员的添加、删除功能。

(3)可以查询家族成员的双亲、祖先、兄弟、 孩子和后代等信息。 (4)按某种顺序输出家谱信息(树的遍历操作)、以树型结构输出家谱资料等功能。 (5)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

提高部分:通过读取外部.txt文件,建立家族关系树,添加和删除后的结果同步到外部文件。 6.集合的并、交和差运算的程序

基本要求:编制一个能演示执行集合的并、交和差运算的程序。

(1)集合的元素限定为大小写字母符[′a′….′z′′A′….′Z′],集合的大小n<53。 (2)集合输入的形式为一个以"回车符"为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法字符,程序应能自动滤去非法字符和重复字符。

(3)输出的运算结果字符串中将不含重复字符或非法字符。

(4)演示程序以用户和计算机的对话方式执行,可多次进行运算。 提高部分:采用顺表和链式两种存储结构实现。

7.运动会分数统计 基本要求:

参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,积分分别为11,7,4,2,1;有些项目只取前三名,积分分别为5,3,2。哪些项目取前五名或前三名在输入比赛结果时自己设定。写一个统计程序产生各种成绩单和得分报表。

(1)各项目结束时,输入项目编号、所有运动员的姓名、学校名称和比赛名次(成绩),并对前三名或前五名的运动员所在团体和学校,记录比赛积分;

(2)产生每个学校的成绩单,内容包括该学校所取得的每项成绩的项目号、运动员姓名、名次(成绩),并统计学校总分;

(3)实现按学校编号查询学校的比赛情况,查询结果包含参加各项目的项目编号、运动员姓名、取得的名次、比赛的积分、学校总分、团体总分等;

(4)实现按项目编号查询取得前三或前五名的学校的名称; (5)演示程序以用户和计算机的对话方式执行,可多次操作。

提高部分:实现按学校编号排序输出(至少包括学校排名,学校编号,学校名称,学校总分);按男团总分排序输出(至少包括男团排名,学校名称,男团总分);按女团总分排序输出(至少包括女团排名,学校名称,女团总分); 8.一元多项式计算器 基本要求:

设有一元多项式Am(x) 和Bn(x).

Am(x) = A0+A1x1+A2x2+A3x3+… +Amxm

Bn(x) = B0+B1x1+B2x2+B3x3+… +Bnxn

试求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x)。

⑴首先判定多项式是否稀疏;

⑵要求结果M(x)中无重复阶项和无零系数项; ⑶要求输出结果的升幂和降幂两种排列情况。

⑷演示程序以用户和计算机的对话方式执行,可进行多次运算。 提高部分:采用顺表和链式两种存储结构实现。 9.文章编辑

基本要求:输入一页文字,可以统计出文字、数字、空格的个数。

(1)利用外部.txt文件存储一页文章,每行最多不超过80个字符,共N行。 (2)分别统计出其中英文字母和空格数及整篇文章总字数。 (3)统计某一字符串在文章中出现的次数,并输出该次数。

(4)删除某一子串,并将后面的字符前移,对文章的修改,同步到.txt文件中。 提高部分:采用顺表和链式两种存储结构实现。 10.哈夫曼树及其编码

基本要求:设计一个利用哈夫曼算法的编码系统。

⑴初始化:利用外部.txt文件输入字符集大小n、n个字符和n个权值,建立哈夫曼树; ⑵编码:利用建好的哈夫曼树生成哈夫曼编码; ⑶输出哈夫曼树及哈夫曼编码;

⑷演示程序以用户和计算机的对话方式执行,重复地显示并处理以上三个项目,直到选择退出为止。 假设字符集及频度如下表:

字符

空格 A

B

C D

E

F G

H

I

J K L M 频度

197 64 13 22 32 103 21 15 47 57 5 1 20 32 字符

N O

P Q

R

S

T U V W X Y Z 频度

57 63 1 15 48 16 80 23 8 18 1 51 1 提高部分:输出树形的哈夫曼树。//////进行编码和译码 11.校园导游咨询

基本要求:设计一个校园导游程序,为来访的客人提供各种信息查询服务。 ⑴设计华东交通大学南区的校园平面图(无向图),所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。 ⑵为来访客人提供图中任意景点相关描述信息的查询。

⑶为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的最短路径。 提高部分:查询任意两个景点之间的所有路径。 12.通讯录管理系统的设计与实现——单链表

基本要求:利用单链表完成通讯录的一般性管理工作。其中,每条记录至少包括姓名、手机号、QQ、电子邮箱、地址等信息。功能主要包括: (1)添加信息:可新增人员信息;

(2)显示信息:可以按照手机号或联系人的姓名拼音排序显示; (3)查找:用名字和手机号分别作为查找的依据,进行查找; (4)编辑信息:修改完善人员信息; (5)删除信息:删除人员信息;

(6)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。 提高部分:利用外部.txt文件同步存储通讯录信息。 13.地图着色问题 基本要求:

设计地图着色软件,对江西地图中11个地级市进行着色,要求相邻地级市所使用的颜色不同,并保证使用的颜色最少。

⑴地图采用图型数据结构,每个地级市为一个节点,边表示对应的两个地级市相邻。 ⑵设计着色算法,保证邻接点不是同一种颜色。 ⑶输出着色结果。

⑷演示程序以用户和计算机的对话方式进行。

提高部分:利用外部.txt文件输入地图数据,并把着色结果追加到.txt文件内。 14.内部排序算法比较

基本要求:试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 ⑴至少采用三种方法实现对同一组数据的排序(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。

⑵待排序表的表长不小于100,其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。 ⑶最后对结果作出简单分析,包括对各组数据得出结果波动大小的解释。 ⑷演示程序以用户和计算机的对话方式进行。

提高部分:利用外部.txt文件存储各次排序的数据、排序的结果、结果的简单分析。 15.火车售票系统 基本要求:

通过此系统可以实现售票、退票、车票剩余情况查询等功能。每张车票包含车次、车厢、座位信息。 ⑴在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、车厢、座位情况。 ⑵为简单起见,在此假设所有出售的车票均为同一车次的车票。同一车次,有多个车厢,每个车厢有多个座位。

⑶购票时,可以显示余票信息,并可以选择买哪张票。

⑷退票时,必须是车站售出的车票才能退,否则视为无效票,不能退票,而且退票可以再次销售。 ⑸演示程序以用户和计算机的对话方式进行。

提高部分:利用外部.txt文件同步存储车票的余票和已售票信息。 16.图书管理系统

基本要求:设计一个计算机管理系统完成图书管理基本业务。

⑴每种书的登记内容包括书号、书名、著作者、现存量、库存量和借阅信息; ⑵对书号建立索引顺序表以提高查找效率; ⑶系统主要功能如下:

①采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加; ②借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量; ③归还:注销对借阅者的登记,改变该书的现存量。 ⑷演示程序以用户和计算机的对话方式进行。 提高部分:利用外部.txt文件同步存储图书信息。 17.客户消费积分管理系统 基本要求:针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。 ⑴采用一定的存储结构进行客户信息的存储; ⑵对客户的信息可以进行修改、删除、添加; ⑶能够根据消费情况进行客户积分的累加;

⑷根据积分情况,对客户实行不同程度的打折优惠; ⑸演示程序以用户和计算机的对话方式进行。

提高部分:利用外部.txt文件同步存储客户和积分信息。 18.产品进销存管理系统

基本要求:针对某一种行业的库房产品进行进销存情况的管理。 ⑴采用一定的存储结构对库房的货品及其数量进行分类管理;

⑵可以实现进库房时,产品类的添加、产品的添加、产品数量的添加; ⑶能够查询库房每种产品的总量、进货日期、销出数量、销售时间等; ⑷可以实现产品出库房时,产品数量修改以及达到临界值提醒的功能; ⑸演示程序以用户和计算机的对话方式进行。

提高部分:利用外部.txt文件同步存储库房产品的详细信息。 19. 迷宫求解

基本要求:以一个m*n的长方阵表示迷宫,设置两个门,一个入口,另一个是出口。设计一个程序,对任意随机生成的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 ⑴首先实现一个栈类型,然后编写一个求解迷宫的非递归程序。

⑵求得的通路以三元组(i,j,d)的形式输出,其中(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。 ⑶输出迷宫图,以#号表示障碍物,„ ‟空格表示非障碍物,*表示通路。 提高部分:同时实现递归和非递归两种求解算法。

20.通讯录管理系统的设计与实现——哈希表---线性探测再散列

基本要求:利用哈希表完成通讯录的一般性管理工作。其中,每条记录至少包括姓名、手机号、QQ、电子邮箱、地址等信息。分别以电话号码和用户名为关键字建立不同的哈希表。功能主要包括: (1)添加信息:可新增人员信息;

(2)显示信息:按照哈希表的存储位置信息排序显示;

(3)查找:用名字和手机号分别作为查找的依据,进行查找; (4)编辑信息:修改完善人员信息; (5)删除信息:删除人员信息;

(6)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。 提高部分:利用外部.txt文件同步存储通讯录信息。 21.语言中平衡符号的问题

基本要求:设C语言程序代码中包含如下符号/* */,(),[],{},编写程序检测一段C代码中上述符号是否正确,并指出错在哪里。

提高部分:建立外部文件存储需要检测的c代码。 22.算术表达式求解 基本要求:给定一个算术表达式,通过程序求出最后的结果。 (1)从键盘输入要求解的算术表达式;

(2)采用栈结构进行算术表达式的求解过程;

(3)能够判断算术表达式正确与否;对于错误表达式给出提示;对于正确的表达式给出最后的结果,并可以显示运算的整个过程。

(4)演示程序以用户和计算机的对话方式进行。 提高部分:建立外部.txt文件存储全部运算过程。 23.数制转换问题

基本要求:任意给定一个M进制的数x,实现如下要求: (1) 求出此数x的10进制值;

(2) 实现对X向任意的一个非M进制数的转换;

(3) 至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决); (4) 提供交互界面,以便人机交互。

提高部分:必须实现进制M大于16的情况。 24.九宫格问题

基本要求:在一个3×3的九宫格中有1—8这8个数字,混乱排序,一个空格随机地摆放在一个格子里,九宫格布局随机生成。现要求将该九宫格调整为正常按逆序的格式。调整的规则是:每次只能将与空格(上、下或左、右)相邻的一个数字平移到空格中。编程实现这一问题的求解,并输出求解过程。 提高部分:利用外部.txt文件同步记录九宫格的初始布局及求解过程。 25.停车场管理

基本要求:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端);若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上依次等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场;每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

(1)为停车场编制按上述要求进行管理的模拟程序。 (2)可随时查询停车场内及便道的停车情况。

(3)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。 提高部分:利用外部.txt文件同步记录所有数据。 26.关键路径问题 基本要求:

设计一个程序,求出完成整项工程至少需要多少时间,以及整项工程中的关键活动。

(1)从键盘输入一个描述工程的AOE网,并判断其是否能够顺利进行。

(2)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。

(3) 界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。 提高部分:利用外部.txt文件同步记录所有数据。

27.通讯录管理系统的设计与实现——哈希表——链地址法

基本要求:利用哈希表完成通讯录的一般性管理工作。其中,每条记录至少包括姓名、手机号、QQ、电子邮箱、地址等信息。分别以电话号码和用户名为关键字建立不同的哈希表。功能主要包括: (1)添加信息:可新增人员信息;

(2)显示信息:按照哈希表的存储位置信息排序显示;

(3)查找:用名字和手机号分别作为查找的依据,进行查找; (4)编辑信息:修改完善人员信息; (5)删除信息:删除人员信息;

(6)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。 提高部分:利用外部.txt文件同步存储通讯录信息。 28. 歌星大奖赛 基本要求:

(1)在歌星大奖赛中,每位歌手演唱完,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。歌手的人数在大奖赛开始时键盘输入。 (2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。 (3)保存每位歌星比赛时的所有评委分数,包括最高分,最低分和最后得分,并在比赛过程的任意时刻,都可对当前比赛结果排序输出;

(4)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。 提高部分:利用外部.txt文件同步记录所有数据。 29. 病人就医管理

基本要求:编写一个程序实现就医管理。在病人就医过程中,主要发生三件事:

⑴预检,分科室,挂号。不同科室都是从1号开始挂号。如,内科1号,外科1号,眼科1号等; ⑵病人到达诊室,将病历本交给护士,排到等待队列中候诊,不同科室,不同队列。 ⑶护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。 程序采用菜单方式,其选项及功能说明如下: ⑴挂号------预检,分科室,生成就诊号。

⑵排队------输入病人的就诊号,加入到不同科室的病人排队队列中。 ⑶就诊-------病人排队队列中最前面的病人就诊,并将其从队列中删除。 ⑷查看排队------从队首到队尾列出所有的排队病人的病历号。 ⑸下班---------退出运行。

提高部分:利用外部.txt文件同步记录所有就诊数据。 30.简单目录管理系统的设计与实现

基本要求:利用树型结构设计并实现一个简单的目录管理系统。功能主要包括: (1)系统可以对所有目录进行管理,类似C盘、D盘、E盘;

(2)实现子目录和文件的新建、删除、查询、子目录和文件名称修改等功能; (3)按某种顺序输出所有子目录及文件信息(树的遍历操作); 提高部分:以树型结构输出所有子目录和文件的信息。 31.最短旅程的求解

基本要求:有n个城市(编号从1到n),它们之间通过双向的道路相连。那里只有n-1条道路,但是,它们的连接方式使得从任意城市都可以走到其他的任何城市。 一天,某个游客到了编号为k的城市。他计划从城市k开始,游遍所有的城市m1,m2,m3……,mi,…(不一定要按这个顺序旅游)。每个城市mi都是不同的,并且,也与k不同。他想要以最短的路程旅行完所有的城市(从城市k开始)。求旅游完上述的城市最短需要多少路程。 提高部分:输出最短旅程的详细旅游路线。

32.通讯录管理系统的设计与实现——哈希表——二次探测再散列

基本要求:利用哈希表完成通讯录的一般性管理工作。其中,每条记录至少包括姓名、手机号、QQ、电子邮箱、地址等信息。分别以电话号码和用户名为关键字建立不同的哈希表。功能主要包括: (1)添加信息:可新增人员信息;

(2)显示信息:按照哈希表的存储位置信息排序显示;

(3)查找:用名字和手机号分别作为查找的依据,进行查找; (4)编辑信息:修改完善人员信息; (5)删除信息:删除人员信息;

(6)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。 提高部分:利用外部.txt文件同步存储通讯录信息。 33.宿舍管理查询软件

基本要求:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: (1)采用交互工作方式;

(2)可以增加、删除、修改信息;

(3)可实现按关键字(姓名、学号、房号)进行排序显示;

(4) 查询:a.按姓名查询 、b.按学号查询 、c.按房号查询,输出任一查询结果(可以连续操作)。 提高部分:建立外部.txt文件,同步宿舍全部人员的数据,并按关键字房号排序存储。 34.表达式求值,并能给出分数,可供小学生作业练习的小程序 基本要求:

⑴建立试题库文件,从文件中,随机抽取n个题目; ⑵题目涉及加减乘除,带括号的混合运算; ⑶随时可以退出程序;

⑷保留历史分数,能回顾历史,给出与历史分数比较后的评价;

⑸界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

提高部分:保存所有曾经练习过的题目、输入的答案及对错到外部.txt文件。 35.服装销售系统

基本要求:包含三类用户:管理员、店长、销售员;

(1)管理员功能:自身密码修改;其他用户的添加、删除;用户信息的修改、统计;商品信息的添加、修改、删除、查找、统计。

(2)店长功能:登录、注销、自身密码修改、自身信息修改;商品信息的修改、统计;查看日报表、月报表、商品销售量报表、营业员业绩报表;查找、浏览、修改商品储备信息。

(3)销售员功能:商品浏览、查找、出售商品,以及查看自己本日报表、本月报表。 (4)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。 提高部分:利用外部.txt文件同步记录所有数据。 36.机房机位预约模拟系统

基本要求:20台机器,从早8点到晚8点,每两个小时一个时间段。实现如下功能: (1)查询,根据输入时间,输出当前全部机位信息和可用空闲机位信息;

(2)机位预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近时间段的空机信息。另外,如果用户要求在非空时间上机,则将用户信息插入该时间段的等待列表。 (3)退出预定,根据输入的时间撤销该时间的预定。

(4)查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息。 提高部分:利用外部.txt文件同步记录所有数据。 37.歌曲信息管理系统 基本要求:

(1)歌曲信息包括歌曲名、作者、演唱者、发行年月等。 (2)可以对歌曲信息进行输入、删除、编辑、浏览。 (3)可以根据歌曲名、作者、演唱者查询歌曲信息。 (4)提供按作者分组显示功能。

提高部分:利用外部.txt文件同步记录所有数据。 38.学生点名系统 基本要求:

(1)读入外部文件存储的学生信息,包括姓名,学号; (2)可选择学生班级,对不同班级的学生分别进行点名;

(3)对学生按在班编号显示名字,进行点名,接收键盘输入的点名时间和能代表缺课、请假、正常的点名信息;

(4)查询各班学生的历史点名信息。 (5)提供交互界面,以便人机交互。

提高部分:利用外部.txt文件同步记录所有数据。 39.猜数游戏

基本要求:开始游戏后,输入用户名,由计算机随机“想”一个数,并给出数值范围,请人猜,如果人猜对了,则一局游戏结束,进入下一局。否则,计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。计算机记录游戏者每次猜的次数,以此反映出猜数者“猜”的水平。

(1)把猜数记录最好的前五名的数据保存在一定的存储结构里,包括游戏者的名字,成绩和排名,并排序输出,每个用户只取最好成绩存储。 (2)提供交互界面,以便人机交互。

提高部分:利用外部.txt文件同步记录所有数据。

--------

四、教学目的和要求

课程设计是加强学生实践能力的一个强有力手段。综合课设1主要针对数据结构和c/c++语言开展的实践性课程。要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C(C++)程序并上机调试的基本方法。课程设计要求学生在完成程序设计的同时能够写出比较规范的课程设计报告。培养学生综合运用所学理论知识解决复杂实际问题的实践能力、研究性学习能力和团队合作能力。

五、课程设计要求

1、选好题目:每题一人,每班每个题目只允许一人选做,学习委员将选题情况在课设第一天统计上交。

2、课设报告独立思考,独立完成:课设报告出现雷同超过60%,不论什么原因,一律不及格。

3、做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。

4、设计要点:

⑴需求分析:

在该部分中叙述总共几个模块,每个模块的功能要求。

⑵系统设计

总体设计:定义某个数据结构的抽象数据类型及其他算法的功能说明。

详细设计:在此定义存储结构,每个部分的算法设计说明(建议描述算法采用流程图)。 ⑶编码实现

各个算法实现的源程序,对每个题目要有相应的源程序(每个功能模块采用不同的函数实现)。源程序要按照程序的规则来编写,要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 程序能够运行,要有基本的容错功能,尽量避免出现操作失误时出现死循环。 ⑷调试分析

给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来。时间复杂度分析,每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。

⑸课设总结:课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。

5、实现的结果必须进行检查和演示;程序源代码和程序的说明文件必须上交,作为考核内容的一部分;(上交时文件夹的取名规则为:“课设题目(***设计完成)”,如“资源管理系统的设计与实现(张三设计完成)”。该文件夹下包括三个目录:“源代码”、“可执行文件”、“张三_课程设计报告”。由学习委员按规定时间统一上交)。

6、报告提交

形式: 纸介质(要求B5纸张打印,加封皮)和电子文档。

第三篇:数据结构课程设计

河海大学计算机与信息学院(常州)

数据结构课程设计

课程设计题目:

多 项 式 问 题

专业 、 年级:计算机科学与技术09级 学

号:

0962810226

名:

目 录

一、问题描述-------------3

二、需求分析-------------4

三、概要设计-------------4 1.概要设计目的与要求--4 2.概要设计内容--------4 3.功能算法描述与数据结构说明-------------------------5

四、详细设计-------------5

五、系统测试-------------8

六、使用说明-------------9

七、总结及心得体会 -----10

多项式问题

一.问题描述

给你九个整数,这九个整数分别是x的8次方至0次方的系数,请你按照多项式的一半形式合理地构造(去除不必要的)。例如九个系数分别是为0,0,0,1,22,-333,0,1,-1,你要构造并输出一行多项式:x^5 + 22x^4 – 333x^3 + x – 1。

它的格式规则如下:

1.多项式的项必须按其指数从高到低排列。 2.指数必须跟在符号“^”后显示。 3.有常数的只显示常数项(无需跟x^0)。

4.只显示系数不为0的项;若系数全为0,需显示常数项。

5.在多项式中唯一需要空格的地方是项与项之间的加号或减号的两边需加上空格。

6.如果首项的系数是正数,则系数前不加符号;如果首项的系数是负数,则符号与数字之间不加空格,就如:-3x^2 + -2x。

7.系数为1,指数为0时,系数的1才显示(推广到系数为-1)。

输入/输出说明

1.输入/输出方式为文件方式,输入文件有一行或多行的系数,系数之间有空格分隔。

2.每行共有九个系数,每个系数的绝对值为小于1000的整数。输出文件包含构造完地多项式,每行一个多项式。

输入范例

0 0 0 1 22 -333 0 1 -1 0 0 0 0 0 0 -55 5 0

输出范例

x^5 + 22x^4 – 333x^3 + x – 1 -55x^2 + 5x

二.需求分析

2.1可行性研究

该程序主要从技术的角度来分析可行性。技术上的可行性研究主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。该系统采用了Windows 7操作系统结合Visual C++ 6.0等软件开发平台已成熟可行。硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,其硬件平台也比较能满足此系统的需要。

2.2结构与主要功能模块

从实现多项式输出过程的角度来分析,至少需要这样一些子功能模块。如: 1. 多项式创建功能;

2. 多项式输出功能;

3. 释放多项式功能;

4. 操作界面显示功能;

三.概要设计

1.概要设计目的与要求

通过多项式程序设计,使我们进一步掌握和利用C++语言进行结构化程序设计的能力;进一步理解和运用结构化程设计的思想和方法;初步掌握开发一个小型系统程序设计的基本方法;学会调试一个较长程序的基本方法;以及掌握书写课程设计开发文档的能力(书写课程设计报告)。总之,通过本课程设计加深对《C++语言》及《数据结构》课程所学知识的理解,进一步巩固C++语言语法规则,在程序中体现出算法的思想,提高程序的运行效率。学会编制结构清晰、风格良好、数据结构适当的C++语言程序,从而具备解决综合性实际问题的能力。

2.概要设计内容

多项式输出程序具有以下基本功能:

1.创建多项式。接收输入的数据,并保存到链表中。

2.Txt文档输入输出功能。

3. 清除内存内容,释放创建的链表,退出程序。

3.功能算法描述与数据结构说明

该多项式程序除了main()函数外,主要有以下函数:

node *CreatePolyn()

void firstnode(node *p)

void othernode(node *p)

void PrintPolyn(node *Pa)

void deletechain(node *h)

下面对这些函数逐一介绍。 ①.main()函数

main函数主要调用其他函数,用来实现输入、显示功能。

在main()函数中,定义一维数组p[]用来保存多项式的系数,Pa定义程序所需链表的头指针。在程序开始要求输入多项式的系数,随后创建链表以保存多项式,再显示出构建的符合要求的多项式。 ②.node *CreatePolyn() 该函数功能是创建新的多项式链表。使用for语句,控制输入多项式的每一项。

③.void firstnode(node *p) 该函数功能是判断输出多项式第一项。对于第一项的系数为1或-1,指数为0或-1等五种情况进行讨论。 ④.void othernode(node *p) 该函数功能是判断输出多项式除第一项外的其它项。对于第一项的系数为1或-1,指数为0或-1等五种情况进行讨论。 ⑤.void PrintPolyn(node *Pa) 该函数功能:显示构造的符合要求的多项式链表。在该函数中调用③、④函数,进行多项式的输出。 ⑥.void deletechain(node *h) 该函数的功能是释放掉创建的链表,释放内存。 。

四.详细设计

下面讨论重要函数具体实现过程:

1. node *CreatePolyn() 定义int i=9计数,当i>0时,for语句反复提示用户输入该多项式的每一项的指数。当i=1时,输入完毕,该链表也创建完毕。详细的实现过程如下:

node *CreatePolyn() { node *head,*pa,*s; int i;

pa=head=new node;//创建一个新的结点

head->next=NULL;

for (i = 9; i >0;i--) // 依次输入9项

{

s=new node;

s->next=NULL;

s->coef = p[9-i];

s->exp=i-1;//x指数从8递减到0

if(s->coef !=0)//系数不为零时,结点p链接s

{

pa->next=s;

pa=s;

} } return head; } 2. void firstnode(node *p) 对多项式第一项输出可能性进行多种分类讨论。

void firstnode(node *p)//输出多项式第一个结点 { //指数不为1且不为0,系数绝对值不为1(正常的输出) if(p->exp!=1&&p->exp&&fabs(p->coef)!=1)

{

if(p->coef>0)

{

outfile

}

else

{

outfile

} } if(p->exp==0)//指数为0,即常数项

{

if(p->coef>0)

{

outfile

}

else

{

outfile

} }

//指数大于0且不为1,系数绝对值为1 if(p->exp>0&&fabs(p->coef)==1&&p->exp!=1) {

if(p->coef>0)

{

outfile<<"X^"

}

else

{

outfile<<"-X^"

} } if(p->exp==1&&fabs(p->coef)!=1)//指数为1且系数绝对值不为1 {

if(p->coef>0&&p->coef!=1)

{

outfile

}

if(p->coef<0&&p->coef!=-1)

{

outfile

} } if(p->exp==1&&fabs(p->coef)==1)//指数为1且系数绝对值为1 {

if(p->coef==1)

outfile<<"X";

else

outfile<<"-X"; } }

3. void PrintPolyn(node *Pa) 该函数有一个参数,该指针指向多项式链表的头指针,以下是实现插入的关键代码: void PrintPolyn(node *Pa) { node *p; if(Pa->next==NULL) //首项判断,如果首项无,则显示“0”

outfile<<"0";

return; else {

firstnode(Pa->next); } p=Pa->next->next; //定义指针p指向Pa的下下个指针

while(p!=NULL) {

othernode(p);

p=p->next;

//将p指向下个一个结点

}

outfile<

五.系统测试

该程序在VC6.0中调试通过,没有错误和警告,运行结果经过检验为正确。以下图为该程序运行结果效果图:

图5-1 范例

图5-2 一行输出

图5-3 多行输出

六.使用说明

1.打开1.txt文件,在里面任意输入9个整数,每个数字间要有空格,可以输入一行或者多行,输入多行的时候需要换行。

2.编译运行后,打开2.txt文件,即可看到输出的符合要求的多项式。

七.总结及心得体会

通过这次课程设计练习,使我更深刻地理解了C++语言的精髓-----指针的使用。完成整个程序设计有很大的收获,对指针掌握的更加熟练。

同时通过直接对单链表的操作,加深了对数据结构的理解和认识。并在完成课程设计的过程作主动查阅了相关资料,学到了不少课本上没有的技术知识。

经过这次课程设计,我深刻认识到算法在程序设计中的重要性,如何让程序简单、易读是这个课程设计的难点。程序总是由若干个函数构成的,这些相应的函数体现了算法的基本思想。

编程是一件枯燥乏味工作,但是只要认真专研,我们会从中学到很多在课本上学不到或者无法在课堂上掌握的知识,同时也能从中感受到编程的乐趣。兴趣是可以培养的,只要坚持下去,面对困难我们总能够找到解决问题的方法。

计算多项式的输出-----该程序虽然不是很大,但是自己独立完成这一任务也遇到不少的困难。另外也需要提出的是,非常感谢老师对我们的耐心指导,尤其是上机的时候给了我很多锻炼的机会。所以这次课程设计我才能够顺利的完成。

第四篇:数据结构课程设计要求

光盘内容说明

本光盘有8个目录,对应于课程设计教材中第2至5章的8个案例。每个目录以ch0x0y命名,代表第x章第y节的案例,内容包含该案例的源程序及教材中描述的测试数据。 除“文件目录结构的显示”案例为.C++源程序外,其他均为C源程序。

各目录中的内容及说明:

1. ch0201:表达式求值,在VC++6.0环境下测试通过

 文件main.c:案例源程序;

 文件input.txt:案例测试输入数据文件;

 文件output.txt:案例测试输出结果文件;

2. ch0202:文件目录结构的显示,在VC++6.0环境下测试通过

 文件main.c:案例源程序;

 文件input.txt:案例测试输入数据文件;

 文件bad_input_cases.txt:案例容错测试输入数据文件;

 文件output.txt:案例测试输入input.txt的输出结果文件;

3. ch0301:拯救007,在VC++6.0环境下测试通过

 文件main.c、graph.c、deque.c、error.c、graph.h、deque.h、error.h:案例源程序。编译时需通过应用工程文件(console project)。

 文件input.txt:案例测试输入数据文件;

 文件output.txt:案例测试输出结果文件;

4. ch0302:迷宫问题,在TC2.0环境下测试通过

 文件main.c:案例源程序;

 说明:测试时可选择自动生成测试数据,读者也可按照教材中提供的数据进行测试;

5. ch0401:快速排序详析,在VC++6.0环境下测试通过

 文件main.c:案例源程序;

 文件input.txt:案例测试输入数据文件,包含顺序、逆序和随机等三种类型的测试数据;

 文件output.txt:案例测试输出结果文件;

6. ch0402:插队买票,在VC++6.0环境下测试通过

 文件main.c:案例源程序;

 文件input.txt:案例测试输入数据文件;

 文件output.txt:案例测试输出结果文件;

7. ch0501:搜索算法效率比较,在VC++6.0环境下测试通过

 文件main.c:案例源程序;

 说明:读者可按照教材中提供的数据进行测试;

8. ch0502:任务调度问题,在VC++6.0环境下测试通过

 文件main.c:案例源程序;

 说明:读者可按照教材中提供的数据进行测试;

第五篇:数据结构课程设计报告

计算机科学与工程系

数据结构课程设计报告

课程设计题目 迷宫 航班信息查询系统 学 号 姓 名 班 级

专 业 网络工程 完 成 时 间 2013-1-4 指 导 教 师

数据结构课程设计

迷宫

题目一

1.设计内容 1.1问题描述

求迷宫从入口到出口的所有路径。 1.2设计要求

1.迷宫中不能使用递归算法查找路径。 2.试探方向限定为上、下、左、右四个方向。 3.迷宫采用随机生成和手工生成两种方式。 4.生成从迷宫入口到出口的最短和最长路径。 5.迷宫的入口和出口由键盘输入。

1.3开发环境

Visual C++6.0的集成化环境 1.4研究思路

对这样的矩形迷宫,可以用N*M的矩阵来描述,N和M分别代表迷宫的行数和列数。这样,迷宫中的每一个位置都可以用行号和列号来指定。从入口到出口的路径则是由一个位置构成的,每个位置上都没有障碍,且每个位置(第一个除外)都是前一个位置的东、南、西或北的邻居。为了描述迷宫中位置(i,j)处有无障碍,规定:当位置(i,j)处有一个障碍时,其值为1,否则为0。

经分析,一个简单的求解方法是:从入口出发,沿某一方向进行探索,若能走通,则继续向前走;否则沿原路返回,换一方向再进行搜索,直到所有可能的通路都探索到为止。即所谓的回溯法。

2.设计步骤

2.1 需求分析

(1)题目:迷宫的生成与路由。生成一个N*M(N行M列)的迷宫,0和

1- 1数据结构课程设计

迷宫

在该程序中,首先进入的是菜单选择,在菜单中有3种选择,选1是手动输入迷宫函数;选2是随机自动生成迷宫;选3是退出程序。在手动生成迷宫时,有两种输出方式,一是矩阵输出,二是图形输出。在矩阵输出时,直接将数组中的数进行输出,在图形输出时,则要判断该点的情况,然后输入迷宫的出入口,再调用mgpath()函数进行判断是否存在路径,如果存在则将路径经过的点进行输出,并且将经过的点进入到辅助数组中(辅助数组是辅助图形界面的输出),并且将辅助数组初始为1,辅助数组中点为路径的重新赋值为0,然后根据情况输出图形界面。在自动生成迷宫时,用到了c语言随机函数,对于其它问题,和手动情况基本相同。

2.3 详细设计 (1)主菜单伪代码:

while(flag1){

}

{shuru();//输入行列数

printf("手动建立迷宫矩阵(0表示可通1表示障碍): "); for(i=1;i<=m;i++)

for(j=1;j<=n;j++) scanf("%d",&mg[i][j]); showplay(mg);// 迷宫输出 churukou();//迷宫出入口的输入 x=Mazepath(mg);// 判断路径函数

- 3数据结构课程设计

迷宫

和“class ‘maze’has an illegal zero-sized array”两行错误。双击错误信息,找到出错的程序段,经过查阅资料发现,在利用顺序栈时,没有定义顺序栈的向量空间大小,导致程序出错。但不要对向量空间定义过大,否则会浪费空间。

(2)算法的时空分析:

由于链栈实际上是运算受限制的单链表。所以取栈顶元素运算的算法、置空栈运算的算法执行时间与问题的规模无关,则该算法的时间复杂度为O(1);而其入栈运算的算法与出栈运算的算法相当于在链表的表尾进行插入和删除操作,不需要移动元素,时间复杂度也为O(1)。建立迷宫矩阵的时间复杂度为O(x*y)。在查找路径的过程中,最坏的情况下可能要考察每一个非障碍的位置。因此,查找路径的时间复杂度应为O(unblocked)。

链栈的入栈算法、出栈算法、取栈顶元素算法、置空栈算法执行时所需要的空间都是用于存储算法本身所用的指令、常数、变量,各个算法的空间性能均较好。只是对于存放顺序栈的向量空间大小的定义很难把握好,如果定义过大,会造成不必要的空间浪费。所以在定义时要慎重考虑。

3. 用户使用说明

运行该程序,运行的界面的会出现菜单界面,然后用户可根据界面的提示进行相应的操作,生成迷宫的方式有两种方式,手动生成和自动生成,手动生成时、,用户可根据自己的要求输入迷宫的格式,还需输入相应的入出口,确认程序就会生成相应的路径图形;自动生成只需输入所需的行数和列数,就会生成迷宫,接下来的操作和手动操作相同了。

- 5

图数据结构课程设计

迷宫

图1-2

图1-3 退出

5. 总结与心得体会

本次课程设计过程中由于掌握的知识不牢固,在编程序的过程中得到了同学的帮助和指导,在此表示感谢。课程设计的过程中,遇到了一些问题,大部分是课本中的知识掌握的不牢固,还有就是在以前学习C++的过程中相关的知识掌握的不够全面。在以后的学习过程中,自己一定要把各种知识掌握牢固。

- 7

{ }

mg[i][j]=1; //初始化

矩阵,将最外围置为1

printf(" 输入迷宫入口: "); scanf("%d%d",&x1,&y1); printf("输入迷宫出口: "); scanf("%d%d",&x2,&y2);

}mlink; mlink *stack;//定义一个栈 int m,n,x1,x2,y1,y2;//定义全局变量

}

void showplay(int mg[][M+2])//迷宫输出

{

");

for(i=1;i<=m;i++) {

printf(" "); for(j=1;j<=n;j++)

printf("%d ",mg[i][j]);

int i,j;

printf("迷宫矩阵如下(0可通):printf("输入行数: "); scanf("%d",&m); printf("输入列数: "); scanf("%d",&n); 数据结构课程设计

迷宫

} } printf(" 迷宫图形如下(白色for(i=1;i<=m;i++) {

}

printf(" "); for(j=1;j<=n;j++) {

} if(mg[i][j]==0) printf("

if(mg[i][j]==1) printf("

if(mg[stack->row][stack->col+1]==

p->next=stack;

stack=p; {

p=(mlink 可通): "); 0)//下面位置可通

*)malloc(sizeof(mlink));

p->row=stack->row; p->col=stack->col+1; □");//为0的输出□ ■");//为1的输出■

//入栈

mg[stack->row][stack->col]=1;//将

} else

访问过的标记为1 int Mazepath(int mg[][N+2]) {

mlink *p; if(mg[x1][y1]==0){ p=(mlink p->row=x1; p->col=y1; p->next=NULL; stack=p;

//将入口

mg[stack->row][stack->col]=1;/while((!(stack->row==NULL&

if(mg[stack->row][stack->col-1]==0)//上面可通

//入栈

stack=p;

p->next=stack;

{

p=(mlink *)malloc(sizeof(mlink));

*)malloc(sizeof(mlink));

p->row=stack->row; p->col=stack->col-1; 放入堆栈 /标志入口已访问

&stack->col==NULL))&&(!(stack->row==x2&&stack->col==y2)))//循环条件直到找到输入的出口

{

mg[stack->row][stack->col]=1;//将

访问过的标记为1

- 2数据结构课程设计

迷宫

void tonglu()//将坐标的顶点输出 {

始化

printf("(%d%3d) ",q->row,q->col);

情况

else printf("□");//0的 } q=stack; {

} for(i=0;i

for(j=0;jrow-1][q->col-1] q=q->next;

=

while (q!=NULL)//循环条件 q=q->next; for(j=0;j

情况

}

void create(int mg[][N+2])//创建和菜单

{

int i,j,x,choice,flag1=1; chushi(); while(flag1){ }

printf(" "); printf("所有通道为(由下而q=stack; { 上): "); while (q!=NULL)//循环条件

printf("

##

printf("#

");

*********选择菜单**********

# ");

printf("

##

printf("输入选项:"); scanf("%d",&choice); switch(choice){ case 1://手动建立迷宫

{

shuru();

printf("手动建立for(i=1;i<=m;i++)

");

printf("# 1-手动生成迷

2-自动生成迷宫

3-退出

# "); 0;//将路径中的点赋给辅助数组a 形的界面输出

迷宫矩阵(0表示可通1表示障碍): ");

for(j=1;j<=n;j++) scanf("%d",&mg[i][j]);

- 4数据结构课程设计

航班信息查询与检索系统

题目二

1.设计内容 1.1问题描述

设计一个航班信息查询系统,提供信息的管理和使用功能,管理包括更新、添加、删除功能。

1.2设计要求

(1)原始信息存储在文件中,记录不少于50条。 (2)用户界面至少包括以下功能:  创建

 修改(插入、添加、删除、更新)  查询  浏览  退出管理系统 (3)航班信息包括:

 航班号:字符序列,具体字符表达的意思上网查询  起点站和终点站:字符串  班期:指一周中哪些天有航班

 起飞时间:可将时间定义成一个时、分组成的序列  到达时间:可将时间定义成一个时、分组成的序列  机型:字符序列,具体字符表达的意思上网查询  票价:整型数,具体值可上网查询

(4)创建是指从文件中读取数据,并存入所定义的顺序表中。

(5)可按航班号、起点站、终点站、起飞时间、到达时间等进行查询。查询时要用到顺序查找、二分查找方法。输出查询结果时必须排序。

(6)可按航班号、起点站、起飞时间、票价进行删除和更新操作,删除的记录存入另外的文件中,作为日志文件保存。

(7)作插入操作前,先对信息按起点站进行排序。新记录插入为起点站相同的最后一条记录。

- 2数据结构课程设计

航班信息查询与检索系统

typedef struct node { Time rh; Time lv; }Pnode; (2)飞机结构体: struct Plane {

}; (3)静态链表: typedef struct Sqlist { int length; struct Plane *plane; char key[10],sted[20],sche[10]; Time rh,lv; int price; }Sqlist; 2.3 详细设计 (1)主函数:

do{printf("* * * * * * * * * * * * * 航班查询系统* * * * * * * * * * * * * ");

printf("*

1.创建

2.修改

3.查询

4.浏览

5.表长

6.文件

0.退出

* ");

printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ");

scanf("%d",&opt); switch(opt) {

case 1:Initlist(L);break;

case 2:handle(L);break;

case 3:search(L);break;

case 4:print(L);break; case 5:Get_Sq(L);break; case 6:File(L);break;

- 4数据结构课程设计

航班信息查询与检索系统

} }while(opt!=0); }

(4)文件操作: void File(Sqlist &L) {

int ch; do{ printf("* * * * * * * * * * * * * * * * * * * * * * * * * ");

printf("*

* ");

printf("* 1.保存信息到文件

2.从文件读取信息

0 退出 * ");

printf("*

* ");

printf("* * * * * * * * * * * * * * * * * * * * * * * * * ");

printf("请输入选项 ");

scanf("%d",&ch);

switch(ch)

{

case 1:SaveList(L);break;

} }while(ch!=0); case 2:ReadList(L);break;

case 0:printf("退出! ");break; }

(5)浏览信息:就是循环使用输出函数,在此就不必多说了

2.4 调试分析

(1)在课设过程中,遇到问题时,通过与同学、老师交流,在图书馆查阅资料,使问题得以解决。

(2)算法中有许多不是很优化的地方。 3. 用户使用说明

程序运行后用户根据提示输入要进行的操作选项(应先选择创建选项,这样可以直接读取保存好的文件),然后选择要进行的操作选项。由于主菜单中有修改、查询和浏览项目,每个项目又有各自的子菜单,所以在进行管理和使用时要注意输入的元素是否正确,需按照提示输入。输入操作元素时,元素之间以空格隔开。程序将按输入的操作元素找到相应的算法,然后进行处理,然后将结果打

- 6数据结构课程设计

航班信息查询与检索系统

图2-2 查询信息

图2-3插入

图2-4删除

- 8数据结构课程设计

航班信息查询与检索系统

时就需要重新写出一个子函数,哪怕这个子函数就是在原有的一个子函数的基础上改那么一丁点的地方,例如航班信息查询系统中的查询函数,其实每个子函数只是改了一下关键码而已。

6. 附录

#include #include #include typedef struct time { int hour; int min;

{ }

void search_key(Sqlist L)//按航班号查找

{ 号:");

Time rh; Time lv;

scanf("%s",n); int i;

printf("此航班的航班号,起点char n[20];

printf("请输入要查找的航班

printf("%d ",L.length);//表长

}Time; typedef struct node {

}Pnode; struct Plane {

}; typedef struct Sqlist { int length; struct Plane *plane; char key[10],sted[20],sche[10]; Time rh,lv; int price;

终点,班期,起飞时间,到达时间,票价: ");

if(strcmp(L.plane[i].key,n)==0)

ted,

L.plane[i].sche,L.plane[i].lv.hour,L.

{

for(i=L.length-1;i>=0;i--) {

printf("%s %s %s %d:%d %

d:%d %d ",L.plane[i].key,L.plane[i].s}Sqlist; int get_Sq(Sqlist &L) { } void Get_Sq(Sqlist &L) return L.length;

plane[i].lv.min,L.plane

[i].rh.hour,L.plane[i].rh.min,L.plane

[i].price);

- 10数据结构课程设计

航班信息查询与检索系统

printf("此航班的航班号,起点

ted,

{ 终点,班期,起飞时间,到达时间,票价: ");

if(L.plane[i].lv.hour<=hour)

ted,

L.plane[i].sche,L.plane[i].lv.hour,L.

{

for(i=L.length-1;i>=0;i--) {

printf("%s %s %s %d:%d %

d:%d %d ",L.plane[i].key,L.plane[i].s

L.plane[i].sche,L.plane[i].lv.hour,L.

plane[i].lv.min,L.plane

[i].rh.hour,L.plane[i].rh.min,L.plane

}

void search(Sqlist L) {

int i; do {

printf("* * * * * * * * * * * }

} printf("%s %s %s %d:%d %d:%d %d ",L.plane[i].key,L.plane[i].s[i].price); plane[i].lv.min,L.plane [i].rh.hour,L.plane[i].rh.min,L.plane

} void search_rh(Sqlist L) {

int hour; printf("请输入你所要求的最scanf("%d",&hour); printf("此航班的航班号,起点 } } [i].price);

* * * * * * * * * * * * * ** * * * * * * * * * * * * * * * ");

printf("* 1.航班号查询

2.起点终点查询

3.班期查询 4.起飞时间查询

5.到达时间查询

0.退出

* ");

printf("* * * * * * * * * *

* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * ");

scanf("%d",&i);

switch(i)

{

case 晚时间:"); 终点,班期,起飞时间,到达时间,票价: ");

if(L.plane[i].rh.hour<=hour) for(int i=L.length-1;i>=0;i--) {

1:search_key(L);break;

- 12数据结构课程设计

航班信息查询与检索系统

");

} else { } printf("查找不成功。

i--; if(i==0)

{

char c[20];

printf("输入修改后的scanf("%s",c);

内容:");

strcpy(L.plane[i].sche,c);

printf("修改成功! "); }break; {

int a,b;

printf("输入修改后的int opt; printf("选择修改对象:"); scanf("%d",&opt); switch(opt) { case 1:

printf("修改成功! "); printf("修改成功! "); {

char a[10]; printf("输入修改后的scanf("%s",a);

case 4:

内容:");

char b[20]; printf("请输入修改后scanf("%s",b);

scanf("%d:%d",&a,&b);

L.plane[i].lv.hour=a; L.plane[i].lv.min=b; printf("修改成功! "); 航班号:");

}break; {

int a,b;

printf("输入修改后的strcpy(L.plane[i].key,a); }break; {

case 5: case 2:

内容:");

scanf("%d:%d",&a,&b);

L.plane[i].rh.hour=a; L.plane[i].rh.min=b; printf("修改成功! "); 的内容:"); strcpy(L.plane[i].sted,b); }break;

}break; {

int a;

case 6: case 3:

- 14数据结构课程设计

航班信息查询与检索系统

* ");

printf("* * * * * * * * * * * * * * * * * * * * * * * * * ");

printf("请输入选项 ");

scanf("%d",&ch);

switch(ch)

{

case 1:SaveList(L);break; case 2:ReadList(L);break;

L.plane[i].sche,&L.plane[i].lv.hour,

&L.plane[i].lv.min,&L.plane

[i].rh.hour,&L.plane[i].rh.min,&L.pl

}

void delet_Sq1(Sqlist &L) {

char n[10]; int i,j;

printf("请输入您要删除的航scanf("%s",n); if(L.length==0) {

printf("没有选项! "); for(i=0;i

L.length++;

ane[i].price);

case 0:printf("退出! ");break;

}

void Initlist(Sqlist &L)//插入存储 {

");

容:"); 价 ");

scanf("%s%s%s%d:%d%d:%d%d",

L.plane[i].key,L.plane[i].sted, for(i=0;i

班期

起飞时间

到达时间

票scanf("%d",&n); L.length=0; L.plane=(Plane if(!L.plane) exit(0); printf("请输入顺序表中的内

int i,n; printf("输入表中航班的数量:

} }while(ch!=0);

班号:");

if(strcmp(L.plane[i].key,n)==0)

{

printf("所删除的班机*)malloc((n+10000)*sizeof(Plane));

的信息: ");

printf(" 航班号

起点终点

printf("%s %s %s %d:%d %d:%

d %d ",L.plane[i].key,L.plane[i].sted,

L.plane[i].sche,L.plane[i].lv.hour,L.

plane[i].lv.min,L.plane

[i].rh.hour,L.plane[i].rh.min,L.plane

[i].price);

- 16数据结构课程设计

航班信息查询与检索系统

"); } printf("无法打开文件! }

}while(opt!=0);

void insert_Sq(Sqlist &L) { 数量

价 ");

for(i=0;i

printf("* * * * * * * * * * *

scanf("%s%s%s%d:%d%d:%d%d",&L.plane[L.length].key,&L.plane[L.length].sted,

&L.plane[L.length].sche,&L.plane[

{

int a=get_Sq(L);

printf("请输入要添加班机的scanf("%d",&n);

printf("请输入要添加的班机printf(" 航班号

起点终点

int i,n;

//n表示添加的fprintf(fp,"航班号:%s 起点站:%s

终点站:%s 班期:%d 起飞时间:%d:%d

到达时间:%d:%d 价格:%d ", p.key,p.sted,p.sche,p.lv.hour,p.lv.mi

"); } void delet_Sq(Sqlist &L) {

int opt; do { fclose(fp); printf("保存删除的信息成功。n,p.rh.hour,p.rh.min,p.price);

数量:");

信息: ");

班期

起飞时间

到达时间

票* * * * * * * * * * ");

printf("* 1.航班号删除

printf("* * * * * * * * * * printf("输入你的选择:"); 2.路线删除

0.退出

* "); * * * * * * * * * * * ");

scanf("%d",&opt);

switch(opt) {

case 1:delet_Sq1(L);break;

case 2:delet_Sq2(L);break;

case 0:printf("退出。 }

L.length].lv.hour,&L.plane[L.length].lv.min,

&L.plane[L.length].rh.hour,&L.plan

e[L.length].rh.min,&L.plane[L.length].price);

}

void handle(Sqlist &L) {

}

L.length++;

");break;

- 18

上一篇:三级秘书考试复习提纲下一篇:手机如何投屏到电脑上

本站热搜