# 旅馆信息管理
## 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()函数用于命令行换行,便于调用。
精细地调整格式化输入输出,使得程序能以整齐的列表形式清晰地显示各项数据。
查看某一旅客或某一房间信息时,如果旅馆中没有该房间或旅客,会显示提示信息,给予使用者反馈。
旅客入住时,会显示可用房间的信息,并标注可用房间中是否已有人入住。针对即将入住旅客的身份进行识别,判断该旅客是否已经入住。针对旅客即将入住的房间,判断该房间是否能够容纳该旅�
没有合适的资源?快使用搜索试试~ 我知道了~
基于C语言实现(控制台)旅馆信息管理系统【100012508】
共27个文件
c:6个
txt:5个
docx:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 46 浏览量
2023-05-31
14:14:48
上传
评论
收藏 2.24MB ZIP 举报
温馨提示
C语言程序设计实验.旅馆信息管理。开发环境:基于Windows 10操作系统的Microsoft Visual Studio 2017。核心功能是实现旅客的入住、换房和退房,涉及到新增、修改和删除链表中的节点。 文件输入输出信息是本程序的重要功能,程序开始和结束时,程序中的链表会和文件交换信息。
资源推荐
资源详情
资源评论
收起资源包目录
100012508-基于C语言实现(控制台)旅馆信息管理系统.zip (27个子文件)
hotelinfomanagement
旅客信息管理.vcxproj 5KB
.gitattributes 2KB
Guest.c 4KB
程序总体流程.jpg 230KB
GAR.c 16KB
LICENSE 1KB
Guest.txt 100B
旅客信息管理.sln 1KB
Hotel.txt 124B
mainbody.c 4KB
Structs.h 2KB
GuestAndRoom.txt 179B
GuestHistoryInfo.txt 2KB
旅客信息管理.vcxproj.filters 1KB
相关资源
C语言程序实践(教材).pdf 1.33MB
旅客信息管理.参考代码.c 19KB
程序总体流程.vsdx 50KB
C0801207010-程序设计基础课程设计教学任务安排.docx 14KB
程序设计基础课程设计.pptx 110KB
选做题目.docx 16KB
13.2管理学生信息.链表.c 3KB
链表课件.ppt 1.04MB
程序设计基础课程设计报告.docx 460KB
Hotel.c 4KB
.gitignore 4KB
README.md 10KB
Theme.txt 2B
共 27 条
- 1
资源评论
神仙别闹
- 粉丝: 3816
- 资源: 7471
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 一个相当完整的与 VB6 兼容的 DirectX 11 类型库.zip
- 一个用 DirectX11 编写的 helloworld OpenVR 程序 .zip
- 一个玩具 c++,directX 游戏引擎 .zip
- 基于计算机视觉yolov5算法实现小鼠肿瘤块检测及尺寸大小预测系统python源码+模型+测试数据.zip
- QML系统整机测试模板,包含磁盘阵列RAID管理、系统压力测试、整机拷机测试、日志收集、用户权限管理
- NVIDIA GeForce 7 Series显卡驱动下载
- 一个正在开发的现代 C++20 跨平台游戏引擎,带有 C# 脚本 .zip
- sssssssseffffffffffssdddd
- 使用kettle完成数据集管理.pptx
- 一个挂接 DirectX 并显示简单 AntTweakBar 菜单的示例项目 .zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功