VC++课程设计 餐饮管理系统Word文件下载.docx
《VC++课程设计 餐饮管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《VC++课程设计 餐饮管理系统Word文件下载.docx(54页珍藏版)》请在冰豆网上搜索。
本系统用ACCESS数据库对数据进行存储和读取,系统分为八大模块,分别为管理员登录,注册,开台,点菜,加减菜,数量选择,结账,用户权限管理等模块。
管理员分为经理和营业员两种,不同权限的人登录之后开放不同的模块,然后客人来之后先进行开台操作,然后自动跳出点菜对话框,客人点菜完成之后,在中途还可以进行加减菜的操作。
客人结账时能够显示账单明细,自动计算总金额,自动计算找零金额等。
另外设立用户权限管理模块,可以对不同注册用户进行授予不同权限的操作,从而保证系统的安全性。
工作量:
系统分析设计,对各功能模块的设计与分析,系统的实现,运行环境,运作流程等。
系统的实现部分,主要设计到前台以及后台的代码编写。
安全分析与设计。
工作计划安排:
2012年8月20日---8月21日上午:
确定课设题目,确定课设方案,功能模块设计,确定运行环境为WindowsXP下VC++6.0SP6。
2012年8月21下午---8月22日上午:
设计对话框并制作,设计类的基本功能,制作ACCESS数据库并学习连接数据库,完成了两个类的代码的编写。
2012年8月22日上午---8月22日晚上:
完成四个类代码的编写并进行调试。
2012年8月23日上午---8月23日晚上:
完成对其余两个类的编写,各模块合并运行,设计主界面风格。
2012年8月24日:
调试代码,美化界面,为程序添加注释。
VC++课程设计报告
Ø
软硬件运行环境
开发环境
●AMDAthlon™ⅡNeoProcessorK125,2GB内存,250GB硬盘
●Microsoft®
Windows™XPProfessional
VisualC++6.0
●MicrosoftOfficeAccess2003
运行环境
●Intel®
Pentium®
2及以上处理器,32M以上内存,4G以上硬盘
Windows™XP操作系统,
Microsoft®
Windows7操作系统
问题及难点所在
1.数据库操作。
包括ACCESS数据库中数据表的制作,在程序中利用ADO技术进行数据的查询,检索,增加删除等操作,以及数据库。
2.模块之间的连接问题。
模块之间相互联系,进行数据交换,必须兼顾数据安全性和各个类之间的连接性的问题。
3.系统安全性问题,由于数据库中存在金额等重要数据,必须对每个用户的访问权限加以限制,并可以修改用户权限。
需求分析
随着现代社会的发展,餐饮行业作为服务业的龙头企业规模不断扩大,一个大型酒店的餐饮服务部门往往服务许多客人,而一个企业的经营管理人员往往分工明确,一个人或几个人无法完成如此繁杂的账目统计和餐饮结账等工作,传统的算账、记账等人工操作系统已经不能再适应现代企业的发展。
为了使餐饮系统可以得到高效运转,伴随着计算机的普及,因此需要专业的餐饮管理系统来完成工作。
我的课程设计就是在此背景下完成的,本套餐饮管理系统有着完整的客人消费流程,餐馆的经理和营业员均可已使用该系统,该系统解决了人工计算餐饮费用的各种不利因素,实现科学的点菜和结账管理,省时省力,适合大多数中小型餐馆使用,市场前景广阔。
概要设计
首先,要实现餐饮管理的功能,需要设计五个功能模块,分别为开台,点菜,加减菜,结账,数量选择等模块。
然后先进行对话框的设计,分别设计IDD_diancai,IDD_jiacai,IDD_jiezhangdlg,IDD_kaitai,IDD_SHULIANG这五个对话框,在对话框上摆放控件,给控件修改ID号码,同时给各个对话框建立一个类,分别为CDiancaidlg,CJiacaidlg,CJiezhangdlg,CKaitaidlg,CSLdlg,并根据需要利用类向导为控件关联成员变量,建立成员函数和消息响应函数。
其次,要增加系统的安全性能,实现管理员的登录功能,为管理员设置权限,分为经理和营业员两种,分别对不同权限的人开放不同的模块,在登录之前将所有功能都屏蔽。
设计登录、注册和账户权限管理对话框,并为每个对话框设置类,给控件添加成员变量,编写代码。
本系统使用ACCESS数据库对数据进行存储,利用ADO技术访问数据库,实现数据的检索,查询,插入,删除,更改等功能。
在数据库中设计了四张数据表,分别为caishiinfo存放菜式信息,Login存放用户名和密码信息,paybill存放账单信息,TableUSE存放桌子使用情况的信息。
然后再MFC程序中可以通过ADO语句来访问和操作数据库实现功能。
对界面进行美化,使用MFC皮肤给应用程序添加自己喜欢的皮肤,给对话框添加FALSH插件进行美化。
框图如下:
数据库设计
1.使用ACCESS2003建立canyin.mdb的数据库,在其中添加四张数据表,分别用来存放菜式信息,用户信息,账单信息,桌号信息。
2.在CMyApp类中添加_ConnectionPtr类型的变量m_pCon用于连接数据库。
在窗口初始化函数中添加如下代码,用于连接和访问数据库。
:
CoInitialize(NULL);
//访问COM库
HRESULThr;
//函数返回值,如果这个函数执行完返回时将有包含实际意义的数字,如果立即返回将包含状态信息
try/*try关键字用来表示一个代码块,在可能发生的异常。
对于每一个try语句,必须有至少有一个相应的catch子句。
如果出现异常,c
atch子句参数进行评估,以确定它是否是能够处理特殊情况。
特殊条件下,
如果不能处理任何相应的try语句的catch子句,然后控制权转移的方法调用链和以前的所有异常类型进行评估,
直到找到一个能够处理的条件。
*/
{
hr=m_pCon.CreateInstance("
ADODB.Connection"
);
//创建连接。
CreateInstance是智能指针本身的函数
if(SUCCEEDED(hr))
{
m_pCon->
ConnectionTimeout=3;
hr=m_pCon->
Open("
Provider=Microsoft.Jet.OLEDB.4.0;
DataSource=canyin.mdb"
"
"
adModeUnknown);
//打开到数据库的连接,同步打开连接
}
}
catch(_com_errore)
CStringtemp;
temp.Format("
连接数据库错误信息:
%s"
e.ErrorMessage());
//格式化输出信息
:
MessageBox(NULL,temp,"
提示信息"
NULL);
//弹出消息提醒框
returnfalse;
连接数据库后即可在每个类中添加_ConnectionPtr类型的变量操作数据库。
详细设计
下面对各个类的设计做详细介绍。
●1、用户登录模块
流程图:
左侧插入了一个Flash插件,右侧添加控件,ID号和相应变量如下:
ID号和相应函数为:
IDOKOnOK
IDCANCELOnCancle
(1)用语句externCMyApptheApp;
引入全局变量,然后建立_RecordsetPtr的变量m_pRs用于操作数据库,设置全局变量i用于计算登录输入的次数,当登录超过三次还未输入正确用户名和密码的话就自动退出程序。
(2)登录按钮的实现
首先判断编辑框是否出现输入异常的情况,然后检索数据库确定该用户名和密码是否正确,如果连接数据库成功则在login数据表中按照关键字进行用户名和密码的匹配,如果匹配成功,则登录成功,可以进行下一步操作。
如果用户名和密码输入有误,则弹出消息框进行提示,然后初始化编辑框,再次接受用户名密码。
如果连接数据库没有成功,则弹出消息框进行提示。
在其中全局变量进行计数,如果输入超过三次则推出程序。
登录成功之后,将用户名和密码存入到theApp的成员变量中以备在theApp对所登录的用户权限进行管理。
下面为具体实现的代码:
voidCLogindlg:
OnOK()//登陆按钮的操作
{
//TODO:
Addextravalidationhere
UpdateData();
//调用函数进行数据交换
if(!
m_Uname.IsEmpty()||!
m_Upasswd.IsEmpty())//判断用户名和密码编辑框是否为空
CStringsql="
SELECT*FROMLoginWHEREUname='
+m_Uname+"
'
andUpasswd='
+m_Upasswd+"
;
//在数据表中查询是否存在该用户名和密码
try
m_pRs.CreateInstance("
ADODB.Recordset"
m_pRs->
Open((_variant_t)sql,theApp.m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(m_pRs->
adoEOF)
{
AfxMessageBox("
用户名或密码错误!
m_Uname="
m_Upasswd="
//初始化编辑框
i++;
//用全局变量i控制输入错误次数
UpdateData(false);
if(i==3)
{
OnCancel();
//如果输入信息超过三次就退出系统
}
}
else
theApp.name=m_Uname;
theApp.pwd=m_Upasswd;
//登陆成功后将用户名和密码保存
CDialog:
OnOK();
return;
catch(_com_errore)//无法连接数据库
CStringtemp;
temp.Format("
AfxMessageBox(temp);
return;
else
AfxMessageBox("
用户名密码不能为空"
//编辑框为空
}
(3)退出模块直接调用CDialog:
OnCancel()函数退出即可。
●2.开台模块实现
流程图:
引入全局变量,然后建立_RecordsetPtr的变量m_pRs用于操作数据库。
开台模块中在上方显示一个列表框,列表框内显示所有桌子的信息,第一栏是桌号,第二栏是“有人”或者“没人”的显示。
选择有人的桌子会自动报错,选中一个没有人的桌子,双击则会在下方的编辑框中显示选中的桌号,选