酒店管理系统 C++课程设计报告

《酒店管理系统》

程序设计基础课程设计报告

专    业:         计算机科学与技术              

班    级:           11计科1班                 

姓    名:                                     

指导教师:                                    

2012 年  7月   2  日


                                                     

 

 

 

 

 

 

 

1、课程设计题目描述和要求

  1.1课程题目:

      酒店管理系统

  1.2 课程要求:

1.    屏幕上出现一个界面,让操作员能够方便的选择所需要进行的操作,如不同级别房间价格的查询、修改、刷除等 。

2.    对不同标准的房间实施不同的收费标准,也可以按天收费或按小时收费,可根据顾客需要在等级的入住的时候进行选择。

3.   月底进行结算,实收多少,应收多少。

2、课程设计目的:

  通过C++语言编程实现酒店管理系统的基本功能。酒店管理系统的实现核心是要录入客人信息并在退房时结算,同时具有月底结算功能。此程序重在满足其要求,使用者可以方便的使用。也可以根据自己的需求对程序进行优化。

3、课程设计结构图

         

                               

      

4. 课程设计总结

 在做程序设计前就已经感觉到我设计的《酒店管理系统》比较复杂,不仅要写出实现各种功能的函数还要保证函数之间的连接,怎样通过函数之间的关系能很好的把函数连接起来,还要保证程序能够很好的而且有效的运行。还有可能遇到一些以前没有用到的知识,像怎样在输入有误的情况下进行异常处理,这些都要通过函数的功能来实现,这些对我来说都是新的知识,而且觉得很有难度。

    在做程序设计前还必须把书本上的基本知识搞懂,程序设计会用到书中的类做,对类的理解也不是很到位,一些概念的知识还没有很好的理解,所以还需要借助书中的知识来加深对类的理解。

在编程的过程中也遇到了很多的困难,但是通过同学的帮助渐渐对于程序有更深一步的理解,而且他们也帮我编一个对异常处理的函数,这样在异常处理的过程中就能很好的处理因为在输入有误的情况的错误。

经过这次课程设计的编写我有增加了一些新知识,知道自己在编程方面还欠缺甚多,在自己完成了编程之后觉得收益良多,原来书本上的东西并不少,我们学习不要贪多,一定要把书本上的知识掌握好!

在这次课程设计的编写中我了解了一些输入输出流,知道了如何把程序保存到磁盘中,这些知识都是以前没有深究和不多用的。比如:常用的输入输出流除iostream(通用输入输出流和其他输入输出流的基类)外还有fstream(输入输出文件流)和strstream(输入书出字符串流类)。书本上好多知识都是我们没留意而在程序中要用到的。

选课题的时候心高气傲觉得自己能编出来,而正要着手编的时候才知道题目并不简单。

看到这个课题的时候觉得题目要求并不高,而且函数名及功能都给出来了,只需把它填满就行。处于心理作用而且老师也说了课程设计是要把整本书的知识都融合在一起的,于是我开始想如何用类、如何把程序写得简单明了,但是想了好久也想不出来,于是自己搜了一些有关这一课题的程序,想从中获得一些灵感,找到一些好的方法。事与愿违,网上的程序好多,大都用到了数据库,看不懂,我选了一个C程序来看,发现里面好多头文件都不认识,而它用的是struct和class相结和,多文件的编程,包括的知识广泛,感觉很复杂。

我后面就模范他的结构,用简单的语句编出框架,然后在一步步深入细化,最后用fstream类输入输出文本,然而简单的程序也有出错的时候,经过反复的修改、调试终于写出了这个程序!

5、参考书目:

     [1] 谭浩强,《C++程序设计》,北京,清华大学出版社,20##年.

     [2] 詹红霞、侯思颖、陶永红,《Visual C++ 程序设计教程》,北京,清华大学出版社,       20##年

附录:

#include <iostream>

#include <fstream>

using namespace std;

int n;

char b[5]="kong";

struct date        //时间结构体

{

       int year;

    int month;

    int day;

}in,out;

struct hotell         //客房结构体

{

       int num;          //房号

    char leixing[5] ;   //房间类型

    int price;          //房间价格

    char noman[5];     //房间是否空闲

    char name[20];       //客户姓名

    date in;          //用结构体定义的入住时间

       date out;         //用结构体定义的退房时间

    int pay;            //预付金额

    int shenfen;      //身份证号

    int shu;          //客房数目

       int input;         //客房收入

} room[100];

void luru()          //客房信息录入函数

{   int i,j;

ofstream kefang("kefang.txt",ios::binary);     //打开二进制文件

if ( ! kefang)

{

       cerr<<"文件没有打开!"<<endl;

       abort();

}

       cout<<"    您选择了客房信息录入功能\n";

       cout<<"    现在进行客房信息的录入\n";

       cout<<"    总客房数为100间,请输入您要录入的客房数。\n\n";

cout<<"    请输入房间数"<<endl;

cout<<"    ";

cin>>n;

if(n>100||n<=0)

{

       cout<<"    您的输入有误,请重试\n\n";

       luru();

}

for(i=0;i<n;i++)

{

       cout<<"    客房号"<<endl;

    cout<<"    ";

    cin>>room[i].num;

    cout<<"    客房类型(1、 2、 3、)\n    请在1-3中进行选择"<<endl;

    cout<<"    ";

    cin>>room[i].leixing;

    cout<<"    客房价格"<<endl;

    cout<<"    ";

    cin>>room[i].price;

       for(j=0;j<5;j++)

       {

    room[i].noman[j]=b[j];       //此时客房为kong

       }

    room[i].shu=n;            //录入的客房数目

       cout<<endl;

       cout<<"    本客房信息录入结束\n\n";

    kefang.write((char*)&room[i],sizeof(room[i]));

       kefang.close();

      

}

}

void dengji()          //客人入住登记函数

{   char a[5]="man";

       int k,j,i;

       fstream kefang("kefang.txt",ios::in|ios::out|ios::binary);

    if(!kefang)

       {

              cerr<<"文件打开失败!"<<endl;

              abort();}

       cout<<"    请输入客人人数"<<endl;

       cout<<"    ";

    cin>>k;

    for (int x=0;x<k;x++)

       {

              cout<<"    请输入客人的房号"<<endl;

           cout<<"    ";

        cin>>i;

              room[i-1].num=i;

        kefang.seekg(i-1*sizeof(a[i-1]));

              kefang.read((char*)&room[i-1],sizeof(room[i-1]));

              cout<<"    请输入客人的姓名"<<endl;

           cout<<"    ";

        cin>>room[i-1].name;

        cout<<"    请输入客人的身份证号"<<endl;

           cout<<"    ";

        cin>>room[i-1].shenfen;

        cout<<"    请输入客人入住时间,年/月/日"<<endl;

           cout<<"  年:   ";

        cin>>room[i-1].in.year;

           cout<<"  月:   ";

              cin>>room[i-1].in.month;

           cout<<"  日:   ";

              cin>>room[i-1].in.day;

        cout<<"    请输入客人的预付金额(单位:元)"<<endl;

           cout<<"      ";

        cin>>room[i-1].pay;

              for(j=0;j<5;j++)         

              {

        room[i-1].noman[j]=a[j];     //此时客房为man 

              }

        kefang.write((char*)&room[i-1],sizeof(room[i-1]));

}

       kefang.close();

cout<<"    客人入住登记结束,按回车键返回主菜单!"<<endl;

}

void tuifang()          //客人退房结算

{

       int a,i,j,pay1,pay2;

       fstream kefang("kefang.txt",ios::in|ios::out|ios::binary);

    if(!kefang)

       {

              cerr<<"文件打开失败!"<<endl;

              abort();}

    cout<<"    请输入客人住的房间号"<<endl;

           for(i=0;i<n;i++)

{

           cout<<"    ";

              cin>>a;

       if(a==room[i].num)

       {   kefang.seekg(i*sizeof(room[i]));

              kefang.read((char*)&room[i],sizeof(room[i]));

              cout<<"    客人的房间号"<<room[i].num;

        cout<<"    客人的入住时间为:"<<room[i].in.year<<"年"

                     <<room[i].in.month<<"月"<<room[i].in.day;

              cout<<endl;

        cout<<"    请输入客人的退房时间 年/月/日"<<endl;

              cout<<"  年:  ";

        cin>>room[i].out.year;

        cout<<"  月:  ";

              cin>>room[i].out.month;

        cout<<"  日:  ";

           cin>>room[i].out.day;

        cout<<"    客人的退房时间为"<<room[i].out.year<<"年"

                     <<room[i].out.month<<"月"<<room[i].out.day<<"日"<<" ";

        pay1=room[i].pay-((room[i].out.year-room[i].in.year)*365+(room[i].out.month-room[i].in.month)*30+(room[i].out.day-room[i].in.day))

                     *room[i].price;

              pay2=((room[i].out.year-room[i].in.year)*365+(room[i].out.month-room[i].in.month)*30+(room[i].out.day-room[i].in.day))*room[i].price

                     -room[i].pay;

        if(pay1>=0)

              cout<<"    总的住宿费用为"<<((room[i].out.year-room[i].in.year)*365+(room[i].out.month-room[i].in.month)*30+

              (room[i].out.day-room[i].in.day))*room[i].price<<"元,\n";

              cout<<"    入住时预付费用为:"<<room[i].pay<<endl;

              cout<<"    剩余费用为:"<<pay1<<endl;

              if(pay1<0)

              cout<<"    还须付:"<<pay2<<"元";

        for(j=0;j<5;j++)

              {

                     room[i].noman[j]=b[j];    //初始化客房为空

                     room[i].name[j]=0;       //初始化客人名字为空

              }

              room[i].input=room[i].input+((room[i].out.year-room[i].in.year)*365+(room[i].out.month-room[i].in.month)*30+

                     (room[i].out.day-room[i].in.day))*room[i].price;

           kefang.write((char*)&room[i],sizeof(room[i]));

       }

     else if(a!=room[i].num)

        cout<<"    输入房号不存在!请确认后重试。\n\n"<<endl;break;

}

              kefang.close();

              cout<<"    按回车键返回主菜单返回主菜单!"<<endl;

}

void find()     //客房信息的查询

{

       int i=0;int k=0;;char name[20];

       ifstream kefang("kefang.txt",ios::binary);

    if(!kefang)

       {

              cerr<<"文件打开失败!"<<endl;

              abort();}

      

     cout<<"    您选择要查询方式:\n\n";

       cout<<"    1.按空房间查询  2.按姓名查询房间\n    3.按房号查询   4.所有客房信息\n\n";

       int chaxun;

       cout<<"    ";

       cin>>chaxun;

      

       switch(chaxun)

       {

       case 1:cout<<"    空房间查询,";          //按空房间查询

                 cout<<"    查询结果如下"<<endl;

              for(i=0;i<room[0].shu;i++)

              {

                     kefang.seekg(i*sizeof(room[i]));

                     kefang.read((char*)&room[i],sizeof(room[i]));

                     if(strcmp(room[i].noman,b)==0)

                     {

                            cout<<"    空客房号"<< room[i].num<<"   "<<"客房类型"<< room[i].leixing;

                            cout<<"   "<<"客房价格"<< room[i].price<<endl;

                            k+=1;

                     }

              }

              cout<<"    现有空房为"<<k<<"间"<<endl<<endl<<"    查询结束"<<endl;

              kefang.close();

              cout<<"    按回车键返回主菜单";break;

       case 2:cout<<"    请输入您所查询的姓名:"<<endl;    //按姓名查询

           cout<<"    ";

              cin>>name;

              for(i=0;i<room[0].shu;i++)

                     kefang.seekg(i*sizeof(room[i]));

                     kefang.read((char*)&room[i],sizeof(room[i]));

                     if(strcmp(name,room[i].name)==0)

                            cout<<"    此客人入住的房间号 "<<room[i].num<<endl;

                     kefang.close();

                     cout<<"    按回车键返回主菜单!";break;

       case 3:cout<<endl<<"    请输入房间号:"<<endl;   //按客房号查询

              int c;

           cout<<"    ";

              cin>>c;

              for(i=0;i<room[0].shu;i++)

              {

                     kefang.seekg(i*sizeof(room[i]));

                     kefang.read((char*)&room[i],sizeof(room[i]));

                     if(room[i].num==c)

                            cout<<"    房间号 "<< room[i].num<<"  "<<"入住客人姓名 "<< room[i].name<<endl;

              }

              kefang.close();

              cout<<"    按回车键返回主菜单!";break;

       case 4:cout<<"    所有房间信息如下"<<endl<<endl;       //列出所有客房信息

              for(int i=0;i<room[i].shu;i++)

       {

              kefang.seekg(i*sizeof(room[i]));

              kefang.read((char*)&room[i],sizeof(room[i]));

              cout<<"    客房号"<<room[i].num<<" ";

        cout<<"    客房类型"<< room[i].leixing<<" ";

        cout<<"    客房价格"<< room[i].price<<" ";

        cout<<"    空闲情况"<< room[i].noman<<" \n" ;

    if(room[i].noman=="man")

{

       cout<<"    客人姓名"<<room[i].name<<" ";

    cout<<"    客人身份证号"<<room[i].shenfen<<" ";

    cout<<"    入住时间"<<room[i].in.year<<"年"<<room[i].in.month<<"月"<<room[i].in.day<<" ";

       cout<<endl;

    cout<<"    预付费用"<<room[i].pay<<" "<<endl;

}

       else if(room[i].noman=="kong")

              cout<<"    此房空"<<endl<<"    浏览功能结束,请您选择其他功能"<<endl;

       }

              kefang.close();

              cout<<"\n    查询结束\n    按回车键返回主菜单!"<<endl;break;

       }

}

void xiugai()     //客房信息的删除与修改

{

       fstream kefang("kefang.txt",ios::in|ios::out|ios::binary);

    if(!kefang)

       {

              cerr<<"文件打开失败!"<<endl;

              abort();}

      

       hotell *p=room;

       char h[20]="                   ";

       int c,d,e,j;

       cout<<"    请输入要修改或删除的客房号."<<endl;

    cout<<"    ";

       cin>>c;

       for(int i=0;i<room[0].shu;i++)

              {

                     kefang.seekg(i*sizeof(room[i]));

                     kefang.read((char*)&room[i],sizeof(room[i]));

                     if(room[i].num==c)

                            cout<<"    请您选择要修改或删除的该客房的信息。"<<endl<<endl;

                   cout<<"       1.客房价格修改"<<endl;

                   cout<<"       2.客房信息的删除"<<endl;

                cout<<"    ";

                   cin>>d;}

switch(d)

{

case 1:cout<<"    客房价格修改"<<endl;   //客房价格的修改

    cout<<"    ";

       cin>>e;

       (p+c-1)->price=e;

       kefang.write((char*)&room[c-1],sizeof(room[c-1]));

       kefang.close();

       cout<<"    修改成功!\n    按回车键返回主菜单!"<<endl;

        break;

case 2:cout<<"    客房信息的删除";     //客房信息的删除

       hotell *p=room;  

       cout<<endl;

       cout<<"    1.删除类型 2.删除价格 "<<endl;

int g;

cout<<"    ";

cin>>g;

switch(g)

{

case 1:for(j=0;j<20;j++)

          { (p+c-1)->leixing[j]=h[j];}

       kefang.write((char*)&room[c-1],sizeof(room[c-1]));

    kefang.close();

       cout<<"    该房类型已删除\n     按回车键返回主菜单";

       break;

case 2:(p+c-1)->price=NULL;

       kefang.write((char*)&room[c-1],sizeof(room[c-1]));

       kefang.close();

       cout<<"    该房价格已删除\n     按回车键返回主菜单";

       break;

}

}

}

void jiesuan()  //本月结算

{

       int k=0;

       ifstream kefang("kefang.txt",ios::binary);

    if(!kefang)

       {

              cerr<<"文件打开失败!"<<endl;

              abort();}

       for(int j=0;j<n;j++)

              kefang.read((char*)&room[j],sizeof(room[j]));

       kefang.close();

       for(int i=0;i<100;i++)

              k=k+room[i].input;

       cout<<"     本月收入为:"<<k<<"\n     按回车键返回主菜单"<<endl;

}

int main ()      //宾馆客房系统主界面函数

{

cout<<endl<<endl<<endl;

cout<<"    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n";

cout<<"    $* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *$\n";

cout<<"    $*                                                                     *$\n";

cout<<"    $*                      欢迎使用客房管理系统                           *$\n";

cout<<"    $*                                                                     *$\n";

cout<<"    $* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *$\n";

cout<<"    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n";

cout<<"\n";

cout<<"    请选择您要使用的功能\n";

cout<<"\n\n";

cout<<"      1.客房信息录入       2.客人入住登记         3.客人退房结算 \n";

cout<<"      4.客房信息查询       5.客房信息删除和修改   6.本月结算           \n";

cout<<"      0.退出系统    \n";

cout<<"\n\n"; 

       int a;

       cout<<"    ";

    cin>>a;

switch ( a )

{

case 1:luru();

          cout<<"       按回车键返回主菜单!";

          system("cls");main ();break;

case 2:cout<<"    您选择了客人入住登记功能\n";dengji();

          system("cls");main ();break;

case 3:cout<<"    您选择了客人退房结帐功能\n";tuifang();

          main ();break;

case 4:cout<<"    您选择了客房信息查询功能\n";find();

          main ();break;

case 5:cout<<"    您选择了客房信息的删除和删改功能\n";xiugai();

          main ();break;

case 6:cout<<"    您选择了本月结算功能\n";jiesuan();

          main ();break;

case 0:cout<<"\n\n\n";

          cout<<"                   本系统由08计科顾力雄开发\n";

          cout<<"                 ******感谢您使用本系统!******\n\n\n";

          return(0);break;

default :cout<<"    您的输入有误,返回主菜单!";

          system("cls");main();break;

}

return 0;

}

相关推荐