【精编_推荐】关于银行系统的数据库课程设计
银行数据库课程设计

银行数据库课程设计一、课程目标知识目标:1. 让学生掌握数据库的基本概念,了解银行数据库的结构和功能;2. 使学生了解数据库设计的原则和方法,并能运用到实际银行数据库设计中;3. 帮助学生理解SQL语言的基本操作,如查询、插入、删除和修改数据。
技能目标:1. 培养学生运用数据库设计软件进行银行数据库设计的能力;2. 提高学生运用SQL语言进行数据查询和操作的能力;3. 培养学生解决实际银行数据库问题的能力,具备一定的数据库维护技能。
情感态度价值观目标:1. 培养学生对数据库技术在银行行业应用的兴趣,激发学生学习主动性;2. 培养学生严谨、细致的学习态度,养成认真分析问题、解决问题的习惯;3. 增强学生的团队合作意识,培养沟通与协作能力。
分析课程性质、学生特点和教学要求,本课程旨在通过实际银行数据库案例,让学生掌握数据库设计的基本方法和技能,培养解决实际问题的能力。
课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果,并为后续的教学设计和评估提供依据。
二、教学内容1. 数据库基本概念:介绍数据库的定义、分类、发展历程及在银行行业的应用。
相关教材章节:第一章 数据库概述2. 数据库设计原则与方法:讲解关系模型、实体-关系模型等设计方法,以及范式理论。
相关教材章节:第二章 数据库设计基础3. 银行数据库结构:分析银行数据库的表结构、字段设计、数据关系等。
相关教材章节:第三章 数据库结构设计4. SQL语言基本操作:教授SELECT、INSERT、UPDATE、DELETE等基本SQL语句。
相关教材章节:第四章 SQL语言5. 数据库设计软件应用:介绍数据库设计软件的使用方法,如ERWin、PowerDesigner等。
相关教材章节:第五章 数据库设计工具6. 银行数据库案例分析:分析实际银行数据库案例,让学生了解数据库在实际项目中的应用。
相关教材章节:第六章 数据库应用案例7. 数据库维护与优化:讲解数据库的备份、恢复、安全性、性能优化等内容。
数据库银行储蓄系统课程设计

数据库银行储蓄系统课程设计一、课程设计目的数据库银行储蓄系统课程设计旨在使学生掌握数据库技术的基础知识和实际应用,提高学生对数据库系统设计、开发和管理的认识和能力。
通过实际操作,培养学生分析问题、解决问题的能力,为学生将来从事相关工作打下基础。
二、课程设计要求1. 数据库系统需求分析:学生需分析系统需求,确定系统所需数据和功能,制定数据库设计计划。
2. 数据库设计:学生需根据需求分析结果,设计出合适的数据库结构,包括表、视图、触发器等,保证数据的完整性、一致性和安全性。
3. 系统功能开发:学生需使用所学知识,编写数据库查询、插入、更新、删除等操作代码,实现银行储蓄系统的各项功能。
4. 系统测试与优化:学生需对所开发的系统进行测试,查找并修复潜在的问题,优化系统性能,提高系统的可靠性和稳定性。
5. 文档编写:学生需编写详细的系统设计文档,包括需求分析文档、数据库设计文档、系统功能文档等,以便于他人理解和维护系统。
三、课程设计内容1. 数据库系统需求分析:学生需分析银行储蓄系统的需求,包括客户信息管理、账户信息管理、存取款管理等功能需求。
2. 数据库设计:学生需根据需求分析结果,设计出合适的数据库结构,包括客户表、账户表、交易表等,并定义表之间的关系。
3. 系统功能开发:学生需使用所学知识,编写数据库操作代码,实现银行储蓄系统的各项功能。
4. 系统测试与优化:学生需对所开发的系统进行测试,查找并修复潜在的问题,优化系统性能。
5. 文档编写:学生需编写详细的系统设计文档,包括需求分析文档、数据库设计文档、系统功能文档等。
四、课程设计步骤1. 需求分析:首先,我们需要对银行储蓄系统的需求进行深入分析。
这包括了解客户信息管理、账户信息管理、存取款管理等功能的具体需求。
通过这一步骤,我们将能够明确系统需要的数据和功能,为后续的数据库设计打下基础。
2. 数据库设计:在需求分析的基础上,我们需要设计出合适的数据库结构。
银行系统的数据库课程设计

目录一、目的与意义 0二、设计内容与要求 0三、设计原理 (1)1、数据库基本操作: (1)Ⅰ、定义基本表 (1)Ⅱ、修改基本表 (1)III、删除基本表 (1)IV、数据查询 (1)V、插入元组 (2)VI、修改数据 (2)VII、删除数据 (2)2、数据库完整性 (2)I、实体完整性定义 (2)II、参照完整性定义 (2)3、触发器 (3)I、定义触发器 (3)II、激活触发器 (3)III、删除触发器 (3)4、存储过程 (3)I、PL/SQL的块结构 (3)II、变量常量的定义 (4)III、控制结构 (4)IV、存储过程的用户接口 (5)四、总体设计方案 (5)五、详细设计 (5)1、需求分析 (5)2、流程图 (6)3、E-R图 (6)4、设计表 (6)5、关系图 (7)6、编码 (8)六、测试与调试 (11)七、收获与体会 (15)八、主要参考资料 (15)一、目的与意义本课程设计是在学完《数据库系统与应用》课程之后,让学生综合应用数据库知识,设计数据库,进行调试与测试,以加深对数据库基本知识及SQL语言的理解,提高综合应用知识的能力、分析解决问题的能力,加强数据库知识的实践技能,初步培养开发实用数据库系统的能力。
二、设计内容与要求设计一个银行账户管理系统,至少能够实现存款、取款、查询、转账等基本功能,要求在在数据库实现过程中至少建立三张表、不得少于四个查询、三个触发器、使用至少一个存储过程。
三、设计原理SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询。
SQL是一个通用的、功能极强的关系数据库语言。
它之所以能够为用户和业界所接受,并成为国际标准,是因为它是一个综合的、功能极强同时又简捷易学的语言。
SQL语言集数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能于一体。
数据库课程设计银行

数据库课程设计银行一、课程目标知识目标:1. 理解数据库的基本概念,掌握数据库的设计原则和方法。
2. 学习银行数据库的构建,了解银行业务数据的特点和需求。
3. 掌握SQL语言的基本操作,实现对银行数据库的增、删、改、查功能。
技能目标:1. 能够运用数据库设计原则,独立设计并实现一个简单的银行数据库系统。
2. 通过实践操作,熟练使用SQL语言进行数据管理和查询。
3. 培养学生的团队协作能力,学会在项目中分工与协作,共同完成数据库设计。
情感态度价值观目标:1. 培养学生对数据库课程的兴趣,激发学习积极性,提高自主学习能力。
2. 增强学生的数据安全意识,了解数据库在保障信息安全中的重要作用。
3. 通过实际案例,让学生认识到数据库在现实生活中的广泛应用,培养其实践应用能力。
课程性质:本课程为高二年级信息技术课程,以实践操作为主,注重培养学生的动手能力和实际应用能力。
学生特点:高二学生已具备一定的计算机操作基础,对数据库概念有一定了解,但尚需加强实践操作和团队协作能力。
教学要求:结合学生特点,以实际案例为载体,采用任务驱动法,引导学生主动参与,注重理论与实践相结合,提高学生的实际操作能力。
在教学过程中,关注学生的个体差异,给予个性化指导,确保课程目标的实现。
通过课程学习,使学生能够独立完成数据库设计,并为后续相关课程打下坚实基础。
二、教学内容1. 数据库基础知识回顾:数据库概念、数据模型、关系型数据库。
教材章节:第一章 数据库基础2. 银行数据库需求分析:银行业务流程、数据特点、数据管理需求。
教材章节:第二章 数据库设计3. 数据库设计方法与实践:实体关系模型、E-R图绘制、数据库表设计。
教材章节:第二章 数据库设计4. SQL语言操作:数据定义、数据操纵、数据查询、数据控制。
教材章节:第三章 SQL语言5. 银行数据库实现:创建数据库、创建表、插入数据、查询数据、修改数据、删除数据。
教材章节:第四章 数据库实现6. 数据库安全性:用户权限管理、数据备份与恢复。
数据库课设---银行管理系统

数据库技术与开发——银行数据库系统专业:计算机科学与技术姓名:***班级:10计算机2班学号:**********指导老师:***内蒙古科技大学课程设计任务书一.课程设计目的 (4)二.课程设计的具体要求 (4)三.题目简介,收集有关数据 (4)四.各个关系图 (6)五.逻辑数据库设计 (6)1.关系模型 (6)2表结构: (7)六.数据库实现 (12)1.建立数据库: (12)2.建立表: (12)七.简单查询 (19)1单表查询 (19)2多表连接查询 (20)3分组查询 (20)4统计查询 (21)5更新 (21)八.存储过程 (22)九.事物 (23)十.游标 (26)十一.触发器 (28)一.课程设计目的1、培养学生运用所学课程《数据库原理及应用》的理论知识和技能以及对数据库组织、管理和使用能力。
2、掌握数据库应用系统的整个设计过程(包括需求分析、概念结构设计、逻辑结构设计与物理设计与实施)二.课程设计的具体要求1.从附录一中选择一个题目进行数据库应用系统设计。
2.功能设计:用Visual FoxPro,Visual Basic、PB等开发工具与数据库管理系统SQL-SEVER 或Access制作一个小型管理系统。
所设计的小型管理系统应包含输入输出、查询、插入、删除等基本功能。
设计课题可以从候选的项目中选出,根据题目的基本需求,画出流程图,编写程序,并写出详细的设计说明书。
(实际系统的实现为可选项,必须有功能设计)3.数据库的设计:根据数据库应用系统设计过程,通过需求分析和系统分析,进行数据库的概念结构设计、逻辑结构设计等工作:概念结构设计的E-R图数据库逻辑结构设计是以表格的形式说明数据库中有几个表,每个表的表名以及每个表的各字段名,类型和约束(主、外码);确定表之间的关联(一对一、一对多、多对多)运用数据库理论确定每个表至少属于3NF。
三.题目简介,收集有关数据设计题目:银行数据库我们试图以商业银行的三大业务(负债业务、资产业务、中间业务与表外业务)为基点;重点讨论他所需要的三大方面数据商业银行的业务三大类:负债业务;资产业务;中间业务与表外业务。
数据库课程设计银行储蓄系统

银行储蓄系统数据库课程设计一、系统概述银行储蓄系统是银行的核心业务系统之一,用于管理客户在银行的储蓄账户信息。
本课程设计将通过建立一个简单的银行储蓄系统,帮助学员掌握数据库设计和应用开发的基本技能。
二、系统需求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. 学习并掌握SQL语言的基本操作,如查询、插入、删除和更新数据;3. 掌握银行业务中数据库的应用场景,理解银行业务数据的特点。
技能目标:1. 能够运用所学知识设计简单的银行数据库系统;2. 能够运用SQL语言进行基本的数据库操作,解决实际问题;3. 能够分析和解决银行业务中数据库的简单故障。
情感态度价值观目标:1. 培养学生对数据库技术的兴趣,激发他们探索新技术的热情;2. 培养学生的团队协作意识,使他们学会在团队中共同解决问题;3. 培养学生严谨、负责任的工作态度,认识到数据安全的重要性。
课程性质:本课程为信息技术学科,结合学生所在年级的知识深度,注重理论与实践相结合,强调培养学生的实际操作能力和解决问题的能力。
学生特点:学生具备一定的计算机操作能力,对新技术充满好奇,但可能对数据库知识了解较少,需要从基本概念入手,逐步引导。
教学要求:结合课程性质、学生特点和教学目标,采用案例教学、任务驱动等教学方法,以学生为主体,充分调动学生的积极性和主动性。
在教学过程中,注重目标导向,明确学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 数据库基本概念:数据库的定义、功能、类型及发展历程;教材章节:第一章 数据库概述。
2. 数据库结构:关系模型、实体关系模型等;教材章节:第二章 数据库结构。
3. SQL语言基本操作:查询、插入、删除和更新数据;教材章节:第三章 SQL语言。
4. 银行业务数据库设计:了解银行业务流程,学习如何设计满足实际需求的数据库;教材章节:第四章 数据库设计。
5. 银行业务数据库应用:分析银行数据库在实际业务中的应用场景,如客户信息管理、账户管理等;教材章节:第五章 数据库应用。
6. 数据库安全与维护:学习如何保证数据安全,了解数据库的日常维护方法;教材章节:第六章 数据库安全与维护。
数据库课程设计报告——银行管理系统
金额
float
*
银行卡
9
透支功能
Bool(bit)
*
银行卡
10
透支额度
int
*
银行卡
11
贷款额度
int
*
银行卡
12
转账号
int
*
转账
13
转向卡号
int
*
转账
14
转账金额
int
*
转账
15
手续费
float
*
转账
16
转账利率
float
*
转账
17
贷款号
int
*
贷款
18
贷款金额
int
*
贷款
19
贷款日期
datetime
透支
1.2.3数据库概念结构设计(E-R模型)
、
SQL关系截图:
二.整体设计
1.1选用程序语言
本系统是用C#语言,选用这个语言的原因有以下几点:
1.C#与C/C++具有极大的相似性,我们之前认真学习过C语言和c++语言,c#是这两个语言的高效率版本,更易于上手。
2.C#语言完美支持.NET平台,可以在Microsoft .NET平台上事半功倍的构建应用程序的扩展框架(即与数据库的连接非常易于实现,对数据可以直接进行操作。)
透支(卡号,透支金额,透支号,透支开始时间,透支还清时间)
1.2.2数据项具体设置
编号
标识符
类型
长度
所属表名
1
用户名
nchar
10
用户,银行卡
2
密码
int
数据库课程设计 银行储蓄管理系统
《数据库系统概论》课程设计报告设计题目:银行储蓄管理系统姓名:学号:班级:设计起止时间:需求分析:在对软件工程相关知识学习之后,我们对设计软件有了基本的认识和一些应用技能。
在数据库的课程设计中,我们计划做一个小型的银行储蓄管理系统,包括了基本的存取转,和管理员对日常工作的管理功能。
功能设计:(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();}心得体会:这次课程设计体会非常深刻,首先在团队合作方面,我觉得自己作为队长没有两道好我的小队,这是我的失职。
数据库课程设计 银行管理系统
武汉理工大学华夏学院课程设计报告书课程名称:《数据库系统原理》课程设计题目:银行储蓄管理系统数据库设计课程设计任务书学生姓名:专业班级:指导教师:工作单位:设计题目:银行储蓄管理系统数据库设计初始条件:本课程的设计的目的是通过实践使同学们经历数据库设计开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识。
结合具体的开发案例,理解并初步掌握系统分析、系统设计、系统实施的主要环节和步骤以及软件文档的制作能力。
要求完成的主要任务:要求学生根据所学的数据库原理与程序设计的知识,能够针对一个小型的银行储蓄管理系统,进行数据库系统的需求分析,概念结构设计、逻辑结构设计、物理结构设计,数据录入及测试等,完成题目要求的功能。
主要任务:用户有以下需求:建立读者档案;建立图书档案,建立书目索引;完成日常图书检索、借还工作,对读者档案、图书档案、借还系统的访问,必需进行身份验证。
具体要求如下:1.存折信息数据包括:存折的基本信息包括:户名、帐号、开户银行名称、开户日期、取款密码等。
2.账户存取明细数据包括:日期、摘要(现存、现支、转存、利息)、交易金额、余额、操作柜员编号。
3.检索系统能根据户名、账号、交易日期、金额等进行查询。
4.取款输入账号和密码后,能根据密码判断用户是否合法,能判断取款金额是否超过了账户余额,如果取款金额合法,就对该账号的余额信息进行更新。
5、存款输入账号和存款金额后,能更新该账号的余额。
6、转账输入账号和密码后,能根据密码判断用户是否合法,然后再输入对方的转账账户,并判断对方的转账账户是否合法,如果合法,再输入转账的金额,并能判断转账金额是否超过了账户余额,如果转账金额合法,就对该账号的余额信息以及对方的账户余额信息进行更新。
设计报告撰写格式要求:要求层次清楚、整洁规范、不得相互抄袭,凡正文内容有整段完全相同者一律以抄袭论处。
设计报告正文字数不少于0.2万字(不包括附录)第1级(章)题序和题名用黑体三号字,第2级(目)题序和题名用黑体小四号字,第3级(条)题序和题名用黑体小四号字,正文内容用宋体五号字(英文用新罗马体),多倍行距1.25。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、目的与意义1
二、设计内容与要求1
三、设计原理2
1、数据库基本操作:2
Ⅰ、定义基本表2
Ⅱ、修改基本表2
III、删除基本表2
IV、数据查询3
V、插入元组3
VI、修改数据3
VII、删除数据4
2、数据库完整性4
I、实体完整性定义4
II、参照完整性定义4
3、触发器5
I、定义触发器5
II、激活触发器5
III、删除触发器5
4、存储过程6
I、PL/SQL的块结构6
II、变量常量的定义6
III、控制结构7
IV、存储过程的用户接口8
四、总体设计方案9
五、详细设计9
1、需求分析9
2、流程图9
3、E-R图9
4、设计表9
5、关系图10
6、编码10
六、测试与调试15
七、收获与体会15
八、主要参考资料16
一、目的与意义
本课程设计是在学完《数据库系统与应用》课程之后,让学生综合应用数据库知识,设计数据库,进行调试与测试,以加深对数据库基本知识及SQL语言的理解,提高综合应用知识的能力、分析解决问题的能力,加强数据库知识的实践技能,初步培养开发实用数据库系统的能力。
二、设计内容与要求
设计一个银行账户管理系统,至少能够实现存款、取款、查询、转账等基本功能,要求在在数据库实现过程中至少建立三张表、不得少于四个查询、三个触发器、使用至少一个存储过程。
三、设计原理
SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询。
SQL是一个通用的、功能极强的关系数据库语言。
它之所以能够为用户和业界所接受,并成为国际标准,是因为它是一个综合的、功能极强同时又简捷易学的语言。
SQL语言集数据查询(DataQuery)、数据操纵(DataManipulation)、数据定义(DataDefinition)和数据控制(DataControl)功能于一体。
1、数据库基本操作:
Ⅰ、定义基本表
语句格式:
CREATETABLE<表名>
(<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]]…
[,<表级完整性约束条件>]);
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
Ⅱ、修改基本表
语句格式:
[ADD<新列名><数据类型>[完整性约束]]
[DROP<完整性约束名>]
[ALTERCOLUMN<列名><数据类型>];
III、删除基本表
语句格式:
DROPTABLE<表名>[RESTRICT|CASCADE];
RESTRICT:删除表是有限制的。
欲删除的基本表不能被其他表的约束所引用,如果存在依赖该表的对象,则此表不能被删除。
CASCADE:删除该表没有限制。
在删除基本表的同时,相关的依赖对象一起删除。
IV、数据查询
语句格式:
SELECT[ALL|DISTINCT]<目标列表达式>
[,<目标列表达式>]…
FROM<表名或视图名>[,<表名或视图名>]…
[WHERE<条件表达式>]
[GROUPBY<列名1>[HAVING<条件表达式>]]
[ORDERBY<列名2>[ASC|DESC]];
V、插入元组
语句格式:
INSERT
INTO<表名>[(<属性列1>[,<属性列2>…)]
VALUES(<常量1>[,<常量2>]…)
功能:将新元组插入指定表中。
VI、修改数据
语句格式:
UPDATE<表名>
SET<列名>=<表达式>[,<列名>=<表达式>]…
[WHERE<条件>];
功能:修改指定表中满足WHERE子句条件的元组。
VII、删除数据
语句格式:
DELETE
FROM<表名>
[WHERE<条件>];
功能:删除指定表中满足WHERE子句条件的元组。
WHERE子句:指定要删除的元组。
缺省表示要删除表中的全部元组,表的定义仍在字典中。
2、数据库完整性
I、实体完整性定义
单属性构成的码有两种说明方法:定义为列级约束条件;定义为表级约束条件。
对多个属性构成的码只有一种说明方法:定义为表级约束条件。
插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。
包括:
①.检查主码值是否唯一,如果不唯一则拒绝插入或修改。
②.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
II、参照完整性定义
在CREATETABLE中用FOREIGNKEY短语定义哪些列为外码,用REFERENCES短语指明这些外码参照哪些表的主码。
参照完整性违约处理:
①.拒绝(NOACTION)执行----默认策略
②.级联(CASCADE)操作
③.设置为空值(SET-NULL)
对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值。
3、触发器
触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程,由服务器自动激活,可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力。
I、定义触发器
语法格式:
CREATETRIGGER<触发器名>
{BEFORE|AFTER}<触发事件>ON<表名>
FOREACH{ROW|STATEMENT}
[WHEN<触发条件>]
<触发动作体>
II、激活触发器
触发器的执行,是由触发事件激活的,并由数据库服务器自动执行,一个数据表上可能定义了多个触发器。
同一个表上的多个触发器激活时遵循如下的执行顺序:
①.执行该表上的BEFORE触发器;
②.激活触发器的SQL语句;
③.执行该表上的AFTER触发器。
III、删除触发器
语法格式:
DROPTRIGGER<触发器名>ON<表名>;
触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。
4、存储过程
I、PL/SQL的块结构
①.定义部分
DECLARE
------变量、常量、游标、异常等
定义的变量、常量等只能在该基本块中使用,当基本块执行结束时,定义就不再存在。
②.执行部分
BEGIN
------SQL语句、PL/SQL的流程控制语句
EXCEPTION
------异常处理部分
END;
II、变量常量的定义
①.PL/SQL中定义变量的语法形式是::
变量名数据类型[[NOTNULL]:=初值表达式]或
变量名数据类型[[NOTNULL]初值表达式]
②.常量的定义类似于变量的定义::
常量名数据类型CONSTANT:=常量表达式
常量必须要给一个值,并且该值在存在期间或常量的作用域内不能改变。
如果试图修改它,PL/SQL将返回一个异常。