课程设计报告题目宾馆客房管理系统的设计与实现学号姓名年级专业指导教师完成日期年月日目录一.问题描述 (2)二. 系统需求分析 (2)2.1 设计前调查 (2)2.2 用户需求分析 (2)2.3 核心数据流图 (3)三、概念设计 (5)3.1 局部E-R图 (5)3.2 程序结构图 (5)四、逻辑设计 (6)4.1 开发环境 (6)五、程序调试 (6)5.1程序登陆 (6)5.2 订房 (7)5.3入住 (7)5.4退房 (8)5.5信息查询 (8)六、程序代码 (8)七、总结 (22)物理与电子信息学院课程设计评定意见 (23)一.问题描述宾馆客房管理软件1)某宾馆有301、302、303、304、305五个标准间,每个标准间可住2人;2)链表存储结构:姓名、性别、房号、后续指针,按房间号有序;3)能实现入住(注意性别)和退房,能按给定姓名、房号查询;4)建议采用链表结构,但用其它方法实现也可。
二. 系统需求分析2.1 设计前调查近年来,宾馆业迅猛发展,市场的竞争日趋激烈,全面提高宾馆的软件管理水准,已成为宾馆业发展的当务之急。
尤其是对于星级宾馆,既需要完成前台的一些服务工作,还需要完成后台的管理工作。
然而,传统的人工管理模式已经远远不能满足有效、快捷地处理经营中产生的大量信息数据的需要,从而使得企业决策层无法及时、准确地掌握一线资料,继而影响对市场进行正确地分析和预测。
像沿海城市三星级以上宾馆引进外方管理,使小部分宾馆管理水准几乎接近或达到国际水平。
但对占80%以上的广大中小型宾馆来说,是难以做到的。
因此,欲在竞争中甩开对手,取得优势,必须在经营、管理、产品、服务等方面具备独到之处。
而对宾馆的经营状况起决定作用的是客房的管理。
简单的服务标准已不是制胜的锦囊,只有管理做到最细微之处,才能让顾客体会到宾馆服务的高标准、高质量,而准确、快速、周全往往就是最基本的成功要素。
传统的管理方法已经不能适应现代社会的需要,因此采用电脑管理业务、财务等诸多环节已成为推动宾馆业迅速发展的先决条件,宾馆客房管理信息系统是各大中小型宾馆所需要使用的一个管理系统。
2.2 用户需求分析建立一套功能完善的管理信息系统,既能满足业务人员日常处理的需要,增强企业经营全过程的数字化管理水平;又能满足管理人员决策分析的需要,提高公司管理层对公司经营反馈信息的响应速度。
从而大幅度提高工作效率,提高实施管理的准确性、科学性,使担负管理的工作人员从繁杂的手工劳作中解脱出来。
因而程序需要实现的功能有如下主要六大功能:一、客房管理:客房登记,入住情况查询,客房状态查看。
二、宾客入住管理:客房预定,登记入住,房间调整,退房结帐三、物资管理:物品登记,物品查询,报修和维修,定时提醒。
四、财务管理:追加押金,增删财务,日报表五、员工管理:增改员工,查删员工六、系统管理:增删管理员,修改密码七、其他功能:界面管理2.3 核心数据流图部分数据流图(宾馆客房管理系统的数据流——客人信息)(宾馆客房管理系统的数据流——入住登记)(宾馆客房管理系统的数据流——房间状态)数据结构数据结构反映了数据之间的组合关系。
一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
数据结构的具体描述如下:(1)数据结构:客房信息含义说明:是宾馆客房管理系统的主体数据结构,定义了宾馆客房的有关信息组成:房号、类别、楼层、单价、可容纳人数、说明(2)数据结构:旅客信息含义说明:是酒店客房管理系统中的旅客数据结构,定义了旅客的有关信息组成:入住编号、顾客姓名、性别、证件名称、证件号码(3)数据结构:操作员信息含义说明:是酒店客房管理系统中的操作员数据结构,定义了操作员的有关信息组成:用户名、密码数据存储通过SQL SERVER 2000 建立一个名为“酒店”的库,存放酒店客房信息、旅客信息和旅客入住信息以提供应用程序进行系统业务功能数据所需的数据。
1)数据存储名称:客房信息表说明:记录所有房间的基本信息输入的数据流:服务员查看酒店房间基本信息输出的数据流:输出房间基本信息给服务员查看组成:房号,类别,楼层,单价,可容纳人数,说明2)数据存储名称:旅客信息表说明:记录住店客人的基本信息输入的数据流:在住店管理界面中添加客人基本信息输出的数据流:在在住客人列表中或历史信息中查看客人基本信息组成:入住编号,顾客姓名,性别,证件名称,证件号码3)数据存储名称:旅客入住登记信息表说明:记录开房和退房的基本信息输入的数据流:在住店管理界面中添加客人基本信息输出的数据流:在开房,退房,在住客人列表中或历史信息中查看有关基本信息组成:入住编号,房号,预付金额,入住时间,退房时间三、概念设计3.1 局部E-R图3.2 程序结构图四.逻辑设计4.1.开发环境软件:Visual c++ 6.0 硬件:HP ProBook 4321s五.程序调试5.1程序登陆5.2订房5.3入住5.4退房5.5信息查询六.程序代码#include<stdio.h>#include<string.h>//******************************************************************* ****************void initial_room(); //初始化80个房间信息void welcome(); //验证用户登陆,登陆成功显示欢迎信息void enter();void book_room();void check_in();void check_out();void inquire();int i=0;//******************************************************************* ****************struct Room{int number;int dank;int price;int state;}room[80];struct Customer{char name[10];char ID[19];int room_number;int prepaid;int change;int day;}customer[80];void createCustomer(){printf("请您输入顾客的姓名\n");scanf("%s", customer[i].name);printf("请您输入顾客的身份证号码\n");scanf("%s", customer[i].ID);customer[i].prepaid = 0;customer[i].change = 0;customer[i].day=0;}void set_name(char *n, int index){strcpy(customer[index].name,n);}void set_ID(char *p, int index){strcpy(customer[index].ID,p);}void set_room_number(int n, int index){customer[index].room_number=n;void set_day(int d, int index){customer[index].day=d;}void set_prepaid(int p, int index){customer[index].prepaid=p;}char *get_name(int index){return customer[index].name;}char *get_ID(int index){return customer[index].ID;}int get_room_number(int index){return customer[index].room_number;}int get_day(int index){return customer[index].day;}int get_prepaid(int index){return customer[index].prepaid;}//******************************************************************* ****************void main() //程序入口从这里开始运行{int choice=1;initial_room(); //初始化80个房间的信息,分四个等级welcome(); //验证用户登陆,登陆成功显示欢迎信息while(choice==1){enter(); //根据用户的选择执行不同的功能getchar();printf("\n继续使用本系统请按\"1\",退出请按\"2\"! ");scanf("%d", &choice);printf("\n");}}//系统登陆界面********************************************************************* **void welcome() //验证用户登陆,登陆成功显示欢迎信息{char name[4],code[7];printf("请输入用户名和密码(以空格隔开):\n");scanf("%s%s", name, code);while((strcmp(name,"000")!=0)||(strcmp(code,"666666")!=0)){printf("用户名或密码输入有误,请重新输入!\n");scanf("%s%s", name, code);}printf("\n\n");printf(" ▲***************************▲\n"); printf(" 欢迎使用宾馆客房管理系统!\n");printf(" ▲***************************▲\n\n"); }//系统入口********************************************************************* ******void enter(){int kind_of_service;printf("请选择服务类别:订房、入住、退房还是查询? \n");printf(" 1->定房 2->入住 3->退房 4->查询: ");scanf("%d", &kind_of_service);if((kind_of_service>4) || (kind_of_service<1)){printf("您的输入有误,请重试!\n");scanf("%d", &kind_of_service);}elseswitch(kind_of_service){case 1: book_room();break;case 2: check_in();break;case 3: check_out();break;case 4: inquire();break;}}//订房实现********************************************************************* ******void book_room(){createCustomer();int room_standard,day;printf("请您选择预定房间的标准:\n");printf("1.单人间/天150元\n2.双人间/天200元\n3.标准间/天300元\n4.总统套房/天600元\n");scanf("%d", &room_standard);printf("请输入预定天数\n");scanf("%d", &day);set_day(day, i);switch(room_standard){int n;case 1:printf("住房费用总共为: %d 元\n", day*150); //计算住房费用for(n=0;n<20;n++) //从第一个级别的房间中查找一个空闲的房间{if(room[n].state==0) //state=0表示该住房没有被预定的{printf("预定成功★房间号码为: %d\n", room[n].number);room[n].state=1;set_room_number(room[n].number, i);break;}}break;case 2:printf("住房费用总共为: %d 元\n", day*200);for(n=20;n<40;n++){if(room[n].state==0){printf("预定成功★房间号码为: %d\n", room[n].number);room[n].state=1;set_room_number(room[n].number, i);break;}}break;case 3:printf("住房费用总共为: %d 元\n", day*300);for(n=40;n<60;n++){if(room[n].state==0){printf("预定成功★房间号码为: %d\n",room[n].number);room[n].state=1;set_room_number(room[n].number, i);break;}}break;case 4:printf("住房费用总共为: %d 元\n", day*600);for(n=60;n<80;n++){if(room[n].state==0){printf("预定成功★房间号码为: %d\n",room[n].number);room[n].state=1;set_room_number(room[n].number, i);break;}}break;}i++; //住房的顾客数加1}//入住登记********************************************************************* ******void check_in(){char name1[10],id1[19];int ding_or_no,prepaid;printf("该顾客订房了吗? (1->订了 2->没订) ");scanf("%d", &ding_or_no);if(ding_or_no==1){printf("请输入顾客的姓名:\n");scanf("%s", name1);printf("请输入顾客的身份证号码:\n");scanf("%s", id1);for(int j=0;j<=i;j++){if((strcmp(get_name(j),name1)==0)&&(strcmp(get_ID(j),id1)==0)) //查找该顾客的定房信息{int num=get_room_number(j); //取得定房的房间号printf("顾客%s今天入住本宾馆! 房间号码为: %d\n", name1, num);switch(num/100){case 6:prepaid=get_day(j)*150;set_prepaid(prepaid, j);printf("请收房费 %d元整!\n", prepaid); //开始收费room[num%100-1].state=2; //修改房间状态为入住状态break;case 7:prepaid=get_day(j)*200;set_prepaid(prepaid, j);printf("请收房费 %d元整!\n", prepaid);room[19+num%100].state=2;break;case 8:prepaid=get_day(j)*300;set_prepaid(prepaid, j);printf("请收房费 %d元整!\n", prepaid);room[39+num%100].state=2;break;case 9:prepaid=get_day(j)*600;set_prepaid(prepaid, j);printf("请收房费 %d元整!\n", prepaid);room[59+num%100].state=2;break;}break;}}}else{createCustomer();int room_standard,day;printf("请您选择预定房间的标准:\n");printf("1.单人间/天150元\n2.双人间/天200元\n3.标准间/天300元\n4.总统套房/天600元\n");scanf("%d", &room_standard);printf("请输入住宿天数\n");scanf("%d", &day);set_day(day, i);switch(room_standard){int n;case 1:prepaid=day*150;set_prepaid(prepaid, i);printf("请收房费 %d元整!\n", prepaid);for(n=0;n<20;n++){if(room[n].state==0){printf("入住房间号码为: %d\n", room[n].number); room[n].state=2;set_room_number(room[n].number, i);break;}}break;case 2:prepaid=day*200;set_prepaid(prepaid, i);printf("请收房费 %d元整!\n", prepaid);for(n=20;n<40;n++){if(room[n].state==0){printf("入住房间号码为: %d\n", room[n].number); room[n].state=2;set_room_number(room[n].number, i);break;}}break;case 3:prepaid=day*300;set_prepaid(prepaid, i);printf("请收房费 %d元整!\n", prepaid);for(n=40;n<60;n++){if(room[n].state==0){printf("入住房间号码为: %d\n", room[n].number);room[n].state=2;set_room_number(room[n].number, i);break;}}break;case 4:prepaid=day*600;set_prepaid(prepaid, i);printf("请收房费 %d元整!\n", prepaid);for(n=60;n<80;n++){if(room[n].state==0){printf("入住房间号码为: %d\n", room[n].number);room[n].state=2;set_room_number(room[n].number, i);break;}}break;}i++;}}//退房结算********************************************************************* ******void check_out(){char name2[10],id2[19];int standard,j,room_number,day1,day2,day;printf("请输入要退房的顾客姓名和身份证号码:\n");scanf("%s%s", name2, id2);printf("请输入该顾客实住天数:\n");scanf("%d", &day2);for(j=0;j<i;j++){if((strcmp(get_name(j),name2)==0)&&(strcmp(get_ID(j),id2)==0)) {room_number=get_room_number(j);standard=room_number/100;day1=get_day(j);day=day1-day2;switch(standard){case 6:printf("顾客的房间号是%d :为单人间,每天150元\n",room_number);printf("该顾客预付了房费 %d元, 实际消费 %d元整!\n\n",get_prepaid(j), day2*150);if(day>0)printf("请退给该顾客 %d 元整!\n", day*150);if(day<0)printf("请补收该顾客住房费 %d 元整!\n", -day*150);break;case 7:printf("顾客的房间号是%d :为单人间,每天200元\n",room_number);printf("该顾客预付了房费 %d元, 实际消费 %d元整!\n\n",get_prepaid(j), day2*200);if(day>0)printf("请退给该顾客 %d 元整!\n", day*200);if(day<0)printf("请补收该顾客住房费 %d 元整!\n", -day*200);break;case 8:printf("顾客的房间号是%d :为单人间,每天300元\n",room_number);printf("该顾客预付了房费 %d元, 实际消费 %d元整!\n\n",get_prepaid(j), day2*300);if(day>0)printf("请退给该顾客 %d 元整!\n", day*300);if(day<0)printf("请补收该顾客住房费 %d 元整!\n", -day*300);break;case 9:printf("顾客的房间号是%d :为单人间,每天600元\n",room_number);printf("该顾客预付了房费 %d元, 实际消费 %d元整!\n\n",get_prepaid(j), day2*600);if(day>0)printf("请退给该顾客 %d 元整!\n", day*600);if(day<0)printf("请补收该顾客住房费 %d 元整!\n", -day*600);break;}printf("\n退房核算清楚,请按1: ");int account;scanf("%d", &account);if(account==1){for(int k=0;k<80;k++){if(room[k].number==get_room_number(j))room[k].state=0;}i--;for(;j<i;j++){customer[j]=customer[j+1];}}}}}//信息查询********************************************************************* ******void inquire(){int inquire_choice;printf("房间信息查询请按1, 顾客信息查询请按2: \n");scanf("%d", &inquire_choice);if(inquire_choice==1){int j,k=0;printf("\n下列房间还没人预订,也没人入住:\n");for(j=0;j<80;j++){if(room[j].state==0){if(k%10==0) printf("\n");printf("%d\t", room[j].number);k++;}}k=0;printf("\n\n下列房间已预订:");for(j=0;j<80;j++){if(room[j].state==1){if(k%10==0) printf("\n");printf("%d\t", room[j].number);k++;}}k=0;printf("\n\n下列房间有人入住:\n");for(j=0;j<80;j++){if(room[j].state==2){if(k%10==0) printf("\n");printf("%d\t", room[j].number);k++;}}printf("\n\n");}else if(inquire_choice==2){getchar();printf("按姓名查询请按1, 按身份证查询请按2: \n"); int inquire_choice;scanf("%d", &inquire_choice);if(inquire_choice==1){char name3[10];printf("请输入顾客的姓名: \n");scanf("%s", name3);for(int j=0;j<=i;j++){if(strcmp(get_name(j),name3)==0){printf("%s的住房信息如下:\n", name3);printf("\t房间号为: %d\n", get_room_number(j));printf("\t预付房费为: %d\n", get_prepaid(j));}}}if(inquire_choice==2){char id3[10];printf("请输入顾客的身份证: \n");scanf("%s", id3);for(int j=0;j<=i;j++){if(strcmp(get_ID(j),id3)==0){printf("%d的住房信息如下:\n", get_name(j));printf("\t房间号为: %d\n", get_room_number(j));printf("\t预付房费为: %d\n", get_prepaid(j));}}}}}//房间信息初始化********************************************************************* void initial_room() //对80个房间进行初始化,分4个等级{int j,k=101;for(j=0;j<20;j++){room[j].number=k++;room[j].dank=1;room[j].price=150;room[j].state=0;}k=201;for(j=20;j<40;j++){room[j].number=k++;room[j].dank=2;room[j].price=200;room[j].state=0;}k=301;for(j=40;j<60;j++){room[j].number=k++;room[j].dank=3;room[j].price=300;room[j].state=0;}k=401;for(j=60;j<80;j++){room[j].number=k++;room[j].dank=4;room[j].price=600;room[j].state=0;}}七、总结两周的奋战,终于达到了预定的效果,完成了该信息系统的设计和程序编写。