收藏 分销(赏)

课程设计宾馆管理系统C语言版.doc

上传人:a199****6536 文档编号:7211507 上传时间:2024-12-28 格式:DOC 页数:44 大小:352KB 下载积分:12 金币
下载 相关 举报
课程设计宾馆管理系统C语言版.doc_第1页
第1页 / 共44页
课程设计宾馆管理系统C语言版.doc_第2页
第2页 / 共44页


点击查看更多>>
资源描述
课程设计宾馆管理系统C语言版 44 2020年4月19日 文档仅供参考,不当之处,请联系改正。 中 原 工 学 院 软件职业技术学院 一级实践环节报告 课题名称: 宾馆客房管理系统 专 业: NET软件 班 级: NET104 学 号: 36 学生姓名: 李新辉 指导教师: 罗菁 年 月 日 一、题目 宾馆客房管理系统 二、流程分析 宾 馆 客 房 管 理 系 统 客房登记 客户查询 房间查询 退房结算 房间数 选择类型 订金 客户基本信息登记 客房号查询 姓名查询 空房间查询 查询所有客户 查询所有房间 房间号 确定 退房日期 结算 三、源代码 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h>//将字符转化为小写字母函数 #define Z 50 //宾馆的房间数 #define AY 800 #define BY 600 #define CY 300 #define AJ 15 #define BJ 20 #define CJ (Z-AJ-BJ) struct hotle { unsigned int num; char dj; //各种等级类型 unsigned int money; int fk;//判断房间的空闲状况0为空,为有人 }room[Z]; struct date { int month; int day; }; struct people { char name[20]; char ID[15]; unsigned int num0;//房间号 unsigned int money0;//客人交的订金 struct date ru; struct date chu; }kehu[Z]; void saveroom(); void loadroom(); void printroom(); void save(int s); void save1(int s); int loadn(); void saven(int n); void savekehu2(int t,int m); ///////录入宾馆房间信息////////////// void luru() { int a0,b0,c0; a0=b0=c0=0; int i; for(i=0;i<AJ;i++) { room[i].num=((a0++)+601); room[i].dj ='A'; room[i].money =AY; room[i].fk=0; } for(i=AJ;i<(BJ+AJ);i++) { room[i].num=((b0++)+501); room[i].dj ='B'; room[i].money =BY; room[i].fk=0; } for(i=(AJ+BJ);i<Z;i++) { room[i].num=((c0++)+401); room[i].dj ='C'; room[i].money =CY; room[i].fk=0; } saveroom(); } void saveroom()//储存房间信息 { FILE *fp; fp=fopen("my hotle.text","wb"); for(int i=0;i<Z;i++)// { if(fwrite(&room[i],sizeof(struct hotle),1,fp)!=1) {printf("文件写入失败\n");break;} } fclose(fp); } void loadroom() { FILE *fp; int i; if((fp=fopen("my hotle.text","rb"))==NULL) {printf("打开文件失败\n");return;} for(i=0;i<Z;i++) { if(fread(&room[i],sizeof(struct hotle),1,fp)!=1) {printf("读取文件失败\n");break;} } printf("读取成功!\n"); fclose(fp); } void printroom()/////输出各个房间的信息////////// { //loadroom(); printf("客房号 客房等级 客房价格 客房空闲(为空)\n"); for(int i=0;i<Z;i++) { printf("%-18d%-12c%-18d%-15d\n",room[i].num,room[i].dj,room[i].money,room[i].fk); } } ///////////////输出各类型空房间的信息/////////////// void printkong(char ch) { loadroom(); int i; switch(ch) { case 'a': { printf("A类(豪华套房)空房间信息 客房号 客房价格 \n"); for(i=0;i<AJ;i++) { if(room[i].fk==0) { printf("\t\t\t%11d%15d\n",room[i].num,room[i].money); } } break; } case 'b': { printf("B类(中档套房)空房间信息 客房号 客房价格 \n"); for(i=AJ;i<(AJ+BJ);i++) { if(room[i].fk==0) { printf("\t\t\t%11d%15d\n",room[i].num,room[i].money); } } break; } case 'c': { printf("C类(单人公寓)空房间信息 客房号 客房价格 \n"); for(i=(AJ+BJ);i<Z;i++) { if(room[i].fk==0) { printf("\t\t\t%11d%15d\n",room[i].num,room[i].money); } } break; } } } //////////////////选房间号//////////////////// unsigned int panduan(unsigned int num1,char ch) { int temp;//记录房间号 int i; loadroom(); for(i=0;i<Z;i++) { if(room[i].num==num1&&(tolower(room[i].dj))==ch) return temp=i; } printf("请检查您选择的房间号是否有误!\n"); return (Z+2); } /////////订房登记////////// int n;//已订的房间数 void dengji() { int s;//每次所订的房间数 n=loadn();//读取每次文件中已订房间数的值 int flag=0;///真假判断 char ch;//用来选取房间等级 unsigned int money1;//预付金额 FILE *fp; unsigned int t;// printf("请输入您要订的房间数\n"); scanf("%d",&s); do { getchar();//接收输入中的回车 printf("请选择您所订房间的类型 A(豪华套房) B(中档套房) C(单人公寓)\n"); ch=getchar(); } while(!(tolower(ch)=='a'||tolower(ch)=='b'||tolower(ch)=='c')); for(int i=0;i<s;i++) { //loadroom(); switch(tolower(ch)) { case 'a': { unsigned int num1;///选择的房间号; printkong(tolower(ch)); printf("请您正确选择以上房间号:\n"); do { scanf("%d",&num1); t=panduan(num1,tolower(ch)); if(t!=0&&room[t].fk!=0) { printf("此房间已经被订,请重新选择\n"); flag=1; } else if(t>Z) {flag=1;} else { flag=0; } } while(flag);//当选择房间错误或者所选房间有人时重新输入。 room[t].fk=1; saveroom();//存取房间信息; kehu[i].num0=num1; do { printf("请交付订金(不得低于房价的倍)\n"); scanf("%d",&money1); } while(money1<(2*room[t].money));//预付的订金不得低于房间价格的两倍 kehu[i].money0=money1; break; } case 'b': { unsigned int num1;///选择的房间号; printkong(tolower(ch)); printf("请您正确选择以上房间号:\n"); do { scanf("%d",&num1); t=panduan(num1,tolower(ch)); if(t!=0&&room[t].fk!=0) { printf("此房间已经被订,请重新选择\n"); flag=1; } else if(t>Z) {flag=1;} else { flag=0; } } while(flag);//当选择房间错误或者所选房间有人时重新输入。 room[t].fk=1; saveroom();//存取房间信息; kehu[i].num0=num1; do { printf("请交付订金(不得低于房价的倍)\n"); scanf("%d",&money1); } while(money1<(2*room[t].money));//预付的订金不得低于房间价格的两倍 kehu[i].money0=money1; break; } case 'c': { unsigned int num1;///选择的房间号; printkong(tolower(ch)); printf("请您正确选择以上房间号:\n"); do { scanf("%d",&num1); t=panduan(num1,tolower(ch)); if(t!=0&&room[t].fk!=0) { printf("此房间已经被订,请重新选择\n"); flag=1; } else if(t>Z) {flag=1;} else { flag=0; } } while(flag);//当选择房间错误或者所选房间有人时重新输入。 room[t].fk=1; saveroom();//存取房间信息; kehu[i].num0=num1; do { printf("请交付订金(不得低于房价的倍)\n"); scanf("%d",&money1); } while(money1<(2*room[t].money));//预付的订金不得低于房间价格的两倍 kehu[i].money0=money1; break; } //saveroom(); } printf("请输入客户的姓名\n"); getchar();//接收 gets(kehu[i].name); printf("请输入客户的身份证号"); gets(kehu[i].ID); printf("请输入入住日期(月、日)\n"); scanf("%d%d",&kehu[i].ru.month,&kehu[i].ru.day); printf("订房成功,欢迎您的光临\n"); } if((fp=fopen("kehuxinxi.text","rb"))==NULL) {save1(s);} else {save(s);} n=n+s;//n为以订房间的人数。 saven(n); } //////////存取已订房间人数n的值//////// void saven(int n) { FILE *fp; fp=fopen("n.text","w"); fprintf(fp,"%5d",n); fclose(fp); } //////////读取n的值///////// int loadn() { int m; FILE *fp; if((fp=fopen("n.text","r"))==NULL) return 0; else { fscanf(fp,"%d",&m); return m; } } ////存取客户信息(追加)///// void save(int s) { FILE *fp; int i,m; m=loadn(); if((fp=fopen("kehuxinxi.text","ab"))==NULL) { printf("打开文件失败\n"); return; } for(i=0;i<s;i++) { fwrite(&kehu[i],sizeof(people),1,fp); } fclose(fp); } ////////存取(当文件为空时)///////// void save1(int s) { FILE *fp; fp=fopen("kehuxinxi.text","wb"); for(int i=0;i<s;i++) { fwrite(&kehu[i],sizeof(people),1,fp); } fclose(fp); } ////////////////////////读取客户信息文件///////////////// void loadkehu() { int m,i; m=loadn(); FILE *fp; if((fp=fopen("kehuxinxi.text","rb"))==NULL) { printf("打开文件失败或者客户信息为空\n"); return; } for(i=0;i<m;i++) { if(fread(&kehu[i],sizeof(people),1,fp)!=1) { printf("读取文件失败/n"); return; } } } /////////////////////////////// 输出客户信息///////////////////////////// void printkehu() { loadkehu(); int m,i; m=loadn();//读取现在总共有多少个客人 printf("客房号 客户姓名 ID 入住日期 预付金额\n"); for(i=0;i<m;i++) { printf("%-3d\t\t%-3s \t%-3s\t\t %5d月%2d日\t\t%-d\n",kehu[i].num0,kehu[i].name,kehu[i].ID,kehu[i].ru.month,kehu[i].ru.day,kehu[i].money0); } } ///////////////////////////输出一个客户信息////////////// void printkehu2(int i)//i是客户的下标 { printf("客房号 客户姓名 ID 入住日期 预付金额\n"); printf("%3d\t\t%3s\t%-3s\t\t%-5d 月%-2d 日\t\t%d\n",kehu[i].num0,kehu[i].name,kehu[i].ID,kehu[i].ru.month,kehu[i].ru.day,kehu[i].money0); } ////////////////////////查询客户信息//////////////// void chaxun() { int k; unsigned int numk;//查询的客房号 int flag;//判断作用 char namek[20];//查询的客户姓名 loadkehu(); printf("1.客房号查询 2.客户姓名查询 \n"); do { printf("请选择: "); scanf("%d",&k); } while(!(k==1||k==2)); switch(k) { case 1: { flag=1;//// int i; printf("请输入您要查询的客房号: "); scanf("%d",&numk); for(i=0;i<Z;i++) { if(kehu[i].num0==numk) { flag=0; break; } } if(flag==1)//没查到时取初值 { printf("没有找到您要查询的客户\n"); return; } printkehu2(i); break; } case 2: { flag=1;//// int i; printf("请输入您要查询的客户姓名: "); getchar();//接收 scanf("%s",namek); for(i=0;i<Z;i++) { if(strcmp(kehu[i].name,namek)==0) { flag=0; break; } } if(flag==1)//没查到时取初值 { printf("没有找到您要查询的客户\n"); return; } printkehu2(i); break; } } } ////////////////////////////////////////////////// //////////时间(一年的第几天)/////////// int shijian(int month,int day) { int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int s=0; for(int i=0;i<month-1;i++) { s=s+a[i]; } s=s+day; return s; } /////////////////////////退房结算///////////////////////////// void tuifang() { int i,m,t1,t2,s1,s2,s; int flag=0; unsigned int money9; char ch; m=loadn();///客人总数 getchar();//接收 printf("请输入您要退的客房号\n"); unsigned int num9;//退的房间号 scanf("%d",&num9); loadkehu();//读取客户信息 loadroom();//读取房间信息 for(i=0;i<m;i++) { if(kehu[i].num0==num9) { t1=i;//记住客户的位置 flag=1;//证明有这个客户 break; } } for(i=0;i<Z;i++) { if(room[i].num==num9) { t2=i;//记住房间的位置 } } if(flag) { printf(" 客房号 客户姓名 (请检查是否正确!)\n "); printf("%5d\t%15s\n",kehu[t1].num0,kehu[t1].name); } else { printf("您的客房号输入有误\n"); return; } do { getchar();//接收 printf("确认退房请按Y否则请按N(不分大小写)\n"); ch=getchar(); } while(!(tolower(ch)=='y'||tolower(ch)=='n')); if(tolower(ch)=='y') //退房时 { printf("请您输入客户的退房日期(月、日)"); scanf("%d%d",&kehu[t1].chu.month,&kehu[t1].chu.day); s1=shijian(kehu[t1].ru.month,kehu[t1].ru.day);//入住的时间 s2=shijian(kehu[t1].chu.month,kehu[t1].chu.day);//退房时间 s=s2-s1;//住了多少天; money9=s*room[t2].money; printf("应收取的人民币为:%d 元\n",money9); if((kehu[t1].money0-money9)>=0) { printf("应找您人民币%d 元\n",(kehu[t1].money0-money9)); } else { printf("您的预付金额不足,请您再交取人民币 %d 元!\n",(money9-kehu[t1].money0)); } room[t2].fk=0; saveroom(); m=m-1; savekehu2(t1,m); saven(m);//存储剩余已订房的客户总数 printf("欢迎您下次光临!\n"); } else { return; } } ////////////////客户退房后存储/////////////////// void savekehu2(int t,int m)//t为退房客户的下标,m为剩余订房客户的人数 { FILE *fp; if((fp=fopen("kehuxinxi.text","wb"))==NULL) { return; } for(t;t<m;t++) { kehu[t].num0=kehu[t+1].num0; strcpy(kehu[t].name,kehu[t+1].name); strcpy(kehu[t].ID,kehu[t+1].ID); kehu[t].money0=kehu[t+1].money0; kehu[t].ru.month=kehu[t+1].ru.month; kehu[t].ru.day=kehu[t+1].ru.day; } for(int i=0;i<m;i++) { if(fwrite(&kehu[i],sizeof(people),1,fp)!=1) { printf("存取失败\n");break; } } fclose(fp); } void mulu()//首页提示信息 { printf("1. 客人入住登记\n"); printf("2. 客户信息查询\n"); printf("3. 查询房间信息\n"); printf("4. 退房结算\n"); printf("0. 退出\n"); } void main() { //luru();///重新录入房间信息 //printkong('b'); //getchar(); //return; char ch[50]={"* * * * * welcome to * * * * *"}; printf("********************************************************************\n\n"); printf(" %s\n\n",ch); printf(" * * * 欢迎您进入宾馆管理系统* * *\n\n"); printf("********************************************************************\n\n\n"); mulu(); for(;;) { char ch2; int c,k; do { printf("请正确选择序号: "); scanf("%d",&c); } while(!(c==1||c==2||c==3||c==4||c==5||c==0)); switch(c) { case 1: { dengji(); printf("按确定键返回主菜单\n"); getchar(); getchar(); break; } case 2: { printf("1.选择性查询\n2.查询所有客户信息\n"); do { printf("请选择: "); scanf("%d",&k); } while(!(k==1||k==2)); switch(k) { case 1: { chaxun(); break; } case 2: { printkehu(); break; } } printf("按确定键返回主菜单\n"); getchar(); getchar(); break; } case 3: { printf("1.查询空房\n2.查询所有房间信息\n"); do { printf("请选择: "); scanf("%d",&k); } while(!(k==1||k==2)); switch(k) { case 1: { do { getchar();//接收输入中的回车 printf("请选择您所查询空房间的类型 A(豪华套房) B(中档套房) C(单人公寓)\n"); ch2=getchar(); } while(!(tolower(ch2)=='a'||tolower(ch2)=='b'||tolower(ch2)=='c')); printkong(tolower(ch2)); break; } case 2: { loadroom(); printroom(); break; } } printf("按确定键返回主菜单\n"); getchar(); getchar(); break; } case 4: { tuifang(); printf("按确定键返回主菜单\n"); getchar(); getchar(); break; } case 0: { return; } } system("cls"); mulu(); } } 四、执行结果截图 五、个人感想 经过这次课题的实践
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服