0805(025天 练习题 用户管理)
每日一狗(田园犬西瓜瓜)
练习题 用户管理
文章目录
1. 用户管理系统
- 使用本地对象文件进行数据存储
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
程序
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;
}
}