快捷酒店管理系统

面向对象程序课程设计任务书

设计题目:
客房管理系统(支撑课程目标1、2、3、4)
参考学时:
1周
设计内容
有一个小型的快捷酒店,该酒店共有 10个房间,可在柜台办理入住或退房。现在请你编写一个简单的酒店客房管理系统。
学习目的
理解掌握程序中的类与现实中事物的对应关系,通过类的组合、继承等模拟现实世界解决问题的方式。
设计要求
1、 能够正确接受顾客的住房和退房申请,成绩≥60;
2、 能够统计当前客房的入住情况,界面设计友好,成绩≥70;
3、 能够实现客房信息到文件的导出和导入,成绩≥80;
4、 能够考虑不同类型(标准间、大床房)的客房和价格,并且可以添加、删除客房及修改客房信息,成绩≥90。

面向对象程序课程设计
目 录

一、 题目
二、 需求分析
三、 系统功能结构图
四、 类的设计
五、 程序代码与说明
六、 运行结果与分析
七、 心得与体会

一、 题目
小型快捷酒店的客房管理系统
二、 需求分析
1.可以实现顾客预订,退房的功能,并记录顾客的操作的信息。
2.可以实现酒店信息的管理,对房间信息的修改操作。
3.可以记录每日的顾客操作,并可以实现信息的导入或导出。
4.可以查询入住者的房间信息。
5.可以查询具体日期的客房预定信息。
6.可以实现按日期处理房间信息,当入住时间截至自动退房。
7.可以实现显示一个月的房间入住情况。
三、 系统功能结构图

四、 类的设计

  1. 顾客类:储存客户的个人信息
  2. 时间类:记录时间,实现记录每一天的预订信息
  3. 房间类:不同种类房间的基类
  4. 房间信息类:储存全部房间的入住信息
  5. 大床房类:储存大床房的信息
  6. 标准间类:储存标准间的信息
    五、 程序代码与说明


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define FACE_X 29
#define FACE_Y 20

using namespace std;

class Date//日期类
{
public:
    Date();
    int getyear(){return year;}
    int getmonth(){return month;}
    int getday(){return day;}

private:
    int year,month,day;
    string in_text;
};
Date::Date()//读入系统时间
{
    time_t now;
    time(&now);
    struct tm *t_now;
    t_now = localtime(&now);
    year=t_now -> tm_year + 1900;
    month=t_now -> tm_mon + 1;
    day=t_now -> tm_mday;
};

class roominformation//统计住房信息类
{
public:
    roominformation(){};
    roominformation(char* sta,char* ow,char* room)
    {
        strcpy(state,sta);
        strcpy(ower,ow);
        strcpy(roomnumber,room);
    };
    char* getstate() {return state;}
    char* getower() {return ower;}
    char* getroomnumber() {return roomnumber;}

    void display()
    {
        cout<<"  "<man;      //储存客户信息容器
int vis[2][1000];         //标记房间状态
int cha[2][1000];         //标记改变状态
string text_last=".text";
int ids;
string na;
string namess[2000];
int roomss[2000];
char temp[100];
char tempn[100];
char tempname[100][100];

class Room//房间类
{
public:
    Room(int dep=100):deposit(dep){};
    virtual int outprice(int n,int day)=0;
    virtual void inroom(int n,int day,string text)=0;
    virtual int outroom(int n,string text)=0;
    virtual int getnumber()=0;
    virtual int getprice()=0;
    virtual int getttnumber()=0;
    virtual int setnumber(int n)=0;
    virtual void changen(int n)=0;
    virtual void changep(int n)=0;
protected:
    int deposit;        //定金
};

class normal_room:public Room//标准间类
{
public:
    normal_room(int pri=180,int num=5,int totle=5):price(pri),number(num),totle_number(totle)
    {
        for(int i=1;i<=totle;i++)          //生成房间号码
        {
            string rooms=to_string(1000+i);
            roomnumber.push_back(rooms);
        }
    };
    void normal(int num,int totle_num)
    {
        number=num;
        totle_number=totle_num;
        for(int i=1;i<=totle_num;i++)      //生成房间号码
        {
            string rooms=to_string(1000+i);
            roomnumber.push_back(rooms);
        }
    }
    void inroom(int n,int day,string text);
    int outprice(int n,int day);
    int outroom(int n,string text);
    int setnumber(int n);
    int getnumber();
    int getprice();
    int getttnumber();
    void changen(int n);
    void changep(int n);
private:
    int price,number,totle_number; //单价,可用房间数,房间总数
    vectorroomnumber;      //统计房间号码
};

int normal_room::getnumber()
{
    return number;
}

int normal_room::getprice()
{
    return price;
}

int normal_room::getttnumber()
{
    return totle_number;
}

int normal_room::setnumber(int n)
{
    number-=n;
    return number;
}

int normal_room::outprice(int n,int day)
{
    return n*day*price+n*deposit;
}

void normal_room::inroom(int n,int day,string text)     //入住信息统计
{
    ofstream OpenFile(text,ios::app);                   //读入预定信息的文件
    if(n<=number)
    {
        cout<<"可预定: "<0;i++)
        {
            if(vis[0][i]==0)
            {
                vis[0][i]=1;
                n--;
                Customer man1;
                cout<<"请输入你的姓名:";
                cin>>na;
                OpenFile<<"\n          姓    名:"<>ids;
                OpenFile<<"\n          身份证号:"<number)
    {
        cout<<"房间不足"<totle_number-number)
    {
        return 0;
    }
    cout<<"输入您退的房间"<>x;
        if(vis[0][x-1001]==1)
        {
            vis[0][x-1001]=0;
            OpenFile<<"          所退房间号:"<::iterator it;
        for(it=man.begin();it!=man.end();it++)          //更新状态标记
        {
            if((*it).getroomnumber()==x)
            {
                man.erase(it);
                break;
            }
        }
    }
    OpenFile.close();
    system("pause");
    number=number+n;
    int pri;
    pri=n*100;
    return pri;

}

void normal_room::changen(int n)             //更改房间数目
{
    if(n>0)
    {number+=n,totle_number+=n;}
    else
    {
        if(n<=number)
            {
                number+=n;
                totle_number+=n;
            }
        else
            cout<<"房间不足"<roomnumber;
};

int unnormal_room::getnumber()
{
    return number;
}

int unnormal_room::getprice()
{
    return price;
}

int unnormal_room::getttnumber()
{
    return totle_number;
}

int unnormal_room::setnumber(int n)
{
    number-=n;
    return number;
}

int unnormal_room::outprice(int n,int day)
{
    return n*day*price+n*deposit;
}

void unnormal_room::inroom(int n,int day,string text)
{
    ofstream OpenFile(text,ios::app);
    if(n<=number)
    {
        cout<<"可预定: "<0;i++)
        {
            if(vis[1][i]==0)
            {
                vis[1][i]=1;
                n--;
                Customer man1;
                cout<<"请输入你的姓名:";
                cin>>na;
                OpenFile<<"\n          姓    名:"<>ids;
                OpenFile<<"\n          身份证号:"<number)
    {
        cout<<"房间已满"<totle_number-number)
    {
        return 0;
    }
    cout<<"输入您退的房间"<>x;
        if(vis[1][x-2001]==1)
        {
            vis[1][x-2001]=0;
            OpenFile<<"          所退房间号:"<::iterator it;
        for(it=man.begin();it!=man.end();it++)
        {
            if((*it).getroomnumber()==x)
            {
                man.erase(it);
                break;
            }
        }
    }
    OpenFile.close();
    system("pause");
    number=number+n;
    int pri=n*100;
    return pri;
}

void unnormal_room::changen(int n)
{
    if(n>0)
    {number+=n,totle_number+=n;}
    else
    {
        if(n<=number)
            {
                number+=n;
                totle_number+=n;
            }
        else
            cout<<"房间不足"<getprice()<<"/间   共"<getprice()<<"/间   共"<>w;
    if(w==0)
    {
        cout<<"请输入修改后的金额:";
        cin>>pric;
        pb->changep(pric);
    }
    else
    {
        cout<<"请输入修改的房间数目:";
        cin>>pric;
        pb->changen(pric);
    }
    cout<<"修改完成!"<ppp;
        roominformation inform;
        in.read((char*)&inform,sizeof(inform));
        //inform.display();
        while(!in.eof())
        {
            ppp.push_back(inform);
            //inform.display();
            in.read((char*)&inform,sizeof(inform));

        }

        for(auto itss=ppp.begin();itss!=ppp.end();itss++)
        {
            if(!strcmp((*itss).getstate(),"房间状态:空房"))
            {
                strcpy(temp,(*itss).getroomnumber());
                //cout<>x;
    switch(x)
    {
        case 0:
        {
            choice();
            OpenFile<<"\n   ——————办理入住——————:\n";
            cin>>y;
            switch(y)
            {
                case 1:
                {
                    pa=&room1;
                    OpenFile<<"          选择标准间: ";
                    break;
                }
                case 2:
                {
                    pa=&room2;
                    OpenFile<<"          选择大床房: ";
                    break;
                }
                default:{cout<<"无效操作"<>p;
            OpenFile<>q;
            OpenFile<<"          每间房住宿"<inroom(p,q,text+text_last);
            break;
        }
        case 1:
        {
            choice();
            OpenFile<<"\n   ——————办理退房——————\n";
            cin>>y;
            switch(y)
            {
                case 1:
                {
                    pa=&room1;
                    break;
                }
                case 2:
                {
                    pa=&room2;
                    break;
                }
                default:{cout<<"无效操作"<>p;
            OpenFile<<"          共退"<getttnumber()!=pa->getnumber())
            cout<<"返还押金:"<outroom(p,text+text_last)<>z;
            switch(z)
            {
            case 0:
                {
                    choice3();

                    choice4(&room1);
                    break;
                }
            case 1:
                {
                    choice3();

                    choice4(&room2);
                    break;
                }
            case 2:
                {
                    cout<<"请输入修改的房间数量"<>w;
                    room1.changen(-w);
                    room2.changen(w);
                    cout<<"请输入修改的房间号码:"<>nu;
                        if(vis[0][nu-1001]==0&&room1.getttnumber()>=(nu-1000))
                        {cha[0][nu-1001]=1;
                        cout<<"房间号码改为:"<<2000+room2.getttnumber()-(w-i-1)<>w;
                    room1.changen(w);
                    room2.changen(-w);
                    cout<<"请输入修改的房间号码:"<>nu;
                        if(vis[1][nu-2001]==0&&room2.getttnumber()>=(nu-2000))
                        {cha[1][nu-2001]=1;
                        cout<<"房间号码改为:"<<1000+room1.getttnumber()-(w-i-1)<>snames;
            int ffff=0;
            for(auto i=man.begin();i!=man.end();i++)
            {
                if((*i).getname()==snames)
                {
                    cout<<"被查询者所住房间:";
                    cout<<(*i).getroomnumber()<>x1>>y1>>z1;
            text1=to_string(x1)+"-"+to_string(y1)+"-"+to_string(z1);
            ifstream On(text1+text_last);
            if (!On.is_open())
            {
                cout << "未成功打开文件" << endl;
            }
            while(getline(On,tempp))
            {
                cout<getttnumber();
        cout<getnumber()<<" *"<getttnumber();
        cout<<"       * 剩余大床房间数:"<getnumber()<<" *"<

六、 运行结果与分析
运行结果:
1.顾客订购房间
2.顾客信息的查询
3.顾客退房操作
4. 打印客房信息
5.修改房间信息
6.打印预定信息

七、 心得与体会
1.深入理解如何用面向对象处理实际问题。
2.进一步理解如何实现类的功能。
3.深入理解面向对象的封装,继承,多态,等基础知识。
4.进一步了解如何通过编程满足客户需求。
5.熟练掌握文件的输入输出操作。
6.深入把握类与类之间的关系。

你可能感兴趣的:(面向对象)