银行存取款系统数据库设计
ATM自动取款机系统数据库的设计与实现毕业设计
ATM自动取款机系统数据库的设计与实现毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解XX大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:摘要二十世纪末,随着金融服务的迅速发展,银行自动柜员机,ATM已经发展成了各大银行金融服务战略中的重要一环,同时,银行提款机系统也经历了持续的更新换代,为广大用户提供了更加便捷和人性化的服务。
为了探索ATM的发展方向,提高ATM的工作效率,通常采取模拟ATM系统,注意承上启下。
模拟ATM系统就是对ATM操作系统基本功能在个人PC上及主流操作平台上的编程实现,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发制作两个方面。
对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。
而对于后者则要求应用程序功能完备,易使用,界面友好等。
数据库设计主要完成系统分析及数据库构建,系统分析包括需求分析、功能分析。
数据库构建包括数据库数据流图、数据字典、E-R模型等。
采用语义数据模型(E-R)给出系统的信息模型,从而得出关系模型,完成数据库结构的确定、表的创建等。
关键词:E-R模型;关系模型;数据流图;数据字典;关系模型ABSTRACTThe twentieth century, with the rapid development of financial services, banking ATM has evolved into major banks in the financial services strategy an important part of the same time, system ATM machines have also experienced ongoing replacement, for the majority of users provide a more convenient and personalized services. Simulated ATM system is right on the operating system on your PC operating platforms and the mainstream programming, which mainly include database creation and maintenance of front-end application development and production of two aspects. The former required strong data consistency and integrity of the data with good security. For the latter application powerful, easy to use, friendly interface and so on.Database design was completed for system analysis and database construction, system analysis, including requirements analysis, functional analysis.Database, including database building holds data flow diagram, data dictionary, ER ing semantic data model (ER) gives the system information model to arrive at the relational model, complete database structure determination to create such a table.Key words: E-R model;relational model;data flow diagrams;data dictionary tables;Relational model目录第1章绪论1.1 课题背景 (1)1.2 国内外关于该论题的研究现状和发展趋势 (2)1.3 本文内容安排 (2)第2章ATM自动取款机系统简介与需求分析2.1 软件概述 (4)2.1.1 项目介绍 (4)2.1.2 产品环境介绍 (4)2.1.3 系统结构 (5)2.1.4 角色 (6)2.1.5 假定和约束条件 (6)2.2 功能需求 (6)2.2.1 语言选择 (7)2.2.2登录功能 (8)2.2.3 余额查询功能 (8)2.2.4 行内转账功能 (9)2.2.5 取款功能 (10)2.2.6 取卡 (11)2.2.7 修改密码 (12)2.2.8 存款 (13)2.2.9 交易记录 (13)第3章数据库系统简介3.1 数据库的定义 (15)3.2 数据库的发展 (15)3.2.1 数据管理的诞生 (15)3.2.2 关系数据库的由来 (16)3.2.3 结构化查询语言 (SQL) (16)3.2.4 数据库巨人的诞生——甲骨文公司(Oracle) (16)3.2.5面向对象数据库 (17)3.2.6 数据管理的变革 (17)3.3 数据库发展阶段 (17)3.3.1 人工管理阶段 (18)3.3.2.文件系统阶段 (18)3.3.3.数据库系统阶段 (19)3.4 未来发展趋势 (19)3.5 基本属性 (19)3.5.1 基本结构 (19)3.5.2 主要特点 (20)3.5.3 种类 (20)第4章ATM自动取款机系统数据库设计4.1数据库设计的需求分析 (23)4.2 数据库概念设计 (24)4.3数据库逻辑设计 (25)4.4 建立数据库 (29)4.5连接数据库:使用技术 Hibernate (38)第5章总结与展望参考文献 (41)致谢.................................... 错误!未定义书签。
银行存取款管理系统设计
题目:银行存取款管理设计功能:能够输入和查询客户存款取款记录。
在客户文件中,每个客户是一条记录,包括编号、客户姓名、支取密码、客户地址、客户电话、账户总金额;在存取款文件中,每次存取款是一条记录,包括编号、日期、类别、存取数目、经办人。
类别分为取款和存款两种。
本系统能够输入客户存款或取款记录;根据客户姓名查询存款和取款记录。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;2、建立一个文件,输入客户的必要信息,能对文件进行显示、输入、修订、删除等。
3、进一步要求:完成客户姓名查询存款和取款记录,并能得到每次帐户总金额。
要求:1、用C语言实现系统;2、利用结构体数组实现信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。
课程设计实验报告要求:1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分。
2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、小结等。
一、系统简介设计一个基于结构体数组的银行存取款管理系统,能实现对客户存取款信息进行录入、修改、删除、查询和输出等基本操作。
二、需求分析银行存取款管理系统应实现以下功能:1、能录入用户存取款的基本信息,包括客户姓名、性别、年龄、住址以及存取款日期、数目等基本信息,保存到结构体数组中。
2、能根据输入客户姓名进行存取款信息的查询以及修改、删除等操作。
3、能根据客户姓名进行查找后,以列表的方式将客户存取款信息显示在屏幕上。
三、概要设计1、系统功能结构图根据项目的开发要求,本系统划分成六个主功能模块:录入客户存取款信息模块、修改客户存取款信息模块、删除客户存取款信息模块、查询客户存取款信息模块、输出客户存取款模块和系统退出模块。
系统功能结构图如下:2、重要数据的数据结构设计客户存取款信息的记录项用结构体Student表示,包括5个属性:name、sex、age、addr、num 分别代表客户姓名、性别、年龄、住址以及客户存取款数目。
银行储蓄管理系统数据库设计
武汉理工大学华夏学院课程设计报告书课程名称:《数据库系统原理》课程设计题目:银行储蓄管理系统数据库设计系名:信息工程系专业班级:姓名:学号: 1指导教师:2012年6 月29日课程设计任务书学生姓名:专业班级:指导教师:工作单位:信息工程系设计题目:银行储蓄管理系统数据库设计初始条件:本课程的设计的目的是通过实践使同学们经历数据库设计开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识。
结合具体的开发案例,理解并初步掌握系统分析、系统设计、系统实施的主要环节和步骤以及软件文档的制作能力。
要求完成的主要任务:要求学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的银行储蓄管理系统,进行数据库系统的需求分析,概念结构设计、逻辑结构设计、物理结构设计,数据录入及测试等,完成题目要求的功能。
主要任务:用户有以下需求:建立用户;建立账户档案,建立账户索引;完成日常交易信息检索、进行存款、转账、取款等工作,对取款、转账等操作,必需进行身份验证。
具体要求如下:1.存折信息数据包括:存折的基本信息包括:户名、帐号、开户银行名称、开户日期、取款密码等。
2.账户存取明细数据包括:日期、摘要(现存、现支、转存、利息)、交易金额、余额、操作柜员编号。
3.检索系统能根据户名、账号、交易日期、金额等进行查询。
4.取款输入账号和密码后,能根据密码判断用户是否合法,能判断取款金额是否超过了账户余额,如果取款金额合法,就对该账号的余额信息进行更新。
5、存款输入账号和存款金额后,能更新该账号的余额。
6、转账输入账号和密码后,能根据密码判断用户是否合法,然后再输入对方的转账账户,并判断对方的转账账户是否合法,如果合法,再输入转账的金额,并能判断转账金额是否超过了账户余额,如果转账金额合法,就对该账号的余额信息以及对方的账户余额信息进行更新。
设计报告撰写格式要求:要求层次清楚、整洁规范、不得相互抄袭,凡正文内容有整段完全相同者一律以抄袭论处。
(完整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();}心得体会:这次课程设计体会非常深刻,首先在团队合作方面,我觉得自己作为队长没有两道好我的小队,这是我的失职。
数据库设计实验报告-银行储蓄系统
银行储蓄系统Xx1 用户需求分析,建立E-R图,模型生成,数据库实施和修改;Xx2 用户需求分析,建立E-R图,数据库运行和维护;设计过程相互探讨,相互学习,达到共同进步之目的。
一、需求描述银行储蓄系统,实现储户开户登记,办理定期存款帐,办理定期取款手续,办理活期存款帐,办理活期取款手续,同时实现各银行及储蓄所间的业务代理和转换。
1、信息处理需求总行:包括国家编号(唯一),总行长(唯一),总行长编号(唯一),地址,联系电话,包括多个分行分行:包括分行编号(唯一),分行长(唯一),分行长编号(唯一),地址,联系电话,各分行之间为并列关系,分行雇佣业务员,审核账目清单,每个分行有一个营业厅受理各项业务营业厅:包括营业厅编号(唯一),地址,联系电话,营业窗口号,一个营业厅负责受理一个分行的业务,一个营业厅由多个储蓄所组成并有多个业务员受理各项业务储蓄所:包括储蓄所编号(唯一),储蓄所名称,储蓄所长,地址,联系电话,储蓄柜台号,储蓄金额,并有多个职员办理各项业务业务员:包括姓名(唯一),性别,编号(唯一),年龄,职务,办理储蓄类别(活期,定期),每个业务员在一个营业窗口工作职员:包括姓名(唯一),性别,编号(唯一),年龄,职务,办理(包括储蓄类别-活期/定期;登记,核对),每个职员在一个储蓄柜台工作,计算存、取额及利息储户:包括姓名(唯一),身份证号(唯一),性别,储蓄类别,年龄,开户金额,输入(密码,密码确认,储蓄金额,取款额),储户可选择多个储蓄所存、取款,并可拥有多个储蓄账号账户:包括储蓄账号编码(唯一),储蓄账号(唯一),储蓄类别,开户时间,开户金额,总金额,密码2、功能需求交互:各分行及储蓄所之间进行业务交互,包括转账,代办提交:各级银行进行由下至上的清单、业务信息的交接审核:上级银行对所属银行的业务信息和账户清单进行审查、核准计算:主要是工作人员对总账出入和利息的合计办理:职员对储户信息和账户资料的登记和核准,实现储户开户登记,办理定期存款帐,办理定期取款手续,办理活期存款帐,办理活期取款手续管理:主指上级银行业务员对下级银行、人员的管控和调动数据输入:输入储户和账户的基本信息3、系统性能该系统的精度要求较高、时间比较快、应变能力快。
ATM机数据库设计
武汉理工大学华夏学院课程设计报告书课程名称:数据库系统原理题目: ATM机数据库设计系名:信息工程系专业班级:姓名学号:指导教师:2011 年7月 1 日课程设计任务书学生姓名:专业班级:指导教师:工作单位:信息工程系设计题目:银行ATM机后台数据库设计开发要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.创建数据库Bank,数据表,并建立主外键、约束、建立表测试数据;2.实现以下功能:(1)简单查询(2)嵌套查询(3)连接查询(4)统计银行的资金流通余额和盈利结算(5)创建触发器(6)创建存储过程设计报告撰写格式要求:1、明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。
严格要求自己,要独立思考,按时、独立完成课程设计任务。
2、设计报告:要求层次清楚、整洁规范、不得相互抄袭,凡正文内容有整段完全相同者一律以抄袭论处。
设计报告正文字数不少于0.2万字(不包括附录)时间安排:消化资料、系统调查 ?1天系统分析、总体设计,实施计划、撰写报告? 3天演示、验收 1天指导教师签字: 2011年 6 月 25 日系主任签字: 2011 年 6 月 26 日目录1.问题描述 (4)1.1背景 (4)1.2数据需求 (4)2.方案图表设计 (4)2.1 E-R图 (4)2.2数据字典 (7)2.4关系图: (8)3.数据库源代码·······················································································3.1数据库建立 (9)3.2数据初始化 (11)4.结果数据处理 (12)4.1简单查询 (12)4.2连接查询 (13)4.3嵌套查询 (13)4.3统计银行的资金流通余额和盈利结算 (14)4.4创建触发器 (14)4.5创建存储过程 (15)5.结束语 (17)1.问题描述1.1背景通过数据库课程设计,进一步掌握数据库系统的理论和方法。
管理信息系统课程设计--银行储蓄管理系统
管理信息系统课程设计--银行储蓄管理系统管理信息系统课程设计银行储蓄管理系统一、引言随着经济的快速发展和金融行业的日益繁荣,银行储蓄业务作为金融服务的重要组成部分,对于银行的运营和管理至关重要。
为了提高银行储蓄业务的效率和服务质量,设计一个高效、稳定、安全的银行储蓄管理系统成为了必然需求。
本课程设计旨在开发一个功能齐全、操作便捷的银行储蓄管理系统,以满足银行储蓄业务的日常管理和客户需求。
二、系统需求分析(一)功能需求1、开户管理:能够为新客户办理储蓄账户开户手续,包括收集客户信息、设置账户类型、初始存款等。
2、存款与取款:支持客户进行存款和取款操作,实时更新账户余额。
3、账户查询:客户可以查询自己账户的余额、交易明细等信息。
4、利息计算:根据不同的储蓄类型和利率,自动计算账户利息。
5、转账业务:实现客户账户之间的资金转账。
6、报表生成:生成各类储蓄业务报表,如日结报表、月结报表等,供银行管理人员进行分析和决策。
(二)性能需求1、响应时间:系统对于各种操作的响应时间应在可接受范围内,确保客户体验良好。
2、稳定性:系统应能够长时间稳定运行,避免出现故障和数据丢失。
3、安全性:保障客户信息和资金的安全,防止数据泄露和非法操作。
(三)数据需求1、客户信息:包括姓名、身份证号码、联系方式等。
2、账户信息:账户号码、账户类型、余额、开户日期等。
3、交易记录:存款、取款、转账的时间、金额、操作类型等。
三、系统设计(一)总体架构设计银行储蓄管理系统采用 C/S(客户端/服务器)架构,客户端负责与用户进行交互,服务器端负责数据存储和业务逻辑处理。
系统分为表示层、业务逻辑层和数据访问层。
表示层:采用图形用户界面(GUI),为用户提供直观、友好的操作界面。
业务逻辑层:处理各种业务逻辑,如开户、存款、取款、转账等。
数据访问层:负责与数据库进行交互,实现数据的增删改查操作。
(二)数据库设计1、数据库表结构设计客户表(customer):包含客户编号(customer_id)、姓名(name)、身份证号码(id_number)、联系方式(contact_info)等字段。
MySQL银行ATM存取款机系统(需求分析)
MySQL银⾏ATM存取款机系统(需求分析)银⾏ATM需求⽂档⼀.E-R图形⽂⼆.开发步骤1.明确需求--数据库设计--编码实现功能--测试2.绘制e-r图--绘制数据库模型图--使⽤三⼤⽅式规范数据库结构三.开发思路1. 模型图综述模型图描述了ATM机使⽤时的状态变化,包含登录、查询、存款、取款、转账、改密、业务选择界⾯状态,登录可以转向业务选择界⾯,其它状态则可以和业务选择界⾯相互转移。
2.系统功能1) 开户(到银⾏填写开户申请单,卡号⾃动⽣成)2) 取款3) 存款4) 挂失5) 修改密码6) 催款提醒7) 统计查询银⾏业务信息8) 转账3.模型图的状态描述(1)登录:⽤户登陆ATM系统,⼊⼝动作为插卡,密码错误时,重新输⼊密码。
(2)业务选择界⾯:⽤户登陆ATM系统后系统显⽰的主界⾯,以供⽤户进⾏择业务操作,⼊⼝动作为选择业务操作。
(3)存款:⼊⼝动作为选择存款业务,中间动作为放⼊现⾦,出⼝动作为发送存款结果。
(4)取款:⼊⼝动作为选择取款义务,中间动作为取出现⾦,出⼝动作为发送取款结果。
(5)转账:⼊⼝动作为选择转账业务,中间动作为输⼊⽬标账户、输⼊转账⾦额和账户,出⼝动作为发送转账结果。
(6)改密:⼊⼝动作为选择改密业务,中间动作为输⼊两次新密码,出⼝动作为发送改密结果,两个新密码不同或新旧密码相同则重新输⼊(7)查询:⼊⼝动作为选择查询业务,出⼝动作为发送账户信息。
4. 模型图的状态转移描述(1)登录到业务选择界⾯,条件是输⼊的密码正确。
(2)业务选择界⾯到取款、存款、转账、改密、查询,条件是选择了对应的业务。
(3)存款、取款、转账、改密、查询到业务选择界⾯,条件是对应业务结束。
5.数据库设计1) 创建⽤户⽤户信息表;银⾏卡信息表;交易信息表;存款类型表;2) 添加约束l ⽤户信息表约束顾客编号为主键;开户名必填;⾝份证号必填,只能是18位或15位,⾝份证号唯⼀约束;l 银⾏卡信息表约束卡号必填,主键,银⾏的卡号规则和电话号⼀样⼀般前8位代表特殊含义;货币必填,默认为⼈民币;开户⽇期必填,默认为系统⽇期;开户⾦额必填不低于⼀元;余额必填,不低于⼀元否则将销户;密码必填,6位数字,默认为6个8;是否挂失必填,0或1,默认为零未挂失;顾客编号必填表⽰该卡对应的顾客编号,⼀位顾客可以办理多张卡;l 交易信息表约束交易⽇期必填默认为系统当前⽇期;卡号必填外键可重复索引;交易⾦额必填,⼤于0;交易⽇期必填默认为系统当前⽇期;备注可选输⼊其他说明;l 存款类型表存款类型号,⾃动编号从1开始,主建;存款类型名称,必填;描述可空;3) 插⼊测试数据4) 模拟常规业务5) 创建使⽤客户友好信息视图使⽤事务完成存储或取款业务。
ATM取款机系统数据库设计
阶段检查
• 针对第二阶段抽查学员的编码结果 • 教员给出点评或集中演示难点部分
第二阶段标准代码演示-1
• 建库
IF exists(SELECT * FROM sysdatabases WHERE name='bankDB')
DROP DATABASE bankDB
有默认值的参数,放在最后
AS …..—SQL语句
GO 调用存储过程:
EXEC proc_openAccount '李四','321245678912345678', '0478-44443333',1,'定期'
难点分析-6
• 存储过程部分2:
OUTPUT表示 传出的参数
创建存储过程:
CREATE PROCEDURE proc_randCardID
,balance,customerID) VALUES('1010 3576 1234 5678', '活期 ',1000,1000,1) INSERT INTO userInfo(customerName,PID,telephone)
VALUES('李四','321245678912345678','0478-44443333') INSERT INTO cardInfo(cardID,savingType,openMoney,balance,
ATM取款机系统数 据库设计
问题描述
某银行拟开发一套ATM取款机系统,实现如下功能: 1、开户(到银行填写开户申请单,卡号自动生成) 2、取钱 3、存钱 4、查询余额 5、转账(如使用一卡通代缴手机话费、个人股票交易等) 现要求对“ATM柜员机系统”进行数据库的设计并实现, 数据库保存在D:\bank目录下,文件增长率为15% 。
数据库大作业课程设计报告
数据库⼤作业课程设计报告数据库设计项⽬报告设计题⽬:ATM存取款数据库系统班级级计算机科学与技术学号姓名指导教师起⽌时间1 需求分析1.1 系统⽬标系统的主要⽬标是实现⼀个ATM存取款数据库系统,该系统的适⽤范围是针对⼀个银⾏(光华银⾏)的⽤户。
⽤户可以进⾏开户、办卡、存款、取款等银⾏基本业务。
1.2 系统功能需求1.2.1 功能模块划分系统主要分为⽤户基本信息模块,卡信息模块,⽤户基本操作模块等三个模块。
卡信息模块⼜可分为储蓄卡信息模块和信⽤卡信息模块。
1.2.1 功能描述(1)⽤户基本信息模块。
该模块主要实现⽤户的开户、⽤户授信等功能。
若⽤户只需办理储蓄卡,那么其只需在我⾏开户即可。
若其还想要办理信⽤卡,那么其需要经过我⾏的授信才能办理信⽤卡,即填写相关的财产、收⼊信息。
(2)卡信息模块卡信息模块主要实现⽤户的办卡、注销卡、储蓄卡的升级和降级操作。
由于⽤户办卡类型的不同,可将卡分为储蓄卡以及信⽤卡。
○1储蓄卡模块会记录办卡时⽤户所填的基本信息、储蓄卡类型,及不同储蓄卡所对应的不同属性,如存款利率、年费、转账费⽤等信息。
○2信⽤卡模块会记录办卡时⽤户所填的基本信息、信⽤卡类型,及不同信⽤卡所对应的不同属性,如额度、提现额度、提现额度、异地提现费⽤、年费等信息。
(3)⽤户基本操作模块该模块主要实现⽤户在任选⼀台ATM机,储蓄卡能够进⾏存款、取款、转账等的操作,其中取款若属于异地取款将收取相应费⽤。
⽽信⽤卡能够进⾏提现,还款等操作,⼀种异地取现将收取更多额外的费⽤。
⽤户使⽤储蓄卡和信⽤卡的操作记录会保存在相应的操作记录表中。
2数据库概念设计2.1系统的概念模型2.1.1整体E-R图(1)⽤户基本信息模块:⼀个账户只能对应⼀个⽤户授信信息,⼀个⽤户授信信息也只能对应⼀个账户,所以账户和⽤户授信信息是1:1的关系。
(2)卡信息模块⼀个账户可以拥有多张储蓄卡,⽽⼀张储蓄卡只能归属于⼀个账户,所以账户和储蓄卡是1:M的关系。
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.谁从系统中获取主要信息。
银行储蓄系统详细设计
银行储蓄系统详细设计一、模块设计系统总体结构方图:银行储蓄系统又大致分为两个模块:存款模块和取款模块。
1.身份验证模块:设置身份验证模块的目的保证储户信息的安全。
功能在于对申请登录的用户进行身份验证,通过者才能进入系统。
银行业务员输入储户用户ID,储户输入密码并确定,系统保存用户输入的用户ID和密码,并在customer表中查找customerid和customername字段值,看是否等于业务员输入的用户ID和密码,如相同则通过验证,否则不通过,并给出“密码错误”的提示,如数据库中不存在这样的记录,则给出“该用户不存在”的提示。
2.存款模块:设置存款模块的目的在于将储户的金额存到系统中并记录信息。
存款模块将储户存款金额录入存储到系统中,并附带显示其他储户信息。
该模块的输出项为存款金额,并且附带显示其他信息:用户名、账号、账户余额、利息金额。
当银行业务员输入存款金额后,系统进行处理,显示出账户余额,并且显示其他固定信息。
3.取款模块:设置取款模块的目的在于将储户的取款金额录入并存储到系统中。
取款模块将储户取款金额录入存储到系统中,并附带显示储户其他信息。
该模块的输出项为取款金额,并且附带显示其他信息:用户名、账号、账户余额、利息金额。
当银行业务员输入取款金额后,点击确定按钮,系统进行处理,显示出账户余额,并且显示其他固定信息。
4.存款单打印模块:设置存款单打印模块的目的在于将储户的存款信息以单据的形式及时反馈给储户。
存款单打印模块将储户存款金额以及储户帐户信息以单据形式反馈给储户。
该模块的输出项为存款人、存款银行、业务员编号、存款金额、存款日期、手续费、帐户余额。
当银行业务员输入存款金额后,系统进行处理,显示出账户余额,并且显示其他固定信息。
5.取款单打印模块:设置取款单打印模块的目的在于将储户的取款信息以单据的形式及时反馈给储户。
取款单打印模块将储户取款金额以及储户帐户信息以单据形式反馈给储户。
银行存取款数据流图课件
Microsoft Visio是一款专业的数据流图绘制工具,提供了丰富的形状、模板和符号,支持创建各种类 型的图表,包括流程图、组织结构图、网络图等。Visio还支持导入和导出多种格式的文件,方便与其 他软件进行协作。
Lucidchart
总结词
在线绘图工具、易于使用
详细描述
Lucidchart是一款在线绘图工具,提供了丰富的模板和符号 ,支持绘制各种类型的图表,包括流程图、组织结构图、数 据流图等。Lucidchart还支持实时协作和版本控制,方便团 队成员共同编辑和修改图表。
数据流图定义
使用图形化方式展示系统 中数据的流动和处理过程 。
主要数据流
包括客户请求、交易处理 、结果反馈等。
数据流图示例
展示一个简单的存取款流 程,包括客户在ATM机上 输入信息、系统处理请求 、数据库更新等步骤。
数据流图分析
数据流图特点
直观、易于理解,能够清晰地展 示系统的数据处理流程。
数据流图分析内容
绘制分层数据流图
总结词
分层数据流图的构建
详细描述
根据顶层数据流图,进一步绘制分层数据流图,将各个业务功能细化为具体的处 理过程和数据流程。分层数据流图应清晰地展示数据的传递和处理过程,以及各 层之间的数据接口。
数据流图的优化与完善
总结词
数据流图的优化策略
详细描述
在绘制完分层数据流图后,需要对数据流图进行优化和完善。优化过程包括简化流程、调整数据流向、合并或拆 分功能等,以提高数据流图的清晰度和可维护性。同时,需要确保数据流图与实际业务处理流程的一致性。
SmartDraw
总结词
功能丰富、适合初学者使用
详细描述
SmartDraw是一款功能丰富的绘图软件,提供了各种类型的图表模板和符号,支持绘 制流程图、组织结构图、数据流图等。SmartDraw还提供了智能布局和自动对齐功能 ,使得绘图更加方便快捷。同时,SmartDraw还提供了丰富的导出和分享选项,方便
数据库课程设计银行存取款管理
数据库课程设计银⾏存取款管理银⾏储蓄业务数据库分析⼀、系统功能简介本系统是银⾏⽤户的存取款系统。
主要功能是管理各个⽤户存取款的相关数据。
⼆、本系统由三张表组成,具体如下:表名属性(字段)名储户表账号、⾝份证号、姓名、性别、⾝⾼、地址、存款余额存款单表存款单号、⾦额、存款⽅式、账号、存款⽇期取款单表取款单号、⾦额、取款⽅式、账号、取款⽇期系统表基本信息三、表间关系如下:⼀个存款单或取款单属于⼀个⽤户,⼀个⽤户可以拥有多次存款单或取款单。
⽤户通过存款操作与存款单建⽴联系,通过取款操作与取款单建⽴联系。
ER模型如下图:四、数据准备前期准备⼯作:以system账户登录,创建新账户create user dy identified by lyjn;grant dba to dy;connect dy/dy@orcl;各个表的具体信息和创建表的代码如下:CREATE TABLE luser(acnum VARCHAR2(5) NOT NULL ,id NUMBER NOT NULL ,name VARCHAR2(20) NOT NULL ,sex VARCHAR2(2) CHECK(sex IN ('男','⼥') ) , height NUMBER(3,2) NOT NULL, address VARCHAR2(20) NOT NULL ,balance INT NOT NULL);ALTER TABLE luser添加主键约束ADD CONSTRAINT XPKluser PRIMARY KEY (acnum);CREATE TABLE depositslip(dps_num NUMBER NOT NULL ,money INT CHECK(money>=0) ,dps_way VARCHAR2(10) NOT NULL ,acnum VARCHAR2(5) NOT NULL ,dps_time TIMESTAMP NULL);ALTER TABLE depositslip添加主键约束ADD CONSTRAINT XPKdepositslip PRIMARY KEY (dps_num,acnum);ALTER TABLE depositslip在depositslip表中的acnum字段中添加外键约束ADD (CONSTRAINT R_5 FOREIGN KEY (acnum) REFERENCES luser(acnum));CREATE TABLE drawslip(dw_num NUMBER NOT NULL ,money INT CHECK(money>=0),dw_way VARCHAR2(10) NOT NULL ,acnum VARCHAR2(5) NOT NULL ,dw_time TIMESTAMP NULL);ALTER TABLE drawslip添加主键约束ADD CONSTRAINT XPKdrawslip PRIMARY KEY (dw_num,acnum);ALTER TABLE drawslip在drawslip表中的acnum字段中添加外键约束ADD (CONSTRAINT R_6 FOREIGN KEY (acnum) REFERENCES luser(acnum));五、插⼊(insert)数据1、插⼊储户表(luser)数据insert into luser (ACNUM, ID, NAME, SEX,HEIGHT, ADDRESS, BALANCE) values ('00001', 3422101, '刘忠⽥', '男',1.72 ,'北京市朝阳区', 345);insert into luser (ACNUM, ID, NAME, SEX,HEIGHT, ADDRESS, BALANCE) values ('00002', 3422102, '周正义', '男',1.78, '天津市宝坻区', 123);insert into luser (ACNUM, ID, NAME, SEX,HEIGHT, ADDRESS, BALANCE) values ('00003', 3422103, '陈光标', '男',1.80, '南京市新街⼝', 333);insert into luser (ACNUM, ID, NAME, SEX,HEIGHT, ADDRESS, BALANCE) values ('00004', 3422104, '张茵', '⼥',1.65, '上海市黄浦区', 234);insert into luser (ACNUM, ID, NAME, SEX,HEIGHT, ADDRESS, BALANCE) values ('00005', 3422105, '陈丽华', '⼥',1.70, '⾹港市旺⾓区', 111);2、插⼊存款单表(depositslip)数据insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY)values (98001,'00001', 120,to_date('08-08-2009','dd-mm-yyyy'), '整存整取');insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98002,'00001', 300,to_date('10-08-2009','dd-mm-yyyy'), '整存整取');insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98003,'00002', 100,to_date('12-08-2009','dd-mm-yyyy'), '整存零取');insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98004,'00002', 150,to_date('12-09-2009','dd-mm-yyyy'), '整存零取');insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98005,'00003', 200,to_date('15-08-2009','dd-mm-yyyy'), '零存整取');insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98006,'00003', 100,to_date('14-09-2009','dd-mm-yyyy'), '零存整取');insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98007,'00003', 80,to_date('23-09-2009','dd-mm-yyyy'), '零存整取'); insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98008,'00004', 80,to_date('23-08-2009','dd-mm-yyyy'), '零存零取');insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98009,'00004', 180,to_date('24-09-2009','dd-mm-yyyy'), '零存零取');insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98010,'00005', 190,to_date('24-08-2009','dd-mm-yyyy'), '通知存款');insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98011,'00005', 210,to_date('30-09-2009','dd-mm-yyyy'), '通知存款'); 3、插⼊取款单表(drawslip)数据insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY) values (52001,'00001', 75,to_date('08-08-2010','dd-mm-yyyy'), '柜台');insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY) values (52002,'00002', 27,to_date('08-09-2010','dd-mm-yyyy'), '取款机');insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY) values (52003,'00002',100,to_date('12-10-2010','dd-mm-yyyy'), '柜台');insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY) values (52004,'00003',47,to_date('15-08-2010','dd-mm-yyyy'), '取款机');insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY) values (52005,'00004',26,to_date('12-09-2010','dd-mm-yyyy'), '取款机');insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY) values (52006,'00005',100,to_date('23-09-2010','dd-mm-yyyy'), '柜台');insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY) values (52007,'00005',150,to_date('10-10-2010','dd-mm-yyyy'), '柜台');insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY) values (52008,'00005',39,to_date('31-10-2010','dd-mm-yyyy'), '取款机');七、索引建⽴索引遵循的规律:1.建⽴在where⼦句经常引⽤的列上,2.经常需要排序的列上,3.连接属性列上等在存款单表的存款单号字段和账号字段建⽴组合索引CREATE UNIQUE INDEX XPKdepositslip ON depositslip(dps_num ASC,acnum ASC);在存款单表的账号字段建⽴索引CREATE INDEX XIF1depositslip ON depositslip(acnum ASC);在取款单表的取款单号字段和账号字段建⽴组合索引CREATE UNIQUE INDEX XPKdrawslip ON drawslip(dw_num ASC,acnum ASC);在取款单表的账号字段建⽴索引CREATE INDEX XIF1drawslip ON drawslip(acnum ASC);在储户表的账户字段上建⽴索引,⽅便查询CREATE UNIQUE INDEX XPKluser ON luser(acnum ASC);⼋、触发器1、插⼊存款,对应储户表的相应储户的余额(balance)增加插⼊记录包含的⾦额数(money)CREATE OR REPLACE TRIGGER OperatingDpsAFTER INSERT ON depositslipFOR EACH ROWDECLAREn_ac VARCHAR2(5);n_mo INT;BEGINn_ac:=:new.acnum;n_mo:=:new.money;update luser set balance=balance+n_mo where luser.acnum=n_ac;END OperatingDps;2、删除存款,对应储户表的相应储户的余额(balance)减去所删除记录的⾦额数(money) CREATE OR REPLACE TRIGGER OperatingDps2AFTER DELETE ON depositslipFOR EACH ROWDECLAREo_ac VARCHAR2(5);o_mo INT;BEGINo_ac:=:old.acnum;o_mo:=:old.money;update luser set balance=balance-o_mo where luser.acnum=o_ac;END OperatingDps2;3、插⼊取款,对应储户表的相应储户的余额(balance)减少插⼊记录包含的⾦额数(money) CREATE OR REPLACE TRIGGER OperatingDwAFTER INSERT ON drawslipFOR EACH ROWDECLAREn_ac VARCHAR2(5);n_mo INT;BEGINn_ac:=:new.acnum;n_mo:=:new.money;update luser set balance=balance-n_mo where luser.acnum=n_ac;END OperatingDw;4、删除取款,对应储户表的相应储户的余额(balance)加上所删除记录的⾦额数(money) CREATE OR REPLACE TRIGGER OperatingDw2AFTER DELETE ON drawslipFOR EACH ROWDECLAREo_ac VARCHAR2(5);o_mo INT;BEGINo_ac:=:old.acnum;o_mo:=:old.money;update luser set balance=balance+o_mo where luser.acnum=o_ac;END OperatingDw2;5、插⼊的取款⾦额(money)⼤于对应⽤户的余额(balance)时,系统报错CREATE OR REPLACE TRIGGER OperatingDw3 AFTER insert ON drawslipFOR EACH ROWDECLAREn_ac VARCHAR2(5);n_mo INT;n_ba INT;BEGINn_ac:=:new.acnum;n_mo:=:new.money;select balance into n_ba from luser where acnum=n_ac;if n_mo>n_ba thenRAISE_APPLICATION_ERROR(-20000, '存款余额不⾜!请重新插⼊存款!'); end if;END OperatingDw3;测试(以刘忠⽥为例):查看刘忠⽥的余额数select name,balance from luser where name='刘忠⽥'1、插⼊存款时插⼊⼀条存款记录insert into depositslip (DPS_NUM, ACNUM, MONEY, DPS_TIME, DPS_WAY) values (98012,'00001', 80,to_date('08-09-2009','dd-mm-yyyy'), '整存整取');查看插⼊后,刘忠⽥余额数的变化select name,balance from luser where name='刘忠⽥’2、删除存款时删除⼀条存款记录delete from depositslip where dps_num=98012查看删除后,刘忠⽥余额数的变化select name,balance from luser where name='刘忠⽥’3、插⼊取款时插⼊⼀条取款记录insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY)values (52007,'00001', 80,to_date('08-11-2010','dd-mm-yyyy'), '柜台'); 查看插⼊取款后,刘忠⽥余额数的变化select name,balance from luser where name='刘忠⽥’4、删除取款时删除⼀条取款记录delete from drawslip where dw_num=52007查看删除后,刘忠⽥余额数的变化select name,balance from luser where name='刘忠⽥’5、插⼊的取款数⼤于余额数时insert into drawslip (DW_NUM, ACNUM, MONEY, DW_TIME, DW_WAY)values (52007,'00001', 700,to_date('08-12-2010','dd-mm-yyyy'), '柜台'); 700⼤于刘忠⽥的余额数系统会报错:ORA-20000: 存款余额不⾜!请重新插⼊存款! ORA-06512: 在"DY.OPERATINGDW3", line 10ORA-04088: 触发器 'DY.OPERATINGDW3' 执⾏过程中出错九、存储过程创建过程dpspro,查询某位储户共取过多少钱create or replace procedure dpspro(dname varchar2) assmoney int;beginselect sum(money) into smoney from drawslip natural join luser where name=dname; DBMS_OUTPUT.PUT_LINE(smoney); end dpspro;创建存储过程luinf,查询余额⼤于取款总数储户的相关信息先创建两张表create table new1 as select name 姓名,sum(money) 总数from luser inner join drawslip onluser.acnum=drawslip.acnum group by name;create table new2 as select * from luser inner join new1 on /doc/2ae93f3f0912a2161479298b.html=new1.姓名;存储过程create or replace procedure luinfiscursor mycur isselect * from new2 where new2.balance>new2.总数;v_record new2%rowtype;)beginif mycur%isopen=false thenopen mycur;end if;DBMS_OUTPUT.PUT_LINE(rpad('账号',15,'-')||rpad('⾝份证',15,'-')||rpad('姓名',15,'-')||rpad('性别',15,'-')||rpad('余额',15,'-')||'取款总数');loopfetch mycur into v_record;exit when mycur%notfound;DBMS_OUTPUT.PUT_LINE(rpad(v_record.acnum,15,'-')||rpad(v_/doc/2ae93f3f0912a2161479298b.html,15,'-')||rpad(v_record.id,15,'-')||rpad(v_record.sex,15,'-')||rpad(v_record.balance,15,'-')||v_record.总数);end loop;close mycur;end luinf;⼗、查询1、查询余额最多的⼈共取过多少次款,共取了多少钱select count(*),sum(money) from luser natural join drawslip where name=(select name from luser where balance=(select max(balance) from luser)) 2、查询存款余额⼤于200(亿)的储户,男⼥分别有多少⼈select sex,count(*)from luser where balance>200 group by sex3、查询哪个储户的某次存款期限满16个⽉,显⽰姓名、当次存款⾦额和性别select name,money,sex from luser natural join depositslip where extract(month from sysdate)-extract(month from dps_time)>44、查询哪些储户的取款总数⼤于100select name 姓名,sum(money) 取款数, '亿' 单位from luser inner join drawslip on luser.acnum=drawslip.acnum group by name having sum(money)>1005、查询存款时间长度超过4个⽉的存款信息select name 姓名,dps_num 存款单号,dps_time 存款⽇期,extract(month from sysdate)-extract(month from dps_time) 存款时间长度,'⽉' 单位from luser natural join depositslip where balance>400 and extract(month from sysdate)-extract(month fromdps_time)>=3。
《数据库原理》- 银行存取款信息系统
《数据库原理》课程设计报告设计题目:银行存取款信息系统专业:信息管理与信息系统计算机与数据科学学院2019 年1月10 日目录1 概述 (1)1.1选题的背景与意义 (1)1.2相关技术分析 (1)2系统功能设计 (2)2.1系统总体结构设计图 (2)2.2系统功能模块 (2)2.2.1用户登录模块 (2)2.2.2存款模块 (3)2.2.3取款模块 (3)2.2.4转账模块 (3)3 数据库设计 (4)3.1需求分析 (4)3.2概念结构设计 (6)3.3逻辑结构设计 (8)3.4物理结构设计 (10)3.5数据库实施 (12)3.6数据库运行与维护 (21)4 总结 (23)1 概述1.1 选题的背景与意义在传统的银行账户管理中,其过程往往是很复杂的,繁琐的,账户管理以入账和出账两项内容为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同;且会出现信息的重复传递问题,因此该过程需要进行信息化,以利用计算机进行账目管理。
本系统是模拟银行账户及存取款的管理,开发一个银行存取款的管理系统。
充分运用计算机技术,方便操作人员的使用,提高客户存取款的效率,提高银行的服务质量。
系统开发的整体任务是实现银行账户管理的系统化、规范化、自动化和智能化,从而达到提高银行存取款管理效率的目的。
1.2相关技术分析从需求分析,到概念设计和逻辑设计,E-R图的表示,数据字典的创建,需要对数据库知识进行一定的了解并掌握,在课题中建库建表,及其关系模式,关系代数的建立和理解,其中包括插入、删除、修改、查询,牵涉表与表之间的联系,主键与外键的定义约束项的设置,触发器和存储过程的应用。
需要自己对数据库SQL语言以及T-SQL语言的灵活运用。
SQL语言是结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;SQL 语句用于取回和更新数据库中的数据。
银行存取款管理系统课程设计报告JAVA
银行存取款管理系统课程设计报告JAVA一、项目背景介绍在当今社会,银行作为金融服务的重要机构,对于存取款管理系统的需求日益增加。
为了满足这一需求,我们设计了一款基于Java语言的银行存取款管理系统,旨在帮助银行更高效地管理客户的资金。
二、项目需求分析1. 用户管理•实现用户的注册、登录功能,保障账户安全。
•对用户的身份进行验证,确保账户信息的准确性。
2. 存款管理•用户可以对账户进行存款操作,包括现金存款和转账存款。
•及时更新账户余额,保证用户能够随时查看账户信息。
3. 取款管理•实现用户对账户的取款操作,包括现金取款和转账取款。
•在用户取款时进行验证,确保账户余额充足。
4. 查询管理•提供用户对账户余额、交易记录等信息的查询功能,方便用户了解自己的财务情况。
三、系统设计1. 技术选型•Java语言:稳定、跨平台、易于学习。
•MySQL数据库:存储用户账户信息、交易记录等数据。
•Swing GUI库:用于实现系统的图形化界面。
2. 模块设计•用户管理模块:负责用户的注册、登录,以及身份验证。
•存款管理模块:处理用户的存款操作,更新账户余额。
•取款管理模块:处理用户的取款操作,验证账户余额。
•查询管理模块:提供用户账户信息的查询功能。
四、系统实现1. 用户管理模块实现// 用户注册功能public void register(String username, String password) {// 注册逻辑}// 用户登录功能public boolean login(String username, String password) {// 登录逻辑}2. 存款管理模块实现// 存款功能public void deposit(String account, double amount) {// 存款逻辑}// 转账功能public void transfer(String fromAccount, String toAccount, double amoun t) {// 转账逻辑}3. 取款管理模块实现// 取款功能public void withdraw(String account, double amount) {// 取款逻辑}// 转账功能public void transfer(String fromAccount, String toAccount, double amoun t) {// 转账逻辑}4. 查询管理模块实现// 查询余额功能public double checkBalance(String account) {// 查询余额逻辑}// 查询交易记录功能public List<Transaction> getTransactionHistory(String account) {// 查询交易记录逻辑}五、系统测试1. 单元测试•分别测试用户管理、存款管理、取款管理、查询管理模块的各项功能是否正常运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《银行存取款系统数据库设计》数据库分析与设计学院:商学院学号:姓名:专业:信息管理与信息系统班级:14信管学期: 2015-2016(1)1.需求分析(1)用户的基本需求:用户对银行存取款客户端的要求不高,他们需要的是自己通过直接操作来获得自己所需要的服务,如存款、取款、转账、查询、修改密码、缴费等。
每一个功能,用户都可以根据系统的提示一步一步往下进行,并且操作方便、简单、快捷,极大的节约了用户办理业务的时间。
(2)系统设计的目标:针对银行业务种类繁多、客户需求量大等现象,为了减少银行工作人员的工作任务,延长业务办理的时间,方便客户,通过用户与银行存取款客户端,使用户自己就可以在客户端上完成存款、取款、查询余额、转账、修改密码的基础功能,是的银行业务科学化,提高账户管理水平和工作效率。
(3)系统总体框架:(4)业务流程图:①存款流程图②取款流程图①系统顶层数据流程图:系统输入数据②第一层数据流图用户取款信息(6)数据字典:2.概念结构设计(1)系统E-R图3.逻辑结构设计储户(账号、银行、密码、姓名、身份证号、性别、年龄、地址、存款余额)存款单(存款单号、账号、日期、存款方式、金额) 取款单(取款单号、账号、日期、取款方式、金额)(注:“ “ ”表示主键+外键,“ ”表示外键)银行存取款系统用户的增删改一、增加用户信息:代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace 银行存取款系统数据库设计{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void 确定_Click(object sender, EventArgs e){//连接字符串string Strcnn = "Data Source=127.0.0.1;Initial Catalog=银行存取款系统数据库设计;Integrated Security=True";//实例化连接对象SqlConnection sqlcnn = new SqlConnection(Strcnn);//打开连接通道sqlcnn.Open();//建立SQL语句string SQLstr = "insert into 用户values('" + txtno.Text.Trim() + "','" + txtname.Text.Trim() + "','" + txtsex.Text.Trim() +"'," + txtage.Text.Trim() + ",'" + txtid.Text.Trim() + "')";//建立SQLcommand对象SqlCommand sqlcmm = new SqlCommand(SQLstr, sqlcnn);//执行查询命令int result = sqlcmm.ExecuteNonQuery();//判断执行是否成功if (result > 0)MessageBox.Show("插入用户信息成功!");elseMessageBox.Show("插入用户信息失败!");//关闭连接通道sqlcnn.Close();}private void 重置_Click(object sender, EventArgs e){//清除文本框的内容txtno.Clear();txtname.Clear();txtsex.Clear();txtage.Clear();txtid.Clear();}private void 退出_Click(object sender, EventArgs e){this.Close();}private void txtid_TextChanged(object sender, EventArgs e) {}private void label6_Click(object sender, EventArgs e)}private void txtage_TextChanged(object sender, EventArgs e){}private void label5_Click(object sender, EventArgs e){}private void txtsex_TextChanged(object sender, EventArgs e){}private void label4_Click(object sender, EventArgs e){}private void txtname_TextChanged(object sender, EventArgs e){}private void label3_Click(object sender, EventArgs e){private void txtno_TextChanged(object sender, EventArgs e){}private void label2_Click(object sender, EventArgs e){}private void label1_Click(object sender, EventArgs e){}}}截图:二、查询修改用户信息:代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace 银行存取款系统数据库设计{public partial class Form2 : Form{public Form2(){InitializeComponent();}private void 查询_Click(object sender, EventArgs e){//连接字符串string Strcnn = "Data Source=127.0.0.1;Initial Catalog=银行存取款系统数据库设计;Integrated Security=True";//实例化连接对象SqlConnection sqlcnn = new SqlConnection(Strcnn);//打开连接通道sqlcnn.Open();//建立SQL语句string SQLstr = "select * from 用户where no='" + cmbno.SelectedItem.ToString() + "'";//建立SQLcommand对象SqlCommand sqlcmm = new SqlCommand(SQLstr, sqlcnn);//执行查询命令, 结果填充到SqlDataReader数据中SqlDataReader sqlrd = sqlcmm.ExecuteReader();while (sqlrd.Read()){txtname.Text = sqlrd["name"].ToString();txtsex.Text = sqlrd["sex"].ToString();txtage.Text = sqlrd["age"].ToString();txtid.Text = sqlrd["id"].ToString();}sqlcnn.Close();}private void Form2data_Load(object sender, EventArgs e){}private void 保存_Click(object sender, EventArgs e){//连接字符串string Strcnn = "Data Source=127.0.0.1;Initial Catalog=银行存取款系统数据库设计;Integrated Security=True";//实例化连接对象SqlConnection sqlcnn = new SqlConnection(Strcnn);//打开连接通道sqlcnn.Open();//建立SQL语句string SQLstr = "update 用户set name='" + txtname.Text.Trim() + "',sex='" + txtsex.Text.Trim() +"',age='" + txtage.Text.Trim() + "',id='" + txtid.Text.Trim() + "' where no='" + cmbno.SelectedItem.ToString() + "'";//建立SQLcommand对象SqlCommand sqlcmm = new SqlCommand(SQLstr,sqlcnn);//执行查询命令int result = sqlcmm.ExecuteNonQuery();//判断执行是否成功if (result > 0)MessageBox.Show("修改用户信息成功!");elseMessageBox.Show("修改用户信息失败!");//关闭连接通道sqlcnn.Close();}private void 退出_Click(object sender, EventArgs e){this.Close();}private void Form2_Load(object sender, EventArgs e){//连接字符串string Strcnn = "Data Source=127.0.0.1;Initial Catalog=银行存取款系统数据库设计;Integrated Security=True";//实例化连接对象SqlConnection sqlcnn = new SqlConnection(Strcnn);//打开连接通道sqlcnn.Open();//建立SQL语句string SQLstr = "select * from 用户";//建立SQLcommand对象SqlCommand sqlcmm = new SqlCommand(SQLstr, sqlcnn);//执行查询命令, 结果填充到SqlDataReader数据中SqlDataReader sqlrd = sqlcmm.ExecuteReader();//通过循环一个一个读取学号填入组合中while (sqlrd.Read()){cmbno.Items.Add(sqlrd["no"]);}sqlcnn.Close();}}}截图:三、删除用户信息代码:using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient; namespace 银行存取款系统数据库设计{public partial class Form3 : Form{public Form3(){InitializeComponent();}private void 删除_Click(object sender, EventArgs e){//连接字符串string Strcnn = "Data Source=127.0.0.1;Initial Catalog=银行存取款系统数据库设计;Integrated Security=True";//实例化连接对象SqlConnection sqlcnn = new SqlConnection(Strcnn);//打开连接通道sqlcnn.Open();// 从listbox 列表框中选择的一行用户信息,提取用户的账号string Selectno = lstStu.SelectedItem.ToString().Substring(0, 19);//建立SQL语句string SQLstr = "delete from 用户whereno='"+Selectno+"'";//建立SQLcommand对象SqlCommand sqlcmm = new SqlCommand(SQLstr, sqlcnn);//执行查询命令int result = sqlcmm.ExecuteNonQuery();//判断执行是否成功if (result > 0)MessageBox.Show("删除用户信息成功!");elseMessageBox.Show("删除用户信息失败!");//从当前的listbox列表框中,把选择删除的内容移去。