银行存取款管理系统设计说明
数据库课程设计 银行储蓄管理系统
《数据库系统概论》课程设计报告设计题目:银行储蓄管理系统姓名:学号:班级:设计起止时间:需求分析:在对软件工程相关知识学习之后,我们对设计软件有了基本的认识和一些应用技能。
在数据库的课程设计中,我们计划做一个小型的银行储蓄管理系统,包括了基本的存取转,和管理员对日常工作的管理功能。
功能设计:(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自动取款机系统编写:邓会审核:王旭日期:2016年6月5日院系:计算机学院专业:计算机科学与技术目录1.引言 (1)1.1编写目的 (1)1.2项目背景 (1)1.3定义 (1)1.4参考资料 (1)2.任务概述 (1)2.1目标 (1)2.2运行环境 (2)2.3需求概述 (2)2.4条件与限制 (7)3.总体设计 (8)3.1处理流程 (8)3.2总体结构和模块外部设计 (9)3.3功能分配 (9)4.接口设计 (9)4.1外部接口 (9)4.2内部接口 (9)5.数据结构设计 (10)5.1逻辑结构设计 (10)5.2物理结构设计 (11)6.运行设计 (12)6.1运行模块的组合 (12)6.2运行控制 (13)7.出错处理设计 (13)7.1出错输出信息 (13)7.2出错处理对策 (13)8.维护设计 (13)1.引言1.1编写目的随着科技的发展,城市人口的增加,人民生活水平的日益提高。
银行的业务也日益增加,客户日益增多,银行工作人员的工作量日益增加,为了减轻银行工作人员的负担,提高效率,减少错误率,方便客户。
本说明书的用途在于为编写该系统的人员提供指导方向,以便编程人员了解该系统的各个模块。
并进一步确定测试要求且制定测试计划。
说明书的读者为系统分析员、制作本系统的人员和使用部门的有关人员,为后面的系统开发提供理论指导和依据。
1.2项目背景待开发项目名称:ATM自动取款机系统的分析与设计。
项目背景:在市场经济的蓬勃发展和人们日益繁忙的条件下,现有的银行系统往往需要客户在办理手续时等待很长的时间,这不仅会浪费很多宝贵的时间,也会使得银行的业务人员十分的繁忙,需要很大的人力和财力。
基于这样的情况,ATM 取款机系统的开发就显的十分的重要!它可以减少银行的业务处理压力,尽量节省人们的时间,并且可以有效解决用户信息和资金信息的繁杂问题。
1.3定义专业术语与缩略词帐号:在银行中,事物应用的单个帐号。
ATM2
ATM系统分析和设计说明:报告中所使用的A TM机隶属工商银行,位于工大工商银行外面。
一、ATM机完整用例图二、取款、查询的用例说明三、取款、查询用例的活动图《取款》储户银联系统说明:该活动图是按用户正常登陆后进入取款功能而设计的活动图。
在主界面出点击取款功能按钮,进入取款主界面,用户输入取款金额,且此时可更改,系统将清空之前的输入。
若用户选择确认取款,可能会发生以下状况:①操作超时了,系统时钟到时后将自动吞卡(该状况可能发生在任一时刻),然后终止此次活动。
②ATM机此时余额不足,则ATM机锁住,显示ATM机暂停服务,终止此次活动。
③账户余额不粗,则ATM机提示余额不足信息并返回取款界面。
④储户输入取款金额超过一次上限(该工行ATM机上限为2500元),则ATM机提示一次取款不能超过2500元上限并返回取款界面。
⑤储户输入金额为0(或非整百)元,则A TM机提示输入非法并返回取款界面。
⑥储户输入合法金额,则银联系统修改账户余额、交易等信息,打钱并转入等待界面。
储户取钱后,ATM机显示此次交易成功。
储户可选择继续取款(回到初始取款界面)、查询(进入查询界面,结束此次流程)、返回(回到主界面,结束此次流程)、打印凭条(进入打印,结束此次流程)或退卡(结束此次活动)。
《查询》储户银联系统说明:该活动图是按用户正常登陆后进入查询功能而设计的活动图。
主界面出点击查询功能按钮,进入查询主界面,并选择所要查询的账户类别。
此时,银联系统需作出判断,即该用户是否有此项账户下的相关信息,若没有,则提示所查用户无此账户信息;若有,则进入查询系统内部数据库,显示该用户此项账户下的余额信息。
用户确认此项显示信息,并开始继续选择,如继续查询(回到查询主界面,开始一次新的活动)、选择转账功能(进入转账界面,结束此次流程)、选择取款功能(进入取款界面,结束此次流程)、选择返回(返回主界面,结束此次流程)、退卡(结束此次活动)。
软件设计规格说明书
系统设计规格说明书项目:银行储蓄管理系统参与人员:XXXX指导老师:XXXX完成时间:2011-4-25目录一、引言 (3)二、项目名称 (3)三、需求概述 (3)四、体系结构设计 (3)1、系统登录 (5)2、实时处理 (5)五、数据库设计 (5)1、逻辑结构设计 (5)2、物理结构设计 (6)六、界面设计 (7)七、过程设计 (9)八、参考资料 (12)软件设计规格说明书一、引言在现代化社会中随着银行业的激烈竞争,如何更好的提高办事效率,降低成本,提高银行系统的电算化及现代化程度,充分满足客户的需求,提供更优质高效的服务,成为各银行正向追逐的目标。
因此,开发一套方便快捷,高效实用,安全稳定的银行储蓄系统软件,便成了银行的当务之急。
它的意义也就显得尤为重要了。
过去落后的银行操作系统已经不适应现代社会的需求了,伴随着银行业激烈的竞争,急需出现一套更符合银行需要的新一代银行储蓄系统。
二、项目名称银行储蓄管理系统三、需求概述银行账户管理、储蓄业务处理系统为方便储户,某银行拟开发计算机储蓄系统。
储户填写的存款单、取款单或转账单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息(若为新储户须建立账户),并打印存款单给储户;如果是取款,系统首先核对密码,密码正确则计算利息并打印利息清单给储户;如果是转账,系统首先核对密码,密码正确则检索转入账户,存在则进行转账,并打印转账回执单给储户,还可向储户提供历史业务的查询功能。
四、体系结构设计根据软件的需求规格说明书,可以画出软件的体系结构图,如下图所示:图1 银行储蓄系统的体系结构图银行储蓄系统可以分为两大主要功能模块:系统登录和实时处理。
1、系统登录启动系统后,进入系统登录界面,各业务员按各自的ID号和密码登录储蓄系统主界面,然后业务员才能处理业务。
2、实时处理该功能是储蓄业务处理系统主要的业务处理模块,包括处理存款、取款、查询、转账业务四个子模块,每项业务处理完毕,都由计算机自动记日志、记账。
C++程序设计课程设计银行账户管理系统说明书
C++程序设计课程设计说明书银行账户管理系统指导教师:设计者:专业班级:设计时间:《C++程序设计》课程设计计划书专业班级:设计题目:银行账户管理系统一、已知技术参数或设计前提1、每个用户都有自己的用户名,密码,身份证号,存款等属性。
2、银行应对所有用户实行管理,用户的增减,历史记录的保存,提供存取款,汇款,出入账查询等服务。
二、设计内容(一)管理员模式1、开户,管理员输入用户姓名、身份证号码;用户输入密码、确认密码。
2、挂失,管理员输入用户卡号进行操作。
3、取消挂失,同上。
4、消户,管理员输入用户帐号,密码,显示用户信息,确认后进行操作。
(二)用户模式1、存款,用户输入帐号,密码,存款金额进行操作。
2、取款,同上。
3、查询,输入密码。
4、转账,输入本人密码,对方账号,转账金额进行此操作。
5、更改密码,输入原密码,再输入新密码,然后确认新密码。
三、课程设计工作计划1、确定题目,成立设计小组,做用户需求分析2、查阅资料,进行问题分析,制定方案,确定成员分工3、根据方案编写程序并进行调试4、撰写设计说明书,完成设计5、提交设计内容,答辩四、相关教材及参考书目1、谭浩强.C++语言基础课程.清华大学出版社,20092、郑莉.C++语言程序设计案例教程.清华大学出版社,20053、王瑞等.Visual C++数据库系统开发完全手册.人民邮电出版社,20064、郑莉. C++语言程序设计习题与实验指导.清华大学出版社,20075、张基温. C++程序设计基础例题与习题.高等教育出版社,20086、于永彦. C++程序设计基础案例教程.北京大学出版社,20097、/book/c.html指导教师签字:系主任签字:2010年月日银行账户管理系统一、需求分析银行为广大用户提供快捷的金融服务,需要安全、稳定、高效的信息系统。
银行的业务信息系统种类很多,包括渠道层的各种终端系统、产品层的综合业务系统、信贷管理系统、资金清算系统等等,统称为前台业务系统。
银行账户管理系统详细设计说明书
银行账户管理系统详细设计说明书本文档是银行账户管理系统详细设计说明书,旨在全面描述银行账户管理系统的设计方案和具体实现细节。
本文档包含以下章节:1.引言1.1 文档目的1.2 读者对象1.3 范围1.4 定义、缩略词和缩写1.5 参考文献2.系统概述2.1 系统描述2.2 功能需求2.3 非功能需求2.4 系统界限2.5 依赖方3.架构设计3.1 系统结构图3.2 模块划分3.3 数据库设计3.4 接口设计3.5 硬件和软件需求4.功能设计4.1 登录模块设计4.2 账户管理模块设计 4.3 存款模块设计4.4 取款模块设计4.5 转账模块设计4.6 查询模块设计5.安全设计5.1 用户认证设计5.2 访问控制设计5.3 数据保护设计5.4 日志记录设计5.5 安全审计设计6.性能设计6.1 响应时间设计 6.2 并发设计6.3 负载均衡设计6.4 缓存设计7.测试策略7.1 单元测试策略 7.2 集成测试策略 7.3 系统测试策略 7.4 性能测试策略7.5 安全测试策略8.部署计划8.1 硬件准备8.2 软件安装8.3 配置文件8.4 数据库初始化 8.5 系统部署9.维护和支持9.1 错误处理9.2 日志分析9.3 故障排除9.4 系统更新10.参考文献附件:1.数据库设计文档2.系统运行图示法律名词及注释:1.账户:指银行为客户开立的账户,用于存取款和转账等金融交易。
2.登录:指用户通过输入正确的用户名和密码,以身份验证的方式进入系统。
3.存款:指用户将现金或支票存入银行账户增加余额的操作。
4.取款:指用户用支票、银行卡或提款单等方式从银行账户中取出一定金额的操作。
5.转账:指用户将自己的账户余额从一张银行卡转移到另一张银行卡的操作。
ATM自动取款机系统详细设计说明书
ATM 系统需求分析设计与改进目录1.引言 (1)1.1 编写目的 (1)1.2 定义 (1)2.总体设计 (1)2.1 需求概述 (1)2.2 软件结构 (2)3.基于 UML 的 ATM 自动取款机系统分析设计 (2)3.1 CIM-1 定义业务流程 (2)3.2 CIM-2 分析业务流程 (4)3.2.1 客户取钱业务流程活动图 (4)3.2.2 客户转账业务流程活动图 (4)3.2.3 客户修改密码业务用例活动图 (5)3.2.4 客户查询余额业务用例活动图 (6)3.3 CIM-3 定义系统范围 (8)3.3.1 客户包下可启动的系统用例 (8)3.3.2 银行管理员包下的系统用例图 (8)3.2.3 定时启动者包下的系统用例 (9)3.4 PIM-1 分析业务流程 (9)3.4.1 SUC001- 取款系统用例业务 (9)3.4.2 SUC002-转账业务系统用例 (10)3.4.3 SUC003- 修改密码业务系统用例 (11)3.4.4 SUC004- 查询余额业务系统用例 (12)3.5 PIM-2 分析业务规则状态图(取款) (13)4.程序描述 (14)4.1 取款子系统 (17)4.1.1 功能 (17)4.1.2 性能 (17)4.1.3 输入项目 (17)4.1.4 输出项目 (18)4.1.5 算法 (18)4.1.6 程序逻辑 (19)4.1.7 接口 (19)3.1.8 存储分配 (20)3.1.9 限制条件 (20)3.1.10 测试要点 (20)4.2 存款子系统 (20)4.2.1 功能 (20)4.2.2 性能 (20)4.2.3 输入项目 (20)4.2.4 输出项目 (20)4.2.5 算法............................................................................................................................... 2 14.2.7 接口 (22)4.2.8 存储分配 (23)4.2.9 限制条件 (23)4.2.10 测试要点 (23)4.3 转账子系统 (23)4.3.1 功能 (23)4.3.2 性能 (23)4.3.3 输入项目 (23)4.3.4 输出项目 (23)4.3.5 算法 (24)4.3.6 程序逻辑 (25)4.3.7 接口 (25)4.3.8 存储分配 (26)4.3.9 限制条件 (26)4.3.10 测试要点 (26)4.4 查询余额子系统 (26)4.4.1 功能 (26)4.4.2 性能 (26)4.4.3 输入项目 (26)4.4.4 输出项目 (26)4.4.5 算法 (27)4.4.6 程序逻辑 (28)4.4.7 接口 (28)4.4.8 存储分配 (29)4.4.9 限制条件 (29)4.4.10 测试要点 (29)4.5 修改密码子系统 (29)4.5.1 功能 (29)4.5.2 性能 (29)4.5.3 输入项目 (29)4.5.4 输出项目 (29)4.5.5 算法 (30)4.5.6 程序逻辑...................................................................................................................... 3 14.5.7 接口............................................................................................................................... 3 14.5.8 存储分配 (32)4.5.9 限制条件 (32)4.5.10 测试要点 (32)4.6 打印凭条子系统 (32)4.6.1 功能 (32)4.6.2 性能 (32)4.6.3 输入项目 (32)4.6.4 输出项目 (33)4.6.5 算法 (33)4.6.7 接口 (34)4.6.8 存储分配 (35)4.6.9 限制条件 (35)4.6.10 测试要点 (35)1.引言1.1 编写目的ATM 自动取款机系统是银行业务流程过程中十分重要且必备的环节之一,在银行业务流程当中起着承上启下的作用,其重要性不言而喻。
银行储蓄管理系统概要设计说明书
GB 8567-2023银行储蓄管理系统概要设计说明书撰写人: 施靖豆健美雷明昊王新尧***: **日期: 2023-4-6目录1引言 ............................................................................................ 错误!未定义书签。
1.1编写目的 ......................................................................................... 错误!未定义书签。
1.2背景................................................................................................... 错误!未定义书签。
1.3定义................................................................................................... 错误!未定义书签。
1.4参考资料 ......................................................................................... 错误!未定义书签。
2总体设计 .................................................................................... 错误!未定义书签。
2.1需求规定 ......................................................................................... 错误!未定义书签。
ATM机取款系统的系统分析与设计-本科实验报告
本科实验报告课程名称:系统分析与设计实验项目:《ATM机取款系统》实验实验地点:行逸楼A103专业班级:软件1309 学号2013005661 学生姓名:蔡潇钰指导教师:杨丽凤2015年11月 1 日一、实验目的通过《系统分析与设计》实验,使学生在实际的案例中完成系统分析与系统设计中的主要步骤,并熟悉信息系统开发的有关应用软件,加深对信息系统分析与设计课程基础理论、基本知识的理解,提高分析和解决实际问题的能力,使学生在实践中熟悉信息系统分析与设计的规范,为后继的学习打下良好的基础。
二、实验要求学生以个人为单位完成,自选题目,班内题目不重复,使用UML进行系统分析与设计,并完成实验报告。
实验报告以纸质版(A4)在课程结束后提交(10周)。
三、实验主要设备:台式或笔记本计算机四、实验内容1 选题及项目背景A T M机取款系统的分析与设计2 定义ATM(AutomanticTellerMachine)自动取款机是由计算机控制的持卡人自我服务型的金融专用设备.在我国,基本上所有的银行系统都有自己的ATM系统.ATM利用磁性代码卡或智能卡实现金融交易,代替银行前台工作人员的部分工作.顾客可以在ATM机上取钱、查询余额、转账和修改密码等业务.除此之外,ATM自动取款机还具有维护、测试、事件报告、监控和管理等多种功能.3 参考资料《系统分析与设计》作者:李爱萍人民邮电出版社4 系统分析与设计4.1需求分析4.1.1识别参与者用户(使用ATM机进行存取款)ATM机管理员(维护ATM机,往ATM机里放钱等)4.1.2 对需求进行捕获与描述用例名称:ATM机取款系统执行者:用户目的:完成一次取款流程)4.1.3 用例图通过已掌握的需求,初步了解系统所要完成的功能。
下面给出用例图。
余额查询图4.1 参与者用例图4.1.4 分析与讨论1)建模用例图的步骤、方法?1.识别系统的参与者;2.确定用例;3.明确参与者与用例间的关系2)如何识别系统的参与者?应该如何划分用例,应注意哪些问题?1.谁使用系统的主要功能;2.谁改变系统的数据;3.谁从系统中获取主要信息。
课程设计说明书 自助取款机软件程序设计
课程设计说明书课程名称:软件程序设计题目:自助取款机软件程序设计专业班级:学生姓名:学号:指导教师:设计周数: 2周设计成绩:1、课程设计目的(1)初步掌握使用C#工具设计一个具体实例的方法,包括软件的设计,以及调试的全过程。
(2)通过本次设计掌握使用c#语言中窗体的建立,各个控件的使用,以及界面的设计。
(3)进一步巩固所学的C#及数据库的相关理论知识,提高软件编程的能力。
(4)本设计进一步加强对面向对象程序设计思想的理解,增强对C#程序语言的灵活运用。
结合数据库知识,网络通信技术,实现基本的应用软件,为以后从事相关行业打下软件编程基础。
2、系统的分析与设计自动取款机又称ATM,是Automatic Teller Machine的缩写,意思是自动柜员机,因大部分用于取款,又称自动取款机。
它是一种高度精密的机电一体化装置,利用磁性代码卡或智能卡实现金融交易的自助服务,代替银行柜面人员的工作。
可提取现金、查询余额、进行账户之间资金划拨、余额查询等工作;还可以进行现金存款、存折补登、中间业务等工作。
持卡人可以使用信用卡或储蓄卡,根据密码办理自动取款、查询余额、转账、现金存款,存折补登,购买基金,更改密码,缴纳手机话费等业务。
ATM自动取款机系统向用户提供一个方便、简单、及时、随时随地可以随心所欲存取款的互联的现代计算机化的网络系统。
可以大大减少工作人员,节约人力资源的开销,同时由于手续程序减少也可以减轻业务员的工作负担,有效地提高了整体的工作效率和精确度。
减少了用户办理业务的等待时间;用户可以随时随地可以随心所欲存取款,并且操作简单易懂;用户还可以选择在柜台办理业务或自己在自动提款机和自动取款机办理业务。
2.1需求分析2.1.1 课设任务(1)分析题目,选定设计方案。
(2)画出软件框架结构图以及关键程序流程图。
(3)使用C#语言和.net框架,并结合数据库,实现软件功能。
(4)调试,修改,反复运行去除BUG,并美化完善程序。
ATM自动取款机系统—详细设计说明书
文档名称:详细设计说明书项目名称:ATM自动取款机系统编写:张恒友审核:王旭日期:2016年6月5日院系:计算机学院专业:计算机科学与技术一.引言1.1编写目的根据《需求规格说明书》,在仔细考虑讨论之后,我们又进一步对《ATM自动取款机系统》软件的功能划分、数据结构、软件总体结构进行设计,从而完成概要设计,作为软件详细设计的基础。
1.2项目背景项目委托单位:计算机学院软件工程实验。
开发单位:班ATM自动取款机系统项目组。
由于柜台常常会拥挤,排队的人很多,而且大多数的客户都是取款,存款等,而有些办理业务的需要一定的时间,这会使得一些只需要取款等的客户会有较长时间的等待。
所以银行希望设计一个系统,能让客户在系统上进行简单的操作,比如存款、取款、查询余额、转账等。
1.3定义ATM: Automatic Teller Machine,自动柜员机。
1.4参考资料《计算机软件需求说明编制指南》《计算机软件产品开发文件指南》《ATM系统可行性分析报告》。
《软件设计与体系结构》《软件工程——实践者的研究方法》二.任务概述目标现如今,ATM在一定程度上存在很大的安全隐患,给用户造成很大的经济损失。
为了解决这样的问题,我们小组提出了改进ATM自动取款机系统,使用户在操作过程中更加安全,放心,更便捷。
运行环境硬件环境:CPU:1GHZ及以上内存:1G以上硬盘:20G以上软件环境:操作系统:Microsoft Windows XP或更高版本数据库:Microsoft SQL Server 2005Web服务器:以上支持浏览器:Internet Explorer 及其以上版本开发环境:MyEclipse,jdk,Microsoft SQL Server 2005条件与限制随着科技的发展,人们生活水平的不断提高,高性能高效率高安全的产品越来越受到人们的欢迎。
ATM自动取款机是一种非常智能的机器,人们可以直接和它交互,代替以前的手工操作,大大提高了银行的工作效率。
ATM自动取款机系统详细设计说明书教学内容
ATM系统需求分析设计与改进目录1.引言 (1)1.1编写目的 (1)1.2定义 (1)2.总体设计 (1)2.1需求概述 (1)2.2软件结构 (2)3.基于UML的ATM自动取款机系统分析设计 (2)3.1 CIM-1定义业务流程 (2)3.2 CIM-2 分析业务流程 (4)3.2.1 客户取钱业务流程活动图 (4)3.2.2 客户转账业务流程活动图 (4)3.2.3 客户修改密码业务用例活动图 (5)3.2.4 客户查询余额业务用例活动图 (6)3.3 CIM-3定义系统范围 (8)3.3.1 客户包下可启动的系统用例 (8)3.3.2 银行管理员包下的系统用例图 (8)3.2.3定时启动者包下的系统用例 (9)3.4 PIM-1分析业务流程 (9)3.4.1 SUC001-取款系统用例业务 (9)3.4.2 SUC002-转账业务系统用例 (10)3.4.3 SUC003- 修改密码业务系统用例 (11)3.4.4 SUC004- 查询余额业务系统用例 (12)3.5 PIM-2 分析业务规则状态图(取款) (13)4.程序描述 (14)4.1 取款子系统 (17)4.1.1功能 (17)4.1.2性能 (17)4.1.3输入项目 (17)4.1.4输出项目 (18)4.1.5算法 (18)4.1.6程序逻辑 (19)4.1.7接口 (19)3.1.8存储分配 (20)3.1.9限制条件 (20)3.1.10测试要点 (20)4.2存款子系统 (20)4.2.1功能 (20)4.2.2性能 (20)4.2.3输入项目 (20)4.2.4输出项目 (20)4.2.5算法 (21)4.2.7接口 (22)4.2.8存储分配 (23)4.2.9限制条件 (23)4.2.10测试要点 (23)4.3 转账子系统 (23)4.3.1功能 (23)4.3.2性能 (23)4.3.3输入项目 (23)4.3.4输出项目 (23)4.3.5算法 (24)4.3.6程序逻辑 (25)4.3.7接口 (25)4.3.8存储分配 (26)4.3.9限制条件 (26)4.3.10测试要点 (26)4.4 查询余额子系统 (26)4.4.1功能 (26)4.4.2性能 (26)4.4.3输入项目 (26)4.4.4输出项目 (26)4.4.5算法 (27)4.4.6程序逻辑 (28)4.4.7接口 (28)4.4.8存储分配 (29)4.4.9限制条件 (29)4.4.10测试要点 (29)4.5 修改密码子系统 (29)4.5.1功能 (29)4.5.2性能 (29)4.5.3输入项目 (29)4.5.4输出项目 (29)4.5.5算法 (30)4.5.6程序逻辑 (31)4.5.7接口 (31)4.5.8存储分配 (32)4.5.9限制条件 (32)4.5.10测试要点 (32)4.6 打印凭条子系统 (32)4.6.1功能 (32)4.6.2性能 (32)4.6.3输入项目 (32)4.6.4输出项目 (33)4.6.5算法 (33)4.6.7接口 (34)4.6.8存储分配 (35)4.6.9限制条件 (35)4.6.10测试要点 (35)1.引言1.1编写目的ATM自动取款机系统是银行业务流程过程中十分重要且必备的环节之一,在银行业务流程当中起着承上启下的作用,其重要性不言而喻。
ATM系统的分析与设计
ATM自动取款机系统的分析与设计需求说明第一部分引言1.1编写目的本文档描述了自动取款机系统的软件需求。
1.2适用范围ATM的功能要求支持计算机银行网。
1.3背景ATM自动提款机系统。
ATM自动取款机是由计算机控制的持卡人自我服务型的金融专用设备。
ATM是英文Automatic Teller Machine的缩写。
ATM是最普遍的自助银行设备,可以提供最基本的银行服务之一,即出钞交易,有些全功能的产品还可以提供信封存款业务。
在ATM自动取款机上也可以进行账户查询、修改密码和转账的业务。
作为自助式金融服务终端,除了提供金融业务功能之外,ATM自动取款机还具有维护、测试、事件报告、监控和管理等多种功能。
ATM自动取款机系统,是一个有终端机,ATM系统,数据库组成的应用系统。
系统功能有用户在ATM上提取现金、查询账户余额、修改密码及转账功能。
ATM自动取款机系统向用户提供一个方便、简单、及时、随时随地可以随心所欲存取款的互联的现代计算机化的网络系统。
可以大大减少工作人员,节约人力资源的开销,同时由于手续程序减少也可以减轻业务员的工作负担,有效地提高了整体的工作效率和精确度。
减少了用户办理业务的等待时间;用户可以随时随地可以随心所欲存取款,并且操作简单易懂;用户还可以选择在柜台办理业务或自己在自动提款机和自动取款机办理业务。
第二部分任务概述2.1目标系统功能实现用户在A TM上提取现金、查询账户余额、修改密码及转账功能。
2.2用户的特点本系统功能齐全,交互界面简单便捷,适用社会广大人群,且能满足用户安全性需求。
2.3假定和约束本系统不具备语音提示功能,不能为盲人等群体提供服务。
第三部分需求规定3.1对功能的规定3.1.1系统功能关系图用例图:3.1.2系统功能概述ATM自动取款机系统相关的主要对象有:用户:使用ATM自动取款机进行现金交易。
进行取款、查询余额、设置密码、转账等操作。
系统:对用户的需求进行接收,通过与数据库的交互,根据对用户应用服务的响应,更新数据库中用户的信息。
银行ATM服务系统建模与仿真设计说明书
中北大学课程设计说明书学生姓名:学号:学院:机械与动力工程学院专业:工业工程题目:系统建模与仿真指导教师:职称: 副教授职称:2014年 6月 9日银行ATM服务系统建模与仿真设计说明书1 系统描述中北大学工商银行ATM自助存款机为全校师生提供自助取款服务,此服务系统由ATM机,存款人等构成。
目前工商银行只有一台自助存款机,在日常的服务过程中经常出现排队等待的现象。
在高峰期,存款人到达率服从一定的概率分布,服务速率依赖于存款人的操作时间。
建模的目的是在假定存款人到达时间间隔和存款服务花费的时间服从一定的概率分布时,考察ATM机的忙闲情况以及服务质量,并提出改进意见2 系统分析2.1 系统的实体分析在工商银行ATM是一个单台单队的服务系统,由三类实体组成:ATM机、存款人及排队队列。
ATM机是永久实体,存款人是临时实体,排队队列是一类特殊实体2.2 分析队列实体的操作由于存款服务中只有一个队列,而且存款人不会因为排队人数太多而离去,因此队列规则很简单,没有换队等特殊的队列操作。
2.3 系统的流程图描述2.4 模型参变量读者到达时间、服务时间等,这些变量由输入数据分析得出。
2.5 排队规则队列的排队规则是先到先服务,即每名读者到达时排在队尾,工作人员先为排在队首的读者服务。
3 系统仿真输入数据分析3.1 数据的收集分布的假设根据存款人到达时间分布直方图以及ATM机服务时间与已知的统计分布的比较可以假设存款人到达时间服从泊松分布和ATM机服务时间符合负指数分布。
3.3 参数估计3.3.1 样本均值和样本方差到达时间间隔样本均值:到达时间间隔样本方差:1116niiX xn===∑222111() 34.981niiS x nXn==-=-∑服务时间样本均值:服务时间样本方差:3.3.2 估计量的选取顾客到达时间服从泊松分布,其估计量选取为: 6 对于ATM 机服务时间服从负指数分布,所以,起估计量选取为:0.1673.4 拟合度检验(1)到达时间间隔拟合度检验1 0.0625 0.0588 计算得:查表得:由于故可认为顾客到达时间间隔服从泊松分布。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:银行存取款管理设计功能:能够输入和查询客户存款取款记录。
在客户文件中,每个客户是一条记录,包括编号、客户姓名、支取密码、客户地址、客户电话、账户总金额;在存取款文件中,每次存取款是一条记录,包括编号、日期、类别、存取数目、经办人。
类别分为取款和存款两种。
本系统能够输入客户存款或取款记录;根据客户姓名查询存款和取款记录。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;2、建立一个文件,输入客户的必要信息,能对文件进行显示、输入、修订、删除等。
3、进一步要求:完成客户姓名查询存款和取款记录,并能得到每次帐户总金额。
要求:1、用C语言实现系统;2、利用结构体数组实现信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。
课程设计实验报告要求:1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分。
2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、小结等。
一、系统简介设计一个基于结构体数组的银行存取款管理系统,能实现对客户存取款信息进行录入、修改、删除、查询和输出等基本操作。
二、需求分析银行存取款管理系统应实现以下功能:1、能录入用户存取款的基本信息,包括客户姓名、性别、年龄、住址以及存取款日期、数目等基本信息,保存到结构体数组中。
2、能根据输入客户姓名进行存取款信息的查询以及修改、删除等操作。
3、能根据客户姓名进行查找后,以列表的方式将客户存取款信息显示在屏幕上。
三、概要设计1、系统功能结构图根据项目的开发要求,本系统划分成六个主功能模块:录入客户存取款信息模块、修改客户存取款信息模块、删除客户存取款信息模块、查询客户存取款信息模块、输出客户存取款模块和系统退出模块。
系统功能结构图如下:2、重要数据的数据结构设计客户存取款信息的记录项用结构体Student表示,包括5个属性:name、sex、age、addr、num 分别代表客户姓名、性别、年龄、住址以及客户存取款数目。
struct student{char acad[10],name[20],sex; //客户账号,姓名,性别int age; //客户年龄char addr[30]; //客户住址long int num; //存取款数目};3、函数设计银行存取款管理系统程序采用了结构化程序设计的思想,由4个.h头文件和3个.c源文件组成。
程序中除了主函数外,共设计了以下7个函数,分别包含在3个.c源文件中。
以下是这些函数的函数原型及功能设计。
(1)void inputing(student *p);函数功能:输入函数中的输数据部分并保存的函数。
(2)void input(student *p,int i);函数功能:输入函数。
输入客户的基本信息,包括客户姓名、性别、年龄、住址等。
(3)void insert(student *p,int i);函数功能:插入函数。
插入要输入的客户信息。
(4)void output(student *p,int i);函数功能:输出函数。
将需要的客户信息以列表的形式显示在屏幕上。
(5)void sort(student *p,int n);函数功能:排序函数。
按要求将客户存取款信息以账号大小的顺序排列出来。
(6)void find(student *p,int n);函数功能:查找函数。
按要求通过输入客户姓名的方式查询客户存取款信息。
(7)int del(student *p,int n);函数功能:删除函数。
通过输入要删除的客户姓名,查询后删除该客户存取款信息。
四、调试分析本系统在VC6下编译调试通过,可顺利运行,各项功能达到设计要求。
本系统程序由4个.h头文件和3个.c源文件构成。
系统调试主要在VC++6.0下进行,采用分模块调试的方法进行编译,即完成一个函数功能模块就编译一个功能模块,最后再进行整体编译并生成可执行文件Student.exe。
在调试的过程中,主要碰到了以下问题:1、清屏函数在TC 中使用的clrsrc() 函数,但在VC6中没有该函数也没有相应的函数。
查资料,发现在VC中可使用system() 函数调用系统命令cls 实现。
2、在使用C语言系统函数进行数据输入的时候,发现使用getchar()和gets()函数输入字符和字符串的时候,系统经常跳过相应的输入语句,无法输入数据。
查资料,是C系统的输入处理的输入缓存问题,解决方法是在进行字符和字符串输入的时候,先使用fflush(stdin) 函数清除输入缓存,即可正常输入字符和字符串。
五、用户手册本系统是WIN32控制台程序,可在WINDOW和DOS环境下运行,执行文件名称:Student.exe。
运行程序后,首先显示系统信息和版权信息,用户按任意键后进行主功能菜单。
在主功能菜单中输入相应的数字可执行相应的程序功能,包括录入客户存取款信息、修改客户存取款信息、删除客户存取款信息和输出所有客户存取款信息,输入4可进行查询子菜单,可进行按学号查询和按年级查询学生信息。
在主功能菜单按7可结束本系统的运行并自动关闭运行窗口。
六、程序代码://***********银行存取款管理系统****************#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>//自定义结构体程序struct student{char acad[10],name[20],sex; //客户账号,姓名,性别int age; //客户年龄char addr[30]; //客户住址long int num; //存取款数目};void inputing(student *p); //声明输入函数中的输数据部分并保存的函数void input(student *p,int i); //声明输入函数void insert(student *p,int i); //声明插入函数void output(student *p,int i); //声明输出函数void sort(student *p,int n); //声明排序函数void find(student *p,int n); //声明查找函数int del(student *p,int n); //声明删除函数void main(){system("color 34");student *q=NULL; //自定义类型指针int i=0,j,k,b=0;do{printf("\t\t|-------------------------------------------|\n");printf("\t\t|----------一银行存取款管理系统-------------|\n");printf("\t\t| by:xiaqingsong |\n");printf("\t\t|-------------------------------------------|\n");printf("\t\t| 1.输入客户信息 2.添加客户信息|\n");printf("\t\t| 3.排序客户信息 4.查找客户信息|\n");printf("\t\t| 5.删除客户信息 6.显示客户信息|\n");printf("\t\t| 7.退出系统|\n");printf("\t\t|-------------------------------------------|\n");printf("\t\t\t\t请选择菜单: ");scanf("%d",&j);switch(j){case 1:b++;if(b!=1){printf("你已经输入过一次了,不能再选择,加入可以选择<2.添加客户信息>\n");break;}else{printf("请输入要输入的客户人数:");scanf("%d",&i);while(b<=0){printf("输入错误,请重新输入要输入的客户人数:");scanf("%d",&i);}q=(student *)malloc(i*sizeof(student));input(q,i); //调用输入函数break;}i++;q=(student *)realloc(q,i*sizeof(student));insert(q,i-1); //调用插入函数break;case 3:sort(q,i); //调用排序函数break;case 4:find(q,i); //调用查找函数break;case 5:k=del(q,i); //调用删除函数if(k==1){i--;q=(student *)realloc(q,i*sizeof(student));}break;case 6:output(q,i); //调用输出函数break;printf("程序即将退出...\n");break;default:printf("菜单选择错误!");}}while(j!=7);free(q);}//输入函数中的输数据部分并保存的函数void inputing(student *p){printf("请输入客户账号:");scanf("%s",p->acad);printf("请输入客户姓名:");scanf("%s",p->name);printf("输入客户住址:");scanf("%s",&(p->addr));do{printf("输入客户性别<m:男/f:女>:");fflush(stdin);scanf("%c",&(p->sex));if(p->sex!='m'&&p->sex!='f'){printf("输入错误,重新");}}while(p->sex!='m'&&p->sex!='f'); do{printf("输入客户年龄:");scanf("%d",&(p->age));if(p->age<1||p->age>100){printf("输入错误,重新");}}while(p->age<1||p->age>100);do{printf("输入客户存取款数目:");scanf("%ld",&(p->num));if(p->num<0||p->num>1000000){printf("输入错误,重新");}}while(p->num<0||p->num>1000000);}//输入函数void input(student *p,int i){int x;for(x=0;x<i;x++,p++){printf("请输入第%d名客户存取款信息:\n",x+1);inputing(p); //调用输入函数中的输数据部分并保存的函数printf("\n");}}//输出函数void output(student *p,int i){printf("账号\t姓名\t性别\t年龄\t住址\t存取款数目");int x=0;for(x=0;x<i;x++,p++){printf("%s\t%s\t%c\t%d\t%s\t%ld\n",p->acad,p->name,p->sex,p->age,p->addr,p->num);}printf("\n");}//插入函数void insert(student *p,int i){p=p+i;printf("请输入要插入的客户存取款信息:\n");inputing(p); //调用输入函数中的输数据部分并保存的函数printf("\n");}//排序函数void sort(student *p,int n){student t;int i,j;{printf("要求按账号从小到大排序.\n");for(i=0;i<n-1;i++){for(j=0;j<n-i-1;j++){if(strcmp((p+j)->acad,(p+j+1)->acad)==1){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}}}}output(p,n);}//查找函数void find(student *p,int n){student t;int i=0;printf("要求按客户姓名查找:");printf("请输入要查找的姓名:");scanf("%s",);for(i=0;i<n;i++){if(strcmp(,(p+i)->name)==0){break;}}if(i>=n){printf("查找的姓名是%s的客户,没有找到!\n",);}else{printf("查找的姓名是%s的客户,是所输入的客户中的%d个客户.\n",,i+1);printf("账号\t姓名\t性别\t年龄\t住址\t存取款数目");printf("%s\t%s\t%c\t%d\t%s\t%ld\n",p->acad,p->name,p->sex,p->age,p->addr, p->num);}}//删除函数int del(student *p,int n){student t;int i=0,j;char ch;printf("要求按客户姓名删除:");{printf("输入要删除的客户的姓名:");scanf("%s",);for(i=0;i<n;i++){if(strcmp(,(p+i)->name)==0){break;}}if(i>=n){printf("删除的姓名是%s的客户,没有找到.\n",);return 0;}else{printf("删除的姓名是%s的客户,是所输入的客户中的%d个客户.\n",,i+1);printf("要删除的客户存取款信息:\n");printf("账号\t姓名\t性别\t年龄\t住址\t存取款数目");printf("%s\t%s\t%c\t%d\t%s\t%ld\n",p->acad,p->name,p->sex,p->age,p->addr, p->num);printf("是否一定删除<y:删除/n:不删除>:");fflush(stdin);scanf("%c",&ch);if(ch!='y'){printf("你选择了不删除%s客户存取款信息,没有删除\n",(p+i)->name);return 0;}else{printf("你选择了删除%s客户存取款信息,已删除\n",(p+i)->name);for(j=i;j<n;j++){*(p+j)=*(p+j+1);}return 1;}}}}。