C語言實現(xiàn)酒店管理系統(tǒng)
更新時間:2020年03月07日 12:00:08 作者:林西相心
這篇文章主要為大家詳細介紹了C語言實現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)酒店管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
代碼如下:
#include<bits/stdc++.h>
#include<conio.h>
#include <windows.h>
#include<string.h>
#include<time.h>
#define NUM 1000 //控制房間個數(shù)
int j;
void LoginRoom();//登記房屋
void SearchRoom();//搜尋房屋
void ChangeRoom();//更換住房
void OutRoom();//退房
void save();//保存信息
void load();//載入信息
//struct Total
struct Total
{
char Name[20];
int Sex;
int Age;
char IDcard[18];
int hour;
int xx;
int yy;
int zz;
};
struct room
{
int RoomID;
char Tel[11];
long Price;
int Sign;
int feiyong;
//struct Date Datesum;
struct Total Totallist;
}Room[NUM];
// 將房間個數(shù)寫入信息
void LoginRoom() //登記,注冊客房信息函數(shù)
{
int i,n,k;
n=0;
system("cls");
printf(" 用戶登記\n");
for(k=0;k<=1000;k++)
{
printf("請輸入客房號:\n");
scanf("%d",&i);
if(Room[i-1].Sign==1)
{
printf("對不起,該房間已入住,請重新輸入。\n");
Sleep(160); //延時160幀
system("cls");//清屏
return; //返回原函數(shù)
}
if(n==5)
{
printf("\n請查詢清楚客房入住信息后再來登記,謝謝");
Sleep(1500); //時間延時1.5秒
system("cls");//清屏
return ;
}
if(Room[i-1].Sign!=1)
break;
}
printf("房間號:%d\n",i);
printf("客戶姓名:");
scanf("%s",(char *)&Room[i-1].Totallist.Name);
printf("性別(1.男 2.女):\n");
scanf("%d",&Room[i-1].Totallist.Sex);
if(Room[i-1].Totallist.Sex>2){
printf("信息錯誤,請重新輸入");
LoginRoom();
}
printf("年齡:\n");
scanf("%d",&Room[i-1].Totallist.Age);
if(Room[i-1].Totallist.Age<18){
printf("未到國家法定開房年齡,禁止開房\n");
printf("請重新輸入");
LoginRoom();
}
printf("身份證號碼:\n");
scanf("%s",&Room[i-1].Totallist.IDcard); //判斷身份證信息
if(strlen(Room[i-1].Totallist.IDcard)!=18){
printf("信息錯誤");
LoginRoom();
}
printf("聯(lián)系電話:");
scanf("%s",&Room[i-1].Tel);
printf("入住時間:");
scanf("%d %d %d",&Room[i-1].Totallist.xx,&Room[i].Totallist.yy,&Room[i].Totallist.zz);
printf("住房時長:");
scanf("%d",&Room[i-1].Totallist.hour);
printf("請選擇套房(1.總統(tǒng)套房(300/小時)\n2.雙人房(200/小時)\n3.單人房(100/小時)\n4.特價房(40/小時))\n");
scanf("%d",&Room[i-1].feiyong); //////
Room[i-1].RoomID=i;
switch(Room[i-1].feiyong){
case 1:Room[i-1].Price=(Room[i-1].Totallist.hour)*300;break;
case 2:Room[i-1].Price=(Room[i-1].Totallist.hour)*200;break;
case 3:Room[i-1].Price=(Room[i-1].Totallist.hour)*100;break;
case 4:Room[i-1].Price=(Room[i-1].Totallist.hour)*40;break;
}
Room[i-1].Sign=1;
save();
printf("恭喜,入住成功!!\n要返回首頁嗎?(1:Y,0:N)");
scanf("%d",&j);
if(j==0)
{
LoginRoom();
}
system("cls");
}
void save() //將客房入住信息保存到文件中
{
int i;
FILE *fp;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("無法打開文件\n");
return;
}
fwrite(Room,sizeof(struct room),NUM,fp);
printf("文件寫入完成\n");
fclose(fp);
}
void save1() //將客房入住信息保存到文件中
{
FILE *fp;
if((fp=fopen("date.txt","w"))==NULL)
{
printf("無法打開文件\n");
return ;
}
fwrite(Room,sizeof(struct room),NUM,fp);
// gets(Room,sizeof(struct room),NUM,fp);
//fputs(Room,sizeof(struct room),NUM,fp);
printf("文件寫入完成\n");
fclose(fp);
}
void load() //從文件中讀取客房入住信息
{
FILE *fp;
int i;
if((fp=fopen("date.txt","r"))==NULL)
{
printf("不能打開文件\n");
return ;
}
for(i=0;!feof(fp);i++) //讀取文檔,從零開始直到結(jié)束 feof()函數(shù)
//文檔的結(jié)尾都有一個隱藏字符”EOF”,
{ //當程序讀取它的時候,就會知道文件已經(jīng)到達結(jié)尾。通常使用while循環(huán)加EOF判斷作為讀取結(jié)束的標志。
fread(&Room[i],sizeof(struct room),1,fp); //sizeof實際上是獲取了數(shù)據(jù)在內(nèi)存中所占用的存儲空間,以字節(jié)為單位來計數(shù)
// 讀取文檔,存儲信息
}
fclose(fp); //結(jié)束工作
system("cls");
printf("文件讀取成功\n");
}
void SearchRoom() //查詢客房信息
{
int k;
system("cls");
printf(" 查詢客房信息\n");
printf("請輸入要查詢的房間號碼:\n");
scanf("%d",&k);
if(k<=0||k>1000)
{
printf("對不起,未能查到任何信息。\n");
printf("請重新輸入");
SearchRoom(); //重新調(diào)用
}
if(Room[k-1].Sign==1)
{
printf("姓名:%s\n",Room[k-1].Totallist.Name);
if(Room[k-1].Totallist.Sex==1)
{
printf("性別:男\(zhòng)n");
}
else
{
printf("性別:女\n");
}
printf("客戶年齡:%d\n",Room[k-1].Totallist.Age);
printf("身份證號:%s\n",Room[k-1].Totallist.IDcard);
printf("聯(lián)系電話:%s\n",Room[k-1].Tel);
printf("入住時間:%d/%d/%d\n",Room[k-1].Totallist.xx,Room[k-1].Totallist.yy,Room[k-1].Totallist.zz);
printf("入住時長:%d\n",Room[k-1].Totallist.hour);
switch(Room[k-1].feiyong){
case 1:printf("總統(tǒng)套房(300/小時)\n");break;
case 2:printf("雙人房(200/小時)\n");break;
case 3:printf("單人房(100/小時)\n");break;
case 4:printf("特價房(40/小時)\n");break;
}
printf("費用:%ld\n",Room[k-1].Price);
}
else
{
system("cls");
printf("很抱歉,沒有找到該房間登記的相關(guān)信息!!\n");
}
printf("要返回首頁嗎?(1:Y,0:N)");
scanf("%d",&j);
if(j==0)
{
SearchRoom();
}
system("cls");
}
void ChangeRoom() //修改客房入住信息
{
int i,n;
system("cls");
printf(" 修改客房信息\n");
printf("請輸入房間號:\n");
scanf("%d",&i);
if(Room[i-1].Sign==1)
{
printf("\t1.修改客戶姓名\n");
printf("\t2.修改客戶性別\n");
printf("\t3.修改客戶年齡\n");
printf("\t4.修改住房時間\n");
printf("\t5.修改住房時長(續(xù)?。‐n");
printf("\t6.修改客戶電話號碼\n");
printf("\t7.修改客戶身份證號\n");
printf("請輸入要修改的項:");
scanf("%d",&n);
switch(n)
{
case 1:scanf("%s",(char *)&Room[i-1].Totallist.Name);
break;
case 2:scanf("%d",&Room[i-1].Totallist.Sex);
break;
case 3:scanf("%d",&Room[i-1].Totallist.Age);
break;
case 4:scanf("%d %d %d",&Room[i-1].Totallist.xx,&Room[i-1].Totallist.yy,&Room[i-1].Totallist.zz);
break;
case 5:
scanf("%d",&Room[i-1].Totallist.hour);
break;
switch(Room[i-1].feiyong){
case 1:Room[i-1].Price=(Room[i-1].Totallist.hour)*300;break;
case 2:Room[i-1].Price=(Room[i-1].Totallist.hour)*200;break;
case 3:Room[i-1].Price=(Room[i-1].Totallist.hour)*100;break;
case 4:Room[i-1].Price=(Room[i-1].Totallist.hour)*40;break;
}
break;
case 6:scanf("%s",(char *)&Room[i-1].Tel);
break;
case 7:scanf("%s",(char *)&Room[i-1].Totallist.IDcard);
break;
default:printf("輸入錯誤,請從新選擇");
break;
}
save();
printf("修改成功!");
}
else
{
system("cls");
printf("該房間為空房!!\n");
}
printf("\n要返回首頁嗎?(1:Y,0:N)");
scanf("%d",&j);
if(j==0)
{
ChangeRoom();
}
system("cls");
}
void OutRoom() //退房函數(shù)
{
int i,j;
system("cls");
printf(" 退房管理系統(tǒng)\n");
printf("請輸入房間號:\n");
scanf("%d",&i);
printf("確認要退%d號房嗎?(1:Y/0:N)",i);
scanf("%d",&j);
if(j==1)
{
if(Room[i-1].Sign==1)
{
Room[i-1]=Room[101];
save();
system("cls");
printf("退房成功\n");
}
else
{
system("cls");
printf("該房間為空房\n");
}
}
printf("要返回首頁嗎?(1:Y,0:N)");
scanf("%d",&j);
if(j==0)
{
OutRoom();
}
system("cls");
}
void FreeRoom() //查詢客房整體入住信息
{
int f,sum;
sum=0;
system("cls");
printf(" 客房入住信息\n");
for(f=0;f<NUM;f++)
{
if(Room[f].Sign==1)
{
printf("%d號房已入住\n",f+1);
sum=sum+1;
}
}
printf("\n總共總共1~1000號房間中有%d個房間已入住,剩余%d個房間為空房。 \n",sum,NUM-sum);
printf("要返回首頁嗎?(1:Y,0:N)");
scanf("%d",&j);
if(j==0)
{
FreeRoom();
}
system("cls");
}
void Ser()
{
char sy[7];
int i=0;
printf("\n\n\n\t\t\t 請輸入七位密碼\n\n\n\t\t\t ");
do
{
sy[i++]=getch();
printf("*");
}while(i!=6);
sy[i]='\0';
if(strcmp(sy,"strong")!=0)
{
system("cls");
printf("\n\n\n\t\t\t抱歉,您輸入的密碼有誤,請再次輸入!\n\n\n");
printf("\t ⊙-------------------☆☆☆-------------------⊙\n\n");
Ser();
}
}
void show(){
printf(" ********************************************************************************\n");
printf(" ************************歡迎使用客房登記系統(tǒng)************************************\n");
printf("| 1.--登記客房 |\n");
printf("| 2.--查詢客房 |\n");
printf("| 3.--修改客房 |\n");
printf("| 4.--退房管理 |\n");
printf("| 5.--顯示當前所有空房 |\n");
printf("| 6.--退出系統(tǒng) |\n");
printf("|*******************************************************************************|\n");
printf("|*******************************************************************************|\n\n");
}
void logtime(char c,int n,int s)
{
int i;
for(i=0;i<n;i++)
{
printf("%c",c);
Sleep(s);
}
}
int main()//主函數(shù)
{
int i,j;
Ser();
system("mode con cols=82");
printf("\n\n\t\tloging");
logtime('.',6,200);
system("color 3f");
load();
system("cls");
for(j=0;j<NUM;j++) //為房間狀態(tài)賦值為0,當有人入住時,其值改變?yōu)?
{
Room[j].RoomID=j+1;
}
do //菜單欄
{
printf("\n");
show();
printf("輸入需要選擇的功能:");
scanf("%d",&i);
switch(i) //通過輸入相應(yīng)數(shù)字調(diào)用不同函數(shù)進行相應(yīng)工作
{
case 1:LoginRoom();
break;
case 2:SearchRoom();
break;
case 3:ChangeRoom();
break;
case 4:OutRoom();
break;
case 5:FreeRoom();
break;
case 6:printf("謝謝使用客房登記系統(tǒng),正在退出..........\n退出成功,按任意鍵關(guān)閉程序!!\n");
break;
default:
printf("\n 輸入錯誤,請從新選擇\n");
break;
}
}
while(i!=6);
return 0;
}
更多學習資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于VS2022不能使用<bits/stdc++.h>的解決方案(萬能頭文件)
#include<bits/stdc++.h>包含了目前 C++ 所包含的所有頭文件,又稱萬能頭文件,那么如何在VS2022中使用萬能頭呢?下面小編給大家代理了關(guān)于VS2022不能使用<bits/stdc++.h>的解決方案(萬能頭文件),感興趣的朋友一起看看吧2022-03-03
C++中vector和數(shù)組之間的轉(zhuǎn)換及其效率問題詳解
c++?vector轉(zhuǎn)數(shù)組是一種將vector容器的元素轉(zhuǎn)換為數(shù)組的方法,主要能幫助提高程序的性能和效率,下面這篇文章主要給大家介紹了關(guān)于C++中vector和數(shù)組之間的轉(zhuǎn)換及其效率問題的相關(guān)資料,需要的朋友可以參考下2023-03-03
C++圖形界面開發(fā)Qt教程:嵌套圓環(huán)示例
這篇文章主要介紹了C++實現(xiàn)圖形界面開發(fā)Qt教程,涉及坐標函數(shù)的應(yīng)用及圖形界面程序設(shè)計,需要的朋友可以參考下,希望能給你帶來幫助2021-08-08
C語言深入講解之從函數(shù)棧幀角度理解return關(guān)鍵字
在C語言中,一般情況下函數(shù)的返回值是通過函數(shù)中的return語句來實現(xiàn)的,每調(diào)用一次return語句只能從函數(shù)中返回一個值,這篇文章主要給大家介紹了關(guān)于C語言從函數(shù)棧幀角度理解return關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下2021-09-09
Qt實現(xiàn)生成指定范圍內(nèi)隨機數(shù)與隨機字符串
這篇文章主要為大家詳細介紹了如何利用Qt實現(xiàn)生成指定范圍內(nèi)隨機數(shù)與隨機字符串,文中的示例代碼簡潔易懂,感興趣的小伙伴可以自己動手嘗試一下2023-07-07

