# 旅馆信息管理
## 1. 程序实践概述
### 1.1 题目名称:
旅馆信息管理
### 1.2 时间进度:
2017 年 3 月 3 日至 2017 年 3 月 18 日。
### 1.3 开发环境:
基于 Windows 10 操作系统的 Microsoft Visual Studio 2017。
### 2. 问题分析
### 2.1 功能说明:
1.查看旅店各房间信息
列举每个房间的房间号、房间类型、入住人数和房间价格。
2.查看某一房间信息
显示指定房间的旅客的信息,包括姓名、身份证号、性别和入住时间。
3.查看旅客信息
显示在旅馆的旅客总数;列举在旅馆的所有旅客的信息,包括姓名、性别、身份证号、房间号、入住时间。
4.查看某一旅客信息
查看指定旅客的信息,包括姓名、性别、身份证号、房间号、入住时间。
5.旅客入住
录入旅客的身份证号、姓名、性别等信息,程序将获取当前时间作为入住时间。将旅客的信息保存到链表和文件。
6.旅客换房
通过身份证号识别旅客,结算旅客已产生的房费,修改有关的旅客和房间信息。
7.旅客退房
程序获取当前时间作为退房时间,并结合入住时间结算房费。将旅客信息从程序的链表中删除,更改相关房间的信息,将旅客信息添加到旅客历史信息的文档中。
8.保存信息并退出程序
将旅客信息、房间信息、旅客与房间关系的信息从链表覆盖保存到文件,然后退出程序。
9.更换主题
更改命令行的颜色主题,程序会将主题信息自动保存到文档。
### 2.2 解决方案:
1. 从文件读取相关信息,将相关信息储存到文件,从而实现旅馆信息管理的基本功能
2. 三个链表,分别存储旅客和房间的相关信息,以及这二者关系的信息。用一个枚举类型定义房间的类型。
3. 用操作链表的方式实现旅客的入住,换房和退房三种行为。
4. 程序开始时将文件中的信息读到链表中,修改信息后将链表中的信息保存到文件中。
## 3. 方案设计
### 3.1 模块结构:
头文件 Structs.h
用于列举整个程序的头文件、结构体定义和函数声明等信息。
mainbody.c
显示主菜单,初始化链表,加载命令行的颜色主题等操作。
Guest.c
从文件中读取旅客信息到链表;将存储旅客信息的链表中的信息保存到文件;查看旅客信息等。
Hotel.c
从文件中读取房间信息到链表;将存储房间信息的链表中的信息保存到文件;查看房间信息等。
Guests.c
用于实现旅客入住、旅客换房、旅客退房等功能。
Guest.txt
用于存储旅客信息,包括姓名、性别、身份证号。
Hotel.txt
用于存储房间信息,包括房间号、房间类型和房间价格。
GuestAndRoom.txt
用于存储旅客与房间关系的信息,包括房间号、身份证号、入住时间。
GuestHistoryInfo.txt
用于存储旅客的历史信息,在旅客退房时可显示旅客曾经入住的次数。
Theme.txt
用于存储命令行的颜色主题信息。
### 3.2 数据结构:
旅馆信息管理程序中,主要的数据结构是三个链表。
Rooms链表存储房间信息,包括房间号、房间类型、入住人数和房间价格。
Guests链表存储旅客信息,包括姓名、性别、身份证号。
GuestAndRoom链表存储旅客与房间关系的信息,包括身份证号、旅客入住的房间号、入住时间和退房时间。
### 3.3 总体流程:
![](https://www.writebug.com/myres/static/uploads/2021/11/12/1286fec586f32735fbe18e0a723ef0f1.writebug)
总体流程大致如图所示,更多细节未在图中展示。
### 3.4 关键算法:
核心功能是实现旅客的入住、换房和退房,涉及到新增、修改和删除链表中的节点。
文件输入输出信息是本程序的重要功能,程序开始和结束时,程序中的链表会和文件交换信息。
计算入住时间和退房时间的时间差属于创新功能,但实现相对较为复杂。旅客入住时会使用 time()函数获取时间,将时间存储为字符串。旅客退房时,通过字符串处理,将入住时间放入 tm 结构体中,使用 mktime()函数和 difftime()函数计算退房时间与入住时间的差。
### 3.5 界面设计:
![](https://www.writebug.com/myres/static/uploads/2021/11/12/95e653cfae469ddc9c53e6a3144edf8c.writebug)
整体界面在 Windows 控制台上。打开程序后的菜单如图:
### 4. 调试记录
在 IDE 进行代码分析,没有错误和警告后,开始编译。由于程序开始运行时就会读取文件中的数据,当项目的文件夹内没有相应文件时,出现如下报错。
![](https://www.writebug.com/myres/static/uploads/2021/11/12/0e7ef3d266ab7821a9c3ad972bb12e72.writebug)
按项目要求,添加样例文本文档后程序成功显示菜单。
程序在读取文件中的字符串时遇到如下调试信息:
![](https://www.writebug.com/myres/static/uploads/2021/11/12/acc283d2a682077a64e371ee6a43c42e.writebug)
在读取存放数据表格的文件时需要先跳过表头的中文。查询 variable was corrupted 的原因是内存越界,后将读取这段中文的临时字符数组设置得更大一些,问题解决。
![](https://www.writebug.com/myres/static/uploads/2021/11/12/2f1409a90f2e0ee7a4ba3f86738c2912.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/12/6ea7e3b17288a3549d4f3492350df736.writebug)
cur 是 0xCDCDCDCD 的原因是前面的代码将 cur 设置为了垃圾指针。此处的 cur 指针原本用于遍历链表,检查前面代码发现错将 cur 分配到了一个新的内存地址。将 cur 指向链表首个节点后问题解决。
![](https://www.writebug.com/myres/static/uploads/2021/11/12/1f830b0c122e8e670f045e70b6707287.writebug)
在文件中已有数据的情况下,程序未能读取到旅客信息。检查代码时发现,在读取文件时,弄错了 feof 函数的返回值真假。feof(fp)在 fp 指向文件末尾时返回真,在 fp 指向文件中间时返回假。
进行旅客入住操作时,弹出调试信息“引发了异常,读取访问权限错误。”多次检查代码后发现,在将数据输出到文件的过程中使用了遍历链表后的地址不明确的链表指针,将指针换为记录数据的普通变量以输出,问题解决。
存储旅客入住时间时,使用了 ctime()函数,调试时发现程序显示的入住时间不正常。查询资料后发现 ctime()函数的返回值末尾有换行符,使用 strncpy()去除换行符后,屏幕不会输出换行,但字符串末尾出现“屯屯屯……”,表明有未赋值的字符被输出。查询资料后确认,strncpy 并不会给目标字符串的末尾添加’0’,手动为字符串末尾添加’0’后,问题解决。
在使用 difftime()函数时,返回的时间差是 0,查询 MSDN 后发现 difftime()函数执行错误将导致返回值为 0。difftime()函数执行错误的具体原因是,程序记录的年份是从 1900 年开始的,因此存入 tm 结构体的年份要在真实年份的基础上减去 1900。
## 5. 创新说明
结构体定义时没有使用 typedef,尽量减少结构体名称数量。每次使用链表时写 struct 关键字,也能使得代码可读性更强。
全局定义了 printline()函数用于命令行换行,便于调用。
精细地调整格式化输入输出,使得程序能以整齐的列表形式清晰地显示各项数据。
查看某一旅客或某一房间信息时,如果旅馆中没有该房间或旅客,会显示提示信息,给予使用者反馈。
旅客入住时,会显示可用房间的信息,并标注可用房间中是否已有人入住。针对即将入住旅客的身份进行识别,判断该旅客是否已经入住。针对旅客即将入住的房间,判断该房间是否能够容纳该旅�
神仙别闹
- 粉丝: 4193
- 资源: 7485
最新资源
- (论文+PPT模板+配置方法+源代码)租赁之星高效管理系统(java毕业设计).zip
- (论文+PPT模板+配置方法+源代码)租房小灵通信息平台(java毕业设计).zip
- java毕业设计】智慧房屋租赁指南(源代码+论文+配置方法+PPT模板).zip
- 市场行为数据集,营销互动数据,用户购买影响因素数据集
- (论文+PPT模板+配置+源代码)房屋租赁智慧引擎【java毕业设计】.zip
- (论文+配置+源代码+PPT模板)房源管家租赁优化系统(java毕业设计).zip
- 【java毕业设计】租赁无忧云服务平台(源代码+论文+配置方法+PPT模板).zip
- 使用递归函数求1~n之和-Python使用递归函数计算1~n之和的技术详解及应用案例
- (论文+配置+源代码+PPT模板)房源速递租赁加速器(java毕业设计).zip
- (源代码+论文+PPT模板+配置方法)租房达人在线管理系统【java毕业设计】.zip
- (论文+配置方法+源代码+PPT模板)租赁助手全方位服务(java毕业设计).zip
- (论文+PPT模板+配置方法+源代码)租房宝全面管理系统(java毕业设计).zip
- java毕业设计】智慧租房一站式平台(源代码+论文+PPT模板).zip
- (论文+配置方法+源代码+PPT模板)房屋租赁智能匹配系统(java毕业设计).zip
- 【java毕业设计】租赁好帮手高效工具(源代码+论文+配置方法+PPT模板).zip
- java毕业设计】智慧房屋租赁分析器(源代码+论文+配置方法+PPT模板).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈