C語言實(shí)現(xiàn)簡單酒店管理系統(tǒng)
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)酒店管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一、問題描述
系統(tǒng)應(yīng)具有以下主要功能:登記入住:從鍵盤輸入住信息:房間層數(shù),房間號碼等;查詢?nèi)胱∏闆r,查詢當(dāng)前費(fèi)用,退房、退出系統(tǒng)等功能。
二、基本要求
(1)、登記入住??梢暂斎攵鄠€信息,實(shí)現(xiàn)本系統(tǒng)數(shù)據(jù)的初始化。
(2)、列出所有的入住情況,用于顧客查詢以及辦理入住手續(xù)。
(3)、查詢當(dāng)前費(fèi)用:顯示顧客實(shí)時(shí)費(fèi)用,便于顧客查詢和退房時(shí)進(jìn)行付費(fèi)。
(4)、退房:辦理退房手續(xù),修改系統(tǒng)內(nèi)信息,將此顧客的住房置空。
(5)、退出系統(tǒng):對此次操作中信息的增刪改后的數(shù)據(jù)寫入文件中,保存后退出。
#include<stdio.h> #include<stdlib.h> #include<time.h> ? //調(diào)用系統(tǒng)的時(shí)間,通過時(shí)間的增減計(jì)算費(fèi)用 #include<string.h> #include<windows.h> #define N 10 #define HOURROOM 10 #define NORMALROOM 120 #define BIGROOM 300 #define WORTHROOM 500 #define GREATROOM 800 struct room_message{ ?? ?int number;?? ??? ?//房間號 ?? ?int people;?? ??? ?//有無入住 ?? ?int floor;?? ??? ?//樓層數(shù)(不同樓層房間類型不同) ?? ?time_t time;?? ??? ?//入住時(shí)間,無人住則置空 }ROOM[100]; void BuildRoom() { ? ?//創(chuàng)建房間 的函數(shù),對系統(tǒng)進(jìn)行數(shù)據(jù)的初始化 ?? ?FILE *fp=NULL; ?? ?int i,j; ?? ?if((fp=fopen("roommessage.dat","r"))==NULL) ?? ??? ?{ ?? ? ? ??? ?fp=fopen("roommessage.dat","w"); ?? ??? ??? ?for(i=0;i<N;i++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?for(j=0;j<N;j++) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?ROOM[i*?? ?10+j].number= j; ?? ??? ??? ??? ??? ??? ??? ?ROOM[i*?? ?10+j].floor= i; ?? ??? ??? ??? ??? ??? ??? ?ROOM[i*?? ?10+j].people= 0; ?? ??? ??? ??? ??? ??? ??? ?ROOM[i*?? ?10+j].time= 0; ?? ??? ??? ??? ??? ??? ??? ?fwrite(&ROOM[i*?? ?10+j],sizeof(struct room_message),1,fp); ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ?} ?? ?else {?? ? ?? ??? ?for(i=0;i<N;i++)?? ? ?? ??? ??? ?{ ?? ??? ??? ??? ?for(j=0;j<N;j++) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?fread(&ROOM[i*?? ?10+j],sizeof(struct room_message),1,fp); ?? ??? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ?fclose(fp); } void Printpay(int floor,int room,int fee,int people) { ? ?//打印所需費(fèi)用,根據(jù)時(shí)間計(jì)算費(fèi)用 ?? ??? ?time_t time1,time2; ?? ??? ?int a; ?? ??? ?time1 = ROOM[floor*10+room].time; ?? ??? ?time2 = time(NULL); ?? ??? ?if(people==0){ ?? ??? ??? ?printf("該房間沒有人\n");} ?? ??? ?else {?? ? ?? ??? ??? ?if(floor<2){ ?? ??? ??? ??? ?a = ((time2-time1)/3600)+1; ?? ??? ??? ??? ?printf("該房間的費(fèi)用為%d元\n",a*fee);} ?? ??? ?else{ ?? ??? ??? ?a=(((time2-time1)/3600)/24)+1; ?? ??? ??? ?printf("該房間的費(fèi)用為%d元\n",a*fee);} ?? ?} } void CheckOut() {?? ?//退房函數(shù),引用計(jì)算費(fèi)用函數(shù),并更改入住情況 ?? ?int roomnuber,choose,a,b,floor,room,fee; ?? ?FILE *fp=NULL; ?? ?do{ ?? ??? ?printf("\n請輸入您想退房的房間的房間號:"); ?? ??? ?scanf("%d",&roomnuber); ?? ??? ?floor=(roomnuber / 100) - 1; ?? ??? ?room=roomnuber%100; ?? ??? ?floor = (roomnuber/100)-1 ; ?? ??? ?room = (roomnuber%100)-1; ?? ??? ?if(floor>9||floor<0||room<0||room>9){ ?? ??? ??? ?printf("您的輸入有誤,請重新在1-9之間輸入\n"); ?? ??? ?} ?? ?}while(floor>9||floor<0||room<0||room>9); ?? ?printf("您要退的房間號為%d,它是",roomnuber); ?? ?if(floor==0||floor==1){?? ??? ??? ? ?? ??? ?printf("鐘點(diǎn)房\n"); ?? ??? ?fee=HOURROOM; ?? ?} ?? ?if(floor==2||floor==3){?? ??? ??? ? ?? ??? ?printf("標(biāo)準(zhǔn)間\n"); ?? ??? ?fee=NORMALROOM; ?? ?} ?? ?if(floor==4||floor==5){?? ??? ??? ? ?? ??? ?printf("商務(wù)間\n"); ?? ??? ?fee=BIGROOM; ?? ?} ?? ?if(floor==6||floor==7){?? ??? ??? ? ?? ??? ?printf("行政套房\n"); ?? ??? ?fee=WORTHROOM; ?? ?} ?? ?if(floor==8||floor==9){?? ??? ??? ? ?? ??? ?printf("豪華套房\n"); ?? ??? ?fee=GREATROOM; ?? ?} ?? ?do{ ?? ??? ?printf("\n您是否確定要退房。\n"); ?? ??? ?printf("1.是\n"); ?? ??? ?printf("2.不是\n"); ?? ??? ?scanf("%d",&choose); ?? ??? ?if(choose!=1&&choose!=2){ ?? ??? ??? ?printf("\n您的輸入有誤,請?jiān)?-2之間重新輸入\n"); ?? ??? ?} ?? ?}while(choose!=1&&choose!=2); ?? ?if(choose==1){ ?? ??? ?Printpay(floor,room,fee,ROOM[floor*10+room].people); ?? ??? ?ROOM[floor*10+room].people=0; ?? ??? ?ROOM[floor*10+room].time=0; ?? ??? ?fp=fopen("roommessage.dat","w");? ?? ??? ?for(a=0;a<N;a++){ ?? ??? ??? ?for(b=0;b<N;b++){ ?? ??? ??? ??? ?fwrite(&ROOM[a*?? ?10+b],sizeof(struct room_message),1,fp); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?printf("\n退房成功\n"); ?? ?} ?? ?fclose(fp); ?? ?system("pause"); } void PrintRoomFee(int a){ ? ? ? ? ? ? ? ? //打印房間價(jià)格 ?? ?if(a==1||a==2){ ?? ??? ?printf("\n鐘點(diǎn)房的費(fèi)用為每小時(shí)%d元\n",HOURROOM); ?? ?} ?? ?if(a==3||a==4){ ?? ??? ?printf("\n標(biāo)準(zhǔn)間的費(fèi)用為每天%d元\n",NORMALROOM); ?? ?} ?? ?if(a==5||a==6){ ?? ??? ?printf("\n商務(wù)間的費(fèi)用為每天%d元\n",BIGROOM); ?? ?} ?? ?if(a==7||a==8){ ?? ??? ?printf("\n行政套房的費(fèi)用為每天%d元\n",WORTHROOM); ?? ?} ?? ?if(a==9||a==10){ ?? ??? ?printf("\n豪華套房的費(fèi)用為每天%d元\n",GREATROOM); ?? ?} } void CalFee() { ?? ?int roomnuber,floor,room,fee; ?? ?do{ ?? ?printf("\n請輸入您想查詢費(fèi)用的房間的房間號(例如101,代表鐘點(diǎn)房1號):"); ?? ?scanf("%d",&roomnuber); ?? ?floor = (roomnuber/100)-1 ; ?? ?room = (roomnuber%100)-1; ?? ?if(floor>9||floor<0||room<0||room>9){ ?? ??? ?printf("您的輸入有誤,請?jiān)?-9之間重新輸入\n"); ?? ?} ?? ?}while(floor<0||floor>9||room<0||room>9); ?? ?printf("您要找的%d號房為",roomnuber); ?? ?if(floor==0||floor==1){?? ??? ??? ? ?? ??? ?printf("鐘點(diǎn)房\n"); ?? ??? ?fee=HOURROOM; ?? ?} ?? ?if(floor==2||floor==3){?? ??? ??? ? ?? ??? ?printf("標(biāo)準(zhǔn)間\n"); ?? ??? ?fee=NORMALROOM; ?? ?} ?? ?if(floor==4||floor==5){?? ??? ??? ? ?? ??? ?printf("商務(wù)間\n"); ?? ??? ?fee=BIGROOM; ?? ?} ?? ?if(floor==6||floor==7){?? ??? ??? ? ?? ??? ?printf("行政套房\n"); ?? ??? ?fee=WORTHROOM; ?? ?} ?? ?if(floor==8||floor==9){?? ??? ??? ? ?? ??? ?printf("豪華套房\n"); ?? ??? ?fee=GREATROOM; ?? ?} ?? ?Printpay(floor,room,fee,ROOM[floor*10+room].people); } void ScanRoom(){?? ?//查詢?nèi)胱〉暮瘮?shù),讀取入住情況 ?? ?int a,i,j; ?? ?FILE *fp=NULL; ?? ?void PrintRoomFee(int a); ?? ?printf("\n請選擇您要查詢的房間種類\n"); ?? ?printf("1.鐘點(diǎn)房\n"); ?? ?printf("2.標(biāo)準(zhǔn)間\n"); ?? ?printf("3.商務(wù)間\n"); ?? ?printf("4.行政套房\n"); ?? ?printf("5.豪華套房\n"); ?? ?scanf("%d",&a); ?? ?if((fp=fopen("roommessage.dat","r"))!=NULL)//判斷文件是否為空{(diào) ?? ??? ?for(i=0;i<N;i++) ?? ??? ?{ ?? ??? ??? ?for(j=0;j<N;j++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?fread(&ROOM[i*10+j],sizeof(struct room_message),1,fp); ?? ??? ??? ??? ?} ?? ??? ?} ?? ??? ??? ?if(a == 1){ ?? ??? ??? ?PrintRoomFee(a); ?? ??? ??? ?for(i=0;i<=1;i++){ ?? ??? ??? ??? ?for(j=0;j<10;j++){ ?? ??? ??? ??? ??? ?printf("\n第%d層",ROOM[i*10+j].floor+1); ?? ??? ??? ??? ??? ?printf("第%d號房",ROOM[i*10+j].number+1); ?? ??? ??? ??? ??? ?if(ROOM[i*10+j].people){ ?? ??? ??? ??? ??? ??? ?printf("房間已入住,請重新選擇"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else{ ?? ??? ??? ??? ??? ??? ?printf("房間未入住,可以選擇"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?if(a == 2){ ?? ??? ??? ?PrintRoomFee(a); ?? ??? ??? ?for(i=2;i<=3;i++){ ?? ??? ??? ??? ?for(j=0;j<10;j++){ ?? ??? ??? ??? ??? ?printf("\n第%d層",ROOM[i*10+j].floor+1); ?? ??? ??? ??? ??? ?printf("第%d號房",ROOM[i*10+j].number+1); ?? ??? ??? ??? ??? ?if(ROOM[i*10+j].people){ ?? ??? ??? ??? ??? ??? ?printf("房間已入住,請重新選擇"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else{ ?? ??? ??? ??? ??? ??? ?printf("房間未入住,可以選擇"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?if(a == 3){ ?? ??? ??? ?PrintRoomFee(a); ?? ??? ??? ?for(i=4;i<=5;i++){ ?? ??? ??? ??? ?for(j=0;j<10;j++){ ?? ??? ??? ??? ??? ?printf("\n第%d層",ROOM[i*10+j].floor+1); ?? ??? ??? ??? ??? ?printf("第%d號房",ROOM[i*10+j].number+1); ?? ??? ??? ??? ??? ?if(ROOM[i*10+j].people){ ?? ??? ??? ??? ??? ??? ?printf("房間已入住,請重新選擇); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else{ ?? ??? ??? ??? ??? ?printf("房間未入住,可以選擇"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?if(a == 4){ ?? ??? ??? ?PrintRoomFee(a); ?? ??? ??? ?for(i=6;i<=7;i++){ ?? ??? ??? ??? ?for(j=0;j<10;j++){ ?? ??? ??? ??? ??? ?printf("\n第%d層",ROOM[i*10+j].floor+1); ?? ??? ??? ??? ??? ?printf("第%d號房",ROOM[i*10+j].number+1); ?? ??? ??? ??? ??? ?if(ROOM[i*10+j].people){ ?? ??? ??? ??? ??? ??? ?printf("房間已入住,請重新選擇"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else{ ?? ??? ??? ??? ??? ??? ?printf("房間未入住,可以選擇"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?if(a == 5){ ?? ??? ??? ?PrintRoomFee(a); ?? ??? ??? ?for(i=8;i<=9;i++){ ?? ??? ??? ??? ?for(j=0;j<10;j++){ ?? ??? ??? ??? ??? ?printf("\n第%d層",ROOM[i*10+j].floor+1); ?? ??? ??? ??? ??? ?printf("第%d號房",ROOM[i*10+j].number+1); ?? ??? ??? ??? ??? ?if(ROOM[i*10+j].people){ ?? ??? ??? ??? ??? ??? ?printf("房間已入住,請重新選擇"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else{ ?? ??? ??? ??? ??? ??? ?printf("房間未入住,可以選擇"); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ?} } void CheckIn(){ ? ? ?//入住函數(shù),記錄時(shí)間,更改入住情況 ?? ?int a,b,c,i,j; ?? ?FILE *fp=NULL; ?? ?do{ ?? ??? ?printf("\n請輸入您想入住的房間層數(shù)(1~10)"); ?? ??? ?printf("\n1~2為鐘點(diǎn)房"); ?? ??? ?printf("\n3~4為標(biāo)準(zhǔn)間"); ?? ??? ?printf("\n5~6為商務(wù)間"); ?? ??? ?printf("\n7~8為行政套房"); ?? ??? ?printf("\n9~10為豪華套房\n"); ?? ??? ?scanf("%d",&a); ?? ??? ?if(a<1||a>10){ ?? ??? ??? ?printf("您的輸入有誤,請?jiān)?-10之間重新輸入\n"); ?? ??? ?} ?? ?}while(a<1||a>10); ?? ?PrintRoomFee(a); ?? ?do{ ?? ??? ?printf("\n請輸入您想入住的房間號(1~10):"); ?? ??? ?scanf("%d",&b);?? ? ?? ??? ?if(b<1||b>10){ ?? ??? ??? ?printf("您的輸入有誤,請?jiān)?-10之間重新輸入\n");?? ?} ?? ?}while(b<1||b>10); ?? ?if((fp=fopen("roommessage.dat","rb"))!=NULL){?? ??? ??? ?//打開文件 ?? ?if(ROOM[(a-1)*10+(b-1)].people==0){?? ??? ?//判斷房間是否可住 ?? ?for(i=0;i<N;i++) ?? ??? ?{ ?? ??? ??? ?for(j=0;j<N;j++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?fread(&ROOM[i*10+j],sizeof(struct room_message),1,fp); ?? ??? ??? ??? ?} ?? ??? ?} ?? ??? ?fclose(fp); ?? ??? ?printf("\n請輸入計(jì)劃入住的人數(shù):"); ?? ??? ?scanf("%d",&c); ?? ??? ?ROOM[(a-1)*10+b-1].people=c; ?? ??? ?ROOM[(a-1)*10+b-1].time=time(NULL); ?? ??? ?fp=fopen("roommessage.dat","w"); ?? ??? ?for(a=0;a<N;a++){ ?? ??? ??? ?for(b=0;b<N;b++){ ?? ??? ??? ??? ?fwrite(&ROOM[a*?? ?10+b],sizeof(struct room_message),1,fp); ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?else{ ?? ??? ?printf("\n抱歉,該房間已經(jīng)有人入住\n"); ?? ??? ?printf("請選擇其他的房間入住\n"); ?? ?} ?? ?} ?? ?fclose(fp); } int ChangeRoom(){ ? ?//酒店管理系統(tǒng)的菜單 ?? ?int step; ?? ?BuildRoom(); ?? ?do{?? ??? ??? ??? ?//主程序循環(huán) ?? ??? ?do{?? ??? ??? ??? ?//選擇界面循環(huán) ?? ??? ?system("cls"); ?? ??? ?printf("\n請輸入您想執(zhí)行的步驟序號\n"); ?? ??? ?printf("1.登記入住\n"); ?? ??? ?printf("2.查詢?nèi)胱∏闆r\n"); ?? ??? ?printf("3.查詢當(dāng)前費(fèi)用\n"); ?? ??? ?printf("4.退房\n"); ?? ??? ?printf("5.返回主界面菜單\n"); ?? ??? ?scanf("%d",&step); ?? ??? ?if(step<1||step>5) ?? ??? ??? ?{ ?? ??? ??? ?printf("\n您的輸入有誤,請?jiān)?-5之間重新輸入\n"); ?? ??? ??? ?system("pause"); ?? ??? ??? ?} ?? ??? ?}while(step<1||step>5); ?? ??? ?switch(step){ ?? ??? ?case 1:CheckIn();break; ?? ? ? ?case 2:ScanRoom();break; ?? ??? ?case 3:CalFee();break; ?? ??? ?case 4:CheckOut();break; ?? ??? ?case 5:return 0; ?? ?} ?? ?printf("\n請問你還需要執(zhí)行其他的管理操作嗎?\n"); ?? ?printf("1.是\n"); ?? ?printf("2.否\n"); ?? ?do{ ?? ??? ?scanf("%d",&step); ?? ??? ?if(step<1||step>2) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("\n您的輸入有誤,請?jiān)?-2之間重新輸入\n"); ?? ??? ??? ?} ?? ?}while(step<1||step>2); ?? ?}while(step==1); ?? ?return 0; } int main() { ?? ?int step; ?? ?BuildRoom(); ?? ?do{?? ??? ??? ??? ?//主程序循環(huán) ?? ??? ?do{?? ??? ? ?//選擇界面循環(huán) ?? ??? ?system("cls"); ?? ??? ?printf("\t\t ?* ?歡迎使用酒店管理系統(tǒng) ?* \n"); ?? ??? ?printf("\t\t_____________________________\n"); ?? ??? ?printf("\n\t\t||\t1.登記入住\t ?||\n"); ?? ??? ?printf("\t\t||\t2.查詢?nèi)胱∏闆r\t ?||\n"); ?? ??? ?printf("\t\t||\t3.查詢當(dāng)前費(fèi)用\t ?||\n"); ?? ??? ?printf("\t\t||\t4.辦理退房?? ?\t ?||\n"); ?? ??? ?printf("\t\t||\t5.退出系統(tǒng)\t ?||\n"); ?? ??? ?printf("\t\t_____________________________\n"); ?? ??? ?scanf("%d",&step); ?? ??? ?if(step<1||step>5) ?? ??? ??? ?{ ?? ??? ??? ?printf("\n您的輸入有誤,請?jiān)?-10之間重新輸入\n"); ?? ??? ??? ?system("pause"); ?? ??? ??? ?} ?? ??? ?}while(step<1||step>5); ?? ??? ?switch(step){ ?? ??? ?case 1:CheckIn();break; ?? ? ? ?case 2:ScanRoom();break; ?? ??? ?case 3:CalFee();break; ?? ??? ?case 4:CheckOut();break; ?? ??? ?case 5:exit(0); ?? ?} ?? ?printf("\n請問你還需要執(zhí)行其他的管理操作嗎?\n"); ?? ?printf("1.是\n"); ?? ?printf("2.否\n"); ?? ?do{ ?? ??? ?scanf("%d",&step); ?? ??? ?if(step<1||step>2) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("\n您的輸入有誤,請?jiān)?-2之間重新輸入\n"); ?? ??? ??? ?} ?? ?}while(step<1||step>2); ?? ?}while(step==1); ?? ?return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言實(shí)現(xiàn)支持動態(tài)拓展和銷毀的線程池
這篇文章主要為大家介紹了C語言實(shí)現(xiàn)支持動態(tài)拓展和銷毀的線程池,感興趣的小伙伴們可以參考一下2016-01-01linux根據(jù)pid獲取進(jìn)程名和獲取進(jìn)程pid(c語言獲取pid)
status文件,第一行的Name即為進(jìn)程名,C程序?qū)崿F(xiàn)根據(jù)PID獲取進(jìn)程名和根據(jù)進(jìn)程名獲取PID,大家參考使用吧2013-12-12C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
這篇文章主要介紹了C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09C語言中g(shù)etchar()的原理以及易錯點(diǎn)解析
用getchar()函數(shù)讀取字符串時(shí),字符串會存儲在輸入緩沖區(qū)中,包括輸入的回車字符,下面這篇文章主要給大家介紹了關(guān)于C語言中g(shù)etchar()的原理以及易錯點(diǎn)解析的相關(guān)資料,需要的朋友可以參考下2022-03-03C++?LeetCode1769移動所有球到每個盒子最小操作數(shù)示例
這篇文章主要為大家介紹了C++?LeetCode1769移動所有球到每個盒子所需最小操作數(shù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12C/C++?Qt?TreeWidget?單層樹形組件應(yīng)用小結(jié)
TreeWidget?目錄樹組件,該組件適用于創(chuàng)建和管理目錄樹結(jié)構(gòu),在開發(fā)中我們經(jīng)常會把它當(dāng)作一個升級版的ListView組件使用,本文將通過TreeWidget實(shí)現(xiàn)多字段顯示,并增加一個自定義菜單,通過在指定記錄上右鍵可彈出該菜單并對指定記錄進(jìn)行操作2021-11-11