基于java银行ATM管理系统设计(含源文件)
歡迎添加微信互相交流學習哦!
項目源碼:https://gitee.com/oklongmm/biye
題 ?目: ? 銀行ATM管理系統
一.?? ?設計目的
銀行ATM管理是銀行業務流程中十分重要的且必備的環節,由于銀行有大量數據需要處理,全部采用人工方式明顯不現實:這不僅需要花費很高的成本,而且處理事務的效率和質量都存在很大的問題,出于這些問題的考慮,使用計算機來處理這類問題就成為一個相當理想的方案。利用計算機可以極大地降低成本,更重要的是可以幾乎沒有錯誤地高效地處理所有的事務,所以做一款基于銀行ATM管理方面的系統是十分必要的。
本次課程設計通過對《銀行ATM管理系統》中銀行業務流程的基本實現以及用戶環節的事務處理,旨在體驗數據庫設計和實現的基本過程中掌握數據庫模式的設計、分析和實現方法,了解數據庫應用系統軟件開發的一般過程。
二. 設計內容
?? ?分別完成銀行業務功能、ATM功能和用戶管理功能,并設計數據庫以支持這些功能的實現,最后通過代碼進行具體實現以及數據庫鏈接。
?? ?所用數據庫:SQL Server 2008
?? ?開發語言:Java
?? ?數據庫設計:使用了六張表,分別為:管理員表(admin)、ATM機表(ATM)、ATM機出納
表(ATMOutIn)、銀行柜臺出納表(BankOutIn)、銀行卡表(card)、用戶
表(users)。
三個觸發器,分別為:凍結用戶賬號操作(userstatus_update)、
ATM機存取款操作(ATMOutIn_insert)和
銀行存取款操作(BankOutIn_insert)。
一個視圖、一個虛表:用戶操作查詢
(allInfo(userId,cunquTime,cunquAddress,cunquMoney,cunq
uSummary,balanceMoney))。
銀行業務功能:設置管理員賬號,賦予管理員權限以實現開戶、銷戶、存款、取款、查詢、辦卡和掛失功能。
ATM功能:ATM機連接系統數據庫,實現用戶登錄、存(取)款以及用戶查詢功能。
用戶管理:通過登錄功能獲得系統數據庫中自己的用戶信息,并有權限修改系統允許用
戶修改的信息。
三.概要設計
1、數據庫設計
(1)ER圖
?
2.功能模塊圖;
?? ??
3.各個模塊詳細的功能描述。
?? ?銀行業務功能:
??? ?管理員登錄
在數據庫中添加管理員數據,管理員可登錄系統并有權限完成與 ? ? ? ? ? ? ? ? ? ? ? ? ? ? 用戶相關所有操作。
??? ?開戶
收集用戶信息,為用戶分配賬號并通過程序在系統數據庫中添加用戶信息。
??? ?銷戶
根據賬號在數據庫中查找用戶,確認用戶身份信息后,管理員通過程序刪除數據庫中用戶信息。
??? ?存款
根據卡號在數據庫中查找用戶,依據存入金額,管理員通過程序修改數據庫中用戶的金額信息。
??? ?取款
根據卡號在數據庫中查找用戶,通過密碼確認用戶,依據取出金額,經判斷取出金額合法后(不大于余額),管理員通過程序修改數據庫中用戶的金額信息。
??? ?查詢
以用戶卡號、賬號或身份證號之一為關鍵字,在數據庫中查找用戶,依據業務需求顯示用戶信息(開戶人信息、用戶近期操作記錄)。
??? ?辦卡
為用戶賬號綁定卡號,由管理員通過程序將卡號以及用戶設置的密碼存入系統數據庫相應用戶信息中。
??? ?掛失
根據賬號在數據庫中查找用戶,用戶提供登錄密碼確認用戶身份信息后,管理員通過程序將數據庫中用戶卡狀態信息由“使用”改為“凍結”。
?? ?ATM功能:
??? ?登錄
ATM機依據用戶卡號和密碼在系統數據庫中查詢用戶信息,在信息匹配的情況下進入用戶操作界面。
??? ?存款
ATM機依據用戶存入金額,通過程序修改數據庫中用戶的金額信息。
??? ?取款
ATM機依據取出金額, 通過對比本機余額和數據庫中用戶余額,若金額合法則通過程序修改數據庫中用戶的金額信息,否則彈出錯誤信息。
?? ?用戶管理:
??? ?登錄
依據用戶賬號和密碼由管理員或ATM機在系統數據庫中查詢用戶信息,在信息匹配的情況下用戶獲得用戶管理權限。
??? ?查詢個人信息
打印數據庫中記錄的用戶個人信息。
??? ?修改個人信息
收集用戶新信息,由管理員操作,修改數據庫中用戶擁有修改權限的相應數據。
??? ?查詢近期操作
依據用戶提供所要查詢時間范圍,由管理員或ATM機通過程序查詢系統數據庫中用戶的操作記錄。
四.詳細設計
1.功能函數的調用關系圖
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?? ?
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
?? ?用戶類
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ? ??
?? ?卡查詢
?? ??? ?操作
?? ?卡密修改
?? ??? ?操作
?? ?卡操作記?? ?錄
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ? ? 查詢近期?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ? ? ? ? 操作?? ?
?? ?用戶管理
?? ?登錄方法
?? ?用戶信息
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?查詢
2.重點設計及編碼
數據庫設計:
create database account
use account?? ?
create 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, ?/*總金額,不能小于零*/
userStatus varchar(4) check (userStatus='使用' or userStatus='凍結') default '使用', ? ? ? ? ? ? /*用戶狀態(使用,凍結),默認是使用中*/
userAddress varchar(30) not null, ?/*用戶地址*/
startTime DateTime, ? /*開戶時間,應該是開戶時的系統時間,不應該人為輸入*/
primary key(userId), ? ? /*設置主鍵*/
)
--用戶的狀態一旦變成凍結狀態,那么卡也應該不能使用
create trigger userstatus_update
on users
after update
as
if 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 varchar(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(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','工商銀行長安分行')
--創建一個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, '長安區')
--用戶ATM機存取款信息表
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, ?/*經過操作后賬號中的金額*/
foreign key(ATMId) references ATM(ATMId) on delete cascade,
foreign key(cardId) references card(cardId) on delete cascade
)
--創建一個觸發器,當產生這一信息時,賬號上的錢也會隨之改動
create trigger ATMOutIn_insert
on ATMOutIn?
after insert
as?
? declare @num_rows int?
? select @num_rows = @@rowcount
if @num_rows = 0 ?/*未插入成功*/
? ?return?
if @num_rows>0 ? /*數據插入成功*/
? ?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機的總金額也會隨之改變*/
? ?
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 atmtime from inserted) ? /*完成了賬號金額的修改,再將新的金額插入到信息表中,就是剩余的總余額了(注意修改的只是一個賬號此次的操作*/
end
--用戶銀行存取款信息信息表
create table BankOutIn ?
(
adminId 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 cascade,
foreign key (cardId) references card(cardId) on delete cascade
)
--創建一個觸發器,當插入這條數據時會自動修改users表里的金額信息
create trigger BankOutIn_insert
on BankOutIn?
for insert
as?
? declare @num_rows int
? select @num_rows = @@rowcount
if @num_rows = 0 ?/*未插入成功*/
? ?return?
if @num_rows>0 ? /*數據插入成功*/
? ?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 @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 banktime = (select banktime from inserted) ? /*完成了賬號金額的修改,再將新的金額插入到信息表中,就是剩余的總余額了(要注意這個信息總額的唯一性)*/
? ?
? ?end
--總信息可以用其它的表推出,建一個視圖,一個虛表,來綜合他們的信息
create view allInfo(userId,cunquTime,cunquAddress,cunquMoney,cunquSummary,balanceMoney)
as
select userId,bankTime,BankAddress,bankCunqu,bankSummary,balanceMoney
from bankoutin b,admin a,card c
where b.adminId = a.adminId and c.cardId = b.cardId
union
select userId,ATMTime, ATMAddress,ATMCunqu,ATMSummary,balanceMoney
from atmoutin a,card c,ATM atm
where 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.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 = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=account";?
?? ??? ??? ?String username = "sa"; ? //數據庫用戶名
?? ??? ??? ?String password = "1126"; ?//數據庫密碼
?? ??? ??? ?
?? ??? ??? ?conn = DriverManager.getConnection(url,username,password); ? //獲得數據庫的鏈接
? ? ? ? ? ??
?? ??? ?} catch (ClassNotFoundException e) {
?? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ?e.printStackTrace();
?? ??? ?} ?catch (SQLException e) {
?? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?return 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 block
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ?
?? ??? ??? ?if(obj instanceof PreparedStatement){
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?((PreparedStatement) obj).close();
?? ??? ??? ??? ?} catch (SQLException e) {
?? ??? ??? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ?}
-
?? ??? ??? ?if(obj instanceof Connection){
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?((Connection) obj).close();
?? ??? ??? ??? ?} catch (SQLException e) {
?? ??? ??? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
}
程序入口函數:
package com.main;
import com.frame.MainFrame;
public class Begin {
?? ?/**
?? ? * @param args
?? ? */
?? ?public static void main(String[] args) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?new MainFrame();
?? ?}
}
五.測試數據及運行結果
1.正常測試數據和運行結果
管理員登錄:
登錄名:沈萬三 ? 登錄密碼:123
?
?
?? ?管理員操作:
1.?? ?查詢用戶信息
?
2.?? ?開戶
?
ATM機操作
1.?? ?登錄
?
2.?? ?查詢
?
2.異常測試數據及運行結果
?? ?1.查詢失敗
?? ??? ? ?
3.?? ?ATM機存款失敗
?
六.調試情況,設計技巧及體會
1.改進方案
?? ?本系統基本實現了銀行ATM管理的基本功能,不過在細節方面處理的不夠完善,細化功能也做的不夠好,此外,交互界面美工基本沒做。對于此,在接下來的時間里我將對系統不斷完善,盡力做到盡善盡美。
2.體會
?? ?在課程設計的兩周中,我在數據庫設計以及代碼編寫方面都遇到了不少問題,所幸在同學們的幫助下以及借助網絡查找相應問題,總算按時完成了課程設計關于上機的任務。
?? ?在此過程中我通過數據庫設計和實現的基本過程中掌握數據庫模式的設計、分析和實現方法,了解數據庫應用系統軟件開發的一般過程,獲益匪淺。
七.參考文獻
?? ?《數據庫系統原理與應用》 ——孟彩霞、喬平安、張榮 編著
八.附錄:
?? ?源碼見電子版
?
總結
以上是生活随笔為你收集整理的基于java银行ATM管理系统设计(含源文件)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python虚拟环境和pyenv_Pyt
- 下一篇: Echarts笔记-折线图定制(Y轴百分