宾馆信息管理系统课程设计报告(大一)

时间:2024.5.13

哈尔滨理工大学

软件学院

课程设计报告

课程设计      C++课程设计

题    目    宾馆信息管理系统

班    级     

学    生      

学    号     

指导教师        


1.             管理系统的功能说明

a)     密码登录验证访问 。

b)     浏览宾馆内部各房间信息 。

c)     添加新房间(支持重复添加)。

d)     修改已存在的房间信息(支持重复修改) 。

e)     查询房间数据(按房间号、容量)(支持重复查询)。

f)      添加自定义对结果排序显示功能。

g)     退出系统及一些基本的用户友好的程序设计功能(各种错误处理)。

2.             存储数据的描述

在类定义中有以下成员:

实现上述功能的成员函数接口

public:

    Hotel();

    virtual ~Hotel();

    Hotel(int n,int v,int l,int p,int u):RoomNum(n),Capacity(v),Level(l),Price(p),used(u) {}

    void Look_through();

    void Reset_room(int x);

    void Show_room();

    friend void menu();

    friend void quit();

    friend void Init_room();

    friend Hotel Add_room();

    friend void Query(int n,int total);

私有数据表示:

private:

    int  RoomNum; 房间号

    int Capacity;     房间容量

    char Level;      房间等级 

    int Price;        房间价格

    int used;        是否预定

    static int total;   静态常量用来跟踪总房间数目信息

3.             概要设计说明书

在该宾馆信息管理系统的设计中,根据功能要求抽象出类成员函数,并采用对象数组存储房间,用一个Hotel类封装起来。通过友元函数访问私有数据从而实现信息管理系统的功能。

在运行过程中

string password(string co) 实现了加密函数实现密码登陆。void Hotel::Look_through()支持单个房间浏览,Hotel Add_room()实现了新房间的重复添加功能,void Hotel::Reset_room(int x) 实现了房间信息连续重置功能,void Query(int n,int total)函数实现了支持重复查询房间并允许自定义房间号和价格排序显示的功能,void quit() 退出系统登录功能。并在每一步都给出了较为有好的用户提示,运行中整体逻辑清晰,并实现了对错误输入的重新处理。用户只需按着运行提示即可。

4.         源程序

Main.cpp

#include <iostream>

#include<algorithm>

#include<string>

#include<set>

#include"Hotel.h"

#include<windows.h>

using namespace std;

static int total=13;

int main()

{

    cout<<"\n                Welcome to information management system !\n ";

    cout<<"************                                                   ************\n\n   login:  ____\b\b\b\b";

    string str1 ,str2;

    while((cin>>str1).get())

    {

        cout<<"Password:  ";

        getline(cin,str2);

        if(str1=="cbam"&&str2==password("c bam"))

        {

            break;

        }

        else

            cout<<"Password error!!  please login again\nlogin:  ";

    }

    cout<<"\nLogin success!\n\n…………………………自动转入下页……";

    Sleep(3000);

    system("cls");

    menu();

    while(1)

    {

        int select;

        cin>>select;

        if(select==9)

        {

            menu();

            cin>>select;

        }

        switch(select)

        {

        case 0:

            quit();

            return 0;

        case 1:

            cout<<"房间号   容量    等级  价格   是否预定\n";

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

                hotel[i].Look_through();

            cout<<"返回主菜单请单击\"9\"\n";

            break;

        case 2:

            hotel[total++]=Add_room();

            break;

        case 3:

            cout<<"要修改的房间号:__\b";

            int num;

            cin>>num;

            hotel[num-1].Reset_room(num);

            break;

        case 4:

            cout<<"输入您查询房间的方式(房间号\"1\"  or  容量\"2\"\n";

            int way;

            cin>>way;

            Query(way,total);

            break;

        default:

            cout<<"请重新在菜单中选择\n";

            break;

        }

    }

    return 0;

}

Hotel.h

#ifndef HOTEL_H

#define HOTEL_H

#include<iostream>

#include<vector>

using namespace std;

//存储临时对象以便操作

struct HOTEL_

{

    int num,vo,p;

    char l;

    int u;

    HOTEL_(int n=0,int v=0,int pp=0,char ll='a',int uu=0)//构造函数

    {

        num=n;

        vo=v;

        p=pp;

        l=ll;

        u=uu;

    } // 重载<运算符

    bool friend  operator <(HOTEL_ a,HOTEL_ b)

    {

        return a.p<b.p;

    }

};

//一个宾馆房间类

class Hotel

{

public:

    Hotel();

    virtual ~Hotel();

    Hotel(int n,int v,int l,int p,int u):RoomNum(n),Capacity(v),Level(l),Price(p),used(u) {}

    void Look_through();

    void Reset_room(int x);

    void Show_room();

    friend void menu();

    friend void quit();

    friend void Init_room();

    friend Hotel Add_room();

    friend void Query(int n,int total);

private:

    int  RoomNum;

    int Capacity;

    char Level;

    int Price;

    int used;

    static int total;

};

#endif // HOTEL_H

Hotel::Hotel()

{

    //ctor

}

Hotel::~Hotel()

{

    //dtor

}

//主菜单

void  menu()

{

    cout<<"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"<<endl;

    cout<<"\n---欢迎访问宾馆信息内部管理系统---\n";

    cout<<"\n\n     -----1-访问房间信息---\n";

    cout<<"\n     -----2-增加新房间-----\n";

    cout<<"\n     -----3-修改房间数据---\n";

    cout<<"\n     -----4-查询房间数据---\n";

    cout<<"\n     -----0-退出此系统-----\n";

    cout<<"\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n";

}

//加密函数,生成密码

string password(string co)

{

    for(int i=0; i<co.size(); i++)

    {

        if(co[i]!=' ')

            co[i]=25+'a'*2-co[i];

    }

    reverse(co.begin(),co.end());

    return co;

}

void Hotel::Look_through()

{

    // 访问某房间信息

    cout<<"  "<<RoomNum<<"       "<<Capacity<<"        "<<Level

        <<"    "<<Price<<"      "<<used<<endl;

}

//实现添加功能

Hotel Add_room()

{

    cout<<"输入新房间信息:\n\n";

    int n,v,p,u;

    char l;

    cout<<"房间号:__\b\b   ";

    cin>>n;

    cout<<"房间容量:__\b\b ";

    cin>>v;

    cout<<"房间等级:__\b";

    cin>>l;

    cout<<"房间价格:__\b\b ";

    cin>>p;

    cout<<"设定预订情况:__\b\b ";

    cin>>u;

    Hotel x;

    x=Hotel(n,v,l,p,u);

    cout<<"\n新房间信息已添加完毕~!返回菜单请按  \"9\""<<endl;

    return x;

}

//实现修改功能

void Hotel::Reset_room(int x)

{

    cout<<"请输入需要修改的房间信息:\n";

    cout<<"----1-房间容量----"<<endl;

    cout<<"----2-房间价格----\n"

        <<"----3-房间等级----\n"

        <<"----4-是否已定----\n";

    int a;

    while(cin>>a)//循环支持重复修改

    {

        switch(a)

        {

        case 1:

            int cnt;

            cout<<"容量修改为:__\b";

            cin>>cnt;

            Capacity=cnt;

            break;

        case 2:

            int price;

            cout<<"价格修改为:__\b";

            cin>>price;

            Price=price;

            break;

        case 3:

            char level;

            cout<<"房间等级修改为:__\b";

            cin>>level;

            level=level;

            break;

        case 4:

            int booked;

            cout<<"预定情况修改为:__\b";

            cin>>booked;

            used=booked;

            break;

        }

        cout<<"\n此房间信息修改完毕,继续修改请按\"1\",返回菜单请按 \"9\""<<endl;

        cin>>a;

        if(a==9) //返回菜单直接return ;

        {

            menu();

            return ;

        }

        cout<<"请输入需要修改的房间信息:__\b\b";

    }

}

Hotel hotel[53]=

{

    Hotel(01,2,'a',300,0),

    Hotel(02,4,'a',400,0),

    Hotel(03,3,'b',100,0),

    Hotel(04,5,'b',200,0),

    Hotel(05,4,'c',200,0),

    Hotel(06,2,'c',240,0),

    Hotel(07,3,'d',130,0),

    Hotel(8,1,'d',110,0),

    Hotel(9,5,'d',130,0),

    Hotel(10,4,'d',430,0),

    Hotel(11,4,'d',230,0),

    Hotel(12,3,'d',330,0),

    Hotel(13,4,'d',730,0)

};

//实现查询功能

void Query(int n,int total)

{

    //按房间号查找

    if(n==1)

    {

        while(1)//实现重复查找

        {

            int flag=1;//标记是否查找成功

            cout<<"\n您要查找的房间号:_\b";

            int roomNumber;

            cin>>roomNumber;

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

                if(hotel[i].RoomNum==roomNumber)

                {

                    flag=0;

                    cout<<"查找成功!\n\n以下房间满足您的查询要求:\n"<<endl;

                    cout<<"房间号   容量    等级  价格   是否预定\n";

                    hotel[i].Show_room();

                    cout<<"\n是否继续查询房间(Y|N)?_\b ";

                    char ch;

                    while(cin>>ch)    // 错误处理 支持重复选择直到 选择合理

                    {

                        while(cin.get()!='\n') // 吃掉多余缓冲区字符

                            continue;

                        if(ch=='Y')

                            break;

                        else if(ch=='N')

                        {

                            menu();

                            return ;

                        }

                        else

                        {

                            cout<<"\nerror ! Bad input;input process continue.\n \n是否继续查询房间(Y|N)?_\b ";

                        }

                    }

                }

            if(flag)  //说明查找不存在满足情况

            {

                cout<<"\n您所要查找的房间不存在!请重新查找 按1 或返回菜单 双击\"9\"\n";

                int choose;

                cin>>choose;

                if(choose==9)

                    return ;

                else

                    continue;

            }

        }

    }

    else if(n==2)//按照房间容量查找

    {

loop:

        int capacity;

        cout<<"\n请输入房间容量:__\b\b";

        cin>>capacity;

        int flag=1;        //标记成功与否

        vector<HOTEL_>dict;   //将临时对象push容器

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

        {

            if(hotel[i].Capacity==capacity)

            {

                if(flag)//查找成功

                {

                    flag=0;

                    cout<<"\n(默认房间号递增排序)\n以下房间满足您的查询要求:"<<endl;

                    cout<<"房间号   容量    等级  价格   是否预定\n";

                }

                //构造对象

                HOTEL_ x= HOTEL_ (hotel[i].RoomNum ,hotel[i].Capacity,hotel[i].Price,hotel[i].Level,hotel[i].used);

                dict.push_back(x);

                hotel[i].Show_room();//默认房间号升序

            }

        }

        if(flag)//查找不成功

        {

            cout<<"您所要查找的房间不存在!请重新查找 按1 或返回菜单 双击9"<<endl;

            int select;

            cin>>select;//重新选择查询

            if(select==1)

                goto loop;

            else

                return ;

        }

        else //查找成功情况下 选择一系列操作

        {

            cout<<"\n\n按-\"1\" 以价格递增排序,继续查询房间(Y|N)?__\b\b,按-\"9\"返回主菜单\n";

            char choose;

            while(cin>>choose)

            {

                while(cin.get()!='\n')

                    continue;

                if(choose=='9')

                {

                    menu();

                    return ;

                }

                if(choose=='Y')

                    goto loop;

                else if(choose=='N')

                {

                    menu();

                    return ;

                }

                else if(choose == '1')

                {

                    cout<<"\n以下房间满足您的查询要求:\n";

                    sort(dict.begin(),dict.end());  // 对结果按照价格升序

                    for(vector<HOTEL_>::iterator it=dict.begin(); it!=dict.end(); it++)

                    {

                        cout<<"   "<<(*it).num<<"       "<<(*it).vo<<"     "

                            <<(*it).l<<"     "<<(*it).p<<"        "<<(*it).u<<endl;

                    }

                    cout<<"是否继续查询房间(Y|N)?__\b"; //此时同样支持 继续查询功能

                    while(cin>>choose)

                    {

                        while(cin.get()!='\n')//错误处理

                            continue;

                        if(choose=='Y')

                            goto loop;

                        else if(choose =='N')

                        {

                            menu();

                            return ;

                        }

                        else

                            cout<<"请重新选择(Y|N)__\b";

                    }

                }

                else

                {

                    //对于以上情况都没有正确选择 同样支持重新选择

                    cout<<"\n错误!按-\"1\" 以价格递增排序,继续查询房间(Y|N)?__\b\b,按-\"9\"返回主菜单\n";

                }

            }

        }

    }

    else  //对于查询方式选择有误 亦支持重新查询

    {

        cout<<"查询方式有误!重新输入查询方式!按\"1\"  或返回主菜单 双击\"9\""<<endl;

        int select;

        cin>>select;

        if(select!=1)

            return ;

        cout<<"输入您查询房间的方式(房间号\"1\"  or  容量\"2\")\n";

        int way;

        cin>>way;

        Query(way,total); //重新调用函数

    }

    cout<<"\n返回主菜单请单击\"9\"\n";

}

void Hotel:: Show_room()

{

    //显示房间信息

    cout<<"  "<<RoomNum<<"       "<<Capacity<<"        "<<Level

        <<"    "<<Price<<"      "<<used<<endl;

}

void quit()

{

    //退出函数

    cout<<"对此系统信息的更新完毕!欢迎使用~\n";

    return ;

}

5.测试分析

   进入宾馆管理系统前,首先就要通过密码登录验证,支持重新验证。验证成功后进入欢迎界面(主菜单)用户按照需求即可进行选择服务类别,并在每次使用后询问是否继续并每次给出返回主菜单的提示,在测试过程中确实出现了多逻辑bug,但由于面向对象的特性,修改起来十分方便高效,已基本可以满足客户。用户完全可以按照傻瓜界面提示进行。文本末附截图。

6.总结报告

   《C++程序设计》是计算机专业一门重要的专业基础课。此次课程设计以C++程序设计语言为基础,通过完成此次课程设计题目的构思、编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧。巩固了所学的理论知识,并进一步使理论与实际相结合,从而提高了自我分析解决问题的能力。并进一步感受到“程序员的天敌是无尽的需求”。

设计中遇到的错误:

n  在main函数中定义的对象数组,一开始用 引用传递对象数组 不合法。后来直接把对象数组定义到.h文件不用传参数了。后来可能可以用对象指针传递。

n  密码登录的时候 ,一开始对于用户输入用cin读取 这样便不会处理有空格的输入。进而导致密码错误。后改用getline()函数,实现。

n  switch语句平时acm很少用,所以有一个case语句少了个break;导致连续执行。

n  对象数组下标从0开始修改房间信息出现错误,后解决。

n  在完成查询功能时思维复杂度提升,有时出现难以维护。

n  用于用户用好的提示语不断更新 等……一系列小的bug。

 

更多相关推荐:
管理信息系统课程设计报告

管理信息系统课程设计设计题目班级学生成绩查询系统专业班级学生姓名终结者队指导教师2012年4月19日目录1人员介绍3A终结者3B队伍组成32学生成绩查询系统建设背景4A必要性4B实用性4C目的性43系统简介5A...

管理信息系统课程设计报告(标准格式)

管理信息系统课程设计报告题目库存管理信息系统学生姓名指导教师成绩日期20xx年9月8号目录目录2摘要3库存管理管理信息系统4第一章现行系统概述4第二章系统分析41需求分析42可行性研究521目标与方案可行性52...

管理信息系统课程设计报告

管理信息系统课程设计报告课程设计任务书一课程设计课题题目安徽工程大学地下超市收银系统开发二课程设计原始资料地下超市商品信息三课程设计内容开发适合于地下超市的高效率收银系统四课程设计要求1通过课程设计加深理解验证...

《管理信息系统》课程设计报告范文

1摘要企业工资管理系统是公司管理的一个重要内容是一种典型的管理系统企业工资管理系统是公司管理的一个重要内容是一种典型的管理系统其开发主要包括后台的数据库的建立维护以及前端的相应应用程序的开发两个方面的内容系统的...

管理信息系统MIS课程设计报告

MIS课程设计课设题目:中国电信(江苏分公司)供应链管理系统学院管理学院专业___市场营销________班别___09市场营销(2)_学号_______姓名__________指导教师_______20##年…

《管理信息系统》课程设计报告

管理信息系统设计报告院系班级姓名学号辅导老师徐恒实验题目航班售票管理系统设计报告完成日期20xx年5月17日1目录一实验题目3二实验目的3三实验内容3系统分析3一必要性分析3二可行性分析3三航班售票管理系统业务...

MIS(管理信息系统)课程设计个人总结

课程设计总结姓名:李斌专业:财务管理学号:1145543131课程设计个人总结本次课程设计持续了1个星期,时间非常紧张,我们的课题是企业人力资源管理系统,我们小组由7个人组成,需要完成企业人力资源管理系统子系统…

医院门诊管理信息系统课程设计报告

MIS课程设计实验报告医院门诊处理系统1.引言1.1编写目的科技进步将人类带到了信息时代,计算机已成为各行各业在业务处理与管理工作中必不可少的辅助工具,并对各行业的发展起到越来越大的推动作用。计算机信息管理技术…

《管理信息系统》课程设计计划书

管理信息系统课程设计计划书一目的课程设计是与课程管理信息系统相配合的设计性实验课程设计主要目的1通过系统分析使学生建立对管理信息系统的认识2通过对某小型管理信息系统的分析使学生掌握管理信息系统的主要步骤和方法提...

管理信息系统课程设计报告

经济管理学院20xx至20xx学年第二学期管理信息系统课程设计报告

医院管理信息系统课程设计报告

医院管理信息系统分析报告书目录1.引言...101.1编写目的...101.2项目背景...111.3研究的前提...111.3.1目标...111.3.2条件、假定和限制...112.任务概述...122.1…

管理信息系统实验报告设计

经济管理学院管理信息系统实验报告设计指导老师20xx61管理信息系统实验报告目录一系统需求分析311问题的提出312可行性分析313系统的设计目标3二系统设计421系统设计422系统运行环境4三系统结构框架43...

管理信息系统课程设计报告(19篇)