LabVIEW虚拟仪器从入门到测控应用130例-源程序,与书中一个实例一个程序相对应
2023/11/22 22:26:36 25.56MB LabVIEW
1
第一章起步篇 8本章概述 8书写本书的背景 8运用本书 9IDL所需的版本 9IDL运行期间所需颜色的数量 9本书的风格习惯 10本书中所用的IDL程序和数据文件 12获取更多的帮助 14使用IDL命令 14IDL命令解析 14创建变量 17使用IDL图形窗口 22第二章简单的图形显示 25本章概述 25IDL中简单的图形显示 25创建线画图 25定制线画图 28改变线条的线型和粗细 28用符号代替线条显示数据 29用不同的颜色绘制线画图 31限定线画图的范围 31改变线画图的风格 32在线画图上绘出多种数据集 34在多个轴的图上显示数据 35创建曲面图 36定制曲面图 38旋转曲面图 38为曲面赋色 39修改曲面图外观 40创建阴影曲面图 41改变阴影处理参数 41用其它数据集为阴影处理提供参数 42创建等值线图 43选择等值线数目 45修改等值线图 46改变等值线图的外观 47给等值线图赋色 48创建填充的等值线图 49在显示窗口定位图形输出 51设置图形边缘 52设置图形位置 52设置图形区域 53创建多个图形 53给图形显示添加文本 57找出可用字体的名称 58用XYOutS命令添加文本 58用矢量字体使用XYOut 59排列文本 60删除文本 61改变文本的方向 61给图形显示添加线和符号 61图形显示添加色彩 62第三章图像数据处理 65本章概要 65图像处理 65显示图像 65调整图像数据 67显示24位图像 69控制图像显示顺序 70改变图像尺寸 70在显示窗口中定位图像 72从显示器中读取图像 75IDL中基本的图像处理 75直方图均衡化 76平滑图像 77增强图像棱边 79图像的频域滤波 80第四章图形显示技术 83本章概要 83IDL的颜色运用 83使用索引颜色模式和RGB颜色模式 83在24位显示设备上装载色谱表 88获得色谱表的拷贝 88修改和创建色谱表 89保存自己的色谱表 90创建自己的轴标注 91调整轴刻度间隔 91格式化轴的标注 92用IDL处理残缺的数据 95用IDL建立三维坐标系 97建立三维散点图 97从图形原点定位3D坐标轴 99组合简单图形显示 100IDL中的动画数据 102建立动画工具 103装载动画缓冲区 103运行动画工具 103动画的控制 103存储动画的像素映射图 104其它类型图形数据的动画 104网格化数据以便图形显示 105德洛内三角形法网格化 106数据的球形网格化 108第五章 图形显示技巧 110本章概要 110将光标用于图形显示 110什么时候返回的光标位置? 110哪一个鼠标键和光标共同作用呢? 111用光标标注图形输出 111在图像上使用Cursor命令 113在循环中使用Cursor命令 113从显示中删除注释 114删除注释的异或法 114删除注释的设备拷贝法 116Z图形缓冲区中的图形显示技巧 120Z图形缓冲区的实现 121一个Z图形缓冲区实例:两个曲面 121用Z图形缓冲区使图像变形 123Z图形缓冲区中的透明效果 126将Z图形缓冲区效果与体数据着色相结合 127第六章在IDL中读写数据 129本章概要 129打开文件进行读写 129查找和选择数据文件 130获取逻辑设备号 131读写格式化数据 132写自由格式文件 133读写自由格式文件的实例 136用确定的文件格式写入 139从字符串中读取格式数据 141读写非格式化数据 141读取非格式化图像数据文件 142写非格式化图像数据文件 142非格式化数据文件的一些问题 144用关联变量存取非格式化数据文件 144读写常用文件格式的文件 147创建彩色GIF文件 147创建彩色JPEG文件 148查询图像文件信息 150第七章图形硬拷贝输出 151本章概要 151选择图形硬拷贝输出设备 151配置图形硬拷贝输出设备 152常用的Device命令关键字 153创建PostScript文件 154将图形送到硬拷贝设备中 154打印PostScript文件 155在运行MacOS系统的计算机上打印PostScript文件 156在Windows计算机上打印PostScript文件 156生成封装的PostScript文件输出 156封装PostScript图形的预览 157生成彩色的PostScript输出 157PostScript中的彩色图像与灰度图像 158在PostScript设备上创建
2023/11/3 13:42:36 1.26MB idl
1
为了进一步提高耦合锥结构光纤超声传感器的整体性能,使其更好地服务于光纤超声无损检测,用有限元分析法仿真分析了耦合锥体材料参数对传感器响应灵敏度的影响。
以此为依据挑选出4种超声聚能效果优越的锥体材料,并计算出与其匹配的最佳响应锥尖角度,优化设计了4款基于74°铝锥、30°有机玻璃锥、130°聚苯乙烯锥、126°天然橡胶锥的光纤超声传感器。
实验结果表明,这4款传感器均能够有效检测频率为1MHz的超声波信号,相比现有的传感器在响应灵敏度方面有较大提升,可以有效改善传感器的传感性能;且结构更小巧轻便,能够应用的场合更广泛。
2023/10/10 8:23:06 3.17MB 传感器 光纤光栅 耦合锥 材料参数
1
包含以下内容:第一部分基础篇001第一个C程序 002运行多个源文件 003求整数之积 004比较实数大小 005字符的输出 006显示变量所占字节数 007自增/自减运算 008数列求和 009乘法口诀表 010猜数字游戏 011模拟ATM(自动柜员机)界面 012用一维数组统计学生成绩 013用二维数组实现矩阵转置 014求解二维数组的最大/最小元素 015利用数组求前n个质数 016编制万年历 017对数组元素排序 018任意进制数的转换 019判断回文数 020求数组前n元素之和 021求解钢材切割的最佳订单 022通过指针比较整数大小 023指向数组的指针 024寻找指定元素的指针 025寻找相同元素的指针 026阿拉伯数字转换为罗马数字 027字符替换 028从键盘读入实数 029字符行排版 030字符排列 031判断字符串是否回文 032通讯录的输入输出 033扑克牌的结构表示034用“结构”统计学生成绩 035报数游戏 036模拟社会关系 037统计文件的字符数 038同时显示两个文件的内容 039简单的文本编辑器 040文件的字数统计程序 041学生成绩管理程序 第二部分数据结构篇042插入排序 043希尔排序 044冒泡排序 045快速排序 046选择排序 047堆排序 048归并排序 049基数排序 050二叉搜索树操作 051二项式系数递归 052背包问题 053顺序表插入和删除 054链表操作(1) 055链表操作(2) 056单链表就地逆置 057运动会分数统计 058双链表 059约瑟夫环 060记录个人资料 061二叉树遍利 062浮点数转换为字符串 063汉诺塔问题 064哈夫曼编码 065图的深度优先遍利 066图的广度优先遍利067求解最优交通路径 068八皇后问题069骑士巡游 070用栈设置密码 071魔王语言翻译 072火车车厢重排 073队列实例 074K阶斐波那契序列 第三部分数值计算与趣味数学篇075绘制余弦曲线和直线的迭加076计算高次方数的尾数 077打鱼还是晒网 078怎样存钱以获取最大利息 079阿姆斯特朗数 080亲密数 081自守数 082具有abcd=(ab+cd)2性质的数 083验证歌德巴赫猜想084素数幻方 085百钱百鸡问题 086爱因斯坦的数学题 087三色球问题088马克思手稿中的数学题 089配对新郎和新娘 090约瑟夫问题091邮票组合 092分糖果 093波瓦松的分酒趣题 094求π的近似值 095奇数平方的有趣性质096角谷猜想 097四方定理 098卡布列克常数 099尼科彻斯定理 100扑克牌自动发牌 101常胜将军 102搬山游戏103兔子产子(菲波那契数列) 104数字移动 105多项式乘法 106产生随机数 107堆栈四则运算 108递归整数四则运算 109复平面作图 110绘制彩色抛物线 111绘制正态分布曲线 112求解非线性方程 113实矩阵乘法运算114求解线性方程 115n阶方阵求逆 116复矩阵乘法 117求定积分 118求满足特异条件的数列 119超长正整数的加法 第四部分图形篇120绘制直线 121绘制圆 122绘制圆弧 123绘制椭圆124设置背景色和前景色125设置线条类型 126设置填充类型和填充颜色 127图形文本的输出 128金刚石图案129飘带图案 130圆环图案 131肾形图案 132心脏形图案 133渔网图案 134沙丘图案135设置图形方式下的文本类型 136绘制正多边形 137正六边形螺旋图案 138正方形螺旋拼块图案139图形法绘制圆 140递归法绘制三角形图案 141图形法绘制椭圆 142抛物样条曲线 14
2023/10/4 7:05:15 1.83MB C程序
1
c语言程序设计实例大全目录:第一部分基础篇001第一个C程序002运行多个源文件003求整数之积004比较实数大小005字符的输出006显示变量所占字节数007自增/自减运算008数列求和009乘法口诀表010猜数字游戏011模拟ATM(自动柜员机)界面012用一维数组统计学生成绩013用二维数组实现矩阵转置014求解二维数组的最大/最小元素015利用数组求前n个质数016编制万年历017对数组元素排序018任意进制数的转换019判断回文数020求数组前n元素之和021求解钢材切割的最佳订单022通过指针比较整数大小023指向数组的指针024寻找指定元素的指针025寻找相同元素的指针026阿拉伯数字转换为罗马数字027字符替换028从键盘读入实数029字符行排版030字符排列031判断字符串是否回文032通讯录的输入输出033扑克牌的结构表示034用“结构”统计学生成绩035报数游戏036模拟社会关系037统计文件的字符数038同时显示两个文件的内容039简单的文本编辑器040文件的字数统计程序041学生成绩管理程序第二部分数据结构篇042插入排序043希尔排序044冒泡排序045快速排序046选择排序047堆排序048归并排序049基数排序050二叉搜索树操作051二项式系数递归052背包问题053顺序表插入和删除054链表操作(1)055链表操作(2)056单链表就地逆置057运动会分数统计058双链表059约瑟夫环060记录个人资料061二叉树遍利062浮点数转换为字符串063汉诺塔问题064哈夫曼编码065图的深度优先遍利066图的广度优先遍利067求解最优交通路径068八皇后问题069骑士巡游070用栈设置密码071魔王语言翻译072火车车厢重排073队列实例074K阶斐波那契序列第三部分数值计算与趣味数学篇075绘制余弦曲线和直线的迭加076计算高次方数的尾数077打鱼还是晒网078怎样存钱以获取最大利息079阿姆斯特朗数080亲密数081自守数082具有abcd=(ab+cd)2性质的数083验证歌德巴赫猜想084素数幻方085百钱百鸡问题086爱因斯坦的数学题087三色球问题088马克思手稿中的数学题089配对新郎和新娘090约瑟夫问题091邮票组合092分糖果093波瓦松的分酒趣题094求π的近似值095奇数平方的有趣性质096角谷猜想097四方定理098卡布列克常数099尼科彻斯定理100扑克牌自动发牌101常胜将军102搬山游戏103兔子产子(菲波那契数列)104数字移动105多项式乘法106产生随机数107堆栈四则运算108递归整数四则运算109复平面作图110绘制彩色抛物线111绘制正态分布曲线112求解非线性方程113实矩阵乘法运算114求解线性方程115n阶方阵求逆116复矩阵乘法117求定积分118求满足特异条件的数列119超长正整数的加法第四部分图形篇120绘制直线121绘制圆122绘制圆弧123绘制椭圆124设置背景色和前景色125设置线条类型126设置填充类型和填充颜色127图形文本的输出128金刚石图案129飘带图案130圆环图案131肾形图案132心脏形图案133渔网图案134沙丘图案135设置图形方式下的文本类型136绘制正多边形137正六边形螺旋图案138正方形螺旋拼块图案139图形法绘制圆140递归法绘制三角形图案141图形法绘制椭圆142抛物样条曲线143Mandelbrot分形图案144绘制布朗运动曲线145艺术清屏146矩形区域的颜色填充147VGA256色模式编程148绘制蓝天图案149屏幕检测程序150运动的小车动画151动态显示位图152利用图形页实现动画153图形时
2023/10/2 22:29:03 3.1MB C语言 程序设计 源代码
1
通讯录管理系统通讯录(add_book)中的联系人包含以下信息项:姓名、手机、办公电话、家庭电话、电子邮箱、所在省市、工作单位、家庭住址,群组分类(亲属、同事、同学、朋友、其他)。
NameMobilephonesOfficephoneFamilytelephoneE-mailIncitiesWorkunits0AddressGroupclassification(relative,colleagues,friends,classmates,other).系统的主要功能包括:1.输入联系人的信息,要求:至少输入10个联系人的数据,且注意数据的多样性。
2.按姓名对联系人信息进行排序,并将排序后信息存放到一个文本文件中。
3.添加联系人的信息,在已经存在的通讯录文件中添加若干个联系人。
要求:添加后仍按联系人的姓名排序,并保存至原文件。
4.删除联系人的信息,输入一个姓名,若通讯录中有该联系人的信息,则删除该联系人,否则输出提示信息,并提示用户选择是否继续进行删除操作。
5.修改联系人的信息,输入一个姓名,根据具体需要修改该联系人的某一项信息,将修改后的信息重新保存到通讯录文件中,并提示用户选择是否继续进行修改操作。
6.按不同条件对通讯录进行查询操作,输出满足条件的联系人的信息。
(1)按姓名查询,包括精确查询(输入全名),模糊查询(输入姓);
(2)按手机号码查询,输入全部号码或号码位段(如输入130、133、139等);
(3)按群组分类查询,输入分类名称,输出该群组的全部联系人信息。
7.输出联系人的信息Contactinformation,按一定格式输出信息,保证信息排列整齐美观。
ContactPerson
2023/9/26 19:39:24 434KB 通讯录管理系统
1
餐饮管理系统一、需求分析随着社会服务行业的发展,餐饮业对自身服务的质量和能力也有了更高的要求。
餐饮管理系统正是在这样的情况之下越来越受到重视。
餐厅的内部服务项目众多,既需要完成前台的服务工作,还需要完成后台的管理工作,如果没有一套可靠的餐饮管理系统,单凭手工操作,不仅效率低,而且会极大地影响到酒店的服务质量。
设计的目标:实现餐饮管理的科学化、自动化,提高各个模版的办公效率,为高质量的餐饮服务提供保证。
系统功能概述民以食为天,随着人民生活水平的提高,餐饮业在服务行业中占有越来越重要的地位。
经过多年发展,餐饮管理已经逐渐由定性管理,进入到重视定量管理的科学阶段。
众所周知,在定量管理的具体实现方法和手段方面,最有效的工具就是计算机管理。
传统的手工操作管理存在着许多无法避免的问题,例如:人工计算机账单金额出现差错;
收银工作中跑单、漏单、偷钱现象普遍;
个别服务员作弊、改单、宰客情形时有发生;
客人消费单据难以保存和查询。
如果借助计算机来管理,就可以轻松的解决处理这些问题。
一个餐饮管理信息系统应该包括基本的餐厅的服务管理、管理人员信息的维护等,以及与之相应的操作。
所以整个餐饮管理信息系统分为两个大部分,即后台的数据管理维护和前台的操作。
后台数据库的管理能保证系统各项功能正常运行,前台操作能提供给客户尽可能方便快捷的服务。
功能模块划分1. 前台操作系统订餐管理模块:点菜(输入桌台代码和食物代码)、加菜、下单。
结账管理模块:结账(输入桌台代码)、结账方式选择(包括现金结账、信用卡结账、支票结账、签单等)。
交班管理模块:统计当班数据(包括桌台数、人民币结账金额以及总金额等),为下班操作作准备。
2. 后台管理维护系统用户权限设置:可以查询员工的基本资料(姓名、性别、年龄、出生年月、籍贯、家庭住址等),员工登录名称、密码、员工操作权限等,可以根据需要进行设置。
菜谱设置:新菜单录入(包括菜式名称、代码、类型、价格、成本等)、菜式修改、删除等菜式维护。
付款方式设置:分为人民币付款、信用卡、支票签单等,可以根据需要进行添加和删除。
系统流程分析系统流程图1所示。
当用户进入系统主界面以后,新用户经过注册后才能凭借其用户名和密码登录,老用户可以直接登录。
用户登录以后,系统自动判断出其操作权限。
操作权限包括普通员工和管理人员。
新用户的操作权限默认为是普通员工。
普通员工只能进行订餐、结账操作,而管理人员除此之外还可以进行系统设置与营业分析。
•图1当有顾客订餐的时候,员工输入桌台号和食物代码即可进行点菜,在结账以前,加菜是允许的。
当顾客结账的时候,员工输入桌台号,选择顾客的付款方式,即可完成结账。
在下班时间,员工可以统计当班期间的消费情况。
这样,员工注销此次登录,退出系统,一天的工作就到此结束。
管理人员可以随时进行系统设置,包括菜谱设置、用户权限设置、付款方式设置等。
功能模块调用餐饮管理系统调用了以下功能模块:用户注册模块、用户登录模块、数据显示模块。
二、概念设计图2给出了餐饮管理系统的E-R实体关系图。
收银员、餐桌、菜单三者之间的关系是订餐,其中订餐关系包括的属性有:餐桌编号、菜肴编号、菜肴名称、菜肴单价、菜肴数量、菜肴价格、菜肴折扣、是否结账、结账时间。
三、逻辑设计将E-R关系模型转化为二维表。
本系统主要需要6个表,分别为用户信息表(UserInfo)、菜谱信息表(MenuInfo)、订餐信息表(OrderInfo)、桌台信息表(DeskInfo)、付款方式表(PayModeInfo)、当班统计表(CaldayInfo),各个表中字段的类型以及说明如表1-表6所示。
表1用户信息表表2菜谱信息表表3订餐信息表表4桌台信息表表5付款方式表表6当班统计表其中,用户信息表主要存储用户的基本信息,权限项决定了用户的操作权限。
菜谱信息表存储食物的基本信息。
价格项为结账与结算提供依据。
桌台信息表存储各个桌台的消费情况,如消费金额、是否结账等。
订餐信息表存储各个桌台的点菜情况。
付款方式表存储了基本的付款方式,供结账时选择。
当班统计表存储员工当班期间的营业情况。
四、数据库设计数据库管理系统采用MicrosoftSQLServer2000作为后台数据库。
首先,在企业管理器中建立一个名为MenuManageSys的数据库,然后建立以上6个数据库表,并设定主键、长度。
这样,数据库的设计已经完成。
五、详细设计本餐饮管理系统采用VisualC+++SQLServer来开发。
利用ADO技术调用后台数据库,使用了两个ADO智能指针_ConnectionPtr和_RecordsetPtr,其中_ConnectionPtr用来连接后台SQLServer数据库,_RecordsetPtr指针用来对数据库的表中的记录集进行操作。
工程使用的是基于对话框的程序,每个对话框为一个类,父类为CDialog,实现的一些功能都封装在类的函数中,体现了面向对象编程语言C++的特性。
导入ADO接口:在工程的stdafx.h文件里直接引入符号#import引入ADO库文件,加入下面一行代码,以使编译器能正确编译:#import"c:\programfiles\commonfiles\system\ado\msado15.dll"no_namespacerename("EOF","adoEOF")用_ConnectionPtr指针连接数据库:在CmenuManageSysApp类的BOOLInitInstance()函数中加入以下代码:m_pConnection.CreateInstance("ADODB.Connection"); try { m_pConnection->ConnectionTimeout=8; m_pConnection->PutCursorLocation(adUseClient);m_pConnection->Open("driver={SQLServer};Server=172.29.130.47;DATABASE=MenuManageSys;UID=;PWD=","","",adModeUnknown); } catch(_com_errore) { AfxMessageBox("数据库连接失败!"); returnFALSE; }1.设计工程框架餐饮管理系统的框架是一个对话框类型的操作界面,用户注册、登录后,可对餐饮管理的各个功能模块进行操作。
1.1设置主界面系统主界面如图3:图3每个事件的对应代码如下:(1) 单击“注册”菜单,弹出“注册”对话框,代码如下:voidCMenuManageSysDlg::OnRegister(){ CRegisterDlgdlg(this); dlg.DoModal();}(2) 单击“登录”菜单,弹出“登录”对话框,代码如下:voidCMenuManageSysDlg::OnLogin(){ CLoginDlgdlg(this); dlg.DoModal();}(3) 单击“订餐”菜单,判断用户是否登录,代码如下:voidCMenuManageSysDlg::OnUpdateOrderSystem(CCmdUI*pCmdUI){ if(theApp.m_Level==0||theApp.m_Level==1) { pCmdUI->Enable(true); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); }}(4) 如果用户已经登录,弹出“餐桌信息”对话框,否则提示用户登录,代码如下:voidCMenuManageSysDlg::OnOrderSystem(){ CDeskDlgdlg; dlg.DoModal();}(5) 单击“结账”菜单,判断用户是否登录,代码如下:voidCMenuManageSysDlg::OnUpdatePayCheck(CCmdUI*pCmdUI){ if(theApp.m_Level==0||theApp.m_Level==1) { pCmdUI->Enable(true); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); }}(6) 如果用户已经登录,弹出“结账”对话框,否则提示用户先登录,代码如下:voidCMenuManageSysDlg::OnPayCheck(){ CPayDlgdlg; dlg.DoModal();}(7) 单击“下班”菜单,判断用户是否登录,代码如下:voidCMenuManageSysDlg::OnUpdateChangeDuty(CCmdUI*pCmdUI){ if(theApp.m_Level==0||theApp.m_Level==1) { pCmdUI->Enable(true); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); }}(8) 如果用户已经登录,弹出“交接班”对话框,否则提示用户先登录,代码如下:voidCMenuManageSysDlg::OnChangeDuty(){ COffdutyDlgdlg; dlg.DoModal();}(9) 单击“用户权限设置”菜单,判断用户是否登录及其权限,代码如下:voidCMenuManageSysDlg::OnUpdateSetLevel(CCmdUI*pCmdUI){ if(theApp.m_Level==1) { pCmdUI->Enable(true); } elseif(theApp.m_Level==0) { pCmdUI->Enable(false); AfxMessageBox("您无权进行用户级别设置"); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); } }(10) 如果权限是管理人员,弹出“权限设置”对话框,如果是普通员工会提示无权进行用户级别设置,代码如下:voidCMenuManageSysDlg::OnSetLevel(){ CLevelDlgdlg; dlg.DoModal();}(11) 单击“菜谱设置”菜单,判断用户是否登录及其权限,代码如下:voidCMenuManageSysDlg::OnUpdateSetMenu(CCmdUI*pCmdUI){ if(theApp.m_Level==1) { pCmdUI->Enable(true); } elseif(theApp.m_Level==0) { pCmdUI->Enable(false); AfxMessageBox("您无权进行菜谱设置"); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); } }(12)如果权限是管理人员,弹出“菜谱设置”对话框,如果是普通员工会提示无权进行用户级别设置,代码如下:voidCMenuManageSysDlg::OnSetMenu(){ CMenuSetDlgdlg; dlg.DoModal();}(13)单击“付款方式设置”菜单,判断用户是否登录及其权限,代码如下:voidCMenuManageSysDlg::OnUpdatePaymodeSet(CCmdUI*pCmdUI){ if(theApp.m_Level==1) { pCmdUI->Enable(true); } elseif(theApp.m_Level==0) { pCmdUI->Enable(false); AfxMessageBox("您无权进行付款方式设置"); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); }}(14)如果权限是管理人员,弹出“设置付款方式”对话框,如果是普通员工会提示无权进行用户级别设置,代码如下:voidCMenuManageSysDlg::OnPaymodeSet(){ CSetPaymodeDlgdlg; dlg.DoModal();}(15)单击“注销”菜单,提示用户本次登录已注销,代码如下:voidCMenuManageSysDlg::OnLogout(){ if(MessageBox("您确定要注销吗","注销询问",MB_OKCANCEL|MB_ICONQUESTION)==IDOK) { theApp.m_Level=-1; AfxMessageBox("本次登录已注销"); }}(16)单击“退出系统”,在确定退出后,关闭系统,代码如下:voidCMenuManageSysDlg::OnExitSystem(){ if(MessageBox("真的要退出系统吗","退出询问",MB_OKCANCEL|MB_ICONQUESTION)==IDOK) { CDialog::OnOK(); }}1.2设计注册模块注册模块如图4:图4注册模块在输入了完整的信息,按下“确定”按钮后,如果没有重复用户,则注册成功,代码如下:voidCRegisterDlg::OnRegisterBtn(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE);if(!m_strUserName.IsEmpty()&&!m_strUserNative.IsEmpty()&&!m_strUserAdddress.IsEmpty()&&!m_strUserPwd.IsEmpty()&& !m_strUserPwdAgain.IsEmpty()&&!m_strUserNum.IsEmpty()&&m_nUserAge!=0) { if(m_strUserPwd.CompareNoCase(m_strUserPwdAgain)!=0) { MessageBox("密码有误,请重新输入密码。
","系统注册"); } else { try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("SELECT*FROMUserInfo",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); } catch(_com_errore) { CStringtemp; temp.Format("连接数据库错误信息:%s",e.ErrorMessage()); AfxMessageBox(temp); return; } m_pRecordset->AddNew(); m_pRecordset->PutCollect("UserName",_variant_t(m_strUserName)); m_pRecordset->PutCollect("UserPwd",_variant_t(m_strUserPwd)); m_pRecordset->PutCollect("UserNative",_variant_t(m_strUserNative)); m_pRecordset->PutCollect("UserAddress",_variant_t(m_strUserAdddress)); m_pRecordset->PutCollect("UserNum",_variant_t(m_strUserNum)); CStringstr; if(m_nUserSex==0) { m_pRecordset->PutCollect("UserSex",_variant_t("男")); } elsem_pRecordset->PutCollect("UserSex",_variant_t("女")); str.Format("%d",m_nUserAge); m_pRecordset->PutCollect("UserAge",_variant_t(str)); str.Format("%d",0); m_pRecordset->PutCollect("UserLevel",_variant_t(str)); m_pRecordset->Update(); m_pRecordset->Close(); m_pRecordset=NULL; MessageBox("恭喜您注册成功","系统注册"); CDialog::OnOK(); return; } } else { MessageBox("请输入完整注册信息","系统注册"); } }登录模块如图5:图5登录模块输入完整信息,并单击“确定”按钮后,如果用户名不存在,则重新输入;
如果密码错误,则重新输入,在重新输入三次密码后还不正确,则退出登录界面,登录失败。
代码如下:voidCLoginDlg::OnOK(){ UpdateData(TRUE); if(!m_strUserName.IsEmpty()&&!m_strPassword.IsEmpty()) { try { CStringsql,str; // str.Format("%d",m_nUserNum); sql="SELECT*FROMUserInfoWHEREUserName='"+m_strUserName+"'andUserNum='"+m_strUserNum+"'andUserPwd='"+m_strPassword+"'"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); if(m_pRecordset->adoEOF) { m_pRecordset->Close(); sql="SELECT*FROMUserInfoWHEREUserName='"+m_strUserName+"'ANDUserNum='"+m_strUserNum+"'"; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); if(m_pRecordset->adoEOF) { MessageBox("此用户不存在!","登录系统"); } else { if(count>=2) { MessageBox("登录次数过多,系统关闭","系统登录错误",MB_OK|MB_ICONWARNING); CDialog::OnOK(); } else { MessageBox("密码错误!","登录系统"); count++; } return; } } catch(_com_errore)///捕捉异常 { CStringtemp; temp.Format("连接数据库错误信息:%s",e.ErrorMessage()); AfxMessageBox(temp); return; } } else { theApp.m_Level=m_pRecordset->GetCollect("UserLevel").lVal; theApp.m_name=m_strUserName; MessageBox("登录成功!","登录系统",MB_OKCANCEL|MB_ICONQUESTION); CDialog::OnOK(); return; } } catch(_com_errore)///捕捉异常 { CStringtemp; temp.Format("连接数据库错误信息:%s",e.ErrorMessage()); AfxMessageBox(temp); return; } m_pRecordset->Close(); m_pRecordset=NULL; } else { MessageBox("请输入用户名和密码","登录系统"); }}到此,注册模块与登录模块就设计完成。
新用户注册以后,凭借其用户名和密码可以登陆,从而对系统进行操作。
3.功能模块设计根据功能模块划分,可以将餐饮管理系统的功能模块划分为值班员管理模块、菜谱管理模块、用户管理模块、订餐模块、结账模块,下面对工程各个功能进行介绍。
3.1订餐模块设计订餐模块的功能是员工输入桌台号码和食物代码进行点菜、根据需要加菜、下单。
订餐模块如图6所示:图6订餐模块为对话框类添加3个数据集对象:_RecordsetPtrm_pRecordset_Desk;_RecordsetPtrm_pRecordset_Order;_RecordsetPtrm_pRecordset_Menu;对话框类的各成员函数的代码如下:CDeskDlg::CDeskDlg(CWnd*pParent/*=NULL*/):CDialog(CDeskDlg::IDD,pParent){ //{{AFX_DATA_INIT(CDeskDlg) m_nOrderDeskNumber=0; m_nOrderFoodNumber=0; m_nOrderFoodRebate=100; m_nOrderFoodAcount=1; //}}AFX_DATA_INIT}BOOLCDeskDlg::OnInitDialog()//对话框初始化函数{ CDialog::OnInitDialog(); GetDlgItem(IDOK)->EnableWindow(FALSE); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCDeskDlg::OnOrderBtn()//点菜消息按钮{ UpdateData(TRUE); CStringstr; CStringsql; if(m_nOrderDeskNumber==0) { AfxMessageBox("请输入餐桌编号"); return; } if(m_nOrderFoodNumber!=0) { str.Format("%d",m_nOrderFoodNumber); sql="SELECT*FROMMenuInfoWHEREFoodNum="+str+""; m_pRecordset_Menu.CreateInstance("ADODB.Recordset"); m_pRecordset_Menu->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Menu->GetRecordCount()==0) { AfxMessageBox("该菜肴编号不存在,请重新输入编号"); return; } else { intm_nTempPrice; CStringm_strTempName; m_nTempPrice=m_pRecordset_Menu->GetCollect("FoodPrice").lVal;//食物价格 m_strTempName=m_pRecordset_Menu->GetCollect("FoodName").bstrVal;//食物名称 m_pRecordset_Menu->Close(); str.Format("%d",m_nOrderDeskNumber);//桌子编号 sql="SELECT*FROMOrderInfoWHEREDeskNum="+str+""; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_pRecordset_Order->AddNew(); str.Format("%d",m_nOrderDeskNumber); m_pRecordset_Order->PutCollect("DeskNum",_variant_t(str));//餐桌编号 str.Format("%d",m_nOrderFoodNumber); m_pRecordset_Order->PutCollect("FoodNum",_variant_t(str));//食物编号 str.Format("%d",m_nTempPrice); m_pRecordset_Order->PutCollect("FoodSignalPrice",_variant_t(str));//食物单价 str.Format("%d",m_nOrderFoodAcount); m_pRecordset_Order->PutCollect("FoodAcount",_variant_t(str));//食物数量 m_nTempPrice*=m_nOrderFoodAcount; str.Format("%d",m_nTempPrice); m_pRecordset_Order->PutCollect("FoodPrice",_variant_t(str));//食物价格 str.Format("%d",m_nOrderFoodRebate); m_pRecordset_Order->PutCollect("FoodRebate",_variant_t(str));//食物折扣 intm_nTempRePrice; m_nTempRePrice=(int)m_nTempPrice*m_nOrderFoodRebate/100; str.Format("%d",m_nTempRePrice); m_pRecordset_Order->PutCollect("FoodRePrice",_variant_t(str)); //折后价格(小计) m_pRecordset_Order->PutCollect("FoodName",_variant_t(m_strTempName));//食物名称 intm_nTempCheck; m_nTempCheck=0; str.Format("%d",m_nTempCheck); m_pRecordset_Order->PutCollect("FoodCheck",_variant_t(str));//是否结帐 CStringpaytime; CTimenow=CTime::GetCurrentTime(); paytime=now.Format(_T("%Y-%m-%d%H:%M:%S")); m_pRecordset_Order->PutCollect("FoodTime",_variant_t(paytime));//点菜时间 m_pRecordset_Order->Update(); m_pRecordset_Order->Close(); str.Format("%d",m_nOrderDeskNumber); CStringstr1; str1.Format("%d",0); sql="SELECT*FROMOrderInfoWHEREDeskNum="+str+"andFoodCheck="+str1+""; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbFood.SetRefDataSource(NULL); m_dbFood.SetRefDataSource((LPUNKNOWN)m_pRecordset_Order); m_dbFood.SetColumnHeaders(2); m_dbFood.Refresh(); GetDlgItem(IDOK)->EnableWindow(TRUE); } } else { AfxMessageBox("请输入菜肴编号"); return; } }voidCDeskDlg::OnOK()//下单消息按钮{ CStringstr,sql,str1; intm_nTempRePrice; m_nTotalPrice=0; while(!m_pRecordset_Order->adoEOF) { m_nTempRePrice=m_pRecordset_Order->GetCollect("FoodRePrice").lVal; m_nTotalPrice+=m_nTempRePrice; m_pRecordset_Order->MoveNext(); } if(m_nTotalPrice>0) { inttemp=0; str1.Format("%d",temp); str.Format("%d",m_nOrderDeskNumber); sql="SELECT*FROMDeskInfoWHEREDeskNum="+str+"andDeskCheck="+str1+""; m_pRecordset_Desk.CreateInstance("ADODB.Recordset"); m_pRecordset_Desk->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Desk->GetRecordCount()==0) { m_pRecordset_Desk->AddNew(); str.Format("%d",m_nOrderDeskNumber); m_pRecordset_Desk->PutCollect("DeskNum",(_variant_t)str); str.Format("%d",m_nTotalPrice); m_pRecordset_Desk->PutCollect("DeskPrice",(_variant_t)str); temp=0; str.Format("%d",temp); m_pRecordset_Desk->PutCollect("DeskCheck",(_variant_t)str); } else { str.Format("%d",m_nTotalPrice); m_pRecordset_Desk->PutCollect("DeskPrice",(_variant_t)str); } m_pRecordset_Desk->Update(); m_pRecordset_Desk->Close(); } CDialog::OnOK();}voidCDeskDlg::OnUpdateOrderDeskNumber()//根据餐桌号自动将原来已点的食物信息绑定到数据列表{ UpdateData(TRUE); CStringstr,sql; str.Format("%d",m_nOrderDeskNumber); CStringstr1; inttemp=0; str1.Format("%d",temp); sql="SELECT*FROMOrderInfoWHEREDeskNum="+str+"andFoodCheck="+str1+""; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbFood.SetRefDataSource(NULL); m_dbFood.SetRefDataSource((LPUNKNOWN)m_pRecordset_Order); m_dbFood.SetColumnHeaders(2); m_dbFood.Refresh(); }3.2结账模块设计结账模块的功能是员工输入桌台代码进行结账、选择结账方式(包括现金结账、信用卡结账、支票结账、签单等)、自动找零。
结账模块如图7所示:图7结账模块为对话框类添加3个数据集对象,代码如下: _RecordsetPtrm_pRecordset_Paymode; _RecordsetPtrm_pRecordset_Order; _RecordsetPtrm_pRecordset_Desk;对话框类的各成员函数的代码如下:CPayDlg::CPayDlg(CWnd*pParent/*=NULL*/) :CDialog(CPayDlg::IDD,pParent){ //{{AFX_DATA_INIT(CPayDlg) m_strPaymode=_T(""); m_strPayUserName=_T(""); m_nPayDeskNumber=0; m_nPayTotalPrice=0; m_nPayRealPrice=0; m_nPayRePrice=0; m_timePay=COleDateTime::GetCurrentTime(); //}}AFX_DATA_INIT}BOOLCPayDlg::OnInitDialog()//对话框初始化函数{ CDialog::OnInitDialog(); m_strPayUserName=theApp.m_name; CStringsql; sql="SELECT*FROMPayModeInfo"; m_pRecordset_Paymode.CreateInstance("ADODB.Recordset"); m_pRecordset_Paymode->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Paymode->GetRecordCount()!=0) { while(!m_pRecordset_Paymode->adoEOF) { m_coPaymode.AddString((LPCTSTR)(_bstr_t)m_pRecordset_Paymode->GetCollect("NAME")); m_pRecordset_Paymode->MoveNext(); } m_pRecordset_Paymode->Close(); m_coPaymode.SetCurSel(0); } UpdateData(FALSE); returnTRUE;}voidCPayDlg::OnUpdatePayDeskNumber()//自动将对应桌号的点菜信息以及消费情况显示在桌面上{ UpdateData(TRUE); CStringsql,str,str1; inttemp=0; str.Format("%d",m_nPayDeskNumber); str1.Format("%d",temp); sql="SELECT*FROMDeskInfoWHEREDeskNum="+str+"ANDDeskCheck="+str1+""; m_pRecordset_Desk.CreateInstance("ADODB.Recordset"); m_pRecordset_Desk->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Desk->GetRecordCount()!=0) { m_nPayTotalPrice=m_pRecordset_Desk->GetCollect("DeskPrice").lVal; } m_pRecordset_Desk->Close(); sql="SELECT*FROMOrderInfoWHEREDeskNum="+str+"ANDFoodCheck="+str1+""; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbPay.SetRefDataSource(NULL); m_dbPay.SetRefDataSource((LPUNKNOWN)m_pRecordset_Order); m_dbPay.SetColumnHeaders(1); m_dbPay.Refresh(); UpdateData(FALSE);}voidCPayDlg::OnUpdatePayRealprice()//根据实收金额自动计算找零金额{ UpdateData(TRUE); m_nPayRePrice=m_nPayRealPrice-m_nPayTotalPrice; UpdateData(FALSE);}voidCPayDlg::OnOK()//确定按钮消息函数,将数据写回DESK表和ORDER表,结账完成{ UpdateData(TRUE); if(!m_strPaymode.IsEmpty()&&m_nPayRealPrice!=0) { CStringsql,str,str1; inttemp=0; str.Format("%d",m_nPayDeskNumber); str1.Format("%d",temp); sql="SELECT*FROMDeskInfoWHEREDeskNum="+str+"ANDDeskCheck="+str1+""; m_pRecordset_Desk.CreateInstance("ADODB.Recordset"); m_pRecordset_Desk->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Desk->GetRecordCount!=0) { temp=1; str.Format("%d",temp); m_pRecordset_Desk->PutCollect("DeskCheck",(_variant_t)str); intselmode; selmode=m_coPaymode.GetCurSel(); m_coPaymode.GetLBText(selmode,m_strPaymode); m_pRecordset_Desk->PutCollect("DeskPaymode",_variant_t(m_strPaymode)); CStringpaytime; CTimenow=CTime::GetCurrentTime(); paytime=now.Format(_T("%Y-%m-%d%H:%M:%S")); m_pRecordset_Desk->PutCollect("DeskDateTime",(_variant_t)paytime); m_pRecordset_Desk->PutCollect("DeskName",(_variant_t)m_strPayUserName); } m_pRecordset_Desk->Update(); m_pRecordset_Desk->Close(); str.Format("%d",m_nPayDeskNumber); sql="SELECT*FROMOrderInfoWHEREDeskNum="+str+"ANDFoodCheck="+str1+""; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Order->GetRecordCount()!=0) { temp=1; str.Format("%d",temp); while(!m_pRecordset_Order->adoEOF) { m_pRecordset_Order->PutCollect("FoodCheck",(_variant_t)str); m_pRecordset_Order->Update(); m_pRecordset_Order->MoveNext(); } } m_pRecordset_Order->Close(); str.Format("%d",m_nPayDeskNumber); str+="号桌已结账"; AfxMessageBox(str); CDialog::OnOK(); } else { AfxMessageBox("请输入完整信息"); }}到此,结账模块已经设计完成。
3.3交接班模块设计交接班模块的功能是管理员统计当班数据(包括桌台数、人民币结账金额以及总金额等),为下班操作做准备。
交接班模块如图8所示:图8交接班模块为对话框类添加两个数据集对象,代码如下:_RecordsetPtrm_pRecordset_Off;_RecordsetPtrm_pRecordset_Desk;对话框类的各成员函数的代码如下:COffdutyDlg::COffdutyDlg(CWnd*pParent/*=NULL*/) :CDialog(COffdutyDlg::IDD,pParent){ //{{AFX_DATA_INIT(COffdutyDlg) m_strDayName=_T(""); m_nTotalAcount=0; m_timeDay=0; //}}AFX_DATA_INIT}BOOLCOffdutyDlg::OnInitDialog()//对话框初始化{ CDialog::OnInitDialog(); m_timeDay=CTime::GetCurrentTime(); m_strDayName=theApp.m_name; UpdateData(FALSE); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCOffdutyDlg::OnCalDayBtn()//统计按钮,负责当班统计{ CStringsql,str; inttemp=1; str.Format("%d",temp); sql="SELECT*FROMDeskInfoWHEREDeskCheck="+str+"ANDDeskName='"+m_strDayName+"'"; m_pRecordset_Desk.CreateInstance("ADODB.Recordset"); m_pRecordset_Desk->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); intrenminbi_jine=0,qita_jine=0,total_jine=0,acount=0; if(m_pRecordset_Desk->GetRecordCount!=0) { while(!m_pRecordset_Desk->adoEOF) { str=m_pRecordset_Desk->GetCollect("DeskPaymode").bstrVal; if(str.CompareNoCase("人民币")==0) { renminbi_jine+=m_pRecordset_Desk->GetCollect("DeskPrice").lVal; } else { qita_jine+=m_pRecordset_Desk->GetCollect("DeskPrice").lVal; } acount++; m_pRecordset_Desk->MoveNext(); } } m_pRecordset_Desk->Close(); total_jine=renminbi_jine+qita_jine; m_pRecordset_Off.CreateInstance("ADODB.Recordset"); m_pRecordset_Off->Open("SELECT*FROMCalDayInfo",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Off->GetRecordCount!=0) { while(!m_pRecordset_Off->adoEOF) { m_pRecordset_Off->Delete(adAffectCurrent); m_pRecordset_Off->Update(); m_pRecordset_Off->MoveNext(); } } m_pRecordset_Off->AddNew(); m_pRecordset_Off->PutCollect("mode",_variant_t("人民币")); str.Format("%d",renminbi_jine); m_pRecordset_Off->PutCollect("money",_variant_t(str)); m_pRecordset_Off->AddNew(); m_pRecordset_Off->PutCollect("mode",_variant_t("其他")); str.Format("%d",qita_jine); m_pRecordset_Off->PutCollect("money",_variant_t(str)); m_pRecordset_Off->AddNew(); m_pRecordset_Off->PutCollect("mode",_variant_t("合计")); str.Format("%d",total_jine); m_pRecordset_Off->PutCollect("money",_variant_t(str)); m_dbTotalDay.SetRefDataSource(NULL); m_dbTotalDay.SetRefDataSource((LPUNKNOWN)m_pRecordset_Off); m_dbTotalDay.SetColumnHeaders(2); m_dbTotalDay.Refresh(); m_pRecordset_Off->Update(); m_nTotalAcount=acount; UpdateData(FALSE);}3.4用户权限管理模块设计用户权限模块的功能是方便管理人员查询员工的基本资料,设置员工的操作权限。
用户权限设置模块的设计如图9:图9权限设置模块对话框类的各成员函数的代码如下:CLevelDlg::CLevelDlg(CWnd*pParent/*=NULL*/) :CDialog(CLevelDlg::IDD,pParent){ //{{AFX_DATA_INIT(CLevelDlg) m_strUserName=_T(""); m_strUserNum=_T(""); m_strLevelSelect=_T(""); //}}AFX_DATA_INIT}BOOLCLevelDlg::OnInitDialog(){ CDialog::OnInitDialog(); m_coLevelSelect.AddString("管理员"); m_coLevelSelect.AddString("用户"); GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(FALSE); GetDlgItem(IDC_CONFIRM)->EnableWindow(FALSE); UpdateData(FALSE); CStringsql; sql="SELECT*FROMUserInfo"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh(); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCLevelDlg::OnChange(){ GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(TRUE); GetDlgItem(IDC_CONFIRM)->EnableWindow(TRUE); UpdateData(TRUE); CStringsql; sql="SELECTUserName,UserNum,UserLevel,UserPwdFROMUserInfoWHEREUserName='"+m_strUserName+"'ANDUserNum='"+m_strUserNum+"'"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh();}voidCLevelDlg::OnConfirm(){ UpdateData(TRUE); if(!m_strLevelSelect.IsEmpty()) { if(m_strLevelSelect.CompareNoCase("管理员")==0) { CStringstr,sql;inttemp=1; str.Format("%d",temp); sql="SELECTUserName,UserNum,UserLevel,UserPwdFROMUserInfoWHEREUserName='"+m_strUserName+"'ANDUserNum='"+m_strUserNum+"'"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_pRecordset->PutCollect("UserLevel",_variant_t(str)); m_pRecordset->Update(); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh(); AfxMessageBox("权限修改成功"); GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(FALSE); GetDlgItem(IDC_CONFIRM)->EnableWindow(FALSE); } else { CStringstr,sql;inttemp=0; str.Format("%d",temp); sql="SELECTUserName,UserNum,UserLevel,UserPwdFROMUserInfoWHEREUserName='"+m_strUserName+"'ANDUserNum='"+m_strUserNum+"'"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_pRecordset->PutCollect("UserLevel",_variant_t(str)); m_pRecordset->Update(); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh(); AfxMessageBox("权限修改成功"); GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(FALSE); GetDlgItem(IDC_CONFIRM)->EnableWindow(FALSE); } } else { AfxMessageBox("请选择权限"); }}voidCLevelDlg::OnShowAll(){ CStringsql; sql="SELECT*FROMUserInfo"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh(); GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(FALSE); GetDlgItem(IDC_CONFIRM)->EnableWindow(FALSE);}至此,权限设置模块设计完成。
3.5菜谱管理模块设计菜谱管理模块的功能是管理人员进行新菜式的录入、菜式修改、删除等菜式维护。
菜谱管理模块如图10:图10菜单管理模块对话框类的各成员函数的代码如下:CMenuSetDlg::CMenuSetDlg(CWnd*pParent/*=NULL*/) :CDialog(CMenuSetDlg::IDD,pParent){ //{{AFX_DATA_INIT(CMenuSetDlg) m_nInputNum=0; m_nCost=0; m_strName=_T(""); m_nNum=0; m_nPrice=0; m_strRemark=_T(""); m_strType=_T(""); //}}AFX_DATA_INIT}BOOLCMenuSetDlg::OnInitDialog()//对话框初始化{ CDialog::OnInitDialog(); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_NUM)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(FALSE); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_INQUIRY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_ADDSAVE)->EnableWindow(FALSE); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCMenuSetDlg::OnUpdateEditInputNum(){ UpdateData(TRUE); if(m_nInputNum!=0) { GetDlgItem(IDC_INQUIRY)->EnableWindow(TRUE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(FALSE); }}voidCMenuSetDlg::OnInquiry()//查询{ UpdateData(TRUE); CStringsql,str; str.Format("%d",m_nInputNum); sql="SELECT*FROMMenuInfoWHEREFoodNum="+str+""; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset->GetRecordCount()!=0) { m_nInputNum=0; m_nNum=m_pRecordset->GetCollect("FoodNum").lVal; m_strName=m_pRecordset->GetCollect("FoodName").bstrVal; m_strType=m_pRecordset->GetCollect("FoodType").bstrVal; m_nPrice=m_pRecordset->GetCollect("FoodPrice").lVal; m_nCost=m_pRecordset->GetCollect("FoodCost").lVal; m_strRemark=m_pRecordset->GetCollect("FoodRemark").bstrVal; GetDlgItem(IDC_EDIT_NUM)->EnableWindow(FALSE); GetDlgItem(IDC_DEL)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(FALSE); GetDlgItem(IDC_INQUIRY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(TRUE); GetDlgItem(IDC_ADDSAVE)->EnableWindow(FALSE); } else { // m_nInputNum=0; AfxMessageBox("您所查找的菜肴不存在"); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_INQUIRY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_ADDSAVE)->EnableWindow(FALSE); } UpdateData(FALSE);}voidCMenuSetDlg::OnAddNew()//新增{ m_nCost=0; m_strName=_T(""); m_nNum=0; m_nPrice=0; m_strRemark=_T(""); m_strType=_T(""); GetDlgItem(IDC_ADDSAVE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_NUM)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(TRUE); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(FALSE); GetDlgItem(IDC_INQUIRY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_INPUT_NUM)->EnableWindow(TRUE); UpdateData(FALSE);}voidCMenuSetDlg::OnAddSave()//保存所增加项{ UpdateData(TRUE); if(m_nCost!=0&&m_nNum!=0&&m_nPrice!=0&&!m_strName.IsEmpty()&&!m_strRemark.IsEmpty()&&!m_strType.IsEmpty()) { GetDlgItem(IDC_EDIT_NUM)->EnableWindow(FALSE); GetDlgItem(IDC_ADDSAVE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_INPUT_NUM)->EnableWindow(TRUE); CStringstr,sql; str.Format("%d",m_nNum); sql="SELECT*FROMMenuInfoWHEREFoodNum="+str+""; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset->GetRecordCount()!=0) { AfxMessageBox("菜肴号码已存在"); } else { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("SELECT*FROMMenuInfo",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_nNum==0) { AfxMessageBox("菜肴号码不能为0"); return; } else { m_pRecordset->AddNew(); str.Format("%d",m_nNum); m_pRecordset->PutCollect("FoodNum",_variant_t(str)); m_pRecordset->PutCollect("FoodName",_variant_t(m_strName)); m_pRecordset->PutCollect("FoodType",_variant_t(m_strType)); str.Format("%d",m_nPrice); m_pRecordset->PutCollect("FoodPrice",_variant_t(str)); str.Format("%d",m_nCost); m_pRecordset->PutCollect("FoodCost",_variant_t(str)); m_pRecordset->PutCollect("FoodRemark",_variant_t(m_strRemark)); m_pRecordset->Update(); m_pRecordset->Close(); AfxMessageBox("已保存"); m_nCost=0; m_strName=_T(""); m_nNum=0; m_nPrice=0; m_strRemark=_T(""); m_strType=_T(""); UpdateData(FALSE); } } } elseAfxMessageBox("请输入完整信息");}voidCMenuSetDlg::OnModify()//修改{ GetDlgItem(IDC_EDIT_NUM)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(TRUE); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(TRUE); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); m_nCost=0; m_nPrice=0; m_strRemark=_T(""); m_strType=_T(""); UpdateData(FALSE);}voidCMenuSetDlg::OnModifysave()//保存修改{ UpdateData(TRUE); if(!m_strType.IsEmpty()&&m_nPrice!=0&&m_nCost!=0&&!m_strRemark.IsEmpty()) { CStringstr,sql; str.Format("%d",m_nNum); // m_pRecordset->PutCollect("FoodNum",_variant_t(str)); // m_pRecordset->PutCollect("FoodName",_variant_t(m_strName)); m_pRecordset->PutCollect("FoodType",_variant_t(m_strType)); str.Format("%d",m_nPrice); m_pRecordset->PutCollect("FoodPrice",_variant_t(str)); str.Format("%d",m_nCost); m_pRecordset->PutCollect("FoodCost",_variant_t(str)); m_pRecordset->PutCollect("FoodRemark",_variant_t(m_strRemark)); m_pRecordset->Update(); AfxMessageBox("修改成功"); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(FALSE); } else { AfxMessageBox("请输入完整信息"); }}voidCMenuSetDlg::OnDel(){ m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Close(); AfxMessageBox("删除成功"); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE);}至此,菜谱管理模块设计完成。
3.6付款方式设置模块设计付款方式设置模块如图11:图11付款方式模块对话框类的各成员函数的代码如下:CSetPaymodeDlg::CSetPaymodeDlg(CWnd*pParent/*=NULL*/) :CDialog(CSetPaymodeDlg::IDD,pParent){ //{{AFX_DATA_INIT(CSetPaymodeDlg) m_strPaymode=_T(""); //}}AFX_DATA_INIT}BOOLCSetPaymodeDlg::OnInitDialog()//对话框初始化{ CDialog::OnInitDialog(); m_bAdd=FALSE; m_bDel=FALSE; m_sInputPaymode.ShowWindow(SW_HIDE); m_editPaymode.ShowWindow(SW_HIDE); m_btnSure.ShowWindow(SW_HIDE); CStringsql; sql="SELECT*FROMPayModeInfo"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbPaymode.SetRefDataSource(NULL); m_dbPaymode.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbPaymode.SetColumnHeaders(1); m_dbPaymode.Refresh(); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCSetPaymodeDlg::OnPaymodeAddBtn()//单击按钮后,开始新增{ m_sInputPaymode.ShowWindow(SW_SHOW); m_editPaymode.ShowWindow(SW_SHOW); m_btnSure.ShowWindow(SW_SHOW); m_bAdd=TRUE; m_bDel=FALSE;}voidCSetPaymodeDlg::OnPaymodeDelBtn()//单击按钮后,开始删除{ m_sInputPaymode.ShowWindow(SW_SHOW); m_editPaymode.ShowWindow(SW_SHOW); m_btnSure.ShowWindow(SW_SHOW); m_bAdd=FALSE; m_bDel=TRUE;}voidCSetPaymodeDlg::OnOK()//确定添加或者删除{ UpdateData(TRUE); if(!m_strPaymode.IsEmpty()) { if(m_bAdd==TRUE) { CStringstr; BOOLflag=0; m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { str=m_pRecordset->GetCollect("NAME").bstrVal; if(str.CompareNoCase(m_strPaymode)==0) { MessageBox("您输入的付款方式已存在","输入错误",MB_OK|MB_ICONWARNING); flag=1; break; } elsem_pRecordset->MoveNext(); } /* CStringsql; sql="SELECT*FROMPayModeInfoWHERENAME='"+m_strPaymode+"'"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset->GetRecordCount()==0) { MessageBox("您输入的付款方式已存在","输入错误",MB_OK|MB_ICONWARNING); flag=1; } */ if(flag==0) { m_pRecordset->MoveLast(); m_pRecordset->AddNew(); m_pRecordset->PutCollect("NAME",_variant_t(m_strPaymode)); m_pRecordset->Update(); m_dbPaymode.SetRefDataSource(NULL); m_dbPaymode.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbPaymode.SetColumnHeaders(1); m_dbPaymode.Refresh(); m_bAdd=FALSE; } } if(m_bDel==TRUE) { BOOLflag=0; UpdateData(TRUE); CStringstr; intnewid; /* m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { str=m_pRecordset->GetCollect("NAME").bstrVal; if(str.CompareNoCase(m_strPaymode)==0) { flag=1; m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Update(); break; } else m_pRecordset->MoveNext(); } */ CStringsql; sql="SELECT*FROMPayModeInfoWHERENAME='"+m_strPaymode+"'"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset->GetRecordCount()!=0) { flag=1; m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Update(); m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("SELECT*FROMPayModeInfo",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbPaymode.SetRefDataSource(NULL); m_dbPaymode.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbPaymode.SetColumnHeaders(1); m_dbPaymode.Refresh(); m_bDel=FALSE; } if(flag==0) { MessageBox("您输入的付款方式不存在,请查询后确认","输入错误",MB_OK|MB_ICONWARNING); } m_dbPaymode.Refresh(); m_bDel=FALSE; } m_editPaymode.SetWindowText(""); m_sInputPaymode.ShowWindow(SW_HIDE); m_editPaymode.ShowWindow(SW_HIDE); m_btnSure.ShowWindow(SW_HIDE); } else { AfxMessageBox("请输入付款方式"); }}至此,付款方式设置模块设计完成。
六、系统演示系统设计并编写完成后,编译运行程序,初始界面如图12所示:图121. 系统登录单击“登录”菜单,弹出登录界面,在登陆界面输入框中分别输入用户编号、用户名和密码,如图13所示。
如果用户名和密码都正确,那么就可以登陆系统,系统提示如图14所示。
图13图14如果用户名不存在或密码输入不正确,系统提示如图15和图16所示,将无法进入系统。
图15图16如果未登录就进行其他操作,系统提示如图17所示。
只有登录后才能操作其他功能。
单击“注册”菜单,弹出注册对话框如图18所示。
按要求填写完注册信息,如果注册名未被注册,并且前后两次输入的密码一致,那么系统给出如图19所示提示。
如果前后两次输入密码不一致,系统给出如图20所示提示,此时注册不成功。
图19图202.订餐操作系统登录后,单击“订餐”菜单,弹出“餐桌信息”对话框,如图21所示。
餐桌第一次订餐时,输入餐桌编号、食物编号、数量以及折扣,单击“点菜”按钮,在右侧点菜信息栏中列举了该餐桌所点的菜肴,如图22所示。
图21图22如果餐桌已经订过餐,但是还没有结账,则在餐桌编号输入框输入餐桌号,在点菜信息栏中显示该桌已点的菜。
单击“下单”按钮,即可把点菜信息记录下来。
3.结账操作单击“结账”菜单,弹出“结账单”对话框。
输入桌台号,自动显示对应的点菜信息以及消费金额。
选取付款方式和实收金额后,界面会自动显示找零金额,结果如图23所示。
图234.用户权限设置单击“管理”|“用户权限设置”,弹出“权限设置”对话框,如图24所示,所有用户的信息都显示在数据列表中。
输入要查询的用户编号和名称,单击“更改”,该用户的信息就显示在列表中,结果如图25所示。
图24图25选择权限,单击确定后,如图26所示,用户权限已被修改。
图26单击“显示全部”,结果如图27所示。
图275.菜谱管理单击“管理”|“菜谱设置”菜单,弹出“菜谱设置”对话框,如图28所示。
图28在“菜谱设置”对话框中可以对菜谱进行查找、添加、删除、修改等操作。
6.付款方式设置单击“管理”|“付款方式设置”菜单,弹出“付款方式”对话框,如图29所示。
单击“新增”或“删除”按钮,显示新增付款方式文本框和“确定”按钮,如图30所示。
图29图30在文本框中输入要增加/删除的付款方式,并单击“确定”按钮,将新增或删除所选择的付款方式。
7.注销用户单击“注销”菜单,弹出“注销询问”对话框如图31所示。
选择“确定”,注销成功,如图32所示。
图31图328.系统退出单击“退出系统”菜单,弹出“退出询问”对话框如图33所示。
选择“确定”,则系统退出。
图33至此,系统的全部功能已经演示完毕。
七、结束语经过两个多星期的时间,终于完成了本系统的设计。
虽然本系统有一些漏洞和不完善的地方,但是本系统结合餐饮管理的实际情况,基于数据库设计通用的模块,对餐饮管理的前台和后台操作进行功能模块的设计,实现了餐饮管理的基本功能。
在设计的过程中,遇到了很多的技术上的问题。
例如,第一次接触ADO数据库访问技术,对用ADO来连接数据库不是很了解,出现了很多的问题,设计受到了很大的阻碍。
经过向专业指导老师请教和参阅了有关书籍后,终于把一些问题解决了。
在本次设计中,我懂得了“书到用时方恨少”的道理,发现了自己在专业方面还有很多要提高的地方,在今后的学习中,我一定努力进步!参考文献:[1]萨师煊,王珊.数据库系统概论[M]第3版.北京:高等教育出版社,2000[2]侯其锋,李晓华,李莎.VisualC++数据库通用模块开发与系统移植.北京:清华大学出版社,2007致谢在这次课程设计中,戴小鹏老师给了我很大的帮助。
他对我的精心指导和关心,使我在设计的过程中受到了很大的启发。
特别是他的那份耐心和责任心,使我在今后的学习和工作中受益匪浅。
在此,特向戴小鹏老师表示衷心的感谢!
2023/9/21 22:43:02 1.21MB 餐厅管理系统
1
从零开始带你成为MySQL实战优化高手PDF第128-130讲
2023/7/23 14:15:19 1.19MB mysql
1
win10cuda_10.0.130_411.31_win10cudnn-10.0-windows10-x64-v7.3.1.20(baidu网盘链接+提取码)
2023/5/2 18:13:23 78B cuda cudnn win10
1
仿rose聚合直播盒子源码带教程美满经营版2018-9月份亲自搭建美满运行平台130
2023/5/2 4:21:49 180.71MB coolnetcom
1
共 50 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡