银行活期储蓄系统设计与实现.docx
《银行活期储蓄系统设计与实现.docx》由会员分享,可在线阅读,更多相关《银行活期储蓄系统设计与实现.docx(23页珍藏版)》请在冰点文库上搜索。
银行活期储蓄系统设计与实现
福建农林大学计算机与信息学院
课程设计报告
课程名称:
软件工程
课程设计题目:
银行活期储蓄系统设计与实现
姓名:
系:
计算机科学与技术系
专业:
计算机科学与技术专业
年级:
2007
学号:
承担角色:
客户端代码实现
同组组长:
同组其他成员:
实验地点:
指导教师:
职称:
讲师
完成起止日期:
2010.12.5-2011.1.9
2011年1月10日
福建农林大学计算机与信息学院
课程设计结果评定
评价内容
评价指标
评分权值
评定成绩
业务水平
有扎实的基础理论知识和课程知识;能正确设计实验方案;独立进行实验工作;能运用所学课程知识和技能去发现与解决实际问题
0.2
设计质量
实验正确,分析处理科学;设计结果有应用价值;图纸绘制符合国家标准,质量符合要求;计算及测试结果准确;工作中有创新意识;对前人工作有改进或突破,或有独特见解;
0.4
工作量、
工作态度
按期完成规定的任务,工作量饱满,难度较大;工作努力,遵守纪律;工作作风严谨务实
0.2
报告质量
文字通顺,技术用语准确,符号统一,编号齐全,书写工整规范,图表完备、整洁、正确;
0.2
合计
1.0
指导教师签字:
评定日期:
目录
1.实习的目的和任务1
2.实习要求1
3.实习地点1
4.软件开发环境以及工境1
5.组员及任无1
6.产品描述2
7.C/S架构图2
8.客户端功总体设计3
8.1客户端功能图3
8.2客户端用况图3
8.3客户端界面设计4
8.4客户端主要代码实现6
7.心得体会12
参考文献13
银行活期储蓄系统设计与实现
1.实习的目的和任务
软件工程是继程序设计、数据库原理与应用课程之后,对提高学生软件开发能力有重要作用的一门专业课程。
根据本科生的知识基础学习特点,本课程集中介绍了软件工程的基本知识体系,从实用的角度讲授软件工程的基本原理、概念和技术方法。
本课程要求学生掌握软件工程的基础知识和理论,分析大型软件开发过程中出现的问题,了解软件开发生命周期中常用的技术,掌握软件开发过程的结构化方法和面向对象方法,学会运用面向对象的软件工程方法进行软件需求分析、系统设计、实现和测试,并通过课程实践,实际运用软件工程的思想和技术,掌握软件项目管理和团队开发的工作方法。
本课程除要求学生掌握软件工程的基础知识和理论,重点要求学生学会分析问题的思想和方法。
2.实习要求
学习研究课程设计指导书,进行分组(5人一小组)并且明确每个学生在开发小组中扮演的角色及承担的职责(包括选出组长)。
在规定时间内完成一个规模适当的应用软件系统;在教师的指导下以软件设计为中心,完成从需求分析、软件设计、编码到软件测试运行的软件开发全过程。
在规定时间内提交应用软件系统及相关报告。
各组员独立完成与自己相关的报告。
3.实习地点
实验室及个人电脑
4.软件开发环境以及工具
开发环境:
WindowsXP;
开发工具:
MicrosoftVisualC++6.0、Oracle9i、MicrosoftVisio2003、PLSQLDeveloper、PowerDesigner
5.组员及任务
本组组员:
吴晓峰、王宣龙(本人)、刘兵、李学奎、王修泉;
组员任务:
吴晓峰:
客户端架构设计
王宣龙(本人):
客户端代码实现
刘兵:
服务端架构设计与实现
李学奎:
数据库设计与功能实现
王修泉:
系统测试
需求分析为全组组员共同完成,是各组员经过对系统功能、行为、性能、设计约束等方面进行总体分析而完成。
需求分析结果可查看银行活期储蓄项目手册。
6.产品描述
本软件实现银行的活期储蓄存款业务。
整套软件由客户端程序和服务器端程序构成,客户端运行在面向个人业务的银行柜台的电脑上,银行职员输入相关信息并通过网络通讯向服务器发送请求,并接受服务器端程序的应达显示处理的结果。
服务器端处理客户端的各种业务请求。
主要实现银行开户、销户、取款、存款、余额查询、转账、修改密码、打印账户明细记录等功能。
本人在这次项目中负责客户端的总体架构设计。
7.C/S架构图
本系统为C/S结构,客户端主要功能为界面显示、输入功能以及操作结果显示。
并数据传给服务端处理,并等待接收服务器的处理结果;服务端负责与数据库打交道,从客户端接收数据并将处理结果回传给客户端,将操作数据写入数据库或从数据库读取数据。
图7-1为C/S架构图。
图7-1
8.客户端功总体设计
8.1客户端功能图
客户端为面向银行职员操作界面,主要功能有职员登录、开户、存款、取款、转账、查询余额、密码修改、交易明细查询、销户。
管理员的功能有报表统计。
图8-1为客户端功能图。
图8-1
8.2客户端用况图
8.2.1图8-2是根据功能图设计的用况图。
图8-2
8.3客户端界面设计
8.3.1客户端界面图
8.3.2客户端界面类图
8.4客户端主要代码实现
8.4.1登录
//************************************
//Method:
inputboxcheck
//Access:
public
//Returns:
BOOL
//Qualifier:
Login框的输入框检查
//Parameter:
//************************************
BOOLLogin:
:
inputboxcheck(MyInputBox*pcheckBox)
{
INBOX_VEC:
:
iteratorpbox;
ControlFilefile;
charcname[20]={0};
charcpwd[20]={0};
strcpy(cname,file.getLoginName());
strcpy(cpwd,file.getLoginPwd());
stringname=cname;
stringpwd=cpwd;
charstr[50]={0};
COORDstart={25,19};
for(pbox=inboxvec_.begin();pbox!
=inboxvec_.end();++pbox)
{
if(*pbox==pcheckBox)
{
break;
}
}
intn=pbox-inboxvec_.begin();
switch(n)
{
case0:
{
Tool:
:
refreshBox(pcheckBox);//去除用户名的左右空格
if((pcheckBox->inputMsg).compare(name)==0)//相等返回0
{
pcheckBox->TF=TRUE;
returnTRUE;
}
else
{
Tool:
:
SaveConsol();
MsgFramloginmsg(95,Element:
:
login_name_error);
getch();
Tool:
:
ReturnConsol();
pcheckBox->TF=FALSE;
returnFALSE;
}
break;
}
case1:
{
if(loginNum==0)//登陆次数为零时推出
{
doNOBUT();
}
memset(str,0,sizeof(str));
if((pcheckBox->inputMsg).size()!
=6)//密码为六位
{
Tool:
:
ShowError(BACK_DRD_FRON_WITH,Element:
:
pwd_dit_error);
returnFALSE;
}
if((pcheckBox->inputMsg).compare(pwd)==0)//相等返回0
{
pcheckBox->TF=TRUE;
returnTRUE;
}
else
{
Tool:
:
SaveConsol();
MsgFramloginmsg(95,Element:
:
login_pwd_error);
sprintf(str,"youhave%dtimeschances",loginNum--);
WriteConsoleOutputCharacter(GlobalVar:
:
Ohd,str,strlen(str),start,NULL);
getch();
Tool:
:
ReturnConsol();
returnFALSE;
}
break;
}
default:
break;
}
returnFALSE;
}
8.4.2开户
/*开户*/
stringAccountCTR:
:
OpenAccount(string&name,string&id,string&pwd,string&mony)
{
SOCKETsock;
LinkServer(sock);
intlen=name.size()+id.size()+pwd.size()+mony.size()+16;//16是4个信息sizie整数的大小
PackaccountPack;
UnpackUnPacklen;
accountPack<DateSendReceive:
:
loop_send(sock,accountPack.msgbuf,accountPack.getlen());
char*tmp=newchar[4];
intretlen=0;
DateSendReceive:
:
loop_recv(sock,tmp,4);//读取信息的长度
UnPacklen.msgbuf=tmp;
UnPacklen>>retlen;
delete[]tmp;
//char*msg=newchar[retlen];
tmp=newchar[retlen];
memset(tmp,0,retlen);
UnpackmsgUnPack;
DateSendReceive:
:
loop_recv(sock,tmp,retlen);
msgUnPack.msgbuf=tmp;
stringopenMsg;
msgUnPack>>msgUnPack.len>>openMsg;
closesocket(sock);
returnopenMsg;
}
8.4.3存款
/*存款*/
stringAccountCTR:
:
DepositMoney(string&uid,string&optid,string&money,string&type)
{
SOCKETsock;
LinkServer(sock);
intlen=uid.size()+optid.size()+money.size()+type.size()+16;
PackaccountPack;
UnpackUnPacklen;
accountPack<DateSendReceive:
:
loop_send(sock,accountPack.msgbuf,accountPack.getlen());
char*tmp=newchar[4];
intretlen=0;
DateSendReceive:
:
loop_recv(sock,tmp,4);//读取信息的长度
UnPacklen.msgbuf=tmp;
UnPacklen>>retlen;
delete[]tmp;
//char*msg=newchar[retlen];
tmp=newchar[retlen];
memset(tmp,0,retlen);
UnpackmsgUnPack;
DateSendReceive:
:
loop_recv(sock,tmp,retlen);
msgUnPack.msgbuf=tmp;
stringsaveMsg;
msgUnPack>>msgUnPack.len>>saveMsg;
closesocket(sock);
returnsaveMsg;
}
8.4.4取款
/*取款*/
stringAccountCTR:
:
WithdrawlMoney(string&uid,string&optid,string&money,string&type)
{
SOCKETsock;
LinkServer(sock);
intlen=uid.size()+optid.size()+money.size()+type.size()+16;
PackaccountPack;
UnpackUnPacklen;
accountPack<DateSendReceive:
:
loop_send(sock,accountPack.msgbuf,accountPack.getlen());
char*tmp=newchar[4];
intretlen=0;
DateSendReceive:
:
loop_recv(sock,tmp,4);//读取信息的长度
UnPacklen.msgbuf=tmp;
UnPacklen>>retlen;
delete[]tmp;
//char*msg=newchar[retlen];
tmp=newchar[retlen];
memset(tmp,0,retlen);
UnpackmsgUnPack;
DateSendReceive:
:
loop_recv(sock,tmp,retlen);
msgUnPack.msgbuf=tmp;
stringcashMsg;
msgUnPack>>msgUnPack.len>>cashMsg;
closesocket(sock);
returncashMsg;
}
8.4.5注销
/*销户*/
intAccountCTR:
:
Interest(string&uid)
{
SOCKETsock;
LinkServer(sock);
intlen=uid.size()+4;
PackaccountPack;
UnpackUnPacklen;
accountPack<DateSendReceive:
:
loop_send(sock,accountPack.msgbuf,accountPack.getlen());
char*tmp=newchar[4];
intret=0;
DateSendReceive:
:
loop_recv(sock,tmp,4);//读取信息的长度
UnPacklen.msgbuf=tmp;
UnPacklen>>ret;
closesocket(sock);
if(ret==0)
{
returnFALSE;
}
else
{
returnTRUE;
}
}
8.4.6修改密码
/*修改密码*/
BOOLAccountCTR:
:
ChangePwd(string&uid,string&npwd)
{
SOCKETsock;
LinkServer(sock);
intlen=uid.size()+npwd.size()+8;
PackaccountPack;
UnpackUnPacklen;
accountPack<DateSendReceive:
:
loop_send(sock,accountPack.msgbuf,accountPack.getlen());
char*tmp=newchar[4];
intret=0;
DateSendReceive:
:
loop_recv(sock,tmp,4);//读取信息的长度
UnPacklen.msgbuf=tmp;
UnPacklen>>ret;
closesocket(sock);
if(ret==0)
{
returnFALSE;
}
else
{
returnTRUE;
}
}
8.4.7余额查询
/*余额查询*/
stringAccountCTR:
:
Balance(string&uid)
{
SOCKETsock;
LinkServer(sock);
intlen=uid.size()+4;
PackaccountPack;
UnpackUnPacklen;
accountPack<DateSendReceive:
:
loop_send(sock,accountPack.msgbuf,accountPack.getlen());
char*tmp=newchar[4];
intretlen=0;
DateSendReceive:
:
loop_recv(sock,tmp,4);//读取信息的长度
UnPacklen.msgbuf=tmp;
UnPacklen>>retlen;
delete[]tmp;
//char*msg=newchar[retlen];
tmp=newchar[retlen];
memset(tmp,0,retlen);
UnpackmsgUnPack;
DateSendReceive:
:
loop_recv(sock,tmp,retlen);
msgUnPack.msgbuf=tmp;
stringbalanceMsg;
msgUnPack>>msgUnPack.len>>balanceMsg;
closesocket(sock);
returnbalanceMsg;
}
8.4.8账户明细
/*账户明细*/
BOOLMyMenu:
:
Inquiry()
{
intnum;
SMALL_RECTfc={15,5,60,17};
while
(1)
{
InquiryMenuqmenu(fc,BACK_GRAY_FRON_MAGENTA,Element:
:
Qmenu,"INQUIRYNENU");
num=Tool:
:
MenuControl(qmenu);
if(!
InquiryMenu:
:
MenuOperating(num))
{
Tool:
:
ClearMenu(qmenu);
break;
}
}
returnTRUE;
}
8.4.9转账
/*转账*/
stringAccountCTR:
:
TransferM(string&uid,string&optid,string&money)
{
stringtrin="transin";
stringtrout="transout";
stringtranMsg;
tranMsg=WithdrawlMoney(uid,optid,money,trout);//主账号取出钱(取钱时many变复数了)在返回打印交易信息时改回整数
DepositMoney(optid,uid,money,trin);//目标账号存入钱
returntranMsg;
}
8.4.10报表生成
/*报表生成*/
voidTradeDetail:
:
PrintDetail(STRVEC:
:
iteratorfirst,STRVEC:
:
iteratorlast)
{
Tool:
:
Clearfram(mc_,BACK_BLACK_FRON_WITHE);
COORDTlist1={mc_.Left,mc_.Top};
COORDTlist2={mc_.Left+10,mc_.Top};
COORDTlist3={mc_.Left+19,mc_.Top};
COORDTlist4={mc_.Left+29,mc_.Top};
COORDTlist5={mc_.Left+50,mc_.Top};
COORDTlist6={mc_.Left+59,mc_.Top};
COORDTlist7={mc_.Left+70,mc_.Top};
STRVEC:
:
iteratorit;
charstr[10][50]={0};
for(it=first;it!
=last;it++)
{
memset(str,0,sizeof(str));
sscanf(it->c_str(),"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,]",str[1],str[2],str[3],str[4],str[5],str[6],str[7]);
WriteConsoleOutputCharacter(GlobalVar:
:
Ohd,str[1],sizeof(str[1]),Tlist1,NULL);
WriteConsoleOutputCharacter(GlobalVar:
:
Ohd,str[2],sizeof(str[2]),Tlist2,NULL);
WriteCon