C#开发“零售店”商品销售与管理系统
一、题目与要求
1.1 问题提出
1.2 本系统涉及的知识点
- 可视化程序设计基础;
- C#编程语言;
- MySQL 数据结构设计;
- ADB、listView、DataGridView;
- 面向对象编程;
1.3 实现功能
- 数据库设计;
- 商品查询:id、名称、厂家…
- 商品管理:添加、修改、删除、查询;
二、数据结构
本系统包含用户表、商品表、订单表三个表单,并在数据库中添加一些触发与引索,使用阿里云的 RDS-MySQL 数据库,数据库版本为 8.0.16。
2.1 用户表 User
- 用户编号:int 类型,真动增长,主键,字段名:_id;
- 姓名:varchar 类型,非空,字段名:name;
- 用户名:varchar 类型,非空,添加唯一引索,不可重复,字段名:uname;
- 密码:varchar 类型,非空,字段名:password;
- 身份:varchar 类型,非空,默认用户,字段名:role;
- 销售额:decimal 类型,非空,默认为 0.0,字段名:Sales;
2.2 商品表 commodity
- 商品编号:int 类型,真动增长,主键,字段名:id;
- 商品条码:varchar 类型,非空,添加唯一引索,不可重复,字段名:Barcode;
- 商品名称:varchar 类型,非空,字段名:name;
- 生产厂家:varchar 类型,字段名:factory;
- 商品类别:varchar 类型,字段名:category;
- 商品价格:decimal 类型,非空,默认 0.0,字段名:price;
- 商品销量:int 类型,非空,默认 0,字段名:sales;
- 商品库存:int 类型,非空,默认 0,字段名:sum;
2.3 订单表 sales
- 订单编号:int 类型,真动增长,主键,字段名:id;
- 订单详情:varchar 类型,内容商品名*数量,用 | 分隔,字段名:val;
- 订单金额:decimal 类型,非空,默认为 0,字段名:amount;
- 操作编号:int 类型,非空,对应用户编号,字段名:user_id;
- 操作姓名:varchar 类型,对应用户姓名,字段名:user;
- 订单时间:timestamp 类型,非空,自动填写插入时间,自动名:time;
触发:当插入时候,自动更新用户表的销售金额。
三、程序简述与功能
3.1 程序简述
本程序除了完成作业要求外,还美化了用户界面,优化了用户体验,包含了用户表、商品表、订单表三个数据源,并提供了商品管理、用户管理、订单管理、收银台等子系统。本系统可以提供用户检验、权限判断,商品的管理、用户的管理和收银,并将所有可能的异常进行了异常处理。
3.2 实现功能
- 登录验证与在线/权限检验;
- 用户注册;
- 商品管理:包括增删改查,条件筛选,模糊查询,批量修改;
- 收银台:包括添加商品、修改数量、移除商品、计算金额、统计订单;
- 订单管理:包括订单浏览,条件筛选,模糊查询,按时间过滤等;
- 用户管理:包括浏览用户,修改资料,删除用户,修改权限,模糊查询,条件筛选等;
- 补充、添加商品库存;
3.3 程序流程图
3.3.1 主程序
3.3.2 商品管理模块流程图
3.3.3 收银台模块流程图
3.3.4 订单管理模块流程图
3.3.5 用户管理模块流程图
3.3.6 注册/编辑模块流程图
四、软件运行详情
4.1 登录模块
登录模块可以执行用户身份验证和用户注册的简单操作,包含登录页面和注册页面两个窗口。
4.1.1 显示密码
按住密码框右边的小灯泡会显示密码明文,松开会继续显示*
4.1.2 注册
点击登录页面的注册按钮会弹出注册页面,可以进行用户注册,默认会锁定身份选项,页面会自动检验用户名和密码的格式,当用户名和已有用户重复时候会提示用户名已存在(详见 3.1.3 异常处理)。此页面为弹出页面。
4.1.3 异常处理
当用户名、密码或者身份选则错误会弹出提示窗口,提示错误。
当注册格式不正确时会弹出注册失败,并提示格式错误原因。
当用户名与已经存在的用户重复时会提示用户名重复。
4.2 主界面
主界面为程序的根入口,提供进入各个分模块的入口,并可以对用户权限进行判断,根据权限选择性的开放入口,其中包含单独的库存补充界面;
4.2.1 库存补充
当用户为管理员时,可以打开添加库存界面,可以根据商品的编号或者条码批量补充商品库存。此页面为弹出页面。
4.2.2 异常处理
当编号或条码在商品库中不存在时,会弹窗提示商品不存在。
当在主页点击返回主页时,会提示当前页面已经是主页。
当用户非管理员审核,点击添加库存和用户管理会提示权限不足。
当用户退出,当部分弹窗窗口为关闭时候,系统会检测用户登录和权限状态,并弹窗提示。
4.3 商品管理模块
商品管理模块,可以浏览商品库中的全部商品信息,并根据价格、库存或者销量的大小进行筛选,也可以根据编号、名称等属性进行模糊查询。此页面可以编辑、删除、添加商品。
4.3.1 筛选与查询
使用下拉框可以选取价格、销量、库存属性,并选取 ≥、=、≤ 比较条件,填入数据,既可以进行数量筛选。
使用下拉框可以选取编号、条码、名称、生产厂家、类别属性,填入数据,既可以进行模糊查询。。
4.3.2 添加
当用户是管理员时,点击添加会弹出添加页面,可以添加新的商品,添加页面会进行格式判断,当条码重复会弹窗提示。
4.3.3 删除
当用户为管理员时,在表格中选取要删除的选项,点击删除按钮即可删除。
4.3.4 编辑模式
当用户是管理员时,点击进入编辑模式按钮会进入编辑模式,此模式下用户可以直接双击某一个单元格进行修改,当格式正确时候点击任意部位将自动保存。再次点击编辑模式,即可退出编辑模式。
4.3.5 异常处理
当用户非管理员但进入添加页面,会提示权限不足。
当添加数据格式不正确(如价格非纯数字等)或条码重复时会弹窗提示条件异常。
当筛选或查询时,填入数据格式不正确(如数量非纯数字等)会弹窗提示筛选出错。
4.4 收银台模块
收银台模块,可以填入商品编号或条码以及数量自动添加到购物车,会自动判断库存,当添加购物车时会自动计算价格,在左边会提供快捷商品条码提示,显示所有的商品简单信息,填入收款金额点击确认会自动计算找零,并同时更新库存数据以及订单库。选中某一行时,可以修改数量或者将其删除。
4.4.1 异常处理
当添加商品数量大于库存时会提示库存不足。
当所填入商品条码或编号不存在时,会提示添加异常。
4.5 销售详情模块
销售详情模块可以查看过往的收银订单详情信息,包括订单编号、订单详情、金额、操作的收银员编号及姓名以及交易详情时间,并可以根据金额、时间或者前天信息进行筛选或查询。
4.5.1 属性与查询
使用下拉框可以选取金额或者时间,并根据 ≥、=、≤ 进行筛选。
使用下拉框可以选取订单编号、订单中包含商品、收银员的编号或者姓名进行模糊查询。
4.5.2 异常处理
当筛选时间时,输入的时间格式不正确时候会弹窗提示筛选出错,并给出时间格式规范。
4.6 用户管理模块
用户管理模块可以显示所有用户信息,并可以在此添加、编辑或者删除用户,也可以根据销售业绩或者属性进行筛选和查询。
4.6.1 添加与删除
添加页面会调用用户注册模块,通过注册来添加页面。
选中某一行后,可以利用删除按钮将其删除。
4.6.2 筛选与查询
利用业绩下拉框可以使用 ≥、=、≤ 条件,进行销售业绩筛选。
利用下拉框可以根据姓名、用户名、权限条件进行模糊查询。
4.6.3 编辑用户
选取某一行后,点击编辑按钮会调用注册界面并传入选取的用户数据,可以在此基础上进行修改。
4.6.4 异常处理
当添加用户时候用户名已经存在会提示用户名重复。
4.7 * 隐藏彩蛋
使用鼠标连续点击主页的标题会弹出关于软件的信息。
五、心得体会
这一次课程设计充分考验了个人的 C#编程能力,是对本学期可视化程序设计所学内容的一次全面检验,在完成过程中,我通过查询资料了解到了许多 C#的便捷性,感受到了 Windows 平台上通过可视化的方式开发应用程序的简洁性,这不得不让人打心底里钦佩当年设计出可视化窗口和.net 组件的前辈们的高瞻远瞩和高明学术。
在本次课程设计中,我使用了诸如用户、商品等自定义对象,以及系统等静态方法类,这也是对面向对象编程能力的一次提升,并且此次作业,我所写的商品管理系统,包含了商品库、用户库、订单库等三大表单,以及商品管理、收银台、订单管理、用户管理等各个分模块,在一定程度上有了一定的实用价值,确实可以在一些小的商店中替代传统的计算器进行收银、商品管理等操作,如果配合扫描枪也许就真的可以成为生产力,因此这一次的课程设计也让我对编程与社会生活有了非常好的联系。
相信有了这一次开发经验,日后可以编写开发出更加具有实用价值,界面更加精美能够带来实际效用的应用软件。
六、参考文献
- 夏定纯. C#w1 Ch01---概论[DOI]
- 榴月十三. VS2015 代码自动对齐.CSDN. 2016-1-14