C语言实现酒店管理系统

C语言实现中小型酒店旅馆管理系统

刚刚基础的学完一遍c语言,在老师的带领下,大致完成了这个项目,其中因为时间问题,有些地方还未修改,功能有点不完善。虽然做的过程,学c语言的过程很痛苦,想过放弃,但是坚持下来真的学到不少东西,很感谢老师,写点文字以供今后复习回忆。

一.系统的功能需求

1.系统分四种角色分别是: 系统管理员;经理;前台接待员;保洁员;旅客。五个角色对应五个模块,每个模块都有不同的权限。
2.旅客:权限最低,功能:查询房间,查看自己信息。其中查询房间可以显示全部,也可以模糊查询,比如输入“单人”,显示所有类型单人房。
3.除旅客外,其他四个角色统一登录,然后调用对应的子菜单函数。同时他们也有相同的一部分功能,如:修改个人信息(更改账号,密码,姓名,邮箱),注销(退出当前模块)。
4.系统管理员功能:浏览用户,增加用户,删除用户,初始化用户密码,系统备份。系统管理员主要是维护系统,管理用户,备份系统文件。
5.经理功能:浏览用户,增加用户,删除用户,浏览客房,修改客房,增加客房,删除客房,查看收支。经理作为决策者,可以管理自己的员工,根据市场对客房进行增删改,查看每月收入,每间房间的收益,从而完善客房配置,提高旅馆收益。
6.前台接待员功能:查询房间(内分办理入住,办理预约),退房,换房,续住,查看客人信息。前台与旅客接触功能复杂,根据旅客需求选择房间,然后办理入住,预约,填写旅客信息,还有续、换、退房。
7.保洁员功能:查询未打扫房间,确认房间打扫完成。提高旅馆效率,使收益更大化。
8.因为角色较多,功能较多,最后的.c文件会有很多,以及在其他.c文件中也会有很多地方用到另外.c文件中的函数,所以为了方便,创建相应的.h文件,会给我们带来不少的便利。

二.系统的主要模块

1.公共模块

1.身份认证模块:user* login()

用于实现四种工作人员登录的身份认证,该模块先读取用户信息文件生成带头结点链表,再根据用户输入的账号密码进行匹配,匹配成功返回该节点指针传递给角色调用函数。

2.角色调用函数:void enterSystem(user *r)

接收身份认证模块返回指针,根据信息中的身份调用不同角色函数

3.显示时间界面:void showTime(int k)

根据时间显示上午好,下午好等。

4 修改个人信息函数void amendPassWord(user *r)

接收身份认证模块返回指针r;对该节点的账号,密码,姓名,邮箱进行修改,但角色,性别不可更改。

5 删除用户函数:void deleteUser()

根据输入账号进行匹配,找到即可删除,否则报错。

6 增加用户函数void write()

按要求输入相关信息,写入用户信息文件中。

7 读取文件信息模块:
User *read_user()用户信息文件读入链表,返回头指针;
Room *read_room()房间信息文件读入链表,返回头指针;
Bill *read_bill()账单信息文件读入链表,返回头指针;
Customer *read_customer()账单信息文件读入链表,返回头指针。

8 输出链表模块:
int display_user()输出用户链表
int display_room()输出客房链表
int display_bill()输出账单链表
int display_customer()输出旅客信息链表

9 清除链表模块:清理操作完成后的链表
int delete_user()清除用户链表
int delete_room()清除房间链表

将读取文件函数才是最终形成链表的地方,将它返回的头指针传入输出函数(我是在输出函数中调用读取函数),输出信息即可。清除链表的某一节点后,一定要将那个节点free()掉,同样的添加节点,一定要将新加的节点尾部赋成NULL。

总界面:

login system

2.管理员相关模块

a. 系统管理员菜单界面void adminSystem(user *r)
b. 初始化用户密码函数void initPassWord()
根据输入账号进行匹配,找到即可进行初始化操作,否则报错。
c.备份模块:相关文件的备份。
读取原文件,在写入“原文件名+日期”文件中完成备份
void backupUser()用户文件备份
void backupRoom()客房文件备份
void backupBill()账单文件备份
void backupCustomer()旅客信息文件备份

备份文件的方法
struct tm *newtime;
char outfile[128];
time_t t1;
t1 = time(NULL);
newtime = localtime(&t1);
strftime(outfile,128,“xxx_%Y%m%d_%H%M%S.txt”,newtime);
这里也是经过网上搜索学到的一种可以把时间保存到文件名的方法,strftime()函数可以将本地时间\日期格式化,将保存的字符串存到相应的字符数组中,%Y%m%d……有很多,可以今后用到查阅。

管理员界面:

admin

管理员代码链接:https://gitee.com/hhb845531681/hotel-management/blob/master/src/admin.c

3.经理相关模块

a. 经理菜单界面void managerSystem(User *r)
b. 查看账单函数void checkBill()
c.房间操作模块:
void writeRoom()增加房间
void amendRoom()修改房间
void deleteRoom()删除房间

经理界面:

manage

经理代码链接:https://gitee.com/hhb845531681/hotel-management/blob/master/src/manager.c

4.前台接待员相关模块

a. 前台接待界面void receptSystem(User *r)
b. void check_stayroom()
查看房间的信息,办理旅客入住,将相应的房间的状态改变并且添加旅客信息到相应的文件。
c. void exit_room()退房函数
输入旅客身份证号,确认旅客信息,从中读取旅客的房间号、入住时间、退房时间,将需要的参数传入相应的函数,将旅客的状态改成已退房,且将退的房的状态改成未打扫。
d. void replace_room()换房函数
换房函数首先应确认现在还有没有可用的房间,确认有后,输入旅客身份证号,确认旅客信息,将原先住的房间状态改成未打扫,将要换的房间的状态改变。
e. void keep_stay()续住函数
输入原房间号,确认旅客信息,在看有无预约(还未完成),输入退房时间,再补交费用,最后更改相应文件信息。
f.int add_bill(Room *p,Customer *pr)账单函数
传入入住旅客,房间的信息节点,获得需要的参数,将相关信息写入账单文件

前台接待员界面:

reception

前台代码链接:https://gitee.com/hhb845531681/hotel-management/blob/master/src/recept.c

5.保洁员相关模块

a. void cleanerSystem(user *r)保洁菜单界面
b. int cleaner_seeroom()查找未打扫房间
查看房间状态,保洁员确认打扫后将房间状态置为“正在打扫”。
c. int cleanroom()释放房间
保洁员将房间打扫干净后,将房间状态置为可用。

保洁员界面:

cleaner

保洁员代码链接:https://gitee.com/hhb845531681/hotel-management/blob/master/src/cleaner.c

6.旅客相关模块

a. void customerSystem()游客函数
进入旅客选择菜单
b. int findroom()查找房间
读取房间信息文件,根据选择条件可进行不同类型查找
c. int cusself_informatin()查看自己信息
输入身份证号进行查找,匹配成功输出该节点。

旅客界面:

customer

旅客代码链接:https://gitee.com/hhb845531681/hotel-management/blob/master/src/customer.c

三.用到的四个结构体

1 . struct usernode
{
char userId[12]; //工作人员的id号
char name[9]; //名字
char sex[4]; //性别
char role[8]; //“admin”.“manager”,“recept(前台)”."cleaner"工作人员的四个角色
char email[20];//邮箱
char password[7];//密码
struct usernode *next;
};
typedef struct usernode User; //工作人员结构体

2 .struct roomnode
{
int roomId;//房间号
char type[10];//房间类型:single(单人间),double(两人间),kingbed(大床房)等等
int price;//房间单价
int discount;//0 normal,1 sale
int cashPledge;//押金
int status;//0 empty,1 not empty,2 not clean,3 cleaning房间四种状态
struct roomnode *next;
};
typedef struct roomnode Room; //房间结构体

3 .struct customernode
{
int roomId;//房间号
char cusid[19]; //旅客身份证
char cusname[9];//姓名
int cusage;//年龄
char cussex[4];//性别
char phone[12];//联系电话
char inDay[12];//开房时间
char outDay[12];//退房时间
int status; //1 .入住 0.以退房 2.预约
struct customernode *next;
};
typedef struct customernode Customer; //旅客结构体

4 .struct billnode
{
int roomId;//房间号
int price;//房间单价
int yingPrice;//应收金额
int realPrice; //实收金额
int cashPledge;//押金
int change;//找零
int status; // 1.入住押金 0.已还押金
char inDay[12];//开房时间
char outDay[12];//退房时间
struct billnode *next;
};
typedef struct billnode Bill;//账单结构体

四.部分功能的实现效果

1.工作人员信息陈列

display user

2.房间的陈列

display room

3.旅客对房间的选择性查看

只查看单人间

display singleroom

只查看两人间

display doubleroom

只查看大床房

display kingbedroom

4.账单陈列

display bill

完整代码链接:https://gitee.com/hhb845531681/hotel-management.git

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值