Java第七次实验报告.docx
- 文档编号:12056933
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:28
- 大小:134.22KB
Java第七次实验报告.docx
《Java第七次实验报告.docx》由会员分享,可在线阅读,更多相关《Java第七次实验报告.docx(28页珍藏版)》请在冰点文库上搜索。
Java第七次实验报告
南昌航空大学实验报告
2011年5月10日
课程名称:
Java语言程序设计实验名称:
ATM与网络聊天室
班级:
080612学生姓名:
学号:
指导教师评定:
签名:
一、实验目的
(1)了解计算机网络的底层通讯。
(2)掌握Socket编程接口。
(3)掌握流式Socket服务器和客户机编程。
(4)掌握包中常用的网络编程工具类的功能和使用。
二、实验任务
(1)用java类方法编写一个ATM的程序,使其实现登录、查询、取款功能。
(2)用java编程实现一个网络聊天室。
三、实验分析与代码实现
(1)实现ATM
//ATM.java
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.sql.*;
publicclassATMextendsJFrame{
privateJTextAreamessageArea;
privateJPanelbuttonPanel;
privateJPanelcommandPanel;
privateJButtonbuttonNumber[]=newJButton[10];
privateStringbuttonName[]={"1","2","3","4","5","6","7","8","9","0"};
privateJButtonqueryButton;
privateJButtonwithdrawButton;
privateJButtonenterButton;
privateJButtonexitButton;
privatedoublebalance;
privatedoubleaccountAmount;
privateStringaccountNumber="",accountPin="";
privateintenterState=0;
privateStrings="";
privateConnectionmyCon;
privateStatementmyStatement;
privateResultSetmyResultSet;
publicATM()
{
StringdriverClass="sun.jdbc.odbc.JdbcOdbcDriver";
Stringurl="jdbc:
odbc:
account";
try{
//①加载驱动程序
Class.forName(driverClass);
}catch(ClassNotFoundExceptione){
//驱动程序加载不成功,打印错误信息并退出
System.out.println("Cannotfinddriver"+driverClass);
System.exit(-1);
}
try{
//②获得jdbc连接
myCon=DriverManager.getConnection(url,"account","");
//③创建Statement对象
myStatement=myCon.createStatement();
}catch(SQLExceptionsqe){
sqe.printStackTrace();
}
CreateUI();
}
privatevoidCreateUI()
{
ContainercontentPane=getContentPane();
contentPane.setLayout(null);
messageArea=newJTextArea();
messageArea.setBounds(20,16,250,80);
messageArea.setText("欢迎使用ATM,请输入帐号:
\n");
messageArea.setEditable(false);
contentPane.add(messageArea);
buttonPanel=newJPanel();
buttonPanel.setBounds(24,110,140,120);
buttonPanel.setLayout(newGridLayout(4,3,5,5));
contentPane.add(buttonPanel);
commandPanel=newJPanel();
commandPanel.setBounds(180,110,80,120);
commandPanel.setLayout(newGridLayout(4,1,5,5));
contentPane.add(commandPanel);
for(inti=0;i<10;i++)
{
buttonNumber[i]=newJButton(buttonName[i]);
buttonNumber[i].addActionListener(newbuttonNumber());
buttonPanel.add(buttonNumber[i]);
}
queryButton=newJButton("查询");
queryButton.addActionListener(newqueryButtonAction());
commandPanel.add(queryButton);
withdrawButton=newJButton("取款");
withdrawButton.addActionListener(newwithdrawButtonAction());
commandPanel.add(withdrawButton);
enterButton=newJButton("确定");
enterButton.addActionListener(newenterButtonAction());
commandPanel.add(enterButton);
exitButton=newJButton("退出");
exitButton.addActionListener(newexitButtonAction());
commandPanel.add(exitButton);
setTitle("ATM");
setSize(300,280);
setVisible(true);
addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente){
try{
myStatement.close();
myCon.close();
}catch(SQLExceptionexp){exp.printStackTrace();}
finally
{
System.exit(0);
}
}
});
}
classbuttonNumberimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
if(enterState==0)
{s=s+e.getActionCommand().charAt(0);
messageArea.append(e.getActionCommand());}
elseif(enterState==1)
{s=s+e.getActionCommand().charAt(0);
messageArea.append("*");}
elseif(enterState==2)
{s=s+e.getActionCommand().charAt(0);
messageArea.append(e.getActionCommand());}
}
}
classqueryButtonActionimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
messageArea.setText("当前余额为:
"+accountAmount);
messageArea.append("\n\n需要继续服务请按确定,否则请按退出!
");
enterState=3;
}
}
classwithdrawButtonActionimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
messageArea.setText("请输入取款金额(应为50或100的整数倍):
\n");
enterState=2;
s="";
}
}
classexitButtonActionimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
enterState=0;
s="";
accountAmount=0;
accountNumber="";
accountPin="";
messageArea.setText("欢迎使用ATM,请输入帐号:
\n");
}
}
classenterButtonActionimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
enterState++;
enterState%=5;
if(enterState==1)
{
accountNumber=s;
s="";
try{
myResultSet=myStatement.executeQuery("SELECT*FROMaccountWHEREaccountNumber='"+accountNumber+"'");
if(myResultSet.next())
messageArea.setText("请输入密码:
\n");
else{
messageArea.setText("帐号输入错误,请重新输入!
\n");
enterState=0;
}
}catch(SQLExceptionexp)
{exp.printStackTrace();}
}
if(enterState==2)
{
accountPin=s;
s="";
try{
if(myResultSet.getString("accountPin").compareTo(accountPin)==0)
{
accountAmount=myResultSet.getDouble("accountAmount");
messageArea.setText("请选择服务种类\n");
}
else{messageArea.setText("密码错误,请重新输入\n");
enterState=1;}
}catch(SQLExceptionexp)
{
exp.printStackTrace();
}
}
if(enterState==3)
{
balance=Double.parseDouble(s);
s="";
if(accountAmount>balance)
{accountAmount-=balance;
messageArea.setText("\n请等待。
。
。
");
try{
myStatement.executeUpdate("UPDATEaccountSETaccountAmount="
+accountAmount+"WHEREaccountNumber='"+accountNumber+"'");
messageArea.setText("\n请取走钞票\n继续服务请按确定,退出请按取消!
");
}catch(SQLExceptionexp)
{
exp.printStackTrace();
}
}
else{messageArea.setText("对不起,余额不足!
请重新输入金额!
\n");
enterState=2;}
}
if(enterState==4)
{
enterState=2;
s="";
messageArea.setText("请选择服务种类\n");
}
}
}
publicstaticvoidmain(Stringargs[])
{
ATMatm=newATM();
}
}
(2)实现网络聊天室
//Client.java
importjava.awt.*;
importjava.awt.event.*;
import.*;
importjava.io.*;
importjavax.swing.*;
publicclassClientextendsJFrameimplementsActionListener,Runnable
{
publicstaticintport=8888;
ServerSocketserver;
Socketclient;
BufferedReadercin;
PrintWritercout;
privateJLabeluserlabel=newJLabel("用户名");;
privateJLabelpasswordlabel=newJLabel("密码");
privateJTextFieldusername=newJTextField(10);
privateJPasswordFieldpassword=newJPasswordField(10);
privateJButtonloginButton=newJButton("登录");
privateJButtonexitButton=newJButton("退出");
privateJPanelp1=newJPanel();
JButtonmessageButton=newJButton("发送消息");
JTextFieldclientMessage=newJTextField("",25);
JPanelp2=newJPanel();
JScrollPanemessageScrollPane;
JTextAreamessage=newJTextArea();
Threadchart=null;
publicClient()
{
super("网络聊天客户端");
p1.add(userlabel);
p1.add(username);
p1.add(passwordlabel);
p1.add(password);
p1.add(loginButton);
p1.add(exitButton);
loginButton.addActionListener(this);
exitButton.addActionListener(this);
this.getContentPane().add(p1,"North");
p2.add(clientMessage);
p2.add(messageButton);
messageButton.addActionListener(this);
messageScrollPane=newJScrollPane(message,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.getContentPane().add(p2,"South");
this.getContentPane().add(messageScrollPane,"Center");
this.setSize(500,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==loginButton)
{
Stringpword=newString(password.getPassword());
if(loginServer(username.getText(),pword))
{
chart=newThread(this);
chart.start();
}else{
JOptionPane.showMessageDialog(null,"usernameorpassworderror!
");
}
}elseif(e.getSource()==exitButton)
{
cout.println("exit");
chart=null;
}
if(e.getSource()==messageButton)
{
sendMessage(clientMessage.getText());
message.append("发送:
"+clientMessage.getText()+"\n");
}
}
publicbooleanloginServer(Stringusername,Stringpassword)
{
try{
client=newSocket("localhost",8888);
cin=newBufferedReader(newInputStreamReader(client.getInputStream()));
cout=newPrintWriter(client.getOutputStream(),true);
cout.println(username);
cout.println(password);
StringreadLine=cin.readLine();
if(readLine.equals("ok"))
{
message.append("连接到服务器!
\n");
returntrue;
}
}catch(Exceptione)
{
}
returnfalse;
}
publicvoidrun()
{
Stringaline;
try{
while(chart!
=null&&(aline=cin.readLine())!
=null)
{
if(aline.equals("exit")||aline.equals("stop"))
{
message.append("服务器已断开!
重新登录!
\n");
break;
}elsemessage.append("服务器说:
"+aline+"\n");
Thread.sleep(200);
}
cin.close();
cout.close();
client.close();
}
catch(Exceptione)
{}
}
publicvoidsendMessage(Stringmes)
{
cout.println(mes);
}
publicstaticvoidmain(Stringargs[])
{
Clientmy=newClient();
my.setVisible(true);
}
}
//Server.java
importjavax.swing.*;
importjava.awt.*;
import.*;
importjava.io.*;
importjava.awt.event.*;
importjava.sql.*;
importjava.util.*;
publicclassServerextendsJFrameimplementsActionListener,ItemListener,Runnable
{
publicstaticintport=8888;
ServerSocketserver;
Socketclient=null;
BufferedReadercin=null;
PrintWritercout=null;
ThreadchartThread=null;
JButtonrunButton=newJButton("运行");
JButtonstopButton=newJButton("停止");
JButtonexitButton=newJButton("退出");
JButtonmessageButton=newJButton("发送消息");
JTextFieldserMessage=newJTextField("",25);
VectoruserName=newVector();
JComboBoxuserList=newJComboBox(userName);
JPanelp1=newJPanel();
JPanelp2=newJPanel();
JScrollPanemessageScrollPane;
JTextAream
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 第七 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)