软工实践之销售管理系统GUI开发
项目简介
销售管理系统是大型企业等不可或缺的软件系统之一。本次课题是简单的销售管理系统图形用户界面的实现。课题要求:
1、要有可独立运行的可执行程序(.exe);
2、要求该系统具有用户登陆界面、个人信息管理界面、销售管理界面。库存数据的增删改查功能;
3、可采用VS2017的MFC、或者Qt的GUI框架来进行开发。
整体概况
GitHub链接如下:
[1] (https://github.com/13110538870/Software-Engineering/tree/master/SaleSystem)
项目历程
项目分析:
拿到题目后,首先想到用用VS的MFC来进行开发。这个系统应该至少包含6个界面,即至少应该写6个不同的类。分别是:登陆界面(CloginDlg类),个人信息界面(CUserDlg类),销售管理界面(CSellDlg类),库存信息界面(CInfoDlg类),库存添加界面(CAddDlg类),库存删除界面(CDelDlg类)。刚开始没有想到目录界面和显示界面这两个类,随着项目继续进行,逐渐完善。下面是项目的类图。

运行和效果图:
- 工程文件截图:
![]()
- 程序运行截图:
- 登陆界面:
![]()
- 个人信息界面:
![]()
- 销售管理界面:
![]()
- 库存信息界面:
![]()
- 库存添加界面:
![]()
- 库存删除界面:
![]()
- 登陆界面:
项目中遇到的困难:
1.对于项目中所需要的数据文件在C++中不知道用何种方式引入。最后百度得到的方法是用声明宏的方法引入文件;
2.在数据库文件中所存储的商品名称name是string类型,但在MFC中却要使用CString类型。类型转换从CString转为string成为困扰我的主要问题。后来百度了好多相关资料,才知道原来要用中间类型char 来帮忙。即://CString 转为string
CStringA temp;
temp = name;
char ptr = temp.GetBuffer();
tmp.name = ptr;
3.知道了在windows环境下文档的读取中"\r"与“\n"是两个完全不同的概念。一个表示回车,另一个表示换行;而在Unix系统中,只有换行,即”\n";
4.在登陆界面时候,不论你输入的用户名是否正确,都显示“用户名输入错误!”。最后得知是没有更新让控件获取最新的值。应在按钮事件中加上:UpdateData(TRUE);
5.在程序运行时,显示错误“class CSaleSystemApp 没有成员 GetContextMenuManager",最后按照提示,给这个类加了该成员方法,并进行了初始化。使其返回一个指针。(ps:这个是VS2017MFC的小bug,天生就没有加进去该方法,需要你自己查阅文档重写该方法。)
6.登陆界面出现两个bug。(1)直接在编辑框中按回车不需输入任何信息就可以登陆进去---->修复:重写按钮事件。将OnOk注释掉;(2)点击取消的符号直接进入主界面---->修复:重写消息中的WM_CLOSE,使其直接退出程序。
7.学到了两个按钮初始化中重要的方法:
m_combol.SetCurSel(0);//默认选中第一个
OnCbnSelchangeCombo1(); //初始化第一个商品中的数据
8.在加载完商品,进行库存添加功能的时候,自己写的商品名称name总是显示为乱码。同时数据库中的文件也被同步为乱码。最后检查了好多遍才发现。自己在类型转换CString转string时,返回的类型不对,应返回指针,而我返回的是具体的值。
效能分析与测试:
单元测试:
- 登陆界面测试:
![]()
![]()
- 个人信息界面测试:
![]()
![]()
- 销售管理界面测试:
![]()
- 库存添加界面测试:
![]()
- 库存删除界面测试:
![]()
《构建之法》启示:
- 任何一个项目都不是凭空产生的,必定有需求才会到一个项目,所以,需求分析很重要,不能忽视任何一个环节。在进入设计阶段后,一定要认真设计,否则会为后面的编码带来巨大的困难。
- 软工团队的重要性。虽然这次是个人项目,但是明显能感受到一个人在完成项目,尤其是没有项目经验时的困难非常大,团队不仅带来的是新思想,新方式,高效率,还带来了过程中的欢声笑语,这点很重要。
图表:
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 30 |
| - Estimate | - 估计这个任务需要多少时间 | 30 | 30 |
| Development | 开发 | 900 | 1700 |
| · Analysis | · 需求分析 (包括学习新技术) | 180 | 480 |
| · Design Spec | · 生成设计文档 | 30 | 30 |
| · Design Review | 设计复审 (和同事审核设计文档) | 10 | 10 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 10 |
| · Design | · 具体设计 | 40 | 60 |
| · Coding | · 具体编码 | 300 | 450 |
| · Code Review | · 代码复审 | 60 | 150 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 40 | 500 |
| Reporting | 报告 | 240 | - |
| · Test Report | · 测试报告 | 60 | - |
| · Size Measurement | · 计算工作量 | 30 | - |
| · Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 150 | - |
| 合计 | 780 | - |
心得体会:
- 首先呢,得感谢帮助我解决问题的学姐,无论什么时候,我们不懂的东西问她,她都能很耐心的讲解,帮忙。实践,尤其是软件工程实践,不仅枯燥,而且难度大,需要花费很长时间,如果没有学姐和朋友的帮助,相信自己要坚持下去一定很难。
- 然后呢,就是在实践中学到了很多书本上没有学到的东西,接触到新的东西。如:MFC、C++中的STL、Github等。体会到了作为一个开发人员的难处,体会到了一次又一次熬夜修复bug,熬夜写文档的心累......总之,这是一段宝贵的经历,会给我的人生增色不少。
- 更新日志:
10.15 发现了类中缺少一个成员导致的错误,正在处理中。。。。
10.17 发现了登陆页面的两个小bug,紧急修复中。
10.20 作业基本完成,基础版本可以发布,同步到Github中。
10.22.1 发现了商品名称显示乱码的bug,紧急修复中。
10.22.2 bug已修复,但是由于自己开发中使用的VS版本不一致,导致兼容性出现问题,在windows环境下运行参数有部分错误,但是碍于时间问题,只好放弃修复,进行下一个项
目。















浙公网安备 33010602011771号