⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bamclient.java

📁 电子银行系统
💻 JAVA
字号:
package bamclient;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;import java.io.*;import java.util.*;import Exception.*;import model.*;import business.*;public class BAMClient {	/*	 * BAMClient 其中会包含一个Frame,这是用户主界面 	 * MainPanel:主界面,用户可以选择开户或者登录	 * RegisterPanel:用户开户填写详细信息用到的界面 	 * LoginPanel:用户登录是填写信息时需要的界面	 * BusinessPanel:界面上会显示账户的功能至少包括存款和取款; 	 * 对于可透支的用户,还允许用户修改透支额度;	 * 对于贷款用户,还允许用户贷款和还贷款;	 */	private JFrame frame;	private MainPanel mp = new MainPanel();	private RegisterPanel rp = new RegisterPanel();	private LoginPanel lp = new LoginPanel();	private BusinessPanel bp = new BusinessPanel();	private CardLayout layout = new CardLayout();	private Account account;	private Socket s;	private ObjectOutputStream out;	private ObjectInputStream in;	public BAMClient() throws Exception {		frame = new JFrame("BAM Client");		frame.setSize(350, 300);		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		frame.setLayout(layout);		frame.add("main", mp);		frame.add("register", rp);		frame.add("login", lp);		frame.add("business", bp);		frame.setVisible(true);		addListeners();				/*		 * 创建用户端的socket,并且指定ip 地址和端口;		 * 因为网络中传送的都是一个个处理的客户对象,或者是异常对象,		 * 所以要分别创建对象输出流和对象输入流;		 * 对象输出流:将收集的用户信息封装到客户对象中之后写如对象输出流中;		 * 对象输入流:将服务器端处理的结果(对象)传回给客户;		 */		try {			s = new Socket("127.0.0.1", 9000);			out = new ObjectOutputStream(s.getOutputStream());			in = new ObjectInputStream(s.getInputStream());		} catch (ConnectException e) {		} catch (NullPointerException e) {		}	}	private void addListeners() {		// 在主界面上点击开户,CardLayout翻到RegisterPanel		mp.getRegisterButton().addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				layout.show(frame.getContentPane(), "register");			}		});		// 在主界面上点击登录,CardLayout翻到LoginPanel		mp.getLoginButton().addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				layout.show(frame.getContentPane(), "login");			}		});		// 在开户界面上点击提交按钮		rp.getOkButton().addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				register();			}		});		// 在登录界面上点击提交按钮		lp.getOkButton().addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				login();			}		});		// 在交易界面上点击提交按钮		bp.getOkButton().addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				business();			}		});	}    /*     * 注册,将收集的客户所以信息封装到Info对象中,然后再将Info对象通过网络     * 传递给服务器处理,然后将结果返回给客户;     */	private void register() {		try {						/*			 *  收集用户的开户信息			 *  其中type是用来记录用户注册时,用户的性质(哪个类型的卡);			 */			String pass1 = new String(rp.getPassField1().getPassword());			String pass2 = new String(rp.getPassField2().getPassword());			String name = rp.getNameField().getText();			String personId = rp.getPersonIdField().getText();			String email = rp.getEmailField().getText();			int type = rp.getTypeBox().getSelectedIndex();			/*			 * 封装Info对象,序列化到网络中 Info对象中封装了客户的			 * 注册信息和客户的动作, Info对象中的HashMap中封装了客户的注册信息,			 * 其中键值type的value值是记录了用户开户的类型			 */			Info inf = new Info(Info.REGISTER);			HashMap m = inf.getData();			m.put("pass1", pass1);			m.put("pass2", pass2);			m.put("name", name);			m.put("personId", personId);			m.put("email", email);			m.put("type", new Integer(type));						out.writeObject(inf);			out.flush();			/*			 * 从网络中读取服务器处理的结果,有两种情况:			 * 一是:正确情况下返回一个用户对象;并且返回给用户一个用户可以操作的界面(可交易界面);			 * 二是:错误情况下返回一个异常对象;弹出一个错误的对话框;			 */			Object o = in.readObject();			if (o instanceof Account) {				account = (Account) o;				bp.initComponent(account);				bp.setText(account);				layout.show(frame.getContentPane(), "business");				System.out.println("注册成功!");			} else {				JOptionPane.showMessageDialog(frame, (String) o);			}		} catch (HeadlessException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		} catch (ClassNotFoundException e) {			e.printStackTrace();		}	}	/*	 * 登录,注意设置account属性 本系统是通过卡号和密码来确认用户身份的,	 * 所以要先收集用户的卡号和密码, 收集信息完成之后同样把所有信息封装	 * 到Info对象中,然后写到网络中,让服务器来处理相应的数据和动作;	 */	private void login() {		try {			String id = lp.getIdField().getText();			String pass = new String(lp.getPassField().getPassword());			long lid = Long.parseLong(id);			Info inf = new Info(Info.LOGIN);			HashMap data = inf.getData();			data.put("id", lid);			data.put("pass", pass);			out.writeObject(inf);			out.flush();			/*			 * 从网络中读取服务器处理的结果,有两种情况:			 * 一是:正确情况下返回一个用户对象;并且返回给用户一个用户可以操作的界面(可交易界面);			 * 二是:错误情况下返回一个异常对象;弹出一个错误的对话框;			 */			Object o = in.readObject();			if (o instanceof Account) {				account = (Account) o;				bp.initComponent(account);				bp.setText(account);				layout.show(frame.getContentPane(), "business");				System.out.println("登录成功 !");			} else {				JOptionPane.showMessageDialog(frame, (String) o);			}		} catch (NumberFormatException e) {			e.printStackTrace();		} catch (HeadlessException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		} catch (ClassNotFoundException e) {			e.printStackTrace();		}	}	/*	 *  交易,在交易界面中,客户可以做一些自己合法的操作(存款,取款,贷款,还款等);	 *  仍然将交易时要处理的数据封装到Info对象中;	 *  将客户选择的业务类型,操作类型,金额和卡号一起封装到Info对象中,	 *  同时写入网络中交给服务器处理;	 */	private void business() {		try {			String choice = (String) bp.getChoiceBox().getSelectedItem();			String sm = bp.getInputField().getText();			double money = Double.parseDouble(sm);			long id = account.getId();			Info inf = new Info(Info.BUSINESS);			HashMap data = inf.getData();			data.put("choice", choice);			data.put("money", money);			data.put("id", id);			out.writeObject(inf);			out.flush();			/*			 * 从网络中读取服务器处理的结果,有两种情况:			 * 一是:正确情况下返回一个用户对象;并且返回给用户一个用户可以操作的界面(可交易界面);			 * 二是:错误情况下返回一个异常对象;弹出一个错误的对话框;			 */			Object o = in.readObject();			if (o instanceof Account) {				account = (Account) o;				bp.setText(account);				System.out.println("交易成功!");			} else {				JOptionPane.showMessageDialog(frame, (String) o);			}		} catch (NumberFormatException e) {			e.printStackTrace();		} catch (HeadlessException e) {			e.printStackTrace();		} catch (IOException e) {			e.printStackTrace();		} catch (ClassNotFoundException e) {			e.printStackTrace();		}	}	/*	 * 创建客户端,能使客户与服务器通信,完成相应的功能;	 */	public static void main(String[] args) throws Exception {		new BAMClient();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -