7CMFC课程设计之活期储蓄管理系统.docx
- 文档编号:26804452
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:27
- 大小:184.29KB
7CMFC课程设计之活期储蓄管理系统.docx
《7CMFC课程设计之活期储蓄管理系统.docx》由会员分享,可在线阅读,更多相关《7CMFC课程设计之活期储蓄管理系统.docx(27页珍藏版)》请在冰豆网上搜索。
7CMFC课程设计之活期储蓄管理系统
此报告的源代码(工程)下载地址:
大学
C++面向对象课程设计报告
院(系):
计算机工程学院
专业:
软件工程
学生姓名:
__
班级:
__ 学号:
2
题目:
银行储蓄管理系统
起讫日期:
2010.07.04-2010.07.14
设计地点:
指导教师:
完成日期:
2010年07月14日
一、课程设计目的
1、进行c++面向对象程序设计的复习巩固;
2、在完成c++面向对象语言学习的基础上,通过自学MFC,掌握一种可视化编程的方法,并通过实践,加深对面向对象语言的理解。
3、提高运用c++编程的能力和解决实际问题的能力,创新能力及团队合、协调能力
4、提高调查研究、查询技术文献、资料和编程及设计文档的能力;
5、首次尝试编写软件,学习实际操作开发能力,体验学习基础知识重要性。
6、提高自学能力,体验合作以及独立编程、分析文献等各方面的重要性,加强这些方面素质的训练。
二、课程设计内容与实现的功能
课程设计内容是活期储蓄管理系统,次系统主要实现开户、存款、取款、查询以及销户的功能。
还有一些细节的地方,比如各个输入位置输入不合法的情况,及BackSpace的功能,等等。
三、系统分析与设计
1、系统分析
(1)信息。
完整描述系统中所处理的全部信息;
(2)行为。
完全描述系统状态变化所需处理或功能;
(3)表示。
详细描述系统的对外接口与界面。
我的这个系统主要是实现活期储蓄中的开户、存款、取款、查询和销户等的操作。
是假定的某银行账户的账号从50000开始的,没增加一个账户,账号就加1,数组对象的每个对象的位置与账号是一一对应的,故,用线性的查找方法可以迅速的找到所查找的账户。
我的这个MFC程序主要是一个界面,上面有两个编辑框,和一个接近键盘的按钮组合,需要用户开户,依次输入姓名、设置密码(密码必须是六位字母或者数字)、输入开户金额(必须大于10元),开户成功,然后就可以进行查询和存取钱了,查询的时候需要输入的就是账号和密码,就能查询到该账户的基本情况。
还可以进行存取款操作,输入账号和密码之后然后选择存款还是取款,然后是存取金额。
销户的时候,输入账号和密码就可以了。
各个地方输入错误的时候都会有相应的提示,关于提示,详见设计说明。
2、系统设计:
1、引言
编写目的:
学习一种可视化界面编程操作。
背景:
学习完成c++。
定义:
参考资料:
数据结构、c++面向对象程序设计、孙鑫MFC教程等
2、总体设计
需求规定:
要求能够存款、取款、开户、销户。
运行环境:
VisualStudio2010/Windows
基本设计概念和流程图:
2.1、模块设计:
主要的类是CBankingDlg和Depositor,后者是我自己建立的,用来存储用户信息的。
在CBankingDlg里分为开户、存取款、查询、销户、输入五大模块,这五大模块是分别独立的,不能同时运行。
但这些模块的运行时都会牵扯到Depositor成员的改动。
其中,输入模块的设计是最难的。
我设计的是开关性质的输入方式:
开户、存取款、查询、销户四大模块分别是一个开关,每个模块开始的时候所有的开关均需要清零,当一个模块下面有多个输入的时候,我设置的是子开关。
2.2、数据结构说明:
我是用的是线性结构,即数组对象每个对象的编号和账号之间用哈希函数建立联系。
intA_Num;//储蓄账号
CStringA_Name;//储户姓名
doubleA_Overmoney;//账户余额
CStringA_PassWord;//账户密码
其他的开关,有的是CString的,有的是char类型的,等等。
2.3、算法流程图:
类图功能区大模块:
各个小模块功能图:
Enter的功能:
把屏幕上的分别赋值给A_Name\A_PassWord\A_OverMoney等,并进行输出、处理等相应操作。
四、系统测试与调试分析
1、系统测试
●测试方法:
黑盒
●测试技术:
功能测试
●测试数据:
见表
测试报告:
测试说明
测试名称
活期储蓄管理系统
测试目的
验证系统正常处理流程
测试技术
功能测试
测试方法
黑盒测试法
测试用例
测试内容
开户
测试步骤
输入正确用户名与密码开户金额
输入正确用户名密码,错误的开户金额
输入正确的用户名错误的密码
输入错误的用户名
测试数据
guoqihong,123456,11
guoqihong,123456,5
guoqihong,123
-
预期结果
开户成功
显示开户金额最少10元
提示密码必须是六位
-
测试结果
与预期相符
与预期相符
与预期相符
-
测试用例
测试内容
查询
测试步骤
输入正确账号与密码
输入正确账号错误的密码
错误账号
-
测试数据
50005,123456
50005,123457
5000
-
预期结果
给出账户信息
密码错误
提示非本行账号
-
测试结果
与预期相符
与预期相符
与预期相符
-
测试内容
存取钱
测试步骤
输入正确账号与密码
输入正确账号错误的密码
错误账号
余额是50时,输入存取款金额
前边都正确,输入s或t或其他字符
测试数据
50005,123456
50005,123457
5000
存49,取100
s,t,a,b,c,1,5
预期结果
提示存还是取
密码错误
提示非本行账号
50存取款成功,取款余额不足
s-进入存钱,t-进入取钱,其他提示应输入s或t
测试结果
与预期相符
与预期相符
与预期相符
相符
2、调试分析:
1、开关老是设置不对,老是打开关闭不合理,导致功能实现不了。
仔细分析开关打开关闭情况,并进行修改。
2、全局变量设置,放在了cpp文件里,并用extern声明。
五、用户手册
1、使用平台是VisualStudio2010
2、不需要安装
3、使用方法:
分别点击开户,查询,存取钱,销户可以进行相应的操作。
每次输入完之后需要按回车。
六、程序清单
类Depositor
#pragmaonce
#include"iostream"
#include"fstream"
#include"iomanip"
#include"string"
constboolOK=1;
constboolNO=0;
usingnamespacestd;
//externofstreamoutput;
classDepositor
{
public:
Depositor();
~Depositor();
public:
intA_Num;//储蓄帐号
CStringA_Name;//储户姓名
doubleA_Overmoney;//储蓄余额
CStringA_PassWord;//用户密码
};
按键s的功能实现:
(取为例子)
voidCBankingDlg:
:
OnBnClickedButton_s()
{
if(op_NewAcount=='y')
{
if(op_Name=='y')
{
//为开户输入姓名
Name_CS+=_T("s");
UpdateData(FALSE);
m_display2.SetWindowText(Name_CS);
}
elseif(op_PassWord=='y')
{
//为开户输入密码
PassWord_CS+=_T("s");
ShowPassWord_CS+=_T("*");
UpdateData(FALSE);
m_display2.SetWindowTextW(ShowPassWord_CS);
}
elseif(op_OverMoney=='y')
{
//为开户输入开户金额
}
}
elseif(op_Search=='y')
{
if(op_Num=='y')
{
//为查询输入账号
}
elseif(op_PassWord=='y')
{
//为查询输入密码
PassWord_CS+=_T("s");
ShowPassWord_CS+=_T("*");
m_display2.SetWindowText(ShowPassWord_CS);
}
}
elseif(op_ChangeMoney=='y')
{
if(op_Num=='y')
{
//为存取款输入账号
}
elseif(op_PassWord=='y')
{
//为存取款输入密码
PassWord_CS+=_T("s");
ShowPassWord_CS+=_T("*");
m_display2.SetWindowText(ShowPassWord_CS);
}
elseif(op_ST=='y')
{
ST='s';
m_display2.SetWindowTextW(_T("s"));
//选择存款还是取款-只对s和t有用
}
elseif(op_ChangeAmount=='y')
{
//输入要存入或取出的金额
}
}
elseif(op_DestroyAcount=='y')
{
if(op_Num=='y')
{
m_display2.SetWindowTextW(_T("请输入账号"));
//为销户输入账号
}
elseif(op_PassWord=='y')
{
PassWord_CS+=_T("s");
ShowPassWord_CS+=_T("*");
m_display2.SetWindowText(ShowPassWord_CS);
//为销户输入密码
}
elseif(op_SureTODestroy=='y')
{
m_display2.SetWindowText(_T("请输入y/n"));
//为删除帐户判断,确定还是取消
}
}
//TODO:
在此添加控件通知处理程序代码
}
BankingDlg.cpp
voidCBankingDlg:
:
OnBnClickedButton_NewAcount()
{
op_NewAcount=op_Search=op_ChangeMoney=op_DestroyAcount='n';
op_Num=op_Name=op_PassWord=op_OverMoney='n';
Name_CS=PassWord_CS=OverMoney_CS=ShowPassWord_CS=_T("");
Enter='n';
op_NewAcount='y';
p[Count_OP].A_Num=Count_OP+50000;
m_display.SetWindowText(_T("您要进行开户操作\r\n您的账号是"));
CStringstr1,str2;
m_display.GetWindowText(str1);
str2.Format(_T("%d"),p[Count_OP].A_Num);
str1=str1+str2;
m_display.SetWindowText(str1);
//CStringstr3;
m_display.GetWindowText(str1);
//str1+=_T("\r\n请输入您的姓名");
op_Name='y';
//m_display.SetWindowText(str1);
//UpdateData(FALSE);
m_display2.SetWindowText(_T("请输入您的姓名…"));
//TODO:
在此添加控件通知处理程序代码
}
voidCBankingDlg:
:
OnBnClickedButton_Search()
{
op_NewAcount=op_Search=op_ChangeMoney=op_DestroyAcount='n';
op_Num=op_Name=op_PassWord=op_OverMoney='n';
Name_CS=Name_CS=PassWord_CS=OverMoney_CS=ShowPassWord_CS=_T("");
Enter='n';
num_in=k=0;//哈希函数值清零
op_Search='y';
m_display.SetWindowText(_T("您要进行查询操作操作\r\n请输入您的账号"));
m_display2.SetWindowTextW(_T("请在这里输入您的账号"));
op_Num='y';//打开为查询输入账号的门
//TODO:
在此添加控件通知处理程序代码
}
voidCBankingDlg:
:
OnBnClickedButton_ChangeMoney()
{
op_NewAcount=op_Search=op_ChangeMoney=op_DestroyAcount='n';
op_Num=op_Name=op_PassWord=op_OverMoney='n';
Name_CS=PassWord_CS=OverMoney_CS=ShowPassWord_CS=ChangeAmount_CS=_T("");
Enter='n';
num_in=k=0;//哈希函数值清零
op_ChangeMoney='y';
m_display.SetWindowText(_T("您要进行查询操作操作\r\n请输入您的账号"));
m_display2.SetWindowTextW(_T("这里输入您的账号"));
op_Num='y';
//TODO:
在此添加控件通知处理程序代码
}
voidCBankingDlg:
:
OnBnClickedButton_DistroyAcount()
{
op_DestroyAcount='y';
op_NewAcount=op_Search=op_ChangeMoney=op_ChangeMoney='n';
op_Num=op_Name=op_PassWord=op_OverMoney='n';
Num_CS=Name_CS=PassWord_CS=OverMoney_CS=ShowPassWord_CS=ChangeAmount_CS=_T("");
Enter='n';
num_in=k=0;//哈希函数值清零
m_display.SetWindowTextW(_T("您要进行销户操作"));
m_display2.SetWindowTextW(_T("请输入您帐号"));
op_Num='y';
//TODO:
在此添加控件通知处理程序代码
}
voidCBankingDlg:
:
OnBnClickedButton_Enter()
{
Enter='y';
if(op_NewAcount=='y')
{
if(op_Name=='y')
{
//p[Count_OP].A_Name=(LPSTR)(LPCTSTR)Name_CS;//直接用CString类型比较
p[Count_OP].A_Name=Name_CS;
m_display2.SetWindowTextW(_T("请为您的账户设置密码"));
op_Name='n';
op_PassWord='y';
}
elseif(op_PassWord=='y')
{
//p[Count_OP].A_PassWord=(LPSTR)(LPCTSTR)PassWord_CS;//直接用CString类型存储秘ma
intjud;
jud=PassWord_CS.GetLength();
if(jud==6)
{
p[Count_OP].A_PassWord=PassWord_CS;
m_display2.SetWindowText(_T("请输入您的开户金额"));
op_PassWord='n';
op_OverMoney='y';
}
else
{
m_display2.SetWindowTextW(_T("对不起,密码必须是六位!
重新输入"));
PassWord_CS=_T("");
}
}
elseif(op_OverMoney=='y')
{
//p[Count_OP].A_Overmoney=(double)atof((LPCSTR)OverMoney_CS);
p[Count_OP].A_Overmoney=_wtof(OverMoney_CS.GetString());//VS下CString转double
if(p[Count_OP].A_Overmoney>=10)
{
m_display.SetWindowText(_T("账户创建成功,您可以到主菜单查询\r\n"));
m_display2.SetWindowTextW(_T(""));
op_OverMoney='n';
/*CStringstr1,str2,str3;
str1.Format(_T("%d"),p[Count_OP].A_Num);
str2.Format(_T("%f"),p[Count_OP].A_Num);
str3.Format(_T("%f"),p[Count_OP].A_Overmoney);
str1=str1+str2+str3;
m_display.SetWindowText(str3);*/
Count_OP+=1;
}
else
{
m_display2.SetWindowTextW(_T("对不起,开户金额最少10元,请重新输入"));
OverMoney_CS=_T("");
}
op_OverMoney='n';
}
}
elseif(op_Search=='y')
{
if(op_Num=='y')
{
//str1=Num_CS+_T("add");
num_in=_tcstoul(Num_CS,NULL,10);//VS2010中把CString转为int型_tcstol
if(num_in<50000)
{
m_display.SetWindowTextW(_T("账号不存在!
请重新输入查询账号……"));
Num_CS=_T("");
}
else
{
k=num_in-50000;
op_Num='n';
op_PassWord='y';
m_display2.SetWindowText(_T("请输入查询密码"));
}
}
elseif(op_PassWord=='y')
{
//char*p=(LPSTR)(LPCTSTR)cstr
//VS2010CString转char*
if(PassWord_CS==p[k].A_PassWord)
{
m_display.SetWindowTextW(_T("查询结果:
\r\n"));
m_display.GetWindowText(str1_search_CS);
str2_search_CS=_T("账号:
");
str1_search_CS+=str2_search_CS;
m_display.SetWindowTextW(str1_search_CS);
m_display.GetWindowText(str1_search_CS);
Num_CS.Format(_T("%d"),p[k].A_Num);
str1_search_CS+=Num_CS;
m_display.SetWindowTextW(str1_search_CS);
m_display.GetWindowText(str1_search_CS);
str2_search_CS=_T("\r\n姓名:
");
str1_search_CS+=str2_search_CS;
m_display.SetWindowText(str1_search_CS);
m_display.GetWindowText(str1_search_CS);
Name_CS.Format(_T("%s"),p[k].A_Name);
str2_search_CS=Name_CS;
str1_search_CS+=str2_search_CS;
m_display.SetWindowText(str1_search_CS);
m_display.GetWindowText(str1_search_CS);
str1_search_CS+=_T("\r\n账户余额:
");
m_display.SetWindowText(str1_search_CS);
m_display.GetWindowText(str1_search_CS);
OverMoney_CS.Format(_T("%f"),p[k].A_Overmoney);
str1_search_CS+=OverMoney_CS;
m_display.SetWindowText(str1_search_CS);//格式化输出查询结果
}
elsem_display.SetWindowText(_T("密码错误,请重试"));
op_PassWord='n';
Num_CS=PassWord_CS=Name_CS=OverMoney_CS=_T("");
}
//op_Search=='n';
}
elseif(op_ChangeMoney=='y')
{
if(op_Num=='y')
{
m_display2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 7C MFC课程设计之活期储蓄管理系统 MFC 课程设计 活期 储蓄 管理 系统