写学生管理系统的时候遇到了问题...

MOTEC 2014-02-08 05:26:18
存储操作主要是通过 FILE.IO MAP存储的 当我第二次使用时就会出现 如图所示的情况 无论存储还是查询 都会出现 null


下面是源码







package ListRegisterIO;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.List;

public class UserInterface {
//声明全局对象
private UserManagerByMap um;

//静态化文本数据库
private static final String Save_Path="F://testStu.save";

public UserInterface(){
try {
//检测是否有文件夹
File CheckFile = new File(Save_Path);
if (!CheckFile.exists()) {
//如果没有则创建
CheckFile.createNewFile();

um = new UserManagerByMap();

System.out.println("你是第一次使用我们的系统");
} else {
//从文件流中加载对象
LoadUserManagerObject();
System.out.println("系统加载完成");
}



} catch (IOException e) {
System.out.println(e.getMessage());
}

}

private UserManagerByMap LoadUserManagerObject() {
// TODO Auto-generated method stub
//输入对象
ObjectInputStream ois =null;

try {
//从文件中加载对象
ois=new ObjectInputStream(new BufferedInputStream(new FileInputStream(Save_Path)));
//将读取到的对象强制转换成UserManagerByMap 对象
UserManagerByMap um=(UserManagerByMap) ois.readObject();
return um;

}catch(EOFException e){
//如果存在担对象加载为空 则返回一个新对象
return new UserManagerByMap();
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(ois!=null){
try {
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


return null;
}

private void save(){
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(Save_Path)));
oos.writeObject(um);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if (oos!= null) {
oos.close();
}
} catch (IOException e3) {
System.out.println("错误01:");
}

}


}


public void run(){
BufferedReader br = null;
br= new BufferedReader(new InputStreamReader(System.in));
String str = null;
showInfo();
try {
while ((str = br.readLine()) != null) {
if(str.equalsIgnoreCase("Q")){
System.out.println("谢谢使用");

break;
}else if(str.equalsIgnoreCase("A")){
add(br);

}else if(str.equalsIgnoreCase("B")){
delete(br);

}else if(str.equalsIgnoreCase("C")){
update(br);
}else if(str.equalsIgnoreCase("D")){
list();
}else if(str.equalsIgnoreCase("L")){
login(br);
}else if(str.equalsIgnoreCase("F")){
search(br);

}else{
System.err.println("请输入一个正确的 操作方式");
}
showInfo();
}
} catch (final Exception e) {
System.out.println(e.getMessage());
}finally{
try {
if (br!= null) {
br.close();
}
} catch(IOException e2) {
System.out.println(e2.getMessage());
}
}


}




private void login(BufferedReader br) throws IOException {
System.out.println("请输入用户名:");
String UserName = br.readLine();
System.out.println("请输入密码:");
String PassWord=br.readLine();
User u = um.login(UserName, PassWord);
System.out.println("热了欢迎"+u.getUserName());
}

private void update(BufferedReader br) throws IOException {
try {
// TODO Auto-generated method stub
System.out.println("请输入要更新的用户名:");
String UserName = br.readLine();
System.out.println("请输入新密码:");
String PassWord = br.readLine();
System.out.println("请输入新昵称:");
String NickName = br.readLine();
System.out.println("请输入新年龄:");
int Age = Integer.parseInt(br.readLine());
User u1 = new User(UserName, NickName, PassWord, Age);
um.update(u1);
System.out.println(UserName+"更新成功");
save();
} catch (NumberFormatException e) {
System.err.println("输入的年龄格式不正确");
}catch(UserException e){
System.err.println(e.getMessage());
}

}

private void delete(BufferedReader br) throws IOException {
// TODO Auto-generated method stub
System.out.println("请输入要删除的用户名:");
String username=br.readLine();
User u= um.loadUser(username);
if(u==null){
System.err.println("要删除的用户不存在");
}else{
um.Delete(username);
System.out.println(username+"删除成功");
}
save();
}

private void search(BufferedReader br) throws IOException {
System.out.println("请输入要查询的用户名:");
String username=br.readLine();
User u=um.loadUser(username);
if(u==null){
System.err.println("用户名不存在");
}else{
System.out.println(u);
}


}

private void list(){
List<User> list=um.list();
for(User u:list){
System.out.println(u);
}

}


private void add(BufferedReader br){
try {
System.out.println("请输入用户名:");
String UserName = br.readLine();
System.out.println("请输入密码:");
String PassWord=br.readLine();
System.out.println("请输入昵称:");
String NickName=br.readLine();
System.out.println("请输入年龄:");
int Age=Integer.parseInt(br.readLine());
User user=new User(UserName,PassWord,NickName,Age);
um.Add(user);
System.out.println("添加用户成功");
save();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}




}


public void showInfo(){
System.out.println("请选择下列操作");
System.out.println("------------------------------------------------------------------------------------------------");
System.out.println("添加【A】 删除【B】 修改【C】 列表【D】 查询【F】 登陆【L】 退出【Q】 ");
System.out.println("------------------------------------------------------------------------------------------------");
}



}








...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
MOTEC 2014-02-10
  • 打赏
  • 举报
回复
引用 2 楼 tangyufei888 的回复:
调试一下就出来了, 类变量um在从文件流中加载的时候有误: LoadUserManagerObject()方法中重新定义了一个局部变量um, 方法返回值又没有传递个类变量um,改下就行了。
恩 就是的 我已经改好了
汤雨飞 2014-02-09
  • 打赏
  • 举报
回复
调试一下就出来了, 类变量um在从文件流中加载的时候有误: LoadUserManagerObject()方法中重新定义了一个局部变量um, 方法返回值又没有传递个类变量um,改下就行了。
MOTEC 2014-02-08
  • 打赏
  • 举报
回复
MAP



package ListRegisterIO;

import java.io.Serializable;
import java.util.*;

public class UserManagerByMap implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	List<String> Forbid = Arrays.asList("cmb","nmb","fandong");
	Map<String ,User> users;
		
	
	public UserManagerByMap() {
		users = new HashMap<String,User>();
	}

	public void Add(User user){
		if(Forbid.contains(user.getNickName())){
			throw new UserException(user.getUserName()+"该用户名停止注册");
		}
		if(users.containsKey(user.getUserName())){
			throw new UserException(user.getUserName()+"已存在"); 
			}
		
		users.put(user.getUserName(), user);
		System.out.println(user.getUserName()+"添加成功");
		
		
	}
	
	public void Delete(String userName){
		if(!users.containsKey(userName)){
			throw new UserException(userName+"不存在");
		}
		users.remove(userName);
		System.out.println(userName+"删除成功");
	}
	
	public void update(User user){
		if(!users.containsKey(user.getUserName())){
			throw new UserException(user.getUserName()+"不存在");
			
		}
		users.put(user.getUserName(), user);
		
	}
	
	public User loadUser(String userName){
		return users.get(userName) ;
	}
	
	public User login(String userName,String Password){
		User u = loadUser(userName);
		if(!users.containsKey(userName)){
			throw new UserException(userName+"不存在");
		}
		
		if(!Password.equals(u.getPassWord())){
			
			throw new UserException(userName+"密码错误");
		}
		
		System.out.println(u.getUserName()+"登陆成功");
		return u;
	}
	
	public List<User> list(){
		System.out.println("=======================已添加======================");
		//存储用户信息
		List<User> saveUser = new ArrayList<User>();
		//存储用户名
		Set<String> key= new HashSet<String>(users.keySet());
		for(String username:key){
			saveUser.add(users.get(username));
		}
		return saveUser;
	}
}





62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧