数据结构课程设计报告书

合集下载

数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。

二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。

在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。

三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。

2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。

3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。

4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。

5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。

四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。

2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。

通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。

3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。

链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。

在实现链表时,我们定义了一个节点结构,包含数据域和指针域。

通过指针的方式将节点连接起来,形成一个链式结构。

同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。

4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。

数据结构课程设计报告

数据结构课程设计报告

数据结构课程设计报告数据结构课程设计报告设计题目:实现一个简单的通讯录管理系统设计背景:在日常生活中,我们经常需要管理并使用一些联系人的联系信息,例如电话号码、姓名、地址等。

为了方便对这些联系人进行管理和查询,我们设计了一个简单的通讯录管理系统。

设计目的:本设计旨在通过实现一个通讯录管理系统,加深对数据结构的理解和应用。

通过该系统,用户可以方便地添加、删除、修改和查询联系人信息,提高信息的管理效率和准确性。

设计原理:该系统采用基于链表的数据结构,其中每个节点存储一个联系人的信息,包括姓名、电话号码和地址。

系统提供了以下功能:1. 添加联系人:用户可以输入联系人的姓名、电话号码和地址,程序将创建一个新节点,并将其插入链表中。

2. 删除联系人:用户可以输入要删除的联系人姓名,程序将遍历链表查找到该节点,并将其删除。

3. 修改联系人信息:用户可以输入要修改的联系人姓名,程序将遍历链表查找到该节点,并允许用户修改联系人的电话号码和地址。

4. 查询联系人信息:用户可以输入要查询的联系人姓名,程序将遍历链表查找到该节点,并显示联系人的姓名、电话号码和地址。

设计过程:1. 定义联系人信息结构:创建一个结构体,包含姓名、电话号码和地址等字段的定义。

2. 定义链表节点结构:创建一个结构体,包含联系人信息和指向下一个节点的指针。

3. 实现添加联系人功能:用户输入联系人信息,程序创建一个新节点,并将其插入链表的适当位置。

4. 实现删除联系人功能:用户输入要删除的联系人姓名,程序遍历链表查找到该节点,并将其删除。

5. 实现修改联系人信息功能:用户输入要修改的联系人姓名,程序遍历链表查找到该节点,并允许用户修改联系人的电话号码和地址。

6. 实现查询联系人信息功能:用户输入要查询的联系人姓名,程序遍历链表查找到该节点,并显示联系人的姓名、电话号码和地址。

7. 设计界面显示:使用控制台界面,根据用户选择调用相应的功能函数。

设计结果:通过实验和测试,我们成功实现了一个简单的通讯录管理系统。

数据结构课程设计实验报告 完整版

数据结构课程设计实验报告 完整版

第一章链表的应用线性表是数据结构中最简单、最常用的一种线性结构,也是学习数据结构全部内容的基础,其掌握的好坏直接影响着后继课程的学习。

线性表的顺序存储结构,即顺序表的概念相对比较简单,因此,本章的主要任务是使用有关单链表的操作来实现通讯录信息系统的管理。

1.1设计要求本章的设计实验要求使用有关链表的操作来实现通讯录信息系统的管理。

为了验证算法,通讯录管理包括单通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询及通讯录表的输出等。

主控菜单的设计要求使用数字0—5来选择菜单项,其他输入则不起作用。

程序运行后,给出6个菜单项的内容和输入提示:1.通讯录链表的建立2. 通讯者结点的插入3. 通讯者结点的查询4. 通讯者结点的删除5. 通讯录链表的输出0. 退出管理系统请选择0—5:1.2设计分析1.2.1主控菜单函数设计分析1.实现循环和功能选择首先编写一个主控菜单驱动程序,输入0—5以进入相应选择项。

假设输入选择用变量sn存储,它作为menu_select函数的返回值给switch语句。

使用for循环实现重复选择,并在主函数main()中实现。

实际使用时,只有选择大于5或小于0的值,程序才能结束运行,这就要使用循环控制。

这里使用for循环语句实现菜单的循环选择,为了结束程序的运行,使用了“return”语句,也可以使用“exit(0);”语句。

2.得到sn的合理值如前所述,应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值sn,以便供给switch语句使用。

假设函数名为menu_select,对于sn的输入值,在switch 中case语句对应数字1—5,对于不符合要求的输入,提示输入错误并要求重新输入。

将该函数与主函数合在一起,编译运行程序,即可检查并验证菜单选择是否正确。

1.2.2功能函数设计分析1.建立通讯录链表的设计这里实际上是要求建立一个带头结点的单链表。

建立单链表有两种方法,一种称之为头插法,另一种称为尾插法。

数据结构课程设计报告书

数据结构课程设计报告书

1引言本设计使用C语言编写程序,以栈为主体实现功能,所以首先我们要认识一下栈。

栈是限定仅在表尾进行插入或删除操作的线性表,其存取数据时按照后进先出的原则进行。

而此次课程设计就是利用栈的这一特性并结合栈的输入、输出、判空等基本操作,来实现栈的三种实际应用:数制转换,行编辑和括号匹配。

2问题分析2.1 设计内容的分析本次课程设计的目标是使用C语言编写一个程序,当使用者进入程序时,首先出现一个菜单项,使用者可以选择所要实现的功能,从而进入相应的程序模块:数制转换:进入此模块后,程序提示输入任意一个十进制数和所要转换的进制,程序运行后得到相应进制的数据。

行编辑:进入模块后,程序提示输入原始数据,运行时当遇到#时退格一个,当遇到@时,清空所在行中之前的所有数据;当遇到\n时,完成前一行的输入处理,进行下一行的输入;当遇到¥时,全文输入编辑结束。

括号匹配:进入模块后,程序提示输入所要检验的括号以#为结束符,当括号匹配不正确时,程序输出相应的:左右括号匹配次序不正确,左括号多于右括号,右括号多于左括号。

当左右括号匹配无误时,输出左右括号匹配正确。

2.2 程序中用到的数据结构本程序主要是运用栈的相关知识,所以为了实现上述的三种功能,需要定义栈的结构用于储存数据:typedef char ElemType;//定义用户变量,代替char,便于以后修改typedef struct{ElemType *base;//在栈构造之前和销毁之后,base的值为NULLElemType *top;//栈顶指针int stacksize;//当前已分配的存储空间,以元素为单位}SqStack;实现第一个模块功能时,需要使用while语句进行栈的输入输出。

实现第二个模块功能时,需要使用while语句和swicth语句的嵌套来进行文本编辑实现第三个模块功能时,需要使用if、else语句的多重嵌套来判断匹配3总体设计3.1 总体设计思路本程序主要首先在主函数通过调用switch 语句来选择需要实现的功能,从而进入相应的函数模块。

数据结构课程设计(5篇)

数据结构课程设计(5篇)

数据结构课程设计(5篇)第一篇:数据结构课程设计课程设计说明书设计名称:数据结构课程设计题目:设计五:二叉树的相关操作学生姓名:专业:计算机科学与技术班级:学号:指导教师:日期: 2012 年 3 月 5 日课程设计任务书计算机科学与技术专业年级班一、设计题目设计五二叉树的相关操作二、主要内容建立二叉树,并对树进行相关操作。

三、具体要求1)利用完全二叉树的性质建立一棵二叉树。

(层数不小于4层)2)统计树叶子结点的个数。

3)求二叉树的深度。

4)能够输出用前序,中序,后序对二叉树进行遍历的遍历序列。

四、进度安排依照教学计划,课程设计时间为:2周。

本设计要求按照软件工程的基本过程完成设计。

建议将时间分为三个阶段:第一阶段,根据题目要求,确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;第二阶段,根据流程图编写程序代码并调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。

三个阶段时间分配的大概比例是:35: 45: 20。

五、完成后应上交的材料本课程设计要求按照学校有关规范的要求完成,在课程设计完成后需要提交的成果和有关文档资料包括课程设计的说明书,课程设计有关源程序及可运行程序(含运行环境)。

其中课程设计说明书的格式按学校规范(见附件),其内容不能过于简单,必须包括的内容有:1、课程设计的基本思想,系统的总功能和各子模块的功能说明;2、课程设计有关算法的描述,并画出有关算法流程图;3、源程序中核心代码的说明。

4、本课程设计的个人总结,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。

5、源代码要求在关键的位置有注释,增加程序的可读性。

程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。

数据结构课程设计任务书报告

数据结构课程设计任务书报告

一、设计目的《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。

本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。

二、设计要求1、通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

2、学生必须仔细研读《数据结构》课程设计(实习)要求,以学生自学为主、指导教师指导为辅,认真、独立地完成课程设计的任务,有问题及时主动与指导教师沟通。

3、本次课程设计按照教学要求需要在一周半时间内独立完成,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时地向指导教师汇报。

4、编程语言任选。

三、设计题目及内容文章编辑一、需求分析功能:输入一页文字,程序可以统计出文字、数字、空格的个数。

静态存储一页文章,每行最多不超过80个字符,共N行;要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。

存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;二、概要设计1、定义结构体struct line,文本行采用顺序存储,行与行之间采用链式存储开始主函数输入文字统计个数查找某一子串输出文字统计字母、数字、空删除这一子串格、某一字符串的个数以及文章总字数输出删除后的文章具体操作三、主要函数:int FindString(LINE * &head,char *str) /*统计str在文章中出现的次数*/ 求在一行中Str出现的次数的流程图:①.查找第一个字符,如果有第一个字符即p->data[i]==str[0],设计数器k=0 ②.查找这个字符后面的字符与要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++③.重复第二步,如果k=len2,则查找到,count++;如果没查找到,重新进行第一步void delstringword(char *s,char *str) /*删除字符串*s 中的字符串*str*/开始车离开p->data[i]==str[0]i++k=0;j=0;p->data[i+j]==str[j]k++;j++;k=len2count++; i=i+k-1;结束YNYNNY实现思想:①.从字符串s 中寻找str 第一次出现的位置 *p=strstr(s,str);②.len=strlen(s);i=len-strlen(p)即前i 项恰好不含要删除的字符串,将前i 项复制到tmp 中③.j=i+strlen(str) 即要删除的字符串在i+1和j 之间,将j 之后的字符串复制到tmp 中④.将tmp 赋给串s ,返回s四、调试分析和问题思考:1. 测试数据及结果str pi jsfor(m=0;m<i;m++) tmp[count++]=s[m];for(n=j;n<len;n++) tmp[count++]=s[n];tmp2、问题思考:输入文章时,计算机怎样识别文章是否结束?输出文章时,怎样处理表示结束的字符?解决方案:输入文章时,以Ctrl+E(^E)为结尾,当tmp[0]==5时,发现输入^E,则退出输入。

《数据结构》课程设计报告范本(doc 8页)

《数据结构》课程设计报告范本(doc 8页)

《数据结构》课程设计报告范本(doc 8页)《数据结构》课程设计报告一、课程设计的内容、要求1 线性表的另一种实现。

对顺序表空间被耗尽问题的一个解决办法是:当数组溢出时,用一个更大的数组替换该数组。

一个较好的法则是:当出现溢出时,数组长度加长一倍具有较高的时间和空间效率。

参照教材中顺序表的有关内容,按上面的要求实现顺序表,并测试当数组溢出时你的实现的运作情况。

二、所采用的数据结构ADT List{数据对象: D = {a i|a i ∈ElemSet, i=1,2…n>=0}数据关系: R1={<a i-1, a i>|a i-1, a i∈D, i=1,2,…,n}基本操作:void IniList(SqList& L);void DestroyList(SqList& L);bool ListEmpty(SqList L);int ListLength(SqList L);void GetElem(SqList L, int i, Elem &e);bool PriorElem(SqList L, Elem cur_e, Elem &pre_e);bool NextElem(SqList L, Elem cur_e, Elem &next_e);void ListInsert(SqList &L, int i, Elem e);void ListDelete(SqList &L, int i);void ClearList(SqList& L);}三、主要模块(或函数)及其功能typedef struct LIST{ElemType *data;int size;int max_size;}LIST;void InitList(LIST *list)//初始化{list->data = (int*)malloc(sizeof(ElemType)*INIT_SIZE);list->size = 0;list->max_size = INIT_SIZE;}void DestroyList(LIST &list){}bool NextElem(LIST list,int cur_e,int &next_e)//后继{if(cur_e < 0 || cur_e > list.size) return false;else{next_e = cur_e + 1;return true;}}void Insert(LIST *list,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}list->data[list->size] = value;list->size++;}void Insert_Back(LIST *list,int idx,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}if(idx>list->size){list->data[list->size] = value;}else{int i;for(i=list->size;i>idx;i--){list->data[i] = list->data[i-1];}list->data[idx] = value;}list->size++;}void ListDelete(LIST *list,int i,ElemType *e)//删除一个元素{int j;*e=list->data[i];for(j=i+1;j<=list->size-1;j++)list->data[j-1]=list->data[j];list->size--;}void Print_list(LIST *list){int i;if(list->size == 0){cout<<"当前线性表内没有元素。

《数据结构》课程设计报告

《数据结构》课程设计报告

《数据结构》课程设计报告一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中数据结构的基本概念、原理及实现方法,培养其运用数据结构解决实际问题的能力。

本课程目标如下:1. 知识目标:(1)理解数据结构的基本概念,包括线性表、栈、队列、串、数组、树、图等;(2)掌握各类数据结构的存储表示和实现方法;(3)了解常见算法的时间复杂度和空间复杂度分析;(4)掌握排序和查找算法的基本原理和实现。

2. 技能目标:(1)能够运用所学数据结构解决实际问题,如实现字符串匹配、图的遍历等;(2)具备分析算法性能的能力,能够根据实际问题选择合适的算法和数据结构;(3)具备一定的编程能力,能够用编程语言实现各类数据结构和算法。

3. 情感态度价值观目标:(1)培养学生对计算机科学的兴趣,激发其探索精神;(2)培养学生团队合作意识,提高沟通与协作能力;(3)培养学生面对问题勇于挑战、善于分析、解决问题的能力;(4)引导学生认识到数据结构在计算机科学中的重要地位,激发其学习后续课程的兴趣。

本课程针对高年级学生,课程性质为专业核心课。

结合学生特点,课程目标注重理论与实践相结合,强调培养学生的实际操作能力和解决问题的能力。

在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。

通过本课程的学习,学生将具备扎实的数据结构基础,为后续相关课程学习和职业发展奠定基础。

二、教学内容根据课程目标,教学内容主要包括以下几部分:1. 数据结构基本概念:线性表、栈、队列、串、数组、树、图等;教学大纲:第1章 数据结构概述,第2章 线性表,第3章 栈和队列,第4章 串。

2. 数据结构的存储表示和实现方法:教学大纲:第5章 数组和广义表,第6章 树和二叉树,第7章 图。

3. 常见算法的时间复杂度和空间复杂度分析:教学大纲:第8章 算法分析基础。

4. 排序和查找算法:教学大纲:第9章 排序,第10章 查找。

教学内容安排和进度如下:1. 第1-4章,共计12课时,了解基本概念,学会使用线性表、栈、队列等解决简单问题;2. 第5-7章,共计18课时,学习数据结构的存储表示和实现方法,掌握树、图等复杂结构;3. 第8章,共计6课时,学习算法分析基础,能对常见算法进行时间复杂度和空间复杂度分析;4. 第9-10章,共计12课时,学习排序和查找算法,掌握各类算法的实现和应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书课程名称数据结构课程设计设计课题模拟旅馆管理系统课程设计任务书设计题目:模拟旅馆管理系统的一个功能——床位的分配与回收设计内容与要求:某旅馆有n个等级的房间,第I等级有ai 个房间,每个等级有bi个床位(1≤i≤n)。

试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。

[基本要求](1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。

回收时,输入房间等级、房间号和床位号。

(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。

分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。

若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。

2014 年 12 月16日课程设计评语成绩:指导教师:年月日【问题描述】某旅馆有n个等级的房间,第I等级有ai 个房间,每个等级有bi个床位(1≤i≤n)。

试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。

【基本要求】(1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。

回收时,输入房间等级、房间号和床位号。

(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。

分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。

若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。

【测试数据】旅客姓名:w性别:男年龄:20入住时间:2015 3 4所需等级:1旅客姓名:d性别:男年龄:22入住时间:2015 1 2所需等级:2【模块划分】本程序主要划分为四个模块【算法思想】采用链表方式,进行旅店的初始化操作。

给旅店的等级设置了头结点。

该程序有三条链表,等级构成一条链表,房间构成一条链表,旅客构成一条链表。

入住时,先输入旅客所需的等级,判断是否有该等级,依次判断有无房间和床位。

有该等级的房间时,采用尾插法判断是否有空床位,有就进行旅客的入住操作。

床位没有设头结点,所以第一个床位要进行判断。

退房时,需要输入等级号、房间号、床位号来进行查找,从而完成退房操作。

查询时,通过输入旅客的姓名进行查询,存在此人时,打印客人信息。

统计宾馆的人数时,先一个等级一个等级的统计,统计这个等级的每一个房间和每个房间当前的所有人数。

旅客住宿登记旅客退房【数据结构】typedef struct traver//旅客结构体{char name[20];//姓名int sex; //性别int age; //年龄int g;//旅客住宿的等级int bednum;//床号int year;int month;int day;struct traver*next;//下一个旅客}tra;typedef struct hotel//旅店结构体{int l_num;//旅店等级struct hotel*next;//下一个等级struct room*r_next;//指向房间}hotel;typedef struct room//房间结构体{int r_num;//房间号int max;//房间的最大床位数int renshu;//房间当前的人数struct room*next;//下一个房间struct traver*tra_next;//指向旅客}room;【测试情况】房间的初始化。

旅客入住登记测试旅客退房测试记录查询测试统计测试【心得】这周是我们自己选题做课程设计的的时间,我选的题目是做一个旅店管理系统,对床位进行分配和回收。

本程序采用了三个链表,刚拿到这个题目时,我觉得很这个应该和学生管理系统差不多,但是,在对床位的分配时,要采用链表。

刚开始我本来想把房间作为一个数组,将床位构成一个单链表。

当时,没有考虑到房间的等级,最后又想了一下,改变了我原来的想法。

将房间的等级、房间、旅客各构成一个链表,采用链表的好处是节约空间,有几个人就申请多大的空间,不会造成很大的浪费。

在编写代码的过程中,先对旅馆每个等级的每个房间进行初始化,旅客的住宿这个函数对于我是最难的,因为要先判断旅客所需等级的房间存不存在,存在时,要判断这个房间有没有空床位,没有空床位时,链表的指针指向下一个房间。

如果没有这个等级的房间时,征询旅客是否要更换房间等级。

在他同意更换的情况下,再重复上述过程进行登记。

给旅客进行床位分配时,是按照床位号的大小顺序依次分配的。

如果这个房间的所有床位都住满的话,再给同等级的另一间房间进行分配。

在写退房的函数时,要输入等级、房间号、床位号,找到相应的旅客打印旅客信息确认正确再进行退房操作。

统计住宿的人数时,统计同等级的每一个房间的所有旅客。

旅客的链表不空时,计数器就加加。

进行编程的时候,一定要先清楚自己的思路,比如我写的住宿函数,要入住就必须先判断有没有空房间和空床位,有的话才能进行分配。

该程序的链表比较多,自己写的时候,一个一个子函数写,写完调试好了再进行下一个函数的编写。

定义了三个结构体,一定要清楚每个结构体中所包含的量,切不可混淆。

编写时if和else语句比较多,要清楚哪个与哪个对应,每个循环结束的条件。

调试代码的时候有时就是一个很小的错导致整个程序不能运行,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终还是一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件!同时,通过此次课程设计使我了解到数据结构可以说是计算机里一门基础课程,它需要把理论变为上机调试,所以一定要把基础知识学扎实。

虽然我现在还不会成功的编写一个完整的程序,但是在看程序的过程中,不断的上网查资料以及翻阅相关书籍,通过不断的模索,测试,发现问题,解决问题和在老师的帮助下一步一步慢慢的正确运行程序。

在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。

培养了基本的、良好的程序设计技能以及合作能力。

这次课程设计同样提高了我的综合运用所学知识的能力。

并对VC有了更深入的了解。

《数据结构》是一门实践性很强的课程,上机实习是对学生全面综合素质进行训练的一种最基本的方法,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。

上机实习一方面能使书本上的知识变“活”,起到深化理解和灵活掌握教学内容的目的;另一方面,上机实习是对学生软件设计的综合能力的训练,包括问题分析,总体结构设计,程序设计基本技能和技巧的训练。

此外,还有更重要的一点是:机器是比任何教师更严厉的检查者。

因此,在“数据结构”的学习过程中,必须严格按照老师的要求,主动地、积极地、认真地做好每一个实验,以不断提高自己的编程能力与专业素质。

【源程序】#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>typedef struct traver//旅客结构体{char name[20];//姓名int sex; //性别int age; //年龄int g;//旅客住宿的等级int bednum;//床号int year;int month;int day;struct traver*next;//下一个旅客}tra;typedef struct hotel//旅店结构体{int l_num;//旅店等级struct hotel*next;//下一个等级struct room*r_next;//指向房间}hotel;typedef struct room//房间结构体{int r_num;//房间号int max;//房间的最大床位数int renshu;//房间当前的人数struct room*next;//下一个房间struct traver*tra_next;//指向旅客void menu_select()//菜单函数{printf("************旅客管理查询系统************\n"); //菜单选择printf("1.进行订房登记服务\n");printf("2.进行退房结账服务\n");printf("3.查询旅客信息\n");printf("4.统计旅客信息\n");printf("****************************************\n");}void Init(hotel*L)//旅店等级设置头结点{int i,j,k,n;//k床位数,j房间等级,n房间个数hotel*p,*q;room*p1,*p2,*p3;printf("请输入房间等级:\n");scanf("%d",&j);q=L;for(i=1;i<=j;i++) //初始化房间的等级{p=(hotel*)malloc(sizeof(hotel));q->next=p;p->l_num=i;//房间等级赋值printf("请输入房间等级为%d的房间个数:\n",p->l_num);scanf("%d",&n);//输入该等级的房间数if(n==0)//不存在该等级的房间数时continue;else{//初始化床位p2=(room*)malloc(sizeof(room));//为该等级的房间申请空间p2->r_num=1;printf("请输入房间等级为%d的房间号为1的床位数:\n",p->l_num,k); scanf("%d",&(p2->max));//房号为l的床位数p2->renshu=0;//房间当前人数为0p->r_next=p2;//指向该等级的下一个房间p3=p2;for(k=2;k<=n;k++)//房间号为2的房间信息初始化{p1=(room*)malloc(sizeof(room));p3->next=p1;p1->r_num=k;printf("请输入房间等级为%d的房间号为%d的床位数:\n",p->l_num,k); scanf("%d",&(p1->max));p1->renshu=0;p3=p1;}p3->next=NULL;}//房间链表尾指针为空q=q->next;}//指向下一个等级q->next=NULL;//等级链表尾指针为空int full(hotel*L)//判断客满{hotel*l;l=L->next;room *t;while(l!=NULL){t=l->r_next;//指向房间while(t!=NULL){if(t->renshu!=t->max)return 0;else t=t->next;}//指向下一个房间l=l->next;}if(!l)return 1;}void print(tra*s,room*p){printf("输出旅客信息:\n");printf("姓名%s,性别%d,年龄%d,房间等级%d,房间号码%d,床号%d,入住时间%d,%d,%d\n",s->name,s->sex,s->age,s->g,p->r_num,s->bednum,s->year,s->month,s->day);}void zhusu(hotel*L){tra *q1,*q2,*q3;char c;hotel*l;l=L->next;room *t;int i,g;if(full(L)){printf("客满,不能入住!\n");}else{printf("请输入房间等级\n");//输入旅客所需要的等级scanf("%d",&g);while(g!=NULL)//等级不空时{if(l->l_num!=g)l=l->next;else{t=l->r_next;//有该等级时while(t!=NULL)//房间不空{if(t->renshu==t->max)//*是否有空床位{t=t->next;//指向下一个房间if(t==NULL){getchar();printf("等级为的所有房间均无空位\n是否愿意更换等级[y/n]",g);scanf("%c",&c);//是否更换等级zhusu(L);else return;}}else//进行旅客登记{if(t->renshu==0)//床位没有设置头结点,所以要进行判断{q1=(tra*)malloc(sizeof(tra));printf("请输客人姓名\n");scanf("%s",q1->name);printf("请输入性别:1为男,0为女\n");scanf("%d",&(q1->sex));printf("请输客人年龄\n");scanf("%d",&(q1->age));printf("请输入旅客入住时间(如1990 12 13):");scanf("%d %d %d",&q1->year,&q1->month,&q1->day);q1->g=g;//修改指针t->tra_next=q1;//t->renshu++;//房间人数加1q1->bednum=1;q1->next=NULL;//尾指针为空print(q1,t);break;}else{q2=t->tra_next;q3=q2;i=1;for(;q3!=NULL;q3=q3->next){if(i==q3->bednum){++i;q3=q2;}}for(;q2->next!=NULL;q2=q2->next);q1=(tra*)malloc(sizeof(tra));printf("请输入旅客姓名:\n");q1=(tra*)malloc(sizeof(tra));printf("请输客人姓名\n");scanf("%s",q1->name);printf("请输入性别:1为男,0为女\n");scanf("%d",&(q1->sex));printf("请输客人年龄\n");scanf("%d",&(q1->age));printf("请输入旅客入住时间:");scanf("%d %d %d",&q1->year,&q1->month,&q1->day);q1->g=g;q1->next=NULL;t->renshu++;q1->bednum=i;print(q1,t);break;}}}system("cls");break;}}}}tra*tuifang(hotel*L){int g,hotel_num,bednum;hotel*l;l=L->next;room *t;tra*p,*q;char c;printf("请输入该退房人房间的等级号码:\n");scanf("%d",&g); //输入退房人的房间等级getchar();while(l!=NULL){ if(l->l_num!=g)l=l->next;else //找到该等级{ t=l->r_next;printf("请输入该退房人房间的房间号码:\n");scanf("%d",&hotel_num); //输入退房人的房间号码 getchar();while(t!=NULL){ if(t->r_num!=hotel_num)t=t->next;else //找到该房间{p=t->tra_next;q=t->tra_next;printf("请输入该退房人的床位号码:\n");scanf("%d",&bednum); //输入退房人的床位号码getchar();while(q!=NULL){ if(q->bednum!=bednum)q=q->next;else //查找该床位{if(bednum==p->bednum) //因为床位没有设置头结点,所以对于第一个结点要特别判断{ //直接打印旅客信息printf("等级、房间、床位旅客的信息为:\n");printf("姓名\t性别\t年龄\t入住时间\n");printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day);scanf("%c",&c);if(c=='y') //做出是否退房的选择{ t->tra_next=q->next;t->renshu--;printf("退房成功!\n");return(q); }elsereturn NULL; }else //如果床位不为1{while(p->next!=q) //指向下一床位p=p->next; //打印旅客信息printf("等级、房间、床位旅客的信息为:\n");printf("该名顾客的信息:\n");printf("姓名\t性别\t年龄\t入住时间\n");printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day); printf("是否与要退房人信息相符?[y/n]\n");scanf("%c",&c);if(c=='y') //做出是否退房的选择{p->next=q->next;t->renshu--;printf("退房成功!\n");return(q);}elsereturn NULL; } } }if(q==NULL) //如果该房间内床位为空{ printf("未找到该床位号!\n"); } } }if(t==NULL) //如果该等级的房间为空{ printf("未找到该房间号!\n"); } } }if(l==NULL) //如果等级链表为空{ printf("未找到该房间等级!\n"); } }void chaxun(hotel *L) //查询旅客信息函数{ char c[15];hotel *l;room *t;tra *s;int flag=0;//设置标志量printf("请输入要查询的旅客姓名:\n");scanf("%s",c);getchar();l=L->next;while(l!=NULL) //等级不为空时,指向房间{ t=l->r_next;while(t!=NULL)//房间不为空时,指向床位t=t->next;else{ s=t->tra_next;while(s!=NULL){if(!strcmp(s->name,c)) //如果找到该旅客{print(s,t); //打印信息s=s->next; //指向下一人,继续查找flag++; //标志量加1}elses=s->next;}t=t->next; //指向下一个房间} }l=l->next; //指向下一个等级}if(!flag) //标志量为零,则未查找到{printf("未找到该旅客!\n"); } }void Tongji(hotel *L) //统计旅店当前住宿人数函数{ char c[15];hotel *l;room*t;tra *s;int i=0,j=0;int flag;l=L->next;while(l!=NULL){ flag=0;i++;t=l->r_next;while(t!=NULL)//房间不空{ if(t->renshu==0)t=t->next;else{ s=t->tra_next;while(s!=NULL) //旅客不空{ flag++;j=j+flag;s=s->next;}t=t->next;}}l=l->next; }if(!j)printf("此时无人住宿。

相关文档
最新文档