版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度園林苗木產(chǎn)業(yè)扶持與發(fā)展合同2篇
- 二零二五年度大酒店商務(wù)中心運營管理承包合同3篇
- 二零二五年度新型停車場管理軟件研發(fā)合同2篇
- 2025版能源行業(yè)返聘員工合同2篇
- 2025年度校園監(jiān)控安裝項目合同書2篇
- 2025年度系統(tǒng)需求分析與規(guī)劃服務(wù)合同3篇
- 海南職業(yè)技術(shù)學(xué)院《面向?qū)ο蟪绦蛟O(shè)計(Pthon)》2023-2024學(xué)年第一學(xué)期期末試卷
- 海南體育職業(yè)技術(shù)學(xué)院《項目組織與人力資源管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度農(nóng)業(yè)合作社合同范本與合作社管理規(guī)范3篇
- 二零二五年度建筑工地安全防護及責任履行合同2篇
- 充電樁選址優(yōu)化與布局規(guī)劃
- 科技產(chǎn)業(yè)園項目投資計劃書
- 苗木采購?fù)稑朔桨福夹g(shù)標)
- JJF 1030-2023溫度校準用恒溫槽技術(shù)性能測試規(guī)范
- 輸變電工程安全文明施工設(shè)施標準化配置表
- 一銷基氯苯生產(chǎn)車間硝化工段工藝初步設(shè)計
- 自動控制原理仿真實驗課程智慧樹知到課后章節(jié)答案2023年下山東大學(xué)
- 【城市軌道交通運營安全管理研究9200字(論文)】
- 丁往道英語寫作手冊范本課件
- 教學(xué)能力大賽獲獎之教學(xué)實施報告
- 小學(xué)數(shù)學(xué)專題講座(課堂PPT)
評論
0/150
提交評論