酒店住房信息管理系統(tǒng)_第1頁
酒店住房信息管理系統(tǒng)_第2頁
酒店住房信息管理系統(tǒng)_第3頁
酒店住房信息管理系統(tǒng)_第4頁
酒店住房信息管理系統(tǒng)_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、一、題目(問題)描述模擬酒店住房信息管理系統(tǒng)程序,進(jìn)入系統(tǒng),目錄有登記入住,查詢房間入住,查詢當(dāng)前費(fèi)用,結(jié)賬退房,幫助說明,關(guān)于,保存當(dāng)前信息,退出系統(tǒng)。系統(tǒng)中包括各種信息,程序運(yùn)行結(jié)果正確,操作方便,邏輯層次清晰。如圖1解:圖1 酒店住房信息管理系統(tǒng)二、功能分析通過體驗(yàn)并分析后得出酒店住房信息管理系統(tǒng)主要功能包括:1.登記入??;2.查詢房間入住; 3.查詢當(dāng)前費(fèi)用;4.結(jié)賬退房;5.幫助說明;6.關(guān)于; 0.退出.三、系統(tǒng)設(shè)計1程序總體結(jié)構(gòu)程序中由主模塊負(fù)責(zé)協(xié)調(diào)各功能模塊的工作。進(jìn)入程序后,根據(jù)輸入操作,執(zhí)行相應(yīng)的讀入、查詢、排序、增加、刪除、顯示當(dāng)前信息、保存、顯示平均成績、退出等功能,并

2、在屏幕上輸出。酒店信息管理系統(tǒng)登記入住查詢當(dāng)前費(fèi)用查詢房間入住結(jié)賬退房幫助說明關(guān)于退出 圖2 酒店住房信息管理系統(tǒng)的總體結(jié)構(gòu)圖2.界面設(shè)計 如圖3,下面的Choose:表示通過選擇1、2、3、4、5、6、0等來進(jìn)入各項(xiàng)功能,從而實(shí)現(xiàn)程序?qū)π畔⒌墓芾怼?圖3 管理信息界面3輸入方式設(shè)計此程序?yàn)閐os下程序,因此簡化為鍵盤控制。1、2、3、4、5、6、0分別表示各項(xiàng)功能。回車表示確認(rèn)進(jìn)入各個程程序;主頁面開始之后,鍵入:1.登記入??;2.查詢房間入住;3.查詢當(dāng)前費(fèi)用;4.結(jié)賬退房;5.幫助說明;6.關(guān)于;0.退出.4重要數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計酒店住房信息管理系統(tǒng)結(jié)構(gòu)typedef struct tm

3、 tm; /*struct tm命名為tm*/ typedef struct node /*把struct 命名為node*/void *elem; /*無類型指針類型成員*/struct node *next; /*指針類型成員存放*/ node_t; /*指針地址*/ typedef struct room /* 房間結(jié)構(gòu) */int room_number; /*房間號 */Bool room_is_used; /*房間已使用*/Type room_kind; /*房間種類*/ char guest_name20; /*客人姓名*/char guest_Id19; /*省份證號*/ do

4、uble room_price; /*房間價格*/tm *start_time; /*入住時間*/tm *end_time; /*退房時間*/double total_cost; /*合計消費(fèi)金額*/ room_t;5函數(shù)設(shè)計文件中函數(shù)的功能如下:文件名函數(shù)原型函數(shù)功能“filemenu.c”void welcome()顯示歡迎頁面void menu()主菜單頁面void locate position();定位光標(biāo)void animal();顯示一個小動畫void animation();顯示另一動畫void menu();菜單項(xiàng)void goodbai()完成時退出程序void price

5、i nfo()顯示房間價格四、關(guān)鍵技術(shù)、難點(diǎn)及其解決方法此程序的關(guān)鍵是是否有保存功能,而且是保存把信息保存到文件中后退出程序,當(dāng)再次進(jìn)入程序是是否能查找到上次登陸是錄入的信息,還有就是當(dāng)系統(tǒng)要查找、刪除信息是如何確定程序中是否有你要查找、刪除的信息,來驗(yàn)證系統(tǒng)中是否存在所要的信息。五、測試方法1.按鍵測試。檢查正確的輸入時,是否界面正確表現(xiàn);錯誤輸入時,是否無效。2.程序運(yùn)行測試。正確運(yùn)行,觀察是否異常;運(yùn)行時中斷,程序是否正確退出。六、總結(jié)通過這次課程設(shè)計,使我受到了一次用專業(yè)知識、專業(yè)技能分析和解決問題的全面系統(tǒng)的鍛煉。對一些基礎(chǔ)知識有了更規(guī)范的認(rèn)識。讓我理解到結(jié)構(gòu)化設(shè)計相關(guān)知識在實(shí)際方面

6、的應(yīng)用的操作,讓我更深刻理解的“自頂向下,逐步細(xì)化的”思想;模塊設(shè)計,多個函數(shù)并用;代碼的重要性及注釋的關(guān)鍵性。使我在綜合知識的選用方面,在應(yīng)用軟件開發(fā)的基本思想、方法方面,以及在常用編程設(shè)計思路技巧的掌握方面都能向前邁了一大步。 此外,我深深地體現(xiàn)到進(jìn)行軟件開發(fā)不是一件簡單的事情,它需要設(shè)計者具有全面的專業(yè)知識、縝密的思維、嚴(yán)謹(jǐn)?shù)墓ぷ鲬B(tài)度以及較高的分析問題、解決問題的能力,而我在很多方面還有欠缺。最后,我要衷心感謝老師在我的設(shè)計過程中給予我的極大幫助,使我能夠及時、順利地完成此次的課程設(shè)計。同時,也要感謝我的指導(dǎo)老師和同學(xué)們在本系統(tǒng)的設(shè)計過程中給予我的支持和幫助。附1、使用說明:1.功能說明

7、.此程序分為7個選項(xiàng),分別是登記入住、查詢房間入住、查詢當(dāng)前費(fèi)用、查詢當(dāng)前費(fèi)用、結(jié)賬退房、幫助說明、關(guān)于、退出等功能,當(dāng)選1時是進(jìn)入登記入住功能,2是進(jìn)入查詢房間入住功能,3是進(jìn)入查詢當(dāng)前費(fèi)用功能,4是結(jié)賬退房功能、5是顯示幫助說明功能、6是顯示關(guān)于的信息功能,0是退出系統(tǒng)功能。2.用戶手冊. .顯示主菜單后鍵入數(shù)字: 1.登記入??;2.查詢房間入住;3.查詢當(dāng)前費(fèi)用;4.結(jié)賬退房;5.幫助說明;6.關(guān)于;0.退出.附2、代碼清單*l “filemenu,c” *#include <stdio.h>#include <stdlib.h>#include <time

8、.h>#include <math.h>#include <conio.h>#include <ctype.h>#include <string.h>#include <windows.h>#define ROOM_MAX 100#define TYPE_NUM 4#define WIDTH 80#define HIGH 25typedef struct tm tm;typedef enum False, True Bool;typedef enum Single, Standard, Vip, President Type;t

9、ypedef struct nodevoid *elem;struct node *next; node_t;/* 房間結(jié)構(gòu) */typedef struct roomint room_number;Bool room_is_used;Type room_kind;char guest_name20;char guest_Id19;double room_price;tm *start_time;tm *end_time;double total_cost; room_t;void welcome();void menu();void locate_position();void animal

10、();void animation(int x);void goodbye();node_t *list_init();node_t *list_add(node_t *head, void *elem);node_t *list_del(node_t *head, node_t *dest);node_t *list_for_each(node_t *head, void *(*func)(node_t *head, node_t *cur, void *arg),void *arg);node_t *list_reverse(node_t *head);void list_destory(

11、node_t *head);void *mprint(node_t *head, node_t *cur, void *arg);void *madd(node_t *head, node_t *cur, void *arg);void *mdel(node_t *head, node_t *cur, void *arg);void room_add(node_t *head, room_t hotalTYPE_NUMROOM_MAX);void room_del(node_t *head);void price_info();int increase_two(int i);double pr

12、ice_of_room(Type kind);char *Type_to_string(Type kind);char *Bool_to_string(Bool _bool_);room_t *get_first_room(room_t hotalROOM_MAX, Type kind);/* increase_two* * i 要自增的數(shù)* 調(diào)用一次增加 2*/int increase_two(int i)return i+2;/* price_of_room* * kind 房間類型* 根據(jù)房間的類型得到房間的單價*/double price_of_room(Type kind)retur

13、n pow(2, (int)kind) * 100;/* 定位光標(biāo)* x 要定位的列數(shù)* y 要定位的行數(shù)* 無返回值* 調(diào)用API,定位光標(biāo)位置,比用空格,Tab, 回車定位方便許多*/void locate_position(int x, int y)COORD C;C.X = x;C.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), C);/* welcome* 顯示歡迎界面 (總菜單界面的大部分內(nèi)容)* 列出用戶可進(jìn)行的操作* 每次任務(wù)完成后,再次調(diào)用些界面*/void welcome()int positi

14、on = 4;locate_position(25, 3);printf("酒店房間登記與計費(fèi)管理系統(tǒng)");locate_position(30, position = increase_two(position);printf("1: 登記入住");locate_position(30, position = increase_two(position);printf("2: 查詢房間入住");locate_position(30, position = increase_two(position);printf("3:

15、查詢當(dāng)前費(fèi)用");locate_position(30, position = increase_two(position);printf("4: 結(jié)賬退房");locate_position(30, position = increase_two(position);printf("5: 幫助說明");locate_position(30, position = increase_two(position);printf("6: 關(guān)于");locate_position(30, position = increase_tw

16、o(position);printf("0: 退出");locate_position(27, position = increase_two(position);printf("請選擇要辦理的業(yè)務(wù)n");void goodbye()char is_leave = 'i'char str15 = "color 0"char str_color2;int color;time_t tTime;tm *tBlock;locate_position(33, 10);printf("確認(rèn)退出(Y/N)?")

17、;while (is_leave != 'Y' && is_leave != 'N')is_leave = kbhit() ? toupper(getch() : 'm'animal(1);animation(6);animal(18);animation(19);animal(20);animation(21);animal(22);animation(23);strcpy(str, "color 0");color = rand() % 8 + 8; itoa(color,str_color, 16);st

18、rcat(str, str_color);system(str);locate_position(29,4);tTime = time(NULL);tBlock = localtime(&tTime);printf("%s %2d:%02d:%02d", _DATE_, tBlock->tm_hour, tBlock->tm_min, tBlock->tm_sec);locate_position(33, 10);printf("確認(rèn)退出(Y/N)?");_sleep(1000);if (toupper(is_leave) =

19、'Y')locate_position(30, 13);printf("謝謝使用,歡迎下次來訪!");locate_position(0,0);getch();exit(0);elsesystem("cls");menu();/* price_info* 無參數(shù),顯示房間的價格*/void price_info()int position = 1;int weidth = 20;printf("n房間的收費(fèi)如下-");locate_position(weidth, position = increase_two(pos

20、ition);printf("1: %-20s單 間%10.2f", Type_to_string(Type)0), price_of_room(Type)0);locate_position(weidth, position = increase_two(position);printf("2: %-20s標(biāo) 準(zhǔn) 間%10.2f", Type_to_string(Type)1), price_of_room(Type)1);locate_position(weidth, position = increase_two(position);printf(

21、"3: %-20s房 間%10.2f", Type_to_string(Type)2), price_of_room(Type)2);locate_position(weidth, position = increase_two(position);printf("4: %-20s總 統(tǒng) 套 房%10.2f", Type_to_string(Type)3), price_of_room(Type)3);locate_position(weidth + 6, position = increase_two(position);printf("從中

22、午十二點(diǎn)到第二天中午十二點(diǎn)算一天n");locate_position(weidth + 12, position = increase_two(position);printf("不足一天按一天算");_sleep(3000);/* animation* 展示一個小動畫*x 在第幾行展示 *其中隨著時間流逝,>>>>>>> 不斷的向右移動*/void animation(int x)static int i = 1;locate_position(1, x);printf(" =");locate_p

23、osition(i % (WIDTH-5), x);printf(">>>>>");i += 3;if (i > WIDTH - 5)i = 1;/* 和上面的函數(shù)相似,這次是向左*/void animal(int x)static int i = 74;locate_position(1, x);printf(" -");locate_position(i % (WIDTH-5), x);printf("<<<<<");i -= 5;if (i < 0)i =

24、WIDTH - 6;/* menu* 菜單項(xiàng)* * 沒有參數(shù),顯示菜單界面* 根據(jù)不同的選項(xiàng),進(jìn)入不同的子模塊*/void menu()int color;int i = 0, j;char str15;char str_color2;char ch = 'm'time_t tTime;tm *tBlock;room_t hotalTYPE_NUMROOM_MAX;node_t *head = list_init();memset(&hotal, 0, sizeof(room_t) * TYPE_NUM * ROOM_MAX);/* 初始化房間信息 */for (i =

25、 0; i < TYPE_NUM; i+)for (j = 0; j < ROOM_MAX; j+)hotalij.room_number = (i + 1) * 100 + j;hotalij.room_kind = (Type)i;hotalij.room_price = price_of_room(Type)i);if (i*i + j = 12)hotalij.room_is_used = True;list_add(head, &hotalij);srand(unsigned)time(NULL);system("title 酒店房間登記與計費(fèi)管理系統(tǒng)&

26、quot;);while (ch != '0')ch = kbhit() ? getch() : 'm'switch(ch)case '1': system("cls");room_add(head, hotal);system("pause");system("cls");break;case '2':system("cls");printf("n所有用戶信息如下nn");printf("房間號房間類型用戶名 用戶證件

27、單價n");printf("-|-|-|-|-n");list_for_each(head, mprint, NULL);system("pause");system("cls");break;case '3':system("cls");price_info();system("pause");system("cls");break;case '4':system("cls");room_del(head);sy

28、stem("pause");system("cls");break;case '5':system("cls");printf("(1)以下是主頁:請按提示輸入所需的服務(wù);(2)輸入提示數(shù)值:1,2,3,4,5,6,0!n") ;break;case '6':system("cls");printf("(1)系統(tǒng)時間為機(jī)器時間,請調(diào)整準(zhǔn)確時間;(2)存盤為系統(tǒng)存盤;(3)注意輸入格式要有效.n");break;case '0':

29、system("cls");goodbye();break;default:break;/* 顯示動畫效果 */animal(22);animation(1);animation(23);strcpy(str, "color 0");color = rand() % 8 + 8; itoa(color,str_color, 16);strcat(str, str_color);system(str);welcome();locate_position(29,4);tTime = time(NULL);tBlock = localtime(&tTi

30、me);printf("%s %2d:%02d:%02d", _DATE_, tBlock->tm_hour, tBlock->tm_min, tBlock->tm_sec);locate_position(48, 20);_sleep(1000);/* list_init* 初始化鏈表,這個鏈表為循環(huán)鏈表, 有頭結(jié)點(diǎn)*/node_t *list_init()node_t *head = (node_t *)malloc(sizeof(node_t);head->elem = NULL;head->next = head;return head

31、;/* list_add* 向鏈表里面添加結(jié)點(diǎn)* * head 鏈表的頭結(jié)點(diǎn)* elem 結(jié)點(diǎn)中的數(shù)據(jù)* 此列表為尾插法*/node_t *list_add(node_t *head, void *elem)node_t *new_node = (node_t *)malloc(sizeof(node_t);new_node->elem = elem;new_node->next = head->next;head->next = new_node;return new_node;/* list_del* 刪除列表中的元素* * head 列表的頭結(jié)點(diǎn)* dest 要刪

32、除的結(jié)點(diǎn)* 給出要刪除的結(jié)點(diǎn),從頭結(jié)點(diǎn)開始找到要刪除的結(jié)點(diǎn),然后刪除* 表頭元素不能刪除*/node_t *list_del(node_t *head, node_t *dest)node_t *pre = head;node_t *cur = pre->next;while (cur != dest)if (cur != head)pre = pre->next;cur = cur->next;elsereturn head;pre->next = cur->next;/* 釋放指針后直接賦值為 NULL, 預(yù)防 野指針 * free(cur);* cur =

33、NULL; * 但是這個地方不能free了,因?yàn)樗脑匕蟹块g數(shù)組*而房間還是要用的。所以就不能消了。*/return pre->next;/* list_for_each* 遍歷鏈表* * head 鏈表頭結(jié)點(diǎn)* func 函數(shù)指針,對不同的遍歷進(jìn)行不同的操作* arg 參數(shù), 有時候可以不用,主要是為了向func所指向的函數(shù)傳遞參數(shù)*/node_t *list_for_each(node_t *head,void *(*func)(node_t *head, node_t *cur, void *arg), void *arg)node_t *cur = head->nex

34、t;while (cur != head)func(head, cur, arg);cur = cur->next;return head;/* list_reverse* 反轉(zhuǎn)鏈表*head 要轉(zhuǎn)的鏈表的表頭結(jié)點(diǎn)*鏈表調(diào)換過來,原來的表頭現(xiàn)在為表尾,不過對于循環(huán)鏈表來說這個操作很簡單*/node_t *list_reverse(node_t *head)node_t *pre = head;node_t *cur = pre->next;node_t *nxt = cur->next;while (cur != head)cur->next = pre;pre = c

35、ur;cur = nxt;nxt = nxt->next;cur->next = pre;return head;/* list_destory* 銷毀鏈表*head 要銷毀鏈表的表頭結(jié)點(diǎn)*程序退出前可以把鏈表銷毀*/void list_destory(node_t *head)node_t *cur = head->next;while (cur != head)head->next = cur->next;free(cur);cur = cur->next;free(head);/* mprint* 打印結(jié)點(diǎn)的內(nèi)容*head 鏈表的頭結(jié)點(diǎn)本函數(shù)不用,為了

36、給list_for_each 調(diào)用*cur 要打印的當(dāng)前結(jié)點(diǎn)*arg 占位*/void *mprint(node_t *head, node_t *cur, void *arg)printf("%dt%-15s%-10s%-20stt%4.2f(元/天)n",(room_t *)(cur->elem)->room_number,Type_to_string(room_t *)(cur->elem)->room_kind),(room_t *)(cur->elem)->guest_name,(room_t *)(cur->elem)-

37、>guest_Id,(room_t *)(cur->elem)->room_price);return NULL;/* mdel* 刪除給定 元素內(nèi)容 的結(jié)點(diǎn)* head 鏈表的頭結(jié)點(diǎn)* cur 要刪除的結(jié)點(diǎn)* arg 要刪除結(jié)點(diǎn)中的一項(xiàng)內(nèi)容* 通過arg, 找到要刪除的結(jié)點(diǎn),再調(diào)用list_del刪除結(jié)點(diǎn)*/void *mdel(node_t *head, node_t *cur, void *arg)if (room_t *)(cur->elem)->room_number = *(int *)arg)list_del(head, cur);return NU

38、LL;/* Bool_to_string* _bool_ 將給定的ool類型變量返回tring值用于輸出*/char *Bool_to_string(Bool _bool_)switch (_bool_)case False: return "False"case True: return "True"default: return NULL;/* Type_to_string* kind 將給定的ype類型變量返回tring值用于輸出*/char *Type_to_string(Type kind)switch (kind)case Single: r

39、eturn "Single"case Standard: return "Standard"case Vip: return "Vip"case President: return "President"default: return NULL;/* get_first_room* 得到第一個為空的房間*hotal 房間數(shù)組*kind 哪一種類型的房間*/room_t *get_first_room(room_t hotalROOM_MAX, Type kind)int i;for (i = 0; i < R

40、OOM_MAX; i+, hotal+)if (!hotal->room_is_used)return hotal;return NULL;/* room_add* 將要住處的房間添加到房間鏈表里面。*hoad 鏈表頭*hotal 整個酒店的房間* 首先由房客確定要居住的房間類型*根據(jù)類型,調(diào)用get_first_room得到第一個沒有居住的房間*再把房間信息填完整,最后加入到房間鏈表里面。*/void room_add(node_t *head, room_t hotalTYPE_NUMROOM_MAX)int position = 1;Type kind;time_t timer =

41、 time(NULL);room_t *room_dest;locate_position(30, position = increase_two(position);printf("一共有四種類型的房間nn");locate_position(25, position = increase_two(position);printf("1: Single 單 間");locate_position(25, position = increase_two(position);printf("2: Standard 標(biāo) 準(zhǔn) 間");loc

42、ate_position(25, position = increase_two(position);printf("3: Vip 房 間");locate_position(25, position = increase_two(position);printf("4: President 總 統(tǒng) 套 房");locate_position(25, position = increase_two(position);printf("0: Esc 取消n");locate_position(25, position = increase_two(position);printf("請選擇要居住的類型,按0取消本次操作:n");locate_position(30, position = increase_two(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論