




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ATM管理系統引言:本系統采用JAVA語言并在eclipse環境下編寫測試完成,涉及類的概念,以及面向對象的幾大特性(繼承,封裝,多態,抽象),也有異常處理機制,采用集合(更好)存儲賬戶數據,基本可以滿足大多數BAM系統的相關實現。JAVA類的面相對象的應用,擁有異常處理機制,不會因為輸入錯誤而導致程序崩潰。本系統各個類之間的相互關系,涉及繼承、封裝、多態、抽象,在多態中又涉及重載和重寫,相關聯系請關注代碼注釋。可以實現數據保存功能,數據將保存在文件中(即當你注冊了一個賬戶,下次再登錄系統時,可以實現與上次最后的操作相銜接)。最后賬戶號自動生成,比較符合現實。1、軟件需求分析 1.1 市場需求
2、 由于的各方面發展速度的大幅提高,幾乎所有的銀行都配備了不用繁瑣的人工操作的ATM自動取款機。人們可以隨時隨地進行交易,不再受銀行的服務時間的約束,取款時也為人們節省了很多時間,方便快捷。對于配有ATM自動取款機的銀行,客戶較多,系統需操作方便,信息讀取與存儲及時快速,方便客戶進行自由交易和系統管理員對信息的管理。1.2 功能需求軟件應包含取款、存款、轉賬、查詢、修改密碼等ATM機的主要功能。2、程序結構本系統主要有7個類,即Account(賬戶類)SaveAccount(儲蓄賬戶類):不能透支CreditAccount(信用賬戶類):可以透支Bank(銀行類)ATMOpenAccountFr
3、ame(開戶窗口頁面)ATMLoginFrame(登錄窗口頁面)ATMMainFrame(操作窗口頁面) 注:帶有完善的相關信息提示彈出窗口 (見下面截圖)類的具體屬性級行為見代碼3、功能介紹主要功能有:1.開戶(儲蓄賬戶信用賬戶) 2.查詢賬戶余額 3.存款 4.取款 5.轉賬(一個賬戶到另一個賬戶)4、軟件設計 7、運行時界面簡示1.初始界面(賬戶登錄) 2.賬戶登錄后界面 3.相關信息提示一覽(只列舉一部分)1、查詢:2、存款: 3、取款: 4、轉賬: 4、用戶開戶界面:注意事項:1、本系統采用的編程環境是JDK1.7,jer7。所以,運行代碼需要保持電腦上所裝的JDK為1.7以上版本,
4、如有報錯,只需換個高一點的版本即可。注意:第一次裝JDK,要配置環境變量(請查閱相關資料,比較簡單)2、本系統代碼涉及到包,所以如果報名不一致就會報錯,解決方法:修改一下包名即可3、建議把各個類寫在同一個包下面,且每一個類單獨寫一個java文件,如下圖:4、在運行程序前,需要在項目下面新建一個account.txt(用來保存數據)文件(如上圖),并在其中寫入至少一個賬戶信息,(如下圖,其中每項代表的意思,請讀者參照代碼內的注釋),否則在初始化的時候會因為找不到賬戶信息,從而產生異常。系統源碼:Account類package com.qx;import javax.swing.JOptionPa
5、ne;/* * 賬戶類:包含兩種賬戶類型-1.儲蓄賬戶 2.信用賬戶 */public abstract class Account /屬性protected long id;protected String password;protected String name;protected String personId;protected String accountType;protected double balance;/構造方法public Account()super();public Account(long id, String password, String name, S
6、tring personId,String type,double balance) super();this.id = id;this.password = password; = name;this.personId = personId;this.accountType = type;this.balance = balance;/getXxx,setXxx方法public long getId() return id;public void setId(long id) this.id = id;public String getPassword() return p
7、assword;public void setPassword(String password) this.password = password;public String getName() return name;public void setName(String name) = name;public String getPersonId() return personId;public void setPersonId(String personId) this.personId = personId;public String getAccountType()
8、 return accountType;public void setAccountType(String accountType) this.accountType = accountType;public double getBalance() return balance;public void setBalance(double balance) this.balance = balance;/* * 存款 */public void deposit(double money)balance += money;/* * 取款(取款方式由賬戶類型決定,所以設為抽象方法,相應的Accoun
9、t類應設為抽象類) */public abstract void withdraw(double money);SavingAccount類package com.qx;import javax.swing.JOptionPane;/* * 儲蓄賬戶類 */public class SavingAccount extends Account /構造函數public SavingAccount() super();public SavingAccount(long id, String password, String name, String personId,String accountTy
10、pe, double balance) super(id, password, name, personId, accountType, balance);/對父類的withdraw()實現public void withdraw(double money)if(balance money)/*System.out.println(對不起,賬戶余額不足!);*/JOptionPane.showMessageDialog(null, 對不起,賬戶余額不足!,信息提示,JOptionPane.ERROR_MESSAGE);elsebalance -= money;CreditAccount類pac
11、kage com.qx;import javax.swing.JOptionPane;/* * 信用賬戶類,增加一個信用額度ceiling屬性 */public class CreditAccount extends Accountprivate int ceiling;/構造函數public CreditAccount()super();public CreditAccount(long id, String password, String name,String personId,String accountType, double balance, int ceiling)super(
12、id, password, name, personId, accountType, balance);this.ceiling = ceiling;/getXxx,setXxx方法public int getCeiling() return ceiling;public void setCeiling(int ceiling) this.ceiling = ceiling;/實現父類的withdraw()public void withdraw(double money)if(balance + ceiling) money)/*System.out.println(對不起,已超出您的信用額
13、度!);*/JOptionPane.showMessageDialog(null, 對不起,已超出您的信用額度!,信息提示,JOptionPane.ERROR_MESSAGE);elsebalance -= money;Bank類package com.qx;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;i
14、mport java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Properties;import javax.swing.JOptionPane;/* * Bank類 * 編寫Bank類,屬性:1.當前所有的賬戶對象的集合,存放在數組中2.當前賬戶數量方法:1.用戶開戶,需要的參數:id,密碼,密碼確認,姓名,身份證號碼,賬戶類型,返回新創建的Account對象的賬號, 提示:用s1.equals(s2) 可以比較s1,s
15、2兩個字符串的值是否相等.賬戶類型是一個整數,為0的時候表示儲蓄賬戶,為1的時候表示信用賬戶2.用戶登錄,參數:id,密碼 返回登錄賬戶的賬號3.用戶存款,參數:id,存款數額,返回void4.用戶取款,參數:id,取款數額,返回void5.查詢余額,參數:id,返回該賬戶的余額 double用戶會通過調用Bank對象以上的方法來操作自己的賬戶,請分析各個方法需要的參數 */public class Bank /*private Account accounts = new Account20;*/private List accountsList;private int number;/賬戶
16、數目private int id = 1001;/確定銀行賬號從1001開始生成,即第一個賬戶的賬號是1001/構造函數public Bank() accountsList=new ArrayList();number = 0;BufferedReader bufReader = null;Properties props=System.getProperties();String path=props.getProperty(user.dir);try bufReader=new BufferedReader(new FileReader(new File(path,account.txt)
17、;String s = bufReader.readLine();while(s != null)String str = s.split(,);if(str4.equals(0)Account savingAcc = new SavingAccount(Long.parseLong(str0),str1.toString(), str2.toString(),str3.toString(),str4.toString(),Double.parseDouble(str5);accountsList.add(savingAcc);elseAccount creditAcc = new Credi
18、tAccount(Long.parseLong(str0),str1.toString(), str2.toString(),str3.toString(),str4.toString(),Double.parseDouble(str5),5000);accountsList.add(creditAcc);number +;id+;s = bufReader.readLine(); catch (NumberFormatException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (FileNotFoundEx
19、ception e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();finallytry if(bufReader != null)bufReader.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/getXxx,setXxxpublic List getAccou
20、nts() return accountsList;public void setAccounts(List accounts) this.accountsList = accounts;public int getNumber() return number;public void setNumber(int number) this.number = number;public int getId() return id;public void setId(int id) this.id = id;/* * 開戶 */public Account openAccount(String pa
21、sswd1, String passwd2, String name, String personId, String type)/創建一個新賬戶Account account = null;/判斷兩次密碼是否一致if(passwd1.equals(passwd2)/若一致,再判斷賬戶類型(根據type的值)if(type.equals(1)/可令開始余額為10,信用額度為5000account = new CreditAccount(id, passwd1, name, personId, type, 10, 5000);elseaccount = new SavingAccount(id,
22、 passwd1, name, personId, type, 10);/將賬戶存入賬戶集合accountsList中accountsList.add(account);JOptionPane.showMessageDialog(null, 開戶成功!,信息提示, JOptionPane.INFORMATION_MESSAGE);JOptionPane.showMessageDialog(null, 您的卡號為:+id+n+ 您的密碼為:+passwd1+n+您的戶名為:+name+n+ 您的身份證號為:+personId+n+您的賬戶類型為:+type+n,信息提示, JOptionPane
23、.INFORMATION_MESSAGE);account.accountType = type;number+;id+;return account;/此時開戶成功elseJOptionPane.showMessageDialog(null, 對不起!您兩次密碼輸入不匹配,開戶失敗!,信息提示,JOptionPane.ERROR_MESSAGE);return null;/此時開戶失敗/* * 保存數據 */public void saveAccountDate()BufferedWriter bufWriter=null;try Properties props=System.getPro
24、perties();String path=props.getProperty(user.dir);String s = null;bufWriter=new BufferedWriter(new FileWriter(new File(path,account.txt);for(Iterator iterator = accountsList.iterator();iterator.hasNext();)/若存在賬戶Account acc = (Account) iterator.next();/寫入賬戶信息到account.txtbufWriter.write(acc.id+,);bufW
25、riter.write(acc.getPassword()+,);bufWriter.write(acc.getName()+,);bufWriter.write(acc.getPersonId()+,);bufWriter.write(acc.getAccountType()+,);bufWriter.write(Double.toString(acc.getBalance();bufWriter.newLine();bufWriter.flush();/清空緩存中的內容 catch (IOException e) / TODO Auto-generated catch blocke.pri
26、ntStackTrace();finallytry if(bufWriter!=null)bufWriter.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/* * 登錄驗證 */public Account verifyAccount(long id, String password)Account account = null;Account acc = null;for(Iterator iterator = accountsList.iterator(); iter
27、ator.hasNext();)/若存在賬戶acc = (Account) iterator.next();if (acc != null) if (id = acc.getId() & password.equals(acc.getPassword() account = acc;break;elsebreak;return account;/* * 轉賬驗證(方法的重載) */public Account verifyAccount(long id)Account account = null;Account acc = null;for(Iterator iterator = accou
28、ntsList.iterator(); iterator.hasNext();)/若存在賬戶acc = (Account) iterator.next();if (acc != null) if (id = acc.getId() account = acc;break;elsebreak;return account;/* * 轉賬 */public void transferAccount(Account account1, Account account2, double money)account1.withdraw(money);account2.deposit(money);/*
29、* 存款 */public void deposit(Account account, double money)account.deposit(money);/* * 取款 */public void withdraw(Account account, double money)account.withdraw(money);ATMLoginFrame類package com.qx;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionE
30、vent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class ATMLoginFrame extends JFrameprivate JLabel jblCardNo,jblPasswd;private JTextFie
31、ld jtfCardNo,jtfPasswd;private JButton jbOk,jbCancel,jbOpenAccount;private JPanel jp1,jp2,jp3,jp4;private Bank bank;public ATMLoginFrame()bank=new Bank();/實例化所有組件jblCardNo=new JLabel(用戶名:);jblPasswd=new JLabel(密 碼:);jtfCardNo=new JTextField(20);jtfPasswd=new JTextField(20);jbOk=new JButton(確定);jbCan
32、cel=new JButton(取消);jbOpenAccount=new JButton(沒有賬戶,開戶);jp1=new JPanel();jp2=new JPanel();jp3=new JPanel();jp4=new JPanel();jp1.add(jblCardNo);jp1.add(jtfCardNo);jp2.add(jblPasswd);jp2.add(jtfPasswd);jp3.add(jbOk);jp3.add(jbCancel);jp4.add(jbOpenAccount);/將每行逐行添加到frame中this.add(jp1);this.add(jp2);thi
33、s.add(jp3);this.add(jp4);this.setLayout(new GridLayout(4, 1);/取消默認管理器,設置為3行1列的網格布局Dimension d=Toolkit.getDefaultToolkit().getScreenSize();this.setTitle(登陸界面);this.setBounds(d.width-300)/2, (d.height-200)/2, 300, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/設置關閉窗口時JVM同時推出this.pack();/調整窗
34、口至能容納組件的最小尺寸this.setVisible(true);/設置窗口可見this.setResizable(false);/不能最大化/使用匿名內部類給2個按鈕注冊監聽器jbCancel.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) dispose();/關閉窗口);jbOk.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) /取出用戶界面輸入的用戶名和密碼l
35、ong cardNo=Integer.parseInt(jtfCardNo.getText();String passwd=jtfPasswd.getText();/調用Bank的相關方法將二者與正確的做比對Account account=bank.verifyAccount(cardNo, passwd);if(account!=null)/假如正確,進入操作界面ATMMainFrame mainFrame=new ATMMainFrame(bank,account);/進入操作界面dispose();/關閉登陸界面else/假如錯誤,使用對話框提示錯誤信息JOptionPane.showM
36、essageDialog(null, 卡號或密碼錯誤, 信息提示,JOptionPane.ERROR_MESSAGE););jbOpenAccount.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) ATMOpenAccountFrame openFram=new ATMOpenAccountFrame();dispose();/關閉登陸界面);/* * param args */public static void main(String args) ATMLoginFr
37、ame atm=new ATMLoginFrame();ATMMainFrame類package com.qx;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Scanner;import javax.swing.JButton;import javax.swin
38、g.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;public class ATMMainFrame extends JFrame private Account account;private Bank bank;private JButton jbDeposit,jbWithdraw,jbCancel,jbQuery,jbTransfer;private JLabel jblMsg,jblName;private JPanel jp1,jp2,jp3,jp4
39、;/* * param args */public ATMMainFrame(final Bank bank,Account tmpA)this.account=tmpA;this.bank=bank;jbQuery=new JButton(查詢);jbDeposit=new JButton(存款);jbWithdraw=new JButton(取款);jbTransfer=new JButton(轉賬);jbCancel=new JButton(退卡);jblName=new JLabel(賬戶姓名: +account.getName();jblMsg=new JLabel();jp1=ne
40、w JPanel();jp2=new JPanel();jp3=new JPanel();jp4=new JPanel();jp1.add(jbQuery);jp1.add(jbDeposit);jp2.add(jbWithdraw);jp2.add(jbTransfer);jp3.add(jbCancel);jp4.add(jblName);jp4.add(jblMsg);/將每行逐行添加到frame中this.add(jp1);this.add(jp2);this.add(jp3);this.add(jp4);this.setLayout(new GridLayout(4, 1);/取消默
41、認管理器,設置為4行1列的網格布局Dimension d=Toolkit.getDefaultToolkit().getScreenSize();this.setTitle(操作界面);this.setBounds(d.width-300)/2, (d.height-200)/2, 300, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/設置關閉窗口時JVM同時推出/this.pack();/調整窗口至能容納組件的最小尺寸this.setVisible(true);/設置窗口可見this.setResizable(false
42、);/使用匿名內部類給查詢按鈕注冊監聽器jbQuery.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) JOptionPane.showMessageDialog(null, 您賬戶的當前余額為:+account.getBalance(),信息提示,JOptionPane.INFORMATION_MESSAGE););/給存款按鈕注冊監聽器jbDeposit.addActionListener(new ActionListener() public void actionPerf
43、ormed(ActionEvent arg0) String s= JOptionPane.showInputDialog(請輸入存款金額:);double money=Double.parseDouble(s.equals()?0:s);bank.deposit(account, money);JOptionPane.showMessageDialog(null, 存款成功!,信息提示, JOptionPane.INFORMATION_MESSAGE);jblName=new JLabel(賬戶姓名: +account.getName();jblMsg.setText(余額: +accoun
44、t.getBalance(););/給取款按鈕注冊監聽器jbWithdraw.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) String s= JOptionPane.showInputDialog(請輸入取款金額:);double money=Double.parseDouble(s.equals()?0:s);bank.withdraw(account, money);/*JOptionPane.showMessageDialog(null, 取款成功!,信息提示,
45、JOptionPane.INFORMATION_MESSAGE);*/jblName=new JLabel(賬戶姓名: +account.getName();jblMsg.setText(余額: +account.getBalance(););/給轉賬按鈕注冊監聽器jbTransfer.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String sId = JOptionPane.showInputDialog(請輸入要轉賬的卡號:);long id2 = Long.parse
46、Long(sId);Account account2 = bank.verifyAccount(id2);if(account2 != null)String sNum = JOptionPane.showInputDialog(請輸入您要轉入賬戶的金額:);double money=Double.parseDouble(sNum.equals()?0:sNum);if(money = account.balance)bank.transferAccount(account, account2, money);JOptionPane.showMessageDialog(null, 轉賬成功!,
47、信息提示, JOptionPane.INFORMATION_MESSAGE);elseJOptionPane.showMessageDialog(null, 抱歉,您賬戶沒有足夠的金額!請查看后重新選擇輸入!,信息提示,JOptionPane.ERROR_MESSAGE);elseJOptionPane.showMessageDialog(null, 抱歉,沒有找到您要轉入的賬戶信息!請核對后重新選擇輸入!,信息提示, JOptionPane.ERROR_MESSAGE);jblName=new JLabel(賬戶姓名: +account.getName();jblMsg.setText(余額
48、: +account.getBalance(););/給退卡按鈕注冊監聽器jbCancel.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) bank.saveAccountDate();dispose();/關閉窗口);ATMOpenAccountFrame類package com.qx;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;public class ATMOpenAccountFrame extends
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025合同違約責任的新變化與特點
- 2024年2月化糞池作業現場衛生防護距離測量協議
- 2025年濾紫外石英玻璃燈管項目建議書
- 幼兒園課程評價的科學化探索計劃
- 綠色水利工程建設實踐計劃
- 降低成本的創新思路計劃
- 2024年7月招生代理協議中的多世界詮釋法律聲明
- 加強市場競爭力的工作策略計劃
- 班主任角色定位與工作方法計劃
- 社交媒體學校社交媒體社團計劃
- 2024年河北省對口高考英語(涿職陳琢印)
- 《池塘養魚學》第五章-魚苗、魚種的培育-教學課件
- 經典的咨詢服務合同協議書2024年
- 中班音樂《粉刷匠》
- 2020年全國1卷-語文真題(解析版)
- DL 5190.3-2019 電力建設施工技術規范 第3部分:汽輪發電機組
- 關于學生假期(寒暑假)安排的調查問卷
- 北京市海淀區2023-2024學年八年級下學期期末考試英語試題(解析版)
- 重癥醫學中級考試記憶總結
- 成語故事對牛彈琴
- 物流成本管理第四版段春媚課后參考答案
評論
0/150
提交評論