宾馆信息管理系统课程设计报告

likai1010

贡献于2013-09-17

字数:18311 关键词: 报告

 数据库课程设计报告 -------宾馆信息管理系统 软件学院 软件工程专业 ****级*班 姓名:*** 学号:*********** 任课教师:彭朝晖 实验教师:彭朝晖 王诚梅 助教:** 目 录 一、系统开发平台 1 二、数据库规划 2 2.1 任务陈述 2 2.2 任务目标 2 三、系统定义 2 3.1 系统边界 2 3.2 用户视图 2 四、需求分析 2 4.1 用户需求说明 2 4.1.1 数据需求 2 4.1.2 事务需求 2 4.2 系统需求说明 2 五、数据库逻辑设计 2 5.1 ER图 2 5.2 数据字典 2 5.3 关系表 2 六、数据库物理设计 3 6.1 索引 3 6.2 视图 3 6.3 安全机制 3 6.4 其他 3 七、应用程序设计 3 7.1 功能模块 3 7.2 界面设计 3 7.3 事务设计 3 八、测试和运行 3 九、总结 4 附. 参考文献 4 一、系统开发平台 题目、开发工具、数据库、操作系统等。 题目:宾馆信息管理系统 开发工具:PowerBuilder 数据库:SQL Sever 操作系统:Windows Xp 二、数据库规划 2.1 任务陈述  宾馆在正常的运营中需要对客房资源、顾客信息、结算信息进行管理,利用宾馆管理信息系统及时了解各个环节中信息的变更,有利于提高管理效率。 一套功能强大而又使用简便实用的客房管理软件,适用于宾馆管理、酒店管理、招待所管理。主要功能:团体,散客入住客人的信息登记,换房,正常退房,挂帐退房,挂单补款结帐,预定管理,贵宾卡管理,押金管理,各种强大的宾馆统计报表,异常处理。    系统开发的总体任务是实现宾馆各种信息的系统化、规范化和自动化。 2.2 任务目标 实现宾馆酒店的正常快速高效的运作。 保证客人预订、退订客房准确得到回应, 保证客人入住、店内消费得到良好的管理, 保证客人换房得到良好的回应, 保证客人结算准确良好的管理, 保证客房状态及时更改以便于查询预订, 保证特殊人群的特殊服务(贵宾卡), 保证财务结算准确高效(入账:客人结算,出账:工资发放、日常维修、水电费以及押金的管理), 贵宾卡的发放(累计消费达到一定数目), 关于团体入住要保证客房的合理安排。 Customer:证件号,联系方式,贵宾卡(有/无),押金,入住房间号,入住时间,是否换房,结算时间及结算,累计消费。 Receptionist:员工编号,工资及发放情况,房间查询 Room:编号,等级,状态(是否空闲) Accountant:员工编号,工资及发放情况,结算 Manager: 查询基本的员工、客人及房间情况,账目查询,员工、房间及贵宾卡的管理, 三、系统定义 3.1 系统边界 Manager receptionist Customer Accountant Room HRM 所有用户的详细信息 日常维护及检修 工作时间、节假日安排 市场采购,水电费等 3.2 用户视图 用户 需求 Customer(客户)注册(成为新客户),宾馆基本信息查询,房间类型价位查询,房间状态查询,历史信息查询(预定,退订,换房,退宿),基本信息维护及密码修改,预订查询,预订,退订,入住,换房,结账,贵宾卡 Receptionist 基本信息(员工编号,姓名,性别,工资及工资发放情况等),房间基本信息及状态查询,客户基本信息查询,预定超期处理(取消预定) (前台) 入住安排(入住时间,房间安排),换房管理(换房时间,房间安排),结算(结算时间,消费总金额),押金管理(入住索要押金,结账退付押金) Accountant 基本信息(员工编号,姓名,性别,工资及工资发放情况等),工资发放,资金管理(账目表查看、收入支出明细、账目表更新(按日期 (会计) <月>结算)) Manager 房间基本信息及状态情况查询,员工基本查询,会员基本查询,账目(总经理) 查询(收入、支出、汇总),员工管理(增删改—工资情况),房间管 理(价格修改,类型修改,状态修改)贵宾卡查询及发放 四、需求分析 4.1 用户需求说明 4.1.1数据需求 宾馆有一名总经理、多名会计和多名前台。总经理负责宾馆的日常运营,会计数据包括职工号、工资,负责对宾馆收入支出的统计管理,前台数据包括职工号、工资。职工号在宾馆内唯一。 宾馆有各种标准的房间。房间数据包括房间号、房间级别、房间价位以及房间的状态(是否已经有客人)。房间号唯一表示一个房间,房间级别决定房间价位,房间有多种级别分别表示:单人间、标准间、豪华间、商务间、行政间。房间状态表示此房间是否可以预定或者入住或者转房。 在客户初次登陆预定房间以及初次入住宾馆时,客户必须注册为宾馆的顾客,顾客的数据包括id、联系方式、个人或团体(人数)和是否会员卡以及是否交了押金。Id在宾馆唯一表示一名顾客(或团体)。注册后,客户可以查询房间、预定房间及入住。预定房间时包括客户id、房间号、日期。登记入住时包括客户id、房间号、日期以及前台的职工号。客户转房需要的数据是客户id、转的房间号、日期以及前台的职工号。客户退房付款的数据包括客户id、房间号、日期、总消费以及前台的职工号。 会员卡信息包含在客户基本信息里,客户只要在宾馆累计消费金额达到1万元即可获得贵宾卡。 4.1.2 事务需求 数据录入 1.录入一个客户(个人或团体)的基本信息 2.录入一个员工的基本信息 3.录入房间的基本信息 4.录入预定房间的基本信息 5.录入入住房间的基本信息 6.录入换房的基本信息 7.录入退房的基本信息 8.录入登陆的初始证件号及密码信息 数据更新/删除 9.更新/删除预定房间信息 10.更新/删除入住房间信息 11.更新/删除换房信息 12.更新/删除退房信息 13.更新/删除客户(会员及非会员)信息 14.更新/删除员工信息 15.更新/删除房间信息 16.更新/删除预定房间信息 17.更新/删除团体的基本信息 数据查询 数据库必须支持下列查询: 用户1—宾馆总经理 查询任意房间的状态 查询任意天、周、月的住宿情况(总计住宿人数) 查询任意房间的周、月收入情况(总计住宿费收入) 查询任意周、月的总输入情况 查询员工的工资及发放情况 查询会员卡情况 用户2—宾馆会计 查询任意房间任意天的收入情况 查询会员卡发放情况 用户3—宾馆前台接待 查询任意房间的状态 查询空闲房间 查询房间的价位 查询登记入住人员或团体的基本信息 查看会员卡信息 用户4—散客 查询个人信息 修改个人信息 查询宾馆房间价位 查询宾馆空房情况 查询本人在此宾馆的住宿情况(包括历史记录) 用户5—团体 需求:注册 查询团体信息 查询宾馆房间价位 查询宾馆空房情况 查询本团体在此宾馆的住宿情况(包括历史记录) 4.2 系统需求说明 初始数据库大小: 1.有5种房间类型、30间房。最多可供100人住宿。 2.大约有15名会计加员工,会计最多3名,员工至少12名。 3.大约有30名注册顾客。 4.大约有100条预定房间记录。 5.大约有100条入住房间记录。 6.大约有30条换房记录。 7.大约有50条退房记录。 数据库增长速度: 1.每天大约有20-50人住宿,需添加登记信息。 2.每天大约有10人预定房间(团体例外)。 3.每天大约有30人缴费退房。 4.每天约有2名新员工进来 5.每天约有2名员工离开。 6.每天约有10名新顾客注册。 7.每周大约发放会员卡5张 8.每天约有2人换房。 记录查找的类型和平均数量: 1.查询房间情况大约一天100次(每天下午6~9点是高峰期) 2.查询员工情况大约一天20次 3.查询客户情况大约一天50次 4.查询会员卡情况大约一天10次 网络和共享需求: 1. 所有用户必须安全的和总部中央数据库网络互连 2. 必须能够支持至少3名成员同时访问.需要考虑这么大数量并发访问的许可需求。 性能: 1.单个记录查询时间少于1秒,高峰期少于5秒 2. 多个记录查询时间少于5秒,高峰期少于10秒 3. 更新/保存记录时间少于1秒,高峰期少于5秒 安全性: 1. 数据库必须有口令保护 2. 每个用户分配特定的用户视图所应有的访问权限 3. 用户只能在适合他们完成工作的需要的窗口中看到需要的数据 备份和恢复 n 每天24点备份 用户界面: n 菜单驱动,联机帮助 法律问题: n 对员工和会员信息管理,遵守法律 五、数据库逻辑设计 5.1 ER图 Customer Receptionist Room 预定 入住 换房 退房 房间号 类型 状态 Id 联系方式 是否会员 押金 员工号 工资 工资发放情况 联系电话 性别 姓名 日期 日期 日期 日期 金额 价格 人数 5.2 数据字典 实体 属性 描述 键 类型及长度 是否空 是否多值 约束 房间 房间号 唯一表示房间 主键 Char 长度5 N N 数字表示 类型 房间类型决定价格 Char 长度1 N N 数字表示 状态 是否住客是否可住 Char 长度为10 N N 空闲,已住,不可住(损坏) 职工 员工号 唯一表示员工 主键 Char 长度5 N N 数字表示 姓名 员工的名字 varChar 20 N 性别 Char 长度 2 N 男或女或空 联系电话 Telphone Number Char 长度5 N 数字 工资 Salary Int N 工资发放情况 是否发了工资 Char 长度2 N 是或否 客户 客户号 唯一表示 主键 Char长度5 N N 数字 联系方式 Telphone Number Char 长度5 N 数字 是否会员 是否优惠 Char 长度5 N N 00000表示非会员其余会员数字 押金 入住时需交付 Int N N 0无,其余已交付 人数 是否团体 Int N N 1个人其余正整数团体 5.3 关系表 创建房间表(room) CREATE TABLE [room] ( [rnum] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL , [lev] [char] (1) COLLATE Chinese_PRC_CI_AS NULL , [state] [char] (10) COLLATE Chinese_PRC_CI_AS NULL , CONSTRAINT [PK_room] PRIMARY KEY CLUSTERED ( [rnum] ) ON [PRIMARY] , CONSTRAINT [FK_room_lp] FOREIGN KEY ( [lev] ) REFERENCES [lp] ( [lev] ) ) ON [PRIMARY] GO 创建客户表 CREATE TABLE [customer] ( [id] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL , [phnum] [char] (5) COLLATE Chinese_PRC_CI_AS NULL , [card] [char] (5) COLLATE Chinese_PRC_CI_AS NULL , [deposit] [int] NULL , [total] [int] NULL , CONSTRAINT [PK_customer] PRIMARY KEY CLUSTERED ( [id] ) ON [PRIMARY] ) ON [PRIMARY] GO 创建业务员表 CREATE TABLE [receptionist] ( [snum] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL , [name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL , [phone] [char] (5) COLLATE Chinese_PRC_CI_AS NULL , [sex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL , [salary] [int] NULL , [sstate] [char] (10) COLLATE Chinese_PRC_CI_AS NULL , [state] [varchar] (4) COLLATE Chinese_PRC_CI_AS NULL , CONSTRAINT [PK_receptionist] PRIMARY KEY CLUSTERED ( [snum] ) ON [PRIMARY] , CONSTRAINT [CK_receptionist] CHECK ([sex] = '男' or [sex] = '女' or [sex] = '') ) ON [PRIMARY] GO 创建预定关系表 CREATE TABLE [book] ( [id] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL , [rnum] [char] (3) COLLATE Chinese_PRC_CI_AS NOT NULL , [yea] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [mont] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [days] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [state] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , CONSTRAINT [PK_book] PRIMARY KEY CLUSTERED ( [id], [rnum], [yea], [mont], [days] ) ON [PRIMARY] , CONSTRAINT [FK_book_customer] FOREIGN KEY ( [id] ) REFERENCES [customer] ( [id] ), CONSTRAINT [FK_book_room] FOREIGN KEY ( [rnum] ) REFERENCES [room] ( [rnum] ) ) ON [PRIMARY] GO 创建入住关系表 CREATE TABLE [checkin] ( [id] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL , [rnum] [char] (3) COLLATE Chinese_PRC_CI_AS NOT NULL , [yea] [int] NOT NULL , [mont] [int] NOT NULL , [days] [int] NOT NULL , [snum] [char] (5) COLLATE Chinese_PRC_CI_AS NULL , [state] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL , CONSTRAINT [PK_checkin] PRIMARY KEY CLUSTERED ( [id], [rnum], [yea], [mont], [days] ) ON [PRIMARY] , CONSTRAINT [FK_checkin_customer] FOREIGN KEY ( [id] ) REFERENCES [customer] ( [id] ), CONSTRAINT [FK_checkin_receptionist] FOREIGN KEY ( [snum] ) REFERENCES [receptionist] ( [snum] ), CONSTRAINT [FK_checkin_room] FOREIGN KEY ( [rnum] ) REFERENCES [room] ( [rnum] ) ) ON [PRIMARY] GO 创建换房关系表 CREATE TABLE [change] ( [id] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL , [rnum] [char] (3) COLLATE Chinese_PRC_CI_AS NOT NULL , [yea] [int] NOT NULL , [mont] [int] NOT NULL , [days] [int] NOT NULL , [snum] [char] (5) COLLATE Chinese_PRC_CI_AS NULL , [state] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL , CONSTRAINT [PK_change] PRIMARY KEY CLUSTERED ( [id], [rnum], [yea], [mont], [days] ) ON [PRIMARY] , CONSTRAINT [FK_change_customer] FOREIGN KEY ( [id] ) REFERENCES [customer] ( [id] ), CONSTRAINT [FK_change_receptionist] FOREIGN KEY ( [snum] ) REFERENCES [receptionist] ( [snum] ), CONSTRAINT [FK_change_room] FOREIGN KEY ( [rnum] ) REFERENCES [room] ( [rnum] ) ) ON [PRIMARY] GO 创建退房关系表 CREATE TABLE [checkout] ( [id] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL , [rnum] [char] (3) COLLATE Chinese_PRC_CI_AS NOT NULL , [yea] [int] NOT NULL , [mont] [int] NOT NULL , [days] [int] NOT NULL , [snum] [char] (5) COLLATE Chinese_PRC_CI_AS NULL , [cost] [int] NULL , CONSTRAINT [PK_checkout] PRIMARY KEY CLUSTERED ( [id], [rnum], [yea], [mont], [days] ) ON [PRIMARY] , CONSTRAINT [FK_checkout_customer] FOREIGN KEY ( [id] ) REFERENCES [customer] ( [id] ), CONSTRAINT [FK_checkout_receptionist] FOREIGN KEY ( [snum] ) REFERENCES [receptionist] ( [snum] ), CONSTRAINT [FK_checkout_room] FOREIGN KEY ( [rnum] ) REFERENCES [room] ( [rnum] ) ) ON [PRIMARY] GO 创建登陆密码表 CREATE TABLE [login] ( [num] [char] (5) COLLATE Chinese_PRC_CI_AS NOT NULL , [pw] [char] (5) COLLATE Chinese_PRC_CI_AS NULL , [de] [char] (1) COLLATE Chinese_PRC_CI_AS NULL , CONSTRAINT [PK_login] PRIMARY KEY CLUSTERED ( [num] ) ON [PRIMARY] ) ON [PRIMARY] GO 创建房间级别与价位关系表 CREATE TABLE [lp] ( [lev] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL , [price] [int] NOT NULL , CONSTRAINT [PK_lp] PRIMARY KEY CLUSTERED ( [lev] ) ON [PRIMARY] ) ON [PRIMARY] GO 六、数据库物理设计 6.1 索引 1.login 以证件号为索引 CREATE INDEX [IX_login] ON [dbo].[login]([num]) ON [PRIMARY] GO 2.room 以房间号为索引 CREATE INDEX [IX_room] ON [dbo].[room]([rnum]) ON [PRIMARY] GO 3.receptionist 以员工号为索引 CREATE INDEX [IX_receptionist] ON [dbo].[receptionist]([snum]) ON [PRIMARY] GO 4.customer 以证件号为索引 CREATE INDEX [IX_customer] ON [dbo].[customer]([id]) ON [PRIMARY] GO 5.book checkin change checkout payment 均以日期(年月日)为索引 CREATE INDEX [IX_book] ON [dbo].[book]([yea], [mont], [days]) ON [PRIMARY] GO CREATE INDEX [IX_checkin] ON [dbo].[checkin]([yea], [mont], [days]) ON [PRIMARY] GO CREATE INDEX [IX_change] ON [dbo].[change]([yea], [mont], [days]) ON [PRIMARY] GO CREATE INDEX [IX_checkout] ON [dbo].[checkout]([yea], [mont], [days]) ON [PRIMARY] GO CREATE INDEX [IX_payment] ON [dbo].[payment]([yea], [mont]) ON [PRIMARY] GO 6.2 视图 6.3 安全机制 系统安全、数据安全 数据安全: 程序启动需要经过SQL Sever 登陆认证,登陆ID 和密码正确才能启动程序。 程序内部的任何会引起数据库改动的操作(增删改)均经过了严密的审查判定,以确保数据库的准确性和一致性。 系统安全: 登陆需经过身份认证,即身份口令密码一致才可登录。 不同的用户有不同的权限,用户只能使用分配给他的权限,无法越权操作。 6.4 其他 引入受控冗余: 宾馆历史记录(较旧的信息)的保存,这些信息不会经常用到,所以不必放在经常被查询修改的表里,但是又不能直接丢弃,所以将其保存在一些较老的表里。 换房记录表可以删掉,一同加在登记表里,但是为了明确信息,方便查找,便又创建了换房记录表,以便信息更明确的保存。 员工删除,并非真正删除,基本信息仍然保留。便于保留其工作记录。 七、应用程序设计 7.1 功能模块 宾馆信息管理系统 预订信息添加 登记管理 系统管理 房间状态查询 房间标准制定 房间信息修改 用户及密码管理 结算管理 换房管理 预订管理 房间管理 价位状态 登记信息添加 预订信息删除 登记信息修改 结算信息添加 换房信息添加 退房信息添加 结算信息查询 换房记录查询 登记信息查询 7.2 界面设计 1.数据库安全 2.登陆界面 3.总经理界面 4.会计界面 5.前台界面 6.客户界面 7.3 事务设计 关键或复杂的事务操作的设计,可附相应SQL语句进行分析介绍。 7.3.1新客户注册 保证不是已注册的客户,保证证件号(主码)不为空,密码输入要一致,保证login与customer表的插入一致 if (sle_1.text='') then messagebox("错误!","证件号不能为空!") else string id1 select id into :id1 from customer where id=:sle_1.text; if (sqlca.sqlcode=0)then messagebox("错误!","请输入正确的证件号!") else if sqlca.sqlcode=100 then if sle_3.text=sle_4.text then MessageBox("恭喜!","你已成功注册为宜之家酒店的客户!") insert into customer values(:sle_1.text,:sle_2.text,'00000','0',:sle_5.text); insert into login values(:sle_1.text,:sle_3.text,'3'); else messagebox("警告!","密码不一致!请重新输入!") end if end if end if end if if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if 7.3.2预定房间 只能预定后三天的房间,保证被预定的房间现在的状态是空,保证room和book表同步更新 date t1,t2 t1=today() //向book表里添加元组 if(ddlb_2.text='')then messagebox("提示!","请选择预定日期!") else if(ddlb_2.text='今天')then t2=relativedate(t1,0) else if(ddlb_2.text='明天')then t2=relativedate(t1,1) else if(ddlb_2.text='后天')then t2=relativedate(t1,2) end if end if end if int a,b,c a=day(t2) b=month(t2) c=year(t2) insert into book values (:g_id,:ddlb_1.text,:c,:b,:a,'未过期'); //更改room的状态 update room set state='预定' where rnum=:ddlb_1.text; if(sqlca.sqlcode=0)then commit using sqlca; else rollback using sqlca; end if messagebox("恭喜!","你已成功预定!") end if 7.3.3退订房间 退订房间的合法性,保证room和book表同步更新或删除记录 if ddlb_1.text=''then messagebox("错误!","请选择退订房间号!") else if ddlb_2.text=''then messagebox("错误!","请选择退订房间日期!") else date t1,t2 t1=today() choose case ddlb_2.text case '今天' t2=relativedate(t1,0) case '明天' t2=relativedate(t1,1) case '后天' t2=relativedate(t1,2) end choose int a,b,c a=day(t2) b=month(t2) c=year(t2) string aa select id into :aa from book where id=:g_id and rnum=:ddlb_1.text and yea=:c and mont=:b and days=:a; if(sqlca.sqlcode=100)then messagebox("错误!","您并未在该天预定该房间!") else long ret ret=messagebox("提示","确实要退订该房间吗?",question!,yesno!) if(ret=1)then delete from book where id=:g_id and rnum=:ddlb_1.text; update room set state='' where rnum=:ddlb_1.text; messagebox("提示!","退订成功!") string aaa ddlb_1.reset() declare s cursor for select distinct room.rnum from room,book where room.state='预定'and book.id=:g_id and book.rnum=room.rnum and book.state='未过期'; open s; fetch s into :aaa; do while(sqlca.sqlcode=0) ddlb_1.additem(aaa) fetch s into :aaa; loop close s; end if end if end if end if if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if 7.3.4入住登记 房间及证件号的合法性,room与checkin表同步更新或添加 if (sle_1.text='' or ddlb_1.text='')then messagebox("提示","选项均不能为空!") else string pp select id into :pp from customer where id=:sle_1.text; if(sqlca.sqlcode=100)then messagebox("提示","该顾客是新客户,须先注册!") else date t1 t1=today() int d,b,c d=day(t1) b=month(t1) c=year(t1) insert into checkin values (:sle_1.text,:ddlb_1.text,:c,:b,:d,:g_id,'未结帐'); update room set state='已住' where rnum=:ddlb_1.text; messagebox("提示","登记成功!") string a ddlb_1.reset() declare s cursor for select distinct rnum from room where (state<>'预定'and state<>'已住'and state<>'维修')or state is null; open s; fetch s into :a; do while(sqlca.sqlcode=0) ddlb_1.additem(a) fetch s into :a; loop close s; end if end if if(sqlca.sqlcode=0)then commit using sqlca; else rollback using sqlca; end if 7.3.5换房登记 房间及证件号的合法性,room及change表的同步更新或插入 if sle_1.text='' or ddlb_1.text=''then messagebox("提示","各项均不能为空!") else string a select id into :a from checkin where id=:sle_1.text; date t1 t1=today() int d,b,c d=day(t1) b=month(t1) c=year(t1) if(sqlca.sqlcode=100)then messagebox("提示","您并未入住宾馆!") else insert into change values (:sle_1.text,:ddlb_1.text,:c,:b,:d,:g_id,'未结帐'); update room set state='已住' where rnum=:ddlb_1.text; select rnum into :a from checkin where id=:sle_1.text and state='未结帐'; update room set state='' where rnum=:a; string aa ddlb_1.reset() declare s cursor for select distinct rnum from room where (state<>'预定'and state<>'已住'and state<>'维修')or state is nu open s; fetch s into :aa; do while(sqlca.sqlcode=0) ddlb_1.additem(aa) fetch s into :aa; loop close s; if(sqlca.sqlcode=0)then commit using sqlca; else rollback using sqlca; end if end if end if 7.3.6退房结账 房间号的合法性 是否换过房,是则需要换房前的信息,两部分消费金额相加 贵宾卡打折处理 保证checkin,change,checkout,room的同步更新 int ye,m,d string id,rnum,card long ret,days1,days2,days3 date t t=today() int a,b,c,e,f,g,h,i,j a=day(t) b=month(t) c=year(t) int cost,price1,price2,price3 select yea,mont,days,id into :ye,:m,:d,:id from change where rnum=:sle_1.text and state='未结帐'; if (sqlca.sqlcode=0)then days1=c * 365 + b * 30+ a -(ye * 365)-(m * 30)- d select price into :price1 from lp,room where lp.lev=room.lev and room.rnum=:sle_1.text; cost=price1*days1 select yea,mont,days,price,checkin.rnum into :e,:f,:g,:price2,:rnum from checkin,room,lp where checkin.id=:id and checkin.state='未结帐'and room.rnum=checkin.rnum and lp.lev=room.lev; days2=ye * 365 + m * 30 + d -( e * 365 ) - ( f * 30 ) - g cost=cost+price2*days2 select card into :card from customer where id=:id; if (card<>'00000')then cost=cost*0.8 end if messagebox("应付费:",cost) ret=messagebox("提示","是否缴费?",question!,yesno!) if (ret=1)then messagebox("提示","缴费成功!") messagebox("提示","退房成功!") update room set state='' where rnum=:sle_1.text; update room set state='' where rnum=:rnum; update change set state='已结账' where rnum=:sle_1.text; update checkin set state='已结账' where id=:id and rnum=:rnum; insert into checkout values(:id,:sle_1.text,:c,:b,:a,:g_id,:cost); end if else select yea,mont,days,id into :h,:i,:j,:id from checkin where rnum=:sle_1.text and state='未结帐'; if(sqlca.sqlcode=100)then messagebox("提示","您并未入住宾馆或已结账!") else days3= (c * (365)) + (b * (30)) + (a) - ( h *( 365) ) - ( i * (30 )) - (j) //messagebox("",days3) select price into :price3 from lp,room where lp.lev=room.lev and room.rnum=:sle_1.text; cost=price3*days3 select card into :card from customer where id=:id; if (card<>'00000')then cost=cost*0.8 end if messagebox("应付费:",cost) ret=messagebox("提示","是否缴费?",question!,yesno!) if (ret=1)then messagebox("提示","缴费成功!") messagebox("提示","退房成功!") update room set state='' where rnum=:sle_1.text; update checkin set state='已结账' where rnum=:sle_1.text; insert into checkout values(:id,:sle_1.text,:c,:b,:a,:g_id,:cost); end if end if end if if(sqlca.sqlcode=0)then commit using sqlca; else rollback using sqlca; end if 7.3.7发放工资 工资状态的合法性(只有未发工资的才要发工资/月)表receptionist的更新 long ret ret=messagebox("提示","确定要发工资吗?",question!,yesno!) if(ret=1)then int sum,a,b date t t=today() a=month(t) b=year(t) select sum(salary) into :sum from receptionist where sstate='未发'; update receptionist set sstate='已发' where sstate='未发'; update payment set goout=goout+:sum where yes=:b and mont=:a; messagebox("提示","工资已发放完毕!") end if if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if 7.3.8 账目结算 以月为单位,总收入,总支出,净收入 date t t=today() int a,b,c a=day(t) b=month(t) c=year(t) int sum1 select sum(cost) into :sum1 from checkout where yea=:c and mont=:b ; if(sqlca.sqlcode=100)then sum1=0 end if int sum2 select sum(salary) into :sum2 from receptionist where state='是'and sstate='已发'; if(sqlca.sqlcode=100)then sum2=0 end if int pure pure=sum1 - sum2 update payment set comein=:sum1 ,goout=:sum2 ,pure=:pure where yea=:c and mont=:b ; messagebox("提示","账目更新成功!") if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if 7.3.9贵宾卡发放 贵宾卡号的处理,证件号的合法性(只有满足一定/10000元的消费金额才有资格) 对customer表的更新 if ddlb_1.text='' then messagebox("提示","请选择客户的证件号") else long ret ret=messagebox("提示","确实要发放新的会员卡吗?",question!,yesno!) if(ret=1) then int a string b select max(card) into :b from customer; a=integer(b) a=a+1 b=string(a) update customer set card=:b where id=:ddlb_1.text; messagebox("提示","发放会员卡成功!") end if end if if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if 7.3.10房间信息修改 房间号的合法性,价位与类型的修改,类型修改,状态修改(只能将空房间状态设置成’维修’) if ddlb_1.text='' or sle_1.text=''then messagebox("提示","各项均不能为空!") else int price price=integer(sle_1.text) update lp set price=:price where lev=ddlb_1.text; end if if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if if ddlb_2.text='' or ddlb_3.text=''then messagebox("提示","各项均不能为空!") else update room set lev=:ddlb_3.text where rnum=ddlb_2.text; end if if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if if ddlb_4.text='' or ddlb_5.text=''then messagebox("提示","各项均不能为空!") else update room set state=:ddlb_5.text where rnum=ddlb_4.text; end if if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if 7.3.11员工管理(以添加新员工为例) 新员工号的合法性,基本信息等 if sle_1.text='' then messagebox("错误!","员工号不能为空!") else string a select snum into :a from receptionist where snum=:sle_1.text; if (sqlca.sqlcode=100) then long ret ret=messagebox("提示","确实要增加该员工吗?",question!,yesno!) int salary salary=integer(sle_4.text) if ret=1 then insert into login values (:sle_1.text,:sle_1.text,'2'); insert into receptionist values (:sle_1.text,:sle_2.text,:sle_3.text,:ddlb_1.text,:salary,:ddlb_2.text,'是'); messagebox("提示","您已成功增加了该员工!") end if else messagebox("错误!","该员工已存在!") end if //messagebox("",sqlca.sqlcode) //messagebox("",sqlca.sqlerrtext) end if if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if 7.3.12预定房间超期处理 房间号的合法性 if(ddlb_1.text='')then messagebox("提示","房间号不能为空!") else update room set state='' where rnum =:ddlb_1.text; update book set state='已过期' where rnum=:ddlb_1.text; messagebox("提示","成功处理该过期预定房间!") end if string a ddlb_1.reset() date t t=today() int b,c,d b=day(t) c=month(t) d=year(t) declare s cursor for select distinct rnum from book where state<>'已过期' and (yea<:d or(yea=:d and(mont<:c or(mont=:c and days<:b)))) ; open s; fetch s into :a; do while(sqlca.sqlcode=0) ddlb_1.additem(a) fetch s into :a; loop close s; end if if(sqlca.sqlcode<0)then rollback using sqlca; else commit using sqlca; end if 八、测试和运行 介绍系统的测试情况,可提供几个测试用例。 可选:生成大数据量的仿真数据,进行性能测试的情况。 8.1登陆 登陆一切正常:身份,证件号,密码一致即可否则报错 8.2总经理 总经理登陆后定义的功能都正常实现 增减工资异常处理 增减工资的实现 开除添加员工类似 房间管理类似与员工管理 账目查询 贵宾卡发放 8.3会计 账目更新 发放工资 8.4前台 登记 是否需要注册 房间号的合法性 登记成功 换房退房类似 过期房间处理 无 有 8.5客户 各项功能实现正常 预定房间 退订 查询历史记录 修改个人信息,修改密码实现正常 九、总结 这次课程设计感触颇深,首先是深刻感受到程序的实际应用性,这学期的课程设计的题目都是贴近实际生活的问题,我们就能够很清楚的明白自己写的程序要解决什么样的实际问题,应该解决什么样的实际问题,觉得自己的程序更有实用价值。 我设计的这个宾馆信息管理系统是一个非常简单的模型,实际生活中应用的宾馆管理系统功能十分的强大,能够在线了解信息,预定退订等业务也可以在线完成,而且有很强大的报表功能。 我的程序的可以实现宾馆中最基本也是最重要的业务,如预定,退订,登记,换房,退房缴费,都是准确无误,其他的如新客户注册,基本信息修改同样考虑的比较全面,不足之处就是没做报表,没想到如何处理。 这次设计中不断的出现问题,我则自己努力,不断的改正错误,改进自己的程序,有些自己实在是无法解决的问题,则会与其他同学讨论,或上网查询、搜寻资料……在不断的改进过程中,深刻的认识到自己程序的漏洞和不健全性,而且一些pb的语法和函数自己不是很了解,以致有很多错误改了很长时间才能调试正确。通过这次设计,不但让我进一步加深了对知识的巩固,而且很好的锻炼了我的独立思考能力,以及分析问题解决问题的能力。今后凡事都不要着急,要冷静的分析思考,越是急越是无法解决,只有沉着冷静深入思考才能真正的解决问题。只要自己努力凡事都能解决。而且深刻感受到了知识的重要性。平时如果不多积累知识,在编写自己的程序时会手忙脚乱无所适从,相反如果平时自己扎实学习,知识掌握的都很牢固,到写程序的时候会得心应手,很熟练很快的写出程序,虽然有些毛病,但是如果仔细检查,也会在很短的时间内解决。由此我更加认识到课堂知识的重要性,以及自己多积累,多查资料的重要性。 最重要的一点经验就是老师提供了设计提纲,跟着老师的设计思路慢慢完善很重要,总是先建表,再找关系,这是很不正确的,以后设计也要按照老师给的这个思路,要先进行目标明确,任务分析,然后是系统边界,再是需求分析,之后是ER图,然后才是数据库设计,最后是程序的编写与完善。这样就避免了我们平时写程序的时候边写边修改数据库,数据库应该是比较完善的时候才进行程序的编写。 以后做程序要先理清思路,不要急于完成,先把各角色的任务权限分清,各模块划分好,联系好,要先从整体把握,再从细节抓起。 附. 参考文献 主要的参考资料、网址。 参考书籍:PowerBuilder 9.0软件开发项目实践 数据库原理及应用 网址:http://www.iliu.cn/html/200702/09/081435574.htm

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档