银行存取款系统数据库设计
数据库技术与应用课程设计银行ATM存取款系统

数据库技术与应⽤课程设计银⾏ATM存取款系统《数据库技术与应⽤》课程设计报告项⽬名称:银⾏ATM存取款机系统设计与实现姓名:专业:指导教师:完成⽇期:2015年11⽉21⽇内蒙古科技⼤学课程设计任务书内蒙古科技⼤学课程设计任务书 ............................................................................................ I 第⼀章需求分析. (1)1.1 项⽬任务 (1)1.2 项⽬技能⽬标 (1)1.3 需求概述 (1)1.4 开发环境 (1)1.5 问题分析 (1)第⼆章项⽬实训内容 (4)2.1 实训⼀:制定《数据库设计与编程规范》 (4)2.2 实训⼆:数据库分析设计与建模 (4)2.3 实训三:创建数据库 (6)2.4 实训四:创建触发器和插⼊测试数据 (10)2.4 实训五:模拟常规业务 (19)2.6 实训六:创建、使⽤视图 (24)2.7 实训七:存储过程实现业务处理 (27)2.8 实训⼋:利⽤事务实现转账 (41)第三章项⽬⼼得体会 (46)第四章对《我的租房⽹》进⾏优化 (47)附页 (57)第⼀章需求分析1.1 项⽬任务创建数据库、创建表、创建约束使⽤触发器和插⼊测试数据模拟常规业务、创建视图使⽤存储过程实现业务处理利⽤事务实现较复杂的数据更新1.2 项⽬技能⽬标使⽤T-SQL语句创建数据库、表和各种约束。
使⽤T-SQL语句编程实现常见业务。
使⽤触发器实现多表之间的级联更新。
使⽤事务和存储过程封装业务逻辑。
使⽤视图简化复杂的数据查询。
使⽤游标技术实现结果集的⾏集操作。
1.3 需求概述某银⾏是⼀家民办的⼩型银⾏企业,现有⼗多万客户,公司将为该银⾏开发⼀套ATM 存取款机系统,对银⾏⽇常的存取款业的增删改查,运⽤逻辑结构语句、事务、视图和存储过程,按照银⾏的业务需求,实现各项银⾏⽇常存款、取款和转账业务。
银行存取款系统数据库设计

《银行存取款系统数据库设计》数据库分析与设计学院:商学院学号:姓名:专业:信息管理与信息系统班级:14信管学期: 2015-2016(1)1.需求分析(1)用户的基本需求:用户对银行存取款客户端的要求不高,他们需要的是自己通过直接操作来获得自己所需要的服务,如存款、取款、转账、查询、修改密码、缴费等。
每一个功能,用户都可以根据系统的提示一步一步往下进行,并且操作方便、简单、快捷,极大的节约了用户办理业务的时间。
(2)系统设计的目标:针对银行业务种类繁多、客户需求量大等现象,为了减少银行工作人员的工作任务,延长业务办理的时间,方便客户,通过用户与银行存取款客户端,使用户自己就可以在客户端上完成存款、取款、查询余额、转账、修改密码的基础功能,是的银行业务科学化,提高账户管理水平和工作效率。
(3)系统总体框架:(4)业务流程图:①存款流程图②取款流程图①系统顶层数据流程图:系统输入数据②第一层数据流图用户取款信息(6)数据字典:2.概念结构设计(1)系统E-R图NN3.逻辑结构设计储户(账号、银行、密码、姓名、身份证号、性别、年龄、地址、存款余额)存款单(存款单号、账号、日期、存款方式、金额)取款单(取款单号、账号、日期、取款方式、金额)(注:“”表示主键,“”表示主键+外键,“”表示外键)银行存取款系统用户的增删改一、增加用户信息:代码: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 = newSqlCommand(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;usingSystem.Collections.Generic; ponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text; usingSystem.Windows.Forms; usingSystem.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";//实例化连接对象SqlConnectionsqlcnn = new SqlConnection(Strcnn);//打开连接通道sqlcnn.Open();//建立SQL语句string SQLstr = "select * from 用户where no='" + cmbno.SelectedItem.ToString() + "'";//建立SQLcommand对象SqlCommandsqlcmm = new SqlCommand(SQLstr, sqlcnn);//执行查询命令, 结果填充到SqlDataReader数据中SqlDataReadersqlrd = 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";//实例化连接对象SqlConnectionsqlcnn = 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对象SqlCommandsqlcmm = 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";//实例化连接对象SqlConnectionsqlcnn = new SqlConnection(Strcnn);//打开连接通道sqlcnn.Open();//建立SQL语句string SQLstr = "select * from 用户";//建立SQLcommand对象SqlCommandsqlcmm = new SqlCommand(SQLstr, sqlcnn);//执行查询命令, 结果填充到SqlDataReader数据中SqlDataReadersqlrd = sqlcmm.ExecuteReader();//通过循环一个一个读取学号填入组合中while (sqlrd.Read()){cmbno.Items.Add(sqlrd["no"]);}sqlcnn.Close();}}截图:三、删除用户信息代码:using System; usingSystem.Collections.Generic; ponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text;usingSystem.Windows.Forms;usingSystem.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";//实例化连接对象SqlConnectionsqlcnn = new SqlConnection(Strcnn);//打开连接通道sqlcnn.Open();// 从listbox列表框中选择的一行用户信息,提取用户的账号stringSelectno = lstStu.SelectedItem.ToString().Substring(0, 19);//建立SQL语句string SQLstr = "delete from 用户where no='"+Selectno+"'";//建立SQLcommand对象SqlCommandsqlcmm = new SqlCommand(SQLstr, sqlcnn);//执行查询命令int result = sqlcmm.ExecuteNonQuery();//判断执行是否成功if (result > 0)MessageBox.Show("删除用户信息成功!");elseMessageBox.Show("删除用户信息失败!");//从当前的listbox列表框中,把选择删除的内容移去。
银行存取款管理系统设计

题目:银行存取款管理设计功能:能够输入和查询客户存款取款记录。
在客户文件中,每个客户是一条记录,包括编号、客户姓名、支取密码、客户地址、客户电话、账户总金额;在存取款文件中,每次存取款是一条记录,包括编号、日期、类别、存取数目、经办人。
类别分为取款和存款两种。
本系统能够输入客户存款或取款记录;根据客户姓名查询存款和取款记录。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;2、建立一个文件,输入客户的必要信息,能对文件进行显示、输入、修订、删除等。
3、进一步要求:完成客户姓名查询存款和取款记录,并能得到每次帐户总金额。
要求:1、用C语言实现系统;2、利用结构体数组实现信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。
课程设计实验报告要求:1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分。
2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、小结等。
一、系统简介设计一个基于结构体数组的银行存取款管理系统,能实现对客户存取款信息进行录入、修改、删除、查询和输出等基本操作。
二、需求分析银行存取款管理系统应实现以下功能:1、能录入用户存取款的基本信息,包括客户姓名、性别、年龄、住址以及存取款日期、数目等基本信息,保存到结构体数组中。
2、能根据输入客户姓名进行存取款信息的查询以及修改、删除等操作。
3、能根据客户姓名进行查找后,以列表的方式将客户存取款信息显示在屏幕上。
三、概要设计1、系统功能结构图根据项目的开发要求,本系统划分成六个主功能模块:录入客户存取款信息模块、修改客户存取款信息模块、删除客户存取款信息模块、查询客户存取款信息模块、输出客户存取款模块和系统退出模块。
系统功能结构图如下:2、重要数据的数据结构设计客户存取款信息的记录项用结构体Student表示,包括5个属性:name、sex、age、addr、num 分别代表客户姓名、性别、年龄、住址以及客户存取款数目。
UML-ATM提款系统设计

1.名称:取款描述:用户插入卡片,并输入正确的密码后,系统连接上银行的数据库。
用户输入所需金额,系统在检查帐户余额后决定是否允许提供该服务。
预期结果:用户拿到需要的金额。
用户目标:用户想要取到所需的金额。
参加者:用户,押款人员,银行数据库。
依赖性:见图1-2前置条件:1. 用户帐号必须是有效帐号。
2. 用户必须正确登录。
3. 用户的帐户中的余额必须大于取款额。
方案:方案1:用户正常登录(插卡,输入正确密码)后,输入需要取的金额,所取金额小于帐户中的余额,取到需要的钱数。
方案2:用户正常登录后,输入需要取的金额,所取金额大于帐户中的余额,提示错误信息,要求重新输入,直到输入正确为止,拿到所输入的钱数。
方案3:与方案(2)相同,但提示错误信息后,决定停止该服务。
工作流:1. 用户正常登录。
2. 用户提出取款申请。
3. 后台数据库验证取款申请的合法性。
4. 更新数据该帐户的内容(减少帐户上的余额)。
5. 用户得到所需的钱。
6. 用户决定是否打印交易记录。
后置条件:帐户金额下降了,新的余额就是老的余额扣除提款金额。
商业规则:1. 一个用户一天提款总数不得超过5,000元人民币。
2. 用户一次提款最多为2,000元人民币。
3. 用户一天提款不得超过3次。
需求:1. 一个ATM系统必须支持每天500次的交易量。
2. 系统在无法完成该服务时,提出错误信息。
3. 系统在无法接待用户时,进入关闭状态。
实现注意事项:1. 用户可随时返回上一级菜单。
2. 用户可随时停止该服务。
3. 机器中没有所需钱数,提示错误信息。
2. 名称:用户转帐用例描述:用户需要利用A TM系统进行转帐业务期望结果:让用户得到成功转帐业务用户目标:后台数据库为用户转帐提供相应服务参与者/角色:后台数据库、用户依赖性:用户的转帐操作使用数据库响应转帐前置条件:用户登录A TM机,进入转帐子系统方案:1.用户登录A TM系统2.用户请求转帐服务3.用户得到相应服务工作流:1.用户登录ATM系统2.用户发送转帐请求3.系统响应用户的发送请求4.系统进行相应处理更新5.用户选择打印相关记录后置条件:用户得到转帐服务商业规则:1.用户每次输入的帐号应为合法帐号(帐号位数正确、不含非法字符等)2.用户每次欲转款额应小于规定的每次允许转出的款额,并且欲转款额应小于信用卡上的总余额3.用户每天的转帐次数不应超过规定值需求:多个用户可以在不同地点同时进行转帐业务注意事项:用户输入的帐号非法时或欲转的款额非法时,系统作何处理4. 名称:查询余额描述:期望结果:余额数量信息用户目标:用户得知余额数量参加者/角色:依赖性:前置条件:用户拥有一个账号,登录后台数据库方案/工作流:1.登录ATM2. 发出查询余额请求3.响应请求4.得到余额信息(扩展:打印回执单)后置条件:商业规则:需求:实现注意事项5. 名称:登录描述:用户插入卡片,并输入密码,数据库验证是否允许该用户进入系统。
(完整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存储分配管理员信息存在管理员表中。
软件工程课程设计_银行储蓄系统

银行储蓄系统系统设计报告目录一、引言 (3)1.编写目的 (3)2.项目背景 (3)3.开发人员 (3)4.参考文献 (3)二、问题定义 (4)1.目标 (4)2.系统功能 (4)三、可行性研究分析 (4)四、需求分析 (5)1. 功能需求分析 (5)2. 建立功能模型和数据需求 (5)3. 建立逻辑模型 (13)4. 建立行为模型 (14)5. 性能需求分析 (14)6. 系统可用性和可靠性需求分析 (14)五、概要设计报告 (15)1 数据库概要设计 (15)2 系统总体设计 (16)3 测试计划 (17)4 接口设计 (17)5 运行设计 (18)6 出错处理设计 (18)7 安全保密设计 (18)8 维护设计 (18)六、详细设计报告 (19)1 用户界面设计 (19)2 测试用例及预测结果 (25)七、运行环境和编译环境说明书 (27)1 开发编译环境 (27)2 运行使用环境 (27)3 错误处理 (27)八、总结报告 (28)1一、引言1、编写目的为了规范化软件开发,提高开发过程的能见度,便于控制和管理软件开发过程,提高软件质量,降低开发风险,减少需求变更,便于日后的维护工作,文档定制了软件开发的细节问题,明确软件需求,便于与用户协调开发,确认需求。
对软件的开发相关文档及用户使用手册进行了整理。
2、项目背景非电子化的银行储蓄系统工作效率较低,且安全性,准确性得不到保证。
越来越满足不了用户的需求和银行自身发展的需要。
建立一个高效,准确,方便,安全的银行储蓄系统是用户需求和技术进步的共同推动。
3、开发人员组长:xxx组员:xx xxx xxx xxx xxxxx作为项目经理,在人员沟通,质量管理,进度管理,风险管理方面进行了着重管理,并对里程碑进行了评审,确认。
并对变更进行评审,控制,记录。
需求分析以及系统编码由xxx完成。
用户界面设计以及系统测试由xxx完成。
数据库设计工作由xx完成。
数据库课程设计 银行储蓄管理系统

《数据库系统概论》课程设计报告设计题目:银行储蓄管理系统姓名:学号:班级:设计起止时间:需求分析:在对软件工程相关知识学习之后,我们对设计软件有了基本的认识和一些应用技能。
在数据库的课程设计中,我们计划做一个小型的银行储蓄管理系统,包括了基本的存取转,和管理员对日常工作的管理功能。
功能设计:(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存取款机系统设计与实现姓名:谭海兵专业:软件工程指导教师:余金林完成日期:2015-11-22一、项目背景 (3)1、项目任务 (3)2、项目技能目标 (3)3、需求概述 (3)4、开发环境 (4)5、问题分析 (4)二、项目实训内容 (7)1、实训一:制定《数据库设计与编程规范》 (7)2、实训二:数据库分析设计与建模 (13)3、实训三:创建数据库 (15)4、实训四:创建触发器和插入测试数据 (20)5、实训五:模拟常规业务 (27)6、实训六:创建、使用视图 (31)7、实训七:存储过程实现业务处理 (34)8、实训八:利用事务实现转账 (50)8、心得体会 (55)一、项目背景1、项目任务➢使用PowerDesigner完成数据库设计➢创建数据库、创建表、创建约束➢使用触发器和插入测试数据➢模拟常规业务、创建视图➢使用存储过程实现业务处理➢利用事务实现较复杂的数据更新2、项目技能目标➢使用PowerDesigner完成数据库概念模型和数据库物理模型设计。
➢使用T-SQL语句创建数据库、表和各种约束。
➢使用T-SQL语句编程实现常见业务。
➢使用触发器实现多表之间的级联更新。
➢使用事务和存储过程封装业务逻辑。
➢使用视图简化复杂的数据查询。
➢使用游标技术实现结果集的行集操作。
3、需求概述某银行是一家民办的小型银行企业,现有十多万客户,公司将为该银行开发一套ATM存取款机系统,对银行日常的存取款业务进行计算机管理,以便保证数据的安全性,提高工作效率。
要求根据银行存取款业务需求设计出符合第三范式的数据库结构,使用T-SQL 语言创建数据库和表,并添加表约束,进行数据的增删改查,运用逻辑结构语句、事务、视图和存储过程,按照银行的业务需求,实现各项银行日常存款、取款和转账业务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oString();
string itmname = sqlrd["name"].ToString();
string itmsex = sqlrd["sex"].ToString();
string itmage = sqlrd["age"].ToString();
string itmid = sqlrd["id"].ToString();
存款单(存款单号、账号、日期、存款方式、金额)
取款单(取款单号、账号、日期、取款方式、金额)
(注:“”表示主键,“”表示主键+外键,“”表示外键)
储户
字段名
数据类型
长度
说明
描述
ZH
Char
15
账号
主键
YH
Varchar
50
银行
MM
Char
6
密码
XM
Char
8
姓名
SFZH
Char
18
身份证号
XB
Char
2
性别
NL
Smallint
2
年龄
DZ
Varchar
50
地址
CKYE
Float
20
存款余额
存款单
字段名
数据类型
长度
说明
描述
CKDH
Char
16
存款单号
主键(年月日+序号)
ZH
Char
15
账号
外键
RQ
Datatime
8
日期
JE
Float
20
金额
CUFS
Char
20
存款方式
取款单
字段名
数据类型
长度
说明
描述
string itmStr = itmno + " " + itmname + " " + itmsex + "" + itmage + " " + itmid;
(itmStr);
}
();
}
}
}
截图:
(4)业务流程图:
①存款流程图
否
是
②取款流程图
否
否
是
(5)数据流:
①系统顶层数据流程图:
系统输入数据
②第一层数据流图
用户存款信息
用户取款信息
(6)数据字典:
数据流名称:储户信息
数据结构:
账号(ZH)
银行(YH)
密码(MM)
姓名(XM)
身份证号(SFZH)
性别(XB)
年龄(NL)
地址(DZ)
存款余额(CKYE)
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void 确定_Click(object sender, EventArgs e)
{
oString();
= sqlrd["sex"].ToString();
= sqlrd["age"].ToString();
= sqlrd["id"].ToString();
}
();
}
private void Form2data_Load(object sender, EventArgs e)
{
}
private void 保存_Click(object sender, EventArgs e)
数据流名称:银行存款
数据结构:
存款单号(CKDH)
账号(ZH)
日期(RQ)
存款方式(CKFS)
存款金额(JE)
数据流名称:银行取款
数据结构:
取款单号(CKDH)
账号(ZH)
日期(RQ)
取款方式(CKFS)
金额(JE)
2.概念结构设计
(1)系统E-R图
1 1
N N N
3.逻辑结构设计
储户(账号、银行、密码、姓名、身份证号、性别、年龄、地址、存款余额)
QUDH
Charr
16
取款单号
主键(年月日+序号)
ZH
Char
15
账号
外键
RQ
Datatime
8
日期
JE
Float
20
金额
QKFS
Char
20
取款方式
银行存取款系统用户的增删改
一、增加用户信息:
代码:
using System;
using;
using;
using;
using;
using;
usi
namespace 银行存取款系统数据库设计
银行存取款系统数据库设计
《银行存取款系统数据库设计》数据库分析与设计
学院:商学院
学 号:
姓 名:
专业:信息管理与信息系统源自班级:14信管学 期:2015-2016(1)
1.需求分析
(1)用户的基本需求:
用户对银行存取款客户端的要求不高,他们需要的是自己通过直接操作来获得自己所需要的服务,如存款、取款、转账、查询、修改密码、缴费等。每一个功能,用户都可以根据系统的提示一步一步往下进行,并且操作方便、简单、快捷,极大的节约了用户办理业务的时间。
(2)系统设计的目标:
针对银行业务种类繁多、客户需求量大等现象,为了减少银行工作人员的工作任务,延长业务办理的时间,方便客户,通过用户与银行存取款客户端,使用户自己就可以在客户端上完成存款、取款、查询余额、转账、修改密码的基础功能,是的银行业务科学化,提高账户管理水平和工作效率。
(3)系统总体框架: