对象流的测试【ObjectInputStream,ObjectOutputStream,分层开发】

1、实体类:

package com.wyq.print;

import java.io.Serializable;

public class TestEntity implements Serializable{
	private String userName;//用户名
	private String password;//密码
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public TestEntity(String userName, String password) {
		super();
		this.userName = userName;
		this.password = password;
	}
	public TestEntity() {
		super();
	}
	

}

2、接口层:

package com.wyq.print;

public interface UserDao {
	public boolean register(TestEntity u);
	public boolean login(TestEntity u);
}

3、类实现接口层:

package com.wyq.print;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TestDaoImpl implements UserDao {
	Scanner sc = new Scanner(System.in);
	private static List<TestEntity> listUser = new ArrayList<TestEntity>();
	private static File f = new File("user.bat");
	static {
		if (!f.exists()) {
			listUser.add(new TestEntity("admin", "admin"));
			// 将集合写进文件
			Write();
		}
		read();
	}

	@Override
	public boolean register(TestEntity u) {
		if (checkName(u.getUserName())) {
			// 可以注冊
			listUser.add(u);// 添加到集合中
			// 再將集合寫進文件
			Write();
			return true;
		}
		return false;
	}

	/**
	 * 用于将磁盘上序列化的对象进行反序列化
	 */
	private static void read() {
		// 创建对象
		ObjectInputStream ois =null;
		try {
			ois = new ObjectInputStream(new FileInputStream(f));
			// 读取数据
			listUser = (List<TestEntity>) ois.readObject();

			// 关闭
			ois.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	/**
	 * 用于将集合写进文件
	 */
	private static void Write() {
		// 创建对象流对象
		ObjectOutputStream oos =null;
		try {
			oos = new ObjectOutputStream(new FileOutputStream(f));
			oos.writeObject(listUser);
			oos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	@Override
	public boolean login(TestEntity u) {
		for (TestEntity et : listUser) {
			if (et.getUserName().equals(u.getUserName()) && et.getPassword().equals(u.getPassword())) {
				return true;
			}
		}
		return false;
	}

	private boolean checkName(String userName) {
		for (TestEntity te : listUser) {
			if (te.getUserName().equals(userName)) {
				return false;// 用戶名相同,則不允許注冊
			}
		}
		return true;
	}

}

4、测试类

package com.wyq.print;

import java.util.Scanner;

public class Test {
	Scanner sc = new Scanner(System.in);
	//使用多态,接口new实现类
	UserDao ud = new TestDaoImpl();
	private String cmpwd;
	public void mainMenu(){
		while(true){
		System.out.println("1.登录\t2.注册\t3.退出");
		int choice = sc.nextInt();
		switch (choice) {
		case 1:
			login();
			continue;
		case 2:
			register();
			continue;
		case 3:
			System.out.println("謝謝使用,退出。");
			continue;

		default:
			System.out.println("對不起,選擇的業務不存在。");
			break;
		}
		}
	}
	private void register() {
		
		System.out.println("請輸入用戶名:");
		String userName = sc.next();
		System.out.println("請輸入密碼:");
		String password = sc.next();
		System.out.println("請輸入確認密碼:");
		String cmpwd = sc.next();
		while(!cmpwd.equals(password)){
			System.out.println("請輸入密碼:");
			password = sc.next();
			System.out.println("請輸入確認密碼:");
			cmpwd = sc.next();
		}
		//封裝成用戶對象
		TestEntity te =new TestEntity(userName, password);
		//調用數據訪問層,實現類中的方法
		System.out.println(ud.register(te)?"註冊成功":"用戶名不能重複");
		
	}
	/**
	 * 封裝成用戶對象
	 */
	private void login() {
		System.out.println("青输入用户名:");
		String userName = sc.next();
		System.out.println("请输入密码:");
		String password = sc.next();
		//封裝成用戶對象
		//进行初始化参数
		TestEntity te =new TestEntity(userName, password);
		//調用數據訪問層,實現類中的方法
		System.out.println(ud.login(te)?"登陸成功":"登陸失敗");
				
	}
	public static void main(String[] args) {
		Test t = new Test();
		t.mainMenu();		
	}

}

总结:通过list集合,将参数分装成对象的形式进行传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值