《数据结构与算法》课程设计
一. 课程设计的目的
学习数据结构与算法的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题。课程设计要求同学独立完成一个较为完整的应用需求分析,在完成设计和编程大型作业的过程中,深化对数据结构与算法课程中基本概念、理论和方法的理解;训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念;使同学的程序设计与调试水平有一个明显的提高。
经过查找参考资料、技术手册和撰写文档的实践,进一步培养软件工程师的综合素质。
课程设计所安排的题目,在难度和深度方面都大于课内的上机训练。
二. 课程设计的技术要求
同学们在处理每一个题目的时候,要从分析题目的需求入手,按设计抽象数据类型、构思算法、通过类的设计实现抽象数据类型、编制上机程序代码并调试的步骤完成题目,最终写出完整的分析报告。见到题目,案头工作准备不足,忙于上机敲程序不是优秀程序员的工作风格。注意设计与实现过程的经验积累,编码应尽量利用前阶段的成熟数据结构包,加大代码的重用率。
本次课程设计的具体技术要求包括:
1. 每个题目均要求有图形界面版本。
2. 有自学能力的同学可以运用 “多线程”技术,多线程会使图形界面的动画效果更逼真。
3. 数据的输入输出应有手动键盘和文件读写两种工作方式。
4. 在课程设计过程中,要进行中期检查和最终版程序的测试,设计文档的撰写必须提前进行,以保证使文档与程序同步提交。
三. 课程设计的需求分析步骤与文档格式
课程设计必须强化面向对象的思想方法,其设计的过程与步骤,就是撰写文档的主要脉络。主要设计步骤应包括:
分析问题归纳算法模型
设计ADT
类的细化设计与实现
类的调试与总体算法程序调试
算法分析
收获体会
四. 验收标准
验收包括程序测试结果、类设计的合理性和文档质量三部分。程序测试分标准数据样本测试、随机输入数据测试、查看源代码和变更问题需求条件的随机数据测试(对疑似相同的代码和文档将单独严格测试考核)。
在程序正确性的前提下,要兼顾界面设计和代码可重用性的质量,注重面向对象设计理念的考核。
上交的成果的内容必须由以下四个部分组成,缺一不可
1. 上交源程序:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中);
2. 上交程序的说明文件:(保存在.txt中)在说明文档中应该写明上交程序所在的目录,上交程序的主程序文件名,如果需要安装,要有程序的安装使用说明;
3. 课程设计报告:(保存在word
文档中,文件名要求 按照"姓名-学号-课程设计报告"起名,如文件名为"张三-001-课程设计报告".doc
)按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成;
其中包括:
a)需求分析
在该部分中叙述每个模块的功能要求
b)概要设计
在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。
c)详细设计
即各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)。
源程序要规范编写:结构要清晰,注释要清楚。重点函数的重点变量和重点功能部分要加上清楚的程序注释。
d)调试分析
测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。
4. 课设总结: (保存在word 文档中)总结可以包括 : 课程设计 过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。字数要求1500字及以上。
验收分两次进行:第一周的周六和周日,第二周的周六和周日。第一周验收通过的同学,成绩按照实际分数乘以1.2的系数后计算,第二周验收通过的同学,成绩按照实际分数计算。
课程设计过程中遇到问题需要协助时,请联系相应的指导老师。
五、课程设计题目
四个系统任选其一。
<!--[if !supportLists]-->1.
<!--[endif]-->订票系统
任务:通过此系统可以实现如下功能:
录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
订票:(订票情况可以存在一个数据文件中,结构自己设定) 可以订票,如果该航班已经无票,可以提供相关可选择航班;
退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息: 当航班信息改变可以修改航班数据文件
要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
<!--[if !supportLists]-->2.
<!--[endif]-->迷宫游戏设计与实现
任务:设计一个小型游戏,该游戏主界面为含有10×10个小方块的正方形,游戏中含有红、橙、蓝、绿、紫、黄等六种颜色的棋子,每个小方块中可以放入一粒棋子。游戏规则为:系统每次随机的产生三粒棋子并随机放入棋盘中空的小方格中,如果棋盘小方格A中存在棋子,棋盘小方格B中为空,并且存在一条从A到B的路径,该路径所经过的所有小方格中都没有棋子,则A中棋子可以移到B中。当同一颜色的棋子有5颗或超过5颗紧邻并且在同一方向则可以消去,并且玩家得分(前面5颗棋子每消去一颗得2分,后面每消去一颗的得分是前面一颗得分的两倍,如消去5颗得10分,消去6颗得14分,消去7颗得22分…),游戏记录前10名的成绩。
界面要求:棋子在小方格A中移到B中要动态显示移动的全过程。
要求:在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度;
3. 学生成绩管理系统
任务:建立一个简单的学生信息管理系统,该系统为注册学生保存基本信息、选课信息以及课程成绩。系统要方便基本信息、选课信息、成绩的增加、删除、修改及查询。为实现快速查询,要求对基本信息、选课信息和成绩建立相应的索引,学生成绩采用平衡二叉树建索引,对学生姓名采用Hash建立索引,对学号实现折半查找。
要求:
<!--[if !supportLists]-->1)
<!--[endif]-->可以按成绩高低输出所有成绩;
<!--[if !supportLists]-->2)
<!--[endif]-->可以按区间段查询成绩;
<!--[if !supportLists]-->3)
<!--[endif]-->可以按区间段统计成绩。
<!--[if !supportLists]-->4)
<!--[endif]-->可以按成绩、姓名、学号等信息查询。
<!--[if !supportLists]-->5)
<!--[endif]-->二叉树的各种操作要求写出递归和非递归两种方式。
4. 封锁管理子系统模拟实现
封锁管理子系统通过加锁来控制用户对系统资源的并发使用。用户使用系统资源前必须申请封锁,即给出申请封锁的对象资源号、封锁方式和用户名。其中资源号是取值为1~999 999的正整数,封锁方式为S(共享)或X(排他)。两种封锁方式的相容矩阵如图所示:
相容矩阵
子系统受封锁请求,根据所保存的封锁状态信息决定请求是否能够获得封锁,进行相应处理,并向用户反馈处理结果。如果获得封锁,则赋给该请求一个批准号,可以使用该资源;否则需要进入等待队列(赋给该请求一个批准号)。
用户结束对某资源的使用后,应释放封锁(给出封锁对象的资源号和封锁批准号)。系统受理解锁请求时必须能迅速找到有关对象的封锁状况信息,以进行相应处理。为满足此要求,可采用散列表加链表的数据结构,如图所示:
封锁管理子系统示意图
其中散列表的元素对应为封锁对象,以对象的资源号为散列函数的自变量(即关键码值)。散列表中元素仅为一个指向封锁对象链表的指针。LO为封锁对象结点,对应于同一散列地址的封锁对象链接到一个链表中。LR为封锁请求结点。每个封锁对象结点带两个封锁请求队列:活动队列中为当前持有对该对象的封锁请求,等待队列中为正在等待对该对象进行封锁的封锁请求。LO结点和LR结点均向子系统自己管理的可利用空间表申请。
请设计并实现散列表、LO链表、LR活动队列、LR等待队列、可利用空间表的结构和基本运算。在此基础上使封锁管理子系统能提供以下功能:
<!--[if !supportLists]-->(1)
<!--[endif]-->受理用户从中断输入的封锁请求进行相应处理,并给出反馈信息;
<!--[if !supportLists]-->(2)
<!--[endif]-->受理用户从终端输入的解锁请求,进行相应处理;
<!--[if !supportLists]-->(3)
<!--[endif]-->显示封锁状况信息(用户从终端输入资源号名子系统显示该对象的LR活动队列和LR等待队列)。
- 大小: 10.3 KB
分享到:
相关推荐
在JavaScript中,获取给定日期所在月份的第一个星期一或者最后一个特定星期几是一项常见的任务,尤其在数据处理、日历应用或者时间相关的编程中。这里我们将深入探讨如何实现这个功能,并结合实际示例来理解相关代码...
这会打开一个新窗口,允许你更改与日期、时间和语言相关的设置。 3. 在“区域与语言选项”窗口中,切换到“区域选项”标签页。 4. 点击“自定义”按钮,进入“自定义区域选项”窗口。 5. 在这个窗口中,选择“日期”...
标题中的“能在任务栏显示星期几的小软件”指的是一个能够集成到Windows操作系统任务栏的实用小工具,它的主要功能是在任务栏上实时显示当前日期中的星期几。这种类型的软件通常是为了方便用户快速查看日期和星期,...
# 题目: # 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。 # 分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
这个压缩包"jQuery纵向TAB星期任务列表代码.zip"包含了一个使用jQuery实现的、基于星期的纵向任务列表的示例代码。接下来,我们将深入探讨这个项目涉及的技术点,包括CSS、HTML5、JavaScript和jQuery。 1. **HTML5*...
本篇文章将深入探讨如何利用jQuery来创建一个独特的纵向星期任务列表特效,通过分析“jQuery纵向TAB星期任务列表特效源码.zip”中的代码,我们将揭示其背后的技术实现。 首先,我们要理解jQuery库的核心思想——...
标题中的“发个小工具,让win7的窄任务栏能显示日期+时间+星期”意味着这个压缩包包含了一个软件或程序,我们将其称为KClock,它设计用于Windows 7操作系统,目的是增强系统任务栏的时间显示功能。在默认情况下,...
KClock.exe 是一款专为Windows任务栏设计的时间增强工具,旨在提供更为丰富的日期和时间显示方式,...对于那些需要频繁关注日期和时间的用户,如办公人员、程序员或是时间管理爱好者,KClock都是一个值得尝试的选择。
本示例中的“jQuery纵向动画切换选项卡TAB星期任务列表代码”是利用jQuery来创建一个功能丰富的用户界面,主要用于展示和管理一周内的待办事项。下面我们将详细探讨这个项目中的关键知识点。 首先,`index.html`是...
本项目“jQuery纵向动画切换选项卡TAB星期任务列表代码”旨在利用jQuery的功能来创建一个动态的、视觉吸引人的任务管理界面,其中用户可以通过点击星期选项卡,以纵向动画效果查看和切换不同的待办事项列表。...
黑色星期五是指某天既是13号又是星期五。13号在星期五的情况比在...给出n年的一个周期,要求计算从1900年1月1日至1900+n-1年12月31日中13号落在周一到周日的次数,n为正整数且不大于400,(已知1900年1月1日是星期一)
而KClock.ini则可能是一个配置文件,用于存储用户的自定义设置,如时间格式、是否显示秒、星期等选项。用户可以通过修改这个配置文件来自定义任务栏时间的显示样式。 使用这类工具时,用户需要注意几点: 1. 确保从...
在VB(Visual Basic)编程中,查询日期对应的星期是一个常见的任务,这主要涉及到日期和时间的处理。在VB中,我们可以使用内置的Date函数来创建日期对象,然后通过Weekday函数来获取该日期对应的星期几。这篇教程将...
标题中的“时可通在任务栏显示阴历星期”指的是一个软件功能,它允许用户在Windows任务栏的时间显示区域同时看到阳历日期、阴历日期以及星期几的信息。这一功能对于那些关注中国传统农历或者需要同时查看公历和农历...
标题中的“任务栏时间增强工具 可显示月日星期时间”指的是一个专门针对Windows操作系统任务栏时间显示的增强软件。这种软件通常会扩展系统默认的任务栏时钟功能,使其不仅显示当前时间,还能同时显示日期、星期等...
标题“任输入一个时间显示星期几”涉及到的编程任务是在C/C++环境下,根据用户输入的日期计算出该日期是星期几。这个功能在很多日常应用中都很常见,例如日历应用或者时间管理软件。在C/C++中实现这样的功能需要理解...
在这个例子中,`getWeek()`函数根据输入的年、月、日返回一个星期中的天数,然后`switch case`结构根据返回值输出对应的星期名称。当然,实际的`getWeek()`函数实现需要包含计算星期几的算法,如蔡勒公式: ```cpp ...
为了将这个整数值转换为更易读的星期几的文本,我们可以使用一个Select Case语句或者If...Then...ElseIf结构: ```vb Dim dayOfWeekText As String Select Case currentDayOfWeek Case 1 dayOfWeekText = "星期日...
在循环结束后,如果找到至少一个黑色星期五,程序会输出该年份的黑色星期五的总数,否则输出“无黑色星期五”。 整个程序的核心在于对日期的计算和星期的判断,以及对闰年的识别。数组的使用简化了日期的处理,而...