超市收银系统 Supermarket POS system

本次大作业是利用 C++语言,基于 FLTK 图形库来设计超市收银系统。首先介绍程序的设计思想:

这套程序完全是基于题目所给的要求逐条逐步设计的。我把程序实现大致分为数据层面和图形层面。

数据层面:


程序使用的 Class 一览表

1.基本信息包括商品名称、商品类别、条形码号、单价、计量单位、进价、库存、备注等项。要求能够新增、删除 、修改、检索商品信息,能够检测非法条形码号并防止录入重复信息,允许以文件形式批量导入、导出商品信息。

题目中描述的基本商品对应的是上图中的 Goods 类,类中成员以及成员函数功能基本上和名字一一对应。

可以看出 Goods 类其实是对于一种商品的描述,而超市的商品实际上是 Goods 类的一个集合,因此,对于超市中所所有商品,这里定义了一个 vector来实现,并且该 Goods 向量名字也很形象:Warehouse(仓库)。

定义了该向量之后,搜索商品则变得十分容易,只需通过迭代器遍历访问 Warehouse 即可,而删除商品则是通过将商品信息置为非法值来达到的。

至于检测非法条形码号并防止录入重复信息,这里首先要说明的是,出于编程工作量以及实际商场运作 的考虑,没有提供手动输入商品信息的接口。检查条形码的工作实际放到了从文件导入商品信息的过程中。

可见上述代码分别进行了条形码检测(位数是否符合)以及是否重复的检查,该套程序默认有效条形码是八位整数(eg.10239523)。

至于从文件输入输出,这在之前的上机题目中已经有类似的练习,直接利用文件流便可以达成。

2.生成一次购买物品清单,包括消费日期、物品名称、单价、数量、总价等。 收银找银功能,根据收入金额计算找银金额。

对于物品清单,仍旧是文件操作,生成的收据清单样例如下

其中涉及的类有 Date 类,专门用来管理和日期相关的操作。同时,针对购买行为也专门涉及了

Purchase_action 类,这样可以将商品和日期之间关联起来。方便后面进行统计操作。

3.根据选择的时间跨度,生成营业报表。包括总营业额、利润曲线、各类商品的收益比重等统计功能

关于搜寻给定日期内的消费记录( Purchase_action ) , 由于在进行消费的时候创建了

Purchase_action 的向量,因此也是在该向量(History)中进行迭代器遍历,寻找对应日期以及对应商品的利润信息。此处需要注意的是,按商品归类的利润存储在 Goods 类的成员 profit 中,而按日期归类的利润则存贮在 ProfitPerDay 类中。

图形层面:

仔细阅读 main 函数会发现,该函数中主题部分都是定义 FLTK 库中的对象。此处主要说明程序中用到的一些对象:

Fl_Input

这个类是 FLTK 库中用来管理图形界面输入的。其中用到的具体类有:

Fl_Int_Input

用于定义仅仅能输入整数的输入框(0-9)。

Fl_Float_Input

用于定义仅仅能输入浮点数的输入框(0-9 & . )。

创建这些对象的时能够生成图形界面的文本输入框,而 FLTK 的事件触发(按下按钮,敲击回车, 输入框数值改变等)是通过调用对象的 when 函数(不仅仅对于 Fl_Input 类,对所有的可互动类均是如此)。而触发之后的操作则是通过配置该对象的 callback 函数来实现。举例而言,如果要读入某个输入框的输入值,那么需要针对该输入框(对象)写一个读入(变量赋值)函数,并且将函数作为形参传递给 callback 函数。这些函数统一都放在了 FLTK_functions.h 文件中。

Fl_Output

如其名所示,是用于管理 FLTK 输出的类。本程序中利用该类来生成输出文本框。改变其输出值只用调用其成员函数 value 即可。

Fl_Button

如其名所示,是用于管理 FLTK 按钮的类,使用按钮的原因是显式地告诉用户如何进行操作,直接按回车等方法总是容易让人感觉不直观,也不容易知道操作的是哪一部分。因此,按钮的作用是将输入和输出进行关联。

Fl_Box

这个类在本程序中的作用主要是标清楚各个区域,让用户比较直观地找到在哪里搜索,在哪里消费,在哪里查看统计信息。

至于绘图以及输出各个商品所占利润百分比,程序中采用的是 fl_draw 系列的函数。需要注意的是,FLTK 并不支持直接调用这些函数进行绘图,必须将其作为用户自定义类中的成员函数才能使用。这也是程序中 profitCurve 类的设计初衷。

最后附上一张程序运行结果图:

关于在Xcode中配置FLTK库

其实配置FLTK库才是比较重要的一点。在MacBook上使用过Visual Studio,按照老师主页上的配置确实可以使用FLTK库。但奈何自己的MacBook跑一会Windows就变铁板烧,所以还是想用Xcode,但无奈网上并没有很直接的教程,因此打算自己在这里记录一下。

这里使用的是Xcode 8.2.1 + FLTK 1.3.4,下载FLTK 1.3.4解压之后,打开./ide/Xcode4/FLTK.xcodeproj ,Xcode选择Automatically Create Schemes.注意这张图中的FL文件夹,我们待会需要用到。

对于FLTK开发不是很熟悉的同学(比如我),上图中左侧的Tests文件夹下全是例程,可以参考,看几个例程(input,output,line_style)之后,基本上FLTK的套路能学个大概。

如果想要运行例程,在下图中点击browser(因为我这里选的是browser…)然后在下拉菜单里选择你想要执行的Scheme,编译运行即可。Scheme对应的源码可以在上述Tests下同名文件夹中找到。

打开这个FLTK.xcodeproj目的主要是为了编译出FLTK的库,我也是自己胡乱摸索出来的,可能有更好的办法,下面讲一下具体过程。

给出的例子是绘制红白相间的棋盘,我已经将源代码上传到tutorial文件夹下。

1.首先,在打开的FLTK.xcodeproj中任选一个Scheme,在Xcode顶部标签Product下选择Archive(图中所示为"hello"这个scheme生成的),编译完毕后会显示如下窗口:

2.选择Export,弹窗中选择

3.点击Next,然后在你保存库的地方,就会出现一个文件夹,点进去之后,右键hello("hello"这个scheme生成的),选择”显示包内容“,进入Content/Frameworks就可以看到FLTK的库了,请务必记得将这个fltk.framework文件拷贝出来。

4.接下来我们就要将这个库和自己的Project关联起来,首先创建一个Command line tool 的 Project(FLTK_Tutorial),导入红白棋盘的源文件,在project的选项中选择Build Phase,在 Link Binary with Libraries中,选择"+"。

5.在Add Another…中选择刚刚拷贝出来的fltk.framework

如果此时编译,会提示找不到头文件,因此,接下来要做的是将FLTK的头文件包含到Project中,考虑到未来可能还要使用FLTK库,这里是将FLTK添加到系统的framekwork中。

6.将fltk.framework文件拷贝到 /Library/Frameworks文件夹下,可以看到这个文件夹下有很多framework文件夹,注意此步骤需要管理员权限

7.比较蛋疼的是,这个fltk.framework中虽然已经包含了头文件,但是并不全(142个),差一个abi-version.h文件,因此,我们回到最初的FLTK解压文件夹,在/FL文件夹中找到abi-version.h文件,然后再回到/Library/Frameworks下,打开刚刚拷贝进来的fltk.framework,在/Version/A/Headers/FL/ 下,将abi-version.h拷贝进来。

8.集齐了头文件之后,我们需要在Xcode中设定头文件搜寻路径。还是在Project的选项中,这次选择Build Setting,在Search Paths中按照下图进行设置。

设置完毕后理论上编译就可以执行了。效果如图:

♻️ 资源

大小: 1.97MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87248361

基于C+++FLTK实现(WinForm)超市收银系统【100010032】相关推荐

  1. java课设超市收银系统_基于jsp的超市收银系统-JavaEE实现超市收银系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的超市收银系统, 该项目可用各类java课程设计大作业中, 超市收银系统的系统架构分为前后台两部分, 最终实现在线上 ...

  2. 基于B/S的超市收银系统

    技术:Java.JSP等 摘要: 随着经济,技术的发展,传统超市收银的缺点越来越突出,具体体现在以下几个方面:1.商品没有很好的管理机制.2.出售商品与库存关联关系不强.3,浪费大量人力,时间来统计. ...

  3. 基于JSP的超市收银系统

    技术:Java.JSP等 摘要: 随着经济的发展和人口的增长,人们对于日常生活的便捷与舒适程度有了越来越高的要求.据统计,在大中型城市,人们日常生活用品大多在超市采购,超市因其物品的丰富性.选择的自主 ...

  4. 超市收银软件测试自学,超市收银系统测试计划.doc

    文档介绍: <超市收银系统>测试计划:张润学号:12740125班级:软件工程(1)班指导老师:路飞目录1.引言 31.1编写目的 31.2背景 31.3定义 31.4测试目标 32.计划 ...

  5. 【单片机毕业设计】【mcuclub-307】超市收银机 | 超市收银系统 | 超市结账系统 | 商品扫码

    设计简介: 项目名:基于单片机的超市收银机的设计.基于单片机的超市收银系统的设计.基于单片机的超市结账系统的设计 单片机:STC89C52 功能简介: 1.通过扫码枪可扫描条形码,进行商品的购买 2. ...

  6. 超市收银程序_超市收银系统案例|千平超市再开2家,星耀助力门店年关创收...

    思迅天店星耀版收银系统案例_超市收银系统:千平超市再开2家,星耀助力门店年关创收 年关冲刺,收银压力,库存管理...... 都是现在超市老板们的工作重点 近期开业 横溪购物中心和汇隆购物广场 妥妥的千 ...

  7. 收银系统 mysql数据库_某大型超市收银系统数据库成功恢复

    SQL数据库表结构成功修复 [用户单位] 昆明某大型超市 [数据恢复故障描述] 由于操作系统错误,导致系统无法正常使用, 技术员在维护过程中不小心把整个磁盘初始化, 磁盘数据全部丢失,导致超市收银系统 ...

  8. C/C++超市收银系统

    C/C++超市收银系统 (三)超市收银系统程序设计 要求: 1)都有菜单页,有用户登录和退出环节,有退出系统菜单项; 2)采用结构体数组变量完成数据的储存(用动态分配结构体数组或单向链表加分) 3)至 ...

  9. 超市收银系统c语言程序用c 的,C语言 超市收银系统

    C语言写的超市收银系统,结构体储存数据 --------------------------------------- 时间:2015-7-1 16:44:21 吴俊龙 C语言专周设计 超市收银系统 ...

最新文章

  1. ACL 2021 最佳论文:最优运输理论开启词表学习新纪元
  2. 万恶之源:C语言中的隐式函数声明
  3. CLR via C# 笔记系列 - clr的执行模型
  4. 好程序员web前端分享CSS Bug、CSS Hack和Filter学习笔记
  5. ulimit: command not found 问题解决
  6. 医学遗传学词汇英语术语英文(Glossary) 5
  7. 计算机word制作成绩单,如何用word批量制作学生成绩单?
  8. 4G标准LTE FDD与LTE TDD的不同
  9. CAXA2007、2011,2013二次开发
  10. 身份证识别仪阅读器读卡器谷歌google chrome网页浏览器WEB二次开发包
  11. seacms_locoy.php,seacms_v6.6
  12. pinctrl子系统初始化RGB灯
  13. MBR与GPT,BIOS与UEFI..总结
  14. MS SQL 2008 Express 下载
  15. 使火狐浏览器默认在新的标签页打开书签
  16. [源码和文档分享]基于Java Swing JFream 组件的趣味推箱子小游戏
  17. 北京为何不能取消限购 业内:需闯四大关
  18. 8月VR大数据:Quest 2串流份额大幅下跌,疑似Steam统计出错
  19. 图像检索研究进展:浅层、深层特征及特征融合
  20. PostgreSQL无法连接Server(报错could not connect to server)

热门文章

  1. Yahoo前端的35条优化军规
  2. 华硕主板使用nt6 oem loader激活之后重启卡在ASUS LOGO位置无法进入BIOS界面
  3. SQL map自动注入,利用工具注入
  4. 12306自动抢票软件哪个好?记者亲测体验
  5. 豆瓣电影:TOP250榜单爬虫
  6. 六、数据结构笔记:树[一](基本知识与存储方式)
  7. 【Lua】xLua逻辑热更新
  8. 检测胰岛素含量,是衡量动物模型生理状态的基本指标
  9. rgb格式颜色与#000000十六进制格式颜色的转换原理
  10. 安装WIN7时提示“缺少所需的CD/DVD驱动器设备驱动程序”的解决办法