资源描述
武汉科技大学
C语言程序设计
课 程 设 计
题 目 酒店管理系统
班 级 信息和计算科学2班
姓 名 陈诚
学 号 07119043
成 绩
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)登记入住函数说明:登 记入 住
房 间 已住 满 ?
已住满
未住满
输入相关信息
输入有误?
成功登记
结束
返回主函数
Y
N
登记入住步骤图
(2)查询房间入住情况:2种查询方法(1. 按房号查询2. 用户信息查询),最终输出查询房间入住情况
选择查询方法(i)
1. 按房号查询
2. 按用户信息查询
i=1?
i=2?
i=3?
输入房间号
输入身份证号
返回主函数
结束
否
否
否
是
是
是
输出个人信息
结束
结账退房
全为空?
返回主函数
输入房间号
空房?
显示用户信息
输入相关信息
结 束
结账退房步骤图
三、测试
出现欢迎界面
测试1:选择选项1,入住登记
“1”按提醒输入信息(如:1-单人间,1-房间号,陈诚,5222257,200元,登记成功)
测试2:选择选项2,查询房间入住情况
“1”按房间号查询,1、房间号 出现刚登记个人信息
2、房间号 该房为空房
“2” 按用户信息查询,身份证号5222257 出现个人信
“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,"0259")!=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);}
else
break;
}
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();
else
printf("****** 欢迎下次光临武科大酒店 ******!\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(); //保留//
展开阅读全文