尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于C语言实现(控制台)旅馆信息管理系统

基于C语言实现(控制台)旅馆信息管理系统 ♻️ 资源大小2.23MB➡️资源下载https://download.csdn.net/download/s1t16/87453184旅馆信息管理1.程序实践概述1.1 题目名称旅馆信息管理1.2 时间进度2017 年 3 月 3 日至 2017 年 3 月 18 日。1.3 开发环境基于 Windows 10 操作系统的 Microsoft Visual Studio 2017。2.问题分析2.1 功能说明1.查看旅店各房间信息列举每个房间的房间号、房间类型、入住人数和房间价格。查看某一房间信息显示指定房间的旅客的信息包括姓名、身份证号、性别和入住时间。查看旅客信息显示在旅馆的旅客总数列举在旅馆的所有旅客的信息包括姓名、性别、身份证号、房间号、入住时间。查看某一旅客信息查看指定旅客的信息包括姓名、性别、身份证号、房间号、入住时间。旅客入住录入旅客的身份证号、姓名、性别等信息程序将获取当前时间作为入住时间。将旅客的信息保存到链表和文件。旅客换房通过身份证号识别旅客结算旅客已产生的房费修改有关的旅客和房间信息。旅客退房程序获取当前时间作为退房时间并结合入住时间结算房费。将旅客信息从程序的链表中删除更改相关房间的信息将旅客信息添加到旅客历史信息的文档中。保存信息并退出程序将旅客信息、房间信息、旅客与房间关系的信息从链表覆盖保存到文件然后退出程序。更换主题更改命令行的颜色主题程序会将主题信息自动保存到文档。2.2 解决方案从文件读取相关信息将相关信息储存到文件从而实现旅馆信息管理的基本功能三个链表分别存储旅客和房间的相关信息以及这二者关系的信息。用一个枚举类型定义房间的类型。用操作链表的方式实现旅客的入住换房和退房三种行为。程序开始时将文件中的信息读到链表中修改信息后将链表中的信息保存到文件中。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 总体流程总体流程大致如图所示更多细节未在图中展示。3.4 关键算法核心功能是实现旅客的入住、换房和退房涉及到新增、修改和删除链表中的节点。文件输入输出信息是本程序的重要功能程序开始和结束时程序中的链表会和文件交换信息。计算入住时间和退房时间的时间差属于创新功能但实现相对较为复杂。旅客入住时会使用 time()函数获取时间将时间存储为字符串。旅客退房时通过字符串处理将入住时间放入 tm 结构体中使用 mktime()函数和 difftime()函数计算退房时间与入住时间的差。3.5 界面设计整体界面在 Windows 控制台上。打开程序后的菜单如图4.调试记录在 IDE 进行代码分析没有错误和警告后开始编译。由于程序开始运行时就会读取文件中的数据当项目的文件夹内没有相应文件时出现如下报错。按项目要求添加样例文本文档后程序成功显示菜单。程序在读取文件中的字符串时遇到如下调试信息在读取存放数据表格的文件时需要先跳过表头的中文。查询 variable was corrupted 的原因是内存越界后将读取这段中文的临时字符数组设置得更大一些问题解决。cur 是 0xCDCDCDCD 的原因是前面的代码将 cur 设置为了垃圾指针。此处的 cur 指针原本用于遍历链表检查前面代码发现错将 cur 分配到了一个新的内存地址。将 cur 指向链表首个节点后问题解决。在文件中已有数据的情况下程序未能读取到旅客信息。检查代码时发现在读取文件时弄错了 feof 函数的返回值真假。feof(fp)在 fp 指向文件末尾时返回真在 fp 指向文件中间时返回假。进行旅客入住操作时弹出调试信息“引发了异常读取访问权限错误。”多次检查代码后发现在将数据输出到文件的过程中使用了遍历链表后的地址不明确的链表指针将指针换为记录数据的普通变量以输出问题解决。存储旅客入住时间时使用了 ctime()函数调试时发现程序显示的入住时间不正常。查询资料后发现 ctime()函数的返回值末尾有换行符使用 strncpy()去除换行符后屏幕不会输出换行但字符串末尾出现“屯屯屯……”表明有未赋值的字符被输出。查询资料后确认strncpy 并不会给目标字符串的末尾添加’0’手动为字符串末尾添加’0’后问题解决。在使用 difftime()函数时返回的时间差是 0查询 MSDN 后发现 difftime()函数执行错误将导致返回值为 0。difftime()函数执行错误的具体原因是程序记录的年份是从 1900 年开始的因此存入 tm 结构体的年份要在真实年份的基础上减去 1900。5.创新说明结构体定义时没有使用 typedef尽量减少结构体名称数量。每次使用链表时写 struct 关键字也能使得代码可读性更强。全局定义了 printline()函数用于命令行换行便于调用。精细地调整格式化输入输出使得程序能以整齐的列表形式清晰地显示各项数据。查看某一旅客或某一房间信息时如果旅馆中没有该房间或旅客会显示提示信息给予使用者反馈。旅客入住时会显示可用房间的信息并标注可用房间中是否已有人入住。针对即将入住旅客的身份进行识别判断该旅客是否已经入住。针对旅客即将入住的房间判断该房间是否能够容纳该旅客。旅客退房时使用 difftime()、mktime()等函数自动计算旅客从入住到退房的天数而不用手动输入。旅馆管理人员若想给予旅客折扣可输入折扣率使程序直接计算出最终的房费。旅客换房时考虑到房间号是否输入错误新换的房间是否已满等细节确保程序不会因为使用者的误操作出现异常。在换房前展示旅客的信息以及房间是否可用的详细信息。6.体会与建议与以往学习 C 语言时写单个文件的小程序不同此次程序设计需要完成一个项目。完成项目需要编写多个头文件和源文件谨慎地对项目和解决方案进行配置甚至要注意版本控制及时保存现有的代码。整个项目的代码量比较大共 1300 余行也涵盖了 C 语言程序设计课程的许多知识重要的知识点包括指针、结构体、链表、内存动态分配、枚举类型、文件操作等。平常编程时难以纠正的惯性思维也在项目开发的过程中暴露出来。比如局部数组初始化时应当赋空值字符串之间不能直接用“”比较而必须用 strcmp()函数数组申请的空间需要足够大空指针需要及时用 free()处理等。也复习到了 strncpy()用完后需要手动添加‘0’等印象不深刻的知识点。开发此次项目也自学了更多 C 语言的知识比如用于记录时间的结构体 tm 以及 time.h 中的其他函数学会了在 MSDN 文档中查询资料等技能收获颇丰相当程度上提升了编程能力了解了项目开发的基本流程。参考文献[1] C 语言程序设计案例实践 [M].清华大学出版社, :2009-02-01
返回列表