Linux下C++酒店管理系统

功能要求:

?

相关源码:码云:传送门,GitHub:传送门

相关图片:

拆分版

make编译

?

./hotel运行

?

输入2,进入开房模块

?

相关源码:

class.cpp

  1 #include <fstream>
  2 #include "tools.h"
  3 #include "class.h"
  4
  5 using namespace std;
  6
  7 Customer* cust[30];
  8 Room* room[30];
  9
 10
 11 int live; // 被订房间数
 12
 13 // 获取room_num
 14 short Room::get_room_num(void)
 15 {
 16     return room_num;
 17 }
 18
 19 // 返回房间的下标
 20 int Manage::room_index(short room_num)
 21 {
 22     short num = room_num;
 23     for(int i=0; i<30; i++)
 24     {
 25         if(num == room[i]->get_room_num())
 26         {
 27             return i;
 28         }
 29     }
 30     return -1;
 31 }
 32
 33 // 返回顾客的下标
 34 int Manage::cust_index(short room_num)
 35 {
 36     short num = room_num;
 37     for(int i=0; i<30; i++)
 38     {
 39         if(num == cust[i]->room_num)
 40         {
 41             return i;
 42         }
 43     }
 44     return -1;
 45 }
 46
 47 // 查询剩余房间
 48 void Manage::find_room(void)
 49 {
 50     for(int i=0; i<30; i++)
 51     {
 52         if(i == 10 || i == 20)
 53         {
 54             cout << endl;
 55         }
 56         if(room[i]->use != 0)
 57         {
 58             continue;
 59         }
 60         cout << room[i]->room_num << " ";
 61     }
 62     cout << endl;
 63 }
 64
 65 // 开房
 66 void Manage::get_room(void)
 67 {
 68     cout << "现有房间如下" << endl;
 69     find_room();
 70
 71 //    cout << "已经入住的人员" << endl;
 72 //    show_cust();
 73
 74     cout << "请输入您选择的房间:";
 75     short room_num;
 76     cin >> room_num;
 77     int flag = used(room_num);
 78     if(flag == 1)
 79     {
 80         cout << "此房间不能使用,请重新选择" << endl;
 81         getch();
 82         return;
 83     }
 84     else if(flag == -1)
 85     {
 86         cout << "此房间不存在,请重新选择" << endl;
 87         getch();
 88         return;
 89     }
 90     else
 91     {
 92         cout << "您选择的房间是:" << room_num << endl;
 93     }
 94
 95     int index = room_index(room_num);
 96     short type = room[index]->room_type;
 97
 98     cout << "请输入您的姓名:";
 99     string name;
100     cin >> name;
101     cout << "请输入您的身份证:";
102     string id;
103     cin >> id;
104     cout << "请输入您的2位家属(0,表示没有)" << endl;
105     string family1,family2;
106     cin >> family1 >> family2;
107
108     if(type == 1)
109     {
110         if(family1 != "0" || family2 != "0")
111         {
112             cout << "人数过多,开房失败" << endl;
113             getch();
114             return;
115         }
116     }
117     else if(type == 2)
118     {
119         if(family1 != "0" && family2 != "0")
120         {
121             cout << "人数过多,开房失败" << endl;
122             getch();
123             return;
124         }
125     }
126     else
127     {
128     }
129
130     cout << "请输入要订的天数:";
131     short day;
132     cin >> day;
133     short pay = day*room[index]->price;
134     cout << "请支付" << pay << "元" << endl;
135     short money = 0,change = 0;
136     cout << "收您:";
137     cin >> money;
138     cout << "元" << endl;
139     change = money-pay;
140     if(change < 0)
141     {
142         cout << "余额不足,请充值" << endl;
143         getch();
144         return;
145     }
146     cout << "找您" << change << "元" << endl;
147
148     short floor = room_num/100;
149
150     cust[live++] = new Customer(name,id,family1,family2,floor,room_num,day);
151
152     cout << "已订房间:" << live << endl;
153
154     for(int i=0; i<30; i++)
155     {
156         if(room[i]->room_num == room_num)
157         {
158             room[i]->use = 1;
159         }
160     }
161
162     cout << "开房成功,欢迎您的入住,祝你生活愉快!" << endl;
163     getch();
164 }
165
166 // 使用情况
167 int Manage::used(short room_num)
168 {
169     short num = room_num;
170     for(int i=0; i<30; i++)
171     {
172         if(num == room[i]->room_num)
173         {
174             if(room[i]->use == 1)
175             {
176                 return 1;
177             }
178             else
179             {
180                 return 0;
181             }
182         }
183     }
184     return -1;
185 }
186
187 // 显示顾客
188 void Manage::show_cust(void)
189 {
190     for(int i=0; i<30; i++)
191     {
192         if(cust[i]->name == "0")
193         {
194             break;
195         }
196         else
197         {
198             cout << "姓名:" << cust[i]->name << "," << "房间:" << cust[i]->room_num << ",";
199
200             string f1,f2;
201             f1 = cust[i]->family1;
202             f2 = cust[i]->family2;
203             cout << "家属1:";
204             if(f1 == "0") cout << " ,";
205             else cout << f1 << ",";
206             cout << "家属2:";
207             if(f2 == "0") cout << " ";
208             else cout << f2;
209         }
210     }
211 }
212
213 // 房间价格
214 int Manage::room_price(short room_num)
215 {
216     short num = room_num;
217     for(int i=0; i<30; i++)
218     {
219         if(room[i]->room_num == num)
220         {
221             return room[i]->price;
222         }
223     }
224     return 0;
225 }
226
227 // 续费
228 void Manage::renew_room(void)
229 {
230     cout << "请输入你的房间号:";
231     short room_num;
232     cin >> room_num;
233     int flag = used(room_num);
234     if(flag == -1 || flag == 0)
235     {
236         cout << "您输入的房间号有误" << endl;
237         getch();
238         return;
239     }
240
241     int index = cust_index(room_num);
242
243     cout << "您的房间剩余:" << cust[index]->day << "天" << endl;
244
245     cout << "请输入你要续的天数:";
246     short day;
247     cin >> day;
248     short pay = day*room_price(room_num);
249     cout << "请支付" << pay << "元" << endl;
250     short price = 0,change = 0;
251     cin >> price;
252     change = price-pay;
253     if(change < 0)
254     {
255         cout << "余额不足,请充值" << endl;
256         getch();
257         return;
258     }
259     cout << "收您" << price <<"元,找您" << change << "元" << endl;
260
261     string rename = cust[index]->name,reid = cust[index]->id;
262     string refamily1=cust[index]->family1,refamily2=cust[index]->family2;
263     short refloor = cust[index]->floor,reday = cust[index]->day+day;
264     cust[index] = new Customer(rename,reid,refamily1,refamily2,refloor,room_num,reday);
265
266     cout << "续费成功,房间的使用时间为:" << reday <<"天" << endl;
267     getch();
268
269 }
270
271 // 退房
272 void Manage::cancel_room(void)
273 {
274     cout << "请输入您的房间号:";
275     short room_num;
276     string name;
277     cin >> room_num;
278     cout << "请输入您的姓名:";
279     cin >> name;
280     int flag = used(room_num);
281     if(flag == 0 || flag == -1)
282     {
283         cout << "您输入的房间有误。" << endl;
284         getch();
285         return;
286     }
287     else
288     {
289         short refloor = 0,retype = 0,reprice = 0;
290
291         int i = cust_index(room_num);
292         if(i != -1)
293         {
294             if(cust[i]->name == name)
295             {
296                 short price = room[room_index(room_num)]->price;
297                 short change = cust[i]->day*price;
298                 cout << "退还您" << change << "元" << endl;
299
300                 cust[i] = new Customer("0","0","0","0",0,0,0);
301                 int j = room_index(room_num);
302                 refloor = room[j]->floor;
303                 retype = room[j]->room_type;
304                 reprice = room[j]->price;
305                 room[j] = new Room(refloor,room_num,retype,reprice,0);
306
307                 cout << "退房成功,感谢您的光顾,欢迎下次光临!"<< endl;
308                 live--;
309                 getch();
310                 return;
311             }
312             else
313             {
314                 //cout << cust[i]->name << endl;
315                 cout << "您输入的相关信息有误" << endl;
316                 getch();
317                 return;
318             }
319         }
320         else
321         {
322             cout << "您输入的信息有误" << endl;
323             getch();
324             return;
325         }
326     }
327 }
328
329 // 顾客初始化
330 void Manage::c_init(void)
331 {
332     fstream ci("data/cust.txt",ios::in);
333     if(!ci.good())
334     {
335         cout << "cust.txt数据加载异常" << endl;
336     }
337
338     for(int i=0; i<30; i++)
339     {
340         string name,id,family1,family2;
341         short floor,room_num,day;
342         ci >> name >> id >> family1 >> family2;
343         ci >> floor >> room_num >> day;
344         cust[i] = new Customer(name,id,family1,family2,floor,room_num,day);
345         if(name != "0")
346         {
347             live++;
348         }
349     }
350 }
351
352 // 房间初始化
353 void Manage::r_init(void)
354 {
355     live = 0;
356     fstream ri("data/room.txt",ios::in);
357     if(!ri.good())
358     {
359         cout << "room.txt数据加载异常" << endl;
360     }
361
362     for(int i=0; i<30; i++)
363     {
364         short floor,room_num,room_type,price,use;
365         ri >> floor >> room_num;
366         ri >> room_type >> price >> use;
367         room[i] = new Room(floor,room_num,room_type,price,use);
368     }
369 }
370
371 // 数据保存
372 void Manage::save_data(void)
373 {
374     fstream co("data/cust.txt",ios::out);
375     fstream ro("data/room.txt",ios::out);
376
377     for(int i=0; i<30; i++)
378     {
379         co << cust[i]->name << " " << cust[i]->id << " ";
380         co << cust[i]->family1 << " " << cust[i]->family2 << " ";
381         co << cust[i]->floor << " " << cust[i]->room_num << " ";
382         co << cust[i]->day << "\n";
383
384         ro << room[i]->floor << " " << room[i]->room_num << " ";
385         ro << room[i]->room_type << " " << room[i]->price << " ";
386         ro << room[i]->use << "\n";
387     }
388 }
389
390 // 菜单
391 void Manage::menu(void)
392 {
393     cout << "***欢迎使用酒店管理系统***" << endl;
394     cout << "   1、查询房间" << endl;
395     cout << "   2、开房" << endl;
396     cout << "   3、续费" << endl;
397     cout << "   4、退房" << endl;
398     cout << "   0、退出系统" << endl;
399     cout << "-----------------------" << endl;
400 }

main.cpp

 1 #include <iostream>
 2 #include <fstream>
 3 #include <stdlib.h>
 4 #include <termio.h>
 5 #include "class.h"
 6 #include "tools.h"
 7
 8 using namespace std;
 9
10 Manage admin;
11
12 // 主函数
13 int main()
14 {
15     admin.c_init();
16     admin.r_init();
17     while(1)
18     {
19         system("clear");
20         admin.menu();
21         switch(get_cmd(‘0‘,‘4‘))
22         {
23             case ‘1‘: admin.find_room(); break;
24             case ‘2‘: admin.get_room(); break;
25             case ‘3‘: admin.renew_room(); break;
26             case ‘4‘: admin.cancel_room(); break;
27             case ‘0‘: admin.save_data(); return 0;
28         }
29         getch();
30     }
31
32 }

tools.cpp

 1 #include "tools.h"
 2 #include <string.h>
 3 #include <getch.h>
 4 #include <stdbool.h>
 5
 6 void clear_stdin(void)
 7 {
 8     stdin->_IO_read_ptr = stdin->_IO_read_end;//清理输入缓冲区
 9 }
10
11 char get_cmd(char start,char end)
12 {
13     clear_stdin();
14
15     printf("请输入指令:");
16     while(true)
17     {
18         char val = getch();
19         if(val >= start && val <= end)
20         {
21             printf("%c\n",val);
22             return val;
23         }
24     }
25 }

class.h

 1 #ifndef CLASS_H
 2 #define CLASS_H
 3
 4 #include <iostream>
 5 #include <string.h>
 6
 7 using namespace std;
 8
 9 class Customer
10 {
11 public:
12     string name; //姓名
13     string id; //身份证
14     string family1; //家属1
15     string family2; //家属2
16     short floor; //楼层
17     short room_num; //房间号
18     short day; //时间
19     Customer(string name="0",string id="0",string family1="0",string family2="0",short floor=0,short room_num=0,short day=0)
20     {
21         this->name = name;
22         this->id = id;
23         this->family1 = family1;
24         this->family2 = family2;
25         this->floor = floor;
26         this->room_num = room_num;
27         this->day = day;
28     }
29 };
30
31 class Room
32 {
33 public:
34     short floor; //楼层
35     short room_num; //房间号
36     short room_type; //房间类型
37     short price; //价格
38     short use; //是否使用
39     Room(short floor=0,short room_num=0,short room_type=0,short price=0,short use=0)
40     {
41         this->floor = floor;
42         this->room_num = room_num;
43         this->room_type = room_type;
44         this->price = price;
45         this->use = use;
46     }
47     short get_room_num(void);
48
49 };
50
51 class Manage
52 {
53 public:
54     void menu(void);    // 菜单
55     void find_room(void);    // 剩余房间
56     void get_room(void);    // 开房
57     void renew_room(void);    // 续费
58     void cancel_room(void);    // 退房
59     int room_index(short room_num);    // 房间下标
60     int cust_index(short room_num); // 顾客下标
61     int used(short room_num);    // 房间使用情况
62     void show_cust(void);    // 显示入住顾客
63     int room_price(short room_num);    // 房间价格
64     void c_init(void);    // 顾客初始化
65     void r_init(void);    // 房间初始化
66     void save_data(void);    // 保存数据
67 };
68
69 #endif//CLASS_H

tools.h

 1 #ifndef TOOL_H
 2 #define TOOL_H
 3
 4 #include <stdio.h>
 5
 6 #include "tools.h"
 7 #include <string.h>
 8 #include <getch.h>
 9 #include <stdbool.h>
10
11 void clear_stdin(void);
12
13 char get_cmd(char start,char end);
14
15 #endif//TOOL_h

原文地址:https://www.cnblogs.com/ikaros-521/p/11402668.html

时间: 2024-10-11 10:56:01

Linux下C++酒店管理系统的相关文章

Linux下安装禅道管理系统7.2

提示:禅道是用PHP开发的,只要安装一个MySQL,找一个能跑PHP的web应用服务器,把禅道源代码放到里面,然后按步骤安装就可以了.不一定要用XAMPP,XAMPP只是把PHP环境和MySQL都集成了而已. 禅道简介 禅道项目管理软件(ZenTaoPMS)是一款国产的,基于ZPL协议,开源免费的项目管理软件,它集产品管理.项目管理.测试管理于一体,同时还包含了事务管理.组织管理等诸多功能,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程,是中小型企业项目管理的首选. 禅道项目管理软

LINUX下Db2安装

LINUX下Db2安装 1.解压db2_v101_linuxx64_expc.tar.gz 2.执行./db2_install 3.创建用户组和用户 DB2没有独立的用户管理系统,必须借用OS用户来提供安全性认证,所以这里需要创建 LINUX用户和组.一共创建了3个组,每个组一个用户.其作用和含义分别是: 数据库管理服务器DAS用户 dasusr1 组名: dasadm1 管理实例的用户 db2inst1 组名:db2iadm1 受防护用户 db2fenc1 组名: db2fadm1 [[ema

酒店管理系统

酒店管理系统程序是一个偏长的c语言程序,其中包含的函数公式涉及面很广,令人难以捉摸. #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<ctype.h> #define STACK_INIT_SIZE 10 #define OK 1 #define TRUE 1 #define ERROR 0 /*定义学生类型,用于存放借出的书籍*

Linux下通过JDBC连接Oracle,SqlServer和PostgreSQL

今天正好需要统计三个网站栏目信息更新情况,而这三个网站的后台采用了不同的数据库管理系统.初步想法是通过建立一个小的Tomcat webapp,进而通过JDBC访问这三个后台数据库,并根据返回的数据生成报表. 1 开发环境 数据库管理系统:一个是SqlServer 2000,另一个是Oracle 9i,再一个是PostgreSQL9.1 Tomcat执行平台:CentOSx64 + JDK7.0x64 (全64位环境) 2 JDBC驱动的选择 2.1 Oracle9i Oracle官方提供了ojd

Linux 下的图形库介绍

在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等. 一.Linux 图形领域的基础设施 1.1 X Window  X Window从逻辑上分为三层:X Server.X Client和X协议. 最底层的X Server(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘.鼠标的操作并将它交给X Client(X客户端)作出反馈,而由X Cl

Linux下LDAP统一认证解决方案

Linux下LDAP统一认证解决方案 --http://www.cangfengzhe.com/wangluoanquan/3.html 企业内部需要认证的服务很多,员工需要记住很多的密码, 即使对这些服务进行相同的密码设置,也存在很大的安全隐患.笔者目前工作的企业就是如此,每一个新员工的到来管理员都要初始化很多密码,而这些密码都被设置成了“888888”等弱密码,由于各种软件的认证机制之间没有使用一个统一的标准,员工无法一次性修改所有服务的密码,这导致很多即使是入职很久的员工都还在使用这个“众

关于财易酒店管理系统折扣问题详解

关于财易酒店管理系统折扣问题详解 有过酒店经营管理的人都知道,酒店在经营过程中总会通过特价或者搞活动等方式推出一些房费或者消费打折等优惠活动.传统的酒店经营由于是以手工做单为主,一旦出现什么优惠政策,都是直接在手工单上进行操作.随着酒店管理系统的慢慢普及,酒店经营者应该如何在酒店管理系统上实现这一过程呢? 以财易酒店管理系统为例,要想知道在系统中如何进行相关的折扣操作,那我们就必须了解酒店经常要涉及的几种折扣方式: 第一种是整单折扣法,这是酒店比较常用的一种折扣方式.整单折扣,顾名思义,就是宾客

Linux下的mysql两大实战:部署Ucenter和Ucenter-home论坛

Linux下的mysql两大实战:部署Ucenter和Ucenter-home论坛 实验目标 实战:搭建Ucenter论坛 搭建Ucenter-home网站 实验环境 LAMP环境搭建 服务端:xuegod63.cn   IP:192.168.1.63 客户端:xuegod64.cn   IP:192.168.1.64 实验步骤   ---搭建LAMP环境部署Ucenter和Ucenter-home网站,搭建一个类人人网的社交网站      实验概述 UCenter 用户中心,实现用户的统一登录

Linux 程序设计学习笔记----Linux下文件类型和属性管理

转载请注明出处:http://blog.csdn.net/suool/article/details/38318225 部分内容整理自网络,在此感谢各位大神. Linux文件类型和权限 数据表示 文件属性存储结构体Inode的成员变量i_mode存储着该文件的文件类型和权限信息.该变量为short int类型. 这个16位变量的各个位功能划分为: 第0-8位为权限位,为别对应拥有者(user),同组其他用户(group)和其他用户(other)的读R写W和执行X权限. 第9-11位是权限修饰位,