C/C++数据结构与算法课程设计[2023-07-03]
数据结构与算法课程设计
一、课程设计的目的、要求和任务
本课程设计是为了配合《数据结构与算法》课程的开设,通过设计完整的程序,使学生
掌握数据结构的应用、算法的编写等基本方法。
1.课程的目的
(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和
操作实现算法,以及它们在程序中的使用方法。
(2)使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。
(3)使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力;
2.课程的基本要求与任务
(1)巩固和加深对数据结构基本知识的理解,提高综合运用课程知识的能力。
(2)培养学生自学参考书籍,查阅手册、图表和文献资料的能力。
(3)通过实际课程设计,初步掌握简单软件的分析方法和设计方法。
(4)了解与课程有关的工程技术规范,能正确解释和分析实验结果。
(5)题目具有足够的工作量。
二、课程设计的一般步骤
(1)划分课程设计小组:由不超过 3 名同学组成一个课程设计小组,自愿组队。
(2)选题与搜集资料:每个课程设计小组在参考选题中选择课题,并保证每人一题。
(3)分析与概要设计:根据搜集的资料,进行程序功能与数据结构分析,并选择合适的数
据结构、并在此基础上进行实现程序功能的算法设计。
(3)程序设计:运用掌握 C/C++语言编写程序,实现所有程序的各个模块功能。
(4)调试与测试:调试程序,并记录测试情况。
(5)完成课程设计报告。
(6)验收与评分:指导教师对每个同学的开发的系统进行综合验收。
三、任务完成形式
1. 完整的软件系统
最终必须向指导老师提交完整的程序源代码(.c 和.cpp 以及.h 为后缀的文件)、数据文件以
及使用说明文件等。源代码文件要特别注意编程规范、代码风格,关键代码需有合理的注释,
不含任何无用代码;数据文件内要求有一定数量的“真实”数据(如对于记录文件,需要有 5
条以上记录); 使用说明文件的第一行,需要给出设计者的学号、姓名,后面为其它说明。
2. 课程设计报告
报告总体上主要包括以下几个部分,封面、目录、课程设计报告正文、使用说明、参考
文献。其中课程设计报告正文(12‐20 页之间,8000 字以上),书写规范,应包括如下 8 个部
分:
(1)问题描述:描述要求编程解决的问题。
(2)功能要求:给出程序要达到的具体的要求。
(3)算法思想:描述解决相应问题算法的设计思想。
(4)模块划分:描述所设计程序的各个模块(即函数)功能。
(5)数据结构:给出所使用的基本抽象数据类型,所定义的具体问题的数据类型,以及新定义
的抽象数据类型。
(6)核心源程序:给出核心算法源代码,要求有充分的注释语句,至少要注释每个函数参
数的含义和函数返回值的含义。
(7)测试数据:设计测试数据,或具体给出测试数据。要求测试数据能全面地测试所设计
程序的功能。
(8)测试情况与结果分析:给出程序的测试情况,并分析运行结果 。
四、成绩评定标准
学生成绩以优、良、中、及格和不及格 5 个等级评定。 其中:
(1)学生编写的实际软件和运行结果,占总成绩 45%;
(2)设计报告,占总成绩 45%。
(3)小组合作情况,占总成绩的 10%。该部分由指导教师进行现场口试,依据表现给分。
只有程序验收通过后,才能按以下方法核定本次课程设计的总成绩。以下几点是决定总
成绩的关键因素:
(1) 考勤、纪律、实验室卫生
(2) 工作量(代码量、功能多少、难度)
(3) 所用到的关键技术
(4) 实用性、创新
(5) 代码书写规范性
(6) 程序界面美观、新技术运用得当
(7) 个人答辩及小组合作情况
以下几种情形认定为成绩不合格:
(1) 未能独立完成设计或概念不清;
(2) 有效代码总量不足 1000 行(不含自动生成代码);
(3) “管理系统”类课题中使用现有数据库系统如 access,SQL Server 等;
(4) 课程设计报告或源代码有抄袭行为;
(5) 3 次(含)以上点名未到;
(6) 不遵守实验室规章制度,或不按要求完成实验室卫生工作。
五、附课程设计题目
1)可另选题目,经指导老师认可后正式作为课程设计题目。
2) 数据结构课程设计参考题目
1. 文件查重系统
[问题描述]
抄袭检查越来越成为一种重要的需求。本问题要求,从文件中读入两个文件,比较其雷同字
句的数目。并给出详细对照。
当两字符串中连续相同字符的个数达到一定数目(例如 20 字)可视为雷同。也可按照相同字
符占句子长度的比例来检测雷同。
[基本功能]
统计不同文件的雷同字段数,字段总长度,雷同字段比例。
[测试数据]
可自己定义。
[实现提示]
程序运行后首先要求用户给出制定的两个文件。
[高级要求]
建立文件库,对新的文件检测该文件与库中哪些文件雷同,并给出相应的比例。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
2. 课程设计案例管理系统
收集各本课程的题目案例,每个案例包括 问题描述、基本功能要求、测试数据集、高级或
扩展要求、课题实现源代码包、课程设计报告、评语等各部分。
[基本功能]
(1).案例导入或录入 (2).展示问题 (3)展示案例结果 (4)案例查询 (5)单问题多解决方案入
库的处理
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
3. 约瑟夫环
[问题描述]
约瑟夫(Joeph)问题的一种描述是:编号为 1,2,„,n 的 n 个人按顺时针方向围坐一圈,每人
持有一个密码(正整数)。一开始任选一个正整数作为报数上限值 m,从第一个人开始按顺
时针方向自 1 开始顺序报数,报到 m 时停止报数。报 m 的人出列,将他的密码作为新的 m
值,从他在顺时针方向上的下一个人开始重新从 1 报数,如此下去,直至所有人全部出列为
止。试设计一个程序求出出列顺序。
[基本要求]
利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。
[测试数据]
m 的初值为 20;密码:3,1,7,2,4,8,4(正确的结果应为 6,1,4,7,2,3,5)。
[实现提示]
程序运行后首先要求用户指定初始报数上限值,然后读取各人的密码。设 n≤30。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
4. 长整数运算
[问题描述]
设计一个程序实现两个任意长的整数求和运算。
[基本要求]
利用双项循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是
‐(215‐1)~(215‐1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间
用逗号隔开。
[测试数据]
(1) 0;0;应输出“0”。
(2) ‐2345,6789;‐7654,3211;应输出“‐1,0000,0000”。
(3) ‐9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。
(4) 1,0001,000;‐1,0001,0001;应输出“0”。
(5) 1,0001,0001;‐1,0001,0000;应输出“1”。
[实现提示]
(1) 每个结点中可以存放的最大整数为 215‐1=32767,才能保证两数相加不会溢出。但若
这样存,即相当于按 32768 进制数存,在十进制数与 32768 进制数之间的转换十分不方便。
故可以在每个结点中仅存十进制数的 4 位,即不超过 9999 的非负整数,整个链表视为万进
制数。
(2)可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相
加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一
种方法。不能给长整数位数规定上限。
[选作内容]
修改上述程序,使它在整型量范围是‐(2n
‐1)~(2n
‐1)的计算机上都能有效地运行。其中,
n 是由程序读入的参量。输入数据的分组方法可以另行规定。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
5. 多项式链式存储结构及其代数运算
[问题描述]
设计并建立一个链式存储分配系统来表示和操作多项式。为了避免对零和非零多项式进行不
同的处理,使用带头结点的循环链表。为了充分利用多项式中不再使用的结点,维护一个可
用空间表 avail,把不再使用的多项式的结点链入其中。当需要一个新结点时,就查看这个单
链表 avail。如果表非空,那么可以使用它的一个结点。只有当该表为空时,才使用动态存
储分配来创建新结点。
[基本要求]
设计多项式的存储结构,编写并测试下列函数:
a) get_node 和 ret_node,从/向可用空间表申请和插入一个多项式结点。
b) pread,读取一个多项式,并将其转换成循环存储表示。返回指向该多项式的头结点的指
针。
c) pwrite,输出多项式,采用能够清楚显示的形式。 d) padd,计算 d = a+b。不改变 a 和
b。 e) psub,计算 d = a‐b。不改变 a 和 b。
f) pmult,计算 d = a*b。不改变 a 和 b。
g) eval,计算多项式在某点 a 的值,其中 a 是一个浮点型常量。返回结果为浮点数。h) perase,
把存储表示为循环链表的多项式返还给可用空间表。 [实现提示]
为了进一步简化加法算法,把多项式的头结点的指数域设为‐1。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
6. 稀疏矩阵的完全链表表示及其运算
[问题描述]
稀疏矩阵的每个结点包含 down,right,row,col 和 value 五个域。用单独一个结点表示一
个非零项,并将所有结点连接在一起,形成两个循环链表。使得第一个表即行表,把所有结
点按照行序(同一行内按列序)用 right 域链接起来。使得第二个表即列表,把所有结点按
照列序(同一列内按行序)用 down 链接起来。这两个表共用一个头结点。另外,增加一个
包含矩阵维数的结点。稀疏矩阵的这种存储表示称为完全链表表式。
实现一个完全链表系统进行稀疏矩阵运算,并分析下列操作函数的计算时间和额外存储空间
的开销。
(2)设计目的
认识和掌握稀疏矩阵的完全链表表示;能够建立并运用这种存储结构 (3) 基本要求 建立一个
用户友好、菜单式系统进行下列操作,并使用合当的测试数据测试该系统。 读取一个稀疏
矩阵建立其完全链表表示 输出一个稀疏矩阵的内容 删除一个稀疏矩阵 两个稀疏矩阵相
加 两个稀疏矩阵相减 两个稀疏矩阵相乘 稀疏矩阵的转置 (4)实现提示 链表上的操作。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
7. 实现简单数字图像处理
[问题描述]
一幅图像就是一个从位置集到颜色集的变换。考虑二维图像,位置集实际上就是一个矩阵,
此时一幅图像实际上就是一个内容为颜色矩阵。如果颜色为 0‐255 间的整数,表示该位置的
灰度等级,0 为黑色,255 为白色,此时的图像称为灰度图。
而图像的处理就是在该矩阵进行相关计算。一种常见的计算就是通过一点和周围 8 个点的信
息共同决定该点的新值:如一点的新值为该点和周围 8 点颜色值之和的均值,这一操作可用
下图表示。
显然这样处理后,图像会变得平滑,因此称为平滑操作。显然将上述操作变为下图时,就成
为锐化操作。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
要求实现若干基本的图像处理操作。
[基本要求]
①熟悉 Windows 下 BMP 文件的格式,能够实现其读写(只考虑灰度图像)。 ②实现图像的平
滑和锐化操作,其它处理操作选做。 ③需用 VC++作为语言。
8. 回文判断
[问题描述]
试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列 1&序列
2’模式的字符序列。其中序列 1 和序列 2 中都不含字符‘&’,且序列 2 是序列 1 的逆序列。
例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
9. 商品货架管理
[问题描述]
商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。 上货时,
需要倒货架,以保证生产日期较近的商品在较下的位置。
[基本要求]
针对一种特定商品,实现上述管理过程。
[实现提示]
用栈模拟货架和周转空间。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据,如空栈。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
10. 停车场管理
[问题描述]
设停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停
车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆
车停放在车场的最北端),若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等
候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它
之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入
车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车
场编制按上述要求进行管理的模拟程序。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
[测试数据]
设 n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,
4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。每一组输入数据包
括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,
‘A’表示到达;‘D’表示离去,‘E’表示输入结束。 [基本要求]
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离
去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车
场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用
(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。
[实现提示]
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结
构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:
汽车的牌照号码和进入停车场的时刻。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
11. 电梯运行仿真程序
[问题描述]
办公大楼有若干层(例如,十层),每层有电梯,同时有步行楼梯;
全楼有若干部(例如,不多于 10 部)电梯同时供使用,电梯容量为 24 人,速度每上下一层
需 5 秒,在某一层停下至少 15 秒。其运行状态可分:向上、向下、停止,当前乘客数,当
前所在层数。它设有一个“按钮数组”,例如第五层的按钮按下,意味着有乘客在第 5 层到
达目标层,等等。
在楼的每一层,有电梯数,有按钮表示有人等待向上或向下,由若干人在等待,有若干电梯
在本层停下,等等。
在大楼中(包括进出)的总人数不超过 500 人,每个人站在电梯前有个目标层,他有一个最
大的忍受等待时间,因为他可以选择电梯或是步行走楼梯,等等。
还有下面若干假设:在每个时间段要进大楼的人数在 0~199 之间随机取值;
用电梯的每个人的目标层在 1~10 之间取值;一个人在进电梯或改走楼梯之前的等待时间在
180~360 秒范围内随机发生;一个人到达目标层后第二次再乘电梯中间的工作时间在 400~
6600 秒间随机取值。
[基本要求]
编写一个程序,模拟办公大楼中全部电梯的工作过程。这个仿真程序可以用来监测系统运行
情况,改善大楼管理,它也可以看成是一种游戏程序。
屏幕显示的布局设计
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
12. 二叉树及其遍历
[问题描述]
建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。 [基本要求]
从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用
递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。 [测试数据]
ABCффDEфGффFффф(其中ф表示空格字符)
则输出结果为: 先序:ABCDEGF 中序:CBEGDFA 后序:CGBFDBA
[选作内容]
采用非递归算法实现二叉树遍历。
2、打印二叉树结构
[问题描述]
按凹入表形式横向打印二叉树结构,即二叉树的根在屏幕的最左边,二叉树的左子树在屏幕
的下边,二叉树的右子树在屏幕的上边。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据,如空二叉树。
3、打印树结构
[问题描述]
按凹入表形式打印树形结构。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据,如空树。 [实现提示]
(1)利用树的先根遍历方法;
(2)利用结点的深度控制横向位置。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
13. 图遍历的演示
[问题描述]
很多涉及图上操作的算法都是以图的遍历操作为基础的。试写一个程序,演示无向图的遍历
操作。
[基本要求]
以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起
点,分别输出每种遍历下的结点访问序列和相应生成树的边集。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据,如单个结点。 [实现提示]
设图的结点不超过 30 个,每个结点用一个编号表示(如果一个图有 n 个结点,则它们的编
号分别为 1,2,„,n)。通过输入图的全部边输入一个图,每个边为一个数对,可以对边的输入
顺序作出某种限制。注意,生成树的边是有向边,端点顺序不能颠倒。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
14. 学生选课系统
[问题描述]
大学里实行学分制。每门课都有一定的学分。每个学生均需要修满规定数量的课程才能毕业。
其中有些课程可以直接修读,有些课程需要一定的基础知识,必须在选了其他一些课程的基
础上才能修读。例如,《数据结构》必须在选修了《程序设计基础》之后才能选修。我们称
《程序设计基础》是《数据结构》的“先修课”。假定每门课的直接先修课至多只有一门,
两门课可能存在相同的先修课。例如:
课程号 先修课号 学
分 1 0 1 2 1 1 3 2 3 4 0 3 5
2 4
上例中,1 是 2 的先修课,即如果要选修 2,则 1 必定被选。 [基本要求]
学生不可能学完大学里开设的所有课程,因此每个学生必须在入学时选定自己要学的课程。
每个学生所修的学分数的下限是给定的。现在编写一个“学生选课系统”,任意给定一种课
程体系(总课程数,课程之间的修读先后制约关系,学生毕业要求修的课程学分数),该系
统能帮助学生找出一种选课方案,使得他所选课程数目最少,并获得毕业所需学分,并且必
须满足先修课程优先的原则。
具体功能如下:
1.将课程体系存放为课程体系文件 CourseHierarchy.txt ;
2.将课程体系文件 CourseHierarchy.txt 转换左孩子右兄弟二叉树表示; 3.在此基础上对二叉
树进行先序、中序、后序遍历。 4. 给出选课方案。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
15. 设计一个哈夫曼码的编/译码系统
[基本要求]
该系统应具有以下功能:
(1) I:初始化(Initialization)。从终端读入字符集大小 n,以及 n 个字符和 n 个权
值,建立哈夫曼树,并将它存于文件 hfmTree 中。
(2) E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件 hfmTree
中读入),对文件 ToBeTran 中的正文进行编码,然后将结果存入文件 CodeFile 中。
(3) D:译码(Decoding)。利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译
码,结果存入文件 TextFile 中。
(4) P:打印代码文件(Print)。将文件 CodeFile 以紧凑格式显示在终端上,每行 50
个代码。同时将此字符形式的编码文件写入文件 CodePrin 中。
(5) T:打印哈夫曼树(Tree printing)。将已在 中的哈夫曼树以直观的方式(树或凹
入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件 TreePrint 中。
[实现提示]
(1) 编码结果以文本方式存储在文件 CodeFile 中。
(2) 用户界面可以设计为“菜单”方式:显示上述功能符号,再加上“Q”,表示退出运
行 Quit。请用户键入一个选择功能符。此功能执行完毕后再显示此菜单,直至某次用户选择
了“Q”为止。
(3) 在程序的一次执行过程中,第一次执行 I,D 或 C 命令之后,哈夫曼树已经在
内存了,不必再读入。每次执行中不一定执行 I 命令,因为文件 hfmTree 可能早已建好。
[测试数据]
(1)利用下面这道题中的数据调试程序。
某系统在通信联络中只可能出现八种字符,其概率分别为 0.25,0.29,0.07,0.08,0.14,
0.23,0.03,0.11,试设计哈夫曼编码。
(2)用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和
译码:“THIS PROGRAM IS MY FAVORITE”。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
16. 校园导游咨询系统
[问题描述]
设计一个校园导游程序, 为来访的客人提供信息查询服务。 [基本要求]
(1)设计学校的校园平面图,所含景点不少于 10 个,以图中顶点表示校内各景点,存放景
点名称、代号、简介等信息,以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询; (3)为来访客人提供从校门口到图
中任意景点的问路查询;
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
17. 推销员问题:
[问题描述]
有一个推销员要到 N(N>0)个城市去推销产品,他从某个城市出发,经历每
个城市,且每个城市只能去一次,然后回到初始城市,以距离作为代价,他希望找出一个最
佳路径。这 N 个城市相互都有道路可通,但距离各不相同,城市个数和各个城市的相通距
离可由学生自己设定。
[基本要求]
(1)可以输入城市个数(不少于 10 个)、输入城市信息和城市之间的距离(为整数);(2)
按照输入出发城市,根据城市的距离最短给出路径选择。(3)界面要求:有合理的提示和
人机交互。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
18. 全国交通咨询模拟
[问题描述]
处于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅
途中的时间尽可能的短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数
最少。编制一个全国城市间的交通咨询程序,为旅客提供最优决策的交通咨询。
[基本要求]
(1)提供对城市信息进行编辑(如:添加或删除)的功能;
(2)城市之间有两种交通工具:火车或飞机,提供对全国城市交通图和列车时刻表及飞机
航班表进行编辑的功能。(信息的输入方式可以是文件输入和键盘输入两种方式)
(3)提供两种最优决策:最快到达和最省钱到达。(选作:旅途中转次数最少的最优决策)
(4)旅途中耗费的总时间应该包括中转站的等候时间。 (5)咨询以用户和计算机的对话
方式进行。
a)由用户输入起始站、终点站、最优决策原则和交通工具;
b)输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详
细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
19. 关键路径问题
[问题描述]
设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。 [基本要
求]
(1)对一个描述工程的 AOE 网,应判断其是否能够顺利进行。
(2)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所
依附的两个顶点、最早发生时间、最迟发生时间。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
20. 二叉排序树
[问题描述]
从键盘读入一组数据,建立二叉排序树并对其进行查找、遍历、格式化打印等有关操作。
[基本要求]
建立二叉排序树并对其进行查找,包括成功和不成功两种情况,并给出查找长度。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据。
[选作内容]
实现二叉排序树的插入、删除操作。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
21. 内部排序算法比较
[问题描述]
各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试
通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。
[基本要求]
(1)对以下 10 种常用的内部排序算法进行比较:直接插入排序;折半折入排序;二路插入
排序;希尔排序;起泡排序;快速排序;简单选择排序;堆排序;归并排序;基数排序。
(2)待排序表的表长不少于 100;其中的数据要用伪随机数产生程序产生;至少要用 5 组
不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字移动次数(关键字
交换计为 3 次移动)。
[测试数据]
由随机产生器决定。
[实现提示]
主要工作是设法在程序中适当的地方插入计数操作。程序还可以包括计算几组数据得出结果
波动大小的解释。注意分块调试的方法。
[选作内容]
对不同的输入表长做试验,观察检查两个指标相关于表长的变化关系。还可以对稳定性做验
证。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
22. 统计成绩
[问题描述]
给出 n 个学生的 m 门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。对
学生的考试成绩进行有关统计,并打印统计表。
[基本要求]
(1) 按总数高低次序,打印出名次表,分数相同的为同一名次;
(2) 按名次打印出每个学生的学号、姓名、总分以及各科成绩。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据。
[选作内容]
对各科成绩设置不同的权值。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
23. 运动会计分系统
[问题描述]
假设参加运动会有 n 个系,系编号为 1……n。比赛分成 m 个男子项目,和 w 个女子项目。
项目编号为男子 1……m,女子 m+1……m+w。不同的项目取前五名或前三名积分;取前五
名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三
名由学生自己设定。(m<=10,n<=15) [基本要求]
系统功能要求:
(1)可以输入各个项目的前三名或前五名的成绩; (2)能统计各系总分;
(3)可以按系编号、系总分、男女团体总分排序输出;
(4)可以按系编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的系。
[实现提示]
(1)输入数据形式和范围:系或运行项目可以用 20 以内的整数表示;也可以直接输入系的
名称或运动项目的名称;
(2)界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能
要求。
(3)存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储
在数据文件中,并在上交资料中说明所用到的存储结构;
(4)测试数据:测试数据及测试结果请在上交的资料中写明。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
24. 比较常用排序算法
[基本要求]
直接插入排序、希尔排序、直接选择排序、堆排序、起泡排序、快速排序。
(1)随机生成一组待排序数据,个数不少于 100 个;
(2)比较各种排序算法对同一组数据排序所需要的关键字比较次数和关键字移动次数,至
少使用 5 组数据进行比较;
(3)对比较结果进行简单分析。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
25. 学生成绩管理系统
问题描述:该系统实现对若干个大学生的学习成绩进行管理。至少包括以下信息:
学号、姓名、科目、成绩,学期。学期取值范围可为 1‐8。
功能要求:
1.使用中文菜单,界面设计和用户输入输出要人性化些;
2. 将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保
存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该
数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文
本文档中。
3.具有数据输入功能,输入的数据能最终保存在文件中;
4.具有数据删除功能,能最终从文件中删除;
5.排序功能,根据自己设计的数据结构,设计排序算法
6.具有多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;
7.其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有
学生的平均分等等)
8.学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)
说明:
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,
然后在其上使用不同的排序算法。
(3)若用数组,必须动态分配空间(文本文件中最好有一行表示学生人数)
算法要点:把问题看成是对线性表的操作。将学生成绩组织成顺序表,则登记学生成绩即是
建立顺序表操作;查询学生成绩、插入学生成绩、删除学生成绩即是在顺序表中进行查找、
插入和删除操作。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
26. 简易客房管理系统
问题描述:该系统能简单实现对客栈的住宿情况进行管理。至少包括以下信息:
房号、房型、单价(每床)、已住人数;
住客姓名、性别、年龄、身份、身份证号码,房号,床号,入住日期、入住时间、
离店日期、离店时间。
这些信息应存放在两个文件中,分别是客房信息文件、住客信息文件。“房型”
可取值 1‐3,分别表示单人间、双人间、通铺(可以住很多人的房间)
功能要求:
1.具有建立数据文件(客房信息文件、住客信息文件)功能;
2.具有数据输入功能;
3.具有数据修改功能;
4.具有数据删除功能;
5.能查询(查找)一些基本信息(如按房号查询、按姓名查询、空余客房查询等);
6.具有多种统计功能(要求有一定的实用性)
(如某客房当前有那些空床、某住客应付多少费用、某天住店总人数和总收入等)
7.能具有排序功能(比如在查询所有的客房信息时,能根据房间价格进行排序,方便客人
挑选房间等等)
说明:
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,
然后在其上使用不同的排序算法。
(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样
便于动态分配空间)
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
27. 人事档案管理系统
问题描述:该系统能简单实现对人事档案的管理。
该系统包括: 人员基本情况管理、工资管理和考勤管理等几个方面的功能。用户通过输入工
资、考勤、职工履历等基本信息,由系统自行生成相应的统计数据以供用户查询, 能对这些基
本信息进行更新和删除。
至少包括以下信息:
人员履历表:员工编号,员工姓名,性别,年龄,部门,职位,受教育年限
职工工资表:员工编号,基本工资,缺勤扣发工资,扣税,实发工资
月考勤登记表:员工编号,月缺勤天数
注:假设每个员工每天缺勤扣发工资的多少跟其基本工资存在一定关系,比如是该基本工
资的 20 分之一;假设扣税金额=(基本工资-缺勤扣发工资-2000)×10%,而若基本工资
-缺勤扣发工资-2000 的值小于 2000 则扣税金额为 0
功能要求:
1.具有建立数据文件(人员履历表文件、职工工资表文件、月考勤登记表)功能;
2.具有数据输入功能;
3.具有数据修改功能;
4.具有数据删除功能;
5.能查询(查找)一些基本信息(如按员工编号查询、按员工姓名和部门组合查询等,如
生成各部门员工花名册);
6.具有多种统计功能(要求有一定的实用性)
(如不同部门的员工平均工资比较(除了用数字表示外,也可以用星号画图的方式来直观的
表示);不同性别员工工资比较;某部门内部,不同职位员工工资比较;不同受教育水平人
的平均工资比较;部门最高实发工资等等)
7.具有排序功能(比如将各部门职工工资平均值进行排序,将部门内部职工工资进行排序
等等)
各个功能模块简要叙述(具体实现时,并不局限于这些功能,越完善越好)
- 人员基本情况管理:提供对”人员履历表”数据输入、组合条件查询、统计功能;
- 职工工资管理:提供对”职工工资表”数据的输入、查询、按统计、显示功能,完成每月
对“职工工资表”数据的月统计,以此生成“职工工资总额构成情况表”实现该表的查询、显
示功能。 - 职工考勤管理: 提供对各部门“月考勤登记表”数据的录入、查询、统计功能;
说明:
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,
然后在其上使用不同的排序算法。
(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样
便于动态分配空间)
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
28. 进销存货物管理系统
问题描述:
该系统能进行简单的货物管理,进货,销售货物,退货等管理
至少包括如下信息:
货物标号,货物名称,货物产地,入库价格,入库时间,现存货物数量,已经销售数量,销
售平均单价
注:每次销售后,都需要对现存货物数量进行更新,对已销售数量进行更新,也需要对销售
平均单价进行更新
功能要求:
1.具有建立数据文件(货物管理表)的功能;
2.具有数据输入功能;
3.具有数据修改功能;
4.具有数据删除功能(当一些已经过时陈旧的商品被特价处理后,将其删除,不再进货);
5.能查询(查找)一些基本信息(如能查询剩余件数小于某个特定值的商品,以便于及时
进货);
6.具有多种统计功能(要求有一定的实用性)
(如统计每种货物是否有盈利(将销售平均单价跟入库价格进行比较),所有货物的盈利或
亏损等等)
7.具有排序功能(比如对货物盈利水平进行排序比较等等)
说明:
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,
然后在其上使用不同的排序算法。
(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样
便于动态分配空间)
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
29. 图书管理系统
问题描述:
该系统能进行简单的图书管理功能
至少包括如下信息:
图书编号,图书名称,作者,出版社,总共册数,在馆册数,现存地址,借阅次数
注:现存地址是假设图书馆有多个书库,不同种类的书存放于不同的地方
功能要求:
1.具有建立数据文件(图书信息)的功能;
2.具有数据输入功能;
3.具有数据修改功能(借书或者还书都需要修改图书数量信息);
4.具有数据删除功能(当图书因为年代久远,或者遗失,也许需要对其进行删除操作);
5.能查询(查找)一些基本信息(这里的查询功能应该较为强大,能通过作者进行查询,
书名查询,或者结合作者出版社一起进行查询等等)
6.具有多种统计功能(要求有一定的实用性)
(如统计每本书的借阅次数,方便将来新近图书。统计每个书库中图书的数量等等)
7.具有排序功能(比如对每本图书的借阅次数进行排序)
各个功能模块简要叙述(具体实现时,并不局限于这些功能,越完善越好)
- 新近图书:在图书信息表中添加相应信息;
- 旧书处理:在图书信息表中删除相应信息;
- 借书还书: 对图书信息表进行修改,若在馆册书为 0,则不允许继续借阅;
- 图书信息的统计
- 图书信息的排序
- 图书信息的查找
说明:
(1)功能各方面越完善越好
(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,
然后在其上使用不同的排序算法。
(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样
便于动态分配空间)
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
30. 运动会分数统计
问题描述:参加运动会有 n 个学校,学校编号为 1……n.比赛分成 m 个男子项目,和 w 个女子
项目.项目编号为男子 1…m,女子 m+1…m+w.不同的项目取前五名或前三名积分;取前五
名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名
由同学自己设定。(m<=20,n<=20)
功能要求:
1.可以输入各个项目的前三名或前五名的成绩;
2.能统计各学校总分;
3.可以按学校编号、学校总分、男女团体总分排序输出;
4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学
校。
规定:输入数据形式和范围:20 以内的整数(如果做得更好可以输入学校的名称,运动项
目的名称)
输出形式:有中文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数
据文件中
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
31. 民航订票系统
任务:通过此系统可以实现如下功能:
1.录入
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
2.查询
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,
票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况,最近一天航
班的日期和余票额.;
3.订票业务;据顾客要求(航班号,订票额)查询该航班票额情况,若有余票,办理售票手续,输出
座位号;若已满员或票额不足,则另询顾客要求.若需要,可预约登记排队等候.
4.退票业务:根据顾客情况(日期,航班)为顾客办理退票手续,然后查询该航班是否有人预约
登记,首先询问排在第一位的顾客,若退票额能满足他的要求,则为他办理退票手续,否则依次
询问其他排队预约的顾客.
5.修改航班信息:
当航班信息改变可以修改航班数据文件。
基本要求:
1.根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
2.界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要
求。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111
32. 校园导游咨询
问题描述:设计校园导游程序,为来访的客人提供服务。
基本要求:
(1)假设有一所校园的平面图,所含景点不小于 10 个,请选择适当的坐标来表示出该图上
的各个景点。;
(2)为来访的客人提供从当前位置到其他景点的最短路径的咨询;
(3)必须具有校园平面图的修改和扩充功能(即某些景点坐标的修改和景点个数的增加)。
源码
https://pan.baidu.com/s/1J–MYtUyPilpJKTD15-SgA?pwd=1111