基于java的银行ATM系统设计(含源文件)
歡迎添加微信互相交流學習哦!
項目源碼:https://gitee.com/oklongmm/biye
目 錄
1 系統分析?? ?1
1.1 設計背景?? ?1
1.2 需求分析?? ?1
1.2.1 功能需求分析?? ?1
1.2.2 其他需求分析?? ?1
1.3 功能結構圖?? ?2
1.4 功能模塊描述?? ?2
2 系統設計?? ?3
2.1 對包的描述?? ?3
2.2 對類的描述?? ?3
2.2.1 class UserLogin登陸界面?? ?3
2.2.2 class MainView選擇服務界面?? ?4
2.2.3 class DrawMoney取款界面?? ?4
2.2.4 class SaveMoney存款界面?? ?4
2.2.5 class SearchMoney查詢界面?? ?5
2.2.6 class UserLoginMode登陸?? ?5
2.2.7 class DrawMoneyMode取款?? ?5
2.2.8 class DrawMoneyMode存款?? ?5
2.2.9 class SearchMoneyMode查詢?? ?5
2.2.10 class SqlHelper數據表示層?? ?6
2.3 接口?? ?6
2.4 數據庫連接?? ?6
2.5 減少代碼冗余?? ?6
2.6 UML圖?? ?7
3 系統實現?? ?8
3.1 登陸頁面模塊?? ?8
3.2 選擇服務模塊?? ?8
3.3 取款模塊?? ?9
3.4 存款模塊?? ?9
3.5 查詢模塊?? ?10
4 系統測試?? ?11
4.1 登陸頁面模塊測試?? ?11
4.2選擇服務模塊測試?? ?11
4.3 取款模塊測試?? ?12
4.4 存款模塊效果測試?? ?14
4.5查詢模塊測試?? ?15
5 總結?? ?16
?
1 系統分析
1.1 設計背景
? ? ATM自動柜員機(automatic teller machine)是銀行在不同地點設置的一種小型機器,利用一張信用卡大小的膠卡上的磁帶〔或芯片卡上的芯片〕記錄客戶的基本戶口資料(通常就是銀行卡,或稱金融卡,或稱提款卡),讓客戶可以透過機器進行提款、存款、轉帳等銀行柜臺服務,大多數客戶都把這種自助機器稱為提款機。中國大陸在1980年代末期才開始在深圳出現提款機,現在擴展至全國。并且多數柜員機都已加入銀聯網絡,只要是有銀聯標志的銀行卡都可以通用,但收費與否則和發卡行的規定有關。沒有銀聯標志的卡只能在本行網絡的柜員機上使用。目前,國內已有大量自動柜員機,遍布于銀行營業大廳、超市、商業機構、機場、車站、碼頭和鬧市區。?
? ? 因為ATM技術的高安全性和高速度,所以在我國的發展十分迅速,尤其在銀行領域。我國寬帶網已初具規模,已建立成完整的電子商務安全認證體系。幾乎所有的銀行都是采用ATM技術,主要用于各地區之間交換數據和ATM終端。
該課程設計目標是實現一個ATM機系統,客戶通過該系統可以實現一些基本的功能,包括自動取款存款功能,賬戶信息查詢等功能。
1.2 需求分析
1.2.1 功能需求分析
本ATM機系統的主要功能,當用戶輸入給定的卡號和密碼時,驗證成功后,系統能登陸到ATM機系統,用戶可以實現取款(每次取款金額為100的倍數,總額不超過10000元,支取金額不允許透支),存款(不能出現負存款)以及查詢賬戶信息的功能。
1.2.2 其他需求分析
? ?(1)性能描述
實施性好,靈活性強,易于不同年齡段的人操作。
? ?(2)設計約束
開發工具:Myeclipse10.0
運行環境:win7
? ?(3)界面要求
? ? 以Windows窗口結合用photoshop制作的圖片的形式顯示,每個窗口的標題欄都要有自己對應的標題名稱,以及不同的按鈕和選擇菜單。
1.3 功能結構圖
? ? ? ? ? ? ? ? ? ? ? ? ? 圖1-1 系統功能結構圖
?
1.4 功能模塊描述
? ? 如圖1-1所示,具體描述如下:
? ? (1) 登陸頁面模塊,對用戶進行身份驗證。
(2) 選擇服務模塊,包括取款,存款,余額查詢,退卡。
(3) 取款模塊,實現取款的具體操作。
(4) 存款模塊,實現存款的具體操作。
(5) 查詢模塊,查看當前登陸人員的余額。
(6) 退卡模塊,完成需要的功能后,退出系統,返回到登陸界面
?
2 系統設計
2.1 對包的描述
? ? com.atm_dao數據表示層,在該包下封裝了一個名字為SqlHelper的類,包括連接數據庫以及對數據庫表的的crud(增加,刪除,修改和查詢)操作。
com.atm_model業務邏輯層,用于判斷表示層傳來的用戶數據是否存在,如果存在返回真,不存在返回假,并將操作記錄下來。例如,程序中,登陸驗證時,如果輸入的用戶名和密碼與銀行數據庫中的賬號和密碼一致時,類名為UserLoginModel就會返回true,用戶可以進入到選擇服務模塊,用戶名與密碼不一致時,就返回false,提示用戶重新輸入。
com.atm_view界面層,用于顯示各種功能界面,包括登陸界面,選擇服務界面,查詢余額界面,取款界面和存款界面。
2.2 對類的描述
2.2.1 class UserLogin登陸界面
成員變量:
JLabel jl_1,jl_2 JTextField jtf1 JPasswordField jpf1 JButton jb1, jb2 ?ArrayList<String> al, temp ? UserLoginModel ulm?
成員方法:
public void createComponent(){}創建組件的方法。
public UserLogin(){}構造方法,初始化成員變量,并設置面板布局,顯示。
public void actionPerformed(ActionEvent e){} 對事件的處理方法,包括對登陸按鈕盒取消按鈕的處理,對登陸按鈕的處理方法,當賬號和密碼驗證成功后,需要創建一個選擇服務面板,這時需要把當前的賬號傳過去。點擊取消按鈕,退出系統。
2.2.2 class MainView選擇服務界面
?成員變量:
JButton jb1, jb2, jb3, jb4;
JPanel jp1;
String accountId;
成員方法:
public void createComponent(){}創建組件的方法。
public MainView(String accountId){}帶參數的構造方法,用于接收登陸界面中傳過來的有效的賬號,然后設置布局,顯示。
? ?public void actionPerformed(ActionEvent e){}對事件的處理方法,包括對取款、存款、查詢以及退卡按鈕的處理,對取款按鈕的處理方法,點擊取款按鈕時,就會創建取款面板,并把當前的賬號傳過去。其他按鈕的處理方法類似于取款按鈕,這里不再一一敘述。
2.2.3 class DrawMoney取款界面
?成員變量:
JLabel jl ?
JTextField jtf ?
JButton jb1, jb2 ?
String accountId
成員方法:
public void createComponent(){}創建組件的方法。
public DrawMoney(String accountId){}帶參數的構造方法,用于接收登陸界面中傳過來的有效的賬號,然后設置布局,顯示。
public void actionPerformed(ActionEvent e){}對事件的處理方法,當輸入的取款金額不合法時,系統會彈出一個警告窗口,提示重新輸入,輸入的金額有效時,需要創建一個DrawMoneyModel類,需要把當前的賬號傳過去,然后對賬戶的金額進行相應的處理。
2.2.4 class SaveMoney存款界面
成員變量:
JLabel jl ?
JTextField jtf ?
JButton jb1, jb2 ?
String accountId
成員方法:
public void createComponent(){}創建組件的方法。
public SaveMoney(String accountId){}帶參數的構造方法,用于接收登陸界面中傳過來的有效的賬號,然后設置布局,顯示。
public void actionPerformed(ActionEvent e){}對事件的處理方法,當輸入的存款金額不合法時,系統會彈出一個警告窗口,提示重新輸入,輸入的金額有效時,需要創建一個SaveMoneyModel類,需要把當前的賬號傳過去,然后對賬戶的金額進行相應的處理。
2.2.5 class SearchMoney查詢界面
成員變量:
JLabel jl;?
JTextField jtf;
JButton jb2;?
String accountId;?
SearchMoneyModel smm;
成員方法:
? ? public void createComponent(){}創建組件的方法,包括創建SearchMoneyMode對象,將當前的賬號傳入,得到當前賬戶的余額。其他組件的創建不在一一詳述。
public SearchMoney(String accountId){}帶參數的構造方法,用于接收登陸界面中傳過來的有效的賬號,然后設置布局,顯示。
public void actionPerformed(ActionEvent e){}對事件的處理方法,對取消按鈕的響應,點擊取消時,返回到登陸界面。
2.2.6 class UserLoginModel登陸
成員變量:
ArrayList<String> al ;?
SqlHelper sh;?
ResultSet rs;
成員方法:
public ArrayList<String> check(String userAccountId, String passWord){}用于返回賬號和密碼。
2.2.7 class DrawMoneyModel取款
成員變量:
SqlHelper sh;
? ? 成員方法:
public DrawMoneyModel(String drawMoney, String accountId){}根據取款的金額更新賬戶的余額。
2.2.8 class SaveMoneyModel存款
成員變量:
SqlHelper sh;
? ? 成員方法:
成員方法:
public SaveMoneyModel(){}根據存款的金額更新賬戶的余額。
2.2.9 class SearchMoneyModel查詢
成員變量:
? ? SqlHelper sh;
ResultSet rs;
成員方法:
public double returnYuE(String accountId){}用于返當前賬戶的余額。
2.2.10 class SqlHelper數據表示層
?成員變量:
?Connection con;
?PreparedStatement ps;
? ? ResultSet rs ;
成員方法:
public SqlHelper(){}連接數據庫。
public ResultSet queryEx(String sql, String[] paras){}實現查詢。
public boolean updateEx(String sql, String[] paras){}實現增加、刪除和修改。
2.3 接口
在com.atm_view創建了一個名為CreateCompent接口,在該接口中包括一個創建組件的方法,在各個界面中都實現了該接口。
2.4 數據庫連接
對數據庫的連接封裝在了類SqlHelper中,具體的方法如下。
1.加載驅動
2.得到連接
3.創建prepareStatement對象
4.執行sql語句
2.5 減少代碼冗余
1.在com.mytools中創建 MyFont類,類中創建了多個字體對象。每一個類使用字體的話,可以直接引入包com.mytools,設置需要的字體。
2.在com.atm_dao中創建了SqlHelper類,封裝了對數據庫的連接,無需在每一個操作(crud)中再次連接數據庫。
2.6 UML圖 ? ?
(如圖2-1所示)?
? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2-1 ATM機 UML圖
3 系統實現
3.1 登陸頁面模塊
? ? 登陸結界面中需輸入卡號和密碼,若輸入的卡號和密碼與銀行數據庫中卡號與密碼一致,才會跳轉到選擇服務模塊,若不一致會彈出相應的警告窗口。
在界面設計中,用到了JLabel、JButton等組件。核心的代碼(部分)如下:
?if(e.getSource()==jb1){?? ?
? ? al=new ArrayList<String>();
? ? al.add(jtf1.getText().trim());
? ? al.add( new String(jpf1.getPassword()));
? ? ulm=new UserLoginModel();
? ? temp=ulm.check(al.get(0), al.get(1));
? ? if(al.equals(temp)){
? ? new MainView(al.get(0));
? ? this.dispose();
?? ? }else{
JOptionPane.showMessageDialog(this, "您輸入的銀聯賬號 ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? 和密碼不匹配,請重新輸入!");
? ? ? ?}
? }else if(e.getSource()==jb2){
?? ??? ??? ?this.dispose();
? }
3.2 選擇服務模塊
選擇模塊有四部分組成,分別是取款模塊、存款模塊、查詢模塊和退卡模塊,為
每個模塊注冊了監聽,用戶點擊了某個按鈕,系統就會跳轉到相應的操作界面。 核心的代碼(部分)如下:
? ? ?if(e.getSource()==jb1){
?? ??? ? new DrawMoney(this.accountId);
?? ??? ? this.dispose();
?? ??? ?}else if(e.getSource()==jb2){
?? ??? ? ?new SaveMoney(this.accountId);
?? ??? ? ?this.dispose();
?? ??? ?}else if(e.getSource()==jb3){
?? ??? ??? ? SearchMoneyModel smm=new SearchMoneyModel();
?? ? ? ?}else if(e.getSource()==jb4){
?? ??? ??? ?this.dispose();
?? ??? ??? ?new UserLogin();
?? ??? ?} ?
3.3 取款模塊
取款模塊界面主要有JButton,JLabel以及JTextField組成。用戶在文本框中
輸入取款的金額,必須是100的倍數,并且一次性取款不能超過10000元。當然取款的金額也不能超過當前賬戶的余額,并且余額不能為負值。 核心的代碼(部分)如下:
? ? ?if(num>userYuE){
?? ??? ??? ? ? ? ? ? ?JOptionPane.showMessageDialog(this, "余額不足!您當前
? ? ? ? ? ? ? ? ? ? ? 的余額為 ?"+userYuE+" 元");
? ? ? ? ? ? ? ? ? ?}
?? ? ?if(num>10000){
? ? ? ? ? ? ? ? ? ? JOptionPane.showMessageDialog(this, "取款金額需在100到
? ? ? ? ? ? ? ? ? ? 10000元之間);
? ? ? ? ? ? ? ? ? }
?? ? ?if(num>=100 && num<=10000 && num<=userYuE){
?? ??? ??? ? ?if(num%100==0){
?? ??? ??? ? ?JOptionPane.showMessageDialog(this, "您取款的金額為 ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "+num+" 元");
?? ??? ??? ? ?JOptionPane.showMessageDialog(this, "系統正在處理您當前的操作
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?請稍后。。。");
? ? ? ? ? ? ?JOptionPane.showMessageDialog(this, "已成功取款 ?"+num+" 元,
? ? ? ? ? ? ? ? ? 請收好您的現金!");
?? ??? ??? ? ? new DrawMoneyModel(drawMoney,accountId); ?
?? ??? ??? ? ? ?}else {
?? ??? ??? ??? ? ? JOptionPane.showMessageDialog(this,"您輸入的金額不合法,請重
? ? ? ? ? ? ? ? ? 新輸入!");
?? ??? ? ?}
3.4 存款模塊
?存款界面的設計類似于取款界面。用戶可以在文本框中輸入存款的金額,點擊確
定后,當前賬戶就會增加存款的金額。核心代碼(部分)如下:
? ? ?if(num<=0){
?? ??? ??? ??? ?JOptionPane.showMessageDialog(this,"您輸入的存款金額不合
? ? ? ? ? ? ? ?法,請輸入大于0的數字!");
}else{
?? ??? ??? ??? ?JOptionPane.showMessageDialog(this, "您存款的金額為?
? ? ? ? ? ? ? "+num+" 元");
?? ??? ??? ??? ?JOptionPane.showMessageDialog(this, "系統正在處理您當前的操
? ? ? ? ? ? ? 作請稍后。。。");
?? ??? ??? ??? ?JOptionPane.showMessageDialog(this, num+"元"+"已經存入您的
? ? ? ? ? ? ? 賬戶!");
?? ??? ??? ??? ?new SaveMoneyModel(saveMoney,accountId);
?? ??? ??? ?}
?? ? ? ?}else if(e.getActionCommand().equals("取消")){
?? ??? ??? ? ?this.dispose();
?? ??? ??? ? ? new MainView(this.accountId);
?? ??? ? ?}
?? ? ? }
3.5 查詢模塊
?查詢模塊的設計類似于前兩個界面,也是由JButton,JLabel以及JTextField
組成。核心代碼(部分)如下:
? ? ? try { ?
? ? ? ? ? ?while(rs.next())
?? ??? ??? ? {
? ? ? ? ? ? userYuE=rs.getDouble(1);
?? ??? ??? ? }
?? ??? ? ? } catch (SQLException e) {
?? ??? ??? ? ?e.printStackTrace();
?? ??? ? ? ?}
? ? ?? ?return userYuE; ??
?? ?
4 系統測試
4.1 登陸頁面模塊測試
在如圖4-1所示的登陸界面,輸入卡號和密碼后,點擊登陸時系統會判斷當前的卡號與密碼是否與銀行數據庫中的存放的卡號與密碼一致,如果不一致會彈出一個警告窗口(如圖4-2所示)點擊確定后,跳轉到登陸界面。卡號和密碼都正確后,會進入到選擇服務模塊(如圖4-3所示)。
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4-1 ATM機登陸界面圖 ? ?
? ? ?
? ? ? ? ? ? ? ? ? ? ? ?
? ??
? ? ? ? 圖4-2 賬號密碼錯誤提示圖
?
4.2 選擇服務模塊測試
? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ?圖4-3選擇服務模塊圖
4.3 取款模塊測試
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4-4 取款模塊圖
? ? 取款金額只能在100元10000元之間,并且是100的倍數,如果取款金額不在該 范圍內(以20000為例),會彈出一個警告窗口(如圖4-5)
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4-5 取款金額不合法警告圖 ?
? ? ? 賬戶余額不足會彈出一個警告窗口(如圖4-6)
? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4-6 余額不足警告圖
? ? ? 取款成功(以100元為例)會彈出提示窗口(圖4-7,4-8,4-9)
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖4-7 取款金額提示圖
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4-8 系統工作緩沖提示圖
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖4-9 成功取款圖
4.4 存款模塊效果測試
? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ?圖4-10 存款模塊效果圖
? ?
? ? ?如果輸入的存款金額(以-1元為例)不合法,會彈出警告窗口(如圖4.11)
? ??
? ? ? ? ? ? ? ? 圖4-11 存款金額不合法警告圖
??
? ? 輸入存款的金額(以100元為例),點擊確定按鈕,會彈出提示窗口,(如圖4-12,4-13,4-14所示)
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? 圖4-12存款金額提示圖
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖4-13系統工作緩沖提示圖
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4-14成功存款效果圖
?4.5查詢模塊測試
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖4-15 查詢效果圖
5 總結
? ? 在這次的課程中,我主要運用了Java語言的界面設計,異常處理,awt控件, ? ? ? ? ? ? ? ? ? swing控件,JDBC,MVC模式等知識,綜合運用了Java語言。我深刻感受到了面向對象語言中類庫的強大功能,再一次體會到了使用API文檔的必要性,為以后學習Java Web 以及Java EE奠定了堅實的基礎。
? ? 在測試過程中出現最多的一個異常是空指針異常,原因是對象只是在前面聲明了,而沒有在后面創建。對于異常的處理我采用了打印輸出來判斷哪一個程序語句出錯,定位成功后,我再采取相應的措施進行處理。通過對種種異常的處理,真正提高了我對程序的調試能力。
? ? 最后還要感謝老師不厭其煩且細心的指導。
?
總結
以上是生活随笔為你收集整理的基于java的银行ATM系统设计(含源文件)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS逆向笔记-记录某测试论坛的js逆向练
- 下一篇: php 云端桌面,开源云桌面程序DZZ