第一篇:java實訓 ATM取款機
ATM取款機課程設計報告
姓
名: 學
號: 專
業: 班
級:
ATM取款機 課程設計過程概述
2009年6月,JAVA游戲開發課程設計在實驗樓三樓機房進行,持續時間為兩周。這次課程設計的主要目的是結合面向對象程序設計課程,培養我們面向對象軟件開發的思維,初步了解軟件開發的一般流程,提高用JAVA編程的實際動手能力并增強大家對面向對象的了解。這次課程設計的主要內容是獨立用JAVA語言開發一個小的應用程序。我開發了一個ATM柜員機。課程設計題目描述和基本設計要求
我設計的ATM柜員機主要是由各個Windows窗口組成,它是由登錄頁面、選擇服務、取款、查詢余額、修改密碼和退卡等功能。它的各種按鈕的事件和功能可以簡單的模擬ATM柜員機的要求。系統需求分析 3.1 功能需求分析
本ATM柜員機的主要功能如下所述:
要求使用圖形用戶界面。當輸入給定的卡號和密碼(初始卡號為000000和密碼為123456)時,系統能登錄ATM柜員機系統,用戶可以按照以下規則進行:
? 查詢余額:初始余額為50000元
? ATM取款:每次取款金額為100的倍數,總額不超過5000元,支取金額不允許透支。
? ATM存款:不能出現負存款。
? 修改密碼:只有舊密碼正確,新密碼符合要求,且兩次輸入相同的情況下才可以成功修改密碼。3.2 其他需求分析
(1)性能描述
實時性好、靈活性強、易于不同年齡階段的人操作。(2)設計約束
開發工具:JCrator ProV3.5.0 運行環境:Windows 2000以上 能實現用戶所定義的各項需求。(3)界面要求
以Windows窗口形式顯示,標題欄為ATM柜員機名稱,右上角有最小化按鈕、最大化按鈕、關閉按鈕,不同的窗口中有不同的按鈕和選擇菜單。系統設計 4.1 總體設計
我所設計的ATM柜員機主要是由登錄頁面模塊還由選擇服務模塊組成,其中選擇服務模塊又由取款模塊、查詢余額模塊、修改密碼模塊、退卡模塊組成。其功能結構圖如下所示:
圖1
ATM功能結構示意圖
4.2 ATM柜員機界面設計
我覺得一個系統的界面應該要簡單明了,當然樣式美觀就更好了。我設計的界面主要是由窗體組成,操作簡單。而每一個窗口則執行相應的功能。
一個系統界面的好壞直接影響到用戶的操作,界面設計要求樣式美觀、簡單明了、方便易操作。我設計的界面主要分為窗體、菜單、按鈕和文本輸入框幾個部分,分別執行相應的操作。
(1)窗體的設計
窗體整個框架使用Frame類構造,Frame有自己的外邊框和自己的標題,創建Frame時可以指定其窗口標題,我創建的窗口標題是各個不同功能的模塊的名字,比如說查詢余額,還有取款等。相應源代碼為:WindowBox(String s,Account act){super(“ATM柜員機”);}、Selection(String s,Account act){ } 向Frame窗口中添加組件使用add()。super(s);
例如:button1 = new Button(“存款”);
p1.add(button1);this.add(p1);每個Frame在其右上角都有三個控制圖標,分別代表將窗口最小化、窗口最大化和關閉的操作,其中最小化和最大化操作Frame可自動完成,而關閉窗口操作實現需要書寫有關的代碼,在我的程序中我采用的是對WINDOWS_CLOSING事件做出響應,調用dispose()方法關閉窗口。Frame也可以引發WindowsEvent類代表的窗口事件。相應源代碼為:
addWindowListener(new WindowAdapter()//窗口偵聽器,以從此窗口接收窗口事件 {public void windowClosing(WindowEvent e)//處理窗口關閉事件
{ System.exit(0);} });}(2)窗體的主要結構的設計
我所設計的窗口的主要結構的特點就是每個窗口都對應著一個特定的功能。比如說報各種各樣的錯,還有各種查詢余額、取款、選擇服務等,所以它們都是由各種按鈕和文本框,標簽組成的,而聯系各個窗體成為一個整體的就是各個按鈕的監聽事件。所以整個設計就趨向簡單化了。
為了定義各個按鈕所對應的命令和操作,首先需要將各個按鈕注冊給實現了動作事件的監聽接口ActionListener的監聽者,然后為監聽者定義actionPerformed(ActionEvent e)方法,在這個方法中調用e.getSource()或e.getActionCommand()來判斷用戶點擊的菜單子項,并完成這個菜單子項定義的操作。
4.3 各功能模塊設計 4.3.1 登陸頁面模塊設計
與ATM柜員機打交道比較多的,也是大家對安全比較關心的問題:密碼。所以第一個界面就是要輸入密碼和卡號才能繼續服務。
我定義了文本框累的對象tf1,tf2。抓藥是用于輸入單行的文本;文本區調用public
String getText()方法,獲取用戶想要的字符串。用來判斷輸入的密碼和卡號是否正確,如果不正確的話,則彈出密碼或卡號錯誤的警告框,并用dispose()關掉窗口。此模塊相應的部分源代碼為:
public void actionPerformed(ActionEvent e){
Account act;String card;
String pwd;
act=new Account(“000000”,“Devil”,“123456”,50000);//初始化
/*選擇各種服務*/ if(e.getSource()== button1){
String number1,number2;
number1=tf1.getText();
number2=tf2.getText();/*判斷密碼和卡號是否正確*/ if((act.get_Code().equals(number1))&&(act.get_Password().equals(number2))){
dispose();
/*卡號和密碼都正確則進入功能選擇窗口*/
}
Selection s = new Selection(“選擇服務”,act);
}else{
}
dispose();
ErrorWarn ew = new ErrorWarn(“消息!”,act);
/*退卡*/ if(e.getSource()==button2){
}
System.exit(0);dispose();} 4.3.2 選擇服務模塊設計
在選擇服務模塊中,有各種ATM的服務功能,只要用戶在該界面中選擇按鈕,它就會彈出各個相應的界面。每一個按鈕都有監聽器,在選擇了按鈕后,java.awt.event中的ActionEvent類創建一個事件對象,并將它傳遞給方法public void actionPerformed(ActionEvent e)中的參數e,監視器就會知道所發生的事件,對此事件進行處理。其中的部分源代碼為:
p.add(new Label(“請選擇你要的服務”));
this.add(p);button1 = new Button(“存款”);p1.add(button1);this.add(p1);button2 = new Button(“取款”);p2.add(button2);this.add(p2);button3 = new Button(“查詢余額”);p3.add(button3);this.add(p3);button4 = new Button(“退出”);p4.add(button4);this.add(p4);button5 = new Button(“修改密碼”);p5.add(button5);this.add(p5);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);
} });} button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);//setLayout(new GridLayout());setBounds(150,150,200,200);setVisible(true);validate();public void actionPerformed(ActionEvent e){
if(e.getSource()==button2){//取款
} if(e.getSource()==button3){//查詢余額
} else if(e.getSource()==button4){//退出
} else if(e.getSource()==button5){//修改密碼
ChangePassword cp = new ChangePassword(“修改密碼”,act);dispose();
dispose();GetBalance gb = new GetBalance(“取款”,act);
Query q =new Query(“查詢余額”,act);dispose();System.exit(0);dispose();
} }
} 4.3.3 取款模塊設計
在取款模塊中,和其他的界面也是同樣的結構。也是有一個文本框和一個按鈕還有標簽組成的。用戶在文本框中輸入他想取的數額,但是必須是100的倍數,而且每一次最多只能取5000塊。當然了取款的時候也不能超過卡里的余額,再就是卡里的余額不可以為負,否則就會彈出報錯的窗口。其方法為:
if(e.getSource()==button){
/*判斷余額是否為負*/
if(act.get_Money()<0){
}
dispose();
ErrorWarn4 ew4 = new ErrorWarn4(“消息!”,act);
/*判斷取款數額是否小于卡里余額*/ else if(money<=act.get_Money()){
/*取款的數額必須是100的倍數且每次最多只能取5000塊*/
if((money%100!=0)||(money>=5000)){
}
act.set_Balance(money);//重新設置卡里的余額 this.setVisible(false);
dispose();
ErrorWarn6 ew6 = new ErrorWarn6(“消息!”,act);
/*取款后就再次進入選擇界面*/
Selection s = new Selection(“選擇服務”,act);
//dispose();}else if(money>act.get_Money()){
}
}
dispose();
ErrorWarn5 ew5 = new ErrorWarn5(“消息!”,act);4.3.4 修改密碼模塊設計
在修改密碼模塊中,首先你必須要輸入你的舊密碼是否正確,否則就會報錯。再一個就是要兩次輸入你的新密碼,且兩次藥匹配,否則也會報錯,然后再重新回到修改密碼的界面。在修改密碼時用到的方法為:
/*判斷舊密碼是是否正確*/ if(pwd2.equals(act.get_Password())){ /*判斷兩次輸入的密碼是否匹配*/ if(pwd3.equals(pwd4)){
/*如果都正確的話就設置新密碼*/
act.setPassword(pwd3);dispose();Selection s = new Selection(“選擇”,act);
}else{
dispose();}
ErrorWarn2 ew2 = new ErrorWarn2(“消息”,act);}else{
this.setVisible(false);
}
ErrorWarn3 ew1 = new ErrorWarn3(“消息”,act);
dispose();
4.3.5 退卡模塊設計
在退卡模塊設計中,這個方法就更加的簡單了,它只是用了if(e.getSource()==button4){//退出
} System.exit(0);dispose();這個方法就可以實現了,這里就不再多說了。
4.4 異常處理情況說明
(1)打開、保存文件時的異常處理 需要處理的異常:IOException(2)數據庫訪問時的異常處理 需要處理的異常:SQLException(3)加載類時的異常處理
需要處理的異常:ClassNotFindException,當應用程序試圖使用Class類中的forName方法通過字符串名加載類時,但是沒有找到具有指定名稱的類的定義。
(4)加載URL時的異常
需要處理的異常:MalformedURLException,拋出這一異常指示出現了錯誤的 URL?;蛘咴谝幏蹲址姓也坏饺魏魏戏▍f議,或者無法分析字符串。系統實現與測試
(1)打開DOS,編譯運行程序后,將會看到如下的界面,如圖2所示。如果輸入的密碼或卡號不正確的話就會報右下圖的錯誤。
圖2 主界面—登陸頁面
(2)選擇服務界面效果
當輸入的密碼和卡號正確,單擊確定后就會進入到選擇服務的界面,如圖3所示。然后就可以選擇所需要的服務了。
圖3 選擇服務界面
(3)取款界面,如圖4所示。
圖4 取款界面
當輸入的錢數不是100的倍數或每一次大于5000時就會報圖5的錯誤。
圖5 輸入錯誤1 當取款時如果超過卡里的余額的話就會報圖6的錯誤。
圖6 輸入錯誤2(4)查詢余額界面,如圖7所示。
圖7 查詢余額界面
經過測試,所有的功能基本上都實現了,而且運行正常。課程設計總結
6.1 遇到的問題及解決辦法
在此次課程設計中,我遇到了一些問題,如:對于面向對象的方法了解不夠透徹,運用到實際的軟件開發中存在著困難;對于Java語言,只學習到了一些最基本的知識,這導致編寫程序時經常出現一些語法錯誤,而且要在短時間內用Java語言來設計一個具
體的系統是一個較大的挑戰;還有對于正規開發一個系統的流程不熟悉,適應起來比較慢,編寫各個模塊相對應的操作時,自己感覺難以動手,這表明所學的知識不能靈活運用到實際中。
對于以上的問題,自己有清楚的認識,解決辦法是需要大量閱讀相關的書籍,對于書上以及網站上下載的資料中的Java實例必須有清楚的理解,還有就是多跟精通此方面的老師和同學交流,取其精華。對于實際動手能力與系統開發的流程的適應,必須多進行實際的練習與操作,才能有大的進步。
6.2 心得體會
在這次的學年度課程設計中,我主要運用了Java語言的界面設計、異常處理、、Awt控件、Swing控件,輸入輸出流等,綜合運用了Java語言。我深刻感受到了面向對象語言中類庫的強大功能,掌握了運用Java中的類實現某些基本功能,并學會了自己查詢使用類的方法,為以后的面向對象語言的自學奠定了基礎。
通過這兩個禮拜的課程設計我真的學到了很多的東西,當然這也和我的同學的幫助是離不開的。好了,下面就談一下我在這些天的體會吧:
在這次的課程設計中,主要是運用JAVA語言來編寫一個小的應用程序,當然還可以用其他的技術來輔助了。在這個小應用程序當中,我用了Java外還用了Swing控件。輸入輸出流等技術。由于以前學的不是很扎實,而且還有些知識我們都是沒有學過的,這就要求我們去查相關的書籍,還有就是和同學之間的交流。正因為這樣,才鍛煉了我的自學的能力,還有就是加深了我對各個知識點的認識,并且提高了我對專業的學習的興趣,為我以后的學習打下了基礎。此外,我還感受到了面向對象語言的類庫的強大的功能,掌握了運用JAVA中的類實現某些基本功能,并學會了自己查詢使用類的方法,也就是要會用API文檔,為以后更好的學習面向對象語言奠定了基礎。
通過將近兩周的努力,這次課程設計終于結束了,在這個過程當中,我學到了很多的知識,同時也感謝我的同學的幫助和指導。在以后的學習當中,我會更加努力的學習好專業知識,并將所學的知識用于實踐當中去,以便牢固掌握知識。
參考文獻
[1] 王萌,劉婧,來賓著.JAVA程序設計[M]北京 冶金工業出版社,2004 [2] 黃聰明
精通 JAVA2程序設計[M]北京:清華大學出版社,2004.4 [3] 王文濤,袁海燕 JAVA實用程序設計100例[M]北京:人民郵電出版社,2005.5 [4] 雍俊海 JAVA程序設計[M]北京:清華大學出版社,2006.8 [5] 劉寶林 JAVA程序設計與案例[M]北京:高等教育出版社,2006.11 附錄
import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;import java.io.*;
/*登陸頁面首窗口*/ class WindowBox extends Frame implements ActionListener{
Box baseBox,box1,box2;TextField tf1,tf2;Button button1;Button button2;WindowBox(String s){//構造方法 super(s);
tf1 = new TextField(6);
tf2 = new TextField(6);
box1= Box.createVerticalBox;box1.add(new Label(“請輸入你的卡號”));//輸入卡號 box1.add(Box.createVerticalStrut(8));box1.add(new Label(“請輸入你的密碼”));//輸入密碼
} box2=Box.createVerticalBox();box2.add(tf1);//box2.add(new TextField(16));box2.add(Box.createVerticalStrut(8));box2.add(tf2);//box2.add(new TextField(16));baseBox=Box.createHorizontalBox();baseBox.add(box1);baseBox.add(Box.createHorizontalStrut(10));baseBox.add(box2);add(baseBox);button1= new Button(“確定”);//加入按鈕 button1.addActionListener(this);add(button1);
button2 = new Button(“退卡”);//退卡按鈕 button2.addActionListener(this);add(button2);setLayout(new FlowLayout());/*監聽器*/ this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
});System.exit(0);} setBounds(120,125,200,175);setVisible(true);
public void actionPerformed(ActionEvent e){ Account act;String card;
String pwd;
act=new Account(“000000”,“Devil”,“123456”,50000);//初始化
/*選擇各種服務*/ if(e.getSource()== button1){
String number1,number2;//輸入的兩個卡號和密碼的變量
number1=tf1.getText();
number2=tf2.getText();
/*判斷兩次輸入的卡號和密碼是否正確*/ if((act.get_Code().equals(number1))&&(act.get_Password().equals(number2))){
dispose();
Selection s = new Selection(“選擇服務”,act);
}else{
dispose();
ErrorWarn ew = new ErrorWarn(“消息!”,act);//報輸入密碼或卡號不正確
} }
/*主函數*/ class ATM{
}
} if(e.getSource()==button2){
} System.exit(0);dispose();//退出
} public static void main(String [] args){ } new WindowBox(“登錄頁面”);/*選擇服務*/ import java.awt.*;import java.awt.event.*;class Selection extends Frame implements ActionListener{
Button button1,button2,button3,button4,button5;Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();Panel p4 = new Panel();Panel p5 = new Panel();Panel p = new Panel();Account act;
public Selection(){} Selection(String s,Account act){
super(s);this.act=act;this.setLayout(null);this.setLayout(new GridLayout(6,1));p.add(new Label(“請選擇你要的服務”));this.add(p);
/*各種服務功能*/ button1 = new Button(“存款”);
} p1.add(button1);this.add(p1);button2 = new Button(“取款”);p2.add(button2);this.add(p2);button3 = new Button(“查詢余額”);p3.add(button3);this.add(p3);button4 = new Button(“退出”);p4.add(button4);this.add(p4);button5 = new Button(“修改密碼”);p5.add(button5);this.add(p5);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
});System.exit(0);} button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);setBounds(150,150,200,200);setVisible(true);validate();public void actionPerformed(ActionEvent e){
}
} if(e.getSource()==button2){//取款
} if(e.getSource()==button3){//查詢余額
} else if(e.getSource()==button4){//退出
} else if(e.getSource()==button5){//修改密碼
}
ChangePassword cp = new ChangePassword(“修改密碼”,act);dispose();System.exit(0);dispose();Query q =new Query(“查詢余額”,act);dispose();dispose();GetBalance gb = new GetBalance(“取款”,act);
/*class Test4{ public static void main(String [] args){
Selection s = new Selection(“選擇”);
/*取款功能*/ import javax.swing.*;import java.awt.*;
}*/ } import javax.swing.border.*;import java.awt.event.*;class GetBalance extends Frame implements ActionListener{
Box baseBox, box1,box2;Button button;TextField tf;Account act;GetBalance(String s,Account act){//構造函數
super(s);this.act=act;button=new Button(“確定”);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2,1));panel1.add(new Label(“請輸入你想取錢的數目”));panel1.add(tf);panel.add(button);this.add(panel1);this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){
});public void windowClosing(WindowEvent e){
}
System.exit(0);setBounds(200,200,150,150);this.setVisible(true);
}
public void actionPerformed(ActionEvent e){
于5000
} //System.out.println(e.getActionCommand());double money;
money = Double.parseDouble(tf.getText().trim());if(e.getSource()==button){ if(act.get_Money()<0){//判斷余額是否為負
dispose();
ErrorWarn4 ew4 = new ErrorWarn4(“消息!”,act);} else if(money<=act.get_Money()){//取錢的數額不大于余額 if((money%100!=0)||(money>=5000)){//取錢數為100的倍數或不大
dispose();
ErrorWarn6 ew6 = new ErrorWarn6(“消息!”,act);
}
act.set_Balance(money);//重置余額
this.setVisible(false);
Selection s = new Selection(“選擇服務”,act);//返回選擇服務窗口
//dispose();
}else if(money>act.get_Money()){判斷取款數額是否大于余額
dispose();
ErrorWarn5 ew5 = new ErrorWarn5(“消息!”,act);
} }
} /* public static void main(String[] args){
}
/*修改密碼功能*/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;class ChangePassword extends Frame implements ActionListener{
Panel panel1 = new Panel();Panel panel2 = new Panel();Panel panel3 = new Panel();Panel panel = new Panel();TextField tf4,tf5,tf6;Button button;Account act;ChangePassword(String s,Account act){
super(s);this.act=act;
GetBalance test = new GetBalance(“dfdf”);} GetBalance gb = new GetBalance(“取款”);tf4 = new TextField(6);tf5 = new TextField(6);tf6 = new TextField(6);button = new Button(“確定”);
button.addActionListener(this);/*建立新密碼*/
} /*判斷事件源,看條件是否成立再修改密碼*/ public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ String pwd2,pwd3,pwd4;
pwd2 = tf4.getText();
panel1.add(new Label(“請輸入你的舊密碼:”));panel1.add(tf4);panel2.add(new Label(“請輸入你的新密碼:”));panel2.add(tf5);panel3.add(new Label(“請再次輸入你的新密碼”));panel3.add(tf6);panel.add(button);this.add(panel1);this.add(panel2);this.add(panel3);this.add(panel);setLayout(new GridLayout(4,1));setBounds(200,200,250,250);this.setVisible(true);/*窗口事件*/ this.addWindowListener(new WindowAdapter(){
});public void windowClosing(WindowEvent e){
}
System.exit(0);
} }
pwd3 = tf5.getText();
pwd4 = tf6.getText();
} if(pwd2.equals(act.get_Password())){//判斷舊密碼是否正確
if(pwd3.equals(pwd4)){//判斷兩次輸入的新密碼是個匹配
act.setPassword(pwd3);//啟用新的密碼 dispose();Selection s = new Selection(“選擇”,act);//返回選擇服務窗口
}else{
//this.setVisible(true);
//ErrorWarn2 ew = new ErrorWarn2(“消息”,act);
dispose();}
ErrorWarn2 ew2 = new ErrorWarn2(“消息”,act);}else{
this.setVisible(false);
}
ErrorWarn3 ew1 = new ErrorWarn3(“消息”,act);
dispose();/*查詢余額功能*/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;class Query extends Frame implements ActionListener{
//Account act;Button button;Account act;Query(String s,Account act){//構造函數
} public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ dispose();
super(s);this.act = act;
button=new Button(“確定”);//TextField tf = new TextField(6);Panel panel1 = new Panel();Panel panel = new Panel();panel1.add(new Label(“你的余額為: ” + act.get_Money()));//查詢余額的方法 //panel1.add(tf);
button.addActionListener(this);panel.add(button);this.add(panel);this.add(panel1);this.setLayout(new GridLayout(2,1));this.addWindowListener(new WindowAdapter(){
});public void windowClosing(WindowEvent e){
}
System.exit(0);setBounds(200,200,150,150);setVisible(true);
}
} Selection s = new Selection(“選擇服務”,act);//返回選擇服務窗口 } /*賬戶*/ import java.io.*;
/*該類為實現客戶信息及部分功能*/ class Account { private String code
=null;
//信用卡號
private String name
=null;
//客戶姓名
private String password=null;
//客戶密碼
private double money
=0.0;
//卡里金額
/********************/ public Account(String code,String name,String password,double money){
this.code=code;
this.name=name;
this.password=password;
this.money=money;}
public String get_Code(){//取得卡號
return code;}
public String get_Name(){//取得名字
return name;}
public String get_Password(){//取得密碼
return password;}
public double get_Money(){//取得余額
return money;}
/*得到剩余的錢的數目*/ protected void set_Balance(double mon){
money-= mon;} /*重置秘密的方法*/ public String setPassword(String pwd){
} } password = pwd;return password;
第二篇:ATM取款機java課程設計
黃
淮
學
院
JAVA 課程設計報告
題
目: 《ATM柜員機》課程設計
學
院:
信 息 工 程 學 院
專
業:
計算機科學與技術
指導老師:
二0一三年六月
目錄 課程設計過程概述.......................................................................................3 2 課程設計題目描述和基本設計要求...........................................................3 3 系統需求分析...............................................................................................3 3.1 功能需求分析···················································································· 3 3.2 其他需求分析···················································································· 4 4 系統設計........................................................................................................4 4.1 總體設計 ··························································································· 4 4.2 ATM柜員機界面設計 ········································································· 5 4.3 各功能模塊設計 ················································································ 7
4.3.1 登陸頁面模塊設計 ····························································· 7 4.3.2 選擇服務模塊設計 ····························································· 8 4.3.3 取款模塊設計 ····································································· 9 4.3.4 修改密碼模塊設計 ····························································· 9 4.3.5 退卡模塊設計 ··································································· 10
4.4 異常處理情況說明 ·········································································· 10 5 系統實現與測試.........................................................................................11 6 課程設計總結.............................................................................................13 6.1 遇到的問題及解決辦法 ·································································· 13 6.2 心得體會 ························································································· 14 參考文獻..........................................................................................................15 附錄..................................................................................................................15
ATM初始賬號:000000
初始密碼:123456
ATM柜員機 課程設計過程概述
2013年6月,JAVA課程設計在1#樓六樓機房進行,持續時間為兩周。這次課程設計的主要目的是結合面向對象程序設計課程,培養我們面向對象軟件開發的思維,初步了解軟件開發的一般流程,提高用JAVA編程的實際動手能力并增強大家對面向對象的了解。這次課程設計的主要內容是獨立用JAVA語言開發一個小的應用程序。我們開發了一個ATM柜員機。課程設計題目描述和基本設計要求
我設計的ATM柜員機主要是由各個Windows窗口組成,它是由登錄頁面、選擇服務、取款、查詢余額、修改密碼和退卡等功能。它的各種按鈕的事件和功能可以簡單的模擬ATM柜員機的要求。3 系統需求分析 3.1 功能需求分析
本ATM柜員機的主要功能如下所述:
要求使用圖形用戶界面。當輸入給定的卡號和密碼(初始卡號為000000和密碼為123456)時,系統能登錄ATM柜員機系統,用戶可
以按照以下規則進行:
? 查詢余額:初始余額為50000元
? ATM取款:每次取款金額為100的倍數,總額不超過5000元,支取金額不允許透支。? ATM存款:不能出現負存款。
? 修改密碼:只有舊密碼正確,新密碼符合要求,且兩次輸入相同的情況下才可以成功修改密碼。
3.2 其他需求分析(1)性能描述
實時性好、靈活性強、易于不同年齡階段的人操作。(2)設計約束 開發工具:MyEclipse 運行環境:Windows XP、Window 7 能實現用戶所定義的各項需求。(3)界面要求
以Windows窗口形式顯示,標題欄為ATM柜員機名稱,右上角有最小化按鈕、最大化按鈕、關閉按鈕,不同的窗口中有不同的按鈕和選擇菜單。4 系統設計 4.1 總體設計
我所設計的ATM柜員機主要是由登錄頁面模塊還由選擇服務模塊組
成,其中選擇服務模塊又由取款模塊、查詢余額模塊、修改密碼模塊、退卡模塊組成。其功能結構圖如下所示:
圖1 ATM功能結構示意圖 4.2 ATM柜員機界面設計
我們覺得一個系統的界面應該要簡單明了,當然樣式美觀就更好了。我設計的界面主要是由窗體組成,操作簡單。而每一個窗口則執行相應的功能。
一個系統界面的好壞直接影響到用戶的操作,界面設計要求樣式美觀、簡單明了、方便易操作。我設計的界面主要分為窗體、菜單、按鈕和文本輸入框幾個部分,分別執行相應的操作。(1)窗體的設計
窗體整個框架使用Frame類構造,Frame有自己的外邊框和自己的標題,創建Frame時可以指定其窗口標題,我創建的窗口標題是各個不
同功能的模塊的名字,比如說查詢余額,還有取款等。相應源代碼為: 向Frame窗口中添加組件使用add()。例如:button1 = new Button(“存款”);p1.add(button1);this.add(p1);每個Frame在其右上角都有三個控制圖標,分別代表將窗口最小化、窗口最大化和關閉的操作,其中最小化和最大化操作Frame可自動完成,而關閉窗口操作實現需要書寫有關的代碼,在我的程序中我采用的是對WINDOWS_CLOSING事件做出響應,調用dispose()方法關閉窗口。Frame也可以引發WindowsEvent類代表的窗口事件。相應源代碼為:
addWindowListener(new WindowAdapter()//窗口偵聽器,以從此窗口接收窗口事件
{public void windowClosing(WindowEvent e)//處理窗口關閉事件 { System.exit(0);} });}(2)窗體的主要結構的設計
我所設計的窗口的主要結構的特點就是每個窗口都對應著一個特定的功能。比如說報各種各樣的錯,還有各種查詢余額、取款、選擇服務等,所以它們都是由各種按鈕和文本框,標簽組成的,而聯系各個窗體成為一個整體的就是各個按鈕的監聽事件。所以整個設計就趨向簡單化了。
為了定義各個按鈕所對應的命令和操作,首先需要將各個按鈕注冊給實現了動作事件的監聽接口ActionListener的監聽者,然后為監聽者定義actionPerformed(ActionEvent e)方法,在這個方法中調用e.getSource()或e.getActionCommand()來判斷用戶點擊的菜單子項,并完成這個菜單子項定義的操作。4.3 各功能模塊設計 4.3.1 登陸頁面模塊設計
與ATM柜員機打交道比較多的,也是大家對安全比較關心的問題:密碼。所以第一個界面就是要輸入密碼和卡號才能繼續服務。我定義了文本框類的對象tf1,tf2。是用于輸入單行的文本;文本區調用public String getPassword()方法,獲取用戶想要的字符串。用來判斷輸入的密碼和卡號是否正確,如果不正確的話,則彈出密碼或卡號錯誤的警告框,并用dispose()關掉窗口。此模塊相應的部分源代碼為:
public void actionPerformed(ActionEvent e){ Account act;act=new Account(“000000”,“HuangHuai”,“123456”,50000);//初始化
/*選擇各種服務*/ if(e.getSource()== button1){ String number1,number2;//輸入的兩個卡號和密碼的變量
number1=tf1.getText().toString();number2 = new String(tf2.getPassword());
/*判斷兩次輸入的卡號和密碼是否正確*/
if((act.getCode().equals(number1))&&(act.getPassword().equals(number2))){
dispose();
new Selection(“選擇服務”,act);}else{
JOptionPane.showMessageDialog(this, “密碼或帳號錯誤!”,“賬戶提
示信息”,JOptionPane.ERROR_MESSAGE);
dispose();
new WindowBox(“ATM”);
} }
if(e.getSource()==button2){
System.exit(0);
dispose();//退出
} } 4.3.2 選擇服務模塊設計
在選擇服務模塊中,有各種ATM的服務功能,只要用戶在該界面中選擇按鈕,它就會彈出各個相應的界面。每一個按鈕都有監聽器,在選擇了按鈕后,java.awt.event中的ActionEvent類創建一個事件對象,并將它傳遞給方法public void actionPerformed(ActionEvent e)中的參數e,監視器就會知道所發生的事件,對此事件進行處理。其中的部分源代碼為:
p.add(new Label(“請選擇你要的服務”));
this.add(p);/*各種服務功能*/
buttonCUN = new Button(“ 存 款 ”);
p1.add(buttonCUN);
this.add(p1);
buttonQU = new Button(“ 取 款 ”);
p2.add(buttonQU);
this.add(p2);
buttonCHA = new Button(“ 查詢余額 ”);
p3.add(buttonCHA);
this.add(p3);
buttonTUI = new Button(“ 退 出 ”);
p4.add(buttonTUI);
this.add(p4);
buttonGAI = new Button(“ 修改密碼 ”);
4.3.3 取款模塊設計
在取款模塊中,和其他的界面也是同樣的結構。也是有一個文本框和一個按鈕還有標簽組成的。用戶在文本框中輸入他想取的數額,但是必須是100的倍數,而且每一次最多只能取5000塊。當然了取款的時候也不能超過卡里的余額,再就是卡里的余額不可以為負,否則就會彈出報錯的窗口。其方法為:
public String withdrawMoney(double money){
String str = null;
if(money<=0){
str = “取款數目須是正數!”;}else{
if(getMoney()<0){//判斷余額是否為負
str=“余額為負數!”;
}else if(money<=getMoney()){
if((money%100!=0)||(money>=5000)){//取錢數為100的倍數或不大于5000
str= “取款數目須是一百的整數倍!”;
}else{
setBalance(money);
str = “取款成功:余額為”+getMoney();
}
}else{
str = “余額不足!”;
}
} return str;} 4.3.4 修改密碼模塊設計
在修改密碼模塊中,首先你必須要輸入你的舊密碼是否正確,否則就會報錯。再一個就是要兩次輸入你的新密碼,且兩次藥匹配,否則也會報錯,然后再重新回到修改密碼的界面。在修改密碼時用到的方法為:
/*判斷舊密碼是是否正確*/ if(pwd2.equals(pwd1)){
if(pwd3.equals(pwd4)){//判斷兩次輸入的新密碼是個匹配
act.changePassword(pwd3);//啟用新的密碼
dispose();
JOptionPane.showMessageDialog(this, “修改密碼成功!”);
new Selection(“選擇”,act);//返回選擇服務窗口
}else{
this.setVisible(true);
dispose();
JOptionPane.showMessageDialog(this, “兩次輸入要修改的密碼不同,更新密碼失敗!”);
new Selection(“選擇”,act);
} }else{
this.setVisible(false);
dispose();
JOptionPane.showMessageDialog(this, “輸入密碼錯誤,更新密碼失敗!”);
new Selection(“選擇”,act);} } 4.3.5 退卡模塊設計
在退卡模塊設計中,這個方法就更加的簡單了,它只是用了if(e.getSource()==buttonTUI){//退出
System.exit(0);
dispose();
} 這個方法就可以實現了,這里就不再多說了。4.4 異常處理情況說明
(1)打開、保存文件時的異常處理 需要處理的異常:IOException(2)數據庫訪問時的異常處理 需要處理的異常:SQLException
(3)加載類時的異常處理
需要處理的異常:ClassNotFindException,當應用程序試圖使用Class類中的forName方法通過字符串名加載類時,但是沒有找到具有指定名稱的類的定義。(4)加載URL時的異常
需要處理的異常:MalformedURLException,拋出這一異常指示出現了錯誤的 URL。或者在規范字符串中找不到任何合法協議,或者無法分析字符串。5 系統實現與測試
(1)打開MyEclipse,編譯運行程序后,將會看到如下的界面,如圖2所示。如果輸入的密碼或卡號不正確的話就會報下圖的錯誤。
圖2 主界面—登陸頁面
(2)選擇服務界面效果
當輸入的密碼和卡號正確,單擊確定后就會進入到選擇服務的界面,如圖3所示。然后就可以選擇所需要的服務了。
圖3 選擇服務界面
(3)取款界面,如圖4所示。
圖4 取款界面
當輸入的錢數不是100的倍數或每一次大于5000時就會報圖5的錯誤。
圖5 輸入錯誤
當取款時如果超過卡里的余額的話就會報圖6的錯誤。
圖6 輸入錯誤2(4)查詢余額界面,如圖7所示。
圖7 查詢余額界面
(5)修改密碼界面,如下圖所示。
經過測試,所有的功能基本上都實現了,而且運行正常。6 課程設計總結
6.1 遇到的問題及解決辦法
在此次課程設計中,我遇到了一些問題,如:對于面向對象的方法了解不夠透徹,運用到實際的軟件開發中存在著困難;對于Java語言,只學習到了一些最基本的知識,這導致編寫程序時經常出現一些語法錯誤,而且要在短時間內用Java語言來設計一個具體的系統是一個較大的挑戰;還有對于正規開發一個系統的流程不熟悉,適應起來比
較慢,編寫各個模塊相對應的操作時,自己感覺難以動手,這表明所學的知識不能靈活運用到實際中。
對于以上的問題,自己有清楚的認識,解決辦法是需要大量閱讀相關的書籍,對于書上以及網站上下載的資料中的Java實例必須有清楚的理解,還有就是多跟精通此方面的老師和同學交流,取其精華。對于實際動手能力與系統開發的流程的適應,必須多進行實際的練習與操作,才能有大的進步。6.2 心得體會
在這次的學課程設計中,我主要運用了Java語言的界面設計、異常處理、、Awt控件、Swing控件,輸入輸出流等,綜合運用了Java語言。我深刻感受到了面向對象語言中類庫的強大功能,掌握了運用Java中的類實現某些基本功能,并學會了自己查詢使用類的方法,為以后的面向對象語言的自學奠定了基礎。
通過這兩個禮拜的課程設計我真的學到了很多的東西,當然這也和我的同學的幫助是離不開的。好了,下面就談一下我在這些天的體會吧: 在這次的課程設計中,主要是運用JAVA語言來編寫一個小的應用程序,當然還可以用其他的技術來輔助了。在這個小應用程序當中,我用了Java外還用了Swing控件。輸入輸出流等技術。由于以前學的不是很扎實,而且還有些知識我們都是沒有學過的,這就要求我們去查相關的書籍,還有就是和同學之間的交流。正因為這樣,才鍛煉了我的自學的能力,還有就是加深了我對各個知識點的認識,并且提高了我對專業的學習的興趣,為我以后的學習打下了基礎。此外,我還
感受到了面向對象語言的類庫的強大的功能,掌握了運用JAVA中的類實現某些基本功能,并學會了自己查詢使用類的方法,也就是要會用API文檔,為以后更好的學習面向對象語言奠定了基礎。通過將近兩周的努力,這次課程設計終于結束了,在這個過程當中,我學到了很多的知識,同時也感謝我的同學的幫助和指導。在以后的學習當中,我會更加努力的學習好專業知識,并將所學的知識用于實踐當中去,以便牢固掌握知識。參考文獻
[1] 王萌,劉婧,來賓著.JAVA程序設計[M]北京 冶金工業出版社,2004 [2] 黃聰明 精通 JAVA2程序設計[M]北京:清華大學出版社,2004.4 [3] 王文濤,袁海燕 JAVA實用程序設計100例[M]北京:人民郵電出版社,2005.5 [4] 雍俊海 JAVA程序設計[M]北京:清華大學出版社,2006.8 [5] 劉寶林 JAVA程序設計與案例[M]北京:高等教育出版社,2006.11 附錄
Account類:
package cn.com.account;/** * 帳戶
* 該類為實現客戶信息及部分功能 */
public class Account {
private String code = null;//信用卡號 private String name = null;//客戶姓名 private String password= null;//客戶密碼 private double money = 0.0;//卡里金額
public Account(){
}
public Account(String code,String name,String password,double money){
} public String getCode(){//取得卡號
return code;} public String getName(){//取得名字
return name;} /**
* 取得密碼 * @return */
public String getPassword(){ } /**
* 重置秘密的方法 */
public void changePassword(String pwd){ }
public double getMoney(){//取得余額
return money;} /**
* 得到剩余的錢的數目 */
private void setBalance(double mon){ } money-= mon;password = pwd;return password;this.code=code;this.name=name;this.password=password;this.money=money;this.code = “123456”;this.password = “123456”;
} /** * 取款設置 * 若成功顯示余額 * 不成功顯示提示信息 */
public String withdrawMoney(double money){ String str = null;if(money<=0){ str = “取款數目須是正數!”;}else{
if(getMoney()<0){//判斷余額是否為負
str=“余額為負數!”;}else if(money<=getMoney()){
if((money%100!=0)||(money>=5000)){//取錢數為100的倍數 str= “取款數目須是一百的整數倍!”;}else{
setBalance(money);str = “取款成功:余額為”+getMoney();} 或不大于5000
}else{
str = “余額不足!”;}
} return str;} /** * 存款設置 * 若成功顯示余額 * 不成功顯示提示信息 */
public String depositMoney(double money){
} String str = null;
if(money<0){ str =“存款數目須是正數!”;}else{ setBalance(-money);str = “存款成功:余額為”+getMoney();} return str;ChangePassword類:
package cn.com.frameui;import cn.com.account.Account;import javax.swing.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(“serial”)public class ChangePassword extends Frame implements ActionListener{
Panel panel1 = new Panel();Panel panel2 = new Panel();Panel panel3 = new Panel();Panel panel = new Panel();//TextField tf4,tf5,tf6;JPasswordField tf4,tf5,tf6;Button button;Account act;ChangePassword(String s,Account act){
super(s);this.act=act;
tf4 = new JPasswordField(6);tf5 = new JPasswordField(6);tf6 = new JPasswordField(6);button = new Button(“確定”);button.addActionListener(this);/*建立新密碼*/
panel1.add(new Label(“請輸入你的舊密碼:”));panel1.add(tf4);panel2.add(new Label(“請輸入你的新密碼:”));panel2.add(tf5);panel3.add(new Label(“請再次輸入新密碼:”));panel3.add(tf6);panel.add(button);this.add(panel1);this.add(panel2);this.add(panel3);this.add(panel);setLayout(new GridLayout(4,1));setBounds(200,200,300,200);this.setVisible(true);/**
* 窗口事件, 判斷窗口是否關閉 */
this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
System.exit(0);
}
}
} });/**
* 判斷事件源,看條件是否成立再修改密碼 */
public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ String pwd2,pwd3,pwd4,pwd1;char [] p2,p3,p4;pwd1 = act.getPassword();p2=tf4.getPassword();p3=tf5.getPassword();p4=tf6.getPassword();
pwd2 = new String(p2);pwd3 = new String(p3);pwd4 = new String(p4);
if(pwd2.equals(pwd1)){
if(pwd3.equals(pwd4)){//判斷兩次輸入的新密碼是個匹配
act.changePassword(pwd3);//啟用新的密碼 dispose();JOptionPane.showMessageDialog(this, “修改密碼成功!”);new Selection(“選擇”,act);//返回選擇服務窗口 }else{ this.setVisible(true);dispose();JOptionPane.showMessageDialog(this, “兩次輸入要修改的密碼不同, new Selection(”選擇“,act);}
this.setVisible(false);dispose();JOptionPane.showMessageDialog(this, ”輸入密碼錯誤,更新密碼失更新密碼失敗!“);}else{ 敗!”);
new Selection(“選擇”,act);} } }
GetBalance類:
package cn.com.frameui;import cn.com.account.*;import javax.swing.*;
import java.awt.*;import java.awt.event.*;@SuppressWarnings(“serial”)public class GetBalance extends Frame implements ActionListener{
Box baseBox, box1,box2;Button button;TextField tf;Account act;public GetBalance(String s,Account act){//構造函數
super(s);
}
public void actionPerformed(ActionEvent e){
double money;String str = null;/*
* 取款判定 */ this.act=act;button=new Button(“確定”);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2,1));panel1.add(new Label(“請輸入你想取錢的數目”));panel1.add(tf);panel.add(button);this.add(panel1);this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ }
System.exit(0);});setBounds(200,200,300,200);this.setVisible(true);
if(tf.getText().toString().equals(“")){ str = ”取款數目不能為空!“;}else{
} money = Double.parseDouble(tf.getText().toString());str = act.withdrawMoney(money);
JOptionPane.showMessageDialog(this, str,”取款提示信息“,JOptionPane.PLAIN_MESSAGE);
} this.setVisible(false);new Selection(”選擇服務“,act);}
Query類:
package cn.com.frameui;import cn.com.account.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(”serial“)public class Query extends Frame implements ActionListener{
Button button;Account act;public Query(String s,Account act){//構造函數
super(s);
this.act = act;
button=new Button(”確定“);
Panel panel1 = new Panel();Panel panel = new Panel();panel1.add(new Label(”你的余額為: “ + act.getMoney()));//查詢余額的方法
this.add(panel1);this.add(panel);
button.addActionListener(this);panel.add(button);
this.setLayout(new GridLayout(2,1));this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
}
}
}
System.exit(0);});setBounds(200,200,200,150);setVisible(true);public void actionPerformed(ActionEvent e){
} if(e.getSource()==button){ dispose();new Selection(”選擇服務“,act);//返回選擇服務窗口
} Selection類:
package cn.com.frameui;import cn.com.account.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(”serial“)public class Selection extends Frame implements ActionListener{
Button buttonCUN,buttonQU,buttonCHA,buttonTUI,buttonGAI;Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();Panel p4 = new Panel();Panel p5 = new Panel();Panel p = new Panel();Account act;
public Selection(){} public Selection(String s,Account act){
super(s);this.act=act;this.setLayout(null);this.setLayout(new GridLayout(6,1));p.add(new Label(”請選擇你要的服務“));this.add(p);buttonCUN = new Button(” 存 款 “);p1.add(buttonCUN);this.add(p1);buttonQU = new Button(” 取 款 “);p2.add(buttonQU);/*各種服務功能*/
} this.add(p2);buttonCHA = new Button(” 查詢余額 “);p3.add(buttonCHA);this.add(p3);buttonTUI = new Button(” 退 出 “);p4.add(buttonTUI);this.add(p4);buttonGAI = new Button(” 修改密碼 “);p5.add(buttonGAI);this.add(p5);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ System.exit(0);} });buttonCUN.addActionListener(this);buttonQU.addActionListener(this);buttonCHA.addActionListener(this);buttonTUI.addActionListener(this);buttonGAI.addActionListener(this);setBounds(150,150,300,200);setVisible(true);validate();public void actionPerformed(ActionEvent e){
if(e.getSource()==buttonCUN){//存款
dispose();new SetBalance(”存款款“,act);
}else if(e.getSource()==buttonQU){//取款
dispose();new GetBalance(”取款“,act);
}else if(e.getSource()==buttonCHA){//查詢余額
dispose();new Query(”查詢余額“,act);
}else if(e.getSource()==buttonTUI){//退出
System.exit(0);dispose();
}
} }else if(e.getSource()==buttonGAI){//修改密碼
dispose();new ChangePassword(”修改密碼“,act);
} SetBalance類:
package cn.com.frameui;import cn.com.account.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(”serial“)public class SetBalance extends Frame implements ActionListener{
Box baseBox, box1,box2;Button button;TextField tf;Account act;public SetBalance(String s,Account act){//構造函數
super(s);
}
public void actionPerformed(ActionEvent e){ this.act=act;button=new Button(”確定“);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2,1));panel1.add(new Label(”請輸入你想存款的數目“));panel1.add(tf);panel.add(button);this.add(panel1);this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ }
System.exit(0);});setBounds(200,200,300,200);this.setVisible(true);
double money;String str = null;if(tf.getText().toString().equals(”“)){ str = ”存款數目不能為空!“;}else{
} money = Double.parseDouble(tf.getText().toString());str = act.depositMoney(money);
JOptionPane.showMessageDialog(this, str,”存款提示信息“,JOptionPane.INFORMATION_MESSAGE);
} dispose();this.setVisible(false);new Selection(”選擇服務“,act);} WindowBox類:
package cn.com.frameui;import cn.com.account.Account;import javax.swing.*;
import java.awt.*;import java.awt.event.*;/**
* 登陸頁面首窗口 */
@SuppressWarnings(”serial“)public class WindowBox extends Frame implements ActionListener{
box1= Box.createVerticalBox();box1.add(new Label(”請輸入您的卡號“));//輸入卡號 box1.add(Box.createVerticalStrut(8));box1.add(new Label(”請輸入您的密碼“));//輸入密碼 box2=Box.createVerticalBox();Box baseBox,box1,box2;TextField tf1;JPasswordField tf2;Button button1;Button button2;public WindowBox(String s){//構造方法
super(s);tf1 = new TextField(6);tf2 = new JPasswordField(6);
} box2.add(tf1);
box2.add(Box.createVerticalStrut(8));box2.add(tf2);
baseBox=Box.createHorizontalBox();baseBox.add(box1);baseBox.add(Box.createHorizontalStrut(10));baseBox.add(box2);add(baseBox);button1= new Button(”確定“);//加入按鈕 button1.addActionListener(this);add(button1);
button2 = new Button(”退卡“);//退卡按鈕 button2.addActionListener(this);add(button2);setLayout(new FlowLayout());/*監聽器*/
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ System.exit(0);} });setBounds(120,125,300,200);setVisible(true);public void actionPerformed(ActionEvent e){ Account act;act=new Account(”000000“,”HuangHuai“,”123456“,50000);//初始化
/*選擇各種服務*/
if(e.getSource()== button1){ String number1,number2;//輸入的兩個卡號和密碼的變量 number1=tf1.getText().toString();number2 = new String(tf2.getPassword());
/*判斷兩次輸入的卡號和密碼是否正確*/
if((act.getCode().equals(number1))&&(act.getPassword().equals(num dispose();ber2))){ new Selection(”選擇服務“,act);}else{
JOptionPane.showMessageDialog(this, ”密碼或帳號錯誤!“,”賬戶提示信息“,JOptionPane.ERROR_MESSAGE);dispose();
new WindowBox(”ATM“);} }
if(e.getSource()==button2){
System.exit(0);
dispose();//退出
} } }
package cn.com.test;import cn.com.frameui.*;public class ATM { /**
* 主測試程序
* @param args
*/
public static void main(String[] args){
new WindowBox(”ATM");} }
第三篇:ATM自助取款機系統java代碼
public void actionPerformed(ActionEvent e)
//界面顯示控制 {
String IC_Number=“";
String password=”“;String IC_No=”“;
z30.setVisible(false);
float
leftmoney=0;
float
moneys=0;
float mon=0;
float money1=0;
float money2=0;
if(true)
{int No_50=0,No_100=0;
String strin=”select NO_50,NO_100 from ATM ATM_ID='123456789'“;ResultSetrsSQLSelect=executeQuery(strin);try{ if(rsSQLSelect.next())
{
No_50=Integer.parseInt(rsSQLSelect.getString(”NO_50“));
No_100=Integer.parseInt(rsSQLSelect.getString(”NO_100“));
where
}
}
catch(Exception er){System.out.println(”查詢ATM機信息出錯!“);}
if(No_50==0&&No_100==0)
{
z1.setVisible(false);
t1.setText(”對不起,本ATM自動取款機暫停服務!“);cl.show(c,”1“);
}
}
cl.show(c,”1“);
if(e.getSource()==z1)
{
t3.setText(”“);
text1.setText(”“);cl.show(c,”2“);
}
if(e.getSource()==z4||e.getSource()==z6||e.getSource()==z11||e.getSource()==z16||e.getSource()==z18||e.getSource()==z22)
{ closeDBConnection();cl.show(c,”1“);
}
if(e.getSource()==z2)
{ closeDBConnection();System.exit(0);
}
if(e.getSource()==z3){ IC_Number=text1.getText().trim();
if(getname(IC_Number))
{z5.setVisible(true);
pw1.setVisible(true);
t4.setVisible(true);
pw1.setText(”“);
t5.setText(”“);cl.show(c,”3“);
}
else
{
t3.setText(”您輸入的卡號不存在,請重新輸入!“);cl.show(c,”2“);
}
}
if(e.getSource()==z5){
password=pw1.getText().trim();IC_Number=text1.getText().trim();
if(!login(IC_Number,password))
{
t5.setText(”您輸入的密碼錯誤,請重新輸入!“);
pw1.setText(”“);
n--;cl.show(c,”3“);
}
else
{
t5.setText(”“);cl.show(c,”4“);
}
if(n<0)
{
n=2;
t5.setText(”您已經三次輸入錯誤密碼,謝謝您的使用,歡迎下次光臨!“);
z5.setVisible(false);
pw1.setVisible(false);
t4.setVisible(false);cl.show(c,”3“);
}
}
if(e.getSource()==z7)
{
t33.setText(”“);cl.show(c,”5“);
}
if(e.getSource()==z8)
//余額查詢 { DBAccess d=new DBAccess();
String str3=”“;
String stri=”“;IC_Number=text1.getText().trim();
t29.setText(IC_Number);leftmoney=getmoney(IC_Number);
t30.setText(Float.toString(leftmoney));stri=”select bank_name from IC,bank where IC.bank_NO=bank.bank_NO and IC_ID='“+IC_Number+”'“;ResultSetrsSQLSelect=d.executeQuery(stri);try{
if(rsSQLSelect.next())
{
str3=rsSQLSelect.getString(”bank_name“);
//d.commit();
}
} catch(Exception er){}
t32.setText(str3);cl.show(c,”10“);
}
if(e.getSource()==z9)
{
t23.setText(”“);cl.show(c,”9“);
}
if(e.getSource()==z10)
{
t28.setText(”“);cl.show(c,”11“);
}
if(e.getSource()==z12){ DBAccess d=new DBAccess();IC_Number=text1.getText().trim();fetchmoney=Integer.parseInt(text2.getText());
if(fetchmoney<=0)
{
t9.setText(”取款金額非法!請重新輸入!“);
text2.setText(”“);cl.show(c,”6“);
return;
}
if(fetchmoney>1000)
{
t9.setText(”每次交易金額最大為1000元!“);
text2.setText(”“);cl.show(c,”6“);return;
}
if(fetchmoney%50!=0)
{
t9.setText(”取款金額只能為50的倍數!“);
text2.setText(”“);cl.show(c,”6“);return;
} leftmoney=getmoney(IC_Number);
if(fetchmoney>leftmoney)
{
t9.setText(”您的余額不足,請重新輸入取款金額!“);
text2.setText(”“);cl.show(c,”6“);return;
}
int No_50=0,No_100=0,x_50=0,x_100=0,mo=0;
String str1=”select NO_50,NO_100 from ATM where ATM_ID='123456789'“;ResultSetrsSQLSelect=d.executeQuery(str1);try{ if(rsSQLSelect.next())
{
No_50=Integer.parseInt(rsSQLSelect.getString(”NO_50“));
No_100=Integer.parseInt(rsSQLSelect.getString(”NO_100“));
}
}
catch(Exception er){System.out.println(”查詢ATM機信息出錯!“);}
x_100=fetchmoney/100;
if(No_100 { mo=fetchmoney-No_100*100; x_50=mo/50; if(x_50>No_50) { t9.setText(”取款機現鈔不足!“); text2.setText(”“);cl.show(c,”6“); return; } else { No_50=No_50-x_50; No_100=0; } } else { No_100=No_100-x_100; x_50=(fetchmoney-x_100*100)/50; if(x_50>No_50) { t9.setText(”取款機50面值現鈔不足!“); text2.setText(”“);cl.show(c,”6“); return; } else {No_50=No_50-x_50;} } String str2=”update ATM set NO_50=“+No_50+” where ATM_ID='“+ATM_id+”'“; String str3=”update ATM set NO_100=“+No_100+” where ATM_ID='“+ATM_id+”'“;d.executeUpdate(str2);d.executeUpdate(str3); setmoney(fetchmoney,IC_Number); t12.setText(Float.toString(fetchmoney));cl.show(c,”7“); text2.setText(”"); 一、ATM取款機常見故障及解決方法 ATM常見故障如能及時排除,可減少停機時間,因此遇到下列故障可按照相應步驟處理。 (一)用戶打印機問題及處理方法 1、用戶憑條卡在面板內 (1)檢查憑條出口是否有異物堵塞; (2)檢查面板有無受力變形; (3)拉出打印機檢查傳送部分有無異常,推入打印機重試; (4)如仍卡紙, 需進行專業維修。 2、打印紙堵塞在切紙位置 (1)松開傳送部件; (2)拉動藍色手柄,使打印頭露出; (3)清除堵塞的紙; (4)查看打印機控制板上有無黃燈常亮; (5)如無,重試打印機; (6)如黃燈長亮,需進行專業維修。 3、憑條雙倍長度 (1)檢查打印紙上的黑色標記是否清晰; (2)檢查黑標方向是否正確; (3)重試,如仍不正常, 需進行專業維修。 (二)流水打印機問題及處理方法 4、打印紙堵塞在切紙位置 (1)清除堵塞的紙; (2)查看打印機控制板上有無黃燈常亮; (3)如無,重試打印機; (4)如黃燈長亮,需進行專業維修。 (三)讀卡機問題及處理方法 1、讀卡機堵塞 (1)按照關機程序關機; (2)取出讀卡機; (3)查看讀卡機內有無異物,有則取出; (4)開機,執行讀卡機清洗程序; (5)重試讀卡機。 2、卡不能插入 (1)按程序關機; (2)取出讀卡機,查看有無異常; (3)如流水打印機上無讀卡機故障信息,檢查面板插卡口有無異常; (4)檢查讀卡機口有無異常; (5)裝回,開機重試;如仍不正常, 需進行專業維修。 (四)吐鈔機問題及處理方法 1、出鈔不整齊 (1)拉出吐鈔機,檢查送鈔皮帶是否脫落; (2)檢查出鈔口有無異常(如里面低,外面高); (3)檢查錢箱內錢幣是否整齊; (4)重試, 如仍不正常, 需進行專業維修。 2、只有挖鈔聲,錢不吐出來 (1)檢查錢箱內是否有錢; (2)檢查廢鈔箱內的錢幣質量; (3)如上述正常,做加鈔程序中的吐鈔機診斷; (4)如診斷不能通過,將錢箱換一個通道; (5)再做吐鈔機診斷; (6)如仍不正常, 需進行專業維修。 3、吐鈔機報“錢幣堵塞” (1)按程序關機; (2)拉出吐鈔機; (3)查看有無錢幣卡在上面傳送帶; (4)查看有無錢幣卡在側面傳送帶; (5)取出錢箱,查看通道內有無錢幣堵塞; (6)清除堵塞的錢幣; (7)重新裝回錢箱,開機重試; (8)如故障依舊,檢查傳感器; (9)更換傳感器或進行專業維修。 4、廢鈔箱卷簾門裂開 (1)取出廢鈔箱卷簾門; (2)如僅前三條裂開,裁下裂開的那條; (3)裝回卷簾門,即可; (4)如已裁下三條以上,更換。 (五)其它故障 1、通訊不通 (1)按程序關機; (2)檢查通訊線是否插好; (3)開機,注意系統上電啟動時有無提示相關信息; (4)請電信局檢查線路; (5)進行專業維修。 2、屏幕無顯示 (1)關機; (2)檢查顯示信號線是否接好; (3)開機,觀測是否有系統開機自檢信息; (4)如有,表明硬件無問題,重裝軟件; (5)如無, 進行專業維修。 二、存取款機常見故障的原因及解決方法 1、磁條讀寫器吞卡 磁條讀寫器吞卡是由于以下四種情況造成: (1)主機命令 (2)彈卡超時不取走 (3)用戶操作超時 (4)插卡動作不當造成。 如果是主機命令或彈卡超時造成吞卡,客戶會得到一張打印的客戶憑條,憑條上有該卡的卡號和吞卡原因。 如果是由于插卡動作不當或操作超時不取造成吞卡,客戶也同樣能夠得到一張客戶憑條,但該憑條上面沒有卡號和吞卡原因。 2、存款模塊回收箱不空 當回收箱不空時,存款交易暫停,以避免其他客戶操作而產生的帳務不清。以下情況存款進入回收箱。 有識別不出的鈔票或用戶中途取消操作的情況下,存款退回到入鈔口,如果客戶沒有及時取走,機器將把入鈔口上全部鈔票打入回收箱。 客戶鈔票識別完畢,提交主機,在等待主機應答超時的情況下,把客戶提交的存款打入回收箱,其面值總額應該與客戶得到的客戶憑條相符。 3、存款模塊卡鈔票 當鈔票在中途卡住,存鈔模塊停止工作,只有排除故障之后,才能初始化繼續。當卡住鈔票,整個流水線全部停止。除了在鈔票卡住的部位,請檢查其前后流水線上是否有鈔票在中間。如果有則請旋轉綠色旋鈕,把鈔票取出。這時如果需要繼續正常使用存款模塊則需要重新啟動應用,或者清除存款箱。 4、取款模塊鈔箱安放不當 取款模塊的鈔箱分為兩種,回收箱和出鈔箱,在使用出鈔模塊之前需要對各出鈔箱進行序號設置,為鈔箱編號。以盡量減小鈔箱裝錯的可能性。當鈔箱安裝沒有到位,或者順序不符,系統能夠檢測到,并提示取款鈔箱出錯。這時需要重新安裝鈔箱,直到正確為止。 5、客戶插卡后沒有可做交易 金庫門打開的情況下,只能進行管理員卡類交易。請檢查金庫門是否關閉好。 系統只有查詢交易可以進行 系統缺少客戶憑條打印紙,則僅提供查詢服務。 6、沒有存款功能 存款模塊初始化失敗,請擰動管理員鑰匙,檢查設備狀態。 存款模塊回收箱中有鈔票,請檢查存款模塊中的回收箱。 存款功能在系統中沒有設置,擰動管理員鑰匙,修改系統參數為“存取款”或“僅存款”。 7、沒有取款功能 取款模塊初始化失敗。 鈔箱中鈔票數量低于最低限制數量。 取款功能在系統中沒有設置,擰動管理員鑰匙,修改系統參數為“存取款”或“僅取款”。 三、存折補登機常見故障及處理方法 (一)存折打印機故障 1、磁條讀寫故障,表現為磁條讀寫失敗 (1)原因分析1:有異物(如紙削)阻塞磁頭的水平移動 解決方法:清除異物 (2)原因分析2:磁條讀寫磁頭臟 解決方法:用異丙醇和酒精或隨機配送的清潔卡清洗磁頭 (3)原因分析3:打印機磁道讀寫參數與軟件系統不匹配 解決方法:更改打印機的磁條讀寫參數或軟件系統參數 (4)原因分析4:磁條讀寫電路故障 解決方法:更換磁條讀寫板 (5)原因分析5:磁條讀寫機械部分故障 解決方法:更換磁條讀寫組件 2、卡紙(折)、紙(折)進出困難或歪斜 (1)原因分析1:有異物阻塞進出紙槽 解決方法:清除異物 (2)原因分析2:打印機機架故障 解決方法:調整機架 3、打印機無打印動作,常見故障為放入存折后打印機無打印動作 (1)原因分析1:存折無補登項目 解決方法:無需處理 (2)原因分析2:打印機通信接口壞 解決方法:檢查聯機電纜是否損壞,如損壞更換之;更換打印機主板 (3)原因分析3:主機網絡通信故障 解決方法:檢查網絡通訊部分 (4)原因分析4:多用戶卡故障 解決方法:檢查在Windows系統內多用戶卡的IRQ值是否于BIOS設置值一致(推薦IRQ值取5);更換多用戶卡 不能進折或打印頭撞墻,或者開機打印頭來回移動 原因分析:由于長時間使用,灰塵過多造成光電參數丟失 解決方法:此時請設置光電參數。具體操作如下: (1)關閉電源,打開打印機的上蓋; (2)將打印頭移到打印機的最左邊; (3)按住面板上的三個鍵,同時打開電源,機械動作停止后,關上機蓋; (4)按操作面板上的STATION1鍵兩次,此時READY燈停止閃爍,并發出蜂鳴聲; (5)在進紙器槽中插入一張A4的紙并按一次STATION2鍵; (6)當打印機退出紙張后,再插入一張A4紙,打印機打印出光電參數值。 (二)觸摸屏故障 1、觸摸屏無反映,常見故障為觸摸屏幕鼠標無任何反映 (1)原因分析1:更換、移動、插拔觸摸屏的聯機接口后會造成觸摸屏失效,這是由于觸摸屏屬于非即插即用產品,因此硬件上的改變都有可能引起觸摸屏失效 解決方法:重新安裝觸摸屏驅動程序 (2)原因分析2:重新安裝、克隆操作系統,原因分析如上 解決方法:同上 (3)原因分析3:觸摸屏硬件故障 解決方法:更換觸摸屏控制卡、聯機電纜 2、觸摸屏不靈敏,常見故障為需要大力觸摸才有反映 原因分析:屏幕灰塵過多,或者有水滴在屏幕上都會造成不靈敏 解決方法:清潔屏幕 觸摸屏觸摸的位置發生偏移 解決方法:打開控制面板,調用校準程序,根據提示點擊3個圓點進行校準 (二)金屬鍵盤故障 1、鍵反應過靈敏,當按下某一數字鍵時幕顯示輸入兩個或多個相同數字 原因分析:在系統里設置按鍵重復時間過短 解決方法:打開“控制面板”里的“鍵盤”項,如圖所示把紅色部分按照圖中調整即可 2、按鍵經常無反應,常見故障為多個數字按鍵無反應 (1)原因分析1:鍵盤使用時間長,鍵盤膜片失效 解決方法:更換鍵盤膜片 (2)原因分析2:鍵盤電纜松脫或者損壞 解決方法:檢查接口是否松脫,電纜是否損壞,更換故障部分 3、整個鍵盤失效 (1)原因分析1:鍵盤控制板故障 解決方法:更換鍵盤控制卡 (2)原因分析2:PC機的鍵盤PS/2接口壞 解決方法:更換PC主板 (三)PC機及系統其他故障 1、不能開機 (1)原因分析1:PC機電源壞,常見故障為開機時CPU風扇不轉動 解決方法:更換PC電源 (2)原因分析2:PC機主板、CPU、內存及其他板卡故障都可能造成不能開機 解決方法:用替換法確定損壞部件進行更換 打開主機電源后PC機不能自動開啟,需手動開機 原因分析:BIOS中未設置自動上電開機功能 解決方法:手動開機進入BIOS設置界面,進入“Integrated Peripherals”(整合周邊設備)設置項,把選項“Power on Function”設置為“BUTTON ONLY”,把選項“PWRON After PWR-Fail”設置為“On”。(注:上述操作主要針對微星的主板MS-6153,其他型號主板的設置請參考相應主板的說明書) 2、不能進入操作系統或業務畫面 (1)原因分析1:硬盤產生壞區,無法正常啟動Windows系統 解決方法:格式化C盤,重新安裝Windows系統和應用程序 (2)原因分析2:系統中病毒 解決方法:使用殺毒軟件清除病毒。 河南經貿職業學院信息管理系《Java程序設計》課程設計報告 《Java語言程序設計》課程設計報告 題 目:設 計 者:班 級:學 號:指導教師:系 部:專 業: ATM機 何珍珍 張明月 10信息一班 210510113 210510152 魏艷銘 信息管理系 計算機應用技術 2011年 月 25 日 河南經貿職業學院信息管理系《Java程序設計》課程設計報告 ATM機設計報告 目錄 概述..........................................................................................................................................2 1.1 問題分析..........................................................................................................................2 1.2功能..................................................................................................................................2 2 總體設計...................................................................................................................................3 3 詳細設計...................................................................................................................................3 1.登錄界面Client()類結構介紹:........................................................................................3 2.卡號生成界面AtmDemo()類結構介紹:.................................................錯誤!未定義書簽。3.功能界面Main()類結構介紹:.........................................................................................4 4.存款的界面KeepMoney()和取款的界面GetMoney()結構介紹:...................................4 5.修改密碼界面Change()類結構介紹:.................................................錯誤!未定義書簽。7.查詢余額界面Yuxia.java()類結構介紹:...............................................................................5 4 實現..........................................................................................................................................5 1.運行環境.........................................................................................................................5 2.運行情況抓圖..................................................................................................................5 5 總結與體會................................................................................................................................7 6 參考文獻...................................................................................................................................7 7 附錄: 程序清單.........................................................................................錯誤!未定義書簽。 概述 1.1 問題分析 模擬ATM機基本操作功能:存款、取款、余額查詢、修改密碼等;初始賬戶10000元;修改密碼時必須修改兩次,確認后才可使用;取款的款項和存款的款項必須是100的整倍數; 1.2功能 1)模擬ATM機實現當用戶進入登陸頁面后,用戶需先點擊銀行開戶按鈕進行銀行開戶; 2)進入銀行開戶頁面之后,進行填寫客戶信息,系統會自動生成卡號,信息填寫完整后系統會自動保存用戶信息在生成的文件中,并返回登陸頁面進行登錄。 3)登陸成功之后進入ATM機操作頁面進行存款、取款、余額查詢、修改密碼,點擊一個按鈕都會顯示出對應的頁面。河南經貿職業學院信息管理系《Java程序設計》課程設計報告 總體設計 1、Client()類第一個登陸頁面主要包括:登陸賬號按鈕、銀行開戶按鈕、重新登錄按鈕、退出系統按鈕; 2、AtmDemo()類第二個登陸頁面主要進行用戶資料填寫主要包括:卡號、密碼、確認密碼、用戶名、性別、存款金額標簽;生成卡號、確認開戶、取消開戶按鈕; 3、Main()類第二個登陸頁面主要設置安放按鈕,主要包括:取款、存款、修改密碼、查詢余額、退出該界面按鈕并對所有按鈕進行監聽; 4、GetMoney()類第三個登陸頁面主要進行取款設置主要包括:提款金額數目的數字按鈕,當點擊相應的按鈕時,提取金額框內顯示相應的取款金額;當提款的金額超出卡內總金額時,取款失敗; 5、KeepMoney()類第四個登陸頁面主要進行存款設置主要包括:存款金額數目的數字按鈕,當點擊相應的按鈕時,存款金額框內顯示相應的存款金額; 6、Change()類第五個登陸頁面主要進行密碼修改的設置主要包括:設置“確認”“取消”“返回主頁面”三個按鈕;兩次輸入新的密碼,當兩次密碼相同時點擊“確認”按鈕修改密碼成功,第二次進行賬戶登錄時使用修改后的密碼 7、Yuxia()類第六個登陸頁面主要進行余額查詢的設置主要包括:當點擊“查看余額”按鈕時查看存款、取款后卡內的總金額,顯示在文本框內;當點擊“返回主頁面”時返回Main頁面; 8、Account()類主要保存文件的卡號,密碼和賬戶金額,對進行數據信息在不同的類內調用傳遞; 詳細設計 1.登錄界面Client()類結構介紹: 主要包括:三個標簽:“歡迎登錄ATM機”,“卡號”,“密碼” 兩個文本框:JTextField和JPasswordField四個按鈕:“登陸賬號”,“銀行開戶”,“重新登錄”,“退出系統”對頁面使用了空布局。對文本框進行監聽,設置卡號只能為數字,且只能輸入8位。設置密碼框不為空。給四個按鈕創建監聽ActionListener,四個按鈕實現的功能: 登陸賬號:第一次進入登錄界面時,當點擊“登錄賬戶”彈出對話框:“請進行銀行開戶”。 重新登錄: 當點擊“重新登錄”按鈕,用setText(“”)把文本框和密碼框為空。 銀行開戶: 當點擊“銀行開戶”按鈕時,界面跳到銀行開戶的界面里。 退出系統:當點擊“退出系統”時,彈出對話框“確定要退出ATM系統?”點擊是,退出系統,點擊否,留在該界面。 當銀行開戶成功后,再次輸入卡號和密碼,如果其中一個或全部錯誤,彈出對話框:河南經貿職業學院信息管理系《Java程序設計》課程設計報告 “請核對你的卡號和密碼,重新登錄”,并不設置文本框為空。2.卡號生成界面AtmDemo()類結果介紹: 繼承Jframe創建銀行卡號開戶窗體,創建監聽;應用空布局設置JLabel標簽,JTextField, JPasswordField,JButton,JComboBox復選按鈕框在窗體中的位置當點擊“生成卡號”按鈕時系統會自動生成卡號(inti=(int)(Math.random()*100000000);)對生成的卡號進行數據保存(account)由Account傳遞到登陸頁面,讓生成的卡號與登陸的卡號相同在登錄頁面進行登錄操作; 設置密碼與確認密碼框中的內容相等,如果不相同提示(“JOptionPane.showConfirmDialog(this,“兩次填寫密碼不同,請重新輸入正確的密碼!”,“提示”,JOptionPane.OK_CANCEL_OPTION);”),對生成的密碼進行數據保存(account)讓后傳遞到ATM—Client頁面進行密碼連接; 設置存款金額框存款金額為100的整倍數;當點擊“取消開戶”按鈕時,所有文本框內容為空;當點擊“確認開戶”按鈕時,如果資料填寫不完整,系統進行提示(elseif(jtf1.getText().equals(“")||jtf2.getText().equals(”“)||jtf3.getText().equals(”“)||s3.equals(”“)||s2.equals(”“)){ JOptionPane.showMessageDialog(this,”開戶失敗,資料沒填寫完整!“);)反之,頁面轉到登陸頁面; 3.功能界面Main()類結構介紹: 主要包括:一個標簽:“荷塘月色ATM機正在為您服務…”五個按鈕:“取款”、“存款”、“查詢余額”、“修改密碼”、“退出該界面”對頁面使用了空布局。 對前四個按鈕進行監聽,當點擊其中任一個按鈕時,進入到該按鈕實現功能的界面里,當點擊“退出該界面”,彈出對話框“確定返回登錄面?” 點擊是,退出該界面,點擊否,留在該界面。 4.存款的界面KeepMoney()和取款的界面GetMoney()結構介紹: 主要包括:十個按鈕:七個固定存取款錢數的按鈕和一個“自定義”(存取款的錢數)按鈕,還有“確定”按鈕和“返回主頁面”的按鈕。一個標簽:“您提?。ù嫒耄┑慕痤~數:一個文本框;對頁面使用了空布局。給八個存取款的按鈕進行監聽。實現的功能: 當點擊七個固定存取款的按鈕時,按鈕上的錢數顯示在文本框中,當點擊自定義按鈕時,可以在文本框中手動輸入錢數。 當點擊“返回主頁面”按鈕時,結束該界面的操作,返回Main頁面里。 文本框:① 文本框設置為不可編輯。當點擊存取款按鈕時,錢數顯示在文本框中,但不能手動修改文本框中的內容。當點擊自定義按鈕時,文本框可以手動輸入,文本框中輸入的存取款的錢數必須是100的倍數,最少為100,最多為5000元,否則彈出對話框進行提醒,存取錢不成功。 ② 自定義一個監聽類,對文本框進行監聽,自定義輸入錢數時,文本框中只能輸入數字,且最多可輸入四位數。當文本框為空時,點擊“確定”按鈕,彈出對話框:“請輸河南經貿職業學院信息管理系《Java程序設計》課程設計報告 入存(取)款金額”。 在存款KeepMoney.java界面時,當點擊“確定”按鈕,彈出對話框“您已存款**元,余額為**元”。 在取款GetMoney.java界面時,當點擊“確定”按鈕時,如果賬戶金額大于或等于提取金額時,彈出對話框“您已取款**元,余額為**元”。如果賬戶金額小于提取金額時,彈出對話框“余額不足,取錢失敗”,并獲取余額數,停止金額的運算。以防止取款不成功,但已透支的現象。5.修改密碼界面Change()類結構介紹: 繼承JFrame創建修改密碼窗體,設置窗體的空布局;對確認密碼框進行監聽和數據傳遞保存(account.setPwd(s2);)傳遞到Client()類內;當兩次輸入密碼相同時點擊“確認”按鈕密碼修改成功,下次登錄使用新密碼進行登錄。;點擊“取消”按鈕文本框內容消失為空;點擊“返回主頁面”按鈕返回至Main()(else if(e.getSource()==jb3){new Main();this.setVisible(false);); 6.查詢余額界面Yuxia.java()類結構介紹: 創建查詢余額窗體,應用空布局設置布局;對按鈕創建監聽(addActionListener)當點擊“查看余額”按鈕時顯示卡內當前的余額(運用Account類進行數據傳遞實現(jtf1.setText((account.getCountmoney())+”“);))實現 1.運行環境 MyEclipse6.5 2.運行情況抓圖 2 河南經貿職業學院信息管理系《Java程序設計》課程設計報告 4 河南經貿職業學院信息管理系《Java程序設計》課程設計報告 總結與體會 此次實訓基本把我們本學期所學的內容進行綜合應用,讓我們更加容易簡單的了解體驗到了未來工作的一般狀況,鍛煉了我們的實際操作能力,同時也在一定程度上增加了同學們對Java語言學習的信心,一些簡單的小游戲,通過運用自己所學也是可以實現的,讓我們不在對編程感覺那么神秘。 團隊合作與交流很重要,“團結就是力量”在本次項目開發中真的體會得到,在做項目時,小組成員要知道本小組所做項目的基本構想框架,要做什么、實現什么。如果有自己的想法就要和自己的伙伴進行交流。參考文獻 【1】魏艷銘,Java程序設計,河南經貿職業學院:ATM機視頻提示,2011.6 【2】網絡資源:http://www.tmdps.cn/ 【3】《Java程序設計精講》,北京:清華大學出版社,2010.9 7 附錄:程序清單 1.Client.java//ATM機的登錄界面 package client;import javax.swing.*;import client.GetMoney.myKeyListener;import java.awt.*;import java.awt.event.*;import java.net.URL;public class Client extends JFrame implements ActionListener{ JLabel jl1,jl2,jl3;JLabel jl;//添加圖片的標簽 JTextField jtf;JPasswordField jpf;JButton jb1,jb2,jb3,jb4;static Account account;public Client(Account account){ super(”ATM-Client“); this.account=account;setLayout(null); jl1=new JLabel(”歡迎進入“荷塘月色ATM 機”“);Font f=new Font(”華文新魏“,Font.BOLD,24);jl1.setForeground(Color.BLUE);jl1.setFont(f);河南經貿職業學院信息管理系《Java程序設計》課程設計報告 jl2=new JLabel(”卡號:“);jl3=new JLabel(”密碼:“);jtf=new JTextField(8);jtf.addKeyListener(new myKeyListener(jtf));jpf=new JPasswordField();jb1=new JButton(”登陸賬號“);jb1.addActionListener(this);jb2=new JButton(”銀行開戶“);jb2.addActionListener(this);jb3=new JButton(”重新登錄“);jb3.addActionListener(this);jb4=new JButton(”退出系統“);jb4.addActionListener(this); //添加圖片 jl= new JLabel(); URL resource = this.getClass().getResource(”/images/6.jpg“); ImageIcon bgImage=new ImageIcon(resource);//創建圖標 jl.setIcon(bgImage); jl.setBounds(0,0,400,400); jl1.setBounds(25, 40, 400, 40);jl2.setBounds(50, 85, 60, 40);jl3.setBounds(50, 150, 60, 40);jtf.setBounds(120, 90,150, 30);jpf.setBounds(120, 155,150,30);jb1.setBounds(0, 250, 90, 30);jb2.setBounds(100, 250, 90,30);jb3.setBounds(200, 250, 90,30);jb4.setBounds(300, 250, 90, 30); this.add(jl1);this.add(jl2);this.add(jtf);this.add(jl3);this.add(jpf);this.add(jb1);this.add(jb2);this.add(jb3);this.add(jb4);this.add(jl); this.setSize(400,400);河南經貿職業學院信息管理系《Java程序設計》課程設計報告 } this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);public static void main(String[] args){ new Client(account);} public void actionPerformed(ActionEvent e){ if(e.getSource()==jb1){ } String s1=jtf.getText();String s2=new String(jpf.getPassword());if(s1.equals(account.ip)&&s2.equals(account.pwd)){ new Main(account);this.setVisible(false);}else{ } JOptionPane.showMessageDialog(this, ”請進行銀行開戶“);JOptionPane.showMessageDialog(this,”請核對您的卡號和密碼,重新登錄“);if(account!=null){ }else if(account==null){ }else if(e.getSource()==jb2){ //連接到的AtmDemo.java } //創建jtf的監聽,使jtf只能輸入8個數字,且只能輸入數字 class myKeyListener extends KeyAdapter{ private JTextField jtf;private int length;new AtmDemo();this.setVisible(false);}else if(e.getSource()==jb3){ jtf.setText(”“);jpf.setText(”“);}else if(e.getSource()==jb4){ //設置jb4——退出系統 } int i=JOptionPane.showConfirmDialog(this,”您確定要退出ATM機系統?“, if(i==1){ } return;”提示“,JOptionPane.YES_NO_OPTION);System.exit(0);河南經貿職業學院信息管理系《Java程序設計》課程設計報告 } 2.AtmDemo.java//ATM卡號生成頁面 package client;import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.Socket;import java.util.Calendar;import java.net.URL;import javax.swing.*; public class AtmDemo extends JFrame implements ActionListener { JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7,jl8; JTextField jtf1,jtf2,jtf3;JPasswordField jpf1,jpf2;JButton jb1,jb2,jb3;JComboBox jcb;BufferedReader br;JLabel msg;Account account;int totalmoney=10000;int money; public AtmDemo(){ super(”銀行卡號開戶“);this.setLayout(null); } public myKeyListener(JTextField jtf){ } this.jtf = jtf;this.length = 8;public myKeyListener(JTextField jtf,int length){ this.jtf = jtf;} { } boolean b = Character.toString(e.getKeyChar()).matches(”d“);if(!b || jtf.getText().length()== length){ e.consume();} this.length = length;public void keyTyped(KeyEvent e)河南經貿職業學院信息管理系《Java程序設計》課程設計報告 jl1=new JLabel(”卡號開戶“);jl2=new JLabel(”卡號:“);jl3=new JLabel(”密碼 :“);jl4=new JLabel(”確認密碼 :“);jl5=new JLabel(”用戶名:“);jl6=new JLabel(”性別:“);jcb = new JComboBox(); jcb.addItem(”男“);jcb.addItem(”女“);jl7=new JLabel(”存款金額:“);jb1=new JButton(”生成卡號“);jb2=new JButton(”確認開戶“); jb3=new JButton(”取消開戶“); jtf1=new JTextField(16); jtf1.setEditable(false);//設置文本框不可見 jtf2=new JTextField(4); jtf3=new JTextField(); jpf1=new JPasswordField(6); jpf2=new JPasswordField(6); msg=new JLabel(”“); msg.setForeground(Color.RED); //監聽 jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this); jtf3.addKeyListener(new myKeyListener(jtf3)); jl1.setForeground(Color.RED); jl1.setFont(new Font(”宋體“, Font.PLAIN, 40)); //添加圖片 jl8= new JLabel(); URL resource = this.getClass().getResource(”/images/8.jpg“); ImageIcon bgImage=new ImageIcon(resource);//創建圖標 jl8.setIcon(bgImage); jl8.setBounds(0,0,400,400); jl1.setBounds(105, 10, 225, 41);//卡號開戶 jl2.setBounds(40, 60, 81, 18);//卡號 jb1.setBounds(297, 60, 91, 18);//生成卡號 jl3.setBounds(40, 90, 81, 18);//密碼 jl4.setBounds(40, 120, 81, 18);//確認密碼 jl5.setBounds(40, 150, 81, 18);//用戶名 河南經貿職業學院信息管理系《Java程序設計》課程設計報告 jl6.setBounds(40, 180, 81, 15);//性別 jcb.setBounds(100, 180, 110, 18);//復選按鈕 jl7.setBounds(40, 210, 81, 15);//存款金額 jtf1.setBounds(100, 60, 190, 18);//卡號框 jpf1.setBounds(100, 90, 170, 18);//密碼框 jpf2.setBounds(100, 120, 150, 18);//確認密碼框 jtf2.setBounds(100, 150, 130, 18);//用戶名框 jtf3.setBounds(100, 210, 90, 18);//存款金額框 jb2.setBounds(80, 300,100, 25);//確認開戶 jb3.setBounds(230, 300, 100, 25);//取消開戶 msg.setBounds(150,260,270,60); add(jb1); add(jb2); add(jb3);add(jcb);add(jl1);add(jl2);add(jl3);add(jl4);add(jl5);add(jl6);add(jl7);add(jpf1);add(jpf2);add(jtf1);add(jtf2);add(jtf3);add(msg);add(jl8); this.setSize(400,400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);} public static void main(String args[]){ new AtmDemo();} public void actionPerformed(ActionEvent e){ String id1=jtf1.getText();//卡號 String s1=new String(jpf2.getPassword());//確認密碼 int mone=money;//生成的金額數 account=new Account(id1,s1,mone);//把生成的卡號、確認密碼、生成金額數保存在河南經貿職業學院信息管理系《Java程序設計》課程設計報告 account類內 try{ //創建文件 File f=new File(”message.txt“); if(e.getSource()==jb1){ //生成卡號 jtf1.setEditable(true); int i=(int)(Math.random()*100000000); jtf1.setText(Integer.toString(i)); jtf1.setEditable(false); msg.setText(”“);//消失信息提示 JOptionPane.showMessageDialog(this,”卡號已生成,請記住卡號,以便登陸!“); } else if(e.getSource()==jb2){ //確定開戶 String s3=new String(jpf1.getPassword());String s2=new String(jpf2.getPassword()); if(!s3.equals(s2)){ } JOptionPane.showConfirmDialog(this,”兩次填寫密碼不同,請重新輸入正確的密碼!“,”提示“,JOptionPane.OK_CANCEL_OPTION);jpf2.setText(null); return; else if(jtf1.getText().equals(”“)||jtf2.getText().equals(”“)||jtf3.getText().equals(”“)||s3.equals(”“)||s2.equals(”“)){ JOptionPane.showMessageDialog(this,”開戶失敗,資料沒填寫完整!“); } else if(Integer.parseInt(jtf3.getText())%100!=0){ JOptionPane.showMessageDialog(this,”存款金額必須是100的倍數!“); jtf3.setText(”“);} else if(!jtf1.getText().equals(”“)&&!jtf2.getText().equals(”“)&&!jtf3.getText().equals(”“)&&!s3.equals(”“)&&!s2.equals(”“)){ } money=totalmoney+(Integer.parseInt(jtf3.getText())); JOptionPane.showMessageDialog(this,”您已開戶成功,卡內金額為:“+money);account.setCountmoney((totalmoney+(Integer.parseInt(jtf3.getText()))));new Client(account);this.setVisible(false);河南經貿職業學院信息管理系《Java程序設計》課程設計報告 //寫入客戶信息保存在message.txt中 try{ FileWriter fw = new FileWriter(f); BufferedWriter bw=new BufferedWriter(fw); String s = ”卡號:“+jtf1.getText()+”t“+”用戶名:“+jtf2.getText()+”t“ +”密碼:“+account.getPwd(); bw.write(s); bw.newLine(); bw.close(); fw.close(); }catch(IOException ex){ ex.printStackTrace();} } else if(e.getSource()==jb3){ jpf1.setText(null); } //只允許輸入數字的監聽器 class myKeyListener extends KeyAdapter{ private JTextField jtf;private int length; public myKeyListener(JTextField jtf){ this.jtf = jtf;} } public void keyTyped(KeyEvent e){ this.length = 15; } jpf2.setText(null); jtf1.setText(null); jtf2.setText(null); jtf3.setText(null); msg.setText(”您已成功取消開戶!“); } }catch(Exception ex){ } public myKeyListener(JTextField jtf,int length){ this.jtf = jtf;this.length = length;河南經貿職業學院信息管理系《Java程序設計》課程設計報告 } boolean b = Character.toString(e.getKeyChar()).matches(”d“);if(!b || jtf.getText().length()== length){ e.consume();} } 3.Main.java//主要包括:存款、取款、修改密碼、查詢余額等按鈕 package client;import java.awt.*;import java.awt.event.*;import java.net.URL;import javax.swing.*; public class Main extends JFrame implements ActionListener{ JLabel jl1; JLabel jl;JButton jb1,jb2,jb4,jb5,jb6;static Account account;public Main(Account account){ super(”ATM機主頁面“); this.account=account;setLayout(null); jl1=new JLabel(”荷塘月色ATM機正在為您服務...“);jl1.setBounds(50, 0,300, 80);Font f=new Font(”華文琥珀“,Font.BOLD,20);jl1.setForeground(Color.BLUE);jl1.setFont(f); jb1=new JButton(”取款“);jb1.addActionListener(this); jb2=new JButton(”查詢余額“);//設置初始賬戶金額為1000元 jb2.addActionListener(this);jb4=new JButton(”存款“);jb4.addActionListener(this); jb5=new JButton(”修改密碼“);jb5.addActionListener(this); jb6=new JButton(”退出該界面“);jb6.addActionListener(this);河南經貿職業學院信息管理系《Java程序設計》課程設計報告 } public void actionPerformed(ActionEvent e){ if(e.getSource()==jb1){ new GetMoney(account);this.setVisible(false);}else if(e.getSource()==jb2){ new Yuxia(account);this.setVisible(false);}else if(e.getSource()==jb4){ new KeepMoney(account);this.setVisible(false);new Change(account);this.setVisible(false);this.setSize(400,400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true); //添加圖片 jl= new JLabel(); URL resource = this.getClass().getResource(”/images/6.jpg“); ImageIcon bgImage=new ImageIcon(resource);//創建圖標 jl.setIcon(bgImage); jl.setBounds(0,0,400,400); jb1.setBounds(10,110 ,140 ,40);jb2.setBounds(10,190 ,140 ,40);jb4.setBounds(200, 110, 140, 40);jb5.setBounds(200, 190, 140,40);jb6.setBounds(100, 270,140 ,40); this.add(jl1);this.add(jb1);this.add(jb2);this.add(jb4);this.add(jb5);this.add(jb6);this.add(jl);}else if(e.getSource()==jb5){ }else if(e.getSource()==jb6){ int i=JOptionPane.showConfirmDialog(this,”確定要返回登陸界面?“,”提示“,JOptionPane.YES_NO_OPTION);if(i==1){ 河南經貿職業學院信息管理系《Java程序設計》課程設計報告 } 4.GetMoney.java//取款頁面 package client;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.net.URL; public class GetMoney extends JFrame implements ActionListener{ JButton jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9,jb10;JLabel jl;JLabel jl1;JTextField jtf;int a=0;static Account account;public GetMoney(Account account){ super(”提取現金“);this.account=account;setLayout(null); jb1=new JButton(”100“);jb1.addActionListener(this); jb2=new JButton(”300“);jb2.addActionListener(this); jb3=new JButton(”500“);jb3.addActionListener(this); jb4=new JButton(”1000“);jb4.addActionListener(this); jb5=new JButton(”1500“);jb5.addActionListener(this); } return;} new Client(account);this.setVisible(false);} public static void main(String[] args){ } new Main(account);河南經貿職業學院信息管理系《Java程序設計》課程設計報告 jb6=new JButton(”3000“);jb6.addActionListener(this); jb7=new JButton(”自定義“);jb7.addActionListener(this); jb8=new JButton(”5000“);jb8.addActionListener(this); jb9=new JButton(”確定“);jb9.addActionListener(this); jb10=new JButton(”返回主頁面“);jb10.addActionListener(this); jl=new JLabel(”您提取的金額數為:“);jtf=new JTextField(4);jtf.addKeyListener(new myKeyListener(jtf));//設置文本框不可手動輸入 jtf.setEditable(false); //添加圖片 jl1= new JLabel(); URL resource = this.getClass().getResource(”/images/6.jpg“); ImageIcon bgImage=new ImageIcon(resource);//創建圖標 jl1.setIcon(bgImage); jl1.setBounds(0,0,400,400); jb1.setBounds(20, 40, 100,40);jb2.setBounds(20, 90,100 ,40);jb3.setBounds(20,140 ,100 ,40);jb4.setBounds(280,40 ,100 ,40);jb5.setBounds(280,90 ,100 ,40);jb6.setBounds(280,140 ,100 ,40);jb7.setBounds(20, 190, 100, 40);jb8.setBounds(280, 190, 100, 40);jb9.setBounds(50,290,100, 40);jb10.setBounds(250,290,100,40);jl.setBounds(20, 240, 150,40);jtf.setBounds(180, 250, 100,20); this.add(jb1);河南經貿職業學院信息管理系《Java程序設計》課程設計報告 } public void actionPerformed(ActionEvent e){ if(e.getSource()==jb1){ jtf.setText(jb1.getText());jtf.setEditable(false);jtf.setText(jb2.getText());}else if(e.getSource()==jb2){ jtf.setEditable(false);}else if(e.getSource()==jb3){ jtf.setText(jb3.getText());jtf.setEditable(false);this.add(jb2);this.add(jb3);this.add(jb4);this.add(jb5);this.add(jb6);this.add(jb7);this.add(jb8);this.add(jb9);this.add(jb10);this.add(jl);this.add(jtf);this.add(jl1); this.setSize(400,400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}else if(e.getSource()==jb4){ jtf.setText(jb4.getText());jtf.setEditable(false);}else if(e.getSource()==jb5){ jtf.setText(jb5.getText());jtf.setEditable(false);}else if(e.getSource()==jb6){ jtf.setText(jb6.getText());jtf.setEditable(false);jtf.setText(”“);jtf.setEditable(true);}else if(e.getSource()==jb7){ }else if(e.getSource()==jb8){ jtf.setText(jb8.getText());jtf.setEditable(false);}else if(e.getSource()==jb10){ 河南經貿職業學院信息管理系《Java程序設計》課程設計報告 new Main(account); this.setVisible(false);}else if(e.getSource()==jb9){ if(jtf.getText().equals(”“)){ JOptionPane.showMessageDialog(this,”請輸入取錢金額!“); return;}else if(jtf.getText().charAt(0)== '0'){ JOptionPane.showMessageDialog(this,”請正確輸入取錢金額!“);jtf.setText(”“);return; JOptionPane.showMessageDialog(this,”請輸入100的整倍錢數!“);jtf.setText(”“);}else if(Integer.parseInt(jtf.getText())%100!=0){ }else if((Integer.parseInt(jtf.getText()))>5000){ JOptionPane.showMessageDialog(this,”最多取款5000元!“);jtf.setText(”“);}else if(jtf.getText()!=null){ String s=jtf.getText(); int a=Integer.parseInt(s);int b=account.getCountmoney();if(b>a||b==a){ account.setCountmoney(b-a); JOptionPane.showMessageDialog(this,”您已取款:“+s+”元。您余額為:“+account.getCountmoney()+”元“); } //創建jtf的監聽,使jtf只能輸入4個數字,且只能輸入數字 class myKeyListener extends KeyAdapter{ public static void main(String[] args){ new GetMoney(account); } }第四篇:ATM取款機常見故障及解決方法
第五篇:ATM的java實訓項目設計報告書