资源描述
餐饮管理系统设计
38
资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。
课程设计报告
课程名称: PowerBuilder10.5程序设计基础
设计题目: 酒店餐饮管理系统
专业: 信息与计算科学 班级:
姓名: XXXX 学号: XXXXXXXX
指导教师: XXX
XXX学院数理系
XXXX 年XX 月
课程设计题目( 问题) 描述
随着人们生活的富裕, 人们出入酒店也越来越多, 随之而来, 酒店管理人员管理酒店的事情越来越多, 为了帮助酒店管理人员更好的管理酒店, 我们设计了这个酒店管理系统。
它实现了对值班人员的调配与管理和对菜单的变更, 以及对订餐, 订餐的修改、 取消、 查询及在收费时的立账, 打折设定的等方面的功能。
本 组 成 员 情 况
姓 名
学号
承 担 的 任 务
成 绩
杜雅笛
登陆界面、 系统维护、 打印、 帮助模块的代码编写及系统的调试
郭晓丽
登陆界面、 订餐管理、 收费管理模块的代码编写及系统的调试
莫鹏飞
资料查询、 登陆界面、 代码编写及系统的调试
教 师 评 语
签名:
注: 本设计报告中各个部分如果页数不够, 请大家自行扩页, 原则是一定要把报告写详细, 能说明本组设计的成果和特色, 能够反应小组中每个人的工作。报告中应该叙述设计中的每个模块。设计报告将是评定每个人成绩的一个重要组成部分。
一、 本 组 设 计 的 功 能 描 述
( 含所有实现的模块的功能)
登录界面的功能:
在登陆界面正确输入用户名与口令就能够登陆主界面, 如用户名与口令不匹配则有提醒, 点开免费注册界面, 能够录入新的管理人员的信息, 退出注册界面输入刚注册的用户名和口令就可登陆主界面。
系统主界面的功能:
● 系统维护:
☆值班员信息维护: 实现对值班员的添加、 删除功能
☆菜谱信息维护: 实现对已有菜单的查询、 添加和删除
☆修改口令: 实现对用户口令的更改。
● 订单管理:
☆订餐: 实现对订餐信息的添加
☆订餐修改: 实现对已经订餐的信息的修改
☆订餐取消: 实现对已经订餐的信息的取消
☆订餐查询: 实现对订餐订单按桌号、 菜谱号、 菜名的查询
● 收费管理:
☆折扣设定: 实现了对用餐人员的折扣设定
☆客户信息: 显示客户信息
● 打印:
☆打印客户消费账单
二、 本 组 设 计 的 主 要 特 色
主要特色有如下:
1、 登陆界面能够注册新用户
2、 在登陆主界面是弹出交班管理制度的界面
3、 可对值班人员、 菜谱信息进行添加, 删除
4、 可对订餐情况进行添加、 删除、 查询等功能
5、 对客户的费用进行打折, 打印客户消费单
三、 系 统 分 析 与 设 计
2.1数据库的设计与连接
( 1) 在SQL SEVER 开发环境下打开对象资源管理器, 依据创立数据库的步骤, 创立物理数据库XSCJ, 在PowerBuilder开发环境下打开数据库画板, 依次定义ODBC数据源, 定义DB Profile , 连接数据库。
根据功能需求, 在数据库中先创立5个表
列名
数据类型
可否为空
说明
DC_DESK
Char(20)
Not null
桌号( 主键)
CP_NO
Char(10)
Not null
菜谱号
CP_NAME
Char(20)
null
菜名
DC_NUMBER
Char(3)
null
数量
DC_DATE
datetime
Null
订餐日期
表1订餐信息表DC
列名
数据类型
可否为空
说明
CP_NO
CHAR(10)
NOT NULL
菜谱号( 主键)
CP_NAME
CHAR(20)
NULL
菜名
CP_KIND
CHAR(20)
NULL
种类
CP_PRICE
NUMBER(10)
NULL
价格
CP_DETAIL
CHAR(50)
NULL
备注
表2菜谱信息表CP
列名
数据类型
可否为空
说明
KH_NO
CHAR(20)
NOT NULL
客户号( 主键)
DC_DESK
CHAR(20)
NULL
桌号
JS_DZ
CHAR(3)
NULL
打折情况
TOTAL
CHAR(5)
NULL
总计
JS_DATE
DATETIME
NULL
日期
表3 结算信息表JS
列名
数据类型
可否为空
说明
KH_NO
CHAR(10)
NOT NULL
客户号( 主键)
KH_NAME
CHAR(20)
NULL
姓名
KH_SEX
CHAR(2)
NULL
性别
KH_AGE
CHAR(3)
NULL
年龄
KH_JOB
CHAR(20)
NULL
职务
KH_TEL
CHAR(20)
NULL
联系电话
KH_COMPANY
CHAR(20)
NULL
工作电话
表4 荣誉客户信息表KH
列名
数据类型
可否为空
说明
ZBY_NAME
CHAR(20)
NOT NULL
值班员名( 主键)
ZBY_PAWD
CHAR(10)
NUT NULL
口令
表5 值班员表ZBY
实体和实体之间的关系E-R图
系统详细设计
( 1) 单击菜单”File|New”, 选择应用程序对象模板画板, 单击”OK”按钮在出现的对话框中完成应用程序对象名、 库文件名的设置.
( 2) 单击”Finish”按钮, 进入应用程序对象设计画面。
1、 在应用程序对象的Open事件中输入如下的程序代码
// Profile jiudian
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=jiudian;UID=;PWD='"
connect;
open(w_open)
sleep(1)
close(w_open)
open(w_login)
该语句就是打开w_open窗口的语句。”欢迎登陆餐饮管理系统”如图:
2、 登录窗口的设计。
登录窗口如图
(1) 在W_login窗口的Open事件中输入如下的程序代码
Environment l_env
int l_ScrWidth,l_ScrHeight
setRedraw(false)
GetEnvironment(l_env)
//取得屏幕的高度和宽度
l_ScrWidth=PixelsToUnits(l_env.ScreenWidth,XpixelsToUnits!)
l_ScrHeight=PixelsToUnits(l_env.ScreenHeight,YpixelsToUnits!)
Move((l_scrwidth - this.width)/2,(l_scrheight - this.height)/2)
//移动窗口到屏幕中间
setredraw(true)
//打开窗口刷新
(2) 按钮控件cb_1( 确定) 的Click事件中的程序代码如下:
string l_id,l_passward
string l_passward0
int i
l_id=trim(sle_1.text)
l_passward=trim(sle_2.text)
if l_id="" then
messagebox("提示","请输入用户名!")
return
end if
sle_1.setfocus()
if l_passward="" then
messagebox("提示","请输入密码!")
return
end if
sle_2.setfocus()
select count(*)
into :i
from zby
where rtrim(zby_name) = :l_id
using sqlca;
if i<1 then
messagebox("提示","该用户不存在!")
sle_1.text=""
sle_2.text=""
sle_1.setfocus()
return
end if
select zby_pawd into
:l_passward0
from zby
where rtrim(zby_name)=:l_id
using sqlca;
if trim(l_passward0)=l_passward then
open(w_main)
close(parent)
integer li_FileNum
string ls_Emp_Input
long ll_FLength
ll_FLength = FileLength("D:\Microsoft SQL Server\1.txt")
li_FileNum = FileOpen("D:\Microsoft SQL Server\1.txt",StreamMode!,read!, shared!)
IF ll_FLength < 32767 THEN
FileRead(li_FileNum, ls_Emp_Input)
filewrite(li_FileNum,ls_Emp_Input)
messagebox("",ls_Emp_Input,None!)
return
END IF
//显示交班管理制度
else
messagebox("警告","密码错误,请重新输入法!")
sle_2.text=""
sle_2.setfocus()
end if
( 3) 按钮控件cb_2( 取消) 的Click事件中的程序代码如下:
Halt用于终止应用程序的执行.
(4) 按钮控件cb_3( 免费注册) 的Click事件中的程序代码如下:
open(w_zhuche)用来打开注册窗口.
交班管理制度显示的制作。
(5)在该系统文件目录下新建一个”1.txt”在里面输入相应的内容。
在登录窗口的cb_1( 确定) 下的代码
integer li_FileNum
string ls_Emp_Input
long ll_FLength
ll_FLength = FileLength("D:\Microsoft SQL Server\1.txt")
li_FileNum = FileOpen("D:\Microsoft SQL Server\1.txt",StreamMode!,read!, shared!)
IF ll_FLength < 32767 THEN
FileRead(li_FileNum, ls_Emp_Input)
filewrite(li_FileNum,ls_Emp_Input)
messagebox("",ls_Emp_Input,None!)
return
END IF
这段代码就是在进入系统时显示该信息,如下图,
3. 注册窗口的设计
(1)在”检测用户名”按扭控件的click事件中输入如下代码:
string l_user
l_user=sle_1.text
if l_user="" then
messagebox("警告","请输入用户名!",Exclamation!)
sle_1.setfocus()
return 1
end if
int i
select count(*)
into :i
from ZBY
where ZBY_NAME = :l_user;
if i>0 then
messagebox("警告","用户名已存在,请重试!",Exclamation!)
sle_1.text=""
sle_1.setfocus()
return
else
messagebox("","恭喜你,该用户名能够使用!")
return
end if
(2) 在”提交”按扭控件的click事件中输入如下代码:
string l_user
l_user=sle_1.text
if sle_1.text="" then
messagebox("提示","请输入用户名!")
return 1
end if
string aa,bb
aa=sle_2.text
bb=sle_3.text
if aa="" then
messagebox("提示","密码不能为空!")
return 1
end if
if aa<>bb then
messagebox("提示","输入的密码不一致~n~r请重新输入!")
sle_2.text=""
sle_3.text=""
sle_2.setfocus()
return
end if
insert INTO zby
( zby_name, zby_pawd )
VALUES ( :l_user,
:aa )
using sqlca;
if sqlca.sqlcode=0 then
messagebox("提示","注册成功,请牢记~r~n用户名"+sle_1.text+"~r~n密码"+sle_2.text)
close(parent)
else
messagebox("提示","注册失败!")
return
end if
(3) 在”取消”按扭控件的click事件中输入如下代码: close(parent)
4.主菜单的设计
( 1) ”系统维护”菜单下”退出”子菜单的Click事件程序代码:
halt
其功能是关闭主窗口w_main, 退出应用程序。
( 2) ”系统维护”菜单下”值班员信息维护”子菜单的Click事件程序代码:
open(w_zby)
( 3) ”系统维护”菜单下”菜谱信息维护”子菜单的Click事件程序代码:
open(w_choose_receive)
(4) ”系统维护”菜单下”修改口令”子菜单的Click事件程序代码:
open(w_changekl)
( 5) ”订餐管理”菜单下”订餐”子菜单的Click事件程序代码:
open(w_dc)
( 6) ”订餐管理”菜单下”订餐修改”子菜单的Click事件程序代码:
open(w_ujttyyytt)
(7) ”订餐管理”菜单下”订餐取消”子菜单的Click事件程序代码:
open(w_dc_qc)
(8) ”订餐管理”菜单下”订餐查询”子菜单的Click事件程序代码:
open(w_dc_search)
(9) ”收款管理”菜单的”折扣设定”子菜单的Click事件程序代码:
open(w_zksd)
(10) ”收款管理”菜单下的”客户信息”子菜单的CLICK事件程序代码:
open(w_kh)
(11) ”打印”菜单的”打印帐单”子菜单的Click事件程序代码:
open(w_print)
(12) ”帮助”菜单的”版本信息”子菜单的Click事件程序代码:
open(w_help)
(13)快捷键及工具栏如图所示。还要建个w_main窗口用来挂上菜单。该窗口类型为mdihelp!。Title为酒店餐饮管理系统1.0。另外在窗口上布置一个图片控件, 用来做为系统的背景。在登录窗口的”确定”按扭的click事件中有句open(main)的代码, 即为打开此窗口。
5.值班员信息维护窗口w_zby的设计
该窗口上的控件好上图所示, 其显示部分是一个数据窗口。数据窗口对象zby在编辑状态下如下图,
该数据窗口对象所链接的数据库表格为ZBY, 其数据源表示如下:
SELECT "zby"."zby_name",
"zby"."zby_pawd"
FROM "zby"
( 1) open事件代码: dw_1.settransobject(sqlca)
dw_1.retrieve()
(2) 窗口的closequery事件代码:
int i_count
long bb
i_count=dw_1.modifiedcount()+dw_1.deletedcount()
if i_count>0 then
bb=messagebox("提示","是否保存未保存的数据",question!,yesnocancel!,1)
choose case bb
case 1
if dw_1.update()=1 then
commit using sqlca;
return 0
else
rollback using sqlca;
messagebox("提示","数据保存失败!")
end if
case 2
return 0
case 3
return 1
end choose
end if
(3) 增加 按钮代码:
dw_1.scrolltorow(dw_1.insertrow(0))
dw_1.setcolumn(0)
dw_1.setfocus()
(4) 删除按钮代码:
long net
net=messagebox("","你确定要删除吗",question!,yesno!,1)
//提示是否要删除
choose case net
case 1
dw_1.deleterow(dw_1.getrow())//删除当前行
case 2
return 1
end choose
(5) 保存按钮代码:
int i_count
i_count=dw_1.modifiedcount()+dw_1.deletedcount()//判断改变和删除的数目。
if i_count>0 then
if dw_1.update()=1 then
commit using sqlca;
messagebox("提示","已成功保存"+string(i_count)+"纪录")
else
rollback using sqlca;
messagebox("提示","保存失败")
end if
end if
6. 菜谱信息维护窗口w_choose_receive设计
ddlb_1、 ddlb_2属性相同, 其Items属性页如下图所示。
ddlb_3、 ddlb_4属性也相同, 其Items属性页如下图所示。
ddlb_5的Items属性页如下图所示
其它的控件如窗口上所示。所链接的数据窗口对象在编辑状态下, 如图下所示
该数据窗口对象所链接的数据库表格为CP, 其数据源表示如下:
SELECT "cp"."cp_no",
"cp"."cp_name",
"cp"."cp_kind",
"cp"."cp_price",
"cp"."cp_detail"
FROM "cp"
( 1) Open事件:
dw_1.settransobject(sqlca)
ddlb_1.text="菜谱号"
ddlb_4.text="="
ddlb_5.text="and"
(2) 查询代码
int i
string lookforcondition//定义参数: 查询条件综合结果
string lookforitem1,lookforitem2,lookforitem3//定义参数: 要查询的列
string lookforwhat1,lookforwhat2,lookforwhat3//定义参数: 要查询的内容
string lookforhow1,lookforhow2,lookforhow3//定义参数: 查询的符号
string lookforoperator1,lookforoperator2//定义参数: 不同查询条件组合操作符号
lookforhow1=ddlb_3.text
lookforhow2=ddlb_4.text
if ddlb_5.text="与" then
lookforoperator1="and"
elseif ddlb_5.text="或" then
lookforoperator1="or"
elseif ddlb_5.text="非" then
lookforoperator1="not"
end if
if ddlb_1.text="菜谱号" then
lookforitem1="cp_no"
lookforwhat1="'"+sle_1.text+"'"
elseif ddlb_1.text="菜名" then
lookforitem1="cp_name"
lookforwhat1="'"+sle_1.text+"'"
elseif ddlb_1.text="种类" then
lookforitem1="cp_kind"
lookforwhat1="'"+sle_1.text+"'"
elseif ddlb_1.text="价格" then
lookforitem1="cp_price"
lookforwhat1=sle_1.text
elseif ddlb_1.text="备注" then
lookforitem1="cp_detail"
lookforwhat1="'"+sle_1.text+"'"
end if
if ddlb_2.text="菜谱号" then
lookforitem2="cp_no"
lookforwhat2="'"+sle_2.text+"'"
elseif ddlb_2.text="菜名" then
lookforitem2="cp_name"
lookforwhat1="'"+sle_2.text+"'"
elseif ddlb_2.text="种类" then
lookforitem2="cp_kind"
lookforwhat2="'"+sle_2.text+"'"
elseif ddlb_2.text="价格" then
lookforitem2="cp_price"
lookforwhat2="'"+sle_2.text+"'"
elseif ddlb_2.text="备注" then
lookforitem2="cp_detail"
lookforwhat2="'"+sle_2.text+"'"
end if
if ddlb_2.text="" or ddlb_4.text="" then
lookforcondition=lookforitem1+lookforhow1+lookforwhat1
else
lookforcondition=lookforitem1+lookforhow1+lookforwhat1+" "+lookforoperator1+" "+lookforitem2+lookforhow2+lookforwhat2
end if
dw_1.setfilter(lookforcondition)
filter(dw_1)
i=dw_1.retrieve()
if i<1 then
messagebox("提示","没有相关记录!",Exclamation!)
sle_1.text=""
sle_2.text=""
return
end if
(3) 增加代码:
dw_1.scrolltorow(dw_1.insertrow(0))
dw_1.setcolumn(0)
dw_1.setfocus()
( 4) ”删除”按钮控件的Click事件用于删除一个菜谱, 程序代码与上述的”删除”按钮相同.
(5) ”保存”按钮控件的Click事件将用于保存用户所做的修改, 程序代码与上述”保存”按钮相同.
(6) ”退出”按钮控件的Click事件将用于退出该程序窗口。
7. 修改口令w_changek设计
( 1) 修改按钮代码:
string correct_pswd,ls_user,ls_pswd
ls_user=trim(sle_1.text)
ls_pswd=trim(sle_2.text)
if ls_user="" then
messagebox("","用户名不能为空!")
return
end if
if ls_pswd="" then
messagebox("","请输入原口令!")
return
end if
if sle_4.text<>sle_3.text then
messagebox("警告","两次输入的口令不一致,请重新输入")
sle_3.text=""
sle_4.text=""
sle_3.setfocus()
else
select rtrim(zby_pawd) into
:correct_pswd
from zby
where rtrim(zby_name)=:ls_user;
if correct_pswd<>ls_pswd then
messagebox("警告","原口令不正确!")
else
update zby set zby_pawd =:sle_3.text where rtrim(zby_name)=:ls_user;
commit using sqlca;
close(parent)
messagebox("注意","你的口令已经修改,请牢记!")
end if
end if
(2)”取消”按扭用来退出该窗口。
8、 订餐w_dc窗口设计
所链接的的数据窗口对象在编辑状态如图
该数据窗口对象所链接的数据库表格为DC, 其数据源表示如下:
SELECT "dc"."dc_desk",
"dc"."cp_no",
"dc"."cp_name",
"dc"."dc_num",
"dc"."dc_data"
FROM "dc"
( 1) open事件
int g_rownumber
g_rownumber=dw_1.insertrow(0)
dw_1.settransobject(sqlca)
dw_1.setfocus()
date g_dc_date
g_dc_date=today()
//在数据窗口的日期这列显示当前日期
dw_1.scrolltorow(g_rownumber)
dw_1.setcolumn(0)
( 2) 下一道菜
int g_rownumber
g_rownumber=dw_1.insertrow(0)
date g_dc_date
g_dc_date=today()
dw_1.setfocus()
dw_1.scrolltorow(g_rownumber)
dw_1.setcolumn(1)
(3) ”删除”按钮控件的Click事件用于删除一个菜谱, 程序代码与上述的”删除”按钮控件相同.
(4) ”保存”按钮控件的Click事件将用于保存用户所做的修改, 程序代码与上述的”保存”按钮相同。
(5) ”退出”按钮控件的Click事件将关闭该窗口。
9、 订餐修改窗口w_ujttyyytt设计
Ddlb_1和ddlb_2两个控件的属性一样,其item属性如下图,
所链接的数据窗口对象dc
( 1) open事件
//设置事务对象
dw_1.settransobject(sqlca)
ddlb_1.text="="
ddlb_2.text="="
( 2) 显示订单
int i
string lookforcondition
string lookforitem1,lookforitem2
string lookforwhat1,lookforwhat2
string lookforhow1,lookforhow2
lookforhow1=ddlb_1.text
lookforhow2=ddlb_2.text
lookforitem1="dc_desk"
lookforwhat1="'"+sle_1.text+"'"
lookforitem2="dc_date"
lookforwhat2="datetime('"+sle_2.text+" 00:00:00')"
if sle_2.text="" then
lookforcondition=lookforitem1+lookforhow1+lookforwhat1
else
lookforcondition=lookforitem2+lookforhow2+lookforwhat2
//lookforitem1+lookforhow1+lookforwhat1+" "+"and"+" "+
end if
dw_1.setfilter(lookforcondition)
filter(dw_1)
i=dw_1.retrieve()
if i<1 then
messagebox("提示","没有相关记录!",Exclamation!)
return
end if
( 3) 增加
int g_rownumber
g_rownumber=dw_1.insertrow(0)
date g_dc_date
g_dc_date=today()
//为数据窗口的日期列显示当前日期
dw_1.setfocus()
dw_1.scrolltorow(g_rownumber)
dw_1.setcolumn(1)
(4) ”删除”按钮控件的Click事件用于删除一个值班员, 程序代码与上面所述的”删除”按钮控件相同.
(5) ”保存”按钮控件的Click事件将用于保存用户所做的修改, 程序代码与上面所述的”保存”按钮控件相同.
(6) ”退出”按钮控件的Click事件将用于退出该程序窗口。
10、 订餐取消w_dc_qc设计
,控件如图所示,所连接的数据窗口为dc.
ddlb_1与ddlb_2的属性相同.ddlb_1的item属性图a, ddlb_2的item属性图b
图a 图b
( 1) open: dw_1.settransobject(sqlca)
( 2) 确定
int i
if ddlb_1.text="" then
messagebox("","请选择要退餐的桌号!")
return
end if
string l_dc_desk
l_dc_desk="dc_desk='"+ddlb_1.text+"'"
dw_1.setfilter(l_dc_desk)
filter(dw_1)
i=dw_1.retrieve()
if i<1 then
messagebox("","此桌无消费记录!")
ddlb_1.text=""
else
messagebox("","请选择要退定的菜!")
return
end if
( 3) 退订的菜
double l_dc_num1,l_dc_num2
string l_cp_name
l_dc_num1=double(ddlb_2.text)
l_cp_name=dw_1.getitemstring(dw_1.getrow(),"cp_name")
l_dc_num2=Long(dw_1.getitemstring(dw_1.getrow(),"dc_number"))
int ret
ret=messagebox("","你确定要退定"+string(l_dc_num1)+"一份"+l_cp_name,question!,yesnocancel!,2)
choose case ret
case 1
if ddlb_2.text="all" then
dw_1.deleterow(0)
if dw_1.update()=1 then
messagebox("","退定成功!")
close(parent)
else
messagebox("","退定失败,请重试!")
return
end if
else
if l_dc_num1>l_dc_num2 then
messagebox("警告","退定出错,请查看数量!")
return 1
end if
UPDATE dc
SET dc_number = : l_dc_num2 - :l_dc_num1 ;
if dw_1.update()=1 then
messagebox("","退定成功!")
close(parent)
return
end if
return
end if
case 2
return 0
case 3
return 1
end choo
展开阅读全文