计算机储蓄系统概要设计
计算机储蓄系统概要设计
一 引言
1.1编写目的
计算机银行储蓄管理软件的确要作用是针对于各类银行中的储蓄
业务进行有效管理。银行储蓄是我们现实生活中的常见活动。就储蓄业
务而言,无论是国外还是国内,也无论是哪家银行,虽然所开展的业务
种类稍有不同,利息的计算也存在差异,但储蓄的本质是完全相同的。
在我国加入WTO以后,各银行的业务逐渐和国际接轨。
1.2背景
项目名称:银行计算机储蓄系统
用 户:某某银行
说 明:现在的银行储蓄系统工作效率低,不能满足广大人发群
众的需要,人们希望能更方便更省时地办理储蓄业务。在这样的背景下,
切需要建立一个新的、高效的、方便的计算机储蓄系统。
1.3参考资料
《软件工程——原理,方法与应用》 吴钦藩 编着 人
民交通出版社出版
《软件工程导论(第五版)》 张海藩 编着 清华大
学出版社出版
《软件工程》 任胜兵 邢琳 编着 北京邮电大学出
版社
二 总体设计
2.1银行计算机储蓄系统软件结构
图 1-1 银行储蓄系统数据图
确定输入流输出流的边界,从而孤立出变换中心。如下图1-2所示。
图1-2具有边界的系统数据流图
2.2在银行储蓄管理系统在一级分解中,可将系统分解成三个子功
能模块:用户操作,业务员操作,系统输出。得出的高层控制结构如图
1-3所示。
图1-3 银行储蓄系统“第一级分解”
2.3第二级分解
2.3.1、 用户操作的分解
可将用户操作分解为:开户民,存款,取款,查询。
如下图1-4所示:
图1-4 用户操作分解图
2.3.2、业务员操作的分解
业务员的操作是将用户的操作传送给系统,代替用户与系统交
互,所以,业务员的操作与系统的操作基本类似,也可以近似地将业务
员看作用户。所以操作操作可分解为:开户,存款,取款,查询并且如
业务员操作 银行存储管理系统 用户操作 系统输出
用户操作
开户 存款 取款 查
询
提交用户申请表 提交存款单 提交用户申请表 提交用户查
询表
用户在开户时设有密码,则进行密码验证。所以分解图如下1-5所示:
图1-5 业务员操作分集图
2.3.2、 系统输出分解
系统输出可分解为:计算利息-打印清单,保存新用户信息,更新
用户信息,打印存单。
分解图如下1-6所示:
图1-6系统输出分解图
2.4使用设计度量和启发式规则对第一次分割得到的软件结构进一
业务员操作
密码验证
开户 存
款
取款 查
询
提交用户申请表 提交存款单 提交用户申请表 提交用户
查询表
系统输出
计算利息 打印清单 打印存单
保存新用户信息 更新用户信
息
步精化。
由于业务员的操作与用户的操作基本相似,可以简单化地认为系
统只与业务员交互,基于这个思想,将有利与简化以后系统程序的设计
与开发。精化图如下1-7所示:
图1-7系统精化图
银行存储管理系统
用户操作 系统输出
业务员操作
计算利息 保存新用户信息 更
新
用
户
信
息
打
印
存
单
打
印
清
单
开户 存款 取款 查
询
提交用户申请表 提交存款单 提交取款单 提
交
用
户
查
询
表
密码验证
(完整word版)简单银行存取管理系统--详细设计说明书
1引言1.1编写目的概要设计完成了软件系统的总体设计,规定了各个模块的功能及模块之间的联系。
通过详细设计,实现各个模块规定的具体功能。
在详细设计说明书中,对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达,使之成为编码的依据。
主要确定各个模块的算法,用工具表达算法的过程,确定每一模块数据结构,确定模块儿间接口细节。
1.2背景在传统的银行账户管理中,其过程往往是很复杂的,繁琐的,账户管理以入账和出账两项内容为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同,且会出现信息的重复传递问题,因此该过程需要进行信息化,以利用计算机进行账目管理。
本系统的名字是银行储蓄管理系统。
2程序系统的结构用一系列图表列出本程序系统内的每个程序(包括每个模块和子程序)的名称、标识符和它们之间的层次结构关系。
<1> 用户模块的分解可将用户操作分解为:存款,取款,查询,开户。
图1 用户模块图<2>管理员操作的分解管理员的操作是将用户的操作传送给系统,代替用户与系统交互,所以,管理员的操作与系统的操作基本类似,也可以近似地将管理员看作用户。
所以操作员操作可分解为:查询、冻结、解冻。
图2 管理员模块图3程序设计说明3.1管理员登陆模块 3.1.1程序描述管理员登陆主要是针对银行系统的管理员管理账户信息时使用,如用户注册,用户登录。
常驻内存,非子程序,无覆盖要求,顺序处理。
3.1.2功能输入 输出 处理3.1.3性能本模块对程序性能要求是在6秒内完成验证。
3.1.4输人项密码:六位0—9数字。
非经法定程序,不得外泄。
管理员ID:七位0—9组成的字符串,非经法定程序,不得外泄。
3.1.5输出项成功进入银行管理系统界面。
或者输出:您输入的管理员用户名或密码错误,请重新输入! 3.1.6算法一个IF … ELSE …的判断语句,TRY CATCH 异常的处理3.1.7流程逻辑3.1.8接口3.1.9存储分配管理员信息存在管理员表中。
数据库课程设计 银行储蓄管理系统
《数据库系统概论》课程设计报告设计题目:银行储蓄管理系统姓名:学号:班级:设计起止时间:需求分析:在对软件工程相关知识学习之后,我们对设计软件有了基本的认识和一些应用技能。
在数据库的课程设计中,我们计划做一个小型的银行储蓄管理系统,包括了基本的存取转,和管理员对日常工作的管理功能。
功能设计:(1).客户:包括存款,取款,转账,查询余额,查看流水,密码修改功能(2).管理员:新增用户,删除用户,查看用户,员工绩效,VIP用户判别,储备金预警分析。
3.功能流程图:银行管理系统登陆管理员客户销户查看员工绩效VIP判别资金储备金判别开户存款取款转账余额显示查看流水修改密码详细设计:1.E-R图模型operatecustombankstaffCphoneCtimeCpassCRmoneyCnameCidBidSphoneSnameSidSpassSItimeBname BmoneyBid1112.根据E-R 图设计关系表 (1).银行信息表(bank )字段名 字段类型及长度 允许空 主键说明 Bid nchar (9) no PK 银行号 Bname nchar (20) no银行名 Bmoney numeric (20,3) no 银行余额(2).客户信息表(custom )字段名 字段类型及长度 允许空主键说明 Cid nchar (9) noPK 客户ID Cname nchar (10) no 客户姓名 Cpass nchar (10) no 密码 Ctime nchar (20) no注册时间Bid nchar (9) no 所在银行行号 外码(Bank (Bid )) Crmoney numeric (10,3) no账户余额 Cphone nchar (11) no 客户电话 (3).员工(管理员)表(staff ) 字段名 字段类型及长度 允许空主键 说明 Sid nchar (9) noPK 员工ID Sname nchar (10) no 员工姓名 Spass nchar (10) no 登陆密码 SItime nchar (20) no入行时间Sphone nchar(11) no 联系电话(4).流水信息表字段名字段类型及长度允许空主键说明Oid nchar(9) no PK 流水号Cid nchar(9) no 客户ID 外码(Custom(Cid))Bid nchar(9) no 银行ID 外码(Bank(Bid))Sid nchar(9) no 员工ID 外码(Staff(Sid))Otype smallint no 操作类型Otime nchar(20) no 操作时间Omoney numeric(10,3) yes 交易金额OBmoney numeric(10,3) yes 上次余额OAmoney numeric(10,3) yes 账户余额三个实体:bank,staff,custom一个联系:operate关系图:SQL语句:/*建表*/create table Bank(Bid nchar(9) primary key,Bname nchar(20) not null,Bmoney numeric(20,3) not null)create table Custom( Cid nchar(9) not null,Cname nchar(10) not null,Cpass nchar(10) not null,Ctype smallint not null,Ctime nchar(20) not null,Ccode nchar(18) not null,Bid nchar(9) not null,Crmoney numeric(10,3) not null,Cphone nchar(11) not null,primary key(Cid),foreign key(Bid) references Bank(Bid) /*在客户表中以Bank表的主码作为一个外键,并对他进行级联更新*/on update cascade,)create table Staff(Sid nchar(9) primary key, /*在列级定义主码*/Sname nchar(10) not null,Spass nchar(10) not null,SItime nchar(20) not null,Sphone nchar(11) not null)create table Operate(Oid nchar(9) not null,Cid nchar(9) not null,Bid nchar(9) not null,Sid nchar(9) not null,Otype nchar(10) not null,Otime nchar(20) not null,Oflag smallint not null,Omoney numeric(10,3),OBmoney numeric(10,3),OAmoney numeric(10,3),primary key(Oid,Cid,Sid),foreign key (Cid) references Custom(Cid) /*以用户表主码为一个外键,进行级联删除*/on delete cascade,foreign key(Sid) references Staff(Sid) /*以员工表的主码作为外键,当删除引起冲突的时候,拒绝删除*/on delete no action,foreign key (Bid) references Bank(Bid)on update cascade)insert into Bank values('00001','中国银行小寨分行',10000)update Bank set Bname='中国银行经开分行' where Bid='00002'select * from Bank;delete from Bank where Bid='1' or Bid='2';insert into Custom values('6505001','花花','111',0,'2012/12/10/08:26:00','610424************','00001','1500','14345678912')insert into Staff values('7985000','自助服务','111','2002/01/07','12331654613')delete from Custom where Bid='2';insert into Operate values('2406002','6505001','00001','7985001','哈哈','2012年12月18日14时12分',0,0,2900,2900)insert into Operate values('2406005','6505007','00001','7985001','嘿嘿','2012年12月18日14时12分',0,0,2900,2900)select * from Custom;select * from Operate;select * from Staff;select * from Bank;delete from Operatedrop table Customdrop table Bankdrop table Staff;drop table Operate;select * from Bank;delete from Operate where Oid='6505001'drop view BMoney;create view BMoneyasselect Omoneyfrom Operatewhere Oflag = 0 and Omoney>2000 and Otype = '取款';create view BInMoneyasfrom Operatewhere Oflag = 0 and Omoney>2000 and Otype='存款';create view VIPasselect Ctypefrom Customwhere Ctype=1;select count(*) from BMoney;select count(*) from BInMoney;select count(*) from VIP;update Bank set Bmoney='10000' where Bid='00001';update Bank set Bmoney='+bmoney' where Bid='"+Bid+"'";update Bank set Bmoney='10200.000000' where Bid='00001'程序代码:客户部分:a.void CClientDlg::OnButtonIn() //存款函数{// TODO: Add your control notification handler code hereCInDlg InDlg;if (InDlg.DoModal()==IDOK){double temp,temp1;ADOConn ado;CString sql = "select * from Custom where Cname='"+Cname+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);CString str = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");CString bid = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bid");CString str4 = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");CString str2= str; //将交易前钱数暂存temp=atof(str);temp1=(double)InDlg.m_InNum;temp+=temp1;str.Format("%f",temp);CString str3 = str; //暂存交易后金额sql = "update Custom set Crmoney='"+str+"' "+"where Cname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql);sql = "select count(*) num from Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql);int num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));str = "240600";CString Oid,Cid,Sid,Bid,Otime,Omoney,OAmoney,OBmoney;Oid.Format("%d",++num); Oid=str+Oid;Sid="7985001";Bid = bid; double temp2;sql = "select * from Bank where Bid='"+Bid+"'";ResultSet = ado.GetRecordSet((_bstr_t)sql);CString bmoney = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bmoney");temp2 = atof(bmoney); temp2+=temp1; bmoney.Format("%f",temp2);sql = "update Bank set Bmoney='"+bmoney+"' where Bid='"+Bid+"'";ado.ExecuteSQL((_bstr_t)sql);CString Otype = "存款";CString m_time; CTime time;time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d日%X");Otime = m_time; int flag = 0;Omoney.Format("%f",temp1); OAmoney = str2;OBmoney = str3;sql.Format("insert into Operate values('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,str4,Bid,Sid,Otype,m_ time,flag,Omoney,OAmoney,OBmoney);ado.ExecuteSQL((_bstr_t)sql);ado.E xitConnect(); }}b.v oid CClientDlg::OnButtonGet() //取款函数{// TODO: Add your control notification handler code hereCGetDlg GetDlg;;if (GetDlg.DoModal()==IDOK){double temp,temp1;ADOConn ado;CString sql = "select * from Custom where Cname='"+Cname+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);CString str = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");CString bid = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bid");CString str4 = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");CString str2= str;//将交易前钱数暂存temp=atof(str);temp1=(double)GetDlg.m_GetNum;if (temp>temp1){temp-=temp1; str.Format("%f",temp); CString str3 = str;//暂存交易后金额sql = "update Custom set Crmoney='"+str+"' "+"whereCname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql);sql = "select count(*) num from Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql) int num= atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));str = "240600";CString Oid,Cid,Sid,Bid,Otime,Omoney,OAmoney,OBmoney;Oid.Format("%d",++num);Oid=str+Oid; Sid="7985001"Bid = bid; double temp2;sql = "select * from Bank where Bid='"+Bid+"'";ResultSet = ado.GetRecordSet((_bstr_t)sql);CString bmoney = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bmoney");temp2 = atof(bmoney); temp2-=temp1;bmoney.Format("%f",temp2);sql = "update Bank set Bmoney='"+bmoney+"' whereBid='"+Bid+"'";ado.ExecuteSQL((_bstr_t)sql);CString Otype = "取款";CString m_time; CTime time;time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d日%X");Otime = m_time; int flag = 0;Omoney.Format("%f",temp1);OAmoney = str2;OBmoney = str3; sql.Format("insert into Operate values('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,str4,Bid,Sid,Otype,m_time,flag,Omoney,OAmoney,OBmoney); ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();}else{AfxMessageBox("账户余额不足!"); }}}c.void CClientDlg::OnButtonTurn(){/ TODO: Add your control notification handler code hereCTurnDlg TurnDlg;if (TurnDlg.DoModal()==IDOK){ADOConn ado;CString sql = "select * from Custom";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);int flag = 0;while (!ResultSet->adoEOF)CString TCusId = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");CString TCusMon = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney"); //收钱客户在操作前的余额CString str5 = TCusMon; TCusId.Remove(' ');if (TCusId==TurnDlg.m_TurnId){double temp,temp1;sql = "select * from Custom where Cname='"+Cname+"'";ResultSet = ado.GetRecordSet((_bstr_t)sql);CString str = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");CString bid = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bid");CString str4 = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");CString str2= str; //将交易前钱数暂存temp=atof(str);temp1=(double)TurnDlg.m_TurnNum; if (temp>temp1){flag = 1;temp-=temp1; //住客户钱数减少str.Format("%f",temp);CString str3 = str; //暂存交易后金额sql = "update Custom set Crmoney='"+str+"' "+"where Cname='"+Cname+"'";do.ExecuteSQL((_bstr_t)sql); temp=atof(TCusMon);//收钱客户钱数增加temp+=temp1;TCusMon.Format("%f",temp); sql = "update Custom set Crmoney='"+TCusMon+"' "+"where Cid='"+TCusId+"'";ado.ExecuteSQL((_bstr_t)sql); sql = "select count(*) num from Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql);int num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));str = "240600";CString Oid,Cid,Sid,Bid,Otime,Omoney,OAmoney,OBmoney;int Otype; Oid.Format("%d",++num); Oid=str+Oid;Sid="7985001";Bid = bid; Otype = 2; CString m_time; CTime time;time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d 日%X");Otime = m_time; Omoney.Format("%f",temp1);OAmoney = str2; OBmoney = str3;sql.Format("insert into Operate values('%s','%s','%s','%s',%d,'%s',%s,%s,%s)",Oid,str4,Bid,Sid,Otype,m_time ,Omoney,OAmoney,OBmoney); ado.ExecuteSQL((_bstr_t)sql);sql.Format("insert into Operate values('%s','%s','%s','%s',%d,'%s',%s,%s,%s)",TCusId,str4,Bid,Sid,Otype,m_t ime,Omoney,str5,TCusMon); ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();break; }else{AfxMessageBox("账户余额不足!");break; }}ResultSet->MoveNext();}if(flag==0){AfxMessageBox("该账户不存在!"); }}}d.v oid CClientDlg::OnButtonHistoy() //历史记录查询{// TODO: Add your control notification handler code hereCShowHistory showDlg;ame = Cname;showDlg.DoModal();}e.v oid CClientDlg::OnButtonAlter(){// TODO: Add your control notification handler code hereCAlterDlg alteDlg;if(alteDlg.DoModal()==IDOK){ if (alteDlg.m_AItem==0){if (alteDlg.m_Alter1==alteDlg.m_Alter2) {ADOConn ado; CString sql = "update Custom set Cname='"+alteDlg.m_Alter1+"' where Cname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("姓名修改成功!"); }else {AfxMessageBox("两次姓名输入不一致,请重新输入!"); }}else if(alteDlg.m_AItem==1){if (alteDlg.m_Alter1==alteDlg.m_Alter2) { ADOConn ado;CString sql = "update Custom set Cpass='"+alteDlg.m_Alter1+"' whereCname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql); AfxMessageBox("密码修改成功!"); }else{AfxMessageBox("两次密码输入不一致,请重新输入!"); }elseif (alteDlg.m_Alter1==alteDlg.m_Alter2){if (alteDlg.m_Alter1.GetAt(0)=='1'&&alteDlg.m_Alter1.GetLength()==11)ADOConn ado; CString sql = "update Custom setCphone='"+alteDlg.m_Alter1+"' where Cname='"+Cname+"'";ado.ExecuteSQL((_bstr_t)sql); AfxMessageBox("电话号码修改成功!"); }else {AfxMessageBox("电话号码格式不对!");} } else{AfxMessageBox("两次电话输入不一致,请重新输入!"); } }}}管理员部分:a.void CStaffDlg::OnButtonInsert() //添加新成员{// TODO: Add your control notification handler code hereCInsertDlg insertDlg;if (insertDlg.DoModal()==IDOK){if (insertDlg.m_Phone.GetAt(0)=='1'&&insertDlg.m_Phone.GetLength()==11){ADOConn ado;CString sql = "select count(*) Num from Custom whereCcode='"+insertDlg.m_Code+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);int Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));if (Num==0){CString str = "650500";sql = "select count(*) num from Custom";ResultSet = ado.GetRecordSet((_bstr_t)sql);Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));CString Cid,Cpass,Bid,Pmoney; double dou;Cid.Format("%d",++Num); Cid = str+Cid;Cpass = "000000";CString m_time; Bid= "00001";CTime time; time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d日%X");dou = (double)insertDlg.m_Pmoney;Pmoney.Format("%f",dou);// Otime = m_time; sql.Format("insert into Custom values('%s','%s','%s','%s',%s,'%s',%s,%s)",Cid,insertDlg.m_Name,Cpass,m_time,insertDlg.m_Code,Bid,Pmoney,insertDlg.m_Phone);ado.ExecuteSQL((_bstr_t)sql);sql = "select count(*) num from Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql);Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));CString Oid,OAmoney,Otype; Otype = "新注册";Oid.Format("%d",++Num);str = "240600";Oid = str+Oid; Bid= "00001";int flag = 0; OAmoney = "0";sql.Format("insert into Operatevalues('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,Cid,Bid,Sid,Otype,m_time,flag,Pmoney,OAmoney,Pmoney); ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("新增客户成功!"); }else{AfxMessageBox("该证件号已经注册!"); }}}b.void CStaffDlg::OnButtonDelete() //注销客户{// TODO: Add your control notification handler code hereCDelDlg delDlg;if (delDlg.DoModal()==IDOK){if (delDlg.m_DelId1==delDlg.m_DelId2){ADOConn ado;count(*) Num from Custom where Cid='"+delDlg.m_DelId1+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);int Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));if (Num!=0){CString str = "650500";sql = "delete from Custom whereCid='"+delDlg.m_DelId1+"'";ado.ExecuteSQL((_bstr_t)sql); CString Bid,Cid;Cid = "6505000";CString m_time;CTime time; time = CTime::GetCurrentTime();m_time = time.Format("%Y年%m月%d日%X");sql = "select count(*) numfrom Operate";ResultSet = ado.GetRecordSet((_bstr_t)sql);Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));CString Oid,OAmoney,Otype; Otype = "注销用户";Oid.Format("%d",++Num);tr = "240600";Oid = str+Oid; Bid= "00001";int flag = 2; OAmoney = "0";sql.Format("insert into Operatevalues('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,Cid,Bid,Sid,Otype,m_time,flag,OAmoney,OAmoney,OAmoney); ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("注销客户成功!"); }else{AfxMessageBox("不存在该用户!"); }}else {AfxMessageBox("两次输入用户ID不一致,请重新输入!"); }}}c.void CStaffDlg::OnButtonResher() 查询客户{// TODO: Add your control notification handler code hereCAlterDlg altDlg; if (altDlg.DoModal()==IDOK){if (altDlg.m_AItem==0) {if (altDlg.m_Alter1==altDlg.m_Alter2) {ADOConn ado;CString sql = "update Staff set Sname='"+altDlg.m_Alter1+"' whereSname='"+Sname+"'";ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("姓名修改成功!");}else{AfxMessageBox("两次姓名输入不一致,请重新输入!"); }} else if(altDlg.m_AItem==1){if (altDlg.m_Alter1==altDlg.m_Alter2){ADOConn ado;CString sql = "update Custom set Spass='"+altDlg.m_Alter1+"' where Sname='"+Sname+"'";ado.ExecuteSQL((_bstr_t)sql); AfxMessageBox("密码修改成功!"); }else{AfxMessageBox("两次密码输入不一致,请重新输入!"); }}else{if (altDlg.m_Alter1==altDlg.m_Alter2){if (altDlg.m_Alter1.GetAt(0)=='1'&&altDlg.m_Alter1.GetLength()==11){ADOConn ado;CString sql = "update Custom set Sphone='"+altDlg.m_Alter1+"' where Sname='"+Sname+"'";ado.ExecuteSQL((_bstr_t)sql);AfxMessageBox("电话号码修改成功!"); }else{AfxMessageBox("电话号码格式不对!");} }else{AfxMessageBox("两次电话输入不一致,请重新输入!"); } } }d.void CStaffDlg::OnButtonMoneyctrl() //资金管理{// TODO: Add your control notification handler code hereCSerchDlg serDlg;if (serDlg.DoModal()==IDOK){ADOConn ado;CString sql = "select count(*) Num from Custom where Cid='"+serDlg.m_Cid+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);int Num = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));if (Num!=0){CCusInfoDlg cusDlg;cusDlg.Cid = serDlg.m_Cid ADOConn ado;CString sql = "select * from Custom where Cid='"+cusDlg.Cid+"'";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);cusDlg.m_Cname = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cname");cusDlg.m_Cid = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");cusDlg.m_Code = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Ccode");cusDlg.m_Phone = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cphone");cusDlg.m_Rmoney = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");cusDlg.DoModal();ado.ExitConnect();}else{AfxMessageBox("不存在该客户!"); }}}e.void CStaffDlg::OnButtonAlter() //信息修改{CMoneyDlg monDlg; ADOConn ado;CString sql = "select count(*) Num from BMoney ";_RecordsetPtr ResultSet = ado.GetRecordSet((_bstr_t)sql);monDlg.m_GetNum = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));sql = "select count(*) Num from BInMoney";ResultSet = ado.GetRecordSet((_bstr_t)sql);monDlg.m_InNum = atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));sql = "select count(*) Num from VIP";ResultSet = ado.GetRecordSet((_bstr_t)sql);monDlg.m_VIPNum= atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("Num"));sql = "select * from Bank where Bid='00001'";ResultSet = ado.GetRecordSet((_bstr_t)sql);monDlg.m_Cash = (LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bmoney");ado.ExitConnect();monDlg.DoModal();}f.void CStaffDlg::OnButtonAnyse() //员工业绩分析{// TODO: Add your control notification handler code hereCStaffIDlg staDlg;staDlg.DoModal();}心得体会:这次课程设计体会非常深刻,首先在团队合作方面,我觉得自己作为队长没有两道好我的小队,这是我的失职。
ATM机子系统概要设计说明书
学号《软件工程》课程实验报告ATM机子系统概要设计说明书学生姓名专业、班级11计算机2班指导教师唐国峰成绩软件工程系2014 年 5 月 13 日目录1.引言 (1)1.1编写目的 (1)1.2项目背景 (1)1.3定义 (1)1.4参考资料 (2)2.任务概述 (2)2.1目标 (2)2.2运行环境 (2)2.3需求概述 (2)2.4条件与限制 (3)3.总体设计 (4)3.1处理流程 (4)3.2总体结构和模块外部设计 (5)3.3功能分配 (5)4. 接口设计 (5)4.1外部接口 (5)4.2内部接口 (6)5.数据结构设计 (6)5.1逻辑结构设计 (6)5.2物理结构设计 (7)6.运行设计 (9)6.1运行模块的组合 (9)6.2运行控制 (9)6.3运行时间 (9)7.出错处理设计 (10)7.1出错输出信息 (10)7.2出错处理对策 (10)8. 安全保密设计 (10)9. 维护设计 (10)1.引言1.1编写目的此概要设计书阐述对ATM取款机系统的设计考虑,包括取款机系统的基本处理流程、取款机系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为程序的详细设计提供基础。
1.2项目背景软件名称:ATM取款机任务提出者:天津城建大学计算机信息学院项目开发者:李桃飞徐海峰邱成娄警卫董博用户:为与ATM取款机软件开发有联系的决策人,开发组人员以及使用该系统的用户。
使用的计算机网络:本项目使用天津城建大学机房计算机机器以及各开发者本人的计算机进行编程。
1.3定义1. 账号:在银行中,事务应用的单个账号。
账号可以为多种类型,但是至少包括支票和存款。
每个顾客可以拥有多个账号。
2. ATM:一个工作站终端,使得顾客能够使用现金卡在ATM上进行自己的事务处理。
A TM同顾客进行交互,收集事务信息,并发送事务信息到中心计算机,由中心计算机确认和处理信息之后,将现金通过ATM提供给顾客。
计算机存储系统设计与管理
计算机存储系统设计与管理随着信息技术的快速发展,计算机存储系统在现代社会中发挥着越来越重要的作用。
在大数据时代的背景下,存储系统的设计和管理对于提高数据的处理效率和保障数据的安全性具有重要意义。
本文将从存储系统的基本原理、设计原则以及管理策略等方面进行论述,以期为读者深入了解和掌握计算机存储系统的设计与管理提供一定的参考。
一、存储系统的基本原理计算机存储系统是指计算机用于存储和管理数据的硬件和软件组件的集合。
它由主存储器、辅助存储器和高速缓存等组成,其中主存储器是计算机用于存储程序指令和运行数据的地方,而辅助存储器则用于长期存储和备份数据。
在存储系统的设计中,需要考虑的因素包括存储介质的选择、存储系统的可扩展性、数据的传输速率以及存储的可靠性等。
不同类型的应用场景需要采用不同的存储介质,例如硬盘驱动器(HDD)、固态硬盘(SSD)和光盘等。
在存储系统的可扩展性方面,应保证存储系统能够容纳不断增长的数据量,同时还需要考虑存储系统的传输速率,以满足对数据存取速度的要求。
此外,存储系统的可靠性也是设计时要考虑的重要因素,通过冗余备份和故障恢复机制来保障数据的完整性。
二、存储系统的设计原则在设计存储系统时,需要遵循一些基本原则,以确保存储系统能够高效地管理和存储数据。
1. 空间利用效率:存储系统应该能够充分利用存储介质的空间,尽可能减少数据的存储空间占用,并能够实现灵活的数据存储管理。
2. 数据访问速度:存储系统的设计应该能够提供快速的数据访问速度,减少数据的读取和写入延迟,提高数据处理效率。
3. 数据的可扩展性:随着数据量的不断增加,存储系统应该具备良好的可扩展性,能够容纳更多的数据并保持良好的性能。
4. 数据的安全性:存储系统应该能够保护数据的安全性,采取合适的存储加密和数据备份策略,以防止数据的丢失和泄露。
三、存储系统的管理策略存储系统的管理涉及到数据的存储、访问、备份和恢复等方面,对于数据的安全性和性能都有着重要影响。
管理信息系统课程设计--银行储蓄管理系统
管理信息系统课程设计--银行储蓄管理系统管理信息系统课程设计银行储蓄管理系统一、引言随着经济的快速发展和金融行业的日益繁荣,银行储蓄业务作为金融服务的重要组成部分,对于银行的运营和管理至关重要。
为了提高银行储蓄业务的效率和服务质量,设计一个高效、稳定、安全的银行储蓄管理系统成为了必然需求。
本课程设计旨在开发一个功能齐全、操作便捷的银行储蓄管理系统,以满足银行储蓄业务的日常管理和客户需求。
二、系统需求分析(一)功能需求1、开户管理:能够为新客户办理储蓄账户开户手续,包括收集客户信息、设置账户类型、初始存款等。
2、存款与取款:支持客户进行存款和取款操作,实时更新账户余额。
3、账户查询:客户可以查询自己账户的余额、交易明细等信息。
4、利息计算:根据不同的储蓄类型和利率,自动计算账户利息。
5、转账业务:实现客户账户之间的资金转账。
6、报表生成:生成各类储蓄业务报表,如日结报表、月结报表等,供银行管理人员进行分析和决策。
(二)性能需求1、响应时间:系统对于各种操作的响应时间应在可接受范围内,确保客户体验良好。
2、稳定性:系统应能够长时间稳定运行,避免出现故障和数据丢失。
3、安全性:保障客户信息和资金的安全,防止数据泄露和非法操作。
(三)数据需求1、客户信息:包括姓名、身份证号码、联系方式等。
2、账户信息:账户号码、账户类型、余额、开户日期等。
3、交易记录:存款、取款、转账的时间、金额、操作类型等。
三、系统设计(一)总体架构设计银行储蓄管理系统采用 C/S(客户端/服务器)架构,客户端负责与用户进行交互,服务器端负责数据存储和业务逻辑处理。
系统分为表示层、业务逻辑层和数据访问层。
表示层:采用图形用户界面(GUI),为用户提供直观、友好的操作界面。
业务逻辑层:处理各种业务逻辑,如开户、存款、取款、转账等。
数据访问层:负责与数据库进行交互,实现数据的增删改查操作。
(二)数据库设计1、数据库表结构设计客户表(customer):包含客户编号(customer_id)、姓名(name)、身份证号码(id_number)、联系方式(contact_info)等字段。
软件工程课程设计银行储蓄管理系统
资源利用率:评估 系统对硬件资源的 占用情况
数据库优化:采用索引、分区等技术提高查询效率 代码优化:精简冗余代码,提高代码复用率 系统架构优化:采用微服务、分布式等技术提高系统可扩展性和可靠性 安全性优化:加强数据加密、权限控制等措施保障系统安全
评估现有系统的性能和功能 分析系统瓶颈和潜在的改进点 确定升级和改进的目标和需求 制定升级和改进的方案和计划
用户登录验证功能 存款、取款功能
账户管理功能 查询余额功能
系统安全性:确保 数据安全,防止未 经授权的访问和篡 改。
系统稳定性:确保 系统在高负载和复 杂环境下能够稳定 运行。
系统可扩展性:为 未来功能扩展和升 级提供足够的空间 和支持。
系统易用性:提供 用户友好的界面和 操作体验,方便用 户快速上手和使用。
软件工程课程设计银行储蓄管理系统的应用具有广泛的实际意义,可以为银行储蓄业 务提供更好的服务,提高客户满意度,增强银行的市场竞争力
背景:软件工程课程设计银行储蓄管理系统是为了满足银行储蓄业务的需求,提高银行业务处理效率和客户满意度。 目的:通过软件工程课程设计,使学生掌握软件设计的基本原理和方法,提高软件开发和维护的能力。 意义:该系统的开发有助于提高学生的实践能力,培养创新思维和团队协作精神,为未来的软件开发工作打下基础。
菜单栏:包含所有功能选项, 方便用户快速访问
用户界面布局:简洁明了, 易于操作
工具栏:提供常用功能快捷 方式,提高操作效率
状态栏:显示系统状态和提示 信息,帮助用户更好地了解系
统运行情况
用户身份验证:采用 用户名和密码进行身 份验证,确保只有授 权用户能够访问系统。
数据加密:对敏感数 据进行加密存储,确 保数据在传输和存储 过程中的安全性。
银行计算机储蓄系统项目开发计划
银行计算机储蓄系统项目开发计划数字化时代,越来越多的银行机构开始采用计算机储蓄系统。
这种系统能够帮助银行更好地管理客户信息、存款记录和交易等信息。
对于银行管理和客户来说,这种系统能够提高效率、减少时间成本和效率成本。
因此,计算机储蓄系统已经成为银行业务逐渐实现数字化转型,提高竞争力的一种重要手段。
为此,本文将建立银行计算机储蓄系统项目开发计划,旨在提高银行的工作效率,优化客户体验,实现为客户提供更优质、更便捷的服务。
目标本项目的目标是开发一个稳定、高效、易用的银行计算机储蓄系统,以提供更优质、更便捷的服务,为客户提供高质量的银行存储服务。
需求分析银行计算机储蓄系统的开发需要从以下几个方面进行需求分析:功能性需求•存款管理:银行计算机储蓄系统应该能够对银行存款信息、利息等进行管理,同时控制账户余额和交易。
•客户管理:银行计算机储蓄系统应该能够对客户信息进行分类和管理。
•交易管理:应该针对不同的交易方式,对交易进行管理。
非功能型需求•稳定性:银行计算机储蓄系统需保证系统的稳定性和可靠性。
•数据安全:银行计算机储蓄系统需保证银行存款记录的真实性,保障客户隐私信息的安全。
技术路线•编程语言:本计划通过Python语言进行开发,利用Python语言进行数据分析和开发。
•数据库:使用关系型数据库,在开发过程中使用以下数据库:MySQL,Oracle,PostgreSQL等。
•环境:使用Linux系统,使用集成开发环境:PyCharm,Visual Studio Code等。
开发周期银行计算机储蓄系统开发周期为6个月,具体如下:•需求分析:一个月•系统设计:一个月•开发:两个月•测试:两个月•部署与上线:一个月项目管理•项目组织:由项目负责人、开发人员、测试人员、运营人员组成。
•定期报告:定期召开会议,报告各个阶段的进度和问题。
•风险管理:及时发现问题并及时解决。
对于重大风险,应及时采取应对措施。
通过本计划,银行计算机储蓄系统能够实现稳定、高效、易用的优化服务,满足客户不同级别的需求,提供全面的银行服务。
计算机系统中的存储系统与文件系统设计
计算机系统中的存储系统与文件系统设计计算机系统中的存储系统和文件系统设计是确保数据安全和高效存取的关键考虑因素。
存储系统负责数据的持久化存储,而文件系统则是对存储系统的管理和组织。
本文将重点讨论计算机系统中存储系统与文件系统的设计原理和实践应用。
一、存储系统设计原理1. 存储层次结构存储层次结构包括寄存器、缓存、主存储器和辅助存储器。
寄存器是最快的存储设备,但容量较小;缓存用于存储主存中的数据块,加速数据的读写操作;主存储器是计算机系统中的主要存储设备,容量较大,但读写速度较慢;辅助存储器用于长期存储,如硬盘和固态硬盘。
2. 存储器的访问速度与容量存储器的访问速度和容量通常是一对矛盾。
快速存储器往往容量有限,而容量较大的存储器其访问速度相对较慢。
设计存储系统时应根据实际需求,在不同的存储层次中选择合适的存储设备,以达到平衡的目标。
3. 存储器的易用性和可靠性存储系统的设计还应考虑易用性和可靠性。
易用性指的是对用户来说,存储系统应具备操作简便、存取便捷的特点;可靠性则是指存储系统能够保证数据的安全性和可靠性,如故障容忍能力和数据备份机制的设计。
二、文件系统设计原理1. 文件和目录的组织结构文件系统通过对文件和目录的组织和管理,实现对数据的逻辑封装。
文件是数据的基本单位,而目录则是对文件的组织和分类。
文件系统应设计合理的目录结构,以方便用户对文件的查找和管理。
2. 文件的存储管理文件系统的设计应考虑如何高效地存储和管理文件。
常见的文件存储管理方法包括顺序存储、索引存储和哈希存储等。
不同的存储管理方法适用于不同的文件访问模式和应用场景。
3. 文件的访问控制和保护文件系统应具备良好的访问控制和保护机制,确保只有授权用户才能访问文件,并保护文件免受未经授权的访问或篡改。
常见的文件访问控制方法包括用户身份验证、权限管理和加密技术等。
三、存储系统和文件系统设计的实践应用1. 分布式存储系统随着大数据时代的到来,分布式存储系统成为了解决海量数据存储和高并发访问的有效方式。
银行储蓄系统详细设计
银行储蓄系统详细设计一、模块设计系统总体结构方图:银行储蓄系统又大致分为两个模块:存款模块和取款模块。
1.身份验证模块:设置身份验证模块的目的保证储户信息的安全。
功能在于对申请登录的用户进行身份验证,通过者才能进入系统。
银行业务员输入储户用户ID,储户输入密码并确定,系统保存用户输入的用户ID和密码,并在customer表中查找customerid和customername字段值,看是否等于业务员输入的用户ID和密码,如相同则通过验证,否则不通过,并给出“密码错误”的提示,如数据库中不存在这样的记录,则给出“该用户不存在”的提示。
2.存款模块:设置存款模块的目的在于将储户的金额存到系统中并记录信息。
存款模块将储户存款金额录入存储到系统中,并附带显示其他储户信息。
该模块的输出项为存款金额,并且附带显示其他信息:用户名、账号、账户余额、利息金额。
当银行业务员输入存款金额后,系统进行处理,显示出账户余额,并且显示其他固定信息。
3.取款模块:设置取款模块的目的在于将储户的取款金额录入并存储到系统中。
取款模块将储户取款金额录入存储到系统中,并附带显示储户其他信息。
该模块的输出项为取款金额,并且附带显示其他信息:用户名、账号、账户余额、利息金额。
当银行业务员输入取款金额后,点击确定按钮,系统进行处理,显示出账户余额,并且显示其他固定信息。
4.存款单打印模块:设置存款单打印模块的目的在于将储户的存款信息以单据的形式及时反馈给储户。
存款单打印模块将储户存款金额以及储户帐户信息以单据形式反馈给储户。
该模块的输出项为存款人、存款银行、业务员编号、存款金额、存款日期、手续费、帐户余额。
当银行业务员输入存款金额后,系统进行处理,显示出账户余额,并且显示其他固定信息。
5.取款单打印模块:设置取款单打印模块的目的在于将储户的取款信息以单据的形式及时反馈给储户。
取款单打印模块将储户取款金额以及储户帐户信息以单据形式反馈给储户。
学习计算机存储系统设计
学习计算机存储系统设计计算机的存储系统是指用于存放和检索数据的硬件和软件组成部分。
它是计算机中至关重要的一部分,决定了计算机的性能、可靠性和扩展性。
对于学习计算机存储系统设计的人来说,这是一项非常重要且有趣的任务。
在本文中,我将探讨计算机存储系统设计的一些基本概念和方法。
首先,让我们介绍一下存储系统的基本组成部分。
存储系统主要由主存储器(RAM)和辅助存储器(硬盘、固态硬盘等)组成。
主存储器是计算机中用于暂时存储数据和指令的关键部件,而辅助存储器则用于长期存储数据。
了解这些组成部分的工作原理和特性对于设计高效的存储系统至关重要。
在设计存储系统时,一个重要的考虑因素是存储器的容量和速度。
存储器的容量决定了可以存储的数据量,而速度则决定了存储和检索数据的效率。
提升存储系统的容量和速度可以通过增加存储器的数量、优化存储器的排列方式以及采用更先进的存储技术来实现。
另一个需要注意的考虑因素是存储系统的可靠性。
存储系统在长时间运行中必须保证数据的安全性和一致性。
为了实现这一目标,设计师可以采用冗余存储和错误检测与纠正机制等方法来提高系统的可靠性。
例如,使用磁盘阵列技术可以通过将数据冗余存储在多个硬盘上来防止数据丢失。
此外,存储系统设计还需要考虑系统的可扩展性。
随着计算机越来越多地用于处理大数据和高性能计算任务,存储系统需要能够方便地扩展以满足不断增长的存储需求。
设计具有高度可扩展性的存储系统可以通过使用分布式存储技术和集群存储架构来实现。
在设计存储系统时,还需要考虑到存储器的访问效率。
存储系统中的数据访问通常分为随机访问和顺序访问两种方式。
对于随机访问,存储器需要提供低延迟的读写操作;而对于顺序访问,存储器需要提供高吞吐量的数据传输能力。
为了实现高效的数据访问,存储系统设计师可以利用各种缓存算法和预取技术来优化数据访问性能。
最后,一个成功的存储系统设计需要考虑到成本效益。
存储器的成本是设计过程中一个重要的约束因素。
