银行存取款系统数据库设计

合集下载

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

数据库技术与应用课程设计银行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提款系统设计

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版)简单银行存取管理系统--详细设计说明书

(完整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存取款机系统设计与实现

给学弟学妹的福利,数据库这个难度还算可以吧.也不是很大.大家多多思考一下.代码仅供参考.最好不要复制.手敲一遍也是好的.《数据库技术与开发》项目实训设计报告项目名称:银行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 语言创建数据库和表,并添加表约束,进行数据的增删改查,运用逻辑结构语句、事务、视图和存储过程,按照银行的业务需求,实现各项银行日常存款、取款和转账业务。

ATM机数据库设计

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背景通过数据库课程设计,进一步掌握数据库系统的理论和方法。

ATM取款机系统数据库设计

ATM取款机系统数据库设计
• 要求学员自己动手编写SQL语句,教员巡 视,解答学员提出的问题
阶段检查
• 针对第二阶段抽查学员的编码结果 • 教员给出点评或集中演示难点部分
第二阶段标准代码演示-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_数据库设计

ATM_数据库设计

一摘要现在生活快节奏的生活,银行卡成为现代人的必备物品。

ATM机是时代的成功产物。

ATM取款机是为了方便人们管理和存储自己的钱财,一般的ATM 机可以取款,转账,查询余额修改密码。

根据这些功能可用SQL sever模拟出的登陆,查询余额的功能。

首先要做出整个系统的E-R图,然后进行数据库系统逻辑设计,做出系统流图,概述ATM各个操作间的数据流流向以及各个实体之间所具有的一些操作。

接着进行数据库系统的物理设计。

整个系统需要的软件有SQL server 2000,以及Visual Studi o 2005 。

二数据库的建立1. 数据库命名规则1)数据库命名:英文或英文缩写。

如:ATM。

2)数据库表命名:汉译英,或者英文缩写,如:cardInfo。

3)字段命名:全部采用英文简写,如卡号—cardID。

2.总的E-R图(用Visio 2003软件可以画出)2.数据库系统逻辑设计这样的系统流图清晰描绘了ATM各个操作间的数据流流向各个实体之间的操作3.数据库系统物理设计通过E-R图的建立可以看到ATM系统共有3个表格1)银行卡基本信息表字段名英文名主键数据类型数据长度NULL 备注卡号cardID √varchar 20 NOT 银行卡的账号卡类型curtype Varchar 10 NOT 银行卡的类型存储类型Savingtype Varchar 8 NOT 存款类型开户日期Openday Datetime NOT 开户日期金额Openmoney Money NOT 卡上银行密码Password varchar 6 NOT 卡的密码卡的序号customerID Int NOT 开户时卡的序号2)转入金额表字段名英文名主键数据类型数据长度NULL 备注源卡号SourcecardID √varchar 20 NOT 原帐户卡号卡号TargetcardID √varchar 20 要转入的账户卡号金额TransAmount Money 转账的数量日期Transdate Datetime NOT 转账日期3)转出金额表字段名英文名主键数据类型数据长度NULL 备注源账号SourcecardID √char 20 NOT 原账号账号TragetcardID √char 20 NOT 目标账号金额Transamount Money NOT 转账金额日期TransTime NOT 转账日期5)数据库系统代码设计a) 登陆表代码确定键代码(事件Button12_click)Dim sqlstr As StringDim dataset As New DataSet()sqlstr = "select * from cardInfo where cardID='" + TextBox1.Text + "'" '获取cardInfo表中cardID和textbox1相同的数据dataset = GetDataFromDB(sqlstr) '获取sqlstr中指定表中的数据Dim count As Integercount = dataset.Tables(0).Rows.Count ' 统计dataset中表的行数If count = 0 ThenMsgBox("表中没有此卡号")ElseIf TextBox2.Text = dataset.Tables(0).Rows(0)("pass") ThenDim MDIChild As New Form3()Form3.Show()Me.Finalize()ElseMsgBox("密码错误!")End IfEnd If退位键代码(事件Button14_click)Dim strlen As StringIf TextBox1.TextLength < 19 Thenstrlen = TextBox1.Text.Remove(TextBox1.Text.Length - 1, 1) '在原textbox字符串中长度减一TextBox1.Text = strlen '重新显示Exit SubElsestrlen = TextBox2.Text.Remove(TextBox2.Text.Length - 1, 1) '在原textbox字符串中长度减一TextBox2.Text = strlenEnd If1键代码(事件Button1_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button1.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button1.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button1.TextElsestr = TextBox1.TextTextBox1.Text = str + Button1.Text2键代码(事件Button2_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button2.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button2.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button2.TextElsestr = TextBox1.TextTextBox1.Text = str + Button2.TextEnd If3键代码(事件Button3_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button3.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button3.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button3.TextElsestr = TextBox1.TextTextBox1.Text = str + Button3.TextEnd If4键代码(事件Button4_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button4.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button4.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button4.TextElsestr = TextBox1.TextTextBox1.Text = str + Button4.TextEnd If5键代码(事件Button5_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button5.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button5.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button5.TextElsestr = TextBox1.TextTextBox1.Text = str + Button5.TextEnd If6键代码(事件Button6_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button6.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button6.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button6.TextElsestr = TextBox1.TextTextBox1.Text = str + Button6.TextEnd If7键代码(事件Button7_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button7.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button7.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button2.TextElsestr = TextBox1.TextTextBox1.Text = str + Button7.TextEnd If8键代码(事件Button8_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button8.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button8.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button8.TextElsestr = TextBox1.TextTextBox1.Text = str + Button8.TextEnd If9键代码(事件Button9_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button9.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button9.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button9.TextElsestr = TextBox1.TextTextBox1.Text = str + Button9.TextEnd If0键代码(事件Button10_click)str1 = TextBox1.TextIf str1.Length >= 19 Then '如果textbox1的长度大于19 光标下移到textbox2If TextBox2.Text = "" ThenTextBox2.Text = Button10.TextExit SubElsestr = TextBox2.TextTextBox2.Text = str + Button10.TextExit SubEnd IfEnd IfIf TextBox1.Text = "" ThenTextBox1.Text = Button10.TextElsestr = TextBox1.TextTextBox1.Text = str + Button10.TextEnd If退出键代码(事件Button11_click)close()程序对应的界面用Visual Studio 2005可以做出如下:b) 查询余额im sqlstr As StringDim dataset As New DataSet()sqlstr = "select * from cardInfo where cardID='" + Form2.TextBox1.Text + "'"dataset = GetDataFromDB(sqlstr)Dim listitem As New ListViewItem()listitem.Text = dataset.Tables(0).Rows(0)("cardID")listitem.SubItems.Add(dataset.Tables(0).Rows(0)("curType"))listitem.SubItems.Add(dataset.Tables(0).Rows(0)("savingType"))listitem.SubItems.Add(dataset.Tables(0).Rows(0)("openDate"))listitem.SubItems.Add(dataset.Tables(0).Rows(0)("openMoney"))listitem.SubItems.Add(dataset.Tables(0).Rows(0)("customerID"))ListView1.Items.Add(listitem)listitem = New ListViewItem()退页键代码(事件Button1_click)Dim frm As New Form3Me.Close()frm.Show()退卡键代码(事件Button2_click)close()这只是简单两种功能的模拟。

数据库课程设计银行储蓄系统

数据库课程设计银行储蓄系统

银行储蓄系统数据库课程设计一、系统概述银行储蓄系统是银行的核心业务系统之一,用于管理客户在银行的储蓄账户信息。

本课程设计将通过建立一个简单的银行储蓄系统,帮助学员掌握数据库设计和应用开发的基本技能。

二、系统需求1.用户管理:能够添加、删除、修改和查询用户信息。

2.账户管理:能够创建、修改、查询和删除账户信息。

3.存款业务:能够完成存款、取款、查询余额等操作。

4.转账业务:能够实现不同账户间的转账功能。

5.报表生成:能够根据需求生成相应的报表。

三、数据库设计1.用户表(Users)UserID(用户ID,主键)UserName(用户名)Password(密码)Email(邮箱)Phone(电话)2.账户表(Accounts)AccountID(账户ID,主键)UserID(用户ID,外键)AccountName(账户名称)AccountType(账户类型)OpenDate(开户日期)Balance(账户余额)3.存款记录表(Deposits)DepositID(存款ID,主键)AccountID(账户ID,外键)DepositAmount(存款金额)DepositDate(存款日期)4.取款记录表(Withdrawals)WithdrawalID(取款ID,主键)AccountID(账户ID,外键)WithdrawalAmount(取款金额)WithdrawalDate(取款日期)5.转账记录表(Transfers)TransferID(转账ID,主键)SourceAccountID(源账户ID,外键)DestinationAccountID(目标账户ID,外键)TransferAmount(转账金额)TransferDate(转账日期)6.报表表(Reports)ReportID(报表ID,主键)ReportType(报表类型)ReportDate(报表日期)ReportContent(报表内容)7.用户权限表(UserPermissions)PermissionID(权限ID,主键)UserID(用户ID,外键)PermissionType(权限类型)。

银行存取款管理信息系统

银行存取款管理信息系统

某银行存取款管理信息系统设计一、系统设计的目的:在传统的银行帐户管理中,其过程往往是很复杂的,繁琐的,帐户管理以入帐和出帐两项内容为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同;且会出现信息的重复传递问题,因此该过程需要进行信息化,以利用计算机进行帐目管理。

本系统是模拟银行帐户及存取款的管理,开发一个银行存取款的管理系统。

充分运用计算机技术,方便操作人员的使用,提高客户存取款的效率,提高银行的服务质量。

系统开发的整体任务是实现银行帐户管理的系统化、规范化、自动化和智能化,从而达到提高银行存取款管理效率的目的。

二、系统分析:(一)需求分析1、业务需求:该银行存取款管理信息系统主要完成的功能主要有:管理员信息管理用户信息修改、开户、销户存款、取款取款机信息管理报表输出、报表打印2、功能需求:根据用户需求和存取款管理系统的基本功能,本系统的结构图如下3-1所示(1)功能定义:系统管理是便于以后系统升级,对储户的存取款信息的操作在信息管理模块中完成,包括录入、修改、删除等操作.查询和统计分别在各自的模块中。

(2)模块定义:主模块:输入:操作系统传递的各种信息以及用户输入的各种数据。

输出:系统启动界面显示.系统登录模块:输入:选择用户并输入口令。

输出:确认后显示主菜单。

系统设置模块:输入:数据并确认输出:弹出对话框显示设置成功与否修改口令模块:输入:两次新口令并确认;输出:口令修改成功与否;储户帐目操作模块:1).录入模块:输入:帐户号码、存款数额等信息;输出:确认并提示录入成功与否;2)。

修改模块:输入:需要修改的信息;输出:确认并提示修改成功与否;3)。

删除模块:输入:需要删除的信息;输出:确认并提示删除成功与否;数据查询模块:输入:选择查询方式并确认;输出:显示查询结果;数据统计模块:输入:选择需要统计的数据并确认;输出:显示统计结果。

数据库设计实验报告-银行储蓄系统

数据库设计实验报告-银行储蓄系统

银行储蓄系统Xx1 用户需求分析,建立E-R图,模型生成,数据库实施和修改;Xx2 用户需求分析,建立E-R图,数据库运行和维护;设计过程相互探讨,相互学习,达到共同进步之目的。

一、需求描述银行储蓄系统,实现储户开户登记,办理定期存款帐,办理定期取款手续,办理活期存款帐,办理活期取款手续,同时实现各银行及储蓄所间的业务代理和转换。

1、信息处理需求总行:包括国家编号(唯一),总行长(唯一),总行长编号(唯一),地址,联系电话,包括多个分行分行:包括分行编号(唯一),分行长(唯一),分行长编号(唯一),地址,联系电话,各分行之间为并列关系,分行雇佣业务员,审核账目清单,每个分行有一个营业厅受理各项业务营业厅:包括营业厅编号(唯一),地址,联系电话,营业窗口号,一个营业厅负责受理一个分行的业务,一个营业厅由多个储蓄所组成并有多个业务员受理各项业务储蓄所:包括储蓄所编号(唯一),储蓄所名称,储蓄所长,地址,联系电话,储蓄柜台号,储蓄金额,并有多个职员办理各项业务业务员:包括姓名(唯一),性别,编号(唯一),年龄,职务,办理储蓄类别(活期,定期),每个业务员在一个营业窗口工作职员:包括姓名(唯一),性别,编号(唯一),年龄,职务,办理(包括储蓄类别-活期/定期;登记,核对),每个职员在一个储蓄柜台工作,计算存、取额及利息储户:包括姓名(唯一),身份证号(唯一),性别,储蓄类别,年龄,开户金额,输入(密码,密码确认,储蓄金额,取款额),储户可选择多个储蓄所存、取款,并可拥有多个储蓄账号账户:包括储蓄账号编码(唯一),储蓄账号(唯一),储蓄类别,开户时间,开户金额,总金额,密码2、功能需求交互:各分行及储蓄所之间进行业务交互,包括转账,代办提交:各级银行进行由下至上的清单、业务信息的交接审核:上级银行对所属银行的业务信息和账户清单进行审查、核准计算:主要是工作人员对总账出入和利息的合计办理:职员对储户信息和账户资料的登记和核准,实现储户开户登记,办理定期存款帐,办理定期取款手续,办理活期存款帐,办理活期取款手续管理:主指上级银行业务员对下级银行、人员的管控和调动数据输入:输入储户和账户的基本信息3、系统性能该系统的精度要求较高、时间比较快、应变能力快。

数据库课程设计银行存取款管理

数据库课程设计银行存取款管理

数据库课程设计银⾏存取款管理银⾏储蓄业务数据库分析⼀、系统功能简介本系统是银⾏⽤户的存取款系统。

主要功能是管理各个⽤户存取款的相关数据。

⼆、本系统由三张表组成,具体如下:表名属性(字段)名储户表账号、⾝份证号、姓名、性别、⾝⾼、地址、存款余额存款单表存款单号、⾦额、存款⽅式、账号、存款⽇期取款单表取款单号、⾦额、取款⽅式、账号、取款⽇期系统表基本信息三、表间关系如下:⼀个存款单或取款单属于⼀个⽤户,⼀个⽤户可以拥有多次存款单或取款单。

⽤户通过存款操作与存款单建⽴联系,通过取款操作与取款单建⽴联系。

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 语句用于取回和更新数据库中的数据。

ATM自动取款机系统数据库的设计与实现毕业设计

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)系统总体框架:
相关文档
最新文档