码迷,mamicode.com
首页 > 其他好文 > 详细

KFC宅急送点餐系统开发

时间:2015-06-20 00:20:55      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:

原文作者:@Joe Chael

原文地址:http://blog.csdn.net/qingdujun/article/details/46566307


本文写于该系统开发完成后的第二年,那时候博主大二,有一门名为“程序设计方法学”的课程,老师上课很幽默风趣,也经常给我们带来一些时事新闻。当然,课余也会给我们布置一些作业。其中“KFC宅急送”就是该作业中的一次。

隐约记得当时的要求是这样的:仿照KFC网站的页面,设计出的自己的C/S模式的 KFC宅急送 系统,要求用到设计模式的知识。

本系统由@SnailSet 与 我共同完成,其中@SnailSet负责设计模式设计,博主负责MFC界面设计。

(提示:运行效果展示请直接跳到最后面

以下是当时写的一些文档:

(一)、 设计模式  作者:@SnailSet

本程序共有三种六个类,分别是:
     1、CActivity类 及其子类:
               (1)、CNormalActivity
               (2)、CRebateActivity
               (3)、CReturnActivity
     2、CStatistics类
     3、CGlobal类 
类的关系已经在"KFC点餐UML图.png"中表示,下面对这些类进行简要的文字说明:

技术分享
   一、CActivity类是活动类的基类,给出通过活动计算收费接口。据我了解
活动能够改变最后支付结果的有三种,
     1 正常收费: 不优惠
     2 打折收费: 比如 打九折
     3 返利收费: 比如 满100返10
   分别用下面三个类描述:
     1 CNormalActivity 正常收费
     2 CRebateActivity 打折收费,折率可变
     3 CReturnActivity 返利收费,返利条件和返利可变
   还有什么“买二赠一”等活动不改变最后支付结果,所以程序里不用描述
只要收银员收两份的钱,然后送出一份。

   二、CStatistics类负责统计和维护购买信息,包括计算最终收费结果、打
印小票等。对于计算终收费结果,由于不同的活动会有不同的计算方式,所
以CStatistics类必须维护一个CActivity的指针。采用策略模式。

   三、CGlobal类负责维护菜单和一些全局变量,类内定义了CStatistics型指
针,还定义了一个CGlobal*型的静态变量,并且构造函数私有化,可以保证实
例唯一。采用单例模式。

(二)、MFC界面设计  作者:@Joe Chael

设计思路:
本程序参照kfc网上订餐官网(http://www.4008823823.com.cn/)设计模式仿照而来。
为了与官网界面统一,软件开发时,设置为2个界面,主界面和发票打印界面。
主界面:实现除了发票打印的所有功能,包括餐品的选择,数目和预支统计等等功能。

一、如何使用主界面:
1、界面的左边是餐品的分类,包括优惠直通车,早餐,午餐,夜宵,新餐上映几个选项,可以点击这几个选项,进行不同的选择。
2、界面的右边是餐品展示场所,这个界面是根据你右边选项的选择而动态加载的。
3、每个餐品的下面都有"-","+"号,用户可以直接点击进行选餐,这样设计给用户使用起来也比较方面,如果同一件物品需要选择多份,直接多点击几次"+"就可以了,同时,如果餐品选择多了则点击"-"。
4、用户在选择餐品的同时,可以注意到界面的底部,已经给计算出来了餐品的实际价格(原价),
5、可能用户选择的餐品有优惠的则还有一个优惠后的价格(现价)。
6、当用户选择好餐品之后,只需要点击主界面右下角的立即结算按钮就可以进行付款了。

二、如何使用发票打印界面:
该界面有两个编辑框是可以输入的,分别是 优惠券 和 实收。
优惠券:支持用户使用优惠券,这时候需要输入优惠券的面值。
实收:实际收取用户的现金,填写实收现金的时候,系统会自动计算出应找零多少。

三、如果你是管理员:
1、也许你注意到了,主界面底部有一个管理员的按钮,这是管理员登陆的。
2、点击"管理员"按钮后,会弹出认证页面(这里我已经给默认了账号密码了)。
3、认证成功后会弹出 两个选项 "修改菜价" 和 "增加菜谱"。

修改菜价:需要输入两个参数
          1.菜名 :通过这个找到文件里面的菜资料。(必须存在于文件中,否则提示未找到)
          2.价格 :就是你现在要设定的价格。
增加菜谱:也需要输入两个参数
          1.菜名 :不能与文件中的菜名重复。(重复,则提示添加不成功)
          2.价格 :菜价。

涉及到的知识:

1.树状控件的使用
      ★实例:KFC右边点餐部分
  具体实现:在对话框的OnInitDialog()函数中,构建树列表。
  1)首先,通过LoadIcon()函数加载树列表的ico图标。
  2)然后,通过SetImageList()函数,为树形控件设置图像序列。
  3)最后,开始树桩列表的插入,就是用InsertItem()函数,插入列表时注意句柄的选择
    (树根节点不需要句柄,一级树枝,使用根节点句柄,二级树枝,使用一级树枝句柄...)

2.动态按钮,位图的使用
      ★实例:KFC餐品展示部分,位图和按钮的条件显示与隐藏
  具体实现:主要是在MFC对话框绘制函数OnPaint() 里面实现。
  1)按钮的禁用与解禁:
     禁用:GetDlgItem(IDC_BT3_Z)->EnableWindow(FALSE); //其中IDC_BT3_Z为控件ID
     解禁:GetDlgItem(IDC_BT3_Z)->EnableWindow(TRUE); 
  2)位图的动态显示:
     CPaintDC pDC(this);
     CBitmap tp,*OldBitMap;
     CDC *dc,dcMem;
     dc=GetDC();
     dcMem.CreateCompatibleDC(&pDC);
     tp.LoadBitmap(IDB_BT_WFL);
     OldBitMap=dcMem.SelectObject(&tp);
     dc->BitBlt(645,280,845,480,&dcMem,0,0,SRCCOPY);
     dcMem.SelectObject(OldBitMap);
     DeleteObject(&tp);
     dcMem.DeleteDC();
  3)按钮的隐藏与显示:
     隐藏:GetDlgItem(IDC_BT6_Z)->ShowWindow(SW_HIDE);     //其中IDC_BT6_Z为控件ID
     显示:GetDlgItem(IDC_BT6_Z)->ShowWindow(SW_SHOW);
3.界面大小动态控制
      实例:管理员入口,菜谱的修改和增加
  1)获取分割控件的位置。(获得窗体大小GetWindowRect())
  2)通过此控件的位置,设置窗体大小。(实现窗体的收缩与展开,设置大小函数SetWindowPos())。


(三)、成果展示

1、注意,有菜单(menu.txt),以及账单(tip.txt)在同一目录下面~
技术分享

2、欢迎界面由一张大图构成
技术分享

3、左边是一个树形菜单以供选择

技术分享

4、点击左下角的“管理员”,可以进入系统后台

技术分享

5、系统后台有一些对菜谱等进行操作的选项

技术分享

(四)、原文Demo下载:

(1)http://download.csdn.net/detail/u012339743/8823777

(2)链接: http://pan.baidu.com/s/1hqripG4 密码: 4t65

KFC宅急送点餐系统开发

标签:

原文地址:http://blog.csdn.net/qingdujun/article/details/46566307

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!