武汉科技大学C语言程序设计课程设计题目酒店管理系统班级信息与计算科学2班姓名陈诚学号************成绩2015年6 月23 日一、总体设计1、程序的总体设计(1)程序总体设计思路:酒店房间登记管理系统,实现的是房间登记与管理(包括登记入住、查询)为了体现模块化设计,把所有要实现的功能做成函数,采用分步实施的方法逐步细化。
具体分布实施有以下5步。
1,编写模块2,定义实现个功能模块所要函数3,编写各个函数4,理清思路,逐步修改5,调试整个程序。
核心部分是各个函数:1、欢迎界面函数:通过switch进入不同界面。
2、登记入住函数:使用户在入住前登记个人信息,选择房间信息3、查询入住情况函数:顾客可通过两种方式查找到自己的个人信息。
4、查询当前费用函数:顾客可随时查询所用费用5、结账退房函数:所有信息清零。
2、数据结构此系统,选择用结构体存放不同类型的数据,房间信息。
在这过程中由于对指针的运用与操作还不熟练,不方便修改,所以没用指针。
(1)创建房间信息结构体/*结构体hotel 房间号、房间种类、客户姓名、身份证号、入住状态、实际收房费,押金等*/struct hotel{int num; /*房间号*/int kind; /*房间种类1(表示单人间)2(表示双人间)*/char name[20]; /*姓名*/char ID[19]; /*身份证号*/int flag; /*flag 0(表示有人入住)0(表示无人入住)*/int dingjia; /*房间定价*/int shiji; /*实际缴纳费用*/}room[M];3、函数原型声明void welcome(); //主界面int dengji(); //登记入住函数int now_room(); //查询当前房间入住情况int now_feiyong(); //查询当前费用int tuifang(); //结账退房int find(); //查询当前入住人数int kfxinxi(); //客户信息void jiezhang(); //结账付款int quit(); //退出函数int mima();//密码//void save(); //保存//二、详细设计1、主函数设计主函数说明:为满足顾客登记入住,查询房间入住情况,查询当前费用,结账退房等功能的实现,设计此函数。
开始进入欢迎界面让顾客选择,进入顾客所选界面。
主函数流程图2、子函数流程图(1)登记入住函数说明:登记入住流程图(2)查询房间入住情况:2种查询方式(1. 按房号查询2. 客户信息查询),最终输出结账退房流程图三、测试出现欢迎界面测试1:选择选项1,入住登记“1”按提示输入信息(如:1-单人间,1-房间号,陈诚,522225************,200元,登记成功)测试2:选择选项2,查询房间入住情况“1”按房间号查询,1、房间号出现刚登记的个人信息2、房间号该房为空房“2”按客户信息查询,身份证号522225************ 出现个人信“3”退出,返回欢迎界面测试3:选择选项3,查询客户当前费用“1”号房间,当前费用100元测试4:选择选项4,结账退房“2”号房间,空房,重输“1”号房间,应支付100元,退房成功四、小结此程序满足课程设计要求,实现登记、查询、结账等操作,并对不同房间实施不同收费标准,计算总费用等功能。
程序优点:整个程序界面友好,与顾客有良好的界面交流。
程序虽简单,但功能齐全。
程序缺点:(1)数据结构单一。
主要是学习c语言时间短,知识程度不深,不够全面,知道的不多。
(2)不会调用系统时间。
在做课设的过程中,我对c语言有了更深入的了解。
它很考察逻辑的严密性,思路条理要清晰是很重要的,它包含你编写程序的大致方向。
严谨认真的态度也不可或缺。
调试程序过程中也可以提升自己的理解已经加深自身熟练度。
遇到问题要想方设法将它解决,看书找资料,请教同学,与同学讨论,从这些方面我又可以学会合作。
源码://主函数//#define M 40#include<stdlib.h>#include<stdio.h>#include<string.h>#include"dingyi.h"#include"jiegouti.h"#include"find.h"#include"kfxinxi.h"#include"zuizhongfeiyong.h"#include"quit.h"#include"zhujiemian.h"#include"dengji.h"#include"dangqianruzhu.h"#include"dangqianfeiyong.h"#include"tuifang.h"#include"mima.h"#include"save.h"#include"duru.h"/*主函数*/void main(){int i,j;mima(); //密码//duru(); //读入数据//welcome(); //载入主界面//scanf("%d",&i);switch(i){case 1:j=dengji();break;case 2:j=now_room();break;case 3:j=now_feiyong();break;case 4:j=tuifang();break;case 5:exit(0);default:quit();}while(j!=0) //操作结束可返回主界面//{welcome();scanf("%d",&i);switch(i){case 1:j=dengji();break;case 2:j=now_room();break;case 3:j=now_feiyong();break;case 4:j=tuifang();break;case 5:exit(0);default: quit();}}}/*登记入住*/int dengji(){int i,j,a,k,n;system("cls");printf("\n\n☆☆☆☆☆☆☆登记入住☆☆☆☆☆☆☆\n\n"); printf("请选择房间类型:\n\n");printf("1.单人间2.双人间\n\n");scanf("%d",&n);switch(n){case 1:printf("现在空闲的单人房间有: \n");for(i=1,j=0;i<=M;i=i+2)if(room[i-1].flag==0){printf("%d\t",i);j++;if(j%5==0)printf("\n");} //控制每行输出个数//printf("安排客户想要的房间: ");scanf("%d",&k);while(k%2==0){printf("!房号输入错误,请重新输入\n");scanf("%d",&k);}room[k-1].kind=1;room[k-1].num=k;printf("\n请输入客户的姓名: ");scanf("%s",room[k-1].name);printf("\n请输入客户的身份证号: ");scanf("%s",room[k-1].ID);while(strlen(room[k-1].ID)!=18){printf("!输入有误,请重新输入\n");scanf("%s",room[k-1].ID);}room[k-1].dingjia=100;printf("\n\n应当缴纳房费%d元",room[k-1].dingjia);printf("\n\n实际缴纳的金额为: ");scanf("%d",&room[k-1].shiji);while(room[k-1].shiji<room[k-1].dingjia){printf("\t\t\n\n! 输入有误,请重新输入!\n\n");printf("\n\n实际缴纳的金额: ");scanf("%d",&room[k-1].shiji);}printf("\n\n是否确认入住(1-是2-否)\n");scanf("%d",&a);while(a!=1&&a!=2){printf("\n\n\t\t!输入有误,请重新输入: ");scanf("%d",&a);}if(a==1){ room[k-1].flag=1;printf("\n已成功登记!\n\n");save();}break;case 2:printf("现在空闲的双人房间有: \n\n");for(i=2,j=0;i<=M;i=i+2)if(room[i-1].flag==0){printf("%d\t",i);j++;if(j%5==0)printf("\n\n");} //控制每行输出个数//printf("安排客户想要的房间: ");scanf("%d",&k);while(k%2!=0){printf("!房号输入错误,请重新输入:\n");scanf("%d",&k);}room[k-1].kind=2;room[k-1].num=k;printf("\n请输入客户的姓名: ");scanf("%s",room[k-1].name);printf("\n请输入客户的身份证号: ");scanf("%s",room[k-1].ID);while(strlen(room[k-1].ID)!=18){printf("!输入有误,请重新输入:\n");scanf("%s",room[k-1].ID);}room[k-1].dingjia=200;printf("\n\n应当缴纳房费%d元",room[k-1].dingjia); printf("\n\n实际缴纳的金额为: ");scanf("%d",&room[k-1].shiji);while(room[k-1].shiji<room[k-1].dingjia){printf("\t\t\n\n!输入有误,请重新输入:\n\n");printf("\n\n实际缴纳金额为: ");scanf("%d",&room[k-1].shiji);}printf("\n\n是否确认入住(1-是2-否)\n");scanf("%d",&a);while(a!=1&&a!=2){printf("\n\n\t\t!输入有误,请重新输入: ");scanf("%d",&a);}if(a==1){ room[k-1].flag=1;printf("\n已成功登记!\n\n");save();}break;default: quit();}quit();return 1;}//读取函数//void duru(){FILE *fp;int i;if((fp=fopen("kf_dat","rb"))==NULL){printf("cannot open file \n");return ;}for(i=0;i<M;i++){fread(&room[i],sizeof(struct hotel),1,fp);}fclose(fp);}/*查询入住人数*/int find(){int number=0;int i;for(i=0;i<M;i++)if(room[i].flag!=0)number++;return (number);}/*客户信息*/int kfxinxi(int k){char zhonglei[10];switch(room[k].kind){case 1:strcpy(zhonglei,"单人间");break;case 2:strcpy(zhonglei,"双人间");break;}printf("\n\n\t\t----姓名: ");puts(room[k].name);printf("\n\n");printf("\t\t----身份证号: ");puts(room[k].ID);printf("\n\n");printf("\t\t----房间种类: ");puts(zhonglei);printf("\n\n");printf("\t\t----房间号: ");printf("%d",k+1);printf("\n\n");printf("\t\t----实收房费: ");printf("%d元",room[k].shiji);printf("\n\n");return(1);}//密码//int mima(){system("color 8f");char name[10],mima[20];printf("进入系统前请输入用户名和密码:\n");scanf("%s%s",name,mima);while((strcmp(name,"CC")!=0)||(strcmp(mima,"02200059")!=0))//比较输入的和用户密码是否一致//{printf("输入错误,重新输入!\n");scanf("%s%s",name,mima);}system("cls");return (1);}/*查询当前费用*/int now_feiyong(){int money,n;int i,s;system("cls");printf("\n\n☆☆☆☆☆☆☆查询当前客户费用☆☆☆☆☆☆☆\n\n");if(find()==0)printf("全为空房!\n\n");else{printf("请输入房间号: ");scanf("%d",&i);while(1){if(room[i-1].flag==0){printf("\n\n该房为空房,1.重输2.退出\n\n");scanf("%d",&s);if(s==1){printf("请输入房间号: ");scanf("%d",&i);}elsebreak;}else{printf("\n\n查询的个人信息为: ");kfxinxi(i-1);printf("\n\n当前房间定价为: %d",room[n-1].dingjia);break;}break;}}quit();return 1;}/*查询当前房间入住情况*/int now_room(){int i,j,k,s;char a[20];system("cls");printf("\n\n☆☆☆☆☆☆☆查询房间入住☆☆☆☆☆☆☆\n\n"); printf("\t\t1. 按房号查询\n\n\t\t2. 按客户信息查询\n\n\t\t3. 退出"); printf("\n\n请选择: ");scanf("%d",&i);while(1){if(i>4||i<1){printf("\n\n\t\t 输入有误,请重新输入: ");scanf("%d",&i);}else if(i==1){printf("\n\n请输入房间号: "); //按房号查询scanf("%d",&j);if(room[j-1].flag==0)printf("\n\n此房间无人住\n\n");else{printf("您的个人信息为: ");kfxinxi(j-1);}break;}else if(i==2){printf("\n\n请输入您的身份证号: "); //按客户信息查询scanf("%s",a);while(1){for(k=0;k<M;k++)if(strcmp(a,room[k].ID)==0)break;if(k!=M){printf("\n\n您的个人信息为: ");kfxinxi(k);break;}else{printf("\t\t\n\n1. 输入有误,请重新输入2.不存在此人信息,退出\n\n");scanf("%d",&s);if(s==1){printf("\n\n请输入您的身份证号: ");scanf("%s",a);}else return(1);}}break;}else if(i==3)break;else{printf("\t\t\n\n1. 输入有误,请重新输入\n\n");printf("\t\t1. 按房号查询\n\n\t\t2. 按客户信息查询\n\n\t\t3. 按入住时间查询\n\n\t\t4. 退出");printf("\n\n请选择: ");scanf("%d",&i);}}quit();}/*退出函数*/int quit(){int y;printf("是否需要返回主界面? 1-是2-否\n\n");scanf("%d",&y);if(y==1)welcome();elseprintf("****** 欢迎下次光临武科大酒店******!\n\n"); return 1;}//保存函数//void save(){FILE *fp;int i;if((fp=fopen("kf_dat","wb"))==NULL){printf("cannot open file \n");return ;}for(i=0;i<M;i++)if(fwrite(&room[i],sizeof(struct hotel),1,fp)!=1)printf("file write error \n");fclose(fp);}/*最终收的费用*/void shoufei( int dingjia,int shiji){int yu;yu=shiji-dingjia;if(yu==0)printf("费用刚刚好,不用找零或补钱\n");else if(yu>0)printf("找还顾客%d元\n",yu);else printf(" 顾客应再支付%d元\n",yu*(-1));}/*结账退房*/int tuifang(){char zhonglei[30];int n,m;system("cls");printf("\n\n☆☆☆☆☆☆☆结账退房☆☆☆☆☆☆☆\n\n"); if(find()==0)printf("房间都是空的!\n\n");else{printf("请输入需要退房的房号: ");scanf("%d",&n);if(n>M||n<1){printf("\n\n输入有误,请重新输入:",M);scanf("%d",&n);}if(room[n-1].flag==0)printf("空房,无法办理退房!\n\n");switch(room[n-1].kind){case 1:strcpy(zhonglei,"单人间");break;case 2:strcpy(zhonglei,"双人间");break;}printf("房间号: %d\n房间类型: %s\n客人姓名: %s\n身份证号: %s\n",room[n-1].num,zhonglei,room[n-1].name,room[n-1].ID);printf("\n\t房间定价为: %d\n",room[n-1].dingjia);if(room[n-1].flag==1)shoufei(room[n-1].dingjia,room[n-1].shiji);printf("\n\n是否退房(1.是2.否) : ");scanf("%d",&m);if(m==1){room[n-1].flag=0;strcpy(room[n-1].name,"0");room[n-1].shiji=0;printf("\n\n您已成功退房,欢迎下次光临!\n\n");save();}}quit();return 1;}/*主界面*/void welcome(){int n;n=find();system("color 4F");printf("--------------------------------------------------------------------------------");printf("▼▼▼▼▼▼▼▼▼▼▼▼▼▼欢迎进入武科大酒店管理系统▼▼▼▼▼▼▼▼▼▼▼▼▼\n");printf("\t ★★★1. 入住登记\n\n");//dengji()//printf("\t ★★★2. 查询当前房间入住情况\n\n");// now_room()//printf("\t ★★★3. 查询客户当前费用\n\n"); //now_feiyong()//printf("\t ★★★4. 结账退房\n\n");// tuifang()//printf("\t ★★★5. 退出系统\n\n");//printf("\t\t\t\t\t酒店总房间数: %d \n\t\t\t\t\t当前剩余数: %d\n",M,M-n);printf("\n▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲\n");printf("请根据序号进行下一步: \n");}/*结构体hotel 房间号、房间种类、客户姓名、身份证号、入住状态、实际收房费,押金等*/struct hotel{int num; /*房间号*/int kind; /*房间种类1(表示单人间)2(表示双人间)*/char name[20]; /*姓名*/char ID[19]; /*身份证号*/int flag; /*flag 0(表示有人入住)0(表示无人入住)*/int dingjia; /*房间定价*/int shiji; /*实际缴纳费用*/}room[M];//头文件用来声明函数//void welcome(); //主界面int dengji(); //登记入住函数int now_room(); //查询当前房间入住情况int now_feiyong(); //查询当前费用int tuifang(); //结账退房int find(); //查询当前入住人数int kfxinxi(); //客户信息void jiezhang(); //结账付款int quit(); //退出函数int mima();//密码//void save(); //保存//。