ATM程序java實現(xiàn)(客戶端+服務(wù)器)_第1頁
ATM程序java實現(xiàn)(客戶端+服務(wù)器)_第2頁
ATM程序java實現(xiàn)(客戶端+服務(wù)器)_第3頁
ATM程序java實現(xiàn)(客戶端+服務(wù)器)_第4頁
ATM程序java實現(xiàn)(客戶端+服務(wù)器)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

程序?qū)崿F(xiàn)其實并不是很難,主要是思路,對程序的各個功能的設(shè)計,各個按鈕的處理事件及按鈕按照邏輯顯示出來和隱藏。服務(wù)器采用多線程并行機制,針對每個用戶登錄創(chuàng)建一個線程。

程序代碼

客戶端:

importjavax.swing.*;

import.*;

importjava.io.*;

importjava.util.*;

importjava.awt.event.*;

importjava.awt.*;

importjava.sql.*;

importjava.math.*;

importjavax.swing.*;

classATMWindowsextendsJFrameimplementsActionListener

{

Fontf;

Socketclint=null;

DataOutputStreamout=null;

DataInputStreamin=null;

Connectioncon;

Statementpre;

ResultSetrs;

inti,money;

booleanb=true;//b的取值有0,1,共2個值分別告訴程序該吧數(shù)字鍵盤的輸入復(fù)制給username,password,

Stringsusername=null;

Stringspassword=null;

Boxbox1,box2,box3,box11,box12;

JPanelpanel1,panel2;

JLabeltishi;

JTextFieldusername;

JPasswordFieldpassword;

JButtonn[],queding,chaxun,qukuan,tuichu;

ATMWindows(Strings)

{

GraphicsEnvironment

ge=GraphicsEnvironment.getLocalGraphicsEnvironment();

Stringt[]=ge.getAvailableFontFamilyNames();

f=newFont(t[67],Font.BOLD,16);

n=newJButton[10];

box1=Box.createVerticalBox();

box2=Box.createHorizontalBox();

box3=Box.createVerticalBox();

panel1=newJPanel();

panel2=newJPanel();

tishi=newJLabel("歡迎使用XX銀行!請輸入卡號。");

tishi.setFont(f);

username=newJTextField(20);

password=newJPasswordField(20);

panel1.setLayout(newGridLayout(3,3));

panel2.setLayout(newGridLayout(4,1));

for(i=1;i<n.length;i++)

{

n[i]=newJButton(""+i);

panel1.add(n[i]);

n[i].addActionListener(this);

}

n[0]=newJButton("0");

panel1.add(n[0]);

n[0].addActionListener(this);

n[0].setPreferredSize(newDimension(20,20));

queding=newJButton("確定");

chaxun=newJButton("查詢");//用戶輸入賬號和密碼后,點擊查詢按鈕登陸qukuan=newJButton("取款");

tuichu=newJButton("退出");

qukuan.show(false);

chaxun.show(false);//初始化窗口后,賬號和密碼還沒輸入,不能用查詢按

鈕登陸

box1.add(tishi);

tishi.setBounds(50,10,290,60);

box1.add(username);

username.setBounds(50,60,300,20);

password.setBounds(60,60,300,20);

panel2.add(queding);

panel2.add(chaxun);

panel2.add(qukuan);

panel2.add(tuichu);

box1.setBounds(50,10,300,60);

n[0].setBounds(50,290,200,70);

panel1.setBounds(50,80,200,210);

panel2.setBounds(250,80,100,280);

add(box1);

add(panel1);

add(panel2);

add(n[0]);

tuichu.addActionListener(this);

queding.addActionListener(this);

chaxun.addActionListener(this);

qukuan.addActionListener(this);

setLayout(null);

setTitle(s);

setBounds(200,200,400,400);

validate();

setResizable(false);

setVisible(true);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

}

publicvoidactionPerformed(ActionEvente)

{

if(e.getSource()==tuichu)//用戶退出,窗口不關(guān)閉,需要從新輸入賬號和

密碼

{

b=true;//用戶推出之后,從數(shù)字鍵輸入到username

box1.add(username);

box1.remove(password);

box1.validate();

username.setText(null);

money=0;

susername=null;

spassword=null;

tishi.setText("歡迎使用XX銀行!請輸入卡號。");

chaxun.show(false);

queding.show(true);

qukuan.show(false);//用戶退出,查詢和取款按鈕不可見if(clint!=null)

{

try

{

out.writeInt(-1);//服務(wù)器輸入數(shù)字-1,表示客戶已經(jīng)退出,

服務(wù)器可以關(guān)閉該客戶的進程

}

catch(IOExceptione1)

{

System.out.println(e1);

}

}

}

elseif(e.getSource()==queding)

{

if(susername==null)

{

susername=username.getText();

username.setText(null);

tishi.setText("請輸入密碼");

b=false;//從數(shù)字鍵輸入到password

box1.remove(username);

box1.add(password);

box1.validate();

password.setText(null);

}

elseif(spassword==null)

{

spassword=password.getText();

chaxun.show(true);

b=true;//從數(shù)字鍵輸入到username

queding.show(false);

tishi.setText("請點擊查詢按鈕登陸!");

password.setText(null);

}

else

{

intyue;

try

{

BigIntegern=newBigInteger(username.getText());yue=Value();

if(yue>=0&&Value()>0)//余額大于等于0,表示用戶可以

取款

{

out.writeInt(Value());

money=in.readInt();

if(money<=yue)

{

tishi.setText("取款成功,您的余額為:"+money);queding.show(false);

username.setText(null);

box1.validate();

}

elseif(money==-3)//服務(wù)器連接數(shù)據(jù)庫錯誤,取款失敗{

money=yue;

tishi.setText("抱歉!服務(wù)器錯誤,取款失敗。");username.setText(null);

box1.validate();

qukuan.show(false);

queding.show(false);

validate();

}

else

{

;

queding.show(false);

tishi.setText("操作失敗,您的余額為:"+money);}

username.setText(null);

box1.remove(username);

box1.validate();

qukuan.show(true);

validate();

}

else

{

tishi.setText("輸入錯誤,不能大于您的余額"+money);qukuan.show(true);

queding.show(false);

chaxun.show(false);

username.setText(null);

validate();

}

}

catch(IOExceptione1)

{

tishi.setText("輸入錯誤,不能大于您的余額"+money);qukuan.show(true);

queding.show(false);

chaxun.show(false);

username.setText(null);

validate();

System.out.println(e1);

}

}

}

elseif(e.getSource()==qukuan)

{

tishi.setText("請輸入取款金額然后點擊確定。");box1.remove(password);

box1.add(username);

box1.validate();

box1.remove(username);

box1.add(username);

box1.validate();

username.setText(null);

qukuan.show(false);

queding.show(true);

}

elseif(e.getSource()==chaxun)

{

try

{

clint=newSocket("localhost",4333);

in=newDataInputStream(clint.getInputStream());out=newDataOutputStream(clint.getOutputStream());tishi.setText("連接到服務(wù)器");

}

catch(IOExceptione1)

{

tishi.setText("無法連接到服務(wù)器!");

}

try

{

out.writeUTF(susername);

out.writeUTF(spassword);

money=in.readInt();

if(money>=0)

{

tishi.setText("登陸成功,您當前余額為:"+money);chaxun.show(false);

qukuan.show(true);

box1.remove(password);

box1.validate();

return;

}

elseif(money==-1)

{

tishi.setText("卡號錯誤請從新輸入卡號和密碼");susername=null;

spassword=null;

box1.remove(password);

box1.add(username);

box1.validate();

password.setText(null);

username.setText(null);

queding.show(true);

chaxun.show(false);

validate();

return;

}

elseif(money==-2)

{

tishi.setText("密碼錯誤請從新輸入密碼");

spassword=null;

password.setText(null);

chaxun.show(false);

queding.show(true);

b=false;//用戶輸入密碼錯誤,數(shù)字鍵盤輸入到passwordreturn;

}

else

{

tishi.setText("抱歉!服務(wù)器錯誤,暫停服務(wù)。");queding.show(true);

susername=null;

spassword=null;

box1.remove(password);

box1.add(username);

box1.validate();

username.setText(null);

chaxun.show(false);

return;

}

}

catch(IOExceptione1)

{

System.out.println(e1);

}

}

else

{

for(i=0;i<n.length;i++)

{

if(b)

{

if(e.getSource()==n[i])

{

username.setText(username.getText()+i);return;

}

}

else

{

if(e.getSource()==n[i])

{

password.setText(password.getText()+i);return;

}

}

}

}

}

}

publicclassATM

{

publicstaticvoidmain(Stringargs[])

{

ATMWindowsatm=newATMWindows("ATM");

}

}

服務(wù)器:

importjavax.swing.*;

import.*;

importjava.io.*;

importjava.util.*;

importjava.util.Date;

importjava.awt.event.*;

importjava.awt.*;

importjava.sql.*;

importjava.math.*;

importjavax.swing.*;

importjava.text.SimpleDateFormat;

publicclassATMServer

{

publicstaticvoidmain(Stringags[])

{

ServerSocketserver=null;

Socketyou=null;

while(true)

{

try

{

server=newServerSocket(4333);

}

catch(IOExceptione)

{

System.out.println("正在監(jiān)聽");

}

try

{

you=server.accept();

}

catch(IOExceptione)

{

System.out.println("正在等待客戶");

}

if(you!=null)

{

newServerThread(you).start();

}

}

}

}

classServerThreadextendsThread

{

DBdb=newDB();

intb,money;

ResultSetrs;

Socketsocket;

DataOutputStreamout=null;

DataInputStreamin=null;

Stringsusername=null;

Stringspassword=null;

ServerThread(Socketyou)

{

try

{

in=newDataInputStream(you.getInputStream());

out=newDataOutputStream(you.getOutputStream());

}

catch(IOExceptione)

{

System.out.println(e);

}

}

publicvoidrun()

{

try

{

susername=in.readUTF();

spassword=in.readUTF();

System.out.println(susername);

if(db.connect()==1)//數(shù)據(jù)庫連接成功

{

b=db.select(susername,spassword);

db.close();

out.writeInt(b);

if(b>=0)//用戶賬號和密碼正確,登陸成功,等待取款{

while(true)

{

money=in.readInt();

if(money>=0)//客戶端輸入大于等于0時,準備取款,update

數(shù)據(jù)庫

{

db.connect();

money=db.select(susername,spassword)-money;

if(db.update(money,susername)>0)//數(shù)據(jù)庫update成功,返回操作后的余額給客戶端

{

System.out.println("數(shù)據(jù)庫update成功,返回操作

后的余額給客戶端");

out.writeInt(db.select(susername,spassword));}

else//數(shù)據(jù)庫update失敗,返回當前余額給客戶端{

out.writeInt(db.select(susername,spassword));}

db.close();

}

elseif(money==-1)//用戶已在客戶端退出

{

db.close();

System.out.println("此用戶已經(jīng)退出終端,線程自動結(jié)

束。");

break;

}

try

}

}

elseif(b==-3)

{

db.close();

System.out.println("數(shù)據(jù)庫錯誤,用戶登陸失敗,自動關(guān)閉連接線

程");

}

else//用戶驗證失敗

{

db.close();

System.out.println("賬號或者密碼錯誤,用戶登陸失敗,自動關(guān)閉

連接線程");

}

}

else

{

out.writeInt(-3);//用-3表示數(shù)據(jù)庫連接失敗,通知客戶端暫停使用}

}

catch(IOExceptione)

{

System.out.println(e);

}

}

}

classDB

{

Connectioncon;

PreparedStatementpre;

ResultSetrs=null;

Stringsql=null;

DB()

{

}

publicintconnect()

{

{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

}

catch(ClassNotFoundExceptione)

{

System.out.println(""+e);

return0;

}

try

{

con=DriverManager.getConnection("jdbc:odbc:user","","");System.out.println("數(shù)據(jù)庫連接成功");

return1;

}

catch(SQLExceptione)

{

System.out.println(e);

return0;

}

}

publicintselect(Stringsusername,Stringspassword)

{

try

{

pre=con.prepareStatement("SELECT*FROMu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論