# 1.题目要求及分析
本次大作业的要求是完成一个房贷计算器的设计,实现商业贷款、公积金贷款和组合贷款的利息计算三种功能。并且使用 Qt 或其他的界面库设计人机交互界面,要求界面友好方便使用。并且必须使用面向对象的思想进行设计,使用 C++ 编程。
通过对题目的理解和分析,为了在实际开展时有清晰的方向,并能提高学习的效率,我将要求分为了以下几个步骤:
- 学习房贷计算的相关知识,了解不同贷款的区别,通过调研我发现在贷款计算方式上分为等额本金和等额本息两种,所以也要学习不同方式的就算方法;
- 掌握了房贷相关的基本知识后,理清思路用面向对象的思想设计程序,将琐碎的问题系统化分类,进行程序的设计,即完成基础实现代码,检验程序的可运行性;
- 学习 Qt 的相关知识,掌握界面设计的方法,其中包含界面和控件的设计和使用;
- 用所学的 Qt 知识布局界面,再将实现代码根据 Qt 中函数的设计修改,以达到在自己设计的界面中可以实现计算器的正常运行;
- 多次调试和优化自己的设计,尤其注意人机友好型,使程序具有一定的健壮性,不会因为用户的输入错误而引起程序的运行失败。
# 2.代码设计思路
通过对房贷相关知识的调研,我基本了解了商业贷款、公积金贷款以及组合贷款三者的区别和联系。并且通过搜索网页上所提供的房贷计算器,我发现对于贷款的计算方式也分为两种:等额本金和等额本息。并且这将作为在设计时的重点和难点,我也在这方面上投入了较多的时间学习。
对于整个房贷计算器来说,我将它们分为两大类:商业贷款和公积金贷款为一类(称为 Shang 类),组合型贷款单独为一类(称为 Mix 类)。这样分类的依据是:前者的计算思路一致,唯一的不同点仅在于二者的贷款利率不同;后者是综合了商业贷款和公积金贷款,所以在 Shang 类设计完成后,只需将两者结合,构造出新的 Mix 类即可,可以使设计更为简单(流程图见图 1-1)。
(一)商业贷款、公积金贷款类
对于商业贷款、公积金贷款统一写为 Shang 类,它们的计算方式也分为两种:按面积单价来计算和按贷款总额来计算。所以 Shang 类的构造函数设计了重载函数来实现,一个的参数是用户输入的面积单价、总面积、按揭成数、年数和年利率;另一个的参数是单款额、贷款年数和年利率。其目的都是得到总价(all(仅用于面积单价时))、贷款总额(total)、按揭月数(month)、首月月供(firstmonth)、和利息(lixi)。
得到相关数据之后,设计了成员函数 Cal1()和 Cal2()来完成计算,利用等额本金、等额本息的计算方式得到每月还款额、总利息。下面介绍计算方法:
- 等额本金:
- 每月还款额 = 每月还款本金 + 每月还款利息;
- 每月还款本金 = 贷款总额/贷款月数;
- 每月还款利息 = 贷款本金余额 * 贷款月利率;
- 总利息 = (还款月数 +1)*贷款总额*月利率/2;
- 等额本息:
- 每月应还款额 = 贷款本金*月利率*(1+ 月利率)^ 还款月数/((1+ 月利率)^ 还款月数-1);
- 总还款额 = 每月还款额 * 月数;
计算得出结果后,由于不同方式的贷款输出的形式也不同,所以设计了四种不同的输出方式,即为 Show i()函数。具体的设计见流程图 1-2。
![](https://www.writebug.com/myres/static/uploads/2022/6/28/7eee19450c15df0fa89aa2cc628d5fc9.writebug)
图 1-1 总流程图
![](https://www.writebug.com/myres/static/uploads/2022/6/28/3f43c078db8b2d7c02577faf3e88e8d7.writebug)
图 1-2 商业贷款&公积金贷款
(二)组合型贷款类
由于商业贷款、公积金贷款类已经在计算方面实现了代码的正确性,所以在组合型贷款类内可以继续使用上一类中的计算方式。因此在组合型类的私有成员里定义了两个 Shang 类对象分别为商业贷款的对象和公积金的对象,因此在 Mix 的构造函数里只需初始化列表,给这两个对象赋对应的值即可。这样在 Mix 的计算函数 Calculate()中只需分别调用 Cal1()和 Cal2(),再将结果相加即组合型贷款额。由于输出形式与前面的不同,因此又定义了两个 Show i()函数来输出结果。具体的设计见流程图 1-3。
![](https://www.writebug.com/myres/static/uploads/2022/6/28/d6d458c9d1121fe0e22135660b011173.writebug)
图 1-3 组合型贷款
# 3.Qt 界面设计思路
通过学习相关知识和调研不同类型的房贷计算器的界面设计,我使用了 stack widget 实现不同页面的切换,在主页上设置了相应的按钮,用户可通过点击对应按钮进行计算。主页设计如图 2-1。
其次分别设计了五个页面来实现五种计算方式,并且在一个计算页面上可重复多次输入不同数据,而且记录不会被删除,可通过滑动条上下翻看对比,这样有利于用户在使用时对比不同方式带来的差异,省去了退出再进入的繁琐流程。如果用户在当前页面想选择不同的方式来计算,可点击显示窗口下的“返回首页”按钮重新选择计算方式。
在设计的细节里,由于单位面积总额计算时涉及到了按揭成数问题,在这里我使用了 combo box 即下拉框的形式设计,更加能使操作简便、美观。为了更好实现人机友好型,在利率的处理上,对话框的形式设计成了只读,意味着在用户输入了按揭年数之后,点击相应的利率对话框利率将会自己显示,这对于用户将是更友好的设计。
由于按揭年数不可超过 30 年,如果用户输入的年数大于 30 年,程序将会弹出警告窗口,提示用户重新输入。如图 2-2。
![](https://www.writebug.com/myres/static/uploads/2022/6/28/cb7dbaabead6d7c8ba5adf62fe9792bd.writebug)
图 2-1 主界面
![](https://www.writebug.com/myres/static/uploads/2022/6/28/c886c1d2d78bde1f9bb9eb719604ec78.writebug)
图 2-2 警告信息
# 4.调试过程及运行结果
在运行基本代码时我的结果出现了指数 e 的形式,但这对于用户并不友好,因为用户并不知道 e 代表什么意思,而且在 float 型的计算时最后会出现小数点后三四位的情况,这与实际情况并不符合。所以在输出的 Show()函数那里我将输出的数据全部强制转换为 int 类型,这样这些问题就解决了。运行结果如下图 3-1(a)和 3-1(b)。
非常幸运的是这次基本代码实现时程序并没有出现大问题,所以代码上并没有花费很多时间。相反的,在 Qt 的代码实现上,我确实遇到了很多瓶颈。
首先是如何将代码导入自己的界面,并不是简单的将自己的函数插入成文件,通过不同的尝试,我将自己的类的私有成员都放在了 QMainwindow 的头文件中,再通过不同控件的作用,调用相应的类的成员函数,以此来实现计算器的运行。
对于 Qt 的控件,一开始对于槽函数的理解并不准确,所以导致了程序运行出来的结果有问题,通过 qDebug()的调试方法我知道了对于 line edit 控件的使用不能简单使用赋值,而要使用槽函数。如图 3-2,从这个错误中我明白了如果不使用槽函数,那么 line edit 值始终为默认值 0,与输入与否并没有关系。
![](https://www.writebug.com/myres/static/uploads/2022/6/28/b79650cbd9cf6037d63598e83b4307fd.writebug)
图 3-1(a)
![](https://www.writebug.com/myres/static/uploads/2022/6/28/8f8fe165
基于C++和QT实现的房贷计算器设计.zip
版权申诉
5星 · 超过95%的资源 127 浏览量
2022-06-29
11:44:47
上传
评论 1
收藏 441KB ZIP 举报
shejizuopin
- 粉丝: 9402
- 资源: 1288
最新资源
- 《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第1章docker基础(1.1-1.4)
- 基于python实现的水下压缩空气储能互补系统建模仿真与经济效益分析+源代码+论文
- 华中科技大学-自然语言处理实验,Bi-LSTM+CRF的中文分词框架,并且利用基于深度学习的方法进行中文命名实体识别++源码报告
- 基于动态罚函数的铁路车流分配与径路优化模型python源码
- 鱼群算法求解组环问题python源码+文档说明
- 基于决策优化的多波束测深测线规划模型MATLAB代码
- 课程设计-基于python实现的多目标优化算法求解带时间窗的车辆路径规划问题+源代码+文档说明+界面截图+pptx
- 基于通信信号与通信系统的MATLAB仿真源码-课程设计
- 嵌入式-信号机制(概念,发送,定时,捕捉,SIGCHLD 信号实现回收子进程)
- c语言管理系统大一大二笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈