收藏 分销(赏)

数据库课程设计实验报告-银行账户管理系统(常用版).doc

上传人:二*** 文档编号:4557700 上传时间:2024-09-29 格式:DOC 页数:148 大小:2.87MB
下载 相关 举报
数据库课程设计实验报告-银行账户管理系统(常用版).doc_第1页
第1页 / 共148页
亲,该文档总共148页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、数据库课程设计实验报告-银行账户管理系统(常用版)(可以直接使用,可编辑 完整版资料,欢迎下载)数据库课程设计报告题 目: 银行账户管理系统院系名称: 计算机学院 专业名称: 软件工程班 级:09级01班 学生姓名:*学号(8位):*指导教师:*设计起止时间:2021年12月19日2021年12月30日一. 设计目的银行账户管理是银行业务流程中十分重要的且必备的环节,由于银行有大量数据需要处理,全部采用人工方式明显不现实:这不仅需要花费很高的成本,而且处理事务的效率和质量都存在很大的问题,出于这些问题的考虑,使用计算机来处理这类问题就成为一个相当理想的方案。利用计算机可以极大地降低成本,更重要

2、的是可以几乎没有错误地高效地处理所有的事务,所以做一款基于银行账户管理方面的系统是十分必要的。本次课程设计通过对银行账户管理系统中银行业务流程的基本实现以及用户环节的事务处理,旨在体验数据库设计和实现的基本过程中掌握数据库模式的设计、分析和实现方法,了解数据库应用系统软件开发的一般过程。二. 设计内容分别完成银行业务功能、ATM功能和用户管理功能,并设计数据库以支持这些功能的实现,最后通过代码进行具体实现以及数据库链接。所用数据库:SQL Server 2021开发语言:Java数据库设计:使用了六张表,分别为:管理员表(admin)、ATM机表(ATM)、ATM机出纳表(ATMOutIn)、

3、银行柜台出纳表(BankOutIn)、银行卡表(card)、用户表(users)。三个触发器,分别为:冻结用户账号操作(userstatus_update)、ATM机存取款操作(ATMOutIn_insert)和银行存取款操作(BankOutIn_insert)。一个视图、一个虚表:用户操作查询(allInfo(userId,cunquTime,cunquAddress,cunquMoney,cunquSummary,balanceMoney))。银行业务功能:设置管理员账号,赋予管理员权限以实现开户、销户、存款、取款、查询、办卡和挂失功能。ATM功能:ATM机连接系统数据库,实现用户登录、存

4、(取)款以及用户查询功能。用户管理:通过登录功能获得系统数据库中自己的用户信息,并有权限修改系统允许用户修改的信息。三概要设计1功能模块图;2各个模块详细的功能描述。银行业务功能: 管理员登录在数据库中添加管理员数据,管理员可登录系统并有权限完成与 用户相关所有操作。 开户收集用户信息,为用户分配账号并通过程序在系统数据库中添加用户信息。 销户根据账号在数据库中查找用户,确认用户身份信息后,管理员通过程序删除数据库中用户信息。 存款根据卡号在数据库中查找用户,依据存入金额,管理员通过程序修改数据库中用户的金额信息。 取款根据卡号在数据库中查找用户,通过密码确认用户,依据取出金额,经判断取出金额

5、合法后(不大于余额),管理员通过程序修改数据库中用户的金额信息。 查询以用户卡号、账号或身份证号之一为关键字,在数据库中查找用户,依据业务需求显示用户信息(开户人信息、用户近期操作记录)。 办卡为用户账号绑定卡号,由管理员通过程序将卡号以及用户设置的密码存入系统数据库相应用户信息中。 挂失根据账号在数据库中查找用户,用户提供登录密码确认用户身份信息后,管理员通过程序将数据库中用户卡状态信息由“使用”改为“冻结”。ATM功能: 登录ATM机依据用户卡号和密码在系统数据库中查询用户信息,在信息匹配的情况下进入用户操作界面。 存款ATM机依据用户存入金额,通过程序修改数据库中用户的金额信息。 取款A

6、TM机依据取出金额, 通过对比本机余额和数据库中用户余额,若金额合法则通过程序修改数据库中用户的金额信息,否则弹出错误信息。用户管理: 登录依据用户账号和密码由管理员或ATM机在系统数据库中查询用户信息,在信息匹配的情况下用户获得用户管理权限。 查询个人信息打印数据库中记录的用户个人信息。 修改个人信息收集用户新信息,由管理员操作,修改数据库中用户拥有修改权限的相应数据。 查询近期操作依据用户提供所要查询时间范围,由管理员或ATM机通过程序查询系统数据库中用户的操作记录。四详细设计1功能函数的调用关系图public static void mian(String args)AdminLogin

7、JFrame() AdminDao管理员登录界面 ChaxunKaInfo(String userId) KaMimaXiuGai(String cardId)UserLoginJFrame()MainFrame()用户登录界面 KaCaoZuo(String times,String cardId)主界面 ChaXunCaoZuo(Users user) UserGuanLi(String ATMId,String cardId) ATMLoginJFrame()actionPerformed(ActionEvent e)ATM机登录界面UserChaXun(String cardId) 用

8、户类 卡查询操作卡密修改操作卡操作记录 查询近期 操作用户管理登录方法用户信息查询2重点设计及编码数据库设计:create database accountuse accountcreate table users(userId varchar(10) not null, /*用户账号,主键*/userName varchar(10) not null, /*用户名*/userPassword varchar(10) not null, /*密码*/idNo varchar(20) not null, /*身份证号码,唯一*/userMoney numeric(10,2) default 0,

9、 /*总金额,不能小于零*/userStatus varchar(4) check (userStatus=使用 or userStatus=冻结) default 使用, /*用户状态(使用,冻结),默认是使用中*/userAddress varchar(30) not null, /*用户地址*/startTime DateTime, /*开户时间,应该是开户时的系统时间,不应该人为输入*/primary key(userId), /*设置主键*/)-用户的状态一旦变成冻结状态,那么卡也应该不能使用create trigger userstatus_updateon usersafter

10、updateasif update(userStatus)begin if (select userStatus from inserted) = 冻结update card set cardStatus = 冻结 where userId = (select userId from deleted)if (select userStatus from inserted) = 使用update card set cardStatus = 使用 where userId = (select userId from deleted) end create table card(cardId var

11、char(20) primary key, /*卡号,主键*/userId varchar(10) not null, /*用户账号,外键,参照users表的userId*/cardPassword varchar(10) not null, /*卡密码*/cardStatus varchar(5) check (cardStatus in (使用,冻结,挂失) default 使用, /*卡状态(使用,冻结,挂失),默认是使用*/-cardMoney numeric(10,2) check(cardMoney =0),foreign key (userId) references users

12、(userId)on delete cascade /*当删除用户帐号时,他的卡号会及联删除*/)-管理员表create table admin(adminId varchar(10) not null primary key, /*操作员号码,主键*/adminName varchar(10) not null, /*操作员名字*/adminPassword varchar(20) not null, /*操作员密码*/BankAddress varchar(20) not null /*操作员所在银行地址*/) insert into admin values(001,沈万三,123,工商

13、银行长安分行)-创建一个ATM表,至少应该含有编号以及ATM机里的总金额create table ATM(ATMId varchar(10) primary key, /*ATM机ID*/ ATMMoney numeric(20,2) check (ATMMoney =0), /*ATM机里的总钱数,不允许用户的取款数大于它的总钱数,所以它的总钱数不能小于*/ ATMAddress varchar(20) /*ATM机的地点*/)insert into ATM values(000, 10000, 长安区)insert into ATM values(111, 50000, 长安区)-用户AT

14、M机存取款信息表create table ATMOutIn (ATMId varchar(10), /*取款机号,外键,参照ATM表的ATMId*/cardId varchar(20) not null, /*用户卡号,外键,参照card表的cardId*/ATMTime DateTime, /*在ATM机存取款时间(应该是进行存取款时的系统时间*/ATMCunQu numeric(10,2), /*ATM机存款金额*/ATMSummary varchar(30), /*存取款摘要*/balanceMoney numeric(10,2) default 0, /*经过操作后账号中的金额*/fo

15、reign key(ATMId) references ATM(ATMId) on delete cascade,foreign key(cardId) references card(cardId) on delete cascade)-创建一个触发器,当产生这一信息时,账号上的钱也会随之改动create trigger ATMOutIn_inserton ATMOutIn after insertas declare num_rows int select num_rows = rowcountif num_rows = 0 /*未插入成功*/ return if num_rows0 /*

16、数据插入成功*/ begin update users set userMoney = userMoney + (select ATMCunQu from Inserted) where userId in (select userId from card c,inserted i where c.cardId = i.cardId) update ATM set ATMMoney = ATMMoney + (select ATMCunQu from Inserted) where ATMId in (select ATMId from inserted) /*对应的atm机的总金额也会随之改

17、变*/ declare balanceMoney numeric(10,2) /*账号余额*/ select balanceMoney = (select userMoney from users where userId in (select userId from card c,inserted i where c.cardId = i.cardId) update ATMOutIn set balanceMoney = (balanceMoney) where cardId in (select cardId from inserted) and atmtime in (select a

18、tmtime from inserted) /*完成了账号金额的修改,再将新的金额插入到信息表中,就是剩余的总余额了(注意修改的只是一个账号此次的操作*/end-用户银行存取款信息信息表create table BankOutIn (adminId varchar(10) not null, /*操作员号码,外键,参照操作员表的adminId*/cardId varchar(20) not null, /*用户卡号,外键,参照用户信息表*/BankTime DateTime, /*银行存款时间*/BankCunQu numeric(10,2), /*银行存款*/BankSummary varc

19、har(30),balanceMoney numeric(10,2) default 0, /*经过操作后账号中的金额*/foreign key (adminId) references admin(adminId) on delete cascade,foreign key (cardId) references card(cardId) on delete cascade)-创建一个触发器,当插入这条数据时会自动修改users表里的金额信息create trigger BankOutIn_inserton BankOutIn for insertas declare num_rows in

20、t select num_rows = rowcountif num_rows = 0 /*未插入成功*/ return if num_rows0 /*数据插入成功*/ begin update users set userMoney = userMoney + (select BankCunQu from Inserted) where users.userId = (select userId from card c,inserted i where c.cardId = i.cardId) declare balanceMoney numeric(10,2) select balance

21、Money = (select userMoney from users where userId = (select userId from card c,inserted i where c.cardId = i.cardId ) update BankOutIn set balanceMoney = (balanceMoney) where cardId = (select cardId from inserted) and banktime = (select banktime from inserted) /*完成了账号金额的修改,再将新的金额插入到信息表中,就是剩余的总余额了(要注

22、意这个信息总额的唯一性)*/ end-总信息可以用其它的表推出,建一个视图,一个虚表,来综合他们的信息create view allInfo(userId,cunquTime,cunquAddress,cunquMoney,cunquSummary,balanceMoney)asselect userId,bankTime,BankAddress,bankCunqu,bankSummary,balanceMoneyfrom bankoutin b,admin a,card cwhere b.adminId = a.adminId and c.cardId = b.cardIdunionsele

23、ct userId,ATMTime, ATMAddress,ATMCunqu,ATMSummary,balanceMoneyfrom atmoutin a,card c,ATM atmwhere c.cardId = a.cardId and a.atmid = atm.atmid 数据库链接:package com.connection;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.

24、sql.SQLException;/* * 定义一个数据库的连接及关闭资源的类 * author Administrator * */public class DBConnection /* * 创建数据库的链接 * return 返回一个数据库的链接 */public static Connection getConnection()Connection conn = null;try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); /加载数据库驱动String url = st:1433;databaseName=a

25、ccount; String username = sa; /数据库用户名String password = 1126; /数据库密码conn = DriverManager.getConnection(url,username,password); /获得数据库的链接 catch (ClassNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();r

26、eturn conn;/* * 关闭数据库资源 * param obj 数据库打开的资源对象(在此处用Object,因为链接数据库是会打开多个资源) */public static void closeObject(Object obj)if(obj != null)if(obj instanceof ResultSet)try (ResultSet) obj).close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();if(obj instanceof PreparedStatem

27、ent)try (PreparedStatement) obj).close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();-if(obj instanceof Connection)try (Connection) obj).close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();程序入口函数:package com.main;import com.frame.Main

28、Frame;public class Begin /* * param args */public static void main(String args) / TODO Auto-generated method stubnew MainFrame();五测试数据及运行结果1正常测试数据和运行结果管理员登录:登录名:沈万三 登录密码:123管理员操作:1. 查询用户信息2. 开户ATM机操作1. 登录2. 查询2异常测试数据及运行结果1.查询失败 3. ATM机存款失败六调试情况,设计技巧及体会1改进方案本系统基本实现了银行账户管理的基本功能,不过在细节方面处理的不够完善,细化功能也做的不

29、够好,此外,交互界面美工基本没做。对于此,在接下来的时间里我将对系统不断完善,尽力做到尽善尽美。2体会在课程设计的两周中,我在数据库设计以及代码编写方面都遇到了不少问题,所幸在同学们的帮助下以及借助网络查找相应问题,总算按时完成了课程设计关于上机的任务。在此过程中我通过数据库设计和实现的基本过程中掌握数据库模式的设计、分析和实现方法,了解数据库应用系统软件开发的一般过程,获益匪浅。七参考文献数据库系统原理与应用 孟彩霞、乔平安、张荣 编著八附录:数据库设计:create database accountuse accountcreate table users(userId varchar(1

30、0) not null, /*用户账号,主键*/userName varchar(10) not null, /*用户名*/userPassword varchar(10) not null, /*密码*/idNo varchar(20) not null, /*身份证号码,唯一*/userMoney numeric(10,2) default 0, /*总金额,不能小于零*/userStatus varchar(4) check (userStatus=使用 or userStatus=冻结) default 使用, /*用户状态(使用,冻结),默认是使用中*/userAddress var

31、char(30) not null, /*用户地址*/startTime DateTime, /*开户时间,应该是开户时的系统时间,不应该人为输入*/primary key(userId), /*设置主键*/)-用户的状态一旦变成冻结状态,那么卡也应该不能使用create trigger userstatus_updateon usersafter updateasif update(userStatus)begin if (select userStatus from inserted) = 冻结update card set cardStatus = 冻结 where userId = (

32、select userId from deleted)if (select userStatus from inserted) = 使用update card set cardStatus = 使用 where userId = (select userId from deleted) end create table card(cardId varchar(20) primary key, /*卡号,主键*/userId varchar(10) not null, /*用户账号,外键,参照users表的userId*/cardPassword varchar(10) not null, /*

33、卡密码*/cardStatus varchar(5) check (cardStatus in (使用,冻结,挂失) default 使用, /*卡状态(使用,冻结,挂失),默认是使用*/-cardMoney numeric(10,2) check(cardMoney =0),foreign key (userId) references users(userId)on delete cascade /*当删除用户帐号时,他的卡号会及联删除*/)-管理员表create table admin(adminId varchar(10) not null primary key, /*操作员号码,主

34、键*/adminName varchar(10) not null, /*操作员名字*/adminPassword varchar(20) not null, /*操作员密码*/BankAddress varchar(20) not null /*操作员所在银行地址*/) insert into admin values(001,沈万三,123,工商银行长安分行)-创建一个ATM表,至少应该含有编号以及ATM机里的总金额create table ATM(ATMId varchar(10) primary key, /*ATM机ID*/ ATMMoney numeric(20,2) check

35、(ATMMoney =0), /*ATM机里的总钱数,不允许用户的取款数大于它的总钱数,所以它的总钱数不能小于*/ ATMAddress varchar(20) /*ATM机的地点*/)insert into ATM values(000, 10000, 长安区)insert into ATM values(111, 50000, 长安区)-用户ATM机存取款信息表create table ATMOutIn (ATMId varchar(10), /*取款机号,外键,参照ATM表的ATMId*/cardId varchar(20) not null, /*用户卡号,外键,参照card表的car

36、dId*/ATMTime DateTime, /*在ATM机存取款时间(应该是进行存取款时的系统时间*/ATMCunQu numeric(10,2), /*ATM机存款金额*/ATMSummary varchar(30), /*存取款摘要*/balanceMoney numeric(10,2) default 0, /*经过操作后账号中的金额*/foreign key(ATMId) references ATM(ATMId) on delete cascade,foreign key(cardId) references card(cardId) on delete cascade)-创建一个

37、触发器,当产生这一信息时,账号上的钱也会随之改动create trigger ATMOutIn_inserton ATMOutIn after insertas declare num_rows int select num_rows = rowcountif num_rows = 0 /*未插入成功*/ return if num_rows0 /*数据插入成功*/ begin update users set userMoney = userMoney + (select ATMCunQu from Inserted) where userId in (select userId from

38、card c,inserted i where c.cardId = i.cardId) update ATM set ATMMoney = ATMMoney + (select ATMCunQu from Inserted) where ATMId in (select ATMId from inserted) /*对应的atm机的总金额也会随之改变*/ declare balanceMoney numeric(10,2) /*账号余额*/ select balanceMoney = (select userMoney from users where userId in (select u

39、serId from card c,inserted i where c.cardId = i.cardId) update ATMOutIn set balanceMoney = (balanceMoney) where cardId in (select cardId from inserted) and atmtime in (select atmtime from inserted) /*完成了账号金额的修改,再将新的金额插入到信息表中,就是剩余的总余额了(注意修改的只是一个账号此次的操作*/end-用户银行存取款信息信息表create table BankOutIn (adminId

40、 varchar(10) not null, /*操作员号码,外键,参照操作员表的adminId*/cardId varchar(20) not null, /*用户卡号,外键,参照用户信息表*/BankTime DateTime, /*银行存款时间*/BankCunQu numeric(10,2), /*银行存款*/BankSummary varchar(30),balanceMoney numeric(10,2) default 0, /*经过操作后账号中的金额*/foreign key (adminId) references admin(adminId) on delete casca

41、de,foreign key (cardId) references card(cardId) on delete cascade)-创建一个触发器,当插入这条数据时会自动修改users表里的金额信息create trigger BankOutIn_inserton BankOutIn for insertas declare num_rows int select num_rows = rowcountif num_rows = 0 /*未插入成功*/ return if num_rows0 /*数据插入成功*/ begin update users set userMoney = user

42、Money + (select BankCunQu from Inserted) where users.userId = (select userId from card c,inserted i where c.cardId = i.cardId) declare balanceMoney numeric(10,2) select balanceMoney = (select userMoney from users where userId = (select userId from card c,inserted i where c.cardId = i.cardId ) update BankOutIn set balanceMoney = (balanceMoney) where cardId = (select cardId from inserted) and b

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服