锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 学员作品 / 高中生2个月后作品-银行信贷客户资源管理模拟系统
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

关键词:学2个月后立即能写2千行软件,整洁美观多视图界面设计,子框架内嵌控制条式窗口,SQL的LIKE子句,多行业处理,复杂统计逻辑,冒泡排序。

整体功能描述

是一个实现方便银行信贷员个人通讯的应用程序,通过这个程序信贷员可以看到借款人的各项信息,还可以对每个客户的信息进行检索,添加,修改,删除,加入到黑名单,自动加入黑名单,加入良好客户名单的操作。还可以显示信贷员的任务信息和信息进度,并能设置任务的数额。可以看到黑名单和良好客户名单中借款人的信息并能进行检索操作。还可以统计每个贷款人所属行业贷款回收率和各个行业资金需求率,在添加信息的时候还能同步显示所要添加行业的具体信息。

架构设计

通过多视图和对话框技术,组织各个子功能,使各功能能同时打开。
架构设计

数据库设计

设计了4个表:
第一个表PERSON:通讯人的ID,姓名,性别,年龄,住址,电话,借款日期,借款数目,还款日期,行业。
第二个表ERRAND:任务收款金额,任务贷款金额,现贷出款金额和现收回款金额。
第三个表BLACKLIST:通讯人ID,姓名,贷款日期,贷款数目,还款日期,地址和电话,行业。
第四个表WHITELIST:通讯人ID,姓名,贷款日期,贷款数目,还款日期,地址和电话,行业。
ODBC配置的数据源是: NRDB。

主界面系统

界面设计

运用多视图机制,使界面更加的整洁。
添加了DALOGBAR,用来显示操作信息,历史记录和行业状况。
在主界面中制作两种菜单项,一种做未登陆界面,另外一种做已登陆界面。
设计一个工具栏可以快速登陆。

功能设计

未登陆菜单的按钮依次是:系统,查看和帮助。
已登陆菜单的按钮依次是:系统,编辑,查看,借款人信息,黑名单,良好客户信息,任务信息,统计,窗口和帮助。
在工具栏中添加图片,可以快速登陆。

具体编写流程

  1. 创建主框架类,添加一个WM_CREATE消息,创建工具栏并加载工具栏图标。定义一个CToolBar类的对象,写一个隐藏工具栏图标的类和一个显示工具栏图标的类,在头文件中声明,在这里调用隐藏的函数。
  2. 在工具栏中添加各个功能的命令消息。创建一个子框架类,通过子框架以上下文的方式创建多个视图。
  3. 在stdafx.h中加入数据库的头文件,并在APP中打开数据库和声明并extern,在主框架的头文件中定义菜单的指针,BOOL型的两个标记,一个句柄和5个CBitmap对象。
  4. 创建主框架指针,先加载未登陆时的菜单,设置显示文本为:未登陆。更新窗口并加载大图标。
  5. 创建登陆的消息函数:设置菜单,设置窗口显示文本为已登陆并把工具栏显示出来,获得菜单的指针并设置菜单各项的图片。
  6. 创建断开系统消息:把个菜单项指针赋为NULL并对窗口发关闭消息,设置菜单为未登陆时的菜单,并设置窗口文本为未登陆,并隐藏菜单栏。
  7. 创建子框架类,包含头文件,创建CREATE消息函数,创建对话条,操纵对话条上的CTABCTRL控件,设置位图,设置隐藏和显示CLISTBOX控件。
  8. 手动添加用来控制显示和隐藏CLISTBOX控件的消息:获得各个控件的指针,设置隐藏并设置添加的显示文本。
  9. 手动创建一个消息函数来处理接受到的消息:首先把接受到的指针转出来获取数据,创建CLISTBOX指针并接受窗体指针,清空LISTBOX的显示内容,统计数据,添加到LISTBOX中显示。

借款人信息子系统

表设计

表的名称是:PERSON。
表里的字段有:ID,NAME,SEX,AGE,ADDRESS,PHONE,LOAN_DATE,LOAN_SUM,PAYBACK_DATE,BUSINESS。

界面设计

放置7个BUTTON,4个STATIC TEXT,1个EDIT,1个GROUPBOX,2个DATETIMEPICKER,2个CHECKBOX,1个LIST。

功能设计

LIST显示数据,GROUPBOX用来包含检索的条件和检索按钮。
2个CHECKBOX用来提示是否根据贷款时间或贷款姓名来检索,
STATIC TEXT做界面提示,贷款时间提示和姓名提示。
DATETIMEPICKER中可以选择检索的开始时间和结束时间。
EDIT中输入检索的姓名。
BUTTON依次为检索信息,添加信息,修改信息,删除信息,加入黑名单,自动加入黑名单和加入良好客户名单。是各个功能的入口。

具体编写流程

  1. 创建一个新类,名为CPersonMesDlg,绑定各控件的变量。
  2. 创建一个从CRecordset类派生的新类,来与数据库关联,选择数据库名称为NRDB,选择表为PERSON。
  3. 写一个更新列表框的函数供其他函数在对对话框进行操作后来重新显示界面上最新的数据。
  4. 创建初始化窗口的函数,显示界面数据。
  5. 在检索信息按钮中写入检索的代码。
  6. 在删除信息按钮中写入删除的代码。
  7. 在添加信息按钮中写入添加界面的入口代码,并更新LIST列表框。
  8. 在修改信息按钮中写入代码:判断是否有选择,并获得选择的ID,得到列表框中选择ID的各个信息,名字、性别、年龄、地址、电话、贷款日期、贷款数目、还款日期。并把它们存入添加界面的各个变量中,打开添加界面并更新列表框。
  9. 在加入黑名单按钮中写入代码:判断是否有选择,并获得选择的ID,得到列表框中选择ID的各个信息,名字、地址、电话、贷款日期、贷款数目、还款日期。打开提示是否加入黑名单的提示界面并做返回值的判断,这里要重新获得一次选择的选项,遍历各个被选中的ID并删除,把获得的各个变量加入到黑名单中并更新列表框。
  10. 在自动加入黑名单按钮中写入代码:打开提示是否加入黑名单的提示界面并做返回值的判断,获得当前时间并保存到CTime变量中,遍历表中数据并判断是否大于还款日期,大于则加入黑名单,更新列表框。
  11. 在加入良好客户信息按钮中写入代码,代码和加入黑名单的类似,不过存入信息的表不一样。
  12. 创建清空窗口指针的消息:获得窗口指针并赋为NULL。

添加信息子系统

界面设计和功能设计

9个STATIC TEXT,6个EDIT,1个GROUPBOX,2个DATETIMEPICKER,1个BUTTON
9个STATIC TEXT,3个COMBO BOX依次做名字、性别、年龄、地址、电话、贷款日期、贷款数目、还款日期、所属行业的提示。而EDIT,DATETIMEPICKER,COMBO BOX做这些信息的输入。
BUTTON为确认添加信息的按钮。

具体编写流程

  1. 创建一个新类,名为CCliMesAddDlg,绑定各控件的变量。
  2. 添加一个OnInitDialog()做初始化并写入代码:限定电话数字的字数,并初始化界面上的时间。
  3. 在确认按钮中写入代码:更新界面数据到变量,为各种输入的信息添加限制,添加信息到PERSON表。
  4. 手动添加消息来让消息函数响应:包含头文件,通过住框架来获取子框架的指针,发消息,传指针和数据。

修改信息子系统

界面设计和功能设计

9个STATIC TEXT,6个EDIT,1个GROUPBOX,2个DATETIMEPICKER,1个BUTTON,3个COMBO BOX
8个STATIC TEXT依次做名字、性别、年龄、地址、电话、贷款日期、贷款数目、还款日期的提示。而EDIT,DATETIMEPICKER,COMBO BOX做这些信息的输入。
BUTTON为确认修改信息的按钮。

具体编写流程

  1. 创建一个新类,名为CCliMesModDlg,绑定各控件的变量。
  2. 在确认按钮中写入代码:更新界面数据到变量,修改数据。关闭对话框。
  3. 创建初始化消息函数:限定电话输入字数,通过CStrtingArray来获得行业数组的信息。

提示加入是否加入黑名单子系统

界面设计和功能设计

1个STATIC TEXT,做是否加入黑名单的提示。
修改对话框的风格为TITLE BAR 和SYSTEM MENU和MINIMIZE BOX。

任务信息子系统

表设计

表的名称是:ERRAND。
表里的字段有:PAYBACK_ERRAND,LOAN_TOTAL,LOAN_NOW,PAYBACK_NOW。

界面设计

放置7个BUTTON,6个STATIC TEXT,4个EDIT,3个GROUPBOX,2个PROGRESS,1个LIST。

功能设计

第一个GROUP BOX内包含3个STATIC TEXT和2个EDIT和1个进度条并命名为贷款任务。
第二个GROUP BOX内包含3个STATIC TEXT和2个EDIT和1个进度条并命名为收款任务。
第三个GROUP BOX内包含LIST并命名为今日任务。LIST做信息的显示用。
6个STATIC TEXT来提示现贷款,现收款和贷款任务,收款任务。而4个EDIT设置风格为只读只用来显示如上提示的数据。
把BUTTON命名为设置任务金额,做为设置界面的入口。

具体编写流程

  1. 创建一个新类,名为CErrandDlg绑定各控件的变量。
  2. 创建一个从CRecordset类派生的新类,选择数据库名称为NRDB,选择表为ERRAND。
  3. 创建OnInitDialog()初始化函数,初始化列表框并把个变量的数值更新到界面上。
  4. 写一个更新列表框的函数供其他函数在对对话框进行操作后来重新显示界面上最新的数据。
  5. 在BUTTON按钮中写入设置任务界面的入口,并转换得到的变量值为长整型,更新数据到界面上,并更新列表框。

设置任务子系统

界面设计和功能设计

4个STATIC TEXT,2个EDIT,2个BUTTON。
STATIC TEXT做贷款任务金额和还款任务金额的提示。
EDIT中则可以输入金额数目。
BUTTON命名为恢复默认设置和设置。

具体编写流程

  1. 创建一个新类并命名为CSumSetDlg。绑定控件变量。
  2. 在初始化中初始化变量的数值并更新到界面上
  3. 在恢复默认设置按钮中写入代码:初始化变量的数值并更新到界面上,修改数值为固定的数值。
  4. 在设置按钮中写入代码:更新界面数据到变量中,限定收款任务金额不能大于贷款任务金额,修改数据库中的值为界面上的值,关闭对话框。

黑名单子系统

表设计

表的名称是:BLACKLIST。
表的字段有:ID,NAME,LOAN_DATE,LOAN_SUM,PAYBACK_DATE,ADDRESS,PHONE,BUSINESS。

界面设计

放置1个BUTTON,3个STATIC TEXT,1个EDIT,1个GROUPBOX,2个DATETIMEPICKER,2个CHECKBOX,1个LIST。

功能设计

GROUP BOX来包含安放的检索条件的控件,并命名为信息检索条件。
CHECK BOX作为是否以时间范围来检索的判断和是否以员工姓名来检索的判断。
STATIC TEXT的其中两个作为时间范围的提示,另外一个作员工姓名的提示。
EDIT中可以输入姓名。
2个DATE TIEM PICKER作时间的输入。
LIST显示数据库中的各种数据。
BUTTON按钮改名为检索

具体编写流程

  1. 创建一个新类,名为CBlackListDlg,绑定各控件的变量。
  2. 创建一个从CRecordset类派生的新类,选择数据库名称为NRDB,选择表为BLACKLIST。
  3. 写一个更新列表框的函数供其他函数在对对话框进行操作后来重新显示界面上最新的数据。
  4. 创建OnInitDialog()初始化函数,初始化LIST的风格和显示界面,设置背景颜色,并初始化时间的显示,把变量更新到界面上,更新列表框。
  5. 在检索按钮中写入检索的代码。
  6. 创建一个OnCtlColor函数来设置背景颜色:设置背景模式为透明,返回画刷。

良好客户信息子系统

表设计

表的名称是:WHITELIST。
表的字段有:ID,NAME,LOAN_DATE,LOAN_SUM,PAYBACK_DATE,ADDRESS,PHONE,BUSINESS。

界面设计

放置1个BUTTON,3个STATIC TEXT,1个EDIT,1个GROUPBOX,2个DATETIMEPICKER,2个CHECKBOX,1个LIST。

功能设计

GROUP BOX来包含安放的检索条件的控件,并命名为信息检索条件。
CHECK BOX作为是否以时间范围来检索的判断和是否以员工姓名来检索的判断。
STATIC TEXT的其中两个作为时间范围的提示,另外一个作员工姓名的提示。
EDIT中可以输入姓名。
2个DATE TIEM PICKER作时间的输入。
LIST显示数据库中的各种数据。
BUTTON按钮改名为检索

具体编写流程

  1. 创建一个新类,名为CWhiteListDlg,并绑定变量。
  2. 创建一个从CRecordset类派生的新类,选择数据库名称为NRDB,选择表为WHITELIST。
  3. 写一个更新列表框的函数供其他函数在对对话框进行操作后来重新显示界面上最新的数据。
  4. 创建OnInitDialog()初始化函数,初始化LIST的风格和显示界面,设置背景颜色,并初始化时间的显示,把变量更新到界面上,更新列表框。
  5. 在检索按钮中写入检索的代码。

统计子系统

界面设计

放置2个LIST BOX和2个GROUP BOX。

功能设计

2个GROUP BOX 各提示:各行业贷款回收率和各行业资金需求率,并包含LIST BOX。
统计行业贷款回收率的公式:单个行业已还资金/单个行业总贷款。
统计行业资金需求率的公式:单个行业总贷款/总行业资金总数。

具体编写流程

  1. 创建一个新类,名为CBStatsDlg,并绑定变量。
  2. 从WORKSPACE中加入计算各行业贷款回收率并输出的成员函数。
  3. 构造各种需要的变量,用循环获得各个行业的总贷款数额和已收款的数额,得到回收率并做排序。同时,对保存各个行业的字符串数组也要排序,最后加入到LIST BOX中。
  4. 从WORKSPACE中加入计算各行业资金需求率并输出的成员函数。
  5. 构造各种需要的变量,用SQL语句获得各个行业资金总数额,并用循环计算出各单个行业的资金数额,得到资金需求率,并排序,最后输出。
  6. 创建初始化函数,并直接在初始化函数中调用这两个函数。

统计流程图

统计行业贷款回收率:
统计流程图
统计行业资金需求率:
需求率

在写代码的过程中遇到的错误:

  1. 首先是设计数据库的时候条理不是特别的清晰,导致数据库中的字段名要改很多次才能达到自己想要的效果。
  2. 字段的类型选择的不正确,导致在代码中用的时候总是要不断的转换类型。
  3. 在给黑名单的对话框中加背景颜色时,代码写错了位置。
  4. 没有为添加信息写限定条件,在添加出来的信息中有很多不合逻辑的信息。
  5. 很多变量的类型不匹配,在转换类型的时候总是不知道要怎么转换。
  6. 在给一个日期类型的变量赋值时用的类型转换不对,最后用GetYear,GetMonth,GetDay等函数才解决。
  7. 有很多信息输时没有人性化的处理,比如在写电话号的时候没有加入限定电话号位数的代码。最后在李老师的提醒下加入了代码。
  8. 在设计对话框界面的时候按钮的设计逻辑错误,导致在写代码的位置错误。
  9. 在DoModal之后才给界面上的各个控件变量赋值,导致界面上的各个控件不能显示数据。
  10. 在写加入黑名单的代码中,在DoModal之后界面会失去焦点,会导致GetFirstSelectedItemPosition()得到的POS丢失,出中断错误,最后在DOMODAL之后再次用GetFirstSelectedItemPosition()获得一次就可以了。
  11. 在写自动加入黑名单的代码中,在删除PERSON表中的数据时用了复杂的办法:构造SQL语句,转换变量类型,DB执行SQL语句等。因为是在循环中,已经选中了要删除的数据的索引,所以只要用DELETE就行了。
  12. 在提示加入黑名单的对话框中加入了OK按钮和CANCEL按钮的响应函数,不用加这两个函数就行,对代码没有影响。
  13. 在用GetItemData时没有SetItemData,导致界面不能初始化。
  14. 在设置进度条时修改了进度条的风格,导致进度条不能使用。
  15. 修改进度条风格后,没有去修改错误的进度条而去修改正确的代码。在出问题时应该要先想清楚问题出在哪里,确定哪里是没有出问题之后,再去慢慢的,耐心的修改错误。
  16. 在有些DIALOG被模式调用后没有ENDDIALOG。
  17. 在转换类型时转换后的类型还是不能使用。
  18. 在设计良好客户信息的表时思路混乱,导致把创建好的CRecordset类错误的删除。
  19. 测试时在添加信息的时候会出中断错误,因为DATETIMEPICKER的风格为短日期,而代码中获得日期的方式为GetYear,Getmonth,GetDay,GetHour,GetMinute,GetSecond。最后把风格改为长日期就不会中断了。
  20. 运行程序之后,在打开一次黑名单,关闭之后,再往黑名单中添加信息,再次打开黑名单,黑名单不显示刚刚添加的信息。这是因为黑名单是用非模式创建的,在点击关闭后黑名单不关闭,而是隐藏起来了,这就不能调用到OnInitDialog()函数,从而不能更新黑名单数据。解决办法:添加一个CLOSE消息,在消息中调用这个对话框的父窗口的指针,并赋为NULL。
  21. 一些错误总是因为对话框的风格引起的。
  22. 在写排序的时候只对计算结果排序,而没有对存放各行业的数组进行排序,导致在输出的时候数据错乱。
  23. 在修改信息的时候,为了把行业数据显示到界面上,要用到CStingArray数组对象,这就要获得修改界面的父窗口指针,开始用GetParent()函数来获得,但是获得的是主框架的指针,这就引起了中断错误。为了解决这个错误,直接在类中添加一个CFormView类的指针就可以了,但是用指针来传送数据是很不安全的。后来想到可以直接把数据在父窗口直接接收,就可以直接用。
  24. 行业信息状况统计信息错误,导致统计错乱。要实现的功能是要在选择行业时LIST BOX中显示行业信息,但是显示的信息却不是所选行业的信息。最后直接用获得COMBO BOX文本的方法获得所选行业,再发消息处理信息。

感受:

在代码之前首先要构思好大框架才行,要不然在写的时候是很费力的。在WORD文档中记录好自己的构思也很重要,如果不记录只在脑子中想的话,很容易造成思路混乱,从而要把写好的代码不停的删除不停的修改。
在写之前感觉对代码的掌握还算可以,因为看代码的时候基本上都能看懂,但是在写的时候有很多代码在脑子里都很不清晰,还要再去翻看以前的例子才知道要如何使用。感觉真是“纸上得来终觉浅,觉知此事要躬行”。
在看代码的时候一些小的细节总是注意不到,在写的时候总是被这些小的地方卡住。这些知识点比较细小,但是包含的东西却不少。所以要在有时间的时候多做代码的练习。
在写的时候要耐心,细心,严谨,在有构思时又不知道该具体怎么写的时候,要敢写,不要害怕错误,写一写,慢慢的就能写出东西了。在遇到难点时,一定要耐心,要调整好心态,想一想以前有没有见过类似的难点,都是怎么解决的。多思考。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内