0805(025天 面向对象练习题01 用户管理系统)

0805(025天 练习题 用户管理)

每日一狗(田园犬西瓜瓜

25

练习题 用户管理

1. 用户管理系统

  • 使用本地对象文件进行数据存储
    image-20220806142024876

0.0 辅助方法

逻辑控制部分

1、指定信息录入

/**
	 * 主要用户对指定长度的信息进行录入操作
	 * @param inputName 要输入啥东西
	 * @param prage     0:输入长度下限 1:输入长度上限
	 */
private static String inputString(BufferedReader br, String inputName, int... prage) {
    String res = null;
    boolean resBoo = false;
    System.out.println("请输入" + inputName);
    while (true) {
        try {
            res = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (res != null) {
            resBoo = true;
            if (prage != null && prage.length > 0) {
                resBoo = res.length() >= prage[0];
                if (resBoo) {
                    if (prage.length > 1) {
                        resBoo = res.length() <= prage[1];
                    }
                }
            }
        }
        if (resBoo) {
            break;
        } else {
            System.out.println("输入" + inputName + "不合法,请重新输入!");
        }
    }

    return res;
}

2、主逻辑控制方法


/*
* 1---添加用户
* 
* 2---用户登录
* 
* 3---查看所有用户信息 4---修改用户信息 5---删除用户信息 6---退出用户登录| 登录后显示
* 
* 0---推出系统
*/
public static void zhuChengXu() throws Exception {
    IUserDao userDao = DaoFactory.getUserDao();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    User tmpUser = null;
    while (true) {
        menu1();
        String ss = br.readLine();
        if (ss != null && "3456".indexOf(ss) >= 0) {
            if (user == null) {
                System.out.println("选择功能有误请重新选择");
                continue;
            }
        }
        switch (ss) {
            case "1": // 添加用户
                tmpUser = inputUser(br);
                userDao.save(tmpUser);
                break;
            case "2": // 用户登录
                tmpUser = inputUser(br);
                if (userDao.longin(tmpUser)) {
                    user = tmpUser;
                    System.out.println("登录成功");
                } else {
                    System.out.println("登录失败!用户名或密码错误,请查证后在登录");
                }
                break;
            case "3": // 查看所有用户信息
                System.out.println(userDao.getAllUserInfo());
                break;
            case "4": // 修改用户信息
                System.out.println("================= 确认修改信息 =================");
                tmpUser = amendUser(br);
                if (userDao.updata(tmpUser)) {
                    System.out.println("修改完毕,信息如下");
                    System.out.println(tmpUser);
                    user = null;
                } else {
                    System.out.println("修改失败");
                }
                break;
            case "5": // 删除用户信息
                System.out.println("================= 确认删除用户信息 =================");
                boolean ifDel = delect(br);
                if (ifDel) {
                    boolean delLocal = userDao.delect(user);
                    if (delLocal) {
                        System.out.println("用户信息删除成功");
                        user = null;
                    } else {
                        System.out.println("用户删除失败!文件系统错误!请联系相关人员");
                    }
                } else {
                    System.out.println("用户取消删除用户信息");
                }
                break;
            case "6": // 退出用户登录
                System.out.println("================= 确认退出登录 =================");
                if (logout(br)) {
                    user = null;
                    System.out.println("用户已退出登录");
                } else {
                    System.out.println("取消退出登良");
                }
                break;
                //			case "9": // 测试时展示用户信息(含密码) 
                //				userDao.show();
                //				break;
            case "0":
                System.out.println("!!系统即将关闭!!");
                br.close();
                System.exit(0);
                break;
            default:
                System.out.println("选择功能有误请重新选择");
                break;
        }
    }
}

3、菜单展示

private static void menu1() {

    System.out.println("============ 欢迎使用本用户管理系统 ================");

    if (user != null) {
        System.out.println("用户信息:" + user.getUsername());
    }
    System.out.println("1---添加用户		2---用户登录");
    if (user != null) {
        System.out.println("3---查看所有用户信息		4---修改用户信息");
        System.out.println("5---删除用户信息		6---退出用户登录");
    }
    System.out.println("0---推出系统");
    System.out.println("============================================");
}
文件操作文件区域

1.0 登录与退出

逻辑控制区域
// 获取登录用户信息
private static User inputUser(BufferedReader br) throws Exception {
    User user = new User();
    user.setUsername(inputString(br, "用户名", 6, 10));
    user.setPassword(inputString(br, "用户密码", 6, 10));
    return user;
}

// 退出登录
private static boolean logout(BufferedReader br) {
    String delUser = inputString(br, "数字代表是否退出当前用户(0否?1是)", 1, 1);
    return "1".equals(delUser);
}
文件操作区域
public long longin(User user) {
    long res = -1;
    File userFile = new File(Constants.USER_FILE);
    if (userFile.exists()) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(userFile))) {
            ois.readLong();
            while (true) {
                try {
                    Object tmpUser = ois.readObject();
                    if (user.equals(tmpUser)) {
                        res = ((User) tmpUser).getID();
                        break;
                    }
                } catch (EOFException e) {
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return res;
}

1.1 增

逻辑控制区域

本部分为调用者返回一个含有用户名和用户密码的用户对象

private static User inputUser(BufferedReader br) throws Exception {
    User user = new User();
    user.setUsername(inputString(br, "用户名", 6, 10));
    user.setPassword(inputString(br, "用户密码", 6, 10));
    return user;
}
文件操作区域

本部分将以倒手方式曲线实现Object对象的文件追加

public boolean save(User user) {
    boolean res = false;
    File oldFile = new File(Constants.USER_FILE);
    File tempFile = new File(Constants.TEMP_FILE);
    if (oldFile.exists()) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(oldFile));
             ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(tempFile))) {
            // 复制
            long ID = ois.readLong() + 1;
            oos.writeLong(ID);
            while (true) {
                try {
                    Object tmp = ois.readObject();
                    if (tmp != null) {
                        oos.writeObject(tmp);
                    }
                } catch (EOFException e) {
                    break;
                }
            }
            // 追加
            oos.writeObject(user);
        } catch (Exception e) {
            e.printStackTrace();
            res = false;
        }
    } else {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(oldFile))) {
            oos.writeLong(1l);
            oos.writeObject(user);
        } catch (Exception e) {
            e.printStackTrace();
            res = false;
        }
    }
    // 将临时文件覆盖源数据
    if (oldFile.exists() && tempFile.exists()) {
        oldFile.delete();
        tempFile.renameTo(oldFile);
    }
    return res;
}

1.2 删

逻辑控制区域

询问用户是否确认删除

private static boolean delect(BufferedReader br) {
    String delUser = inputString(br, "数字代表是否删除用户(0否?1是)", 1, 1);
    return "1".equals(delUser);
}
文件操作区域

遍历文件数据,跳过指定对象数据,返回是否删除成功

public boolean delect(User user) {
    boolean res = false;
    File oldFile = new File(Constants.USER_FILE);
    File tmpFIle = new File(Constants.TEMP_FILE);
    try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(oldFile));
         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(tmpFIle))) {
        long ID = ois.readLong();
        oos.writeLong(ID);
        Object obj;
        while (true) {
            try {
                obj = ois.readObject();
                if (user.equals(obj)) {
                    continue;
                } else {
                    oos.writeObject(obj);
                }
            } catch (EOFException e) {
                res = true;
                break;
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    oldFile.delete();
    tmpFIle.renameTo(oldFile);
    return res;
}

1.3 改

逻辑控制区域

本部分将对当前登录用户进行交互式确认信息修改,并反回用户确认修改后的用户数据对象

/**
 * 
 * @param br 字符输入流
 * @return user 修改后的用户数据对象
 */
private static User amendUser(BufferedReader br) {
    String updataName = inputString(br, "数字代表是否修改用户名(0否?1是)", 1, 1);
    if ("1".equals(updataName)) {
        user.setUsername(inputString(br, "用户名", 6, 10));
    }
    String updataPassword = inputString(br, "数字代表是否修改用用户口令(0否?1是)", 1, 1);
    if ("1".equals(updataPassword)) {
        user.setPassword(inputString(br, "用户密码", 6, 10));
    }
    return user;
}
文件操作区域

将用户文件中数据读出并存储至临时文件中,待用户数据与其输入用户数据一致时将其替换写入临时文件中,追加后续数据,修改临时文件为正式文件,返回是否修改成功

public boolean updata(User user) {
    boolean res = false;
    File oldFile = new File(Constants.USER_FILE);
    File tmpFile = new File(Constants.TEMP_FILE);

    try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(oldFile));
         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(tmpFile))) {
        long ID = ois.readLong();
        oos.writeLong(ID);
        Object tmpUser;
        while (true) {
            try {
                tmpUser = ois.readObject();
            } catch (EOFException e) {
                break;
            }

            if (tmpUser == null) {
                break;
            }
            if (user.equals(tmpUser) && tmpUser instanceof User) {
                user.setID(((User) tmpUser).getID());
                oos.writeObject(user);
                res = true;
            } else {
                oos.writeObject(tmpUser);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    oldFile.delete();
    tmpFile.renameTo(oldFile);
    return res;
}

1.4 查

逻辑控制区域

本部分可以要求用户输入指定口令,用以确认管理员口令

// 默认都有权限
private static boolean getAffirm(BufferedReader br) {
    String command = inputString(br, "管理员权限口令");
    return "管理员口令".equals(command);
}
文件操作区域

获取所有用户数据,以字符串形式返回。

public String getAllUserInfo() {
    StringBuilder res = new StringBuilder("");
    File userFile = new File(Constants.USER_FILE);
    if (userFile.exists()) { // 判空文件
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(userFile))) {
            ois.readLong();
            while (true) { // 循环读入数据
                try {
                    Object tmpUser = ois.readObject();
                    if (tmpUser != null) {
                        res.append(tmpUser.toString()); // 追加用户信息至返回字符串中
                        res.append("\n");
                    }
                } catch (EOFException e) {
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        res.append("暂无数据");
    }

    return res.toString();
}

2. 功能测试

2.0 登录与退出

============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
9
用户编号已至 3
User [ID=1, username=123456, password=123456]
User [ID=2, username=456789, password=456789]
User [ID=3, username=156153, password=1564563]
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
2
请输入用户名
123456
请输入用户密码
123456
登录成功
============ 欢迎使用本用户管理系统 ================
用户信息:123456
1---添加用户		2---用户登录
3---查看所有用户信息		4---修改用户信息
5---删除用户信息		6---退出用户登录
0---推出系统
============================================
6
================= 确认退出登录 =================
请输入数字代表是否退出当前用户(0?1)
1
用户已退出登录
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
0
!!系统即将关闭!!

2.1 增

============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
9
用户编号已至 3
User [ID=1, username=123456, password=123456]
User [ID=2, username=456789, password=456789]
User [ID=3, username=156153, password=1564563]
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
1
请输入用户名
123000
请输入用户密码
000000
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
9
用户编号已至 4
User [ID=1, username=123456, password=123456]
User [ID=2, username=456789, password=456789]
User [ID=3, username=156153, password=1564563]
User [ID=4, username=123000, password=000000]
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
0
!!系统即将关闭!!

2.2 删

============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
9
用户编号已至 4
User [ID=1, username=123456, password=123456]
User [ID=2, username=456789, password=456789]
User [ID=3, username=156153, password=1564563]
User [ID=4, username=123000, password=000000]
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
2
请输入用户名
456789
请输入用户密码
456789
登录成功
============ 欢迎使用本用户管理系统 ================
用户信息:456789
1---添加用户		2---用户登录
3---查看所有用户信息		4---修改用户信息
5---删除用户信息		6---退出用户登录
0---推出系统
============================================
5
================= 确认删除用户信息 =================
请输入数字代表是否删除用户(0?1)
1
用户信息删除成功
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
9
用户编号已至 4
User [ID=1, username=123456, password=123456]
User [ID=3, username=156153, password=1564563]
User [ID=4, username=123000, password=000000]
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
0
!!系统即将关闭!!

2.3 改

============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
9
用户编号已至 2
User [ID=1, username=000000, password=000000]
User [ID=2, username=456789, password=456789]
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
2
请输入用户名
000000
请输入用户密码
000000
登录成功
============ 欢迎使用本用户管理系统 ================
用户信息:000000
1---添加用户		2---用户登录
3---查看所有用户信息		4---修改用户信息
5---删除用户信息		6---退出用户登录
0---推出系统
============================================
4
================= 确认修改信息 =================
User [ID=1, username=000000, password=******]
请输入数字代表是否修改用户名(0?1)
1
请输入用户名
165481
请输入数字代表是否修改用用户口令(0?1)
1
请输入用户密码
123123
修改完毕,信息如下
User [ID=1, username=165481, password=******]
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
9
用户编号已至 2
User [ID=1, username=165481, password=123123]
User [ID=2, username=456789, password=456789]
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================

2.4 查

============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
9
用户编号已至 2
User [ID=1, username=165481, password=123123]
User [ID=2, username=456789, password=456789]
============ 欢迎使用本用户管理系统 ================
1---添加用户		2---用户登录
0---推出系统
============================================
2
请输入用户名
456789
请输入用户密码
456789
登录成功
============ 欢迎使用本用户管理系统 ================
用户信息:456789
1---添加用户		2---用户登录
3---查看所有用户信息		4---修改用户信息
5---删除用户信息		6---退出用户登录
0---推出系统
============================================
3
请输入管理员权限口令
管理员口令
======= 已存在用户信息如下 =======
User [ID=1, username=165481, password=******]
User [ID=2, username=456789, password=******]

============ 欢迎使用本用户管理系统 ================
用户信息:456789
1---添加用户		2---用户登录
3---查看所有用户信息		4---修改用户信息
5---删除用户信息		6---退出用户登录
0---推出系统
============================================
0
!!系统即将关闭!!

3. 文件大体框架

src
	com
		test 		// 测试包
			package-info.java
			变长数组测试.java
		yang
			app		// 主系统包
				package-info.java
				UsersApp.java
			dao		// 接口包和接口实现包
				IUserDao.java
				package-info.java
				UserDaoImpl.java
			entity	// 自定义用户数据类型包
				package-info.java
				User.java
			util	// 工具包
				DaoFactory.java
				package-info.java

image-20220806142217466

image-20220806142242829

程序

package com.yang.app;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import com.yang.dao.IUserDao;
import com.yang.entity.User;
import com.yang.util.DaoFactory;

public class UsersApp {
	public static User user = null;

	public static void main(String[] args) throws Exception {
		zhuChengXu(); // 运行测试
//		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//		System.out.println(inputUser(br));
	}

	private static void menu1() {

		System.out.println("============ 欢迎使用本用户管理系统 ================");

		if (user != null) {
			System.out.println("用户信息:" + user.getUsername());
		}
		System.out.println("1---添加用户		2---用户登录");
		if (user != null) {
			System.out.println("3---查看所有用户信息		4---修改用户信息");
			System.out.println("5---删除用户信息		6---退出用户登录");
		}
		System.out.println("0---推出系统");
		System.out.println("============================================");
	}

	/*
	 * 1---添加用户
	 * 
	 * 2---用户登录
	 * 
	 * 3---查看所有用户信息 4---修改用户信息 5---删除用户信息 6---退出用户登录| 登录后显示
	 * 
	 * 0---推出系统
	 */
	public static void zhuChengXu() throws Exception {
		IUserDao userDao = DaoFactory.getUserDao();
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		User tmpUser = null;
		while (true) {
			menu1();
			String ss = br.readLine();
			if (ss != null && "3456".indexOf(ss) >= 0) {
				if (user == null) {
					System.out.println("选择功能有误请重新选择");
					continue;
				}
			}
			switch (ss) {
			case "1": // 添加用户
				tmpUser = inputUser(br);
				userDao.save(tmpUser);
				break;
			case "2": // 用户登录
				tmpUser = inputUser(br);
				long userID = userDao.longin(tmpUser);
				if (userID > 0) {
					user = tmpUser;
					user.setID(userID);
					System.out.println("登录成功");
				} else {
					System.out.println("登录失败!用户名或密码错误,请查证后在登录");
				}
				break;
			case "3": // 查看所有用户信息
				boolean powerAffirm = getAffirm(br);
				if (powerAffirm) {
					System.out.println("======= 已存在用户信息如下 =======");
					System.out.println(userDao.getAllUserInfo());
				} else {
					System.out.println("您无权查看本部分信息");
				}
				break;
			case "4": // 修改用户信息
				System.out.println("================= 确认修改信息 =================");
				System.out.println(user);
				tmpUser = amendUser(br);
				if (userDao.updata(tmpUser)) {
					System.out.println("修改完毕,信息如下");
					System.out.println(tmpUser);
					user = null;
				} else {
					System.out.println("修改失败");
				}
				break;
			case "5": // 删除用户信息
				System.out.println("================= 确认删除用户信息 =================");
				boolean ifDel = delect(br);
				if (ifDel) {
					boolean delLocal = userDao.delect(user);
					if (delLocal) {
						System.out.println("用户信息删除成功");
						user = null;
					} else {
						System.out.println("用户删除失败!文件系统错误!请联系相关人员");
					}
				} else {
					System.out.println("用户取消删除用户信息");
				}
				break;
			case "6": // 退出用户登录
				System.out.println("================= 确认退出登录 =================");
				if (logout(br)) {
					user = null;
					System.out.println("用户已退出登录");
				} else {
					System.out.println("取消退出登良");
				}
				break;
			case "9": // 测试时展示用户信息(含密码)
				userDao.show();
				break;
			case "0":
				System.out.println("!!系统即将关闭!!");
				br.close();
				System.exit(0);
				break;
			default:
				System.out.println("选择功能有误请重新选择");
				break;
			}
		}
	}

	// 默认都有权限
	private static boolean getAffirm(BufferedReader br) {
		String command = inputString(br, "管理员权限口令");
		return "管理员口令".equals(command);
	}

	private static boolean logout(BufferedReader br) {
		String delUser = inputString(br, "数字代表是否退出当前用户(0否?1是)", 1, 1);
		return "1".equals(delUser);
	}

	private static boolean delect(BufferedReader br) {
		String delUser = inputString(br, "数字代表是否删除用户(0否?1是)", 1, 1);
		return "1".equals(delUser);
	}

	/**
	 * 
	 * @param br 字符输入流
	 * @return user 修改后的用户数据对象
	 */
	private static User amendUser(BufferedReader br) {
		String updataName = inputString(br, "数字代表是否修改用户名(0否?1是)", 1, 1);
		if ("1".equals(updataName)) {
			user.setUsername(inputString(br, "用户名", 6, 10));
		}
		String updataPassword = inputString(br, "数字代表是否修改用用户口令(0否?1是)", 1, 1);
		if ("1".equals(updataPassword)) {
			user.setPassword(inputString(br, "用户密码", 6, 10));
		}
		return user;
	}

	private static User inputUser(BufferedReader br) throws Exception {
		User user = new User();
		user.setUsername(inputString(br, "用户名", 6, 10));
		user.setPassword(inputString(br, "用户密码", 6, 10));
		return user;
	}

	/**
	 * 
	 * @param inputName 要输入啥东西
	 * @param prage     0:输入长度下限 1:输入长度上限
	 */
	private static String inputString(BufferedReader br, String inputName, int... prage) {
		String res = null;
		boolean resBoo = false;
		System.out.println("请输入" + inputName);
		while (true) {
			try {
				res = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}

			if (res != null) {
				resBoo = true;
				if (prage != null && prage.length > 0) {
					resBoo = res.length() >= prage[0];
					if (resBoo) {
						if (prage.length > 1) {
							resBoo = res.length() <= prage[1];
						}
					}
				}
			}
			if (resBoo) {
				break;
			} else {
				System.out.println("输入" + inputName + "不合法,请重新输入!");
			}
		}

		return res;
	}

}

package com.yang.dao;

import com.yang.entity.User;

// CRUD增删改查
public interface IUserDao {
	// 将指定用户信息追加到本地数据文件中
	boolean save(User user);

	// 展示所有数据 测试用的
	void show();

	// 判定用户信息是否存在
	long longin(User user);

	// 获取所有用户信息,返回字符串
	String getAllUserInfo();

	// 更新用户数据,返回是否成功
	boolean updata(User user);

	boolean delect(User user);
}

/*
 * 数据访问对象,用于封装数据的访问逻辑细节
 */
package com.yang.dao;

class Constants {
	public static final String USER_FILE = "data/users.data";
	public static final String TEMP_FILE = "data/users_tmp.data";
}
package com.yang.dao;

import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import com.yang.entity.User;

public class UserDaoImpl implements IUserDao {

	public static void main(String[] args) throws Exception {

	}

	@Override
	public boolean save(User user) {
		boolean res = false;
		File oldFile = new File(Constants.USER_FILE);
		File tempFile = new File(Constants.TEMP_FILE);
		if (oldFile.exists()) {
			try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(oldFile));
					ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(tempFile))) {
				// 复制
				long ID = ois.readLong() + 1;
				oos.writeLong(ID);
				user.setID(ID);
				while (true) {
					try {
						Object tmp = ois.readObject();
						if (tmp != null) {
							oos.writeObject(tmp);
						}
					} catch (EOFException e) {
						break;
					}
				}
				// 追加
				oos.writeObject(user);
			} catch (Exception e) {
				e.printStackTrace();
				res = false;
			}
		} else {
			try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(oldFile))) {
				user.setID(1L);
				oos.writeLong(1l);
				oos.writeObject(user);
			} catch (Exception e) {
				e.printStackTrace();
				res = false;
			}
		}
		// 将临时文件覆盖源数据
		if (oldFile.exists() && tempFile.exists()) {
			oldFile.delete();
			tempFile.renameTo(oldFile);
		}
		return res;
	}

	@Override
	public void show() { // 展示所有数据
		File oldFile = new File(Constants.USER_FILE);
		if (oldFile.exists()) {
			try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(oldFile));) {
				// 复制
				long ID = ois.readLong();
				System.out.println("用户编号已至 " + ID);
				while (true) {
					try {
						Object tmp = ois.readObject();
						if (tmp != null) {
							System.out.println(((User) tmp).toTestString());
						}
					} catch (EOFException e) {
						break;
					}
				}

			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}

	@Override
	public long longin(User user) {
		long res = -1;
		File userFile = new File(Constants.USER_FILE);
		if (userFile.exists()) {
			try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(userFile))) {
				ois.readLong();
				while (true) {
					try {
						Object tmpUser = ois.readObject();
						if (user.equals(tmpUser)) {
							res = ((User) tmpUser).getID();
							break;
						}
					} catch (EOFException e) {
						break;
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		return res;
	}

	@Override
	public String getAllUserInfo() {
		StringBuilder res = new StringBuilder("");
		File userFile = new File(Constants.USER_FILE);
		if (userFile.exists()) { // 判空文件
			try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(userFile))) {
				ois.readLong();
				while (true) { // 循环读入数据
					try {
						Object tmpUser = ois.readObject();
						if (tmpUser != null) {
							res.append(tmpUser.toString()); // 追加用户信息至返回字符串中
							res.append("\n");
						}
					} catch (EOFException e) {
						break;
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			res.append("暂无数据");
		}

		return res.toString();
	}

	@Override
	public boolean updata(User user) {
		boolean res = false;
		File oldFile = new File(Constants.USER_FILE);
		File tmpFile = new File(Constants.TEMP_FILE);

		try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(oldFile));
				ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(tmpFile))) {
			long ID = ois.readLong();
			oos.writeLong(ID);
			Object tmpUser;
			while (true) {
				try {
					tmpUser = ois.readObject();
				} catch (EOFException e) {
					break;
				}

				if (tmpUser == null) {
					break;
				}
				if (user.equals(tmpUser) && tmpUser instanceof User) {
					user.setID(((User) tmpUser).getID());
					oos.writeObject(user);
					res = true;
				} else {
					oos.writeObject(tmpUser);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		oldFile.delete();
		tmpFile.renameTo(oldFile);
		return res;
	}

	@Override
	public boolean delect(User user) {
		boolean res = false;
		File oldFile = new File(Constants.USER_FILE);
		File tmpFIle = new File(Constants.TEMP_FILE);
		try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(oldFile));
				ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(tmpFIle))) {
			long ID = ois.readLong();
			oos.writeLong(ID);
			Object obj;
			while (true) {
				try {
					obj = ois.readObject();
					if (user.equals(obj)) {
						continue;
					} else {
						oos.writeObject(obj);
					}
				} catch (EOFException e) {
					res = true;
					break;
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		oldFile.delete();
		tmpFIle.renameTo(oldFile);
		return res;
	}

}

package com.yang.entity;

import java.io.Serializable;
import java.util.Objects;

public class User implements Serializable {

	private static final long serialVersionUID = -34586707713013376L;
	private long ID;
	private String username;
	private String password;

	public String getShowPassword() {
		StringBuilder res = new StringBuilder();
		for (int i = 0; i < password.length(); i++) {
			res.append("*");
		}
		return res.toString();
	}

	// =======================

	@Override
	public int hashCode() {
		if (this.ID == 0)
			return Objects.hash(password, username);
		return Objects.hash(ID);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (ID == other.ID) {
			return true;
		}
		return Objects.equals(password, other.password) && Objects.equals(username, other.username);
	}

	public long getID() {
		return ID;
	}

	@Override
	public String toString() {
		return "User [ID=" + ID + ", username=" + username + ", password=" + getShowPassword() + "]";
	}

	public String getUsername() {
		return username;
	}

	public void setID(long iD) {
		ID = iD;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String toTestString() {

		return "User [ID=" + ID + ", username=" + username + ", password=" + password + "]";
	}

}

package com.yang.util;

import com.yang.dao.IUserDao;
import com.yang.dao.UserDaoImpl;

public class DaoFactory {
	private DaoFactory() {
	}

	private static IUserDao userDao = new UserDaoImpl();

	public static IUserDao getUserDao() {
		return userDao;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值