面向对象程序设计实验报告 by coolwx
西安电子科技大学
面向对象程序设计
(2020年度)
实
验
报
告
实验名称: 酒店客房管理系统
班 级: 1803012
姓 名: 曹王欣
学 号: 18030100167
写在前面的话,本报告已经开源:
https://github.com/coolwx/oop_xdu
-
题目要求
某酒店有客房若干间,其中客房分为不同等级,如豪华、标准、普通等,客房床位数也不同。例如,豪华套房有4个床位,400元/晚;标准客房2个床位,200元/晚;普通客房1个床位,100元/晚。
顾客分金卡会员、银卡会员、普通会员及非会员,其享受的折扣不同。例如,金卡会员可享受8折优惠,银卡会员可享受9折优惠,普通会员享受95折优惠,非会员不享受优惠。
当顾客连续入住多天时,也可享受一定的折扣。例如,当顾客连续入住2~4晚时,可享受9折优惠;连续入住5~8晚时,可享受85折优惠;连续入住9晚以上时,可享受8折优惠。
采用面向对象的思想,建立系统中清晰的类,分析和定义各个类,每个类中要有各自的属性和方法,并开发一套客房管理系统,实现如下功能:
-
管理员:以管理员身份登录系统,查询当前客房入住及预订情况,并设置客房价格、顾客优惠政策等;
-
酒店前台:以前台身份登录系统,查询当前客房入住及预订情况,为顾客办理入住、退房、换房等服务;顾客退房后为顾客计算消费金额并收费;
-
顾客:可以注册和登录系统,用户在查找到心仪的客房后,登录酒店客房管理系统可提交订单实现客房预订;未入住酒店前1天,可取消客房预订;顾客入住退房后可评论。
-
-
题目分析
分析题目之后,我首先认为,针对不同的登录对象,至少要有三个类,分别用于管理员,酒店前台,顾客的功能实现。
还需要定义一个房间类,房间类应该要有自己的属性,表明他是什么样子的房间,比如说是豪华的,还是标准的,还是普通的,比如房间号,房间是否住人了。
然后分析题目得知,管理员和酒店前台都应该有注册/登录的功能,而顾客的注册时可以自己注册的,酒店前台必须由管理员来注册。既然顾客和前台都有这样的功能,那么不妨设置一个基类People,让顾客和管理员都由此派生而来,利用C++继承的特性简化我们的代码。
分析题目得知,管理员和前台都能查询当前客房入住及预订情况,所以我又定义了一个类Base_Admin用来实现这两个操作,然后管理员和前台都继承自这个类,这样就可以少些一点代码
然后因为学习了数据库课程,我知道还需要定义一个选择类,其主码分别是客房号和顾客的名字,这样可以用来存放顾客预定订单的信息。利用这个信息我们可以进行客房的管理系统的实现。
同时,因为有金卡会员/银卡会员,有入住时间的优惠政策(比如入住五天之后能打折),还有客房的各种属性的设置(比如各类型客房对应的床位),所以我定义了三个Control类,用于控制全局属性(比如优惠政策),而这三个类应该只有管理员类的方法能够访问。
然后为了实现各项服务,我最后定义了一个总类,hotelsystem,用于调用各个类的服务方法。
然后我思考了我这个题目应该用几个文件,还有哪些数据可以放在内存里,哪些数据可以放在外村里。
管理员只有一个,那么他的账号和密码可以放在内存里。
但是用户和前台有很多个,如果放在内存里面的话,每次程序结束之后,这些数
据就会消失了,所以需要两个文件Custmor.txt和Reception.txt来存放这些数据。
同时"选择"类(用于存放顾客的选房间信息/订单信息)必须放在外存里面,这样才能永久保存这些选房信息,我用了一个Select.txt来保存这些信息。
但是房间本身是否被入住这些信息可以放在内存里面,因为我们读入放在外存的Select.txt能够知道客房的信息。
同时为了方便,我定义了两个数组分别是room数组(用于存放房间信息) ,还有vector类型的SC数组(用于存放选房信息),用于每次运行系统的时候把Select.txt 里的数据读进来到内存里面,然后需要更新的时候我再把这些数据更新到Select.txt ,这样可以提高我们处理信息的效率。
我们还需要定义一个辅助类Date(日期类),因为选房的时候都要选择日期,所以我索性定义这个辅助类,然后把他的运算符都重载,这样方便我们的写入日期。
最后是全局变量/全局函数。
我宏定义了每一个会员/房间类型所对应的模式代码(比如豪华客房对应1,普通客房对应2这种,还有黄金会员对应3,白银会员对应 2这种),方便我们的书写。
同时用于文件交互的函数我也定义了全局函数,用于交互我们的Select.txt文件,(比如对选房信息更新,删除,查询)这样方便我们的文件操作。
最后我们还要有一个评论区,所以要一个Remark.txt来记录我们的评论.
-
类图设计以及类的说明
各个类的类图表示如下,我最后也画出了他们的关系图
类名Date (辅助类,用于表示日期)
int _year; //年
int _month; //月
int _day;//日
//这些函数用于构/析构,还有查询年月日
//这些函数用于运算符的重载
房间类 Room (用于表示房间的各项属性)
Private:
bool islived;//当前状态是否有人入住
int roomtype;//房间的等级
int roomnumber;//房间号,与数组号码相一致
int booked_sum;//已经预定该房间的人数
string living_customer_name;//当前入住的房客的名字
Room()//无参数构造函数,用于初始化
//以下是各类set/get方法
void setroomnumber(int i)
void setlived(bool islived)//用于设置房间是否已经入住
void setroomtype(int roomtype)
void setbooked_sum(int booked_sum)
void setliving_customer_name(string name)
int getroomtype()//得到房间的类型
string getname()
//以下是关键的方法
bool check_room_state(Date start, Date end);//check_room_state用于检查目标房间的状态(给定时间,是否能被预定呢)
void display_to_admin() //向管理员展示
void display_to_custmor()//向顾客展示
People(用于前台和顾客的注册)
String name//用户名
String secret//密码
People()//此构造函数用于注册
virtual void display() 用于展示
Custmor(顾客类,派生自people)
protected:
int VIP_MODE;//VIP情况,默认为普通用户;
int roomnumber;//用户预定的房间号
int is_ever_booked;//只有预定过的用户才能评论,设置这个用户是否定过房间
Custmor(string name, string secret, int Mode, int roomnumber)//构造函数1,用于初始化
Custmor():People() //构造函数2,用于注册
void setbooked(int i)//设置预定的情况
void display();//用于展示
void setVIP_MODE(int VIP)
void remark()//用于记录评论
//下面是选房用的函数
void book_room(string name, int MODE, int roomnumber, Date start, Date end);
//预定客房,肯定要用到select类
void custmor_book_room_io()//用于与用户交互,会调用上面的book_room函数
void canceled_io()//用于与用户交互,退订
void cancel_booked(int roomnumber);//具体的取消预订操作
void write_custmor_to_file()//将用户信息写入文件,将会调用全局函数
void service()//对于用户的具体服务,调用上面的某些方法
Select(选房类,用于记录选房信息)
int roomnumber;//入住的房间号
string name;//预定的人的名字
int Mode;//会员记录
Date startdate;//预定起始时间
Date enddate;//预定结束时间
double money;//钱
Select(string name,int MODE,int roomnumber,Date start,Date end)://构造函数
double calculate_money();//算钱用的函数
void display()//展示选房订单信息
void addmoney(double money)//换房的时候用的加钱函数
//一些get方法
void write_to_file()//写入txt文件
Base_admin(用于扩展管理员和前台)
//无参数
//查询客房的情况
void select_all_room_information()
void select_all_booked_information()//查询预定情况
void select_all_remark()//显示所有评论
Reception(前台,继承自People和Base_admin)
Name
Secret//都继承自people
void write_to_file()//将账号密码写入文件
Reception(string name, string secret) :People(name, secret)//此构造函数用于登录
Reception() :People(),Base_admin()//此构造函数用于注册;
void register_room(int roomnumber, string name)//登记入住
void reject_room(int roomnumber)//退房,退房前订单应该还在文件里面,只有退房的时候才把订单消掉
void change_room(int oldnumber,int newnumber,Date endday)//换房的时候先退房,然后重新注册
void service()//具体服务,用于调用上面的换房,退房,登记入住
Admin(继承自Base_Admin管理员类)
//无,因为只有一个管理员,而管理员默认密码已经指定
void Denglu()//登录
Admin():Base_admin() {};//构造函数
void Register_Reception()//用于注册前台
void set_VIP()//制定vip优惠政策
void set_ROOM()//指定各个房间的类型
void set_DAY()//指定入住多少天有多少优惠
void setdate()//指定今天是几月几号
void service()//面向管理员的服务,调用上述函数
HotelSystem_Service(客房管理系统,进入主函数之后调用此类,用于实现各种管理操作)
//无内部属性,但是类的成员函数内有局部变量,写入外存之后能够永久保存,s使用一些局部变量聚合成此管理系统
Custmor_Service()//顾客服务程序
(内有局部变量 顾客,写入外存之后永久保存)
Admin_service() //管理员服务程序
Reception_service()//前台服务程序
还有Room_control和VIP_control用于保存Room类型和VIP类型所对应的政策,全局函数Day_control用于保存入住天数相关的优惠政策
全局变量如下:
//宏定义,VIP标识
#define NONEVIP 0
#define NORMAL 1
#define SILVER 2
#define GOLDEN 3
//宏定义,客房型号标识
#define LUXIOUSROOM 0
#define STANDARDROOM 1
#define NORMALROOM 2
using namespace std;
int room_startnumber = 0;//room数组的起始
int room_endnumber = 100;//room数组的终结
int room_count;//room的数量
//VIP暗号,用户答对暗号就是某个VIP用户
string gold_secret = "GOLD";
string silver_secret = "SILVER";
string normal_secret = "NORMAL";
//类型声明
int todayyear=2020;
int todaymonth=12;
int todayday=20;//默认今天的时间是2020年12月20日(写代码的这一天)
Room room[2000] // 内存中暂存的房间信息
Vector<Select> Sc[2000] //内存中暂存的订单信息
全局函数如下
Select all_choose_Select_element(int roomnumber, string name)//select语句,用于查询Select.txt中相关的roomnumber和name对应的相关信息
static void all_delete_room_from_file(int roomnumber, string name)//全局函数,用于刷新Select.txt
static bool all_check_room_state(Date start, Date end, int roomnumber)//全局函数,用于检查是否该房间在该时间段内可以被预定(本质是检查Select.txt 文件的相关信息)
static void all_show_all_can_book_room(Date start, Date end)//全局函数,用于显示Select.txt文件内的内容
Init()默认初始化;
总体来说各个类之间的关系如下所示(类图关系)
最核心关系的类图是
-
系统功能设计
系统中最重要的是Custmor/Admin/Reception/Selects四个类的实现
Custmor类中最关键的是预定订单与取消订单,尤其是在前一天的时候就不能取消了!!!
而Admin类中最关键的是控制各项政策参数
Reception中最重要的是登记入住,退房结账,还有换房
而Select类中最关键的是与txt文件的交互实现内存与外存的交互
其中最大的难点是计算结账价格,结账价格我放在Select类中实现,我们找到对应的用户的VIP模式和对应的各项房屋的价格,然后将其相乘之后我们就能得到最后的价格
还有一个很大的难点是换房,换房的时候我们需要不断与txt文件交互,并且加上之前用户的钱数,因为换房的时候我们没有结账,而最后的时候我们会结账,所以换房的一大难点就是要保存之前的money,然后加上新的money得到我们的钱数。
-
流程设计与关键部分代码
总体代码的流程图如下:
实验部分关键代码如下:
1. Custmor中的预定订单与取消订单void Custmor::book_room(string name, int MODE, int roomnumber, Date start, Date end)
{
int size = SC[roomnumber].size();
Select temp = Select(name, MODE, roomnumber,start,end);
SC[roomnumber].push_back(temp);
SC[roomnumber][size].write_to_file();
}
void Custmor::cancel_booked(int roomnumber)
{
for (int i = 0; i < SC[roomnumber].size(); i++)
{
if (SC[roomnumber][i].getname() == name)
{
if (Today - SC[roomnumber][i].getstart() > 1)
{
//前一天之前可以退房//注意当前时间需要全局变量
SC[roomnumber].erase(SC[roomnumber].begin() + i);
//SC[roomnumber].pop_back();//在内存中删除
all_delete_room_from_file(roomnumber, name);//在外存中删除
cout << "删除预定订单成功" << endl;
break;
}
else
{
cout << "这个房间现在不能退了,太晚了" << endl;
}
}
}
}
Select类中计算钱如下:
double Select::calculate_money()//算预定之后要花的钱
{
int roomtype = room[roomnumber].getroomtype();
double room_money = all_room->getMoney(roomtype);
double Date_money_zhekou = Day_control_get(enddate - startdate);
double VIP_zhekou = all_vip->VIP_zhekou(Mode);
int days = enddate - startdate;
double money = room_money * days * VIP_zhekou * Date_money_zhekou;
return money;
}
Reception类中的换房,退房,登记入住
void register_room(int roomnumber, string name)
{
room[roomnumber].setlived(true);
room[roomnumber].setliving_customer_name(name);
cout << "前台手续已经办理成功" << endl;
}
void reject_room(int roomnumber)//退房前订单应该还在文件里面,只有退房的时候才把订单消掉
{
string name = room[roomnumber].getname();
for (int i = 0; i < SC[roomnumber].size(); i++)
{
if (SC[roomnumber][i].getname() == name)
{
cout << "应该付钱" << SC[roomnumber][i].getmoney()<< endl;
SC[roomnumber].erase(SC[roomnumber].begin() + i);
//在内存中删除
all_delete_room_from_file(roomnumber, name);//在外存中删除
cout << "成功退房" << endl;
string real_name_in_file, real_secret_in_file;
int real_mode_in_file;
int real_room_in_file;
//下面进行更改用户状态
}
}
}
//换房的时候最麻烦,要考虑多一点
void change_room(int oldnumber,int newnumber,Date endday)//换房的时候先退房,然后重新注册
{
int roomnumber = oldnumber;
int Mode = 0;
cout << "您现在正在切换房间" << endl;
string name = room[roomnumber].getname();
cout << "您正在为" << name << "办理切换房间服务" << endl;
double money = 0;//切换房间的时候要先记录原来的价格。
for (int i = 0; i < SC[roomnumber].size(); i++)
{
if (SC[roomnumber][i].getname() == name)
{
money = SC[roomnumber][i].getmoney();
Mode = SC[roomnumber][i].getmode();
SC[roomnumber].erase(SC[roomnumber].begin() + i);
//在内存中删除
all_delete_room_from_file(roomnumber, name);//在外存中删除
cout << "成功退房" << endl;
break;
}
}
register_room(newnumber, name);
//下面要刷新内存和外存的订单状态.
Select S(name,Mode,newnumber,Today,endday);
S.addmoney(money);//把原来的钱要加上
cout << "正在写入新的订单和新的房间状态" << endl;
SC[newnumber].push_back(S);
SC[newnumber][SC[newnumber].size() - 1].write_to_file();
cout << "换房成功" << endl;
}
-
实验结果演示
实验部分截图如下:
登录界面如下:
以顾客的身份注册了用户:
下面是预定客房的操作并且显示各可选的客房信息:
观察我们的外存,我们看到了qwqw顾客的注册信息和选房信息
显示顾客的订单情况
下面是取消订单,此时可以看到,我们的外存里面已经没有了顾客qeqe的选房信息
然后是对前台的操作,我们首先打开Reception.txt,我们看到里面已经有了两个前台用户和密码
我选择WW用户,开始登录,
登录成功!
进行查看订单的状态,这与我们Select.txt文件中一致
下面办理入住和退房的实验!!
可以看到,我们成功办理了入住手续,然后查看房间状态,显示房间1已经被入住了,然后我们退房的时候看到了结算金额,其中100元/天的普通客房,金卡会员用了50块钱
我们可以查看用户的评论
然后我们可以进行换房实验,我们看到用户qwe预定了20号客房,总共花钱490
然后我们进行换房实验,换到29号客房,现在我们再次查询订单情况的时候,已经显示了他的截止日期是12月30号,然后换到了29号房间
下面进入管理员实验
管理员默认sa,密码123456
如下图所示,我们可以设置政策
我们也可以注册前台,这时候进入Reception.txt我们可以看到有这个前台了
可以登录,看到登录成功
综上所述,我们的功能现在全部实现了
-
问题以及解决
在本次实验中,我也遇到了不少问题,首先是有一次txt文件里面明明已经写了,但是里面什么都没有,后来我知道了,是没有把文件关掉,导致了这个后果的发生,这提醒我一定要及时关闭文件
第二个问题是在切换房间的时候,我一开始想当然地认为,切换房间只要先退房再注册就好了,但是后面发现,退房之后,money变成0 了,而我们换房的时候money应该是保持原来的值,然后加上来,所以这里面出现了bug,最后我也解决了,这提醒我写代码要注意逻辑的仔细
第三个问题是我一开始设置Select类的时候没有写money,以为money可以算出来,结果最后发现不行,计算量太大了,先算money比较好
最后还有一个感受,就是这一次我没有用数据库,而学了数据库课程之后,我深深地感受到了数据库的重要性,如果我这次使用数据库的话,应该能简化很多操作,但是我这次使用的是文件输入输出,数据库没有使用,所以造成了不少冗余的代码。
综上所述,这一次oop大作业磨练了我的代码能力还有软件开发能力,让我对软件的开发以及实践的重要性有了更加深刻的了解,所以这是一次非常有意义的课课程实验,做完之后我感受到了很大的成就感。
-
(附录)实验完整代码如下
#include <cstdio>
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <cstring>
#include <utility>
#include <vector>
//宏定义,VIP标识
#define NONEVIP 0
#define NORMAL 1
#define SILVER 2
#define GOLDEN 3
//宏定义,客房型号标识
#define LUXIOUSROOM 0
#define STANDARDROOM 1
#define NORMALROOM 2
using namespace std;
int room_startnumber = 0;//room数组的起始
int room_endnumber = 100;//room数组的终结
int room_count;//room的数量
//VIP暗号,用户答对暗号就是某个VIP用户
string gold_secret = "GOLD";
string silver_secret = "SILVER";
string normal_secret = "NORMAL";
//类型声明
int todayyear=2020;
int todaymonth=12;
int todayday=20;
class Select_control;
class Date;
class Custmor;
class Room;
class People;
//全局函数
static void all_show_all_can_book_room(Date start, Date end);
static bool all_check_room_state(Date start, Date end, int roomnumber);
static void all_delete_room_from_file(int roomnumber, string name);
void query_VIP(int mode)//查询VIP对应的状态
{
if (mode == GOLDEN)
cout << "金卡" << endl;
if (mode == SILVER)
cout << "银卡" << endl;
if (mode == NORMAL)
cout << "普通用户" << endl;
if (mode == NONEVIP)
cout << "不是VIP" << endl;
}
void query_ROOMMODE(int mode)
{
if (mode == LUXIOUSROOM)
cout << "豪华套房" << endl;
if (mode == STANDARDROOM)
cout << "标准客房" << endl;
if (mode == NORMALROOM)
cout << "普通客房" << endl;
}
class VIP_control
{
protected:
double noneVIP;//无会员折扣
double normalVIP;//普通会员折扣
double silverVIP;//银卡会员折扣
double goldenVIP;//金卡会员折扣
public:
VIP_control()//管理员用于初始化,正好构造函数里面
{
cout << "管理员,您正在设置VIP折扣状态" << endl;
cout << "请输入金卡的折扣(以大于0小于1的折扣表示)"<< endl;
while (1)
{
cin >> goldenVIP;
if (goldenVIP > 0 && goldenVIP < 1)
break;
else
cout << "折扣不对,请重新输入" << endl;
}
cout << "请输入银卡的折扣(以大于0小于1的折扣表示)" << endl;
while (1)
{
cin >> silverVIP;
if (silverVIP > 0 && silverVIP < 1)
break;
else
cout << "折扣不对,请重新输入" << endl;
}
cout << "请输入普通会员的折扣(以大于0小于1的折扣表示)" << endl;
while (1)
{
cin >> normalVIP;
if (normalVIP > 0 && normalVIP < 1)
break;
else
cout << "折扣不对,请重新输入" << endl;
}
noneVIP = 1;
}
VIP_control(double a)//用于初始化的构造函数,用于默认初始化
{
goldenVIP = 0.5;
silverVIP = 0.7;
normalVIP = 0.9;
noneVIP = 1;
}
double VIP_zhekou(int MODE)//返回折扣
{
if (MODE == NONEVIP)
return noneVIP;
else if (MODE == NORMAL)
return normalVIP;
else if (MODE == SILVER)
return silverVIP;
else if (MODE == GOLDEN)
return goldenVIP;
}
};
class ROOM_control
{
protected:
int normalroom_bed;//普通客房床位
double normalroom_money;//普通客房money
int standardroom_bed;//标准客房床位
double standardroom_money;//标准客房money
int luxiousroom_bed;//豪华客房床位
double luxiousroom_money;//豪华客房money
public:
ROOM_control()//无参的构造函数用于管理员控制
{
cout << "管理员,您正在设置房间的各项参数" << endl;
cout << "请输入普通客房床位" << endl;
cin >> normalroom_bed;
cout << "请输入普通客房价格" << endl;
cin >> normalroom_money;
cout << "请输入标准客房床位" << endl;
cin >> standardroom_bed;
cout << "请输入标准客房价格" << endl;
cin >> standardroom_money;
cout << "请输入豪华客房床位" << endl;
cin >> luxiousroom_bed;
cout << "请输入豪华客房价格" << endl;
cin >> luxiousroom_money;
cout << "谢谢您,现在已经设置完毕了" << endl;
}
ROOM_control(int i)//用于默认初始化
{
normalroom_bed=4;//普通客房床位
normalroom_money=100;//普通客房money
standardroom_bed=2;//标准客房床位
standardroom_money=200;//标准客房money
luxiousroom_bed=1;//豪华客房床位
luxiousroom_money=100;//豪华客房money
}
double getMoney(int MODE)
{
if (MODE == NORMALROOM)
return normalroom_money;
else if (MODE == STANDARDROOM)
return standardroom_money;
else if (MODE == LUXIOUSROOM)
return luxiousroom_money;
}
int getBed(int MODE)
{
if (MODE == NORMALROOM)
return normalroom_bed;
else if (MODE == STANDARDROOM)
return standardroom_bed;
else if (MODE == LUXIOUSROOM)
return luxiousroom_bed;
}
};
//这里使用过程化的设计,全局函数,用于设置天数的折扣
double Day_control[10] = { 1,1,1,1,1,1,1,1,1,1 };
void Day_control_set()
{
cout << "管理员,您正在设置用户入住天数相关的折扣" << endl;
for (int i = 1; i <= 8; i++)
{
cout << "请输入,用户入住" << i << "天后,享受折扣" << endl;
cin >> Day_control[i];
}
cout << "请输入入住9天及之后,用户的享受折扣" << endl;
cin >> Day_control[9];
}
double Day_control_get(int day)
{
if (day <= 9)
return Day_control[day];
else
return Day_control[9];
}
class Date
{
public:
Date()//默认日期为今天(今天默认为(2020年12月20号(写代码的这一天))
{
_year = todayyear;
_month =todaymonth;
_day = todayday;
}
Date(int year, int month, int day)//构造函数
{
if (year > 0 && month > 0 && month < 13 && day>0 && day <= GetMonthDay(year, month))
{
_year = year;
_month = month;
_day = day;
}
else
{
cout << "error!" << endl;
}
}
int getyear()
{
return _year;
}
int getmonth()
{
return _month;
}
int getday()
{
return _day;
}
~Date()//析构函数
{}
Date(const Date& d)//拷贝构造函数
{
_year = d._year;
_month = d._month;
_day = d._day;
}
Date& operator=(const Date& d)//赋值运算符重载
{
if (this != &d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
return *this;
}
//运算符重载== != > >= < <=
bool operator==(const Date& d) const
{
return _year == d._year &&
_month == d._month &&
_day == d._day;
}
bool operator!=(const Date& d) const
{
return !(*this == d);
}
bool operator>(const Date& d)
{
return ((_year > d._year) || \
(_year == d._year && _month > d._month) || \
(_year == d._year && _month == d._month && _day > d._day));
}
bool operator>=(const Date& d)
{
return (*this > d) || (*this == d);
}
bool operator<(const Date& d)
{
return !(*this >= d);
}
bool operator<=(const Date& d)
{
return !(*this > d);
}
//前置++、--后置++、--
Date& operator++()
{
*this += 1;
return *this;
}
Date operator++(int)
{
Date temp = (*this);
*this += 1;
return temp;
}
Date& operator--()
{
*this -= 1;
return *this;
}
Date operator--(int)
{
Date temp = (*this);
*this -= 1;
return temp;
}
//计算一年的天数
int GetMonthDay(int year, int month)
{
static int GetMonthDay[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//如果是平年,2月是29天
if ((month == 2) && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)))
{
return 29;
}
return GetMonthDay[month];
}
//日期和天数的加减
Date operator+(int day)
{
Date temp(*this);
temp += day;
return temp;
}
Date operator-(int day)
{
Date temp(*this);
temp -= day;
return temp;
}
Date& operator+=(int day)
{
if (day < 0)
{
return *this -= -day;
}
_day += day;
while (_day > GetMonthDay(_year, _month))
{
_day -= GetMonthDay(_year, _month);
_month++;
if (_month > 12)
{
_year++;
_month = 1;
}
}
return *this;
}
Date& operator -= (int day)
{
if (day < 0)
{
return *this += (-day);
}
_day -= day;
while (_day <= 0)
{
_month--;
if (_month == 0)
{
_year--;
_month = 12;
}
_day += GetMonthDay(_year, _month);
}
return *this;
}
//日期-日期
int operator-(const Date& d)
{
int flag = 1;
int day = 0;
Date max = *this;
Date min = d;
if (*this < d)
{
max = d;
min = *this;
flag = -1;
}
//小的日期一直++,加到和大的日期一样时,加了多少天就差多少次
while (min != max)
{
min++;
day++;
}
return day * flag;
}
void display()
{
cout << _year << "--" << _month << "--" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
class Room {
private:
bool islived;//当前状态是否有人入住
int roomtype;//房间的等级
int roomnumber;//房间号,与数组号码相一致
int booked_sum;//已经预定该房间的人数
string living_customer_name;//当前入住的房客的名字
public:
Room()//无参数构造函数,用于初始化
{
islived = false;
roomtype = 2;
roomnumber = 0;
booked_sum = 0;
living_customer_name = "";
}
void setroomnumber(int i)
{
roomnumber = i;
}
void setlived(bool islived)//用于设置房间是否已经入住
{
this->islived = islived;
}
void setroomtype(int roomtype)
{
this->roomtype = roomtype;
}
void setbooked_sum(int booked_sum)
{
this->booked_sum = booked_sum;
}
void setliving_customer_name(string name)
{
living_customer_name = name;
}
int getroomtype()//得到房间的类型
{
return roomtype;
}
string getname()
{
return living_customer_name;
}
bool check_room_state(Date start, Date end);//check_room_state用于检查目标房间的状态(给定时间,是否能被预定呢)
void display_to_custmor()
{
cout << "具体信息如下:" << endl;
cout << "房间号" << roomnumber << endl;
query_ROOMMODE(roomtype);
}
void display_to_admin()
{
cout << "具体信息如下:" << endl;
cout << "房间号" << roomnumber << endl;
query_ROOMMODE(roomtype);
if (islived)
{
cout << "已经入住,房客的名字是" << endl;
cout << living_customer_name << endl;
}
else {
cout << "没有人入住" << endl;
}
}
};
VIP_control* all_vip;
ROOM_control* all_room;
Date Today;
Room room[2000];
//基类,用于注册(既然每次注册都要输入用户名和密码,那就索性构造基类的时候就输好了)
class People {
protected:
string name;
string secret;
public:
People(string _name,string _secret):name(_name),secret(_secret)
{
cout << "登录成功" << endl;
}//构造函数2,用于登录
People()//此构造函数用于注册
{
string tmpname;
string tmpsecret;
string tmpcorrect;//第二次输入
cout << "您正在注册,请输入用户名:" << endl;
cin >> tmpname;
while (1)
{
cout << "请输入您要设置的密码" << endl;
cin >> tmpsecret;
cout << "请您确认密码" << endl;
cin >> tmpcorrect;
if (tmpcorrect != tmpsecret)
{
cout << "前后密码不一致,重新输入" << endl;
}
else
break;
}
this->name = tmpname;
this->secret = tmpsecret;
}
virtual void display()
{
cout << "用户名:" << name << endl;
cout << "密码:" << secret << endl;
}
string getname()
{
return name;
}
};
class Custmor :public People {
public:
Custmor(string name, string secret, int Mode, int roomnumber):People(name,secret)
{
this->roomnumber = roomnumber;
this->VIP_MODE = Mode;
is_ever_booked = 0;
}
Custmor():People() //继承自people,注册
{
is_ever_booked = 0;
roomnumber = 0;//默认不会预定房间(0是无效的房间号)
cout << "请输入VIP暗号,答对暗号你就是VIP用户" << endl;
string x;
cin >> x;
if (x == gold_secret)
{
cout << "金卡用户" << endl;
VIP_MODE = GOLDEN;
}
else if (x == silver_secret)
{
cout << "银卡用户" << endl;
VIP_MODE = SILVER;
}
else if (x == normal_secret)
{
cout << "普通vip" << endl;
VIP_MODE = NORMAL;
}
else
{
cout << "不是VIP" << endl;
VIP_MODE = 0;
}
}
void setbooked(int i)
{
is_ever_booked = i;
}
void display();
void setVIP_MODE(int VIP)
{
VIP_MODE = VIP;
}
void remark()
{
if (is_ever_booked)
{
cout << "输入评论:" << endl;
string temp;
cin >> temp;
ofstream putfile("remark.txt", ios::app);
if (!putfile)
cout << "文件损坏" << endl;
else
{
putfile << temp << endl;
}
}
else
{
cout << "您还未入住,不能评论" << endl;
}
}
void book_room(string name, int MODE, int roomnumber, Date start, Date end);
//预定客房,肯定要用到select类
void custmor_book_room_io()//用于与用户交互,会调用上面的book_room函数
{
while (1)
{
int _year, _month, _day;
cout << "请输入您预定客房的起始住宿年月日" << endl;
cout << "输入年" << endl;
cin >> _year;
cout << "输入月" << endl;
cin >> _month;
cout << "输入日" << endl;
cin >> _day;
Date start(_year, _month, _day);
cout << "请输入您预定客房的结束住宿年月日" << endl;
cout << "输入年" << endl;
cin >> _year;
cout << "输入月" << endl;
cin >> _month;
cout << "输入日" << endl;
cin >> _day;
Date end(_year, _month, _day);
all_show_all_can_book_room(start, end);
int _room;
cout << "输入房间号" << endl;
cin >> _room;
bool istrue = room[_room].check_room_state(start, end);
//需要检查状态
if (end > start && (istrue))
{
book_room(name, VIP_MODE, _room, start, end);
roomnumber = _room;//订好的房间号
is_ever_booked = 1;
cout << "预定成功" << endl;
break;
}
else
{
cout << "您输入的日期有错,或者该房间在此时间段内已经被预定" << endl;
cout << "重新输入" << endl;
}
}
}
void canceled_io()//用于与用户交互,取消订单
{
if (roomnumber == 0)
{
cout << "你还没预定房间" << endl;
}
else
{
cout << "正在取消您的预定" << endl;
cancel_booked(roomnumber);
cout << "操作结束" << endl;
}
}
void cancel_booked(int roomnumber);
void write_custmor_to_file()
{
cout << "现在将顾客数据写入文件" << endl;
ofstream outfile("custmor.txt", ios::app);
if (!outfile)
{
cout << "打开文件失败" << endl;
}
else
{
outfile << name << " " << secret << " " << VIP_MODE << " " << roomnumber <<" "<<is_ever_booked<<endl;
cout << "已经成功写入文件" << endl;
}
outfile.close();
}
void service()
{
cout << "\n你已经登录成功,下面选择您所需要的服务" << endl;
cout << "如果你想要预定房间,请按1" << endl;
cout << "如果你要取消预定的房间,请输入2" << endl;
cout << "如果你想要显示当前用户信息,请输入3" << endl;
cout << "如果您想要评论那么请按4" << endl;
cout << "如果你想要退出,请按5" << endl;
while (1)
{
int x;
cin >> x;
if (x == 1)
{
custmor_book_room_io();
}
if (x == 2)
{
canceled_io();
}
if (x == 3)
{
display();
}
if (x == 4)
{
remark();
}
if (x == 5)
{
break;
}
}
}
protected:
int VIP_MODE;//VIP情况,默认为普通用户;
int roomnumber;
int is_ever_booked;//退房时设置此参数为1
};
class Select//用于记录预定记录
{
protected:
int roomnumber;//入住的房间号
string name;//预定的人的名字
int Mode;//会员记录
Date startdate;//预定起始时间
Date enddate;//预定结束时间
double money;//钱
public:
//构造函数
double calculate_money();//算钱用的
Select(string name,int MODE,int roomnumber,Date start,Date end):
startdate(start),enddate(end)
{
this->roomnumber = roomnumber;
this->Mode = MODE;
this->name = name;
money = calculate_money();
}
void setmoney(double money)
{
this->money = money;
}
double getmoney()
{
return money;
}
void display()
{
cout << "用户名:" << name << endl;
cout << "VIP模式标识:" << Mode << endl;
cout << "预定的房间号:" << roomnumber << endl;
cout << "起始入住时间" << endl;
startdate.display();
cout << "结束入住时间" << endl;
enddate.display();
}
void addmoney(double money)
{
this->money += money;
}
void write_to_file()
{
ofstream outfile("Select.txt", ios::app);
if (!outfile)
{
cout << "文件损毁,此系统需要维修" << endl;
}
else
{
outfile << roomnumber << " " << name << " " << Mode<< " " << startdate.getyear() << " " <<
startdate.getmonth() << " " << startdate.getday() << " " << enddate.getyear() << " " <<
enddate.getmonth() << " " << enddate.getday() <<" "<<money<< endl;
}
outfile.close();
}
Date getstart()
{
return startdate;
}
Date getend()
{
return enddate;
}
int getmode()
{
return Mode;
}
string getname()
{
return name;
}
int getroomnumber()
{
return roomnumber;
}
};
//用于记录所有用户的入住的vector
vector<Select> SC[2000];// SC的vector将记录所有的选择房间状态;
//下面实现用到select数组的方法
void Custmor::book_room(string name, int MODE, int roomnumber, Date start, Date end)
{
int size = SC[roomnumber].size();
Select temp = Select(name, MODE, roomnumber,start,end);
SC[roomnumber].push_back(temp);
SC[roomnumber][size].write_to_file();
}
static void all_show_all_can_book_room(Date start, Date end)
{
for (int i = room_startnumber; i <= room_endnumber; i++)
{
if (room[i].check_room_state(start, end))
{
cout << "房间号是" << i << "在这个时间段可以被预定" << endl;
room[i].display_to_custmor();
}
}
}
static bool all_check_room_state(Date start, Date end, int roomnumber)
{
int temp_room_number = roomnumber;
for (int i = 0; i < SC[roomnumber].size(); i++)
{
if ((SC[roomnumber][i].getstart() > end || SC[roomnumber][i].getend() < start))
{
continue;
}
else
{
return false;
}
}
return true;
}
static void all_delete_room_from_file(int roomnumber, string name)
{
ofstream outfile("Select.txt", ios::out);//清空文件
outfile.close();
for (int i = room_startnumber; i <= room_endnumber; i++)
{
for (int j = 0; j < SC[i].size(); i++)
{
SC[i][j].write_to_file();
}
}
}
bool Room::check_room_state(Date start, Date end)
{
return all_check_room_state(start,end,this->roomnumber);
}
double Select::calculate_money()//算预定之后要花的钱
{
int roomtype = room[roomnumber].getroomtype();
double room_money = all_room->getMoney(roomtype);
double Date_money_zhekou = Day_control_get(enddate - startdate);
double VIP_zhekou = all_vip->VIP_zhekou(Mode);
int days = enddate - startdate;
double money = room_money * days * VIP_zhekou * Date_money_zhekou;
return money;
}
void Custmor::cancel_booked(int roomnumber)
{
for (int i = 0; i < SC[roomnumber].size(); i++)
{
if (SC[roomnumber][i].getname() == name)
{
if (Today - SC[roomnumber][i].getstart() > 1)
{
//前一天之前可以退房//注意当前时间需要全局变量
SC[roomnumber].erase(SC[roomnumber].begin() + i);
//SC[roomnumber].pop_back();//在内存中删除
all_delete_room_from_file(roomnumber, name);//在外存中删除
cout << "删除预定订单成功" << endl;
break;
}
else
{
cout << "这个房间现在不能退了,太晚了" << endl;
}
}
}
}
Select all_choose_Select_element(int roomnumber, string name)//select语句
{
for (int i = 0; i < SC[roomnumber].size(); i++)
{
if (roomnumber == SC[roomnumber][i].getroomnumber() && name == SC[roomnumber][i].getname())
{
return SC[roomnumber][i];
}
}
}
void init()//默认初始化
{
for (int i = room_startnumber; i <= room_endnumber; i++)
{
room[i].setroomnumber(i);//把房间号给初始化了
}
ifstream infile("Select.txt", ios::in);
if (!infile)
cout << "文件系统损坏" << endl;
int roomnumber, Mode, startyear, startmonth, startday, endyear, endmonth, endday;
double money;
string name;
while (infile >> roomnumber >> name >> Mode >> startyear >> startmonth >> startday >> endyear >> endmonth >> endday>>money)
{
Select S(name, Mode,roomnumber, Date(startyear, startmonth, startday), Date(endyear, endmonth, endday));
S.setmoney(money);
SC[roomnumber].push_back(S);
}
infile.close();
cout << "在默认初始化之中,豪华房间400元/天,标准套房200元/天,普通套房100元/天" << endl;
cout << "在默认初始化之中,没有设置天数折扣" << endl;
cout << "在默认初始化中,我们认为金卡5折,银卡7折,普通会员9折,不是会员不打折" << endl;
}
void Custmor::display()
{
cout << "用户名:\n" << name << endl;
cout << "密码:\n" << secret << endl;
cout << "VIP用户情况:" << endl;
query_VIP(VIP_MODE);
cout << "您的订单情况如下所示:\n" << endl;
if (roomnumber == 0)
{
cout << "没预定客房" << endl;
}
else
{
cout << "预定的客房是" << roomnumber << endl;
Select SC_element = all_choose_Select_element(roomnumber, name);//在内存里面选出来
double all_money = SC_element.calculate_money();
cout << "你定的客房预期花钱是" << all_money << endl;
}
}
//基类(用于扩展管理员和前台)
class Base_admin {
public:
//查询客房的情况
void select_all_room_information()
{
for (int i = room_startnumber; i <= room_endnumber; ++i)
{
room[i].display_to_admin();
}
}
void select_all_booked_information()//查询预定情况
{
cout << "所有预定订单如下" << endl;
for (int i = room_startnumber; i <= room_endnumber; i++)
{
for (int j = 0; j < SC[i].size(); i++)
{
cout << "----------------------------分割线—————————————————————" << endl;
SC[i][j].display();
}
}
}
void select_all_remark()//显示所有评论
{
cout << "所有评论如下" << endl;
string temp;
ifstream inputfile("remark.txt", ios::in);
while (inputfile >> temp)
cout << temp<<endl;
inputfile.close();
}
};
class Reception :public People,public Base_admin
{
public:
//注册
//登记
//退房+结账
//换房
void write_to_file()//将账号密码写入文件
{
ofstream outputfile("reception.txt", ios::app);
if (!outputfile)
cout << "文件系统损毁" << endl;
else
{
outputfile << name << " " << secret << endl;
}
outputfile.close();
}
Reception(string name, string secret) :People(name, secret)//此构造函数用于登录
{
}
Reception() :People(),Base_admin()
{
write_to_file();
cout << "注册成功" << endl;
//此构造函数用于注册;
}
void register_room(int roomnumber, string name)
{
room[roomnumber].setlived(true);
room[roomnumber].setliving_customer_name(name);
cout << "前台手续已经办理成功" << endl;
}
void reject_room(int roomnumber)//退房前订单应该还在文件里面,只有退房的时候才把订单消掉
{
string name = room[roomnumber].getname();
for (int i = 0; i < SC[roomnumber].size(); i++)
{
if (SC[roomnumber][i].getname() == name)
{
cout << "应该付钱" << SC[roomnumber][i].getmoney()<< endl;
SC[roomnumber].erase(SC[roomnumber].begin() + i);
//在内存中删除
all_delete_room_from_file(roomnumber, name);//在外存中删除
cout << "成功退房" << endl;
string real_name_in_file, real_secret_in_file;
int real_mode_in_file;
int real_room_in_file;
//下面进行更改用户状态
}
}
}
//换房的时候最麻烦,要考虑多一点
void change_room(int oldnumber,int newnumber,Date endday)//换房的时候先退房,然后重新注册
{
int roomnumber = oldnumber;
int Mode = 0;
cout << "您现在正在切换房间" << endl;
string name = room[roomnumber].getname();
cout << "您正在为" << name << "办理切换房间服务" << endl;
double money = 0;//切换房间的时候要先记录原来的价格。
for (int i = 0; i < SC[roomnumber].size(); i++)
{
if (SC[roomnumber][i].getname() == name)
{
money = SC[roomnumber][i].getmoney();
Mode = SC[roomnumber][i].getmode();
SC[roomnumber].erase(SC[roomnumber].begin() + i);
//在内存中删除
all_delete_room_from_file(roomnumber, name);//在外存中删除
cout << "成功退房" << endl;
break;
}
}
register_room(newnumber, name);
//下面要刷新内存和外存的订单状态.
Select S(name,Mode,newnumber,Today,endday);
S.addmoney(money);//把原来的钱要加上
cout << "正在写入新的订单和新的房间状态" << endl;
SC[newnumber].push_back(S);
SC[newnumber][SC[newnumber].size() - 1].write_to_file();
cout << "换房成功" << endl;
}
void service()
{
while (1)
{
cout << "前台,前选择您的服务" << endl;
cout << "想要查询所有房间的状态,请按1" << endl;
cout << "想要查询所有订单的状态,请按2" << endl;
cout << "想要办理入住登记,请按3" << endl;
cout << "想要办理退房结账,请按4" << endl;
cout << "想要换房服务,请按5" << endl;
cout << "输出所有评论,那就按6" << endl;
cout << "按7键退出" << endl;
int x;
cin >> x;
if (x == 1)
{
select_all_room_information();
}
if (x == 2)
{
select_all_booked_information();
}
if (x == 3)
{
cout << "正在办理入住" << endl;
cout << "输入房间号" << endl;
int roomnumber;
string name;
cin >> roomnumber ;
cout << "输入客人的名字" << endl;
cin >> name;
register_room(roomnumber, name);
}
if (x == 4)
{
cout << "退房服务,输入要退房的房号" << endl;
int roomnumber;
cin >> roomnumber;
reject_room(roomnumber);
}
if (x == 5)
{
cout << "正在换房" << endl;
cout << "请注意,换房时,您将不能享受之前的优惠政策,将重新计算您的最终结账" << endl;
cout << "输入原来的房间号" << endl;
int oldnumber, newnumber;
cin >> oldnumber;
cout << "输入后来的房间号" << endl;
cin >> newnumber;
cout << "从今天起,请输入这位客人想要换房的结束日期" << endl;
int year, month, day;
cout << "输入年" << endl;
cin >> year;
cout << "输入月" << endl;
cin >> month;
cout << "输入日" << endl;
cin >> day;
Date D(year, month, day);
change_room(oldnumber, newnumber, D);
}
if (x == 6)
{
select_all_remark();
}
if (x == 7)
break;
}
}
};
string admin_name = "sa";
string admin_secret = "123456";
class Admin :public Base_admin
{
public:
Admin():Base_admin() {};
void Denglu()//登录
{
while (1)
{
string name;
string secret;
cout << "正在登录管理员账号" << endl;
cout << "输入用户名" << endl;
cin >> name;
cout << "输入密码" << endl;
cin >> secret;
if (name == admin_name && secret == admin_secret)
{
cout << "登录成功" << endl;
break;
}
else
{
cout << "登陆失败" << endl;
}
}
}
void Register_Reception()
{
cout << "管理员,您现在进入的是前台注册环节" << endl;
Reception R;//构造函数,用于注册新前台
}
void set_VIP()
{
cout << "现在进入VIP折扣管理程序" << endl;
all_vip = new VIP_control();
}
void set_ROOM()
{
cout << "现在进入房间管理程序" << endl;
all_room = new ROOM_control();
}
void set_DAY()
{
cout << "现在进入入住天数优惠的管理程序" << endl;
Day_control_set();
}
void set_Room_all()
{
cout << "请输入房间号" << endl;
int number;
cin >> number;
cout << "请输入房间类型,豪华套房输入0,标准套房输入1,普通房间输入2" << endl;
int tmp;
cin >> tmp;
room[number].setroomtype(tmp);
}
void setdate()
{
cout << "输入今天的年月日" << endl;
cout << "输入年" << endl;
cin >> todayyear;
cout << "输入月" << endl;
cin >> todaymonth;
cout << "输入日" << endl;
cin >> todayday;
cout << "success" << endl;
}
void service()
{
while (1)
{
cout << "如果想要查询所有房间情况,请按1" << endl;
cout << "如果想要查询所有订单情况,请按2" << endl;
cout << "如果想要注册前台,请按3" << endl;
cout << "如果想要设置VIP会员政策,请按4" << endl;
cout << "如果想要设置房间的价格,请按5" << endl;
cout << "如果想要设置具体房间的类型,请按6" << endl;
cout << "按7输出所有评论" << endl;
cout << "按8设置今天的日期" << endl;
cout << "按9退出" << endl;
int tmp;
cin >> tmp;
if (tmp == 1)
select_all_room_information();
if (tmp == 2)
select_all_booked_information();
if (tmp == 3)
Register_Reception();
if (tmp == 4)
set_VIP();
if (tmp == 5)
set_ROOM();
if (tmp == 6)
set_Room_all();
if (tmp == 7)
select_all_remark();
if (tmp == 8)
setdate();
if (tmp == 9)
break;
}
}
};
class HotelSystem_Service
{
public:
void Custmor_Service()
{
cout << "您现在的身份是:顾客" << endl;
cout << "如果想要注册并且登录酒店管理系统,请输入1" << endl;
cout << "如果想要直接登录酒店管理系统,请输入2" << endl;
int tmp;
cin >> tmp;
if (tmp == 1)
{
Custmor newcustmor;
cout << "注册成功" << endl;
newcustmor.write_custmor_to_file();
newcustmor.service();
}
else if (tmp == 2)
{
string real_name_in_file;
string real_secret_in_file;
int real_mode_in_file;
int real_room_in_file;
int is_everbooked=0;
cout << "请输入用户名" << endl;
string username;
cin >> username;
cout << "请输入密码" << endl;
string secret;
cin >> secret;
ifstream infile("custmor.txt", ios::in);
if (!infile)
{
cout << "文件管理系统有误,现在系统不能使用" << endl;
}
else
{
int flag = 0;
while (infile >> real_name_in_file >> real_secret_in_file >> real_mode_in_file >> real_room_in_file >> is_everbooked)
{
if (real_name_in_file == username && real_secret_in_file == secret)
{
flag = 1;
Custmor newcustmor(real_name_in_file, real_secret_in_file, real_mode_in_file, real_room_in_file);
newcustmor.setbooked(is_everbooked);
newcustmor.service();
break;
}
}
if (!flag)
{
cout << "用户名和密码错误" << endl;
}
}
infile.close();
}
}
void Admin_service()
{
cout << "您现在的身份是管理员" << endl;
Admin A;
A.Denglu();
A.service();
}
void Reception_service()
{
cout << "您现在的身份是前台" << endl;
cout << "请先登录" << endl;
string name;
string secret;
int flag = 0;
ifstream inputfile("Reception.txt", ios::in);
cout << "请输入前台用户名" << endl;
cin >> name;
cout << "请输入密码" << endl;
cin >> secret;
string realname, realsecret;
while (inputfile >> realname >> realsecret)
{
if (name == realname && secret == realsecret)
{
cout << "登录成功" << endl;
flag = 1;
break;
}
}
if (flag)
{
Reception R(name, secret);
cout << "开始前台服务" << endl;
R.service();
}
else
{
cout << "登录失败" << endl;
}
}
};
//管理员需要设置政策
int main()
{
//下面用于默认初始化
VIP_control vv(1);
all_vip = &vv;
ROOM_control rr(1);
all_room = &rr;
cout << "欢迎来到酒店信息管理系统,这是曹王欣,学号18030100167开发的" << endl;
init();
cout << "------------默认初始化已经完成------------" << endl;
HotelSystem_Service H;
while (1)
{
cout << "如果是管理员,请输入1" << endl;
cout << "如果是前台,输入2" << endl;
cout << "如果是顾客请输入3" << endl;
cout << "按4退出" << endl;
int x;
cin >> x;
if (x == 1)
{
H.Admin_service();
}
if (x == 2)
{
H.Reception_service();
}
if (x == 3)
{
H.Custmor_Service();
}
}
}