基于C++的酒店管理系统的设计与实现


基于C++的酒店管理系统的设计与实现

摘要:在如今这个快速发展的新时代,碎片化和多元化的管理方式层出不穷,人们消费水平的提高导致酒店、餐饮等服务行业管理的需求大大增加。而酒店作为服务行业的龙头,首当其冲地受到了影响,而人工管理往往存在各种各样的纰漏,本项目正好是解决了这个问题。该项目是基于C++程序设计语言开发而成的一个酒店管理系统,其具有酒店管理员登录、录入客人入住信息、查询客人入住情况、修改客房信息等功能。该系统可以帮助酒店管理者高效地查询、修改酒店信息,减轻了酒店管理者的工作负担,提高管理者的工作效率。

关键词:酒店管理系统 信息管理 高效 C++程序设计语言

引言

随着21世纪互联网行业的迅速发展,如今已经进入了一个信息大爆炸的时代,人们的生活已经离不开电子信息科技。传统的人工管理服务已经跟不上电子智能管理的步伐了,在酒店服务行业也应当有此创新,因此,本文设计开发一个酒店管理系统。

1 技术介绍

1.1开发语言

C++程序设计语言是在C语言基础上开发的一门面向对象的编程语言,它兼容C语言,具有灵活高效、可移植性好等优点,此外,C++支持类、封装、继承、多态等特性,并包括含标准模板库(STL)与多种设计模式。

1.2开发技术

此系统主要运用到了链表、指针、类、函数以及文件等方法技术。在实现注册、注册功能的时候使用了函数、指针及链表遍历等技术来实现管理员的注册和登录安全,注册登录方面实现对密码的加密。该系统使用类和文件不断读写实现对客人信息的储存、修改和重复使用。

1.3开发工具

系统开发采用Dev-C++工具。Dev-C++ 使用MingW64/TDM-GCC编译器,遵循C++ 11标准,同时兼容C++98标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,适合初学者与编程高手的不同需求,是学习C或C++的首选开发工具。

2 需求分析

2.1项目概述

本项目主要目标是帮助酒店管理者更高效、有序地管理酒店信息而开发的一个酒店服务管理项目。首先管理员需要注册一个管理员账号,然后可以使用管理员账号登陆管理员控制界面;然后管理员可以添加酒店里所有顾客的住房信息,比如入住时间、入住期限、入住押金、房间号等;管理员输入完信息后可以查询输入信息是否有误并且可以进行实时修改;同时,管理员还可以浏览所有住房信息、所有客人信息,进行筛选客房等。

2.2主要功能分析

系统的主要功能如下:

  1. 管理员注册:管理员账号注册,管理员输入用户名、密码、确认密码来进行注册操作。如果两次输入不一致,系统会提示两次密码不一致,并且询问是否重新注册,是则回到注册界面,反之,返回欢迎界面。若注册的账号再一次被管理员注册,系统会报错,并提示“用户名存在,请重新注册”,并询问是否继续,若是则回到注册界面,反之,回到欢迎界面
  2. 管理员登录:管理员注册完信息后可进行登陆操作,输入自己注册成功的账号、密码信息,等待一会儿,会自动跳转到管理系统界面。
  3. 客人入住信息录入:管理员在管理系统界面里选择客人信息入住选项,可以进行多个客人住房信息的录入。该操作使用文件保存多个客人的住房信息
  4. 显示楼层客房信息:管理员可以通过这个功能查看各个楼层的已被客人选中的房间,然后知道哪些楼层有空房,及时告知要入住酒店的客人。
  5. 查询客人入住情况:对所有客人入住信息的查询功能,前台客人问询时或者有已入住客人查询自己的信息时,管理员可及时回答并告知。
  6. 修改房间押金:管理员可随时对客人入住的押金金额进行修改。
  7. 修改客人信息:当有管理员录入信息时输入错误时可及时对错误的客人信息进行修改操作。或者客人信息告知错误也可及时进行修改。
  8. 统计收入:酒店实时统计客人住房所用费用。
  9. 退出程序:使用完程序后安全退出。

2.3基本流程分析

系统的功能包括客人信息录入、查询与修改信息等。具体功能流程如图2-1所示:

图2-1系统流程图
### 3 系统设计

3.1类的设计

系统采用类的设计,根据类创建出具体的对象并投入使用。就比如在此系统中就创建了Customer顾客类,在Customer顾客类中定义成员函数,实现运算符的重载,使程序面向对象。本系统运用类提供了模型化、信息隐藏和可重用性的好处。具体代码如下:

class Customer {
    friend ostream &operator<<(ostream &os,Customer &cu);
    private:
    Menu myMenu;
    string name;    //客人姓名
    int date;      //入住时间
int day;      //入住期限

int money;     //入住押金
int everydaymoney; //每日租金

	Room room;  //客房信息
    public:
    Customer();
    Customer(string na, int dat, int da, int mo, int emon, int idn, int deg, int ty, int fl, int nu);
	string getname() {
           return name;
       }
    void setname(string na) {
        name=na;
    }
    int getdate() {
        return date;
    }
    void setdate(int dat) {
        date=dat;
    }
    int getday() {
        return day;
    }
    void setday(int da) {
        day=da;
    }
    int getmoney() {
        return money;
    }
    void setmoney(int mon) {
        money=mon;
    }
    int geteverydaymoney() {
        return everydaymoney;
    }
    void seteverdaymoney(int emon){
        everydaymoney=emon;
    }
    Room setroom(){
        return room;
    }
    void getroom(Room ro) {
        room=ro;
    }
    void run();
    void input();    //创建表单
    int readIn();    //文件读入
    void alter();    //修改信息
    void findByfloor(); //按楼层查找
    void changemoney(); //修改押金
    void show();     //显示客户入住情况
    void print();    //统计并显示收入
    void rank();     //客房类型入住量排 
}  

3.2文件存储设计

本系统采用了文件存储设计,实现了信息的动态存储,使此系统可以实现对存储信息的修改和查看。本系统采用二进制文本使客人入住信息保存到本地硬盘customer.dat文件中。其在系统界面可以对客人入住信息进行查询和修改,但在本地硬盘本中只显示一堆乱码,这一设计大大增强系统的保密性,保护客人的资料信息不易被窥视。文件保存具体内容如图3-1所示:

图3-1 二进制保存文件转换为文本文件格式错误界面
**应保存的内容信息如图3-2所示:**

图3-2 二进制文本文件保存的真实信息界面
//具体代码如下:
ofstream os("customer.txt",ios_base::out|ios_base::binary);
//创建、打开文件
for(n=0; n<room.number; n++) {
    os.write( reinterpret_cast<char*>(&(customer[n])),sizeof(Customer) );  //导出文件
}
os.close();  //关闭文件

3.3 链表设计

本系统在用户注册功能上使用链表设计,遍历链表寻找已注册的账号,实现重复注册账号时系统报错的功能。并且在管理员登录时遍历链表查找已注册的账号信息,使系统只允许已注册的账号登陆,增强了管理员账号的安全性。系统运行后将文件中的所有客人信息读取到链表中,具体代码如下:

//从文件中读取用户信息,返回一个表头地址
pUser readUserFile() {
    FILE *fp;    //文件指针
    int n=0;//记录链表 的结点数
    pUser head=NULL;//定义头指针
    pUser p2,p,pre;
    fp=fopen("User.txt","a+");
    //以只读的方式打开文件
    if(fp==NULL) {
        cout<<"cannot open file\n";
    } 
    else {
        while(!feof(fp)) {
            //判断文件位置标志是否移动到文件末尾
            n++;
            p=(pUser)malloc(sizeof(struct User)); //向内存申请一段空间
            fread(p,sizeof(struct User),1,fp); //将fp所指向的文件中的内容赋给p
            if(n==1) {
                head=p;
                p2=p;
            }
            else {
                //创建链表
                pre=p2;
                p2->next=p;
                p2=p;
            }
        }
        p2->next=NULL;
    }
    if(n<=2)
        head->next=NULL;
    else
        pre->next=NULL;
    fclose(fp);   //关闭文件
    return head;  //返回头指针
}

4 系统实现

4.1密码加密功能的实现

本系统在管理员输入密码使采用密码加密的方式输入密码,管理员注册、登录的安全性得以保障。此功能的实现如图4-1,4-2所示:

图4-1 管理员注册界面
![](D:\blog\shierjinghuang\source\_posts\基于C++的酒店管理系统的设计与实现\管理员登录界面.png)
图4-2 管理员登录界面
具体代码如下:
//隐藏密码
char *HidePassword() {
    har password[18];//密码
    char *p;//指向密码的指针
    int i=0;//记录密码位数
    char t;//输入密码
    for(;;) {
        //此处为输入密码不回显操作
        t=getch();    //输入k
        if(t=='\r') {
            //如果输入k为回车,则跳出循环
            break;
        }else if(t=='\b') {
            //如果输入k为删除键
            if(i>0) {   
                //如若密码还没完全删除
                cout<<"\b";
                cout<<" ";
                cout<<"\b";
                i--;
            }
        } else {
            //如果输入的k既不是删除键,也不是回车键
            password[i]=t;  //把k的值赋给_password[i];
            cout<<"*";
            //输出*号,保护用户隐私
            i++;
            //密码位数加1
        }
    }
    password[i]='\0';//在数组末端加一个结束符
    p=password;//让p指向该数组
    return p; //返回一个指向密码的指针
} 

4.2客人入住信息录入功能实现

本系统使用文件存储的方式来实现对客人入住信息的动态存储,本系统接下来的一系列查询、修改信息围绕此功能展开。此功能的实现如图4-3所示:

图4-3 客人入住信息录入功能界面
具体代码如下:
Status ruzhu(){
    //入住操作 
    findprice();
    printf("请输入需要预定的房间编号:\n");
    parton keren;
    if(scanf("%d", &keren.guenum)!=1){
        printf("输入错误!\n已退出!\n");
        exit(0);
    }
    int i;
    i=HashIndex(keren.guenum);
    //哈希地址 
    if(!hash[i].guenum){
        printf("查无此房!!\n");
        return;
    }
    if(hash[i].shifouruzhu){
        printf("此房间已经有人!\n");
        return;
    }
    int n;
    printf("请输入几人入住:\n");
    if(scanf("%d", &n)!=1){
        printf("输入错误!\n已退出!\n");
        return;
    }
    if(hash[i].maxnum<n){
        //超过入住人数上限
        printf("超过人数上限!!\n请重新输入:\n");
        return;
    }
    printf("请输入客人姓名:\n");
    scanf("%s", keren.name);
    printf("请输入客人身份证号:\n");
    scanf("%s", keren.idnum);
    printf("请输入客人电话号码:\n");
    scanf("%s", keren.phone);
    printf("请输入客人性别:\n");
    scanf("%s", keren.sex);
    printf("请输入入住时间:(年月日),中间用空格隔开\n");
    scanf("%d%d%d", &keren.time.year,&keren.time.mon,&keren.time.day);
    printf("请输入入住时长:\n");
    scanf("%d", &keren.timelong);
    time_t rawtime;//获取时间标记 
    keren.s=time(&rawtime);
    hash1[i]=keren;//入住 
    hash[i].shifouruzhu=1;
    //客房信息改为有人入住 
    hash[i].num=n;
    //入住人数 
    writetotxt();
    //写入修改后的客人和客房信息 
    write1totxt(); 
}

4.3 修改客房信息功能实现

本系统可实现对客房信息的修改。此功能的实现如图4-4所示 :

图4-4 修改客房信息功能界面
修改完信息后返回酒店管理系统界面后浏览所有住房信息,所有住房信息被更新,完成修改。修改后的住房信息如图4-5所示:
图4-5 浏览所有住房信息功能界面
### 5 总结

本项目基本实现了酒店管理员对酒店的管理,本项目的优势在于对客人入住信息的搜集比较完整,甚至细化到对其中个别信息,比如租金等的修改。还有此系统对于用户的信息的安全性也有足够的保障,管理员能够初步对酒店进行一个信息管理。

但是本系统也存在着一些不足之处,可在以下方面进行改进完善:

  1. 可增加前台用户端,实现双端操作,客人注册账号输入信息后管理员后台自动保存客人住房信息,完全代替人工手动输入,使信息透明化,双端都可通过此系统查看信息。但前台用户端没有修改信息的权限,保证管理员对酒店信息的控制权限。
  2. 计费功能的完善:计费功能方面可以加入按时计费功能,让此系统更加准确地实时计费。
  3. 退房功能:直接在前台用户端加入退房功能,实现用户入住信息的实时更新。

参考文献:

[1] 曹晶.C++语言课程设计的实践[J].机械职业教育,2001,2(1): 12-13.

[2] 刘腾红,孙细明.信息系统分析与设计[M].北京:科学出版社,2003,2(2): 13-15.

[3] 谭浩强.C++程序设计[M].北京:清华大学出版社,2004,4(2): 22-27.

[4] 李云清,杨庆红.数据结构[M].北京:人民邮电大学出版社,2004,4(1): 22-29.

[5] 夏秀清.咸阳海泉温泉酒店市场营销方案设计与实施[D].西安:西北大学,2008,3(2): 18-21.

[6] 传智播客高教产品研发部.C语言程序设计教程[M].北京:人民邮电出版社,中国工信出版集团,2015,2(1):13-16.

[7] 王宇博.计算机C++语言编程技巧问题与解决办法[J].计算机产品与流通,2019,2(1): 12-15.


  目录