酒店管理系统代码
- 格式:docx
- 大小:23.20 KB
- 文档页数:12
酒店管理系统c语言程序设计以下是一个简单的酒店管理系统的 C 语言程序设计示例,包括了客户入住、退房和查询房间状态等基本功能。
请注意,这只是一个简化的示例,实际的酒店管理系统可能需要更多的功能和复杂的逻辑。
```c#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_ROOMS 100#define MAX_CUSTOMERS 100// 房间结构体struct Room {int roomNumber;int isOccupied;int customerID;};// 客户结构体struct Customer {int customerID;char customerName[50];};// 房间列表struct Room rooms[MAX_ROOMS];// 客户列表struct Customer customers[MAX_CUSTOMERS];// 初始化房间列表void initRooms() {for (int i = 0; i < MAX_ROOMS; i++) {rooms[i].roomNumber = i + 1;rooms[i].isOccupied = 0;rooms[i].customerID = 0;}}// 初始化客户列表void initCustomers() {for (int i = 0; i < MAX_CUSTOMERS; i++) {customers[i].customerID = i + 1;strcpy(customers[i].customerName, "Customer");}}// 查找空闲房间int findFreeRoom() {for (int i = 0; i < MAX_ROOMS; i++) {if (rooms[i].isOccupied == 0) {return i;}}return -1;}// 客户入住void checkIn(int customerID, int roomNumber) {int freeRoom = findFreeRoom();if (freeRoom != -1) {rooms[freeRoom].isOccupied = 1;rooms[freeRoom].customerID = customerID;printf("Customer %d checked in to Room %d\n", customerID, roomNumber); } else {printf("No free rooms available\n");}}// 客户退房void checkOut(int roomNumber) {for (int i = 0; i < MAX_ROOMS; i++) {if (rooms[i].roomNumber == roomNumber && rooms[i].isOccupied == 1) { rooms[i].isOccupied = 0;rooms[i].customerID = 0;printf("Customer checked out of Room %d\n", roomNumber);return;}}printf("Room not found\n");}// 查询房间状态void viewRoomStatus(int roomNumber) {for (int i = 0; i < MAX_ROOMS; i++) {if (rooms[i].roomNumber == roomNumber) {if (rooms[i].isOccupied == 1) {printf("Room %d is occupied by Customer %d\n", roomNumber, rooms[i].customerID);} else {printf("Room %d is vacant\n", roomNumber);}return;}}printf("Room not found\n");}// 主函数int main() {initRooms();initCustomers();int choice;while (1) {printf("1. Check In\n2. Check Out\n3. View Room Status\n4. Exit\n"); scanf("%d", &choice);switch (choice) {case 1:int customerID, roomNumber;printf("Enter customer ID: ");scanf("%d", &customerID);printf("Enter room number: ");scanf("%d", &roomNumber);checkIn(customerID, roomNumber);break;case 2:printf("Enter room number: ");scanf("%d", &roomNumber);checkOut(roomNumber);break;case 3:printf("Enter room number: ");scanf("%d", &roomNumber);viewRoomStatus(roomNumber);break;case 4:exit(0);break;default:printf("Invalid choice\n");}}return 0;}```上述代码实现了一个简单的酒店管理系统,包括客户入住、退房和查询房间状态等功能。
本源码下载地址:/ 酒店管理系统前台流程文档流程图目录DT_CKGL 常来客管理 (Form) (共 1 页)DT_CKLB 由常来客登记时的列表 (Form) (共 1 页)DT_KFHF 客房换房 (Form) (共页)DT_KFFP 派房 (Form) (共 1 页) 1999.04.12DT_KRDJ 客人登记 (Form) (共页)DT_KRGL 客人管理 (Form) (共 1 页)DT_MAIN 前台接待主菜单 (Form) (共 3 页)DT_SFDJ 散客无预订登记 (Form) (共 1 页)DT_SYDJ 散客有预订登记 (Func) (共1 页)DT_TDGL 团队管理 (Form) (共 1 页) 1999.04.12DT_TDDJ 团队登记 (Form) (共页)DT_TFDJ 团队无预订登记 (Form) (共 1 页) 1999.04.12DT_TYDJ 团队有预订登记 (Func) (共1 页) 1999.04.12DT_WGCGL 外管处数据管理 (Form) (共 2 页) 1999.04.12DT_YDLB 由预订登记时的列表 (Form) (共 1 页) 1999.04.12DT_ZCKBZ 早餐卡标准设定 (Form) (共 2 页)DT_ZCKCX 免费早餐卡查询 (Form) (共 1 页) 1999.04.12PUB_FJFL 将字符串转换到数值数组 (Func) (共 1 页) 1999.04.12PUB_JOIN 将数值数组转换到字符串 (Func) (共 1 页) 1999.04.12PUB_ZHPD 判断帐号合法性 (Form) (共 1 页)ZW_SJK 确定帐号使用的帐首及帐首归档表名 (Func) (共 1 页)ZW_ZHQR 前台帐务客帐结算时检查对方帐号的合法性,并输出对应数据库 (Func) (共 1 页)PUB_YDEN 预订单归档 (Func) (共页)系 统 名:大连国际博览中心酒店管理系统模块名称:DT_MAIN.FRM (前台接待主菜单)说 明:建立前台接待系统的主菜单输入 处理 输出主菜单为 1.预定管理 2.住客管理 3.信息查询 4.打印报表 5.日常业务 6.退出各菜单明细说明1.预订管理预订管理 pub_ydgl会议预订 pub_hyyd预订等待 pub_wait2.住客管理散客管理 dt_krgl团队管理 dt_tdgl换房 dt_kfhf并房错误 dt_hfccl赃房修改 kf_zfxg3.信息查询预订单查询 pub_ydll预订档案查询 pub_ydda 在店团队查询 pub_ztcx离店团队查询 pub_ztda 在店客人查询 pub_zkcx 离店客人查询 pub_zkda 客房出租率查询 pub_kfzl 写字间出租情况 pub_xzj 长包房出租情况 pub_cbf日期:1999/03/11 制作人: 梁 卫 共 3 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_MAIN.FRM (前台接待主菜单)说 明:建立前台接待系统的主菜单输入 处理 输出住客住房情况查询 pub_zkzf房价查询 pub_fjcx房态查询 pub_ftcx with "00",0,""房态形象查询 pub_ftxx客房利用查询 pub_lycx with "SY",date(),date()+365,""本地同行住客情况 pub_ther早餐卡数据查询 dt_zckcx外管处数据查询 dt_wgccx免费房数据查询 dt_zkfcx分段折扣率查询 dt_zkfdc特殊房数据查询 dt_tsfcx双人间住单人查询 dt_srfcx当日电话费查询 pub_chcx历史电话费查询 pub_chda客人等级查询 kf_vip4.打印报表外宾分析打印 dt_wbbdy宾客国籍统计表 dt_zkgj客房营业报打印 dt_kfyyb客房出租预报打印 dt_czyc客房出租情况月报 dt_czyb预订未达、取消 dt_ydwq住客报告表 dt_zsdy日期:1999/03/11 制作人: 梁 卫 共 3 页 第 2 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_MAIN.FRM (前台接待主菜单)说 明:建立前台接待系统的主菜单输入 处理 输出5.日常事务常来客管理 pub_ckgl早餐卡领用 dt_zck with "领用","",0早餐卡发放 dt_zck with "发放","",0客房预留数 pub_kfyl操作员密码 pub_psw早餐卡标准 dt_zckbz预报数据登记 dt_lszk订房方式设置 jf_dffs with 6,30,"YD_DFFS",1抵达方式设置 jf_dffs with 6,30,"YD_DDFS",1特殊服务设置 jf_dffs with 6,30,"YD_TSFW",1订房员补记 dt_xgdfy外管处信息不全的客人 dt_krwgc新旧帐号对照表 zw_gdtx7.退出日期:1999/03/11 制作人: 梁 卫 共 3 页 第 3 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_ZCKBZ.FRM (早餐卡标准)说 明:用于输入早餐卡标准及餐厅和客房部门分担额输入 处理 输出单击菜单《早餐卡标准》按 F2 键或单击<增加>按钮 按 F3 键或单击<修改>按钮 按 F4 键或单击<删除>按钮按 F5 键或单击<打印>按钮 0.显示早餐卡标准列表界面1.激活编辑界面2.输入早餐卡标准 m_zck_bz若为增加; 直接键入早餐卡标准 m_zck_bz(条件;> = 0 的数字), 转 3;修改; 键入 m_zck_bz 后, 在 DT_ZCKBZ 表中查找满足条件的记录并显示, 转3;删除; 键入 m_zck_bz 后, 在 DT_ZCKBZ 表中查找满足条件的记录并显示, 转4;3.增加和修改时, 键入客房分担额 m_fd_kf((条件;> = 0 且< = m_zck_bz 的数字),餐厅分担额 m_fd_ct = m_zck_bz - m_fd_kf4.如果选择<确定>若为增加; 增加记录到 DT_ZCKBZ 表中, 转 5.若为修改; 修改DT_ZCKBZ表中 ZCK_BZ = m_zck_bz 的记录, 转 5.若为删除; 删除DT_ZCKBZ表中 ZCK_BZ = m_zck_bz 的记录, 转 5.如果选择<退出> 转 4.5.置录入界面为非激活状态, 激活早餐卡标准列表界面,转 06.列表打印常来客信息, 转 0;日期:1999/03/11 制作人: 梁 卫 共 2 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_ZCKBZ.FRM (早餐卡标准)说 明:用于输入早餐卡标准及餐厅和客房部门分担额输入 处理 输出按 F6 键或单击<筛选>按钮 按 F9 键或单击<刷新>按钮 按 Esc 键或单击<退出>按钮 7.激活筛选条件窗口, 键入筛选条件 tx_zck_bz , 按 Return 键按照筛选条件重新显示列表窗口; 转 0 ;8.按照筛选条件重新显示列表窗口; 转 0 ;9.退出;日期:1999/03/11 制作人: 梁 卫 共 2 页 第 2页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_KRGL.FRM (客人管理)说 明:完成客人明细显示, 客人修改,客人有预订登记, 客人无预订登记, 同住登记输入 处理 输出1.建立浏览窗口, 在窗口中浏览表 DT_KRQD 中的内容;2.按空格键或单击<明 细>按钮: 调用: DT_KRDJ ; 转 1 ;按 F3 键 或单击<修 改>按钮: 调用: DT_KRDJ ; 转 1 ;按 F7 键 或单击<无预订>按钮: 调用: DT_SFDJ ; 转 1 ;按 F8 键 或单击<有预订>按钮: 调用: DT_SYDJ ; 转 1 ;按 F10 键 或单击<同 住>按钮: 调用: DT_KRDJ ; 转 1 ;按 F9 键 或单击<刷 新>按钮: 刷新当前界面; 转 1 ;按 Esc 键 或单击<退 出>按钮: 转3;3.退出日期:1999/03/12 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_TDGL.FRM (团队管理)说 明:完成团队明细显示, 团队修改,团队有预订登记, 团队无预订登记输入 处理 输出1.建立浏览窗口, 在窗口中浏览表 DT_TDQD 中的内容;2.按空格键或单击<明 细>按钮: \\调用: DT_KRDJ ; 转 1 ;按 F3 键 或单击<修 改>按钮: 调用: DT_TDDJ ; 转 1 ;按 F7 键 或单击<无预订>按钮: 调用: DT_TFDJ ; 转 1 ;按 F8 键 或单击<有预订>按钮: 调用: DT_TYDJ ; 转 1 ;按 F9 键 或单击<刷 新>按钮: 重新刷新当前界面; 转 1 ;按 Esc 键或单击<退 出>按钮: 转 3;3.退出日期:1999/04/12 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_SFDY.FRM (散客无预订登记)说 明:用于进行无预订客人的登记输入 处理 输出1.定义变量SFDJ_YZRQ(预入住日),SFDJ_YLRQ(预离店日),SFDJ_YZRQ为本日日期, SFDJ_YLRQ清空;定义数组SFDJ_DFFLS(SYS_LXN)(订各类房数),清0;2.录入住客类型(m_zklx)若m_zklx=SYS_TDLX,录入相应的团队号及名称,入住人数,预离店日,各种房类的房间数3.调用SFDJ_FREEFT=PUB_FREE(参数:SFDJ_RZRQ,SFDJ_LDRQ,SFDJ_DFFLS,M_ZKLX,PUB_CODE);如果SFDJ_FREEFT=.F.,调用=PUB_SYKF 显示客房利用情况表的剩余房源情况;转4如果SFDJ_FREEFT=.T.,调用: PUB_KFTJ 修改客房利用情况表(KF_KFLY);调用DT_KRDJ 进行客人登记 ;4.返回;日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_SYDJ.FRM (散客有预订登记)说 明:有预订散客的登记卡登记输入 处理 输出1.输入预定单号, SYDJ_YDH=键入的预订单号, 令 SYDJ_LEN=SYS_SKQZ 的长度,若 SYDJ_YDH 的前 SYDJ_LEN位不包含于 SYS_SKQZ中, 转 8;2.定义变量 SYDJ_RZRQ(日期型), 置初值;调用 SYDJ_OK=PUB_YDDQ(SYDJ_YDH);如果 SYDJ_OK=.F., 转 8;如果 SYDJ_OK=.T., 若 SYDJ_RZRQ>DATE(), 显示:"客人的入住日期比预来店日期提前,请作为无预订散客处理!"; 转 8;3.定义数组 SYDJ_FLS(SYS_LXN), 并置初值; SYDJ_RZRQ=DATE();4.将 YD_YDDK.DBF 中 YDD_H=SYDJ_YDH 的记录的字段值赋给对应的变量;SYDJ_LKRQ=LKRQ, SYDJ_ZKLX=ZKLX, SYDJ_RS=KR_RS;5.调用=PUB_FLHJ(参数:"YD_YDDK",SYDJ_FLS,PUB_CODE);6.调用 PUB_KRDJ(参数:SYDJ_YDH, "", "", SYDJ_RZRQ, SYDJ_LKRQ, SYDJ_FLS,SYDJ_ZKLX, SYDJ_RS, PUB_CODE );7.调用 SYDJ_RS=PUB_YDEN(参数:SYDJ_YDH,PUB_CODE);如果 SYDJ_RS=.F., 显示错误信息, 转 8;8.返回;日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_TYDJ.FRM (团队有预订登记)说 明:用于团队有预订登记输入 处理 输出1.输入预定单号, 调用 PUB_YDDQ(参数:预订单号)确认预订单,如果未确认, 转6;如果确认, 若 TYDJ_RZRQ>DATE(), 显示:"该团队预订来店日期不是今天, 请作为无预订团队处理!"; 转 6;2.生成一个团队号,a.M.ZH="C"+"001",b.在 DT_TDQD.DBF 中查找是否有该团队号,若存在, 团队号变量加 1,如果团队帐号>"C999",显示"团队号超出系统的限额,通知管理人员";转 8;否则, 转 b;若不存在, 转 3;3.(1)在 DT_TDQD.DBF中追加一条空记录, 把对应预订单中当前记录的内容赋值给对应的字段;⑵把 YD_TDJC.DBF 中该预订单的记录添加到DT_TDJC.DBF 中, 同时把YDD_H 字段用团队帐号替换;⑶建立团队帐页表;4.调用 DT_TDDJ 参数团队帐号,”1”, PUB_CODE;5.调用=PUB_YDEN(参数:预订单号,PUB_CODE);6.返回;日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_TFDJ.FRM (团队无预订登记)说 明:用于团队无预订登记输入 处理 输出1.生成一个团队号,⑴M.ZH="C"+"001"⑵在 DT_TDQD.DBF中查找是否有该团队号,若存在, 团队号变量加1,如果团队帐号>"C999",显示"团队号超出系统的限额,通知管理人员";转 4;否则, 转⑵;若不存在, 转2;2.输入离店时间及各种客房类型;3.调用 PUB_FREE(参数:入住日,离店日,TFDJ_FLS,PUB_CODE), 判断是否可以入住;若不可以入住:调用 PUB_SYKF(参数:入住日,离店日,订房房类数,功能代码);转 4;若可以入住:调用: =PUB_KFTJ(参数:入住日,离店日,订房房类数,入住日,离店日,订房房类数,团队住客类型,功能代码);在 DT_TDQD.DBF 中追加一条记录, 并给各字段赋值;为团队建立帐页表;调用 DT_TDDJ(参数:"",团队号,”1”,功能代码);4.返回;日期:1999/04/12 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:PUB_ZHPD.FRM (帐号判断)说 明:本功能模块是为了查找确认输入帐号的合法性输入 处理 输出CS_tbname 帐号表名 CS_zh 帐号 1. 在指定的表 CS_tbname 中显示该记录的内容:①如果 CS_zh 的首位为 SYS_SK中的数字字符或等于 SYS_TZYSK显示: 帐号: ZH , 客人姓: KR_X , 客人名: KR_M ,国籍: KR_GJ , 证件号码: KR_ZJHM , 定金 : KR_DJ ,消费金额: ZXFE , 余额: YE②如果 CS_zh 的首位为 SYS_TD显示: 团队号: ZH , 团队名称: TD_MC , 定金: KR_DJ ,消费金额: ZXFE , 余额: YE③如果 CS_zh 的首位为 其它显示: 帐号: ZH , 单位名称: DW , 定金 : KR_DJ ,消费金额: ZXFE , 余额: YE④显示: "是该客人否 ?"2. 返回窗口属性 ZHPD_FT如果确认,ZHPD_FT = True否则,ZHPD_FT = False日期:1999/03/16 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_ZCK.FRM (早餐卡领用, 发放和回收)说 明:用于记录每笔早餐卡领用,发放和回收的数量输入 处理 输出CS_zck_id 表示”领用”,”发放”,”回收” CS_zdh_in 帐单号 1.把 PUBLIC 库DT_ZCKBZ 表中的标准增加至本地库HOTEL 的 DT_ZCK表中2.显示窗口a.若 CS_zc_id=”发放”或 CS_zc_id=”回收”,显示 m_dfzh, 否则, 不显示b. DT_ZCK的列表显示,c.各字段的编辑控件3.按”Esc”键, 转 6;4.若 CS_zc_id=”发放”或 CS_zc_id=”回收”, 键入m_dfzh,,并判断其合法性;若合法, 转 5; 否则, 转 4;5.在列表显示上,按 Return 键, 激活 数量(m_fssl)及备注(m_fsbz) 的编辑窗口 键入 m_fssl, m_fsbz若按 “确定” , 把当前记录保存到 DT_ZCK 表中;转5;若按 “退出” , 转 5;6.按”Esc”键a.把指针移至 DT_ZCK 表中的第一条记录b.若没到表尾,转 c;否则, 转 7;c.若 FSSL=0,转 d;若 FSSL<>0,调用 PUB_CZLS;把当前记录追加至早餐卡归档表中(“ZC”+YYYY);修改 DT_KRQD 中 MFZC_FT = 1 条件;ZH = m_dfzh;调用 PUB_CZLE;转 d;d.移到下一条记录;7.返回;日期:1999/03/16 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_CKGL.FRM (常来客管理)说 明:用于管理常来客信息(增加, 修改, 删除, 打印, 刷新, 筛选等)输入 处理 输出单击菜单《常来客管理》按 F2 键或单击<增加>按钮 按 F3 键或单击<修改>按钮 按 F4 键或单击<删除>按钮按 F5 键或单击<打印>按钮 按 F6 键或单击<筛选>按钮 按 F9 键或单击<刷新>按钮 按 Esc 键或单击<退出>按钮 0.显示常来客信息列表界面1.激活编辑界面2.输入常来客信息字段, 并进行合法性检验3.如果选择<确定>若为增加; 增加记录到 DT_CKQD 表中, 转 4.若为修改; 修改DT_CKQD表中 XH = m_xh 的记录, 转 4.若为删除; 删除DT_ZCKBZ表中 ZCK_BZ = m_zck_bz 的记录, 转 4.如果选择<退出> 转 4.4.置录入界面为非激活状态, 激活常来客列表,转 05.列表打印常来客信息, 转 0;6.激活筛选条件窗口, 键入筛选条件 tx_zck_bz , 按 Return 键按照筛选条件重新显示列表窗口; 转 0 ;7.按照筛选条件重新显示列表窗口; 转 0 ;9.退出;日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_ZCKCX.FRM (早餐卡查询)说 明:用于按年月查询免费早餐卡的领用, 发放和回收的数量输入 处理 输出生成功能代码, PUB_CODE=PUB_CODE("DT_ZCKCX"), 并进行权限检测;1.显示年,月,显示条件及显示满足条件的记录列表, 按类别分月求和的列表;.显示条件: 全部显示, 发放, 领用, 回收;.列表内容: 日期 ,房间号, 领用 , 发放 , 回收 , 操作员 ,备注FSRQ ,KF_FH,ZCK_LYSL,ZCK_FFSL,ZCK_HSSL,USER_CODE, BZ脚注 : ZCK_LYSL,ZCK_FFSL,ZCK_HSSL 统计合.分月求和内容: 年, 月, 领用 , 发放 , 回收YER,MON,ZCK_LYSL,ZCK_FFSL,ZCK_HSSL脚注 : ZCK_LYSL,ZCK_FFSL,ZCK_HSSL 统计合2.按条件显示 Zcyyyy 表中的内容;列表显示满足条件的记录; 分月求和列表显示该年度按类别分组求和的信息;设置筛选条件:键盘输入年 m_year:C:2(yy),月份 m_month:C:2(mm)若 m_month 的串长 = 2, 查询日期: 为当年当月;若 m_month的串长 = 0, 查询日期: 为当年;按 m_year,m_month筛选 ZCyyyy 中 FSRQ 为该年月的记录附加条件:如果选<全部>, ZCK_LYSL <> 0, 转 3;如果选<发放>, ZCK_FFSL <> 0, 转 3;如果选<回收>, ZCK_HSSL <> 0, 转 3;如果选<领用>, ZCK_HSSL <> 0, 转 3;如果按 ESC 键, 转 3;3. 返回日期:1999/04/12 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_KRDJ.FRM (前厅接待处的客人登记)说 明:用于进行散客有预订登记, 散客无预订登记, 团队有预订登记, 团队无预订登记, 客人登记修改, 客人登记显示, 同住登记等输入 处理 输出日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:ZW_SJK 函数 (确定帐号对应的帐首及帐首归档表名)说 明:用于确定帐号对应的帐首及帐首归档表名输入 处理 输出t_zh 帐号t_zhk 帐首表名t_gdk 帐首归档表名 t_fsrq 发生日期t_zhxz 帐号性质 1. 在 ZW_ZHK 表中查找 ZH_SW=t_zh 首位的记录如果没找到,提示:"输入的帐号不合法 !",返回否则,t_zhk = ZH_K1, t_gdk = GD_QZ + year(t_fsrq), t_zhxz=ZH_XZ2. 返回;t_zhk 帐首表名t_gdk 帐首归档表名t_zhxz 帐号性质日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:ZW_ZHQR 函数 (用于前台帐务客帐结算时检查对方帐号的合法性,并输出对应数据库)说 明:用于前台帐务客帐结算时检查对方帐号的合法性,并输出对应数据库输入 处理 输出t_zh -- 帐号t_yn -- 是否确认帐户t_zhk -- 帐号的帐首表名 t_gdk -- 帐号的归档表名 t_ft -- 是否存在帐户t_fsrq -- 发生日期 1. T_ZHXZ=" "2. 调用: ZW_SJK(t_zh,t_zhk,t_gdk,t_fsrq,t_zhxz)3. 如果 t_zh 不为空值或 t_zhk 不为空值在表t_zhk 中查找 ZH=t_zh 的记录如果找到,则t_ft=.T.调用: PUB_ZHPD(t_zhk,t_zh,t_yn)4. 返回(全部传地址)t_zhk--帐号的帐首表名t_gdk--帐号的归档表名t_yn --是否确认帐户(帐号判断的返回值PUB_ZHPD())t_ft -- 是否存在帐户日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_KFFP.FRM (派房)说 明:用于显示满足条件的可卖房, 为客人分配客房, 包括有预定和无预定的两种输入 处理 输出按Enter键或单击<选中>按钮 按 Esc 键 1.显示客房派房窗口内容:a. 客房类型 (KFFP_LXN) 客房楼层 (KFFP_KFLC)接收变量 KFFP_LXN(范围 0--SYS_LXN),KFFP_KFLC;判断: 若 KFFP_KFLC 为空, 忽略楼层;若 KFFP_LXN=0 或空串, 忽略类型;b.浏览 KF_FTK 中满足条件的记录的控件控件内容: KF_FH 客房房号 KF_LX 客房类型条件是 : 房态是可卖房即.NOT.(KF_ZR .OR. KF_ZF .OR. KF_GZ .OR. KF_NB .OR. KF_WX)附加条件: KF_FTK.KF_FH 的前两位=tx_kflc (tx_kflc 不为空) 并且KF_FTK.KF_LXN=tx_kflx_dm (tx_kflx_dm 不为 0 AND tx_kflx_dm<=SYS_LXN)注: 控件内容可滚动, 回车为选择所需要的房号;2.返回当前记录的KF_FH; 转 3;3.返回;选中时: KF_FH未选中: 空串日期:1999/04/12 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_KFHF.FRM (客房换房)说 明:用于客人更换房间输入 处理 输出日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_CKLB.FRM (常来客列表)说 明:用于由常来客登记时的列表显示输入 处理 输出Xh=0(设置初始值)按 F6 键或单击<筛选>按钮按Enter键或单击<选中>按钮 按 Esc 键或单击<退出>按钮 1.显示常来客信息窗口表名: DT_CKQD内容: KR_X(中文姓), KR_M(中文名), YW_X(外文姓), YW_M(外文名),KR_XBMC(性别) ,GJMC(国籍);及筛选条件(KR_X, KR_M, YW_X, YW_M, GJMC)注 : 按 Enter 键, 为选中; 按 F6 键 为筛选;2.激活筛选条件录入界面, 录入筛选条件;按照筛选条件, 显示DT_CKQD表中满足条件的记录;(当筛选内容全部为空时, 则显示表中的全部记录)3.返回当前选中的常来客的序号(XH);转 4;4.返回;选中时:当前记录的 XH未选中:XH=0日期:1999/04/12 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_YDLB.FRM (预订单客人列表)说 明:用于由预订客人登记时的列表显示输入 处理 输出Xh=0(设置初始值)按Enter键或单击<选中>按钮 按 Esc 键或单击<退出>按钮 1.显示常来客信息窗口表名: YD_KRQD内容: KR_X(中文姓), KR_M(中文名), YW_X(外文姓), YW_M(外文名),KR_XBMC(性别) ,GJMC(国籍), LSH(流水号);注 : 按 Enter 键, 为选中2.返回当前选中的预订客人的流水号(LSH);转 3;43.返回;选中时:当前记录的 LSH未选中:LSH=0日期:1999/04/12 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_WGCCX.FRM (外管处数据查询)说 明:用于输入 处理 输出日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:PUB_JOIN ()说 明:用于将客人,团陪,地陪房类数/房价转存到对应串中输入 处理 输出t_hj 房类数的数组t_ws 字符串分割的位数 t_code 功能代码 1. 从 1 到 SYS_LXN , 将 t_hj (i) 按照t_ws 长依次将串连接到 PUB_JOIN ;2.返回 PUB_JOIN;日期:1999/04/12 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:PUB_FJFL ()说 明:将字符串转换到数值数组输入 处理 输出t_hj(返回) 房类数(数组) t_stfls 待转变字符串t_ws 每段的宽度t_code 功能代码 1. 将 t_stfls 依次按每段长度为 t_ws 将各段子串转成数值, 依次赋给 t_hj(段序);2. 正常返回;返回值: t_hj日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1页系 统 名:大连国际博览中心酒店管理系统模块名称:PUB_YDEN (预订单归档)说 明:用于解除预订, 有预订散客登记, 有预订团队登记时的预订单归档输入 处理 输出日期:1999/04/12 制作人: 梁 卫 共 1 页 第 1 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_WGCGL.FRM (外管处数据管理)说 明:用于录入, 修改, 打印及生成外管处数据输入 处理 输出单击菜单《外管处数据管理》 按 F2 键或单击<增加>按钮按 F3 键或单击<修改>按钮按 F4 键或单击<删除>按钮按 F5 键或击<打印>按钮 0.显示外管处数据列表界面1.激活编辑界面2.编辑当前记录字段;3.按<确定>, 增加记录至 DT_WGJK 表中; 转 0;按<退出>, 转 0;4.修改当前编辑字段;5.按<确定>, 用新键入的内容刷新 DT_WGJK 表中的当前记录; 转 0;按<退出>, 转 0;6.显示要删除的记录内容;7.按<确定>, 删除 DT_WGJK 表中的当前记录; 转0;按<退出>, 转 0;8.列表打印外管局信息, 转 0;9.激活筛选条件窗口, 键入筛选条件 tx_zck_bz , 按 Return 键按照筛选条件重新显示 列表窗口; 转 0 ;日期:1999/04/12 制作人: 梁 卫 共 2 页 第 1页 系 统 名:大连国际博览中心酒店管理系统模块名称:DT_WGCGL.FRM (外管处数据管理)说 明:用于录入, 修改, 打印及生成外管处数据输入 处理 输出按 F8 键或单击<文件生成>按 钮按 F9 键或单击<刷新>按钮按 Esc 键或单击<退出>按钮 10.生成一文本文件;11.重新刷新界面;12.退出;日期:1999/04/12 制作人: 梁 卫 共 2 页 第 2 页系 统 名:大连国际博览中心酒店管理系统模块名称:DT_TDDJ.FRM (团队登记)说 明:用于在有预订, 无预订及修改时的团队登记输入 处理 输出日期:1999/03/11 制作人: 梁 卫 共 1 页 第 1 页。
啄木鸟酒店管理系统编码啄木鸟酒店管理系统是一个高效、便捷的酒店管理软件,为酒店业务提供了全方位的管理服务。
该系统以中文为基础语言,方便酒店工作人员的使用和了解。
下面将对该系统的编码特点进行详细介绍。
首先,啄木鸟酒店管理系统采用了全面的编码规范,保证了代码的可读性和可维护性。
系统的每个模块都经过详细的设计和测试,代码结构清晰,注释完善,使得开发人员能够快速理解和修改代码。
其次,啄木鸟酒店管理系统的编码过程中注重代码的可复用性。
系统中的各个功能模块都是相互独立的,可以单独进行测试和调整,方便后续的功能扩展和维护。
同时,系统还采用了面向对象的编程思想,使得代码的复用性更加高效。
再次,啄木鸟酒店管理系统在编码中注重了数据的安全性。
系统对用户的敏感信息进行了加密处理,确保数据的安全性和隐私性。
系统还采用了多层次的权限控制机制,保证只有授权的人员才能进行敏感操作,有效地减少了安全风险。
另外,啄木鸟酒店管理系统的编码过程中充分考虑了用户体验。
系统界面简洁明了,操作流程简单顺畅,让用户能够轻松上手使用。
系统还提供了多语言支持功能,使得不同国家和地区的用户都能够方便地使用该系统。
最后,啄木鸟酒店管理系统的编码过程中,注重代码的性能和效率。
系统利用缓存技术和优化算法,减少了数据库访问次数和网络传输量,提高了系统的运行速度和响应能力。
系统还采用了分布式架构,实现了系统的高可用性和负载均衡,保证了系统的稳定性和可靠性。
总之,啄木鸟酒店管理系统的编码过程中,充分考虑了代码的可读性、可复用性、数据安全性、用户体验和系统性能。
这些编码特点使得该系统成为一款功能完备、性能优良的酒店管理软件,为酒店业务提供了全面的管理服务。
对于未来的酒店管理软件开发和优化,这些编码特点具有重要的指导意义,值得借鉴和学习。
#include <windows.h〉#include <dos。
h>#include〈stdio.h〉#include〈stdlib。
h〉#include<time。
h〉//—-—-—-—-——--———---------————--—---—---—--——-———-——结构定义-————-—-——-----—--———-—-—-—--—-—--—————-—-typedef struct CheckinInformation{char name[10];//姓名int id;//证件号int roomType;//房型int countType;//计费方式}CheckinInfo;typedef struct HotelRoom{int roomType;//房型int roomNum;//房号int checked; //入住情况int price;//房价}Room;typedef struct RoomOrder{CheckinInfo *checkinInfo;//入住信息long date; //入住时间Room *room; //房间信息}Order;typedef struct HotelInfomation{int checkinAmount; //已入住房数int singleRemainAmount;//单人房剩余房数int doubleRemainAmount; //双人房剩余房数int bigRemainAmount; //大床房剩余房数}HotelInfo;//-—-—-——---————----—--——--——-—-——枚举类型——-—-——------—-———-—-—-——--enum {MainUI,HotelInfoUI,CheckinUI,CheckinResultUI,OrderUI,CheckOutUI,Exit};//GUI enum {Single,Double,Big};//Room Typeenum {Hour,Day};//countType//--——---—————--————-—--—---——-———全局变量-----—--———-—-—-—-——-—-——-int GUI = MainUI;Order*orderList[100];//订单数组Room* roomList[100];//房间数组HotelInfo * hotelInfo = NULL;//酒店房间信息//—————--—-—--——---——-—--—--——-——函数声明———--—-—--——--—————-——---——-void initiallizeRoomList();void insertToOrderList(Order * order);Room* getRoomByType(int roomType);Order*getOrderByRoomNum(int roomNum);void showMainUI();void showHotelInfoUI();void showCheckinUI();void showCheckinResultUI();void showOrderUI();void showCheckOutUI();//-——-—-——-—————--——---—-—————-——Main函数—--———-————-—-——-——---—--—--void main() //主函数{//初始化酒店房间信息hotelInfo = (HotelInfo *)malloc(sizeof(HotelInfo));hotelInfo -〉singleRemainAmount = 20;hotelInfo -〉doubleRemainAmount=40;hotelInfo -〉bigRemainAmount=40;hotelInfo -〉checkinAmount=0;//初始化房间列表initiallizeRoomList();//界面显示while(GUI != Exit){switch(GUI){case MainUI:showMainUI();break;case HotelInfoUI:showHotelInfoUI();break;case CheckinUI:showCheckinUI();break;case CheckinResultUI:showCheckinResultUI();break;case OrderUI:showOrderUI();break;case CheckOutUI:showCheckOutUI();break;default:break;}}}//-——---———-—--—-————-—--——-—————函数定义-——---——-—-—--—---—-———---——void initiallizeRoomList(){//房间数组初始化,初始化的结果是让roomList的数组有100个room指针,而且设置了相应的值int i;Room*newRoom=NULL;for(i=0;i<20;i++) //单人房房间信息初始化{newRoom = ( Room* )malloc(sizeof(Room));roomList[i]= newRoom;roomList[i]-〉checked=0;roomList[i]—〉price=110;roomList[i]—>roomNum=i+1;roomList[i]—>roomType=Single;}for(i=20;i<60;i++) //双人房房间信息初始化{newRoom = ( Room* )malloc(sizeof(Room));roomList[i] = newRoom;roomList[i]->checked=0;roomList[i]->price=180;roomList[i]—>roomNum=i+1;roomList[i]->roomType=Double;}for(i=60;i〈100;i++)//大床房房间信息初始化{newRoom = ( Room* )malloc(sizeof(Room));roomList[i] = newRoom;roomList[i]-〉checked=0;roomList[i]-〉price=180;roomList[i]-〉roomNum=i+1;roomList[i]—>roomType=Big;}}//通过所选择的房型获取空房间,获取房间后将房间信息改为已入住,并减少相应房型的剩余房间数Room*getRoomByType(int roomType){int i;switch(roomType){case Single:for(i=0;i〈20;i++){if(roomList[i]-〉checked == 0){roomList[i]->checked=1;hotelInfo—>singleRemainAmount -- ;hotelInfo-〉checkinAmount++;return roomList[i];}}break;case Double:for(i=20;i<60;i++){if( roomList[i]-〉checked == 0){roomList[i]—〉checked=1;hotelInfo—〉doubleRemainAmount —— ;hotelInfo—〉checkinAmount++;return roomList[i];}}break;case Big:for(i=60;i<100;i++){if(roomList[i]—>checked == 0){roomList[i]—〉checked=1;hotelInfo-〉bigRemainAmount --;hotelInfo—〉checkinAmount++;return roomList[i];}}break;}}//将订单放入订单列表void insertToOrderList(Order * order){int i;for( i = 0;i<100;i++){if( orderList[i] ==NULL ){orderList[i] = order;break;}}}//通过房号查询订单Order*getOrderByRoomNum(int roomNum){int i;for(i=0;i<100;i++){if(orderList[i]->room->roomNum == roomNum){return orderList[i];}}}void showMainUI(){//显示主界面,并接受输入int chooseNum;system(”cls");printf(”\n\n==========================酒店房间登记与计费管理管理系统=======================\t\n\n\n”);printf(”*\t\t\t\t1。
第一页面中标签控件属性如下:Object Label1: TlabelLeft=57Top=78Width=36Height=12Caption='房间号'Object Label1: TlabelLeft=57Top=110Width=48Height=12Caption='客户姓名'Object Label1: TlabelLeft=57Top=142Width=48Height=12Caption='身份证号码'Object Label1: TlabelLeft=57Top=174Width=48Height=12Caption='入住时间'Object Label1: TlabelLeft=57Top=214Width=48Height=12Caption='入住理由'Object Label1: TlabelLeft=312Top=78Width=24Height=12Caption='房价'Object Label1: TlabelLeft=312Top=110Width=48Height=12Caption='住宿天数'Object Label1: TlabelLeft=312Top=142Width=48Height=12Caption='值班人员'Object Label1: TlabelLeft=312Top=174Width=48Height=12Caption='电话号码'Object Label1: TlabelLeft=312Top=214Width=48Height=12Caption='结算费用'Object Label1: TlabelLeft=224Top=24Width=120Height=20Caption='顾客入住登记'Font.Height=-20='宋体'第一页面中数据编辑类控件属性如下:Object DBEdit1: TDBEditLeft=129Top=79Width=121Height=20DataField='房间号' DataSource=Datasource1 Taborder=0Object DBEdit1: TDBEdit Left=129Top=111Width=121Height=20DataField='客户姓名' DataSource=Datasource1 Taborder=1Object DBEdit1: TDBEdit Left=129Top=143Width=121Height=20DataField='身份证号码' DataSource=Datasource1 Taborder=2Object DBEdit1: TDBEdit Left=129Top=175Width=121Height=20DataField='入住时间' DataSource=Datasource1 Taborder=3Object DBEdit1: TDBEdit Left=129Top=207Width=121Height=20DataField='入住理由' DataSource=Datasource1 Taborder=4Object DBEdit1: TDBEdit Left=129Top=79Width=121Height=20DataField='房价'DataSource=Datasource1Taborder=5Object DBEdit1: TDBEditLeft=382Top=111Width=121Height=20DataField='入住天数'DataSource=Datasource1Taborder=6Object DBEdit1: TDBEditLeft=382Top=143Width=121Height=20DataField='值班人员'DataSource=Datasource1Taborder=7Object DBEdit1: TDBEditLeft=382Top=175Width=121Height=20DataField='电话号码'DataSource=Datasource1Taborder=8Object DBEdit1: TDBEditLeft=382Top=207Width=121Height=20DataField='结算费用'DataSource=Datasource1Taborder=9第一页面中数据连接类控件属性如下:Object Table1: TtableActive=TureTableName=宾馆住宿系统.dbLeft=488Top=64Object DataSource1: TdataSourceDataSet=Table1Object DBNavigator1: TDBNavigatorLeft=184Top=224Width=240Height=25DataSource=DataSource1Flat=TrueTabOrder=10Procedure TForm1.Edit1Click(Sender:TObject); BeginEdit2.Text:=' 'Edit3.Text:=' ';End;Procedure TForm1.Edit2Click(Sender:Tobject); BeginEdit1.Text:=' 'Edit3.Text:=' ';End;Procedure TForm1.Edit3Click(Sender:Tobject); BeginEdit2.Text:=' 'Edit1.Text:=' ';End;执行按钮的程序代码如下:Procedure TForm1.Button1Click(Sender:Tobject); BeginTable1.refresh;With table1 doTryDisablecontrols;Filtered:=false;If edit1.text<>' ' then memo1.text:='客户姓名'+' ' ' '+edit1.text+' ' ' ';If edit2.text<>' ' then memo1.text:='房间号'+' ' ' '+edit2.text;If edit3.text<>' ' then memo1.text:='入住时期'+' ' ' '+edit1.text+' ' ' ';Filter:=memo1.text;Filtered:=true;FinallyEnablecontrols;If dbedit1.text=' ' then beginMessagebeep(1);Showmessage(' 没有符合条件的记录,请确认条件或放弃查询!');If messageDlg(' 是否继续查询?只有结束查询才能作其他操作!',mtinformation,[mbyes,mbno],0)=mrno then beginFiltered:=false;Table1.close;Table1.open;End;End else beginIf messageDlg('是否继续查询?只有结束查询才能作其他操作!',mtinformation,[mbyes,mbno],0)=mrno then beginFiltered:=false;Table1.close;Table1.open;End;End;End;End;第二页各个控件的属性描述如下:Object Tabsheet2: TtabsheetCaption=客房查询Object Labell2: TlabelLeft=215Top=10Width=114Height=19Caption=客户查询系统Font.Height=-19=宋体Object Labell3: TlabelLeft=24Top=200Width=60Height=12Caption=按姓名查询Object Labell4: TlabelLeft=24Top=224Width=60Height=19Caption=按房号查询Object Labell5: TlabelLeft=23Top=246Width=60Height=12Caption=按时期查询endObject DBFrid1: TDBGrid Left=8Top=40Width=553Height=140DataSource=DataSource1TitleFont.Height=-12=宋体Object Edit1:TeditLeft=93Top=197Width=102Hdight=20Text=Edit1Object Edit2:TeditLeft=93Top=218Width=103Hdight=20Text=Edit2Object Edit3:TeditLeft=93Top=241Width=103Hdight=20Text=Edit3Object Button1:TbuttonLeft=232Top=208Width=75Height=25Caption='执行查询'Object Memo1:TmemoLeft=372Top=189Width=185Height=61Visible=False第三页面命令控件代码:Procedure TForm1.Button2Click(Sender:Tobject); VarSum1:real;S:string;Bookmark1:tbookmark;BeginSum1=0.00;Bookmark1:=table1.getbookmark;Table1.disablecontrols;Table1.first;While not table1.eof doBeginSum1:=sum1+table1.fieldbyname('结算费用')。
程序代码N:最终改进版代码利用结构体储存多种类型的数据好处:比数组能储存更多类型的数据include<iostream>include<string>include<cstdlib> 准单人间 2.大床房 3.标准双人间 4. 套房string phoneNum; 准单人间 100/天 2.大床房 200/天 3.标准双人间 300/天 4.套房400/天"<<endl;cin>>type; roomType=type;cout<<"预留手机号:"<<endl;cin>>num; phoneNum=num;};void Book{cout<<"正在预定..."<<endl;switchthis->roomType{case 1:forint i=0;i<20;i++{if roomi.State==0 ays=this->stayTime;=this->cName;roomi.Phone=this->phoneNum;roomi.Price=this->stayTime;cout<<"预定成功房间号:"<<roomi.Number<<endl<<endl;roomi.State=1;break; umber<<"号房间已有人"<<endl; }break;case 2:forint i=20;i<40;i++{ifroomi.State==0{roomi.days=this->stayTime;=this->cName;roomi.Phone=this->phoneNum;roomi.Price=this->stayTime;cout<<"预定成功房间号:"<<roomi.Number<<endl<<endl;roomi.State=1; break;}else cout<<roomi.Number<<"号房间已有人"<<endl;}break;case 3:forint i=40;i<60;i++{ifroomi.State==0{roomi.days=this->stayTime;=this->cName;roomi.Phone=this->phoneNum;roomi.Price=this->stayTime;cout<<"预定成功房间号:"<<roomi.Number<<endl<<endl;roomi.State=1; break;}else cout<<roomi.Number<<"号房间已有人"<<endl;}break;case 4:forint i=60;i<80;i++{ifroomi.State==0{roomi.days=this->stayTime;=this->cName;roomi.Phone=this->phoneNum;roomi.Price=this->stayTime;cout<<"预定成功房间号:"<<roomi.Number<<endl<<endl;roomi.State=1; break;}else cout<<roomi.Number<<"号房间已有人"<<endl;}break;default:cout<<"您输入的房间类型有误"<<endl;}};};class CheckIn 准单人间 100/天 2.大床房 200/天 3.标准双人间 300/天 4.套房 400/天"<<endl; cin>>type;roomType=type;cout<<"客户手机号:"<<endl; cin>>num; phoneNum=num;switchthis->roomType{case 1:forint i=0;i<20;i++{ifroomi.State==0{roomi.days=this->stayTime;=this->cName;roomi.Phone=this->phoneNum;roomi.Price=this->stayTime;roomi.ID=this->idNum;cout<<"入住成功房间号:"<<roomi.Number<<endl<<endl;cout<<"请支付200元押金"<<endl<<endl;roomi.State=1;break;}else cout<<"抱歉,该房间类型没有了"<<endl;}break;case 2:forint i=20;i<40;i++{ifroomi.State==0{roomi.days=this->stayTime;=this->cName;roomi.Phone=this->phoneNum;roomi.Price=this->stayTime;roomi.ID=this->idNum;cout<<"入住成功房间号:"<<roomi.Number<<endl<<endl;cout<<"请支付400元押金"<<endl<<endl;roomi.State=1;break;}else cout<<"抱歉,该房间类型没有了"<<endl;}break;case 3:forint i=40;i<60;i++{ifroomi.State==0{roomi.days=this->stayTime;=this->cName;roomi.Phone=this->phoneNum;roomi.Price=this->stayTime;roomi.ID=this->idNum;cout<<"入住成功房间号:"<<roomi.Number<<endl<<endl;cout<<"请支付600元押金"<<endl<<endl;roomi.State=1;break;}else cout<<"抱歉,该房间类型没有了"<<endl;}break;case 4:forint i=60;i<80;i++{ifroomi.State==0{roomi.days=this->stayTime;=this->cName;roomi.Phone=this->phoneNum;roomi.Price=this->stayTime;roomi.ID=this->idNum;cout<<"入住成功房间号:"<<roomi.Number<<endl<<endl;cout<<"请支付800元押金"<<endl<<endl;roomi.State=1;break;}else cout<<"抱歉,该房间类型没有了"<<endl;}break;default:cout<<"您输入的房间类型有误"<<endl;}}void booked{string compareItem;string id_num;cout<<"请输入您的姓名或者手机号:"<<endl;cin>>compareItem;forint i=0;i<80;i++{==compareItem||roomi.Phone==compareItem{cout<<"验证成功请支付:"<<roomi.Price2<<"元押金"<<endl;cout<<"请登记客户的身份证号:"<<endl;cin>>id_num;idNum=id_num;roomi.ID=idNum;cout<<"房间号为:" <<roomi.Number<<endl<<"欢迎入住"<<endl<<endl;break;}}}};class checkOut{private:string name;int number;int days;int price;public:void checkout{int expense;cout<<"请输入房间号:"<<endl; cin>>number;cout<<"请输入姓名:"<<endl; cin>>name;cout<<"请输入实际住宿天数:"<<endl; cin>>days;forint i=0;i<80;i++{==name && roomi.Number==number{expense=daysroomi.Number/100100;cout<<"房间号为"<<roomi.Number<<"的房间实际消费为"<<expense<<"元"<<endl;cout<<"押金为:"<<roomi.Price<<endl;ifexpense>roomi.Price cout<<"请补交"<<expense-roomi.Price<<"元"<<endl;else cout<<"退回:"<<roomi.Price-expense<<"元"<<endl; break;}else cout<<roomi.Number<<"号房不符合"<<endl;}cout<<"房费核算清后请安任意键继续"<<endl<<endl;system"pause";cout<<"感谢入住本酒店,欢迎下次光临"<<endl<<endl;}};void menu{cout<<"欢迎使用酒店管理系统"<<endl;cout<<"请选择:"<<endl;cout<<"1.预定房间"<<endl;cout<<"2.办理入住"<<endl;cout<<"3.退房结账"<<endl;cout<<"4.退出系统"<<endl; }void init{int n=101;forint i=0;i<20;i++{roomi.Number=n++;roomi.Price=100;roomi.State=0;}n=201;forint i=20;i<40;i++{roomi.Number=n++;roomi.Price=200;roomi.State=0;}n=301;forint i=40;i<60;i++{roomi.Number=n++;roomi.Price=300;roomi.State=0;}n=401;forint i=60;i<80;i++{roomi.Number=n++;roomi.Price=400;roomi.State=0;}}int mainvoid{init;int flag=1;whileflag{menu;int c;cin>>c;switchc{case 1:{BookRooma=new BookRoom; a->setData;a->Book;break;}case 2:{CheckInb=new CheckIn;cout<<"您有预定吗 1.已预定 2.未预定"<<endl;int c;cin>>c;switchc{case 1:{b->booked;break;}case 2:{b->unbooked;break;}default:cout<<"输入有误"<<endl;}break;}case 3:{checkOut c=new checkOut;c->checkout;break;}case 4:{cout<<"谢谢使用,再见"<<endl;flag=0;break;}default:cout<<"输入有误"<<endl;}}return 0;}O:最初废除版利用数组因为数组只能简单的储存一种类型的数据,例如字符和数字;而酒店管理系统这种情境,一个房间要储存多种数据,例如客户姓名、客户性别、预订房间号、客户预留手机号、客户占用天数、客户身份证号以及押金和实际花销等;因此我选用了结构体来储存;以下是Old version:include<iostream>include<string>using namespace std;int room_num420; 准单人间 2.大床房 3.标准双人间 4. 套房string phoneNum; 准单人间 2.大床房 3.标准双人间 4. 套房"<<endl; cin>>type; roomType=type;cout<<"预留手机号:"<<endl; cin>>num; phoneNum=num;};void Book{cout<<"正在预定..."<<endl;switchthis->roomType{case 1:forint i=0;i<20;i++{if room_num1i==0 ."<<endl;switchRoom_num/100{case 1:cout<<"办理成功共计消费:"<<100stayTime<<endl;break;case 2:cout<<"办理成功共计消费:"<<200stayTime<<endl;break;case 3:cout<<"办理成功共计消费:"<<300stayTime<<endl;break;case 4:cout<<"办理成功共计消费:"<<400stayTime<<endl;break;default:cout<<"输入错误"<<endl;}};} ;void menu{cout<<"欢迎使用酒店管理系统"<<endl;cout<<"请选择:"<<endl;cout<<"1.预定房间"<<endl;cout<<"2.办理入住"<<endl;cout<<"3.退房结账"<<endl;cout<<"4.退出系统"<<endl;}int mainvoid{forint i=0;i<4;i++{forint j=0;j<20;j++{room_numij=0;}}int flag=1;whileflag{menu;int c;cin>>c;switchc{case 1:{BookRooma=new BookRoom; a->setData;a->Book;break;}case 2:{Checkinb=new Checkin;b->setData;b->Check;break;}//case3 to docase 4:{cout<<"谢谢使用,再见"<<endl;flag=0;break;}default:cout<<"输入有误"<<endl; }}return 0;}。
酒店管理系统代码(C语言版)(总7页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除#include <stdio.h>#include <stdlib.h>#include <string.h>//房间信息结构体struct Node{int Count; //指示该房间有多少个房客char nameOne[20]; //房客1的名字char nameTwo[20]; //房客2的名字int sexOne; //房客1的性别 -1代表女,0代表没有,1代表男int sexTwo; //房客2的性别int roomNumber; //房间号}roomArray[5];//初始化房间数组void InitArray(){int i;for(i=0;i<5;i++){roomArray[i].roomNumber = 301+i;memset(roomArray[i].nameOne,0,20);memset(roomArray[i].nameTwo,0,20);roomArray[i].sexOne = 0;roomArray[i].sexTwo = 0;roomArray[i].Count = 0;}}void fun1() //旅客入住的操作{char name[20];int sex;int i;printf("\n输入入住旅客姓名和性别(空格隔开,1为男,-1为女):");scanf("%s %d",name,&sex);for(i=0;i<5;i++){if(roomArray[i].Count == 2){continue;}else if(roomArray[i].Count == 1){if(roomArray[i].sexOne != sex){continue;}strcpy(roomArray[i].nameTwo,name);roomArray[i].sexTwo = sex;roomArray[i].Count++;system("cls");printf("客人已经成功入住,在房间%d",roomArray[i].roomNumber);return;;}else{strcpy(roomArray[i].nameOne,name);roomArray[i].sexOne = sex;roomArray[i].Count++;system("cls");printf("客人已经成功入住,在房间%d",roomArray[i].roomNumber);return;;}}printf("无法入住,房间已经住满或者是没有适合的房间"); }void fun2() //退房操作{int i;char name[20];printf("请输入要退房旅客的姓名: ");scanf("%s",name);for(i=0;i<5;i++){if(strcmp(roomArray[i].nameOne,name) == 0){memset(roomArray[i].nameOne,0,20);roomArray[i].sexOne = 0;roomArray[i].Count--;system("cls");printf("%s客人已经成功退房\n",name);return;}if(strcmp(roomArray[i].nameTwo,name) == 0){memset(roomArray[i].nameTwo,0,20);roomArray[i].sexTwo = 0;roomArray[i].Count--;system("cls");printf("%s客人已经成功退房\n",name);return;}}system("cls");printf("没有名为%s的客人,请检查输入的正确性!\n",name);}void fun3() //查询操作{int index;int i;char name[20];int number;int j;system("cls");printf("***************请选择要查询的种类***************\n");printf(" 1.所有房间入住信息显示\n");printf(" 2.按照姓名查询\n");printf(" 3.按照房号查询\n");scanf("%d",&index);if(index == 1){for( i=0;i<5;i++){printf("房间%d:",roomArray[i].roomNumber);if(roomArray[i].Count == 0){printf("没有客人入住\n");}else if(roomArray[i].Count == 1){if(roomArray[i].sexTwo == 0){printf("当前有1位客人-> 姓名%s,",roomArray[i].nameOne);if(roomArray[i].sexOne == 1)printf("性别:男");else if(roomArray[i].sexOne == -1)printf("性别:女");printf("\n");}else if(roomArray[i].sexOne == 0){printf("当前有1位客人-> 姓名%s,",roomArray[i].nameTwo);if(roomArray[i].sexTwo == 1)printf("性别:男");else if(roomArray[i].sexTwo == -1)printf("性别:女");printf("\n");}}else{//printf("当前有两个客人客人1:姓名%s,性别%d 客人2:姓名%s,性别%d\n",roomArray[i].nameOne,roomArray[i].sexOne,roomArray[i].nameTwo,roo mArray[i].sexTwo);printf("当前有2位客人-> 姓名%s,",roomArray[i].nameOne);if(roomArray[i].sexOne == 1)printf("性别:男,");else if(roomArray[i].sexOne == -1)printf("性别:女,");printf("姓名:%s,",roomArray[i].nameTwo);if(roomArray[i].sexTwo == 1)printf("性别:男,");else if(roomArray[i].sexOne == -1)printf("性别:女,");printf("\n");}}}else if(index == 2){printf("请输入你要查询房客的姓名:");scanf("%s",name);for(i=0;i<5;i++){if(strcmp(roomArray[i].nameOne,name) == 0 || strcmp(roomArray[i].nameTwo,name) == 0){printf("%s房客入住在房间%d!\n",name,roomArray[i].roomNumber);return;}}printf("没有找到该旅客的信息!");}else if(index == 3){printf("请输入你要查询的房间号:");scanf("%d",&number);j = number - 301;if(roomArray[j].Count == 0){printf("没有客人入住\n");}else if(roomArray[j].Count == 1){printf("当前有1位客人-> 姓名%s,性别%d!",roomArray[j].nameOne,roomArray[j].sexOne);}else{printf("当前有两个客人入住姓名%s,性别%d 姓名%s,性别%d\n",roomArray[j].nameOne,roomArray[j].sexOne,roomArray[j].nameTwo,roo mArray[j].sexTwo);}}}void show(){system("color 9f");printf("*******************请选择操作************************\n");printf(" 1.旅客入住\n");printf(" 2.旅客退房\n");printf(" 3.信息查询\n");printf(" 4.退出 exit\n");printf("请输入你要选择的操作: ");}int main(){int i= 100;InitArray();printf("*******************宾馆信息管理软件*******************\n");while(i != 4){printf("\n");show();scanf("%d",&i);switch(i){case 1:fun1();break;case 2:fun2();break;case 3:fun3();break;}}system("pause");return 0;}。
西彼科技有限责任公司参考源码酒店管理系统彼岸2011-03-31本段源代码,参考与阳光酒店管理系统编写的系统包Sunsdk包1)System包CsHashtable.java/** @(#)CsHashtable.java 1.24 03/12/19** public class** Copyright 2006 CazoSoft, Inc. All rights reserved.*/package sunsdk.system;import java.util.*;/*** <code> CsHashtable </code>* <p>* 该类的作用是封装哈希表* <p>* <strong>注意: </strong> 本类使用的哈希表方法put, 可能存在不安全因素* <p>* 相关类:Hashtable** @author 鲜强* @version 2006.3.28 22:18* @see java.util.Hashtable* @since CAZOSOFT 1.0*/public class CsHashtable {/*** 静态变量功能: 构造一个hashtable 供其他函数使用*/private static Hashtable hTable = new Hashtable();/*** 构造函数功能: 构造函数为静态的不能创建对象*/private CsHashtable() {}/*** 放入对象函数功能: 把对象放入哈希表,对象为Object类型** @param key :* 键值, Object 对象* @param value :* 对象, Object 对象*/public static void put(Object key, Object value) {hTable.put(key, value);}/*** 返回对象函数功能: 从哈希表中取出对象,返回为Object类型** @param key :* 键值* @return : 一个Object 对象*/public static Object get(Object key) {return hTable.get(key);}/*** 返回大小函数功能: 返回哈希表的大小** @return : 一个int 哈希表长度值*/public static int size() {return hTable.size();}/*** 移除一个对象** @param key : 接受一个要移除的键值*/public static Object remove(Object key) {return hTable.remove(key);}}/**Sunini.java*############################################################################## ** [ 项目名] :* [ 公司名] : SunshineSOFT* [ 模块名] : 对于INI文件的相关操作* [ 文件名] : sunini.java* [ 相关文件] : config.ini* [ 文件实现功能] : 读取和保存INI文件* [ 作者] : 顾俊* [ 版本] : 1.1* ----------------------------------------------------------------------------* [ 备注] :* ----------------------------------------------------------------------------* [ 修改记录] :** [ 日期] [版本] [修改人] [修改内容]* 2006/03/31 1.0 顾俊创建* 2006/04/06 1.1 顾俊修改读取函数* ##--------------------------------------------------------------------------* 版权所有(c) 2006-2007, SunshineSOFT Corporation* --------------------------------------------------------------------------##** [ 函数说明] :** [## private sunini() {} ]:* 功能: 构造函数** [## public static String getIniKey (String k) {} ]:* 功能: 获得INI文件中的指定键的键值** [## public static void setIniKey (String k, String v) {} ]:* 功能: 设置k键的键值为v对象** [## public static void saveIni (String k[]) {} ]:* 功能: 将k字符数组中所有键所对应的键值保存到INI文件中** [ 遗留问题] : setIniKey ()方法不能处理键值中的转义字符**############################################################################## */package com.sunshine.sunsdk.system;import java.util.*;import java.io.*;public class sunini {private static Properties ini = null;static {try {ini = new Properties ();ini.load (new FileInputStream ("config.ini"));}catch (Exception ex) {System.out.println ("Load CONFIG.INI is false!!");}//End try}/**=======================================================================* ** [## private sunini() {} ]: 构造函数* 参数:无* 返回值:无* 修饰符:private* 功能:防止实例化sunini对象**=======================================================================** */private sunini() {}/**=======================================================================* ** [## public static String getIniKey (String k) {} ]:* 参数:String对象表示键* 返回值:String对象表示k键所对应的键值,如果失败则返回空串* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:获得INI文件中的指定键的键值**=======================================================================** */public static String getIniKey (String k) {if(!ini.containsKey (k)) { //是否有k 这个键System.out.println ("The [ " + k + " ] Key is not exist!!");return "";}//End if(!ini.containsKey (k))return ini.get (k).toString ();}/**=======================================================================* ** [## public static void setIniKey (String k, String v) {} ]:* 参数:String k对象表示键,String v对象表示键值* 返回值:无* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:设置k键的键值为v对象**=======================================================================** */public static void setIniKey (String k, String v) {if(!ini.containsKey (k)) { //是否有k 这个键System.out.println ("The [ " + k + " ] Key is not exist!!");return;}//End if(!ini.containsKey (k))ini.put (k, v);}/**=======================================================================* ** [## public static void saveIni (String k[]) {} ]:* 参数:String k[]字符串数组表示要保存的所有键* 返回值:无* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:将k字符数组中所有键所对应的键值保存到INI文件中**=======================================================================** */public static void saveIni (String k[]) {try {FileWriter fw = new FileWriter ("config.ini");BufferedWriter bw = new BufferedWriter ( fw );//循环变量i是k字符串数组的下标for (int i = 0; i < k.length; i++) {bw.write (k[i] + "=" + getIniKey (k[i]));bw.newLine ();}//End forbw.close ();fw.close ();}catch (Exception ex) {System.out.println ("Save CONFIG.INI is false.");}//End try}}Suntools.java/***############################################################################## ** [ 项目名] :* [ 公司名] : SunshineSOFT* [ 模块名] : 工具函数* [ 文件名] : suntools.java* [ 相关文件] :* [ 文件实现功能] : 测试数据是否合法及流水号自动分配* [ 作者] : 顾俊* [ 版本] : 1.2* ----------------------------------------------------------------------------* [ 备注] :* ----------------------------------------------------------------------------* [ 修改记录] :** [ 日期] [版本] [修改人] [修改内容]* 2006/04/07 1.0 顾俊建立isDate()函数* 2006/04/08 1.1 顾俊添加函数#A, #B, #C, #D* 2006/04/08 1.2 顾俊添加函数#E, #F, #G* ##--------------------------------------------------------------------------* 版权所有(c) 2006-2007, SunshineSOFT Corporation* --------------------------------------------------------------------------##** [ 函数说明] :** [## private suntools () {} ] :* 功能: 防止实例化suntools对象** [## public static boolean isDate (String date) {} ]:* 功能: 判断日期字符串是否合法函数** [## public static boolean isNum (String in) {} ]: #A* 功能: 测试字符串是否由数字(0-9)组成** [## public static boolean isNum (String in, int length, double min, double max) {} ]: #B* 功能: 测试字符串表示的数值及范围,且字符串只能是数字组成** [## public static String getNumber (int type) {} ]: #C* 功能: 自动分配单据编号, 自动递增** [## public static void savNumber (String num, int type) {} ]: #D* 功能: 将已用编号保存到INI文件** [## public static double getConsumeFactor(String sDate, String eDate) {} ]: #E* 功能: 计算酒店计费天数按INI文件中设置的** [## public static double getClockFactor(String sDate, String eDate) {} ]: #F* 功能: 计算酒店钟点房计费系数按INI文件中设置的** [## public static String getConsumeHour(String sDate, String eDate) {} ]: #G* 功能: 计算两个时间之间有几小时几分*** [ 遗留问题] :***############################################################################## */package com.sunshine.sunsdk.system;import java.util.*;import java.text.*;import java.sql.*;import com.sunshine.sunsdk.sql.*;public class suntools {public static final int Number_RZ = 0; //表示销售单号public static final int Number_YD = 1; //表示进货单号public static final int Number_JS = 1; //表示进货单号/**=======================================================================* ** [## private suntools () {} ]: 构造函数* 参数:无* 返回值:无* 修饰符:private* 功能:防止实例化suntools对象**=======================================================================** */private suntools () {}/**=======================================================================* ** [## public static boolean isDate (String date) {} ]:* 参数:String对象表示日期的字符串* 返回值:boolean 合法返回true* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:判断日期字符串是否合法函数**=======================================================================** */public static boolean isDate (String date) {SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");String isdate = date;if(date.length() == 10) //如果只有日期,函数自动加上00:00:00 isdate = date + " 00:00:00";try {sdf.parse (isdate);return true;}catch (Exception ex) {System.out.println ("feetools.isDate(): The DATE format is error .");return false;}}/**=======================================================================* ** [## public static boolean isNum (String in) {} ]:* 参数:String对象表示被测字符串* 返回值:boolean 合法返回true* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:测试字符串是否由数字(0-9)组成**=======================================================================** */public static boolean isNum (String in) {return isNum (in, 0, 0, 0);}/**=======================================================================* ** [## public static boolean isNum (String in, int length, double min, double max) {} ]:* 参数:String对象表示被测字符串* length变量表示字符串最大长度,取值0,表示没有长度限定* min,max变量限定了String对象表示的数值范围,当(length > 0)时* 返回值:boolean 合法返回true* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:测试字符串表示的数值及范围,且字符串只能是数字组成**=======================================================================** */public static boolean isNum (String in, int length, double min, double max) {String num = in;int point = 0; //'.'的个数int len = num.length ();if(length > 0) {if(len > length || len == 0) { //判断字符串长度,不合法空返回falseSystem.out.println ("suntools.isNum(): Length error.");return false;}//Endif}//End if(length > 0)elseif(len == 0) { //判断字符串是否为空,空返回falseSystem.out.println ("suntools.isNum(): String is NULL");return false;}//End if(len == 0)for (int i = len - 1; i >=0; i--) { //判断字符串只能是数字char ac = num.charAt (i);if(ac == '.' && point == 0 && i!= 0) { //如果是'.'字符,且是第一次出现,且不是只有一个点if(i > len - 4) { //判断小数位只能是两位point++;continue;}//Endif}//Endifif(ac < '0' || ac > '9' ) {System.out.println ("suntools.isNum(): Character isn't ( '0' - '9' )");return false;}//Endif}//Endforif(length !=0) {double s = Double.parseDouble (num); //现在len为字符串表示的数值if(s < min || s >max) { //限制范围min-max之间System.out.println ("suntools.isNum(): Amount limit error. ");return false;}//Endif}//End if(length != 0)return true;}/**=======================================================================* ** [## public static String getNumber (int type) {} ]:* 参数:int变量表示要获得什么类型的单号(见类头常量)* 返回值:String对象: 单号;* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:自动分配单据编号, 自动递增**=======================================================================** */public static String getNumber (int type) {GregorianCalendar gc = new GregorianCalendar();String tp, number, month, day; //单号标头, 单号记数位, 为月份, 为天int numLen = 0; //单号的默认位数if(type == Number_RZ) { //要获取销售单号tp = sunini.getIniKey ("LodgName");number = sunini.getIniKey ("LodgNumber");}else if(type == Number_YD){ //要获取进货单号tp = sunini.getIniKey ("EngaName");number = sunini.getIniKey ("EngaNumber");}else {tp = sunini.getIniKey ("ChouName");number = sunini.getIniKey ("ChouNumber");}numLen = number.length (); //得到单号的默认位数number = Integer.parseInt (number) + 1 + ""; //将单号增1,再转成字符串//判断记数号是否超位(超出要求长度)if(number.equals ((int)Math.pow (10, numLen - 1) + "") && number.length() > 1)number = number.substring(1); //单号记数位清零//for循环,用'0'为number补位(i = 当前号码位数, i < numLen)for (int i = number.length (); i < numLen; i++) {number = "0" + number;}//Endfor//为月份补'0'month = gc.get (GregorianCalendar.MONTH) + 1 + "";if( month.length() == 1)month = "0" + month;//为天补'0'day = gc.get (GregorianCalendar.DAY_OF_MONTH) + "";if( day.length () == 1)day = "0" + day;//连接单号标头,日期,记数位;组成单据号码tp = tp + gc.get (GregorianCalendar.YEAR) + month + day + number;return tp; //返回单号}/**=======================================================================* ** [## public static void savNumber (String num, int type) {} ]:* 参数:String对象表示要保存的单号* int变量表示要保存什么类型的单号(见类头常量)* 返回值:无* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:将已用编号保存到INI文件**=======================================================================** */public static void savNumber (String num, int type) {//INI文件中的键名String ini[] = { "[SOFTINFO]", "UserName", "CompName", "[CONFIG]", "Soft_First","Default_Link" , "Default_Page", "Sys_style", "[NUMBER]","LodgName", "LodgNumber", "EngaName", "EngaNumber", "ChouName","ChouNumber", "[HABITUS]", "Ck_Habitus", "Ck_Minute", "[PARTTIME]","In_Room", "Out_Room1", "Out_Room2", "InsuDay", "ClockRoom1","ClockRoom2", "InsuHour1", "InsuHour2", "[JDBC]", "DBFname","UserID", "Password", "IP", "Access", "[ODBC]", "LinkName" };String bt;if(type == Number_RZ) {bt = sunini.getIniKey ("LodgName");sunini.setIniKey ("LodgNumber", num.substring (bt.length () + 8));}else if(type == Number_YD){bt = sunini.getIniKey ("EngaName");sunini.setIniKey ("EngaNumber", num.substring (bt.length () + 8));} else{bt = sunini.getIniKey ("ChouName");sunini.setIniKey ("ChouNumber", num.substring (bt.length () + 8));}//保存到INI文件sunini.saveIni (ini);}/**=======================================================================* ** [## public static double getConsumeFactor(String sDate, String eDate) {} ]:* 参数:String sDate对象表示开始时间* String eDate变量表示结束时间* 返回值:double* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:计算酒店计费天数按INI文件中设置的**=======================================================================** *///获得消费系数public static double getConsumeFactor(String sDate, String eDate) {//获得开始日期时间的--年--月--日--时--分--秒String syh [] = sDate.trim ().split(" ");String symd[] = syh[0].trim().split("-");String shms[] = syh[1].trim().split(":");int sy = Integer.parseInt(symd[0]);int sM = Integer.parseInt(symd[1]);int sd = Integer.parseInt(symd[2]);int sh = Integer.parseInt(shms[0]);int sm = Integer.parseInt(shms[1]);int ss = Integer.parseInt(shms[2]);//获得结束日期时间的--年--月--日--时--分--秒String eyh [] = eDate.trim ().split(" ");String eymd[] = eyh[0].trim().split("-");String ehms[] = eyh[1].trim().split(":");int ey = Integer.parseInt(eymd[0]);int eM = Integer.parseInt(eymd[1]);int ed = Integer.parseInt(eymd[2]);int eh = Integer.parseInt(ehms[0]);int em = Integer.parseInt(ehms[1]);int es = Integer.parseInt(ehms[2]);//获得sDate的long值long sdt = new Timestamp(sy, sM, sd, sh, sm, ss, 0).getTime();//获得eDate的long值long edt = new Timestamp(ey, eM, ed, eh, em, es, 0).getTime();double db = 0;if(sdt > edt) { //不合法开始日期一定要小于结束日期db = -1;return db;}//Endifif(sdt == edt) { //无时间差db = 0;return db;}//Endifint insuDay = (int)(edt - sdt)/3600000;if(insuDay < 24) { //入住不到一天if(Integer.parseInt(sunini.getIniKey("InsuDay")) == 1)db = 1; //按全天计费else {if(insuDay > 1 && insuDay < 12)db = 0.5; //如果不按全天计费,则大于1小时按半天计费elsedb = 1; //如果不按全天计费,则大于12小时按全天计费}//Endifreturn db;}//Endif//几点之后按新的一天计费int inRoom = Integer.parseInt(sunini.getIniKey("In_Room"));if(sh < inRoom) {db = 0.5;}//Endifsh = inRoom; //多的时间已经加了系数,去掉多余的//几点之后按半天计费int outRoom1 = Integer.parseInt(sunini.getIniKey("Out_Room1"));int outRoom2 = Integer.parseInt(sunini.getIniKey("Out_Room2"));if(eh > outRoom1 && eh < outRoom2) {db = db + 0.5;eh = outRoom1; //多的时间已经加了系数,去掉多余的}else if(eh >= outRoom2) {db = db + 1;eh = outRoom2;}//Endif//计算入住时间sdt = new Timestamp(sy, sM, sd, sh, sm, ss, 0).getTime();edt = new Timestamp(ey, eM, ed, eh, em, es, 0).getTime();db = db + (edt - sdt)/86400000;return db;}/**=======================================================================* ** [## public static double getClockFactor(String sDate, String eDate) {} ]:* 参数:String sDate对象表示开始时间* String eDate变量表示结束时间* 返回值:double* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:计算酒店钟点房计费系数按INI文件中设置的**=======================================================================** */public static double getClockFactor(String sDate, String eDate) {//获得开始日期时间的--年--月--日--时--分--秒String syh [] = sDate.trim ().split(" ");String symd[] = syh[0].trim().split("-");String shms[] = syh[1].trim().split(":");int sy = Integer.parseInt(symd[0]);int sM = Integer.parseInt(symd[1]);int sd = Integer.parseInt(symd[2]);int sh = Integer.parseInt(shms[0]);int sm = Integer.parseInt(shms[1]);int ss = Integer.parseInt(shms[2]);//获得结束日期时间的--年--月--日--时--分--秒String eyh [] = eDate.trim ().split(" ");String eymd[] = eyh[0].trim().split("-");String ehms[] = eyh[1].trim().split(":");int ey = Integer.parseInt(eymd[0]);int eM = Integer.parseInt(eymd[1]);int ed = Integer.parseInt(eymd[2]);int eh = Integer.parseInt(ehms[0]);int em = Integer.parseInt(ehms[1]);int es = Integer.parseInt(ehms[2]);//获得sDate的long值long sdt = new Timestamp(sy, sM, sd, sh, sm, ss, 0).getTime();//获得eDate的long值long edt = new Timestamp(ey, eM, ed, eh, em, es, 0).getTime();//获得时间差double db = 0;if(sdt > edt) { //不合法开始日期一定要小于结束日期db = -1;return db;}//Endif//获得两个时间之间有多少秒edt = (edt - sdt) / 1000;//--------------------------------------------------------------------//if(edt <= 60 * Integer.parseInt(sunini.getIniKey("ClockRoom1"))) { db = 0; //开房后几分钟开始计费,读INI文件设置return db;}//Endif//--------------------------------------------------------------------//if(edt / 60 < 60 * Integer.parseInt(sunini.getIniKey("ClockRoom2"))) { db = 1; //不足几小时按一个单位计费return db;}//Endif//--------------------------------------------------------------------////除以上可能的正常计费公式如下db = edt / 3600; //获得过去的小时数edt = edt % 3600 / 60; //获得多余的分钟数if(edt > Integer.parseInt(sunini.getIniKey("InsuHour2")) && edt <= Integer.parseInt(sunini.getIniKey("InsuHour1"))) {db = db + 0.5; //超过多少分,但小于多少分部分,收半价}else if(edt > Integer.parseInt(sunini.getIniKey("InsuHour2"))) {db = db + 1; //超过多少分的,收全价}//Endif//--------------------------------------------------------------------//return db;}/**=======================================================================* ** [## public static String getConsumeHour(String sDate, String eDate) {} ]:* 参数:String sDate对象表示开始时间* String eDate变量表示结束时间* 返回值:String* 修饰符:public static 可以不实例化对象而直接调用方法* 功能:计算两个时间之间有几小时几分**=======================================================================** */public static String getConsumeHour(String sDate, String eDate) {//获得开始日期时间的--年--月--日--时--分--秒String syh [] = sDate.trim ().split(" ");String symd[] = syh[0].trim().split("-");String shms[] = syh[1].trim().split(":");int sy = Integer.parseInt(symd[0]);int sM = Integer.parseInt(symd[1]);int sd = Integer.parseInt(symd[2]);int sh = Integer.parseInt(shms[0]);int sm = Integer.parseInt(shms[1]);int ss = Integer.parseInt(shms[2]);//获得结束日期时间的--年--月--日--时--分--秒String eyh [] = eDate.trim ().split(" ");String eymd[] = eyh[0].trim().split("-");String ehms[] = eyh[1].trim().split(":");int ey = Integer.parseInt(eymd[0]);int eM = Integer.parseInt(eymd[1]);int ed = Integer.parseInt(eymd[2]);int eh = Integer.parseInt(ehms[0]);int em = Integer.parseInt(ehms[1]);int es = Integer.parseInt(ehms[2]);//获得sDate的long值long sdt = new Timestamp(sy, sM, sd, sh, sm, ss, 0).getTime();//获得eDate的long值long edt = new Timestamp(ey, eM, ed, eh, em, es, 0).getTime();//获得时间差sdt = edt - sdt;//生成过去多少时间的字符串String t = sdt / 3600000 + "小时" + sdt % 3600000 / 60000 + "分";return t;}}ToCap.java/** @(#)ToCap.java 1.24 03/12/19** Copyright 2006 CazoSoft, Inc. All rights reserved.*/package sunsdk.system;/*** <code> ToCap </code>* <p>* 本类用于转化中文大写人民币** @author 鲜强* @version 22.14, 04/05/06* @since CAZOSOFT 1.0*/public class ToCap {/*** 用户设置大写钱数(100,000,000 (一亿)以内).** @param money :* String 接收用户的正实数.* @return : String 包括圆整或角分的中文大写人民币,如果不合法,将返回空(null) */public String setMoney(String money) {String re = null;double num;//测试数据是否合法try {num = Double.parseDouble(money.trim());if (num < 100000000 && num >= 0) {//合法, 使用字符串开始转换re = this.mySetMoney(money);}//end if} catch (Exception ex) {}//end try//返回值return re;}/*** 大写转换函数. 功能: 转换数字为中文大写** @param num :* int 接受整数* @return : String 大写数字零到玖.*/private String setDaXie(int num) {String re = null;switch (num) {case 0:re = "零";break;case 1:re = "壹";break;case 2:re = "贰";break;case 3:re = "叁";break;case 4:re = "肆";break;case 5:re = "伍";break;case 6:re = "陆";break;case 7:re = "柒";break;case 8:re = "捌";break;case 9:re = "玖";break;default:break;}return re;}/*** 处理大写人民币** @param num :* String 接收处理过的字符串(实为数字). * @return : 返回处理过的大写人民币.*/private String mySetMoney(String num) throws Exception {//要返回的字符串String re = "";//转换过程String setNum = null;int index = num.indexOf(".");//处理整数if (index == -1) {setNum = num;} else {setNum = num.substring(0, index);}int weiShu = setNum.length();if (weiShu > 0) {int leng = setNum.length();int numYuan = Integer.parseInt("" + setNum.charAt(weiShu - 1));String zhuanYuan = setDaXie(numYuan);re = zhuanYuan;//个位if (weiShu > 1) {int numShi = Integer.parseInt("" + setNum.charAt(weiShu - 2));String zhuanShi = setDaXie(numShi);//十位re = zhuanShi + "拾" + re;if (weiShu > 2) {int numBai = Integer.parseInt(""+ setNum.charAt(weiShu - 3));String zhuanBai = setDaXie(numBai);//百位re = zhuanBai + "佰" + re;if (weiShu > 3) {int numQian = Integer.parseInt(""+ setNum.charAt(weiShu - 4));String zhuanQian = setDaXie(numQian);//千位re = zhuanQian + "仟" + re;if (weiShu > 4) {int numWan = Integer.parseInt(""+ setNum.charAt(weiShu - 5));String zhuanWan = setDaXie(numWan);//万位re = zhuanWan + "万" + re;if (weiShu > 5) {int numShiWan = Integer.parseInt(""+ setNum.charAt(weiShu - 6));String zhuanShiWan = setDaXie(numShiWan);//十万位re = zhuanShiWan + "拾" + re;if (weiShu > 6) {int numBaiWan = Integer.parseInt(""+ setNum.charAt(weiShu - 7));String zhuanBaiWan = setDaXie(numBaiWan);//百万位re = zhuanBaiWan + "佰" + re;if (weiShu > 7) {int numQianWan = Integer.parseInt(""+ setNum.charAt(weiShu - 8));String zhuanQianWan = setDaXie(numQianWan);//千万位re = zhuanQianWan + "仟" + re;}//end qianwan}//end baiwan}//end shiwan}//end wan}//end qian}//end bai}//end shi}//end yuan//处理小数if (index != -1) {String xiaoShu = num.substring(index + 1, num.length());int leng = xiaoShu.length();int numJiao = Integer.parseInt("" + xiaoShu.charAt(0));String zhuanJiao = setDaXie(numJiao);int numFen;if (leng == 1) {numFen = 0;}//end ifnumFen = Integer.parseInt("" + xiaoShu.charAt(1));String zhuanFen = setDaXie(numFen);//十分位+百分位if (numJiao == 0 && numFen != 0 || numJiao != 0 && numFen != 0) {re = re + "圆" + zhuanJiao + "角" + zhuanFen + "分";} else {re = re + "圆整";}//end if} else {re = re + "圆整";}//end indexreturn re;}}2)swing包CsUIManager.java/** @(#)CsUIManager.java 2006-4-13** public class** Copyright 2006 CazoSoft, Inc. All rights reserved.*/package sunsdk.swing;import java.awt.*;import javax.swing.*;import javax.swing.plaf.metal.*;/*** <code> CsUIManager </code>* <p>* 说明:本类为外观管理器* <p>* <strong>警告:</strong>* 使用金属(BOLD)外观时,输入中文会有异常,但不影响系统运行* <p>* 相关库文件:o.jar** @author 鲜强* @version 2006-4-13 23:05:39* @since CAZOSOFT 1.0*/public class CsUIManager {//Windows 外观public static final int WINDOWS = 0;//Java 默认外观public static final int METAL = 1;//Linux 外观public static final int MOTIF = 2;//WindowsClassic 外观public static final int WINDOWSCLASSIC = 3;//Alloy 外观public static final int ALLOY = 4;//Alloy 玻璃外观public static final int GLASSTHEMEALLOY = 5;//Alloy 迷幻外观public static final int ACIDTHEMEALLOY = 6;//Alloy 贝多因外观public static final int BEDOUIDTHEMEALLOY = 7;//Alloy 默认外观public static final int DEAFULTTHEMEALLOY = 8;//Bold 外观public static final int BOLD = 9;/*** 界面风格选择器** @param cp* 接受要改变的控件* @param style* 接受界面下标* @return 返回成功设置与否*/public static boolean setUI(Component cp, int style) {try {switch (style) {case 0:UIManager.setLookAndFeel("com.sun.java.swing.plaf."+ "windows.WindowsLookAndFeel");break;case 1:UIManager.setLookAndFeel("javax.swing.plaf."+ "metal.MetalLookAndFeel");break;case 2:UIManager.setLookAndFeel("com.sun.java.swing.plaf."+ "motif.MotifLookAndFeel");break;case 3:UIManager.setLookAndFeel("com.sun.java.swing.plaf."+"windows.WindowsClassicLookAndFeel");break;case 4:UIManager.setLookAndFeel("com.incors.plaf."+ "alloy.AlloyLookAndFeel");break;case 5:UIManager.setLookAndFeel("soft.wes.feels."+ "GlassThemeAlloyLookAndFeel");break;case 6:UIManager.setLookAndFeel("soft.wes.feels."+ "AcidThemeAlloyLookAndFeel");break;case 7:UIManager.setLookAndFeel("soft.wes.feels."+ "BedouinThemeAlloyLookAndFeel");break;case 8:UIManager.setLookAndFeel("soft.wes.feels."+ "DefaultThemeAlloyLookAndFeel");break;case 9:UIManager.put("swing.boldMetal", Boolean.FALSE);//可设置对话框外观JDialog.setDefaultLookAndFeelDecorated(true);//可设置设置窗口外观JFrame.setDefaultLookAndFeelDecorated(true);Toolkit.getDefaultToolkit().setDynamicLayout(true);System.setProperty("sun.awt.noerasebackground","true");UIManager.setLookAndFeel(new MetalLookAndFeel());break;}} catch (Exception ex) {JOptionPane.showMessageDialog(null, "更换风格失败,以原风格显。
酒店管理系统
一.数据库设计:HotelManager
客房类型表:RoomType
TypeID:类型编号,主键且自动增长
TypeName:类型名称,唯一
TypePrice:房间价格
AddBedPrice:加床价格
IsAddBed:是否允许加床,只能写“是”或“否”
Remark:备注
二.程序设计
1.主窗体:
1)MDI父窗体
2)单击“客房类型设置"打开客房类型设置窗体
3)单击“退出系统”,退出应用程序
2.客房类型设置
1)窗体加载,显示所有客房类型信息到到DataGridView控件
2)实现按类型名称进行模糊查询的功能。
3)实现添加客房类型功能,左边DataGridView及时刷新,提示添加成功
4)单击某行记录时,在下面的文本框中显示选中这行记录的详细信息
5)点击“保存修改”按钮,实现修改功能,使用SqlCommand修改数据到数据库,并刷新DataGridView控件信息
6)提示修改成功
7)增加右键删除功能,要求删除完后及时刷新
8)提示删除成功。
#include <windows.h>#include <dos.h>#include<stdio.h>#include<stdlib.h>#include<time.h>//--------------------------------------------------结构定义------------------------------------------ typedef struct CheckinInformation{char name[10]; //姓名int id; //证件号int roomType; //房型int countType; //计费方式}CheckinInfo;typedef struct HotelRoom{int roomType; //房型int roomNum; //房号int checked; //入住情况int price; //房价}Room;typedef struct RoomOrder{CheckinInfo *checkinInfo; //入住信息long date; //入住时间Room * room; //房间信息}Order;typedef struct HotelInfomation{int checkinAmount; //已入住房数int singleRemainAmount; //单人房剩余房数int doubleRemainAmount; //双人房剩余房数int bigRemainAmount; //大床房剩余房数}HotelInfo;//--------------------------------枚举类型---------------------------enum {MainUI,HotelInfoUI,CheckinUI,CheckinResultUI,OrderUI,CheckOutUI,Exit};//GUI enum {Single,Double,Big};//Room Typeenum {Hour,Day};//countType//--------------------------------全局变量--------------------------int GUI = MainUI;Order* orderList[100];//订单数组Room* roomList[100];//房间数组HotelInfo * hotelInfo = NULL;//酒店房间信息//-------------------------------函数声明---------------------------- void initiallizeRoomList();void insertToOrderList(Order * order);Room* getRoomByType(int roomType);Order* getOrderByRoomNum(int roomNum);void showMainUI();void showHotelInfoUI();void showCheckinUI();void showCheckinResultUI();void showOrderUI();void showCheckOutUI();//-------------------------------Main函数---------------------------- void main() //主函数{//初始化酒店房间信息hotelInfo = (HotelInfo *)malloc(sizeof(HotelInfo));hotelInfo -> singleRemainAmount = 20;hotelInfo -> doubleRemainAmount=40;hotelInfo -> bigRemainAmount=40;hotelInfo -> checkinAmount=0;//初始化房间列表initiallizeRoomList();//界面显示while(GUI != Exit){switch(GUI){case MainUI:showMainUI();break;case HotelInfoUI:showHotelInfoUI();break;case CheckinUI:showCheckinUI();break;case CheckinResultUI:showCheckinResultUI();break;case OrderUI:showOrderUI();break;case CheckOutUI:showCheckOutUI();break;default:break;}}}//-------------------------------函数定义----------------------------void initiallizeRoomList(){//房间数组初始化,初始化的结果是让roomList的数组有100个room指针,而且设置了相应的值int i;Room*newRoom=NULL;for(i=0;i<20;i++) //单人房房间信息初始化{newRoom = ( Room* )malloc(sizeof(Room));roomList[i] = newRoom;roomList[i]->checked=0;roomList[i]->price=110;roomList[i]->roomNum=i+1;roomList[i]->roomType=Single;}for(i=20;i<60;i++) //双人房房间信息初始化{newRoom = ( Room* )malloc(sizeof(Room));roomList[i] = newRoom;roomList[i]->checked=0;roomList[i]->price=180;roomList[i]->roomNum=i+1;roomList[i]->roomType=Double;}for(i=60;i<100;i++) //大床房房间信息初始化{newRoom = ( Room* )malloc(sizeof(Room));roomList[i] = newRoom;roomList[i]->checked=0;roomList[i]->price=180;roomList[i]->roomNum=i+1;roomList[i]->roomType=Big;}}//通过所选择的房型获取空房间,获取房间后将房间信息改为已入住,并减少相应房型的剩余房间数Room* getRoomByType(int roomType){int i;switch(roomType){case Single:for(i=0;i<20;i++){if( roomList[i]->checked == 0){roomList[i]->checked=1;hotelInfo->singleRemainAmount -- ;hotelInfo->checkinAmount++;return roomList[i];}}break;case Double:for(i=20;i<60;i++){if( roomList[i]->checked == 0){roomList[i]->checked=1;hotelInfo->doubleRemainAmount -- ;hotelInfo->checkinAmount++;return roomList[i];}}break;case Big:for(i=60;i<100;i++){if( roomList[i]->checked == 0){roomList[i]->checked=1;hotelInfo->bigRemainAmount --;hotelInfo->checkinAmount++;return roomList[i];}}break;}}//将订单放入订单列表void insertToOrderList(Order * order){int i;for( i = 0;i<100;i++){if( orderList[i] ==NULL ){orderList[i] = order;break;}}}//通过房号查询订单Order* getOrderByRoomNum(int roomNum){int i;for(i=0;i<100;i++){if( orderList[i]->room->roomNum == roomNum){return orderList[i];}}void showMainUI(){//显示主界面,并接受输入int chooseNum;system("cls");printf("\n\n==========================酒店房间登记与计费管理管理系统=======================\t\n\n\n");printf("*\t\t\t\t1. 入住登记\t\t\t\t*\n");printf("*\t\t\t\t2. 查询入住情况\t\t\t*\n");printf("*\t\t\t\t3. 查询当前费用\t\t\t*\n");printf("*\t\t\t\t4. 结账退房\t\t\t\t*\n");printf("*\t\t\t\t5. 退出程序\t\t\t\t*\n\n\n");printf("\n\n==========================酒店房间登记与计费管理管理系统=======================\t\n\n\n");printf("请输入相应编号进入菜单\t");//接受输入scanf("%d",&chooseNum);switch(chooseNum){case 1:GUI = HotelInfoUI;break;case 2:GUI = HotelInfoUI;break;case 3:GUI = OrderUI;break;case 4:GUI = OrderUI;break;case 5:Sleep(3000);GUI = Exit;break;default:break;}void showHotelInfoUI(){int chooseNum;system("cls");printf("\n\n=========================酒店入住情况查询菜单=======================\t\n\n\n\n");printf("*\t\t\t入住房间数: %d\t\t\t\t*\n", hotelInfo->checkinAmount);printf("*\t\t\t剩余房间数: \t");printf("单人房:%d\t\t*\n",hotelInfo->singleRemainAmount);printf("*\t\t\t\t\t双人房:%d\t\t*\n",hotelInfo->doubleRemainAmount);printf("*\t\t\t\t\t大床房:%d\t\t*\n\n",hotelInfo->bigRemainAmount);printf("\n\n=========================酒店入住情况查询菜单=======================\t\n\n\n");printf("按0 :返回\n");printf("按1 : 登记入住\n");scanf("%d",&chooseNum);switch(chooseNum){case 0:GUI = MainUI;break;case 1:GUI = CheckinUI;break;default:GUI = HotelInfoUI;break;}}void showCheckinUI(){Order * newOrder;Room* newRoom = NULL;//填写一个新的入住信息CheckinInfo * newCheckinInfo = NULL;int roomTypeNum;int countTypeNum;time_t timep;system("cls");printf("\n\n===========================酒店入住登记菜单=========================\t\n\n\n");newCheckinInfo = ( CheckinInfo * )malloc(sizeof(CheckinInfo));printf("*\t\t请输入姓名:");scanf("%s", &(newCheckinInfo->name) );printf("*\t\t请输入证件号:");scanf("%d", &(newCheckinInfo->id) );printf("*\t\t请选择入住房型:\n");printf("\t\t\t1.单人房\n\t\t\t2.双人房\n\t\t\t3.大床房\n");scanf("%d",&(roomTypeNum));switch(roomTypeNum) //通过输入的数字对应房型{case 1:newCheckinInfo->roomType = Single;break;case 2:newCheckinInfo->roomType = Double;break;case 3:newCheckinInfo->roomType = Big;break;default:newCheckinInfo->roomType = Single;break;}printf("*\t\t请选择计费方式:\n");printf("\t\t\t1.按小时计费; \n\t\t\t2.按天数计费\n"); //通过输入的数字对应计费方式scanf("%d",&countTypeNum);switch(countTypeNum){case 1:newCheckinInfo->countType = Hour;break;case 2:newCheckinInfo->countType = Day;break;}printf("\n\n===========================酒店入住登记菜单=========================\t\n\n\n");//生成一个新的订单newOrder = ( Order* )malloc(sizeof(Order));newOrder -> checkinInfo = newCheckinInfo;newOrder -> date = time(0);switch(newCheckinInfo->roomType) //通过房型获取房间{case Single:newRoom = getRoomByType(Single);break;case Double:newRoom=getRoomByType(Double);break;case Big :newRoom=getRoomByType(Big);break;}newOrder->room = newRoom;insertToOrderList(newOrder);printf("房间号为:%d\n",newOrder->room->roomNum);GUI = CheckinResultUI;}void showCheckinResultUI(){int chooseNum;printf("\n\n=========================酒店入住登记确认菜单=======================\t\n\n\n");printf("\t\t\t************\t\t\t\t\n");printf("\t\t\t* 登记成功*\t\t\t\t\n");printf("\t\t\t************\t\t\t\t\n\n");printf("\n\n=========================酒店入住登记确认菜单=======================\t\n\n\n");printf("按0 :返回\n");scanf("%d",&chooseNum);switch(chooseNum){case 0:GUI = MainUI;break;default:GUI = CheckinResultUI;break;}}void showOrderUI(){int roomNum;int chooseNum;int amount;Order * theOrder = NULL;system("cls");printf("\n\n=========================酒店房间信息查询菜单=======================\t\n\n\n");printf("请输入房间号:");scanf("%d",&roomNum);if (roomNum<0 || roomNum>100){printf("\n 输入有误请重新输入") ;GUI = OrderUI;}else{theOrder = getOrderByRoomNum(roomNum);printf("房型:");switch(theOrder->room->roomType){case Single:printf("单人房\n");break;case Double:printf("双人房\n");break;case Big:printf("大床房\n");break;}printf("计费方式:");switch(theOrder->checkinInfo->countType ){case Hour:printf("小时计费\n");amount = (time(0) - theOrder->date) / 3600 +1;printf("已入住时间:%d小时\n",amount);break;case Day:printf("天计费\n");amount = (time(0) - theOrder->date) / (3600*24) +1;printf("已入住时间:%d天\n",amount);break;}printf("房价:%d\n",theOrder->room->price);printf("应支付:%d\n\n",amount * theOrder->room->price);printf("\n\n=========================酒店房间信息查询菜单=======================\t\n\n\n");printf("按0:返回\n");printf("按1:结账退房\n");scanf("%d",&chooseNum);switch(chooseNum){case 0:GUI = MainUI;break;case 1:GUI = CheckOutUI;break;default:break;}}}void showCheckOutUI(){int chooseNum;printf("\n\n=========================酒店结账退房确认菜单=======================\t\n\n\n");printf("\t\t\t\t************\t\t\t\t\n");printf("\t\t\t\t* 结账成功*\t\t\t\t\n");printf("\t\t\t\t************\t\t\t\t\n\n");printf("\n\n=========================酒店结账退房确认菜单=======================\t\n\n\n");printf("按0:返回");scanf("%d",&chooseNum);switch(chooseNum) {case 0:GUI = MainUI;break;default:GUI = CheckOutUI;break;}}。