精华内容
下载资源
问答
  • C++课程设计之酒店客房管理系统,具有帐户系统(简易)、房间管理系统(增加、删除、查询房间)以及客人入住退房管理系统等基本功能。压缩包内为DevC++项目,如需在VC下编译运行可自行把所有的.cpp和.h文件提取出来...
  • 客房管理系统C++

    2018-06-17 22:26:34
    C++所写的一个控制台版简易客房管理系统,发上来和大家一起交流学习。
  • C++课程设计结课大作业:酒店客房管理系统,主要实现了信息录入、信息查询、信息修改和信息删除等功能。
  • 客房管理系统充分利用了信息技术提高宾馆客房的管理水平和服务水平。系统可以实现新增客户、删除客户、客户与客房信息查询、退房等功能。管理者可以方便及时的了解宾馆的运营情况,找出运营规律,为其经营决策提供...
  • PAGE word资料 计算机学院课程设计报告 课程名称 C++课程设计 课 题 客房管理系统 专业班级 学 号 姓 名 指导老师 日 期 2013年7 月3 日 目录 1.课题简介03 2.设计方案04 3.具体设计及截屏图05 4.关键代码分析10 5....
  • 数据结构 题 目酒店客房管理系统 专 业 班 级 姓名学号 实训时间 实训地点 成 绩 详细设计说明书 目录 TOC \o "1-5" \h \z .引言 3 \o "Current Document" 1.1编写目的 3 \o "Current Document" 2.总体设计 3 \o ...
  • 计算机学院课程设计报告 课程名称 C++课程设计 课 题 客房管理系统 专业班级 学 号 姓 名 指导老师 日 期 2013 年 7 月 3日 word资料 . 目录 1.课题简介03 2.设计方案04 3.具体设计及截屏图05 4.关键代码分析10 5....
  • 这个软件是一个用C编写的有关客房管理系统的软件,大家可以用于学习和交流..
  • 酒店客房管理系统

    2013-08-18 10:28:42
    设计一个具有订房、入住、查询、退房的酒店客房管理系统
  • 课程设计的一些资源,希望对大家有帮助。。。很多高校都会布置的课程设计题目。。。。。
  • mfc+sql 酒店客房管理系统

    热门讨论 2011-06-28 02:12:59
    C++编程 运用SQL数据库 实现酒店客房管理系统的基本功能 包括查询,修改,更新等……
  • 宾馆酒店客房管理系统设计与实现
  • 随着计算机技术的广泛应用,在酒店客房管理中引入计算机管理技术,成为一个值得深入研究的问题。本系统采用Visual C++ 6.0 + SQL Server 2000作为开发环境,对本系统进行设计。在此基础上,论文重点对本系统作了详细的...
  • visual c++客房管理系统

    2008-12-25 14:32:59
    因此,采用全新的计算机网络和管理系统,将成为提高酒店的管理效率,改善服务水准的重要手段之一。面对信息时代的机遇和挑战,利用科技手段提高企业管理无疑是一条行之有效的途径。信息与科技在酒店管理与现代化建设...
  • 主要是用c++来实现客房管理系统的编写,又类的构造和编写相关函数。
  • 本项目完整的实现了酒店管理系统从上位机到下位机的实现的设计与实现,完成了酒店管理系统的基本功能。在酒店管理系统中,管理员输入正确的口令和密码登录后,进入管理页面,可以看到当前房间的入住情况、是否有异常...
  • 通过对c++课程的学习,我了解到了其面向对象的高级特性,我决定使用它实现一个宾馆客房管理系统,模拟一个实际宾馆客房系统的运行。
  • 简易客房管理系统C++

    千次阅读 2017-12-25 15:40:50
    //员工信息:楼层管理员、客房领班、客房经理等 //功能: //1)登记客人入住登记:房号、客人姓名、入住时间、入住期限、入住押金、每日租金、客房等级、单/双/三人间) //2) 给定员工姓名,显示本员工所管理的楼层...

    //客房信息:等级类型(经济、标间、豪华、单人间、双人间、三人间)、剩余客房数量
    //员工信息:楼层管理员、客房领班、客房经理等
    //功能:
    //1)登记客人入住登记:房号、客人姓名、入住时间、入住期限、入住押金、每日租金、客房等级、单/双/三人间)
    //2) 给定员工姓名,显示本员工所管理的楼层客房信息(经济、标间、豪华、单/双/三人间的入住情况(包括空闲/已入住/入住客人姓名)
    //3) 给定入住客人姓名,显示其入住情况(房号、姓名、已交押金、入住费用累计,入住结算)
    //4) 给定房号,修改押金数目(实现添加的数目和以往的数目累加)
    //5) 按照某类客房(经济、标间、豪华、单人间、双人间、三人间)入住数量的高低进行排序

    #include<iostream> 
    #include<iomanip> 
    #include<string> 
    #include <fstream>
    using namespace std; 
    const int m=100; 
    struct Room{  
    int id;            //房间号  
    int degree;        //客房等级  
    int type;          //客房类型  
    int floor;         //客房楼层  
    int number;        //客房数目 
    }; 
    class Menu{  
    public:    
    int MainMenu();  
    private:  
    };   
    int Menu::MainMenu(){  
    system("cls");   
    cout<<"                  ┌◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆┐"<<endl;      
    cout<<"                  |      欢迎使用简明客户管理系统      |"<<endl;      
    cout<<"                   ------------------------------------"<<endl;       
    cout<<"                  |                                    |"<<endl;      
    cout<<"                  |          1.客人入住信息录入        |"<<endl;   
    cout<<"                  |                                    |"<<endl;     
    cout<<"                  |          2.显示楼层客房信息        |"<<endl;      
    cout<<"                  |                                    |"<<endl;      
    cout<<"                  |          3.查询客人入住情况        |"<<endl;   
    cout<<"                  |                                    |"<<endl;  
    cout<<"                  |          4.修改房间押金            |"<<endl;   
    cout<<"                  |                                    |"<<endl;   
    cout<<"                  |          5.修改客人信息            |"<<endl;   
    cout<<"                  |                                    |"<<endl;   
    cout<<"                  |          6.统计并显示收入          |"<<endl;               
    cout<<"                  |                                    |"<<endl;  
    cout<<"                  |          7.客房入住量排序          |"<<endl;
    cout<<"                  |                                    |"<<endl; 
    cout<<"                  |          8.退出程序                |"<<endl;
    cout<<"                  |                                    |"<<endl;
    cout<<"                  └◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆┘"<<endl; 
    cout<<"                                                        "<<endl;
    cout<<"                             请选择(1-8):              "<<endl;
    int select;
    cin>>select;   
    while(select<1 || select>8){    
    cout<<"选择错误!请重新选择(1-8):";    
    cin.clear();  //当输入字符,清空流错误状态    
    cin.sync();  //清空数据流    
    cin>>select;  
    }   
    return select; 
    } 
    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();        //客房类型入住量排序
    }
    customer[m];  
    Customer::Customer(){  
    name="#";  
    date=0;  
    day=0;  
    money=0;  
    everydaymoney=0;  
    room.id=0;  
    room.floor=0;  
    room.degree=0;  
    room.number=0;  
    room.type=0; 
    }  
    Customer::Customer(string na, int dat, int da, int mo, int emon, int idn, int deg, int ty, int fl, int nu){  
    name=na;
    date=dat;  
    day=da;  
    money=mo;  
    everydaymoney=emon;  
    room.id=idn;  
    room.degree=deg;  
    room.type=ty;  
    room.floor=fl;  
    room.number=nu; 
    }    
    void Customer::input(){                  //客户信息录入  
    int n;  
    cout<<"请输入入住人数"<<endl;  
    cin>>room.number;  
    cout<<endl;  
    for(int i=0;i<room.number;i++){   
    cout<<"这是第"<<i+1<<"个客户的信息"<<endl;   
    cout<<"输入客人姓名:";   
    cin>>customer[i].name;   
    cout<<"入住时间(年/月/日):";   
    cin>>customer[i].date;   
    cout<<"入住期限:";   
    cin>>customer[i].day;   
    cout<<"入住押金:";   
    cin>>customer[i].money;   
    cout<<"每日租金:";   
    cin>>customer[i].everydaymoney;   
    cout<<"房间号:";   
    cin>>customer[i].room.id;   
    cout<<"房间等级(1-经济 2-标准 3-豪华):";   
    cin>>customer[i].room.degree;   
    cout<<"房间类型(1-单人 2-双人 3-三人):";   
    cin>>customer[i].room.type;   
    cout<<"楼层:";   
    cin>>customer[i].room.floor;   
    cout<<endl; 
    }  
    cout<<"输入的信息为:"<<endl;  
    for(int i=0;i<room.number;i++){   
    cout<<"客人姓名"<<customer[i].name;   
    cout<<"\t入住时间:"<<customer[i].date;   
    cout<<"\t入住期限:"<<customer[i].day;   
    cout<<"\t入住押金:"<<customer[i].money;   
    cout<<"\t每日租金:"<<customer[i].everydaymoney;   
    cout<<"\t房间号:"<<customer[i].room.id;   
    cout<<"\t房间等级:";   
    if(customer[i].room.degree==1)    
    cout<<"经济间";   
    else{    
    if(customer[i].room.degree==2)     
    cout<<"标准间";    
    else{     
    if(customer[i].room.degree==3)      
    cout<<"豪华间";    
    }   
    }   
    cout<<"\t房间类型:";   
    if(customer[i].room.type==1)    
    cout<<"单人间";   
    else{    
    if(customer[i].room.type==2)     
    cout<<"双人间";    
    else{     
    if(customer[i].room.type==3)      
    cout<<"三人间";    
    }   
    }   
    cout<<"\t楼层:"<<customer[i].room.floor;   
    cout<<endl;  
    }  
    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();  //关闭文件 
    }  
    int Customer::readIn(){                 //文件读入  
    int i,n;  
    ifstream is("customer.txt",ios_base::in|ios_base::binary);
    if(!is){   
    cout<<"打开失败"<<endl;   
    return 0;  
    }  
    for(i=0;is.read( reinterpret_cast<char *>(customer+i) , sizeof(Customer) );i++)  
    room.number=i;  
    cout<<"导入的表单:"<<endl;  
    for(n=0;n<room.number;n++){  
    cout<<"客人姓名"<<customer[i].name;   
    cout<<"入住时间:"<<customer[i].date;   
    cout<<"入住期限:"<<customer[i].day;   
    cout<<"入住押金:"<<customer[i].money;   
    cout<<"每日租金:"<<customer[i].everydaymoney;   
    cout<<"房间号:"<<customer[i].room.id;   
    cout<<"房间等级:"<<customer[i].room.degree;   
    cout<<"房间类型:"<<customer[i].room.type;   
    cout<<"楼层:"<<customer[i].room.floor;  
    }  
    return 1; 
    }  
    void Customer::alter(){               //修改客户信息  
    int mark = 0;      //设置标记  
    int i,m;  
    string x;  
    cout<<"请输入客户名:";  
    do{   
    cin>>x;   
    cout<<endl;   
    for(i=0;i<room.number;i++){    
    if(customer[i].name==x){     
    mark = 1;     
    cout<<"客人姓名"<<customer[i].name;           
    cout<<"\t入住时间:"<<customer[i].date;           
    cout<<"\t入住期限:"<<customer[i].day;           
    cout<<"\t入住押金:"<<customer[i].money;           
    cout<<"\t每日租金:"<<customer[i].everydaymoney;           
    cout<<"\t房间号:"<<customer[i].room.id;           
    cout<<"\t房间等级:";     
    if(customer[i].room.degree==1)             
    cout<<"经济间";           
    else{            
    if(customer[i].room.degree==2) 
    cout<<"标准间";            
    else{             
    if(customer[i].room.degree==3)            
    cout<<"豪华间";      
    }     
    }            
    cout<<"\t房间类型:";     
    if(customer[i].room.type==1)             
    cout<<"单人间";           
    else{            
    if(customer[i].room.type==2)             
    cout<<"双人间";            
    else{             
    if(customer[i].room.type==3)               
    cout<<"三人间";      
    }        
    }            
    cout<<"\t楼层:"<<customer[i].room.floor;     
    cout<<endl;       
    cout<<"修改信息,请输入:"<<endl;     
    cout<<"输入客人姓名:";              
    cin>>customer[i].name;              
    cout<<"入住时间:";              
    cin>>customer[i].date;              
    cout<<"入住期限:";              
    cin>>customer[i].day;              
    cout<<"每日租金:";               
    cin>>customer[i].everydaymoney;              
    cout<<"房间号:";               
    cin>>customer[i].room.id;               
    cout<<"房间等级(1-经济2-标准3-豪华):";              
    cin>>customer[i].room.degree;               
    cout<<"房间类型(1-单人2-双人3-三人):";              
    cin>>customer[i].room.type;              
    cout<<"楼层:";               
    cin>>customer[i].room.floor;              
    cout<<endl;    
    }    
    else;   
    }   
    if (mark== 0)    
    cout<<"输入错误,请重新输入:"<<endl;   
    }
    while(mark == 0);
    ofstream os("customer.txt",ios_base::out|ios_base::binary);  //创建、打开文件  
    for(m=0;m<room.number;m++){   
    os.write( reinterpret_cast<char*>(&(customer[m])),sizeof(Customer));  //导出文件  
    }  
    os.close();  //关闭文件 
    }  
    void Customer::show(){                //客人入住情况查询  
    int i;  
    for(i=0;i<room.number;i++){   
    cout<<"客人姓名"<<customer[i].name;   
    cout<<"\t入住时间:"<<customer[i].date;   
    cout<<"\t入住期限:"<<customer[i].day;   
    cout<<"\t入住押金:"<<customer[i].money;   
    cout<<"\t每日租金:"<<customer[i].everydaymoney;   
    cout<<"\t房间号:"<<customer[i].room.id;   
    cout<<"\t房间等级:";   
    if(customer[i].room.degree==1)    
    cout<<"经济间";   
    else{    
    if(customer[i].room.degree==2)     
    cout<<"标准间";    
    else{     
    if(customer[i].room.degree==3)      
    cout<<"豪华间";    
    }   
    }   
    cout<<"\t房间类型:";   
    if(customer[i].room.type==1)    
    cout<<"单人间";   
    else{    
    if(customer[i].room.type==2)     
    cout<<"双人间";    
    else{     
    if(customer[i].room.type==3)      
    cout<<"三人间";    
    }   
    }   
    cout<<"\t楼层:"<<customer[i].room.floor;   
    cout<<endl;  
    } 
    }  
    void Customer::findByfloor(){            //显示楼层信息  
    int n;  
    int mark = 0; //设置标记 
    int i;   
    cout<<"请输入楼层:";  
    do{   
    cin>>n;   
    cout<<endl;   
    for(i=0;i<room.number;i++){    
    if(customer[i].room.floor==n){     
    mark = 1;     
    cout<<"信息如下:"<<endl;     
    cout<<"客人姓名:"<<customer[i].name;           
    cout<<"\t入住时间:"<<customer[i].date;           
    cout<<"\t入住期限:"<<customer[i].day;           
    cout<<"\t入住押金:"<<customer[i].money;           
    cout<<"\t每日租金:"<<customer[i].everydaymoney;           
    cout<<"\t房间号:"<<customer[i].room.id;           
    cout<<"\t房间等级:";     
    if(customer[i].room.degree==1)cout<<"经济间";           
    else{            
    if(customer[i].room.degree==2)              
    cout<<"标准间";            
    else{             
    if(customer[i].room.degree==3)            
    cout<<"豪华间";      
    }     
    }           
    cout<<"\t房间类型:";     
    if(customer[i].room.type==1)             
    cout<<"单人间";           
    else{            
    if(customer[i].room.type==2)             
    cout<<"双人间";            
    else{             
    if(customer[i].room.type==3)               
    cout<<"三人间";      
    }        
    }           
    cout<<"\t楼层:"<<customer[i].room.floor;         
    }    
    else;   
    }   
    if (mark== 0)    
    cout<<"输入错误,请重新输入:"<<endl; 
    }
    while(mark == 0); 
    }  
    void Customer::changemoney(){          //押金修改  
    int mark = 0;   //设置标记  
    int i,m;  
    string x;  
    cout<<"请输入客户名:";  
    do{   
    cin>>x;   
    cout<<endl;   
    for(i=0;i<room.number;i++){    
    if(customer[i].name==x){     
    mark = 1;     
    cout<<"客人姓名"<<customer[i].name;           
    cout<<"\t入住时间:"<<customer[i].date;           
    cout<<"\t入住期限:"<<customer[i].day;           
    cout<<"\t入住押金:"<<customer[i].money;           
    cout<<"\t每日租金:"<<customer[i].everydaymoney;           
    cout<<"\t房间号:"<<customer[i].room.id;           
    cout<<"\t房间等级:";     
    if(customer[i].room.degree==1)             
    cout<<"经济间";           
    else{            
    if(customer[i].room.degree==2)              
    cout<<"标准间";            
    else{             
    if(customer[i].room.degree==3)            
    cout<<"豪华间";      
    }     
    }           
    cout<<"\t房间类型:";     
    if(customer[i].room.type==1)             
    cout<<"单人间";           
    else{            
    if(customer[i].room.type==2)             
    cout<<"双人间";           
    else{          
    if(customer[i].room.type==3)   
    cout<<"三人间";    
    } 
    }
    cout<<"\t楼层:"<<customer[i].room.floor;
    cout<<"修改押金,请输入:"<<endl;     
    cin>>customer[i].money;
    cout<<endl;
    }
    else;
    }
    if (mark== 0) 
    cout<<"输入错误,请重新输入:"<<endl;
    }
    while(mark == 0);  
    ofstream os("customer.txt",ios_base::out|ios_base::binary);  //创建、打开文件 
    for(m=0;m<room.number;m++){ 
    os.write( reinterpret_cast<char*>(&(customer[m])),sizeof(Customer) );  //导出文件  
    } 
    os.close();  //关闭文件 
    }  
    void Customer::print(){              //统计收入  
    int n=0; 
    for(int i=0;i<room.number;i++){ 
    n+=customer[i].everydaymoney*customer[i].day;     //每日租金*入住天数  
    } 
    cout<<"目前为止的收入为:"<<n<<"元"<<endl;
    } 
    void Customer::rank(){         //客房类型入住量排序
    int choose;
    int m1=0,m2=0,m3=0;
    int n1=0,n2=0,n3=0;
    cout<<"1.按房间等级排序;"<<endl; 
    cout<<"2.按房间人数排序;"<<endl; 
    cout<<"输入你的选择:"<<endl; 
    cin>>choose;
    switch(choose){
    case 1:
    for(int i=0;i<room.number;i++){ 
    if(customer[i].room.degree==1){
    n1+=customer[i].room.degree;
    }
    if(customer[i].room.degree==2){
    n2+=customer[i].room.degree;
    }
    if(customer[i].room.degree==3){
    n3+=customer[i].room.degree;
    }
    } 
    if((n1>n2 && n1>n3) && (n2>n3))
    cout<<"1.经济间"<<endl;
    cout<<"2.标准间"<<endl;
    cout<<"3.豪华间"<<endl;
    if((n1>n2 && n1>n3) && (n3>n2))
    cout<<"1.经济间"<<endl;
    cout<<"2.豪华间"<<endl;
    cout<<"3.标准间"<<endl;
    if((n3>n1 && n3>n2) && (n1>n2))
    cout<<"1.豪华间"<<endl;
    cout<<"2.经济间"<<endl;
    cout<<"3.标准间"<<endl;
            if((n3>n1 && n3>n2) && (n2>n1))
    cout<<"1.豪华间"<<endl;
    cout<<"2.标准间"<<endl;
    cout<<"3.经济间"<<endl;
    if((n2>n1 && n2>n3) && (n1>n3))
    cout<<"1.标准间"<<endl;
    cout<<"2.经济间"<<endl;
    cout<<"3.豪华间"<<endl;
    if((n2>n1 && n2>n3) && (n3>n1))
    cout<<"1.标准间"<<endl;
    cout<<"2.豪华间"<<endl;
    cout<<"3.经济间"<<endl;
    break;
    case 2:  
    for(int i=0;i<room.number;i++){ 
    if(customer[i].room.type==1){
    m1+=customer[i].room.degree;
    }
    if(customer[i].room.type==2){
    m2+=customer[i].room.degree;
    }
    if(customer[i].room.type==3){
    m3+=customer[i].room.degree;
    }
    } 
    if((m1>m2 && m1>m3) && (m2>m3))
    cout<<"1.单人间"<<endl;
    cout<<"2.双人间"<<endl;
    cout<<"3.三人间"<<endl;
    if((m1>m2 && m1>m3) && (m3>m2))
    cout<<"1.单人间"<<endl;
    cout<<"2.三人间"<<endl;
    cout<<"3.双人间"<<endl;
    if((m3>m1 && m3>m2) && (m1>m2))
    cout<<"1.三人间"<<endl;
    cout<<"2.单人间"<<endl;
    cout<<"3.双人间"<<endl;
            if((m3>m1 && m3>m2) && (m2>m1))
    cout<<"1.三人间"<<endl;
    cout<<"2.双人间"<<endl;
    cout<<"3.单人间"<<endl;
    if((m2>m1 && m2>m3) && (m1>m3))
    cout<<"1.双人间"<<endl;
    cout<<"2.单人间"<<endl;
    cout<<"3.三人间"<<endl;
    if((m2>m1 && m2>m3) && (m3>m1))
    cout<<"1.双人间"<<endl;
    cout<<"2.三人间"<<endl;
    cout<<"3.单人间"<<endl;
    break;
    default:
    cout<<"输入错误,请重新输入!"<<endl;
    }
    }
    void Customer::run(){
    bool userExited=false;   
    while(!userExited){ 
    int userSelection=myMenu.MainMenu();
    switch(userSelection){  
    case 1:             //客人信息录入    
    input(); 
    break;
    case 2: //显示楼层信息   
    findByfloor(); 
    break;  
    case 3:             //客人入住情况查询  
    show(); 
    break; 
    case 4:             //押金修改   
    changemoney();  
    break;  
    case 5:             //修改客人信息  
    alter();  
    break;  
    case 6:             //统计收入
    print(); 
       break;  
    case 7:             //客房类型入住量排序
    rank();
    break;
    case 8:             //退出系统   
    userExited=true;  
    }   
    if(userSelection!=8){   
    cout<<"流程将返回主界面,";  
    system("pause");  
    }   
    else   
    cout<<"你选择了退出功能,程序将结束运行!"; 
    }
    } 
    int main(){ 
    Customer myApp; 
    myApp.run();
    return 0;
    }

     

    展开全文
  • 酒店客房管理系统(C语言)

    千次阅读 多人点赞 2020-06-14 15:00:39
    酒店客房管理系统 设计目标:设计一个酒店客房管理系统,用C语言实现。对该系统的要求如下: 一、需求描述: 系统角色: 1.总台服务员 能够根据住客需求完成住客登记任务,并完成客房管理功能。 1)登记入住功能 2)...

    酒店客房管理系统
    设计目标:设计一个酒店客房管理系统,用C语言实现。对该系统的要求如下:
    一、需求描述:
    系统角色:
    1.总台服务员
    能够根据住客需求完成住客登记任务,并完成客房管理功能。
    1)登记入住功能
    2)结账功能
    3)查询房间功能
    4)客房信息打印
    5)统计功能

    2.系统管理员
    能够添加、删除和修改系统用户(总台服务员),设置用户权限。包括
    1)添加新用户
    2)删除用户
    3)修改用户权限

    二、系统流程描述:
    系统启动则进入登陆菜单。
    1.登陆流程
    (1)程序运行,显示登陆界面,请用户输入角色、账号及密码。
    (2)用户输入账号密码后,系统校验正确与否,正确则进入功能菜单。错误则提示输入错误,继续显示登陆界面。
    2.总台服务员使用流程描述:
    1)主界面:
    总台服务员登陆成功后,系统显示功能菜单:“1. 登记入住 2. 结账3.查询客房信息 4.客房信息打印6.客房统计7.退出”。
    2)登记入住
    (1)服务员输入数字1,系统进入登记入住界面,要求总台服务员输入客户信息及房间信息。
    (2)总台服务员输入客户姓名、性别、年龄、身份证号、所需房间类型、房间号、房间单价、入住天数。
    (3)系统根据输入信息显示应付费用。总台服务员收取费用后输入收费金额。系统在客房记录中添加该客户的记录并写入磁盘。
    (4)系统应保证在所需房间不足时报告错误。
    3)结账
    (1)服务员输入数字2,系统进入结账界面,要求总台服务员输入房间信息。
    (2)总台服务员输入房间号,系统显示客户名称、房间单价、入住天数、总金额、应付房款、实付房款、欠费金额或退款额等相关信息。并提示总台服务员收取欠费金额或退还押金。
    (3)总台服务员输入补交房款或退还押金数额后,系统将该客户的入住记录放入历史入住记录中。并将该房间设置为空闲。
    4)查询客房信息
    (1)服务员输入数字3,系统进入查询界面,并显示“1.按顾客名称查询 2.按房间号查询”。
    (2)总台服务员输入1.系统提示服务员输入顾客名称,输入后,系统显示该顾客的入住记录,包括顾客信息及入住房间号、房间单价、入住天数、总金额等相关信息。 如无该顾客的信息则打印“没有此客户的入住信息。”
    (3)总台服务员输入2.系统提示服务员输入房间号及查询起止时间。输入房间号及起止时间后,系统显示该房间从起始时间到结束时间的入住客户的姓名、身份证号、入住天数等信息。
    5)客房信息打印
    服务员输入数字4,系统进入客房信息打印界面。系统打印所有房间信息,按房间号排序,包括房间号、房间类型、是否有人入住、入住人数、入住天数等信息。
    6)客房统计
    服务员输入数字5,系统进入客房统计界面。系统打印本日的入住人数、入住房间数、空置房间数、入住率统计、空房率统计、实收房款。
    7)退出
    服务员选择退出,则系统返回到登陆界面。

    3.系统管理员使用流程
    1)主界面:
    管理员登陆成功后,系统显示功能菜单:“1.用户资料打印 2.添加用户 3.删除用户 4.修改用户权限 5退出”
    2)用户资料打印:
    管理员选择用户资料打印功能,则进入用户资料打印界面,提示管理员输入用户账号,管理员输入后,系统打印该用户的账号、密码、角色、权限等信息。
    3)添加用户
    管理员选择添加用户功能,则进入添加用户界面,提示管理员输入用户账号和初始密码。管理员输入后,系统打印该用户相关信息并返回主界面。
    4)删除用户
    管理员选择删除用户功能,则进入删除用户界面,提示管理员输入要删除的用户账号。管理员输入后,系统提示已删除该用户信息并返回主界面。
    5)修改用户权限
    管理员选择修改用户权限功能,则进入修改用户权限界面,提示管理员输入要修改的用户账号。管理员输入后,系统打印该用户的权限,并提示管理员输入要修改后的权限,管理员输入后,系统打印该用户的信息并返回主界面。
    6)退出
    管理员选择退出,则系统返回到登陆界面。

    1)声明部分

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<Windows.h>
    #include<string.h>
    #define LEN sizeof(struct hotel)
    typedef struct hotel
    {
    	int might1;//管理员访问权限1
    	int might2;//服务员访问权限2
    	int might3;//客房访问权限3
    	char account[20];//账户
    	char possword[20];//密码
    	char name[20];//姓名
    	char sex[5];//性别
    	int age;//年龄
    	char ID[20];//身份证号
    	char time[20];//入住时间
    	char phone[20];//联系电话
    	char room[15];//房间类型
    	int numder;//房间号
    	int price;//房间单价
    	int day;//入住天数
    	int cope;//总价
    	int payment;//
    	int debt;
    	char manage[5];//是否结账
    	struct hotel *next;//
    }LinkList;
    void menu1(struct hotel *p);
    void menu22(struct hotel *p);
    void menu2(struct hotel *p);
    void menu33(struct hotel *p);
    void menu3(struct hotel *p);
    void ADD(LinkList *p);//添加客户
    void ADD1(LinkList *p);//添加服务员
    void amend(LinkList *p);//修改自己或服务员的密码
    void Remove(LinkList *p);//删除服务员
    void Seller(LinkList *p);//客房结账
    void amend2(LinkList *p);//修改客户信息
    void Inquire(LinkList *p);//客房查询
    void statistics1(LinkList *p);//某日客房统计
    void statistics3(LinkList *p);//客房统计
    void statistics2(LinkList *p);//服务员统计
    void set(LinkList *p);//设置房间数量
    void statistics(LinkList *p);//客房打印
    

    2)添加客户

    void ADD(LinkList *p)
    {
    	struct hotel *q, *n = p;
    	struct hotel *h = p->next;
    	struct hotel *m = p->next;
    	int flag = 0;
    	system("cls");
    	q = (struct hotel *)malloc(sizeof(struct hotel));
    	q->next = NULL;
    	printf("请依次输入:客户姓名,性别,年龄,ID,入住时间(年.月.日),联系电话\n");
    	scanf("%s%s%d%s%s%s", q->name, q->sex, &q->age, q->ID, q->time, q->phone);
    	printf("请依次输入客户的:房间类型,房间号,房间单价,入住天数,付款\n");
    	scanf("%s%d%d%d%d", q->room, &q->numder, &q->price, &q->day, &q->payment);
    	strcpy(q->manage, "NO");
    	getchar();
    	q->cope = q->price *q->day;
    	q->debt = q->cope - q->payment;
    	q->might1 = 0;
    	q->might2 = 0;
    	q->might3 = 3;
    	strcpy(q->account, "0");
    	strcpy(q->possword, "0");
    	if (q->numder>m->age)
    	{
    		printf("超出房间限额!\n");
    		Sleep(2000);
    		menu3(p);
    	}
    	while (h != NULL)
    	{
    		if (h->numder == q->numder &&strcmp(h->manage, "NO") == 0)
    		{
    			flag = 1;
    			printf("此房间客户暂未退房");
    			Sleep(1000);
    			ADD(p);
    			break;
    		}
    		h = h->next;
    	}
    	while (n->next != NULL)
    	{
    		n = n->next;
    	}
    	n->next = q;
    	if (flag == 0)
    	{
    		printf("\t添加成功\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	else
    		printf("\t添加失败\n");
    	getchar();
    	menu3(p);
    }
    

    3)添加服务员

    void ADD1(LinkList *p)
    {
    	struct hotel *q, *n = p;
    	struct hotel *h = p->next;
    	int flag = 0;
    	system("cls");
    	q = (struct hotel *)malloc(sizeof(struct hotel));
    	q->next = NULL;
    	printf("请输入添加的账号\n");
    	scanf("%s", q->account);
    	printf("请输入添加的密码\n");
    	scanf("%s", q->possword);
    	getchar();
    	q->might1 = 0;
    	q->might2 = 2;
    	q->might3 = 0;
    	strcpy(q->name, "0");
    	strcpy(q->sex, "0");
    	q->age = 0;
    	strcpy(q->ID, "0");
    	strcpy(q->room, "0");
    	strcpy(q->manage, "0");
    	strcpy(q->time, "0");
    	strcpy(q->phone, "0");
    	q->numder = 0;
    	q->price = 0;
    	q->day = 0;
    	q->debt = 0;
    	q->payment = 0;
    	q->cope = 0;
    	while (h != NULL)
    	{
    		if (strcmp(h->account, q->account) == 0)
    		{
    			flag = 1;
    			printf("账号重复!");
    			Sleep(1000);
    			menu2(p);
    			break;
    		}
    		h = h->next;
    	}
    	while (n->next != NULL)
    	{
    		n = n->next;
    	}
    	n->next = q;
    	if (flag == 0)
    	{
    		printf("\t添加成功\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	else
    		printf("\t添加失败\n");
    	getchar();
    	menu2(p);
    }
    

    4)修改密码或账户

    void amend(LinkList *p)
    {
    	struct hotel *q = p->next;
    	char acc[20], poss[20], ac[20];
    	int flag = 0, i;
    	system("cls");
    	printf("请输入要修改的账号:");
    	scanf("%s", acc);
    	while (q != NULL)
    	{
    		if (strcmp(q->account, acc) == 0)
    		{
    			flag = 1;
    			printf("1.仅修改密码\n2.密码账户均修改\n");
    			scanf("%d", &i);
    			if (i == 1)
    			{
    				printf("请输入新密码:");
    				scanf("%s", poss);
    				strcpy(q->possword, poss); break;
    			}
    			if (i == 2)
    			{
    				printf("请输入新账号:");
    				scanf("%s", ac);
    				getchar();
    				printf("请输入新密码:");
    				scanf("%s", poss);
    				strcpy(q->account, ac);
    				strcpy(q->possword, poss); break;
    			}
    		}
    		q = q->next;
    	}
    	if (flag == 0)
    	{
    		printf("账户错误!\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	if (flag == 1)
    	{
    		printf("修改成功!\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	getchar();
    	getchar();
    	menu2(p);
    }
    

    5)修改客户信息

    void amend2(LinkList *p)
    {
    	struct hotel *q = p->next;
    	int i, j = 0, k;
    	char na[20], se[5], I[20], ti[20], Ph[20], roo[15];
    	int ag, nu, pr, da;
    	system("cls");
    	printf("请输入修改内容的房间号:\n");
    	scanf("%d", &nu);
    	while (q != NULL)
    	{
    		if (q->numder == nu)
    		{
    			printf("请选择将要修改的内容:\n");
    			printf("1.姓名\n");
    			printf("2.性别\n");
    			printf("3.年龄\n");
    			printf("4.身份证号\n");
    			printf("5.联系电话\n");
    			printf("6.入住时间\n");
    			printf("7.房间号");
    			printf("8.房间类型\n");
    			printf("9.房间单价\n");
    			printf("10.入住天数\n");
    			printf("11.返回上一层\n");
    			scanf("%d", &i);
    			switch (i)
    			{
    			case 1:printf("请输入新修改的姓名\n"); scanf("%s", na); j = 1; strcpy(q->name, na); break;
    			case 2:printf("请输入新修改的性别\n"); scanf("%s", se); j = 1; strcpy(q->sex, se); break;
    			case 3:printf("请输入新修改的年龄\n"); scanf("%d", &ag); j = 1; q->age = ag; break;
    			case 4:printf("请输入新修改的身份证号\n"); scanf("%s", I); j = 1; strcpy(q->ID, I); break;
    			case 5:printf("请输入新修改的联系电话\n"); scanf("%s", Ph); j = 1; strcpy(q->phone, Ph); break;
    			case 6:printf("请输入新修改的入住时间\n"); scanf("%s", ti); j = 1; strcpy(q->time, ti); break;
    			case 7:printf("请输入新修改的房间号\n"); scanf("%d", &nu); j = 1; q->numder = nu; break;
    			case 8:printf("请输入新修改的房间类型\n"); scanf("%s", roo); j = 1; strcpy(q->room, roo); break;
    			case 9:printf("请输入新修改的房间单价\n"); scanf("%d", &pr); j = 1; q->price = pr; q->cope = (q->price)*(q->day); q->debt = q->cope - q->payment; break;
    			case 10:printf("请输入新修改的入住天数\n"); scanf("%d", &da); j = 1; q->day = da; q->cope = q->price*q->day; q->debt = q->cope - q->payment; break;
    			case 11:menu3(p); break;
    			default:printf("请输入合法量!\n"); break;
    			}
    		}
    		q = q->next;
    	}
    	if (j == 1)
    	{
    		printf("修改成功!\n");
    	}
    	if (j == 0)
    	{
    		printf("修改失败\n");
    	}
    	printf("按回车键返回\n");
    	getchar();
    	getchar();
    	menu3(p);
    }
    

    6)删除

    void Remove(LinkList *p)
    {
    	struct hotel *n = p->next;
    	struct hotel *h = p->next->next;
    	int flag = 0;
    	char acc[20];
    	system("cls");
    	printf("请输入要删除的账户:");
    	scanf("%s", acc);
    	while (h != NULL)
    	{
    		if (strcmp(h->account, acc) == 0)
    		{
    			n->next = h->next;
    			flag = 1;
    			free(h); break;
    		}
    		n = h;
    		h = h->next;
    	}
    	if (flag == 1)
    	{
    		printf("删除成功!\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	if (flag == 0)
    	{
    		printf("删除失败!\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	getchar();
    	getchar();
    	menu2(p);
    }
    

    7)结账

    void Seller(LinkList *p)
    {
    	struct hotel *q = p->next;
    	char man[5];
    	int nu, i;
    	int flag = 0;
    	system("cls");
    	printf("请输入该客户房间号:");
    	scanf("%d", &nu);
    	while (q != NULL)
    	{
    		if ((q->numder == nu)&&strcmp(q->manage,"NO")==0)
    		{
    			flag = 1;
    			printf("客户:%s 身份证号:%s 房间号:%d 房间单价:%d 入住天数:%d 实付:%d  再付:%d  共计%d元\n", q->name, q->ID, q->numder, q->price, q->day, q->payment, q->debt, q->cope);
    			printf("再付%d\n", q->debt);
    			printf("1.确定结账\n2.返回\n");
    			scanf("%d", &i);
    			switch (i)
    			{
    			case 1:q->debt = 0; q->payment = q->cope; strcpy(q->manage, "YES"); break;
    			case 2:menu3(p); break;
    			}
    		}
    		q = q->next;
    	}
    	if (flag == 0)
    	{
    		printf("\t无该客户信息\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	else
    	{
    		printf("结账成功\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	getchar();
    	getchar();
    	menu3(p);
    }
    

    8)客房查询

    void Inquire(LinkList *p)
    {
    	struct hotel *q = p->next;
    	int nu;
    	char na[20];
    	int a;
    	int flag = 0;
    	system("cls");
    	printf("1.按照姓名查询;\n2.按照房间号查询;\n");
    	scanf("%d", &a);
    	getchar();
    	if (a == 1)
    	{
    		printf("请输入姓名:");
    		scanf("%s", na);
    		while (q != NULL)
    		{
    			if (strcmp(q->name, na) == 0)
    			{
    				flag = 1;
    				printf("姓名:%s 性别:%s 年龄:%d 身份证号:%s 入住时间:%s 联系电话:%s", q->name, q->sex, q->age, q->ID, q->time, q->phone);
    				printf("房间类型:%s 房间号:%d 房间单价:%d 入住天数:%d 总计:%d   实付:%d 再付:%d  是否结账:%s\n", q->room, q->numder, q->price, q->day, q->cope, q->payment, q->debt, q->manage);
    			}
    			q = q->next;
    		}
    	}
    	if (a == 2)
    	{
    		printf("请输入房间号:");
    		scanf("%d", &nu);
    		while (q != NULL)
    		{
    			if (q->numder == nu)
    			{
    				flag = 1;
    				printf("姓名:%s 性别:%s 年龄:%d 身份证号:%s 入住时间:%s 联系电话:%s", q->name, q->sex, q->age, q->ID, q->time, q->phone);
    				printf("房间类型:%s 房间号:%d 房间单价:%d 入住天数:%d 总计:%d  实付:%d 再付:%d  是否结账:%s\n", q->room, q->numder, q->price, q->day, q->cope, q->payment, q->debt, q->manage);
    			}
    			q = q->next;
    		}
    	}
    	if (flag == 0)
    	{
    		printf("\t无该客户信息\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	if (flag == 1)
    	{
    		printf("\t查询结束\n");
    		printf("\t请按回车键返回菜单\n");
    	}
    	getchar();
    	getchar();
    	menu3(p);
    }
    

    9)某日客房统计

    void statistics1(LinkList *p)
    {
    	struct hotel *q = p->next;
    	int m = 0, i = 0;
    	float a = 0, b = 0, c = 0,k=0;
    	char tim[20];
    	system("cls");
    	printf("请输入统计时间:\n");
    	scanf("%s", tim);
    	while (q != NULL)
    	{
    		if (strcmp(q->time, tim) == 0)
    		{
    			a = a + 1;
    			if (m == 0)
    			{
    				printf("%s结账房间有\n", tim);
    				m = m + 1;
    			}
    			if (strcmp(q->manage, "YES") == 0)
    			{
    				printf("%d\n", q->numder);
    				k= k+1;
    				b = b + 1;
    			}
    			if (b == 0)
    			{
    				printf("无\n");
    				b = b + 1;
    			}
    			if (i == 0)
    			{
    				printf("%s入住房间有\n", tim);
    				i = i + 1;
    			}
    			if (strcmp(q->manage, "NO") == 0)
    			{
    				printf("%d\n", q->numder);
    				c = c + 1;
    			}
    			if (c == 0)
    			{
    				printf("无入住\n");
    			}
    		}
    		q = q->next;
    	}
    	if (a != 0)
    	{
    		printf("此日结账率:百分之%0.0f %\n", (k / a) * 100);
    		printf("此日入住率:百分之%0.0f %\n\n", (c / a) * 100);
    	}
    	if (a == 0)
    
    	{
    		printf("\t暂时无客户信息\n");
    	}
    	printf("\t请按回车键返回菜单\n");
    	getchar();
    	getchar();
    	menu3(p);
    }
    

    10)客房统计

    void statistics3(LinkList *p)
    {
    	struct hotel *q = p->next->next;
    	struct hotel *n = p->next;
    	float m = p->next->age;
    	int i, j = 0, k, c = 1;
    	float a = 0, b = 0;
    	system("cls");
    	printf("空置房间有:\n");
    	for (i = 1; i <= m; i++)
    	{
    		j = 0;
    		q = p->next;
    		while (q != NULL)
    		{
    			if (i == q->numder&&strcmp(q->manage, "NO") == 0)
    			{
    				c++;
    				j = 1;
    			}
    			q = q->next;
    		}
    		if (j == 0)
    		{
    			printf("%d  ", i);
    			c++;
    		}
    		a++;
    	}
    	q = p->next;
    	printf("\n");
    	printf("暂住房间有:\n");
    	while (q != NULL)
    	{
    		if (strcmp(q->manage, "NO") == 0)
    		{
    			printf("%d   ", q->numder);
    			b++;
    			k = 1;
    		}
    		q = q->next;
    	}
    	if (k = 0)
    	{
    		printf("暂无入住!\n");
    	}
    	printf("\n");
    	printf("当前空房率:百分之%0.0f\n", ((m - b) / m) * 100);
    	printf("当前住房率:百分之%0.0f\n", (b / m) * 100);
    	printf("按回车键返回主菜单!\n");
    	getchar();
    	getchar();
    	menu3(p);
    }
    

    11)服务员统计

    void statistics2(LinkList *p)
    {
    	struct hotel *q = p->next;
    	int c = 0, i = 0;
    	system("cls");
    	while (q != NULL)
    	{
    		if (i == 0)
    		{
    			printf("账号   密码\n");
    			i = 2;
    		}
    		if (q->might2 == 2)
    		{
    			printf("%s  %s\n", q->account, q->possword);
    			c = c + 1;
    		}
    		q = q->next;
    	}
    	if (c == 0)
    	{
    		printf("暂无服务员信息\n");
    	}
    	printf("\t请按回车键返回菜单\n");
    	getchar();
    	getchar();
    	menu2(p);
    }
    

    12)设置房间数量

    void set(LinkList *p)
    {
    	struct hotel *q = p->next;
    	system("cls");
    	printf("当前房间数量为:%d\n", q->age);
    	printf("请输入房间数量:\n");
    	scanf("%d", &(q->age));
    	printf("设置成功!\n");
    	printf("按回车键返回菜单!\n");
    	getchar();
    	getchar();
    	menu2(p);
    }
    

    13)客房打印

    void statistics(LinkList *p)
    {
    	struct hotel *q = p->next;
    	system("cls");
    	if (q == NULL)
    	{
    		printf("\t暂时无客户信息\n");
    	}
    	else
    	{
    		printf("姓名    性别 年龄 身份证号           入住时间          联系电话     房间类型 房间号 房间单价 入住天数 共计 实付 再付  是否结账 \n");
    		while (q != NULL)
    		{
    			if (q->might3 == 3)
    			{
    				printf("%s %s %d %s %s %s %s %d %d %d %d %d %d %s \n", q->name, q->sex, q->age, q->ID, q->time, q->phone, q->room, q->numder, q->price, q->day, q->cope, q->payment, q->debt, q->manage);
    			}
    			q = q->next;
    		}
    	}
    	printf("\t请按回车键返回菜单\n");
    	getchar();
    	getchar();
    	menu3(p);
    }
    

    14)读入磁盘文件

    void saveHotelFile(LinkList *L)
    {
    	FILE *fp;
    	LinkList *p;
    	p = L->next;
    	fp = fopen("hotel.txt", "w");
    	if (fp == NULL)
    	{
    		printf("无法打开此文件\n");
    		exit(0);
    	}
    	while (p)
    	{
    		fprintf(fp, "%d %d %d %s %s %s %s %d %s %s %s %s %d %d %d %d %d %d %s \n", p->might1, p->might2, p->might3, p->account, p->possword, p->name, p->sex, p->age, p->ID, p->time, p->phone, p->room, p->numder, p->price, p->day, p->cope, p->payment, p->debt, p->manage);
    		p = p->next;
    	}
    	fclose(fp);
    }
    

    15)开辟节点

    void ListInsert(LinkList *L, LinkList *n)
    {
    	LinkList *q = L;
    	n->next = NULL;
    	while (q->next != NULL)
    	{
    		q = q->next;
    	}
    	q->next = n;
    }
    

    16)向链表读取

    void readHotelput(LinkList* L)
    {
    	FILE* fp;
    	LinkList* n;
    	LinkList* m;
    	char ch;
    	char acc[20], po[20], na[20], se[5], I[20], ti[20], Ph[20], roo[15], man[5], a[20], b[20];
    	int mi1, mi2, mi3, ag, nu, pr, da, co, s, pa, de;
    	fp = fopen("hotel.txt", "r");
    	if (fp == NULL)
    	{
    		fp = fopen("hotel.txt", "w");
    	}
    	else
    	{
    		if (fgetc(fp) == -1)
    		{
    			printf("此程序为首次使用,请自定义账号和密码\n");
    			printf("账号:\n");
    			scanf("%s", a);
    			getchar();
    			printf("密码:\n");
    			scanf("%s", b);
    			getchar();
    			m = (LinkList*)malloc(sizeof(LinkList));
    			strcpy(m->account, a);//初始账户
    			strcpy(m->possword, b);//初始密码
    			strcpy(m->name, "0");
    			strcpy(m->sex, "0");
    			strcpy(m->ID, "0");
    			strcpy(m->room, "0");
    			strcpy(m->manage, "0");
    			strcpy(m->time, "0");
    			strcpy(m->phone, "0");
    			m->might1 = 1;
    			m->might2 = 0;
    			m->might3 = 0;
    			m->age = 0;
    			m->numder = 0;
    			m->price = 0;
    			m->day = 0;
    			m->debt = 0;
    			m->payment = 0;
    			m->cope = 0;
    			m->next = NULL;
    			L->next = m;
    		}
    		if (fgetc(fp) != -1)
    		{
    			fseek(fp, -2L, 1);
    		}
    		while (!feof(fp))
    		{
    			fscanf(fp, "%d %d %d %s %s %s %s %d %s %s %s %s %d %d %d %d %d %d %s ", &mi1, &mi2, &mi3, acc, po, na, se, &ag, I, ti, Ph, roo, &nu, &pr, &da, &co, &pa, &de, man);
    			n = (LinkList*)malloc(sizeof(LinkList));
    			strcpy(n->account, acc);
    			strcpy(n->possword, po);
    			strcpy(n->name, na);
    			strcpy(n->sex, se);
    			strcpy(n->ID, I);
    			strcpy(n->time, ti);
    			strcpy(n->phone, Ph);
    			strcpy(n->room, roo);
    			strcpy(n->manage, man);
    			n->might1 = mi1;
    			n->might2 = mi2;
    			n->might3 = mi3;
    			n->age = ag;
    			n->numder = nu;
    			n->price = pr;
    			n->day = da;
    			n->debt = de;
    			n->payment = pa;
    			n->cope = co;
    			ListInsert(L, n);
    			/*n=n->next;*/
    		}
    	}
    	fclose(fp);
    }
    

    17)判断是否为服务员

    void menu33(struct hotel *p)
    {
    	int i = 0;
    	struct hotel *h = p->next->next;
    	char a[20], b[20];
    	system("cls");
    	printf("请输入账户:");
    	scanf("%s", a);
    	getchar();
    	printf("请输入密码:");
    	scanf("%s", b);
    	getchar();
    	while (h != NULL)
    	{
    		if ((strcmp(h->account, a) == 0) && (strcmp(h->possword, b) == 0) && h->might2 == 2)
    		{
    			i = 1;
    			menu3(p); break;
    		}
    		h = h->next;
    	}
    	if (i == 0)
    	{
    		Sleep(1500);
    		printf("密码或账号错误!\n");
    		menu1(p);
    	}
    }
    

    18)页面3

    void menu3(struct hotel *p)
    {
    	int i;
    	system("cls");
    	while (1)
    	{
    		printf("\t--------------------------\n"); Sleep(50);
    		printf("\t **欢迎登陆酒店管理系统** \n"); Sleep(50);
    		printf("\t| 1.登记入住             |\n"); Sleep(50);
    		printf("\t| 2.结账                 |\n"); Sleep(50);
    		printf("\t| 3.修改客户信息         |\n"); Sleep(50);
    		printf("\t| 4.查询客房信息         |\n"); Sleep(50);
    		printf("\t| 5.某日客房信息统计     |\n"); Sleep(50);
    		printf("\t| 6.客房统计             |\n"); Sleep(50);
    		printf("\t| 7.客房信息打印         |\n"); Sleep(50);
    		printf("\t| 8.返回上一层           |\n"); Sleep(50);
    		printf("\t| 9.退出(保存)         |\n"); Sleep(50);
    		printf("\t--------------------------\n");
    		printf("\t请选择您要进行的操作:\n");
    		scanf("%d", &i);
    		switch (i)
    		{
    		case 1:ADD(p); break;
    		case 2:Seller(p); break;
    		case 3:amend2(p); break;
    		case 4:Inquire(p); break;
    		case 5:statistics1(p); break;
    		case 6:statistics3(p); break;
    		case 7:statistics(p); break;
    		case 8:menu1(p); break;
    		case 9:saveHotelFile(p); exit(0);
    		default:printf("\t输入不合法量\n"); Sleep(1500); system("cls");
    		}
    	}
    }
    

    19)判断是否为管理员

    void menu22(struct hotel *p)
    {
    	struct hotel *h = p->next;
    	char a[20], b[20];
    	int i = 0;
    	system("cls");
    	printf("请输入账户:");
    	scanf("%s", a);
    	getchar();
    	printf("请输入密码:");
    	scanf("%s", b);
    	getchar();
    	while (h != NULL)
    	{
    		if ((strcmp(h->account, a) == 0) && (strcmp(h->possword, b) == 0) && h->might1 == 1)
    		{
    			i = 1;
    			menu2(p); break;
    		}
    		h = h->next;
    	}
    	if (i == 0)
    	{
    		Sleep(1500);
    		printf("密码或账号错误!\n");
    		menu1(p);
    	}
    }
    

    20)页面2

    void menu2(struct hotel *p)
    {
    	int c;
    	system("cls");
    	while (1)
    	{
    		printf("\t---------------------------\n"); Sleep(50);
    		printf("\t **请选择您要进行的操作**  \n"); Sleep(50);
    		printf("\t|	1.添加服务员            |\n"); Sleep(50);
    		printf("\t|	2.修改账户或密码        |\n"); Sleep(50);
    		printf("\t|	3.删除服务员            |\n"); Sleep(50);
    		printf("\t|	4.统计服务员信息        |\n"); Sleep(50);
    		printf("\t|	5.返回上一层            |\n"); Sleep(50);
    		printf("\t|	6.设置房间数量          |\n"); Sleep(50);
    		printf("\t|	7.退出(保存)          |\n");
    		printf("\t---------------------------\n");
    		printf("\t请选择您要进行的操作:\n");
    		scanf("%d", &c);
    		switch (c)
    		{
    		case 1:ADD1(p); break;
    		case 2:amend(p); break;
    		case 3:Remove(p); break;
    		case 4:statistics2(p); break;
    		case 5:menu1(p); break;
    		case 6:set(p); break;
    		case 7:saveHotelFile(p); exit(0);
    		default:printf("请输入合法量!\n"); Sleep(1500); system("cls");
    		}
    	}
    }
    

    21)页面1

    void menu1(struct hotel *p)
    {
    	int a;
    	system("cls");
    	while (1)
    	{
    		printf("\t_________________________\n"); Sleep(50);
    		printf("\t|  欢迎进入酒店管理系统 |\n"); Sleep(50);
    		printf("\t|   **请选择您的身份**  |\n"); Sleep(50);
    		printf("\t|  1.管理员            |\n"); Sleep(50);
    		printf("\t|  2.服务员            |\n"); Sleep(50);
    		printf("\t|  3.退出              |\n"); Sleep(50);
    		printf("\t_________________________\n\n");
    		printf("\t请选择您要进行的操作:\n");
    		scanf("%d", &a);
    		switch (a)
    		{
    		case 1:menu22(p); break;
    		case 2:menu33(p); break;
    		case 3:saveHotelFile(p); exit(0);
    		default:printf("请输入合法量!\n"); Sleep(1000); menu1(p);
    		}
    	}
    }
    

    22主函数

    int main()
    {
    	LinkList *p;
    	p = (struct hotel *)malloc(sizeof(struct hotel));
    	p->next = NULL;
    	readHotelput(p);
    	menu1(p);
    	/*saveHotelFile(p);*/
    	system("pause");
    	return 0;
    }
    

    稍微改了一下,管理员初始账号和密码可以自定义,有了管理员的密码和账号之后才可以添加服务员哦。
    这个代码使用传首地址的方法,也可以通过设置静态指针存首尾地址,这样会更简单。如果有什么好的想法,欢迎大家在评论区与我交流。
    本编这里还有其它程序,比如ATM,宿舍管理,火车站票务管理,需要的可以私我。

    展开全文
  • 客房管理系统充分利用了信息技术提高宾馆客房的管理水平和服务水平。系统可以实现新增客户、删除客户、客户与客房信息查询、退房等功能。管理者可以方便及时的了解宾馆的运营情况,找出运营规律,为其经营决策提供...
  • 如何在激烈的竞争中生从发展,是每一...因此,采用全新的计算机网络和宾馆管理系统,已成为提高宾馆的管理效率,改善服务的水准备的重要手段之一。在某种意义上,宾馆客房管理方面的信息话已成为现代化宾馆的重要标志。
  • 基于UML的酒店客房管理系统设计,包含数据库设计
  • 这是我之前用c做过的一个酒店客房管理系统,做了挺久(可能因为学艺不精),有的部分可能考虑还不是很周全。发出来希望大家能给点建议什么的。(小白勿喷) #define _CRT_SECURE_NO_WARNINGS //这句命令可以防止在...
    1. 这是我之前用c做过的一个酒店客房管理系统,做了挺久(可能因为学艺不精),有的部分可能考虑还不是很周全。发出来希望大家能给点建议什么的。(小白勿喷)

    #define _CRT_SECURE_NO_WARNINGS
    //这句命令可以防止在c++语言中strcpy,scanf,puts()等不安全函数
    //而报错误和警告
    #include<stdio.h>
    #include<string.h>     
    #include<Windows.h>
    #include<stdlib.h>
    void menu(struct room *m, struct person *p);
    void menu1(struct room *m, struct person *p);
    void menu2(struct room *m, struct person *p);
    //提前声明函数
    typedef struct person
    {
        char zhanghao[20];
        char mima[20];
        char juese[20];
        char quanxian[20];
        struct person *next;
    }pn, *a;
    //定义管理员结构体,重命名为pn,定义一个结构体变量指针a
    typedef struct room
    {
        char name[20];
        char sex[20];
        int age;
        char AD[20];
        int num;
        int yajin;
        char qishiriqi[20];
        char jieshuriqi[20];
        int day;
        int renshu;
        float danjia;
        float zongjine;
        float yingfu;
        float shifu;
        float qiantui;
        char kongxian[20];
        char leixing[20];
        struct room *nnext;
    }rm, *b;
    void ListInsert(pn *L, pn *p)
    {
        pn *q = L;
        p->next = NULL;
        while (q->next != NULL)
        {
            q = q->next;
        }
        q->next = p;
    }
    void jiedian(rm *j, rm *m)
    {
        rm *n = j;
        m->nnext = NULL;
        while (n->nnext != NULL)
        {
            n = n->nnext;
        }
        n->nnext = m;
    }
    int w[5] = { 0,0,0,0,0 };
    int j = 0;
    void dengji(struct room *m, struct person *p)
    {
        struct room *n, *r = m;
        struct room *v = m->nnext;
        int flag = 0;
        system("cls");
        n = (struct room *)malloc(sizeof(struct room));
        n->nnext = NULL;
        printf("\t\t 本酒店含以下几种类型房间:\n");
        printf("\t 类型             单价  \n");
        printf("\t 标准单人间(SK) 100   \n");
        printf("\t 标准双人间(ST) 150   \n");
        printf("\t 豪华单人间(DK) 200   \n");
        printf("\t 豪华双人房(DT) 300   \n");
        printf("\t 商务套房  (JS) 400   \n");
        printf("姓名 性别 年龄 人数 身份证号码  房间类型  房间号  入住天数 起始日期  终止日期  \n");
        scanf("%s %s %d %d %s %s %d  %d %s %s", n->name, n->sex, &n->age,&n->renshu, n->AD, n->leixing, &n->num,  &n->day, n->qishiriqi, n->jieshuriqi);
            if (n->age<18)
            {
                flag = 1;
                printf("\t对不起,客人尚未成年,无法入住!\n");
                Sleep(1000);
                menu2(m, p);
            }
            while(v!=NULL)
        {
            if (v->num == n->num && strcmp(v->qishiriqi, n->qishiriqi) <= 0 &&strcmp(v->jieshuriqi, n->jieshuriqi) >= 0)
            {
                flag = 1;
                printf("\t该房间已有客人入住!\n\t系统将在1秒后返回登记入住页面!\n");
                Sleep(1000);
                menu2(m, p);
                break;
            }
            v=v->nnext;
        }
        if (strcmp(n->leixing, "SK") == 0)
        {
            if (w[0] >= 2)
            {
                printf("该类型房间已满,请重新选择!\n");
                getchar();
                getchar();
                menu2(m, p);
            }
            else
            {
                n->danjia= 100;
                n->yajin = 50; w[0]++;
            }
        }
        if (strcmp(n->leixing, "ST") == 0)
        {
            if (w[1] >= 10)
            {
                printf("该类型房间已满,请重新选择!\n");
                getchar();
                getchar();
                menu2(m, p);
            }
            else
            {
                n->danjia = 150;
                n->yajin = 100;w[1]++;
            }
        }
        if (strcmp(n->leixing, "DK") == 0)
        {

            if (w[2] >= 10)

            {
                printf("该类型房间已满,请重新选择!\n");
                getchar();
                getchar();
                menu2(m, p);
            }
            else
            {
                n->danjia = 200; n->yajin = 100; w[2]++;
            }
        }
        if (strcmp(n->leixing, "DT") == 0)
        {
            if (w[3] >= 10)
            {
                printf("该类型房间已满,请重新选择!\n");
                getchar(); 
                getchar();
                menu2(m, p);
            }
            else
            {
                n->danjia = 300;
                n->yajin = 150;w[3]++;
            }
        }
        if (strcmp(n->leixing, "JS") == 0)
        {
            if (w[4] >= 10)
            {
                printf("该类型房间已满,请重新选择\n");
                getchar();
                getchar();
                menu2(m, p);
            }
            else
            {
                n->danjia = 400;
                n->yajin = 200;w[4]++;
            }
        }
        n->zongjine = n->danjia * n->day;
        n->yingfu = n->zongjine + n->yajin;
        printf("\t本次入住需支付%5.2f元,其中含押金%d元\n", n->yingfu, n->yajin);
        printf("\t请输入客户支付金额:");
        scanf("%f", &n->shifu);
        n->qiantui = n->shifu - n->yingfu + n->yajin;
        while (r->nnext != NULL)
        {
            r = r->nnext;
        }
        r->nnext = n;
        if (flag == 0)
        {

            strcpy(n->kongxian, "YES!");
            printf("\t添加成功!\n");
            printf("\t按回车键返回\n");
            getchar();
            j++;
        }
        else
            printf("\t添加失败\n");
        getchar();
        menu2(m, p);
    }
    void jiezhang(struct room *m, struct person *p)
    {
        struct room *n = m->nnext;
        int num, flag = 0;
        system("cls");
        printf("\t请输入需要结账的房间号:\n");
        scanf("%d", &num);
        while (n != NULL)
        {
            if (n->num == num)
            {
                flag = 1;
                printf("\t 客房信息:客户姓名 单价 入住天数 总金额 应付房款 实付房款 欠/退金额 \n");
                printf("\t %s %5.2f %d %5.2f %5.2f %5.2f %5.2f", n->name, n->danjia, n->day, n->zongjine, n->yingfu, n->shifu, n->qiantui);
                printf("\n");
                if (n->qiantui > 0)
                {
                    printf("\t温馨提示:退还金额%5.2f元 ", n->qiantui);
                    printf("\n");
                    Sleep(1000);
                }
                if (n->qiantui < 0)
                {
                    printf("\t请注意:该客人仍未付清房款,欠款%5.2f元 ", n->qiantui);
                    printf("\n");
                        Sleep(1000);
                }
                strcpy(n->kongxian, "NO!");
                if (strcmp(n->leixing, "SK") == 0)
                {
                    w[0]--;
                }
                if (strcmp(n->leixing, "ST") == 0)
                {
                    w[1]--;
                }
                if (strcmp(n->leixing, "DK") == 0)
                {
                    w[2]--;
                }
                if (strcmp(n->leixing, "DT") == 0)
                {
                    w[3]--;
                }
                if (strcmp(n->leixing, "JS") == 0)
                {
                    w[4]--;
                }
            }
            n = n->nnext;
        }
        if (flag == 0)
        {
            printf("\t无该房间信息\n");
        }
        getchar();
        getchar();
        menu2(m, p);
    }
    void chaxun(struct room *m, struct person *p)
    {
        int a;
        struct room *n = m->nnext;
        char name[20], qishiriqi[20], jieshuriqi[20];
        int flag = 0, num;
        system("cls");
        printf("\t欢迎进入客房信息查询界面\n");
        printf("\t请选择查询方式:\n");
        printf("\t 1.按客户名称查询\n");
        printf("\t 2.按房间号查询\n");
        scanf("%d", &a);
        if (a == 1)
        {
            printf("\t请输入客户名称:\n");
            scanf("%s", name);
            while (n != NULL)
            {
                if (strcmp(n->name, name) == 0)
                {
                    flag = 1;
                    printf("\t\t\t该用户信息:\t\n");
                    printf("姓名  年龄  房间号  单价  天数  总金额\n");
                    /**/
                    printf("%s  %d   %d   %5.2f    %d    %5.2f\n", n->name, n->age, n->num, n->danjia, n->day, n->zongjine);
                }//wenti
                n = n->nnext;
            }
            if (flag == 0)
                printf("\t无该客户信息\n");
        }
        if (a == 2)
        {
            printf("\t请输入房间号及查询起止时间:\n");
            scanf("%d %s %s", &num, qishiriqi, jieshuriqi);
            while (n != NULL)
            {
                if (n->num == num || strcmp(jieshuriqi, n->jieshuriqi) >= 0 || strcmp(qishiriqi, n->qishiriqi) <= 0)
                {
                    printf("\t姓名\t\t\t身份证号\t\t入住天数\n");
                    printf("\t %s\t\t\t%s\t\t\t%d\n", n->name, n->AD, n->day);
                    n = n->nnext;
                }
                else
                {
                    printf("\t暂无房间信息!");
                }
            }
        }
        getchar();
        getchar();
        menu2(m, p);
    }
    void bijiao(struct room *n1, struct room *n2)
    {
        char a1[20], a2[20];//类型 入住
        int b1, b2, b3;//房间号,入住人数,入住天数
        b1 = n1->num;
        n1->num = n2->num;
        n2->num = b1;
        strcpy(a1, n1->leixing);
        strcpy(n1->leixing, n2->leixing);
        strcpy(n2->leixing, a1);
        strcpy(a2, n1->kongxian);
        strcpy(n1->kongxian, n2->kongxian);
        strcpy(n2->kongxian, a2);
        b2 = n1->renshu;
        n1->renshu = n2->renshu;
        n2->renshu = b2;
        b3 = n1->day;
        n1->day = n2->day;
        n2->day = b3;
    }
    void dayin(struct room *m, struct person *p)
    {
        struct room *n1 = m->nnext;
        struct room *n2;
        struct room *n = m->nnext;
        int x, y;
        system("cls");
        if (n == NULL)
        {
            printf("\t暂无房间信息打印\n");
        }
        else
        {
            for (x = 1;x < j;x++)
            {
                for (y = x + 1;y <= j;y++)
                {
                    n2 = n1;
                    n1 = n1->nnext;

                    if (n1->num < n2->num)
                    {
                        bijiao(n1, n2);
                    }
                }
                n1 = m->nnext;
                n2 = m->nnext;
            }
            while (n != NULL)
            {
                printf("\t房间号\t房间类型\t是否有人入住\t入住人数\t入住天数\n");
                printf("\t%d\t%s\t     %s\t           %d\t                %d \n", n->num, n->leixing, n->kongxian, n->renshu, n->day);
                n = n->nnext;
            }
        }
        getchar();
        getchar();
        menu2(m, p);
    }

    void tongji(struct room *m, struct person *p)
    {
        struct room *n = m->nnext;
        char day[20];
        float people = 0, fangjian = 0, kongfang;
        float ruzhulv, kongfanglv, money = 0;;
        system("cls");
        if (n == NULL)
        {
            printf("\t暂时无需要统计的信息");
        }
        else
        {
            printf("\t 请输入日期:\n");
            scanf("%s", day);
            while (n != NULL)
            {
                if (strcmp(n->qishiriqi, day) <= 0 || strcmp(n->jieshuriqi, day) >= 0)
                {
                    people = n->renshu + people;
                    fangjian++;
                    money = n->shifu + money;
                    n = n->nnext;
                }

            }
            kongfang = 50 - fangjian;
            ruzhulv = fangjian / 50;
            kongfanglv = 1 - ruzhulv;
            printf("\t入住人数   入住房间数\t空房数\t入住率\t空房率\t实收房款\n");
            printf("\t%5.0f\t%5.0f        %5.0f\t%5.2f\t  %5.2f\t%5.2f", people, fangjian, kongfang, ruzhulv, kongfanglv, money);
        }
        getchar();
        getchar();
        menu2(m, p);
    }
    void duqu(rm *j)

    {
        FILE *pf;
        rm *r;
        char name[20], sex[20], leixing[20], qishiriqi[20], jieshuriqi[20], AD[20], kongxian[20];
        int age, num, yajin, day, renshu;
        float danjia, zongjine, yingfu, shifu, qiantui;
        pf = fopen("room.txt", "a+");
        if (pf == NULL)
        {
            printf("无法打开文件\n");
            system("pause");
            exit(0);
        }
        while (!feof(pf))
        {
            if ((EOF == fgetc(pf)) || (EOF == fgetc(pf)) || (EOF == fgetc(pf)))
                break;
            else
                fseek(pf, -3L, 1);
            //fseek(文件类型指针,位移量,起始量)
            //将文件位置标记从当前位置后退3字节处
            fscanf(pf, "%s %s %d  %d %s %d %s %d %s %s %d %f %f %f %f %f", name, sex, &age, &renshu, AD, &num, leixing, &yajin, qishiriqi, jieshuriqi, &day, &danjia, &zongjine, &yingfu, &shifu, &qiantui);
            //从磁盘文件中读取信息送给链表中的变量
            r = (rm *)malloc(sizeof(rm));
            strcpy(r->name, name);
            strcpy(r->sex, sex);
            strcpy(r->leixing, leixing);
            strcpy(r->qishiriqi, qishiriqi);
            strcpy(r->jieshuriqi, jieshuriqi);
            strcpy(r->AD, AD);
            strcpy(r->kongxian, kongxian);
            r->age = age;
            r->renshu = renshu;
            r->num = num;
            r->yajin = yajin;
            r->day = day;
            r->danjia = danjia;
            r->zongjine = zongjine;
            r->yingfu = yingfu;
            r->shifu = shifu;
            r->qiantui = qiantui;
            jiedian(j, r);
            r = r->nnext;
        }
        fclose(pf);
    }
    void baocun(rm *j)
    {
        FILE *pf;
        rm *m = j->nnext;
        if ((pf = fopen("room.txt", "r")) == NULL)
        {
            printf("不能打开此文件,按回车键退出\n");
            system("pause");
            exit(0);
        }
        while (m)
        {
            fprintf(pf, "%s %s %d %s %d %s %d %s %d %s %s %d %f %f %f %f %f\n", m->name, m->sex, m->age, m->kongxian, m->renshu, m->AD, m->num, m->leixing, m->yajin, m->qishiriqi, m->jieshuriqi, m->day, m->danjia, m->zongjine, m->yingfu, m->shifu, m->qiantui);
            //把变量输出到fp指向的文件中
            m = m->nnext;
        }
        fclose(pf);
    }
    void Look(struct room *m, struct person *p)
    {
        struct person *q = p->next;
        char zhanghao[20];
        int flag = 0;
        system("cls");
        printf("\t请输入你要查看的系统用户的账号:\n");
        scanf("%s", zhanghao);
        while (q != NULL)
        {
            if (strcmp(q->zhanghao, zhanghao) == 0)
            {
                flag = 1;
                printf("\t            账号     密码    角色   权限\n");
                printf("\t该用户信息:%s   %s   %s   %s\n", q->zhanghao, q->mima, q->juese, q->quanxian);
            }
            q = q->next;
        }
        if (flag == 0)
        {
            printf("\t无该用户\n");
        }
        printf("按回车键返回管理员界面\n");
        getchar();
        getchar();
        menu1(m, p);
    }
    void ADD(struct room *m, struct person *p)
    {
        struct person *q, *n = p;
        struct person *h = p->next;
        char juese[20] = { "总台服务员" };
        char quanxian[20] = { "12345" };//为了在后面初始化
        int flag = 0;
        system("cls");
        q = (struct person *)malloc(sizeof(struct person));
        q->next = NULL;//让链表的指针域指向空
        printf("\t请输入你添加的用户的账户和密码:\n");
        printf("\t账号:");
        scanf("%s", q->zhanghao);
        printf("\t密码:");
        scanf("%s", q->mima);
        getchar();
        strcpy(q->juese, juese);
        strcpy(q->quanxian, quanxian);
        while (h != NULL)
        {
            
            if (strcmp(h->zhanghao , q->zhanghao)==0)
            {
                flag = 1;
                printf("\t该账号已存在\n");
                Sleep(1000);
                menu1(m, p);
            }
            h = h->next;
        }
        while (n->next != NULL)
        {
            n = n->next;
        }
        n->next = q;//链表的增加

        if (flag == 0)
        {
            printf("\t添加成功\n");
            printf("\t 账号    密码    权限\n");
            printf("\t %s  %s   %s    \n", q->zhanghao, q->mima, q->quanxian);
            printf("\t按回车键返回菜单\n");
        }
        else
            printf("\t添加失败\n");
        getchar();
        getchar();
        menu1(m, p);
    }
    void Dele(struct room *m, struct person *p)
    {
        struct person *q = p->next;
        struct person *n = p;
        char zhanghao[20];
        int flag = 0;
        system("cls");
        printf("\t请输入你要删除的系统用户的账号:");
        scanf("%s", zhanghao);
        while (q != NULL)
        {
            if (strcmp(q->zhanghao, zhanghao) == 0)
            {
                flag = 1;
                n->next = q->next;//链表的删除
                free(q);
                break;
            }
            n = q;
            q = q->next;
        }
        if (flag != 1)
        {
            printf("\t无该用户信息\n");
        }
        else
        {
            printf("\t删除成功\n");
        }
        getchar();
        getchar();
        menu1(m, p);
    }
    void Change(struct room *m, struct person *p)
    {
        struct person *q = p->next;
        char zhanghao[20];
        int flag;
        int i;
        char quanxian[20];
        system("cls");
        printf("\t请输入你要修改的系统用户的账号:");
        scanf("%s", zhanghao);
        getchar();
        while (q != NULL)
        {
            if (strcmp(q->zhanghao, zhanghao) == 0)
            {
                flag = 1;
                printf("\t %s %s\n", q->zhanghao, q->quanxian);
                
                printf("\t 1.登记入住权限\n");
                printf("\t 2.结账权限\n ");
                printf("\t 3.查询房间权限\n ");
                printf("\t 4.客房信息打印权限\n ");
                printf("\t 5.统计权限\n ");
                printf("\t请输入修改后的权限:");
                scanf("%s", quanxian);
                strcpy(q->quanxian, quanxian);
                break;
            }
            q = q->next;
        }
        if (flag == 0)
        {
            printf("\t无该系统用户的信息\n");
        }
        else
        {
            printf("\t修改成功\n");
            Sleep(1000);
        }
        menu1(m, p);
    }
    void savePersonFile(pn *L)
    {
        FILE *fp;
        pn *p = L->next;
        if ((fp = fopen("person.txt", "r+")) == NULL)
        {
            printf("不能打开此文件,请按回车键退出\n");
            system("pause");
            exit(1);
        }
        while (p)
        {
            fprintf(fp, "%s %s %s %s\n", p->zhanghao, p->mima, p->juese, p->quanxian);
            p = p->next;
        }

        fclose(fp);
    }
    void readPersonput(pn *L)
    {
        FILE *fp;
        pn *n;
        char zhanghao[20];
        char mima[20];
        char juese[20];
        char quanxian[10];
        fp = fopen("person.txt", "a+");
        if (fp == NULL)
        {
            printf("无法打开文件!\n");
            system("pause");
            exit(0);
        }
        while (!feof(fp))
        {
            if ((EOF == fgetc(fp)) || (EOF == fgetc(fp)) || (EOF == fgetc(fp)))
                break;
            else
                fseek(fp, -3L, 1);
            fscanf(fp, "%s %s %s %s", zhanghao, mima, juese, quanxian);
            n = (pn *)malloc(sizeof(pn));
            strcpy(n->zhanghao, zhanghao);
            strcpy(n->mima, mima);
            strcpy(n->juese, juese);
            strcpy(n->quanxian, quanxian);
            ListInsert(L, n);
            n = n->next;
        }
        fclose(fp);
    }
    void denglu1(struct room *m, struct person *p)
    {
        char b[20], c[20];
        system("cls");
        printf("请输入账号和密码:\n");
        printf("\t账号:");
        scanf("%s", b);
        if (strcmp(b, "nishizhuma?") != 0)
        {
            printf("输入账号错误。");
            Sleep(1000);
            menu(m, p);
        }
        else
        {
            printf("\t密码:");
            scanf("%s", c);
            if (strcmp(c, "woshizhu") != 0)
            {
                printf("输入密码错误!");
                Sleep(1000);
                menu(m, p);
            }
            else
            {
                system("cls");
                menu1(m, p);
            }
        }
    }
    void denglu2(struct room *m, struct person *p)
    {
        struct person *q = p->next;
        char b[20], c[20];
        system("cls");
        printf("\t请输入账号和密码\n");
        printf("\t账号:");
        scanf("%s", b);
        while (q != NULL)
        {
            if (strcmp(q->zhanghao, b)!= 0)
            {
                printf("输入账号错误。");
                Sleep(1000);
                menu(m, p);
            }
            else
            {
                printf("\t密码:");
                scanf("%s", c);
                if (strcmp(q->mima, c) != 0)
                {
                    printf("输入密码错误。");
                    Sleep(1000);
                    menu(m, p);
                }
                else
                {
                    system("cls");
                    menu2(m, p);
                }
            }
        }
    }
    void menu(struct room *m, struct person *p)
    {
        int a;
        system("cls");
        printf("\t欢迎登录酒店客房管理系统\n");
        printf("\t请选择角色:\n");
        printf("\t1.系统管理员\n");
        printf("\t2.总台服务员\n");
        printf("\t3.退出\n");
        scanf("%d", &a);
        switch (a)//
        {
        case 1:denglu1(m, p);break;
        case 2:denglu2(m, p);break;
        case 3:
            {
                system("pause");
                exit(0);
            }
        default:
            {
                printf("\t输入不合法\n");
                Sleep(1000);//暂停1s
                menu(m,p);
                break;
            }
        }
    }
    void menu1(struct room *m, struct person *p)
    {
        int z;
        system("cls");
        printf("\t欢迎登录系统管理员界面\n");
        printf("\t 1.用户资料打印\n");
        printf("\t 2.添加用户\n");
        printf("\t 3.删除用户\n");
        printf("\t 4.修改用户权限\n");
        printf("\t 5.返回酒店管理系统首页面\n");
        printf("\t 6.退出\n");
        scanf("%d", &z);
        switch (z)
        {
        case 1:Look(m, p);break;
        case 2:ADD(m, p);break;
        case 3:Dele(m, p);break;
        case 4:Change(m, p);break;
        case 5:menu(m, p);
        case 6:{savePersonFile(p);system("pause");exit(0);}
        default:
            {
                printf("\t输入不合法\n");
                Sleep(1000);
                menu(m,p);
                }
        }
    }
    void menu2(struct room *m, struct person *p)
    {
        int k;
        int flag = 0;
        char c;
        int i;
        struct person *q=p->next;
        system("cls");
        while (1)
        {
            printf("\t欢迎登录总台服务员界面\n");
            printf("\t 1.登记入住功能\n");
            printf("\t 2.结账功能\n");
            printf("\t 3.查询房间功能\n");
            printf("\t 4.客房信息打印\n");
            printf("\t 5.统计功能\n");
            printf("\t 6.返回酒店客房管理系统首页面\n");
            printf("\t 7.退出\n");
            scanf("%d", &k);
            for (i = 0;q->quanxian[i]!='\0';i++)
            {
                if (k == 1)
                {    
                    if (q->quanxian[i]=='1')
                    {
                        flag = 1;
                        dengji(m,p);
                        break;
                    }
                }
                if (k == 2)
                {
                    if(q->quanxian[i] =='2')   
                    {
                        flag = 1;
                        jiezhang(m, p);
                        break;
                    }
                }
                if (k == 3)
                {
                    if(q->quanxian[i]=='3')
                    {
                        flag = 1;
                        chaxun(m, p);
                        break;
                    }
                }
                if (k == 4)
                {
                    if(q->quanxian[i]=='4')
                    {
                        flag = 1;
                        dayin(m, p);
                        break;
                    }
                }
                if (k == 5)
                {
                 if(q->quanxian[i]=='5')
                    {
                        flag = 1;
                        tongji(m, p);
                        break;
                    }
                }    
                if(k==6)
                {
                    menu(m, p);
                }
                if (k == 7)
                {
                    baocun(m);
                    system("pause");
                    exit(0);
                }
                if (k > 6 && k <= 0)
                {
                    printf("\t输入不合法\n");
                    Sleep(1000);
                    menu(m,p);
                }
            }
            if (flag == 0)
            {
                printf("对不起,您尚无此权限!");
                Sleep(1000);
                menu(m, p);
            }
        }
    }
    int main()
    {
        struct person *p, *head;
        struct room *m, *hhead;
        struct room kongxian = { "NO!" };
        head = p = (struct person *)malloc(sizeof(struct person));
        hhead = m = (struct room*)malloc(sizeof(struct room));
        m->nnext = NULL;
        duqu(m);
        baocun(m);
        p->next = NULL;
        readPersonput(p);
        menu(m, p);
        savePersonFile(p);
        getchar();
        getchar();
        return 0;
    }

    展开全文
  • 功能基本完善,可以作为期末大作业,代码完善,文档齐全,文档有“系统说明文档.doc”“需求分析,可行性分析.doc”“总体设计,详细设计.doc”“测试计划,测试分析报告.doc”开发环境:VC++,ACCESS数据库;...
  • C++实现 酒店管理系统

    千次阅读 多人点赞 2019-08-23 21:01:05
    C++酒店管理系统,已经更新Windows版本,内置readme说明,可自行使用。Linux没有压缩,皆可食用 相关图片: 拆分版 make编译 ./hotel运行 输入2,进入开房模块 相关源码: class.cpp #include <...

    功能要求:

    相关源码:

    码云:传送门,GitHub:传送门

    C++酒店管理系统,已经更新Windows版本,内置readme说明,可自行使用。Linux没有压缩,皆可食用

    相关文件:

    注意data文件夹下文件需要 https://gitee.com/ikaros-521/hotel_manage_system/tree/master/%E6%8B%86%E5%88%86%E7%89%88/data

    相关图片:

    拆分版

    make编译

    ./hotel运行

    输入2,进入开房模块

    相关源码:

    class.cpp

    #include <fstream>
    #include "tools.h"
    #include "class.h"
    
    using namespace std;
    
    Customer* cust[30];
    Room* room[30];
    
    
    int live; // 被订房间数
    
    // 获取room_num
    short Room::get_room_num(void)
    {
    	return room_num;
    }
    
    // 返回房间的下标
    int Manage::room_index(short room_num)
    {
    	short num = room_num;
    	for(int i=0; i<30; i++)
    	{
    		if(num == room[i]->get_room_num())
    		{
    			return i;
    		}
    	}
    	return -1;
    }
    
    // 返回顾客的下标
    int Manage::cust_index(short room_num)
    {
    	short num = room_num;
    	for(int i=0; i<30; i++)
    	{
    		if(num == cust[i]->room_num)
    		{
    			return i;
    		}
    	}
    	return -1;
    }
    
    // 查询剩余房间
    void Manage::find_room(void)
    {
    	for(int i=0; i<30; i++)
    	{
    		if(i == 10 || i == 20)
    		{
    			cout << endl;
    		}
    		if(room[i]->use != 0)
    		{
    			continue;
    		}
    		cout << room[i]->room_num << " ";
    	}
    	cout << endl;
    }
    
    // 开房
    void Manage::get_room(void)
    {
    	cout << "现有房间如下" << endl;
    	find_room();
    	
    //	cout << "已经入住的人员" << endl;
    //	show_cust();
    
    	cout << "请输入您选择的房间:";
    	short room_num;
    	cin >> room_num;
    	int flag = used(room_num);
    	if(flag == 1)
    	{
    		cout << "此房间不能使用,请重新选择" << endl;
    		getch();
    		return;
    	}
    	else if(flag == -1)
    	{
    		cout << "此房间不存在,请重新选择" << endl;
    		getch();
    		return;
    	}
    	else
    	{
    		cout << "您选择的房间是:" << room_num << endl;
    	}
    
    	int index = room_index(room_num);
    	short type = room[index]->room_type;
    
    	cout << "请输入您的姓名:";
    	string name;
    	cin >> name;
    	cout << "请输入您的身份证:";
    	string id;
    	cin >> id;
    	cout << "请输入您的2位家属(0,表示没有)" << endl;
    	string family1,family2;
    	cin >> family1 >> family2;
    
    	if(type == 1)
    	{
    		if(family1 != "0" || family2 != "0")
    		{
    			cout << "人数过多,开房失败" << endl;
    			getch();
    			return;
    		}
    	}
    	else if(type == 2)
    	{
    		if(family1 != "0" && family2 != "0")
    		{
    			cout << "人数过多,开房失败" << endl;
    			getch();
    			return;
    		}
    	}
    	else
    	{
    	}
    
    	cout << "请输入要订的天数:";
    	short day;
    	cin >> day;
    	short pay = day*room[index]->price;
    	cout << "请支付" << pay << "元" << endl;
    	short money = 0,change = 0;
    	cout << "收您:";
    	cin >> money;
    	cout << "元" << endl;
    	change = money-pay;
    	if(change < 0)
    	{
    		cout << "余额不足,请充值" << endl;
    		getch();		
    		return;
    	}
    	cout << "找您" << change << "元" << endl;
    
    	short floor = room_num/100;
    
    	cust[live++] = new Customer(name,id,family1,family2,floor,room_num,day);
    
    	cout << "已订房间:" << live << endl;
    
    	for(int i=0; i<30; i++)
    	{
    		if(room[i]->room_num == room_num)
    		{
    			room[i]->use = 1;
    		}
    	}
    
    	cout << "开房成功,欢迎您的入住,祝你生活愉快!" << endl;
    	getch();
    }
    
    // 使用情况
    int Manage::used(short room_num)
    {
    	short num = room_num;
    	for(int i=0; i<30; i++)
    	{
    		if(num == room[i]->room_num)
    		{
    			if(room[i]->use == 1)
    			{
    				return 1;
    			}
    			else
    			{
    				return 0;
    			}
    		}
    	}
    	return -1;
    }
    
    // 显示顾客
    void Manage::show_cust(void)
    {
    	for(int i=0; i<30; i++)
    	{
    		if(cust[i]->name == "0")
    		{
    			break;
    		}
    		else
    		{
    			cout << "姓名:" << cust[i]->name << "," << "房间:" << cust[i]->room_num << ",";
    
    			string f1,f2;
    			f1 = cust[i]->family1;
    			f2 = cust[i]->family2;
    			cout << "家属1:";
    			if(f1 == "0") cout << " ,";
    			else cout << f1 << ",";
    			cout << "家属2:";
    			if(f2 == "0") cout << " ";
    			else cout << f2;
    		}
    	}
    }
    
    // 房间价格
    int Manage::room_price(short room_num)
    {
    	short num = room_num;
    	for(int i=0; i<30; i++)
    	{
    		if(room[i]->room_num == num)
    		{
    			return room[i]->price;
    		}
    	}
    	return 0;
    }
    
    // 续费
    void Manage::renew_room(void)
    {
    	cout << "请输入你的房间号:";
    	short room_num;
    	cin >> room_num;
    	int flag = used(room_num);
    	if(flag == -1 || flag == 0)
    	{
    		cout << "您输入的房间号有误" << endl;
    		getch();
    		return;
    	}
    
    	int index = cust_index(room_num);
    
    	cout << "您的房间剩余:" << cust[index]->day << "天" << endl;
    
    	cout << "请输入你要续的天数:";
    	short day;
    	cin >> day;
    	short pay = day*room_price(room_num);
    	cout << "请支付" << pay << "元" << endl;
    	short price = 0,change = 0;
    	cin >> price;
    	change = price-pay;
    	if(change < 0)
    	{
    		cout << "余额不足,请充值" << endl;
    		getch();
    		return;
    	}
    	cout << "收您" << price <<"元,找您" << change << "元" << endl;
    
    	string rename = cust[index]->name,reid = cust[index]->id;
    	string refamily1=cust[index]->family1,refamily2=cust[index]->family2;
    	short refloor = cust[index]->floor,reday = cust[index]->day+day;
    	cust[index] = new Customer(rename,reid,refamily1,refamily2,refloor,room_num,reday);
    	
    	cout << "续费成功,房间的使用时间为:" << reday <<"天" << endl;
    	getch();
    
    }
    
    // 退房
    void Manage::cancel_room(void)
    {
    	cout << "请输入您的房间号:";
    	short room_num;
    	string name;
    	cin >> room_num;
    	cout << "请输入您的姓名:";
    	cin >> name;
    	int flag = used(room_num);
    	if(flag == 0 || flag == -1)
    	{
    		cout << "您输入的房间有误。" << endl;
    		getch();
    		return;
    	}
    	else
    	{
    		short refloor = 0,retype = 0,reprice = 0;
    
    		int i = cust_index(room_num);
    		if(i != -1)
    		{
    			if(cust[i]->name == name)
    			{
    				short price = room[room_index(room_num)]->price;
    				short change = cust[i]->day*price;
    				cout << "退还您" << change << "元" << endl;
    
    				cust[i] = new Customer("0","0","0","0",0,0,0);
    				int j = room_index(room_num);
    				refloor = room[j]->floor;
    				retype = room[j]->room_type;
    				reprice = room[j]->price;
    				room[j] = new Room(refloor,room_num,retype,reprice,0);
    
    				cout << "退房成功,感谢您的光顾,欢迎下次光临!"<< endl;
    				live--;
    				getch();
    				return;
    			}
    			else
    			{
    				//cout << cust[i]->name << endl;
    				cout << "您输入的相关信息有误" << endl;
    				getch();				
    				return;
    			}
    		}
    		else
    		{
    			cout << "您输入的信息有误" << endl;
    			getch();
    			return;
    		}
    	}
    }
    
    // 顾客初始化
    void Manage::c_init(void)
    {
    	fstream ci("data/cust.txt",ios::in);
    	if(!ci.good())
    	{
    		cout << "cust.txt数据加载异常" << endl;
    	}
    
    	for(int i=0; i<30; i++)
    	{
    		string name,id,family1,family2;
    		short floor,room_num,day;
    		ci >> name >> id >> family1 >> family2;
    		ci >> floor >> room_num >> day;
    		cust[i] = new Customer(name,id,family1,family2,floor,room_num,day);
    		if(name != "0")
    		{
    			live++;
    		}
    	}
    }
    
    // 房间初始化
    void Manage::r_init(void)
    {
    	live = 0;
    	fstream ri("data/room.txt",ios::in);
    	if(!ri.good())
    	{
    		cout << "room.txt数据加载异常" << endl;
    	}
    
    	for(int i=0; i<30; i++)
    	{
    		short floor,room_num,room_type,price,use;
    		ri >> floor >> room_num;
    		ri >> room_type >> price >> use;
    		room[i] = new Room(floor,room_num,room_type,price,use);		
    	}
    }
    
    // 数据保存
    void Manage::save_data(void)
    {
    	fstream co("data/cust.txt",ios::out);
    	fstream ro("data/room.txt",ios::out);
    
    	for(int i=0; i<30; i++)
    	{
    		co << cust[i]->name << " " << cust[i]->id << " ";
    		co << cust[i]->family1 << " " << cust[i]->family2 << " ";
    		co << cust[i]->floor << " " << cust[i]->room_num << " ";
    		co << cust[i]->day << "\n";
    
    		ro << room[i]->floor << " " << room[i]->room_num << " ";
    		ro << room[i]->room_type << " " << room[i]->price << " ";
    		ro << room[i]->use << "\n";
    	}
    }
    
    // 菜单
    void Manage::menu(void)
    {
    	cout << "***欢迎使用酒店管理系统***" << endl;
    	cout << "   1、查询房间" << endl;
    	cout << "   2、开房" << endl;
    	cout << "   3、续费" << endl;
    	cout << "   4、退房" << endl;
    	cout << "   0、退出系统" << endl;
    	cout << "-----------------------" << endl;
    }
    
    

    main.cpp

    #include <iostream>
    #include <fstream>
    #include <stdlib.h>
    #include <termio.h>
    #include "class.h"
    #include "tools.h"
    
    using namespace std;
    
    Manage admin;
    
    // 主函数
    int main()
    {
    	admin.c_init();
    	admin.r_init();
    	while(1)
    	{
    		system("clear");
    		admin.menu();
    		switch(get_cmd('0','4'))
    		{
    			case '1': admin.find_room(); break;
    			case '2': admin.get_room(); break;
    			case '3': admin.renew_room(); break;
    			case '4': admin.cancel_room(); break;
    			case '0': admin.save_data(); return 0;
    		}
    		getch();
    	}
    	
    }
    
    

    tools.cpp

    #include "tools.h"
    #include <string.h>
    #include <getch.h>
    #include <stdbool.h>
    
    void clear_stdin(void)
    {
    	stdin->_IO_read_ptr = stdin->_IO_read_end;//清理输入缓冲区
    }
    
    char get_cmd(char start,char end)
    {
    	clear_stdin();
    
    	printf("请输入指令:");
    	while(true)
    	{
    		char val = getch();
    		if(val >= start && val <= end)
    		{
    			printf("%c\n",val);
    			return val;
    		}
    	}
    }
    

    class.h

    #ifndef CLASS_H
    #define CLASS_H
    
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    class Customer
    {
    public:
    	string name; //姓名
    	string id; //身份证
    	string family1; //家属1
    	string family2; //家属2
    	short floor; //楼层
    	short room_num; //房间号
    	short day; //时间
    	Customer(string name="0",string id="0",string family1="0",string family2="0",short floor=0,short room_num=0,short day=0)
    	{
    		this->name = name;
    		this->id = id;
    		this->family1 = family1;
    		this->family2 = family2;
    		this->floor = floor;
    		this->room_num = room_num;
    		this->day = day;
    	}
    };
    
    class Room
    {
    public:
    	short floor; //楼层
    	short room_num; //房间号
    	short room_type; //房间类型
    	short price; //价格
    	short use; //是否使用
    	Room(short floor=0,short room_num=0,short room_type=0,short price=0,short use=0)
    	{
    		this->floor = floor;
    		this->room_num = room_num;
    		this->room_type = room_type;
    		this->price = price;
    		this->use = use;
    	}
    	short get_room_num(void);
    
    };
    
    class Manage
    {
    public:
    	void menu(void);	// 菜单
    	void find_room(void);	// 剩余房间
    	void get_room(void);	// 开房
    	void renew_room(void);	// 续费
    	void cancel_room(void);	// 退房
    	int room_index(short room_num);	// 房间下标
    	int cust_index(short room_num); // 顾客下标
    	int used(short room_num);	// 房间使用情况
    	void show_cust(void);	// 显示入住顾客
    	int room_price(short room_num);	// 房间价格
    	void c_init(void);	// 顾客初始化
    	void r_init(void);	// 房间初始化
    	void save_data(void);	// 保存数据
    };
    
    #endif//CLASS_H
    

    tools.h

    #ifndef TOOL_H
    #define TOOL_H
    
    #include <stdio.h>
    
    #include "tools.h"
    #include <string.h>
    #include <getch.h>
    #include <stdbool.h>
    
    void clear_stdin(void);
    
    char get_cmd(char start,char end);
    
    #endif//TOOL_h
    

     

    展开全文
  • 酒店客房管理系统 摘 要 随着信息需求的增长,传统的信息交流方式早已不能满足企业对传递和处理大量信息的需要,因而亟需把网络技术渗透到日常生活中。在当代快速发展的社会里,无处不见酒店,酒店客房管理系统的...
  • 酒店管理系统 客房管理 餐饮管理 服务管理 财务管理 信息查询 向导 前台和后台模式 还有很多没列出来 功能真的超级丰富 界面也很友好
  • C++课程设计-酒店管理系统 vc6 3000行代码,请只做学习之用,尊重版权。
  • 客房管理系统

    2011-10-26 13:45:12
    用户双击“客房管理系统.exe”文件的图标 ,即可进入到如图1.1所示的客房管理系统登录界面。 图1.1 系统登录 单击“用户名”下拉按钮选择用户名“mr”,在“密码”文本框中输入“mingrisoft”,单击【确定】按钮或...
  • 3.1 系统综合E-R图 6 3.2 客户实体图 6 3.3 客房信息实体图 7 3.4 客房标准实体图 7 3.5 预订信息 8 3.6 入住信息 8 3.7 结算 8 4. 逻辑结构设计 9 5. 数据实施与维护 10 5.1 创建表 10 5.2 建立查询 10 5.2.1 ...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 203
精华内容 81
关键字:

酒店客房管理系统c++

c++ 订阅