1、物联网工程数据结构及算法课程设计指导书 数据结构与算法 课程设计指导书 一目的通过本课程设计,使同学更加系统地理解和掌握数据结构的基本概念; 能自如地根据实际要求,设计相应的数据结构,并运用C或C+语言实现所设计的算法,能够利用所学的基本知识和技能,分析和解决简单的程序设计问题 ,为后续其它专业课程的学习和应用打下良好基础。二题目根据指导教师的具体要求,从下面题目中选择1个来完成1 学生成绩管理系统2 简易客房管理系统3 人事档案管理系统4 进销存货物管理系统5 图书管理系统6 运动会分数统计7 民航订票系统8 校园导游咨询9 长整数的加减法10 表达式的求值11 钱币的转换12 二叉树的应用
2、哈夫曼树13 银行排队系统模拟14 文章编辑器15 车票管理系统16 连连看17 扫雷18 贪吃蛇19 俄罗斯方块20 飞行棋21 其他题目(需老师同意)注意(1)在实现相关管理系统题目时,需要设计良好的数据结构,代码编写时不允许运用现有的数据库管理系统,具体功能应通过对文件的读写操作实现。(2)其中题目1、2、3、4、5、6、7、14、15必需使用文件进行读写操作,文件读写操作有单独文档提供编程参考。(3)验收分数与任务完成的质量有关。(4)游戏类实现可以采用其他编程语言,但程序中必需要正确使用数据结构。三任务完成形式1 完整的软件系统 最终必须向指导老师提交完整的程序源代码(.c和.cpp
3、以及.h为后缀的文件)、数据文件以及使用说明文件等。源代码文件要特别注意编程规范、代码风格,关键代码需有合理的注释,不含任何无用代码;数据文件内要求有一定数量的“真实”数据(如对于记录文件,需要有5条以上记录); 使用说明文件的第一行,需要给出设计者的学号、姓名,后面为其它说明。2 课程设计报告(详细要求请参考附录二)课程设计报告总体上主要包括以下几个部分:1)封面2)目录3)课程设计报告正文4)使用说明5)参考文献四总体要求1 每道题目的程序代码总量不少于600行(其中不包括自动生成代码),有合理注释。2 课程设计报告正文字数不少于8000字,概念清楚、叙述正确、内容完整、书写规范。3 独立
4、完成课程设计,不得抄袭他人。4 功能正确、有一定实用性。5 尽可能大量使用各种C或者C+语言程序设计技术,尤其在以下几个方面:指针及其运算、结构、指针数组、数组指针、字符数组与字符串、内存空间动态申请与释放、文件访问与操作、合理的常量与全局变量及函数接口变量定义、数据输入与数据格式检查、数据类型转换、错误处理、工程设计技术(整个系统由一个工程文件、若干个程序文件、若干头文件、甚至库文件等组成)。程序界面不做较高要求,但要考虑到用户使用的方便,有较好的交互界面。6 可以使用VC编译环境开发程序,但不允许使用现成的数据库如access,SQL Server等完成上面的课程设计题目,否则成绩评定为不
5、及格。7 设计时适当考虑程序的可维护性与可扩充性。8 提倡积极交流与讨论(同学间、bbs站点)、善于查阅资料、分析与借鉴他人编写的软件。9 认真自觉以个人为单位完成自己的任务,代码和课设报告均严禁雷同,否则成绩为不及格。验收时查看代码,并提出若干个跟程序代码有关的问题,并把问题回答情况计入总评成绩。 10、根据不同的数据结构,要求有一种数据结构算法(冒泡排序算法不包括)。五工作阶段与考核方法大体上可分成五个阶段: 1资料查阅准备阶段(15%)2分析设计阶段(35%)3编程调试阶段(40%)4课程设计报告书写阶段(10%)5验收阶段 考核方法: 只有程序验收通过后,才能按以下方法核定本次课程设计
6、的总成绩,因未能独立完成设计(尤其是抄袭)或概念不清的同学,总成绩将核定为不及格。总成绩由以下几个部分决定:1 考勤、纪律、实验室卫生2 工作量(代码量、功能多少、难度)3 关键技术4 实用性、创新5 代码书写规范性6 程序界面、新技术引用7 课程设计报告(叙述、书写规范、字数)8 动手能力、分析问题解决问题能力 六任务具体要求1、学生成绩管理系统问题描述:该系统实现对若干个大学生的学习成绩进行管理。至少包括以下信息:学号、姓名、科目、成绩,学期。学期取值范围可为1-8。功能要求:1使用中文菜单,界面设计和用户输入输出要人性化些;2. 将学生信息保存在文本文档中,具体对学生信息进行插入删除查询
7、操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中。3具有数据输入功能,输入的数据能最终保存在文件中;4具有数据删除功能,能最终从文件中删除;5排序功能,根据自己设计的数据结构,设计排序算法6具有多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;7其它功能(如各种统计,统计每个学生所有课程的平均分,统计某门课程所有学生的平均分等等)8学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)说明:(1)功能各方面越完善越好(2)自定义的数据结构可以使用数组,链表,树等,
8、可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。(3)若用数组,必须动态分配空间(文本文件中最好有一行表示学生人数)算法要点:把问题看成是对线性表的操作。将学生成绩组织成顺序表,则登记学生成绩即是建立顺序表操作;查询学生成绩、插入学生成绩、删除学生成绩即是在顺序表中进行查找、插入和删除操作。2、简易客房管理系统问题描述:该系统能简单实现对客栈的住宿情况进行管理。至少包括以下信息:房号、房型、单价(每床)、已住人数;住客姓名、性别、年龄、身份、身份证号码,房号,床号,入住日期、入住时间、离店日期、离店时间。这些信息应存放在两个文件中,分别是客房信息文件、住客信息文件。“房型”可取值
9、1-3,分别表示单人间、双人间、通铺(可以住很多人的房间)功能要求:1具有建立数据文件(客房信息文件、住客信息文件)功能;2具有数据输入功能;3具有数据修改功能;4具有数据删除功能;5能查询(查找)一些基本信息(如按房号查询、按姓名查询、空余客房查询等);6具有多种统计功能(要求有一定的实用性)(如某客房当前有那些空床、某住客应付多少费用、某天住店总人数和总收入等)7能具有排序功能(比如在查询所有的客房信息时,能根据房间价格进行排序,方便客人挑选房间等等)说明:(1)功能各方面越完善越好(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法
10、。(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)3、人事档案管理系统问题描述:该系统能简单实现对人事档案的管理。该系统包括: 人员基本情况管理、工资管理和考勤管理等几个方面的功能。用户通过输入工资、考勤、职工履历等基本信息,由系统自行生成相应的统计数据以供用户查询, 能对这些基本信息进行更新和删除。至少包括以下信息:人员履历表:员工编号,员工姓名,性别,年龄,部门,职位,受教育年限职工工资表:员工编号,基本工资,缺勤扣发工资,扣税,实发工资月考勤登记表:员工编号,月缺勤天数注:假设每个员工每天缺勤扣发工资的多少跟其基本工资存在一定关系,比如是
11、该基本工资的20分之一;假设扣税金额(基本工资缺勤扣发工资2000)10,而若基本工资缺勤扣发工资2000的值小于2000则扣税金额为0功能要求:1具有建立数据文件(人员履历表文件、职工工资表文件、月考勤登记表)功能;2具有数据输入功能;3具有数据修改功能;4具有数据删除功能;5能查询(查找)一些基本信息(如按员工编号查询、按员工姓名和部门组合查询等,如生成各部门员工花名册);6具有多种统计功能(要求有一定的实用性)(如不同部门的员工平均工资比较(除了用数字表示外,也可以用星号画图的方式来直观的表示);不同性别员工工资比较;某部门内部,不同职位员工工资比较;不同受教育水平人的平均工资比较;部门
12、最高实发工资等等)7具有排序功能(比如将各部门职工工资平均值进行排序,将部门内部职工工资进行排序等等)各个功能模块简要叙述(具体实现时,并不局限于这些功能,越完善越好) 人员基本情况管理:提供对”人员履历表”数据输入、组合条件查询、统计功能; 职工工资管理:提供对”职工工资表”数据的输入、查询、按统计、显示功能,完成每月对“职工工资表”数据的月统计,以此生成“职工工资总额构成情况表”实现该表的查询、显示功能。 职工考勤管理: 提供对各部门“月考勤登记表”数据的录入、查询、统计功能; 说明:(1)功能各方面越完善越好(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,
13、然后在其上使用不同的排序算法。(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)4、进销存货物管理系统问题描述:该系统能进行简单的货物管理,进货,销售货物,退货等管理至少包括如下信息:货物标号,货物名称,货物产地,入库价格,入库时间,现存货物数量,已经销售数量,销售平均单价注:每次销售后,都需要对现存货物数量进行更新,对已销售数量进行更新,也需要对销售平均单价进行更新功能要求:1具有建立数据文件(货物管理表)的功能;2具有数据输入功能;3具有数据修改功能;4具有数据删除功能(当一些已经过时陈旧的商品被特价处理后,将其删除,不再进货);5能查询(查
14、找)一些基本信息(如能查询剩余件数小于某个特定值的商品,以便于及时进货);6具有多种统计功能(要求有一定的实用性)(如统计每种货物是否有盈利(将销售平均单价跟入库价格进行比较),所有货物的盈利或亏损等等)7具有排序功能(比如对货物盈利水平进行排序比较等等) 说明:(1)功能各方面越完善越好(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)5、图书管理系统问题描述:该系统能进行简单的图书管理功能至少包括如下信息:图书编号,图书名称,作者,出
15、版社,总共册数,在馆册数,现存地址,借阅次数注:现存地址是假设图书馆有多个书库,不同种类的书存放于不同的地方功能要求:1具有建立数据文件(图书信息)的功能;2具有数据输入功能;3具有数据修改功能(借书或者还书都需要修改图书数量信息);4具有数据删除功能(当图书因为年代久远,或者遗失,也许需要对其进行删除操作);5能查询(查找)一些基本信息(这里的查询功能应该较为强大,能通过作者进行查询,书名查询,或者结合作者出版社一起进行查询等等)6具有多种统计功能(要求有一定的实用性)(如统计每本书的借阅次数,方便将来新近图书。统计每个书库中图书的数量等等)7具有排序功能(比如对每本图书的借阅次数进行排序)
16、 各个功能模块简要叙述(具体实现时,并不局限于这些功能,越完善越好) 新近图书:在图书信息表中添加相应信息; 旧书处理:在图书信息表中删除相应信息; 借书还书: 对图书信息表进行修改,若在馆册书为0,则不允许继续借阅; 图书信息的统计 图书信息的排序 图书信息的查找 说明:(1)功能各方面越完善越好(2)自定义的数据结构可以使用数组,链表,树等,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。(3)若用数组,必须动态分配空间(文本文件中最好有一行来表示数组应该有多大,这样便于动态分配空间)6、运动会分数统计问题描述:参加运动会有n个学校,学校编号为1n.比赛分成m个男子项目,和w
17、个女子项目.项目编号为男子1.m,女子m+1.m+w.不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由同学自己设定。(m=20,n=20)功能要求:1.可以输入各个项目的前三名或前五名的成绩;2.能统计各学校总分;3.可以按学校编号、学校总分、男女团体总分排序输出;4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜
18、单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。 7、民航订票系统任务:通过此系统可以实现如下功能:1录入可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2查询可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况,最近一天航班的日期和余票额.;3订票业务;据顾客要求(航班号,订票额)查询该航班票额情况,若有余票,办理售票手续,输出座位号;若已满员或票额不足,则另询顾客要求.若需要,可预约登记排队等候.
19、 4退票业务:根据顾客情况(日期,航班)为顾客办理退票手续,然后查询该航班是否有人预约登记,首先询问排在第一位的顾客,若退票额能满足他的要求,则为他办理退票手续,否则依次询问其他排队预约的顾客.5修改航班信息:当航班信息改变可以修改航班数据文件。基本要求:1根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。8、校园导游咨询 问题描述:设计校园导游程序,为来访的客人提供服务。 基本要求: (1)假设有一所校园的平面图,所含景点不小于10个,请选择适当的坐标来表示出该图上的各个景点。; (2)为来
20、访的客人提供从当前位置到其他景点的最短路径的咨询; (3)必须具有校园平面图的修改和扩充功能(即某些景点坐标的修改和景点个数的增加)。9、长整数的加减运算 问题描述:设计一个实现任意长的整数进行加法运算的演示程序基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是(2151)(2151)。输入输出形式:按照中国对于长整数的表示习惯,每四位是一组,组间用逗号隔开更高要求:(1)长整数的减法(2)多个长整数的连续加减法,并带括号等。具体方式可以参见表达式的求值部分,利用栈测试数据:(1)0;0;应输出“0”(2)2345,6789;7654,3211;应输出“1
21、,0000,0000”(3)9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”(4)1,0001,0001;1,0001,0001;应输出“0”(5)1,0001,0001;1,0001,0000;应输出“1”(6)9999,9999,9999;9999,9999,9999;应输出“1,9999,9999,9998”(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”实现提示:(1)每个结点中可以存放的最大整数为215132767,才能保证两数相加不会溢出。但若这样存,即相当于按32768进制数存,在十进制数与3276
22、8进制数之间的转换十分不方便。故可以在每个结点中仅存十进制数的4位,即不超过9999的非负整数。整个链表是为万进制数。(2)可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。10、表达式的求值 表达式求值要求: 例如,输入25*(12-27/3)+2*5= 则程序运行后输出25*(12-27/3)+2*5=85设计要求:以字符序列的形式从终端输入不含变量的算术表达式(整数和实数都要考虑),利用给定的算符优先关系,实现对算术四则混合运算表达式的求值, 基本要求
23、: (1)输入四则表达式(有括号和加减乘除,且表达式中有可能会出现带小数点的浮点数); (2)判断表达式是否合法(括号是否匹配); (3)按照运算符的优先级计算算术表达式的值。更高要求:(1)演示在求值过程中运算符栈、操作数栈的变化过程。(2)判断表达式的语法是否正确(比如12就是错误的)11、钱币的转换银行经常需要进行输入输出大小写的转换。要求:(1) 编写程序实现将阿拉伯数字表示的钱币数,表示为用中文表示的钱币书:比如输入10.2元,则输出拾元贰角三分(2) 编写程序实现将中文表示的钱币数表示为阿拉伯数字表示的钱币数:比如输入三角,则输出0.3元(3) 需要注意:100000,中文表示是拾
24、万元;0.3元表示为三角。希望大家把具体情况都能考虑清楚。设计比较良好的用户提示界面。12、二叉树的应用哈夫曼树(电文的编码和译码)哈夫曼编码/译码器 问题描述:设计一个哈夫曼编码/译码系统,对字符串进行编码/译码 基本要求: (1)从键盘输入字符串,以回车结束; (2)根据字符串中字符出现的概率进行哈夫曼编码;) (3)并输出编码结果和编码表;(4)根据编码结果和编码表还原字符串; (5)输出编码过程中构造的哈夫曼树。内容:理解二叉树的基本概念,并在读懂下面详细描述的算法的情况下,编写一个有关二叉树的简单应用程序电文的编码和译码具体实验题目和功能要求如下:(1)电文编码:假如有一份电文中共使
25、用5个字符:a、b、c、d、e,它们的出现频率依次为4、7、5、2、9,试画出对应的哈夫曼树(请按左子树根结点的权小于等于右子树根结点的权的次序构造),并求出每个字符的哈夫曼编码其中:得到的哈夫曼树和哈夫曼编码如下。图1要求自己编程实现若从键盘输入若干字符,同时并输入它们各自出现的频率,最后能计算并在屏幕上显示出每个字符的代码。(2)电文译码:给出一段二进制代码的电文,要求根据前面构造的huffman树进行译码。在前面编码的基础上,键盘输入一段电文,则能在屏幕上显示出自动翻译好的电文。比如根据图1显示的哈夫曼树,键盘输入电文如下:1011010,屏幕上能显示自动翻译的结果为bed说明事项:1.
26、通过上面的描述本课程设计题目包括(1)电文的编码(2)电文的译码,要求必须用哈夫曼树实现。2. 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。并要明确,只有在使用哈夫曼树进行编码的前提下,才有可能进行译码。3.考虑将此程序设计完善,比如可以将编码后的字符代码保存到文件中,将需要翻译的代码保存到另一个文件中,最后把自动翻译后的结果也保存到文本文档中等等。在这个程序中,首先要构造一棵哈夫曼树,然后才能根据这棵哈夫曼树构造编码。因此,步骤一:构造哈夫曼树步骤二:根据哈夫曼树为每个字符编码步骤三:根据步骤二中构造好的哈夫曼树进行译码提示:具体算法见后面的有关哈夫曼树的
27、基础知识介绍部分代码(仅供参考)如下:const int N=5;/叶子结点数目const int TREENODENUM=2*N-1;/结点总数/huffman树结点的结构typedef char dataType;typedef struct float weight; dataType data; int lchild,rchild,parent; huffmanTreeNode;/哈夫曼编码的结构typedef struct char bitsN;/详细的编码,不过是反的,要从cnt开始读 int cnt;/记录这个字符数由几位bit表示的 dataType data;/编码要表示的字
28、母codeType;有关哈夫曼树的基础知识介绍(1)哈夫曼树的定义哈夫曼树:设有个权值,构造一棵有个叶子结点的二叉树,每个叶子结点的权值为,则最小的二叉树叫哈夫曼树其中:为权值为结点到根到路径长度为叶子结点数(2)构造Huffman树的方法Huffman算法构造Huffman树步骤如下:根据给定的n个权值w1,w2,wn,构造n棵只有根结点的二叉树,令其权值为wj在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和在森林中删除这两棵树,同时将新得到的二叉树加入森林中重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树例如:第一步:n棵只
29、有根结点的二叉树,每个结点有相应代表的符号和权值第二步:从中挑出权值最小的合并生成一棵新的树,置新生成的二叉树的根结点第三步:不断重复第二步,直到只有一个根结点第四步:最后完成一棵huffman树哈夫曼树结点的存储结构(3)哈夫曼树应用(哈夫曼编码)哈夫曼树中没有度为1的结点,称为严格的二叉树。哈夫曼编码:数据通信用的二进制编码思想:根据字符出现频率编码,使电文总长最短编码:根据字符出现频率构造哈夫曼树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子到路径上得到到0、1序列例如:要传输到字符集DC,A,S,T,;字符出现频率w2,4,2,
30、3,3得到的哈夫曼树和哈夫曼编码为(4)Huffman编码算法的基本思想从叶子treei出发,利用双亲地址找到双亲结点treep,再利用treep的lchild和rchild指针域判断treei是treep的左孩子还是右孩子,然后决定分配代码是“0”还是“1”,然后以treep为出发点继续向上回溯,直到根结点为止(5)Huffman译码算法的基本思想从Huffman树根开始,从待译码电文中逐位取码。若编码是“0”,则向左走;若编码是“1”,则向右走,一旦到达叶子结点,则译出一个字符;再重新从根出发,直到电文结束13、银行排队系统模拟假设某银行有n个窗口对外接待客户,从早晨银行9点开门起到5点关门,不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进银行的客户。如果某个窗口的业务员正空闲,则可上前输业务。反之,若个窗口均有客户所占,他便会排
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1