⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hotel.cpp

📁 命令行模式下的简单宾馆管理系统..各种基本功能齐全..属于新人练习作品..hotel manager..
💻 CPP
字号:
/*
 * File: hotel.cpp
 * --------------
 * This file implements the hotel.h interface. 
 */


#include "hotel.h"

/* Package variables */
AccountManage accountManage;
RoomManage roomManage;


/* Implementation */

void InitAccount(const char *fileName, AccountManage *account)		//
{
	ifstream fin;
	fin.open(fileName,ios::in);
	if (fin == NULL) {
		Error("Account Data File Not Found~");
		cout<<"Now Creating a new data file.."<<endl;
		OutAccount(fileName,account);
	}
	else {
		account->ReadFromFile(&fin);
		fin.close();
		cout<<"Read Account Data Success~"<<endl;
	}
	return ;
}

void InitRoom(const char *fileName, RoomManage *room)		//
{
	ifstream fin;
	fin.open(fileName,ios::in);
	if (fin == NULL) {
		Error("Room Data File Not Found~");
		cout<<"Now Creating a new data file.."<<endl;
		OutRoom(fileName,room);
	}
	else {
		room->ReadFromFile(&fin);
		fin.close();
		cout<<"Read Room Data Success~"<<endl;
	}
	return ;
}

void OutAccount(const char *fileName, AccountManage *account)
{
	ofstream fout;
	fout.open(fileName,ios::out);
	account->WriteToFile(&fout);
	fout.close();
	cout<<"Write Account Data Success~"<<endl;
	return ;
}

void OutRoom(const char *fileName, RoomManage *room)
{
	ofstream fout;
	fout.open(fileName,ios::out);
	room->WriteToFile(&fout);
	fout.close();
	cout<<"Write Room Data Success~"<<endl;
	return ;
}

void SetAccountRoomList(AccountManage *accManage, RoomManage *roomManage)
{
	struct AllAccountList *p;
	struct AccRoomNumList *t;
	p=accManage->GetAllAccountList()->next;
	while (p != NULL ){
		t=p->curAccount->GetAccRoomNumList()->next;
		while (t != NULL){
			p->curAccount->AddRoom(roomManage->GetRoom(t->roomNum));
			t=t->next;
		}
		p=p->next;
	}
	return;
}

void CheckIn(AccountManage *accManage, RoomManage *roomManage)
{
	//char com='y';
	//int t1;
	string t2;
	Account *curAcc;
	Room *curRoom;
	cout<<"===========Start CheckIn==========="<<endl;
	cout<<"Do you have an Account?(y/n)";
	char com=GetYesNo();
	if (com == 'n'){
		cout<<"Now..to Create a New Account:"<<endl;
		curAcc=NewAccount(accManage->GetNumOfAccounts());
		if ( curAcc == NULL ) {Error("Faild to Create an Account~");return ;}
		accManage->AddAccount(curAcc);
	}
	if (com == 'y'){
		curAcc=FindAccount(accManage);
		if (curAcc == NULL) {Error("Not Found this Account~");return ;}
	}
	cout<<"Account Confirmed~ "<<endl<<endl;
	PrintStateRoom(roomManage,CLEAN);
	cout<<"Which one to choose?(Input the RoomNum) :";
	curRoom=roomManage->GetRoom(GetInt());
	if (curRoom == NULL) {Error("Failed to select this Room~");return ;}
	cout<<"Please input the Dealed Price :";
	curRoom->SetRoomState(INUSE);
	curRoom->SetDealPrice(GetInt());
	curRoom->SetCustomerID(curAcc->GetID());
	//set start date and time//clear
	curTime=time(NULL);
	tm *pt=localtime(&curTime);
	curRoom->SetStartTime(pt->tm_sec,pt->tm_min,pt->tm_hour);
	curRoom->SetStartDate(pt->tm_mday,pt->tm_mon+1,pt->tm_year);
	curRoom->SetCustomerName(curAcc->GetName());
	curAcc->AddRoom(curRoom);
	//if (roomManage->GetGuest(curAcc) == NULL) roomManage->AddGuest(curAcc);
	cout<<"===========Success~=========="<<endl;
	return ;
}

void CheckOut(AccountManage *accManage, RoomManage *roomManage)
{
	int t1;
	Room *curRoom;
	Account *curAcc;
	cout<<"=============Start CheckOut============"<<endl;
	cout<<"Please inout your RoomNum:";
	curRoom=roomManage->GetRoom(GetInt());
	if (curRoom == NULL || curRoom->GetRoomState() != INUSE) {Error("Not Found this Room~");return;}
	curAcc=accManage->GetAccount(curRoom->GetCustomerID(),curRoom->GetRoomCustomerName(),"",0);
	if (curAcc == NULL) {Error("Failed to find this customer~");return ;}
	//add count the expences//clear
	t1=curAcc->CheckExpences(curRoom);
	curAcc->SetPreExpences(curAcc->GetPreExpences() - t1);
	curAcc->SetCurExpences(curAcc->GetCurExpences() - t1);
	curAcc->DeleteRoom(curRoom);
	curRoom->SetRoomState(NEEDCLEAR);
	curRoom->SetDealPrice(0);
	if (curAcc->GetNumOfRooms() == 0) {
		//roomManage->DeleteGuest(curAcc);
		curAcc->SetPreExpences(curAcc->GetPreExpences() - curAcc->GetCurExpences());
		curAcc->SetCurExpences(0);
	}
	cout<<"This room cost "<<t1<<" yuan."<<endl<<"This account has "<<curAcc->GetPreExpences()<<" yuan left."<<endl;
	if (curAcc->GetNotEnoughExpences()) cout<<"This Account Doesn't Have Enough Remaining Sum..Please.."<<endl; 
	cout<<"==============Success~================="<<endl;
	return ;
}

Account *FindAccount( AccountManage *accManage )
{
	int tt;
	cout<<"Please input the Account ID :";
	tt=GetInt();
	cout<<"Please input the Account Name :";
	return (accManage->GetAccount(tt,GetString(),"",0));
}
void AddFee( AccountManage *accManage )
{
	Account *curAcc;
	int t1;
	cout<<"==============Start AddFee=========="<<endl;
	curAcc=FindAccount(accManage);
	if (curAcc == NULL) {Error("Not Found this Account~");return;} 
	char com='n';
	while(com == 'n'){
		cout<<"Please input How Much to Add~:";
		t1=GetInt();
		cout<<curAcc->GetName()<<" will add "<<t1<<" yuan.Is it Correct?(y/n):";
		com=GetYesNo();
	}
	curAcc->SetPreExpences(t1+curAcc->GetPreExpences());
	curAcc->SetScore(t1+curAcc->GetScore());
	cout<<"===============Success~============="<<endl;
	return ;
}
 
void PrintStateRoom( RoomManage *roomManage, RoomState state )
{
	switch (state)
	{
		case CLEAN:cout<<"The Available Room List :"<<endl;break;
		case INUSE:cout<<"The InUse Room List :"<<endl;break;
		case NEEDFIX:cout<<"The NeedFix Room List :"<<endl;break;
		case NEEDCLEAR:cout<<"The NeedClear Room List :"<<endl;break;
		default :break;
	}
	roomManage->PrintRoomStateList(state);
	return ;
}

void PrintRoomInfo( RoomManage *roomManage )
{
	int t1;
	cout<<"Please input the RoomNum:";
	cin>>t1;
	Room *curRoom=roomManage->GetRoom(t1);
	if (curRoom == NULL) {Error("Not Found this Room~");return;}
	curRoom->PrintInfo();
	return ;
}

void PrintAllRoom( RoomManage *roomManage )
{
	cout<<"The All Room List :"<<endl;
	roomManage->PrintRoomList();
	cout<<"-EOF-"<<endl;
	return ;
}

void PrintAccountInfo( AccountManage *accManage )
{
	Account *curAccount=FindAccount(accManage);
	if (curAccount == NULL) {Error("Not Found this Account~");return ;}
	curAccount->PrintInfo();
	return ;
}

void PrintGuestInHotel( AccountManage *accManage )
{
	cout<<"The Guest In Hotel List :"<<endl;
	accManage->PrintAccountList(1);
	cout<<"-EOF-"<<endl;
	return;
}

void PrintAllAccount( AccountManage *accManage )
{
	cout<<"The All Account List :"<<endl;
	accManage->PrintAccountList(0);
	cout<<"-EOF-"<<endl;
	return;
}

void PrintNotEnoughAccount( AccountManage *accManage )
{
	cout<<"The Not Enough Money Account List :"<<endl;
	struct AllAccountList *p;
	p=accManage->GetAllAccountList()->next;
	while (p != NULL){
		if(p->curAccount->GetNotEnoughExpences()) p->curAccount->PrintInfoBrief();
		p=p->next;
	}
	cout<<"-EOF-"<<endl;
	cout<<"Please remind .."<<endl;
	return ;
}

void ChangeRoomState( RoomManage *roomManage )
{
	int t1,t2;
	cout<<"============Start Change==========="<<endl;
	cout<<"Please input the RoomNum :";
	t1=GetInt();
	cout<<"Please input the RoomState :"<<endl;
	cout<<"(1-Clean 2-InUse 3-NeedFix 4-NeedClean) :";
	t2=GetInt();
	while(t2 < 1 || t2 > 4) {
		cout<<"Input must be '1' or '2' or '3' or '4' :";
		t2=GetInt();
	}
	roomManage->GetRoom(t1)->SetRoomState(RoomState(t2-1));
	cout<<"==============Success=============="<<endl;
	return ;
}

void AddAccount( AccountManage *accManage )
{
	cout<<"==============Start==========="<<endl;
	Account *p=NewAccount(accManage->GetNumOfAccounts());
	if (p == NULL) {Error("");return ;}
	accManage->AddAccount(p);
	cout<<"==============End=============="<<endl;
	return;
}

void AddRoom( RoomManage *roomManage )
{
	cout<<"==============Start============"<<endl;
	Room *p=NewRoom();
	if (p == NULL) {Error("");return ;}
	roomManage->AddRoom(p);
	cout<<"==============End=============="<<endl;
	return ;
}

void DeleteAccount( AccountManage *accManage )
{
	cout<<"=============start=============="<<endl;
	Account *curAcc=FindAccount(accManage);
	if (curAcc == NULL) {Error("Not Found This Account~");return ;}
	curAcc->PrintInfo();
	cout<<"Do you want to Delete it ?(y/n):";
	char com=GetYesNo();
	if (com == 'y') {
		accManage->DeleteAccount(curAcc);
		cout<<"Delete Success~"<<endl;
	}
	cout<<"==============end==============="<<endl;
	return ;
}

void DeleteRoom( RoomManage *roomManage )
{
	int num;
	cout<<"=============start=============="<<endl;
	cout<<"Please input the Room Num :";
	cin>>num;
	Room *curRoom=roomManage->GetRoom(num);
	if (curRoom == NULL) {Error("Not Found This Room~");return;}
	cout<<"Do you want to Delete it ?(y/n):";
	char com=GetYesNo();
	if (com == 'y'){
		roomManage->DeleteRoom(curRoom);
		cout<<"Delete Success~"<<endl;
	}
	cout<<"==============end==============="<<endl;
	return ;
}


void ClearAccountManageInfo( AccountManage *accManage )
{
	accManage->CleanAllAccount();
	return ;
}

void ClearRoomManageInfo( RoomManage *roomManage )
{
	roomManage->CleanAllRoom();
	return ;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -