数据结构课程设计--宾馆客房管理系统_第1页
数据结构课程设计--宾馆客房管理系统_第2页
数据结构课程设计--宾馆客房管理系统_第3页
数据结构课程设计--宾馆客房管理系统_第4页
数据结构课程设计--宾馆客房管理系统_第5页
免费预览已结束,剩余29页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计报告数据结构课程设计报告 实验名称实验名称 宾馆订房和退房系统 姓姓 名名 胡山权 学学 号号 111714110 学学 院院 计算机科学与技术学院 专专 业业 网络工程 指导老师指导老师 陈建新 一 需求分析一 需求分析 1 实验题目 实验题目 宾馆订房和退房系统 2 基本要求 基本要求 1 实现宾馆的订房业务 2 实现退房业务 3 实现统计业务 4 实现查询业务 其他 要求在 VC 6 0 下运行通过 二 概要设计二 概要设计 本程序主要有以下几个功能模块 void main 主函数 void tongji cus hotel lv L 统计当前客人人数函数 void cx customer hotel lv L 查询客人信息函数 cus Delete hotel lv L 退房函数 void input hotel lv L 订房函数 void Pr divide cus p fangjian q 打印客人信息函数 void Init hotel lv L 初始化函数 typedef struct customer 客人结构体定义 typedef struct hotel lv 宾馆结构体定义 typedef struct fangjian 房间结构体定义 本程序通过主函数调用 void main 主函数 主函数再调用其他几个功能模块 其中客 房数量通过初始化函数来实现 输入客房的数量和床位的数量来确定 三 详细设计 1 程序运行流程图程序运行流程图 宾馆客房初始化 Main 录入客 人信息 查询客 人信息 统计入 住情况 退出系 统 查询入 住情况 2 入住流程图入住流程图 姓名 是 入住流程 是否客满 是 不能入住 否 输入所需等级 是否有床位 否 打印客人信息 年龄性别入住时间 分配房间成功 返回主菜单 3 退房业务 退房业务 姓名 是 否 是 退房业务 输入要退房的房间等级 是否有该等 级 否 是 否 是 输入房间号 是否有该房间号 否 输入床位号 是否有该床位号 否 打印客人信息 年龄性别入住时间 是否退房 返回主菜单 退房成功 4 查询业务 查询业务 不为空 不为空 不为空 客人信息查询 输入客人姓名 遍历各等级 遍历各房间 遍历各床位 不为空 遍历各床位 是否有该客人 返回主菜单 姓名性别年龄入住时间 5 统计业务统计业务 不为空 不为空 不为空 统计当前客房入住人 数 遍历各等 级 遍历个房间 遍历各床位 计数器 conut 打印信息 返回主菜单 3 各功能模块源代码及详细介绍各功能模块源代码及详细介绍 1 主菜单主菜单 Init L while 1 进入菜单选项进入菜单选项 system cls printf n n n printf n printf n printf 欢迎进入宾馆客房管理系统欢迎进入宾馆客房管理系统 n printf n printf n printf 湖北工程学院湖北工程学院 计算机学院计算机学院 1117141 班班 胡山权胡山权 n n printf 版权所有 侵权必究版权所有 侵权必究 n printf 1 录入客人信息录入客人信息 n printf 2 退房业务退房业务 n printf 3 查询客人信息查询客人信息 n printf 4 统计客人信息统计客人信息 n printf 0 退出系统退出系统 n printf 请选择你要办理的业务请选择你要办理的业务 n scanf d 做选择做选择 getchar switch c case 1 input L break case 2 p Delete L free p break case 3 cx customer L break case 4 tongji cus L break case 0 return 2 统计当前客人人数函数统计当前客人人数函数 void tongji cus hotel lv L hotel lv l fangjian f cus t int i 0 j 0 int flag l L next while l NULL flag 0 i f l fj next while f NULL if f mem num 0 f f next else t f cus next while t NULL flag j j flag t t next f f next printf 等级为等级为 d 的房间的入住人数为的房间的入住人数为 d n i flag l l next if j printf 此时无人入住 此时无人入住 n system pause 3 退房业务退房业务 cus Delete hotel lv L cus p q char c fangjian f int lv hotel num bed num hotel lv l l L next printf 请输入该退房客人的房间等级号码 请输入该退房客人的房间等级号码 n scanf d getchar while l NULL f mem num printf 退房成功 退房成功 n system pause return q else return NULL if q NULL 如果该房间内床位为空如果该房间内床位为空 printf 没有找到该床位 请核对信息后重新输入 没有找到该床位 请核对信息后重新输入 n if f NULL 如果该等级的房间为空如果该等级的房间为空 printf 没有找到该房间号 请从新输入 没有找到该房间号 请从新输入 n if l NULL 如果等级链表为空如果等级链表为空 printf 没有找到该房间等级 请核对后输入 没有找到该房间等级 请核对后输入 n system pause 4 查询客人信息查询客人信息 void cx customer hotel lv L char s 15 hotel lv l fangjian f cus t int flag 0 设置标志量设置标志量 printf 请输入要查询的客人姓名 请输入要查询的客人姓名 n scanf s s 输入要查询的客人姓名输入要查询的客人姓名 getchar l L next while l NULL 等级不为空时 走向房间等级不为空时 走向房间 f l fj next while f NULL 房间不为空时 走向床位房间不为空时 走向床位 if f mem num 0 若此房间当前人数为若此房间当前人数为 0 走向下一见 走向下一见 房房 f f next else t f cus next while t NULL if strcmp t name s 如果找到该客人如果找到该客人 Pr divide t f 打印信息打印信息 t t next 指向下一个人 继续查指向下一个人 继续查 找找 flag 标量加标量加 1 else t t next f f next l l next if flag 标志量为标志量为 0 则未查找到 则未查找到 printf 没有找到该客人 请核对再输入 没有找到该客人 请核对再输入 n system pause 统计函数与查询函数基本类似统计函数与查询函数基本类似 5 入住函数入住函数 void input hotel lv L char c int i lv fangjian p1 cus s p2 p3 hotel lv l l L next if full L 判断是否客满判断是否客满 printf 房间已满 不能入住 房间已满 不能入住 n system pause else printf 请输入旅客所需的房间等级 请输入旅客所需的房间等级 scanf d while l NULL 等级不为空时等级不为空时 if l lv num lv l l next else 有此等级时有此等级时 p1 l fj next while p1 NULL 房间不为空房间不为空 if p1 mem num p1 max 是否有空床位是否有空床位 p1 p1 next if p1 NULL getchar printf 此等级为此等级为 d 的所有房间均无空位的所有房间均无空位 n 是否愿意更好等级是否愿意更好等级 y n lv scanf c 选择选择 if c y input L else return else 客人信息登记客人信息登记 因为床位没有设置头结点 所以对于第一个结点要特别判因为床位没有设置头结点 所以对于第一个结点要特别判 断断 if p1 mem num 0 s cus malloc sizeof cus printf n n printf n 入住客人信息 入住客人信息 printf n 请输入客人的姓名 请输入客人的姓名 scanf s s name printf n 请输入客人年龄 请输入客人年龄 scanf d printf n 请输入客人的性别 如 男请输入客人的性别 如 男 1 女 女 0 scanf d printf n 请输入客人入住的时间 如 请输入客人入住的时间 如 1990 10 11 scanf d d d s lv lv 指针修改指针修改 p1 cus next s p1 mem num 房间当前最大人数加房间当前最大人数加 1 s bed num 1 s next NULL 尾指针设置为空尾指针设置为空 Pr divide s p1 打印房间分配表打印房间分配表 system cls break else p2 p1 cus next p3 p2 i 1 while imem num if i p3 bed num p3 p3 next i else i break if p3 NULL s cus malloc sizeof cus printf n n printf n 入住客人信息 入住客人信息 printf n 请输入客人的姓名 请输入客人的姓名 scanf s s name printf n 请输入客人年龄 请输入客人年龄 scanf d printf n 请输入客人的性别 如 男请输入客人的性别 如 男 1 女 女 0 scanf d printf n 请输入客人入住的时间 如 请输入客人入住的时间 如 1990 10 11 scanf d d d s lv lv while p2 next p3 p2 p2 next p2 next s p1 mem num s bed num i s next NULL Pr divide s p1 system cls break else while p2 bed num i p2 p2 next s cus malloc sizeof cus printf n n printf n 入住客人信息 入住客人信息 printf n 请输入客人的姓名 请输入客人的姓名 scanf s s name printf n 请输入客人年龄 请输入客人年龄 scanf d printf n 请输入客人的性别 如 男请输入客人的性别 如 男 1 女 女 0 scanf d printf n 请输入客人入住的时间 如 请输入客人入住的时间 如 1990 10 11 scanf d d d s lv lv s next p2 next p2 next s p1 mem num s bed num i 1 Pr divide s p1 system cls break break 6 初始化函数初始化函数 void Init hotel lv L int i j k l hotel lv p q fangjian p1 p2 p3 printf 请输入房间分为几个等级请输入房间分为几个等级 n scanf d 输入房间分为几个等级输入房间分为几个等级 q L for i 1 inext p p lv num i 给房间等级赋值给房间等级赋值 printf 请输入房间等级为请输入房间等级为 d 的房间个数 的房间个数 n p lv num scanf d 输入该等级房间的数目输入该等级房间的数目 if l 0 continue else 初始化该房间的床位初始化该房间的床位 p2 fangjian malloc sizeof fangjian p2 fj num 1 printf 请输入房间等级为请输入房间等级为 d 房间号为房间号为 l 的床位个数的最大值 的床位个数的最大值 n p lv num k scanf d 输入房间输入房间 l 的床位数目的床位数目 p2 mem num 0 该房间内当前人数赋值为该房间内当前人数赋值为 0 p fj next p2 p3 p2 for k 2 knext p1 p1 fj num k printf 请输入房间等级为请输入房间等级为 d 房间号为房间号为 d 的床位的个数的最的床位的个数的最 大值 大值 n p lv num k scanf d 输入房间输入房间 K 的床位数目的床位数目 p1 mem num 0 该房间内的当前人数赋值为该房间内的当前人数赋值为 0 p3 p1 p3 next NULL 房间链表尾指针为空房间链表尾指针为空 q q next q next NULL 等级链表尾指针域为空等级链表尾指针域为空 system pause 7 打印客人信息打印客人信息 void Pr divide cus p fangjian q printf n n printf 宾馆房间分配系统宾馆房间分配系统 n n printf n n printf 姓名姓名 性别性别 年龄年龄 等级号等级号 房间号房间号 床位号床位号 入住时间入住时间 n printf 6s d 2d 2d 2d 2d 4d 2d 2d n p name p sex p age p lv q fj num p bed num p year p month p day printf n printf n system pause 四 程序截图说明四 程序截图说明 1 程序主菜单 程序主菜单 2 录入客人信息录入客人信息 3 查询客人信息 查询客人信息 4 统计业务 统计业务 5 退房业务退房业务 五 分析总结 五 分析总结 1 出现问题及解决办法 出现问题及解决办法 刚开始 我想宾馆管理系统的算法和学生宿舍管理系统一样 所以开始 我定 义的结构体数组 进行编写 可是在初始化的时候因为宾馆和宿舍的情况不一 样 而且数组大小也不能用变量来指示 所以在用数组进行初始化的时候遇到 了麻烦 有想到 如果用链表来编写的话 不用定义链表的长度 所以改用链 表来编写 在客人入住的情况中 开始没有设置头结点 写到后面觉得不对劲 因为有好 多情况要进行考虑 如 判断是否客满 是否需要的等级有空位等 所以又 加入头结点 在床头分配的时候 因为没有设置床头的头结点 所以要对第一 个床位进行特别判断 然后进行多次修改 最终实现客人的入住 退房更入住时候一样 需要考虑很多情况 在床位回收的时候 还是因为没有 设置头结点 所以要对第一个床位进行特别判断 还有就是一开始我把那个输 入退房人的房间号和床位号的语句放在的循环体内 出现了一次循环要输入一 次 后来经过调试发现了问题 移出来虹欧解决了这个问题 最后进行住函数的界面编写 查询操作比较简单 没有出现什么问题 由于自 己不会文件的保存与读取函数的编写 所以没有采取文件的存储与读取 2 方法优缺点分析方法优缺点分析 能够很好的实现入住 查询 统计 退房等功能 但是不能实现文件的保存与 读取 六 致谢 六 致谢 转眼间 八周的课程设计结束了 感谢老师为我们提供的每周数次的到机 房上机调试的机会 在那里 老师将为我们解决各种难题 同学之间也可以相 互讨论 这才有了今天的成果 特别是老师的宝贵的意见 给了我很大的启示 同时也要感谢那些给予过我帮助的同学们 七 源程序代码 include include include include typedef struct customer 客人结构体 char name 15 int age int sex int lv int bed num int year int month int day struct customer next cus typedef struct hotel lv 宾馆结构体 int lv num struct hotel lv next struct fangjian fj next hotel lv typedef struct fangjian 房间结构体 int fj num int max int mem num struct fangjian next struct customer cus next fangjian void Init hotel lv L 初始化函数 int i j k l hotel lv p q fangjian p1 p2 p3 printf 请输入房间分为几个等级 n scanf d 输入房间分为 几个等级 q L for i 1 inext p p lv num i 给 房间等级赋值 printf 请输入房间等级为 d 的房间个数 n p lv num scanf d 输 入该等级房间的数目 if l 0 continue else 初 始化该房间的床位 p2 fangjian malloc sizeof fangjian p2 fj num 1 printf 请输入房间等级为 d 房间号为 l 的床位 个数的最大值 n p lv num k scanf d 输入房 间 l 的床位数目 p2 mem num 0 该 房间内当前人数赋值为 0 p fj next p2 p3 p2 for k 2 knext p1 p1 fj num k printf 请输入房间等级为 d 房间号为 d 的 床位的个数的最大值 n p lv num k scanf d 输 入房间 K 的床位数目 p1 mem num 0 该房间内的当前人数赋值为 0 p3 p1 p3 next NULL 房间链 表尾指针为空 q q next q next NULL 等 级链表尾指针域为空 system pause int full hotel lv L 判断是否客满 hotel lv l fangjian f l L next while l NULL f l fj next while f NULL if f mem num f max 如果有 房间的当前人数不等于房间的最大人数 则返回 0 return 0 else f f next l l next if l 否则返回 1 return 1 else return 0 void Pr divide cus p fangjian q 打印客人信息 printf n n printf 宾馆房间分配系统 n n printf n n printf 姓名 性别 年龄 等级号 房间号 床 位号 入住时间 n printf 6s d 2d 2d 2d 2d 4d 2d 2d n p name p sex p age p lv q fj num p bed num p year p month p day printf n printf n system pause void input hotel lv L 入住函数 char c int i lv fangjian p1 cus s p2 p3 hotel lv l l L next if full L 判断是否客满 printf 房间已满 不能入住 n system pause else printf 请输入旅客所需的房间等级 scanf d while l NULL 等级不 为空时 if l lv num lv l l next else 有此等 级时 p1 l fj next while p1 NULL 房间不 为空 if p1 mem num p1 max 是 否有空床位 p1 p1 next if p1 NULL getchar printf 此等级为 d 的所有房 间均无空位 n 是否愿意更好等级 y n lv scanf c 选 择 if c y input L else return else 客人信息 登记 因为床位 没有设置头结点 所以对于第一个结点要特别判断 if p1 mem num 0 s cus malloc sizeof cus printf n n printf n 入住客人信息 printf n 请输入客人的 姓名 scanf s s name printf n 请输入客人年 龄 scanf d printf n 请输入客人的 性别 如 男 1 女 0 scanf d printf n 请输入客人 入住的时间 如 1990 10 11 scanf d d d s lv lv 指针修改 p1 cus next s p1 mem num 房间当前最大人数加 1 s bed num 1 s next NULL 尾指针设置为空 Pr divide s p1 打印房间分配表 system cls break else p2 p1 cus next p3 p2 i 1 while imem num if i p3 bed num p3 p3 next i else i break if p3 NULL s cus malloc sizeof cus printf n n printf n 入住 客人信息 printf n 请输入客人的 姓名 scanf s s name printf n 请输入客人年 龄 scanf d printf n 请输入客人的 性别 如 男 1 女 0 scanf d printf n 请输入客人 入住的时间 如 1990 10 11 scanf d d d s lv lv while p2 next p3 p2 p2 next p2 next s p1 mem num s bed num i s next NULL Pr divide s p1 system cls break else while p2 bed num i p2 p2 next s cus malloc sizeof cus printf n n printf n 入住 客人信息 printf n 请输入客人的 姓名 scanf s s name printf n 请输入客人年 龄 scanf d printf n 请输入客人的 性别 如 男 1 女 0 scanf d printf n 请输入客人 入住的时间 如 1990 10 11 scanf d d d s lv lv s next p2 next p2 next s p1 mem num s bed num i 1 Pr divide s p1 system cls break break cus Delete hotel lv L 退房 cus p q char c fangjian f int lv hotel num bed num hotel lv l l L next printf 请输入该退房客人的房间等级号码 n scanf d 输入退房人 的房间等级 getchar while l NULL if l lv num lv l l next else 找到该等 级 f l fj next printf 请输入退房客人的房间号码 n scanf d 输入退房 人的房间号码 getchar while f NULL if f fj num hotel num f f next else 找到该 房间 p f cus next q f cus next printf 请输入该客人的床位号 n scanf d 输入退放入的床位号 getchar while q NULL if q bed num bed num q q next else 查找该床位 if bed num 1 因为床位没有设置头结点 所以对第一个结点要特别判断 直接打印客人信息 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 if c y 做出是否退房的选择 f mem num printf 退房成功 n system pause return q else return 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 if c y 做出是否退房的选择 f mem num printf 退房成功 n system pause return q else return NULL if q NULL 如 果该房间内床位为空 printf 没有找到该床位 请核对信 息后重新输入 n if f NULL 如 果该等级的房间为空 printf 没有找到该房间号 请从新输入 n if l NULL 如果等级链表为空 printf 没有找到该房间等级 请核对后输入 n system pause void cx customer hotel lv L 查询客人信息 char s 15 hotel lv l fangjian f cus t int flag 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论