创建一个简单的学生信息管理系统,能够实现管理员登录,修改密码,录入教师账号和密码,录入学生账号和密码,查看个人信息,查看所有账号信息;教师登录,查看个人信息,修改密码,录入学生成绩,查询学生成绩;学生登录,查看个人信息,修改个人密码,所有的用户信息能存储在文件中,打开程序后能从文件中自动导入所有用户信息。

实现方法提示:

修改上次java面向对象一些基本练习题5,实现打开程序后从文件读入所有用户信息到内存,程序退出前把所有用户信息写入文件中。提示:使用ObjectInputStream和FileInputStream读文件,ObjectOutputStream和FileOutputStream写文件,能写到文件中的对象要对类进行序列化。

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;import java.util.List;public class Dome {public static void main(String[] args) {//从文件中读ArratList对象ArrayList<Person> persons =(ArrayList<Person>) KB.fileToObject("data.txt");//如果读出来的是null,或者ArraList中没有的元素执行下面操作if(persons==null) {persons = new ArrayList<Person>();persons.add(new Manager("001","001",Person.MANAGER));}while(true) {Person person = Person.login(persons);if(person!=null) {person.menu(persons);}else {System.out.println("登录失败");}System.out.println("确定退出请输入n,继续请按y");if("N".equalsIgnoreCase(KB.scan()))break;}KB.objectToFile(persons, "data.txt");}}import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;public class KB {public static String scan(){String string = "";BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));try{string = bufferedReader.readLine();}catch(IOException e){e.printStackTrace();}return string;
}public static int scanInt(){String string = "";int n = 0;BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));try{string = bufferedReader.readLine();n = Integer.parseInt(string);}catch(IOException e){e.printStackTrace();}return n;}public static void objectToFile(Object obj, String outputFile) {ObjectOutputStream oos = null;FileOutputStream fos = null;try {fos = new FileOutputStream(new File(outputFile));oos = new ObjectOutputStream(fos);//开始写入oos.writeObject(obj); } catch(Exception e) {e.printStackTrace();} finally {if(oos != null) {try {oos.close();} catch(IOException e1){e1.printStackTrace();}}if(fos !=null ) {try {fos.close();} catch (IOException e2) {e2.printStackTrace();}}}
}public static Object fileToObject(String fileName) {FileInputStream fis = null;ObjectInputStream ois = null;try {fis  = new FileInputStream(fileName);ois = new ObjectInputStream(fis);Object object = ois.readObject();return object;} catch(Exception e) {e.printStackTrace();} finally {if(fis != null) {try {fis.close();} catch(IOException e1){e1.printStackTrace();}}if(ois !=null ) {try {ois.close();} catch(IOException e2) {e2.printStackTrace();}}}return null;}}import java.util.ArrayList;public class Manager extends Person{public Manager() {super();}public Manager(String id, String pwd, int role) {super(id, pwd, role);}public void searchAll(ArrayList<Person> persons) {for(Person person:persons) {if(person.getRole()!=Person.MANAGER) person.search();}}public void luru(ArrayList<Person> p) {System.out.println("录入教师1,录入学生2");int i = Integer.parseInt(KB.scan());System.out.println("输入要录入的账号和密码");if(i==1) {p.add(new Teacher(KB.scan(),KB.scan(),Person.TEACHER));}else if(i==2) {p.add(new Student(KB.scan(),KB.scan(),Person.STUDENT));}System.out.println("录入成功!");}@Overridepublic void menu(ArrayList<Person> persons) {// TODO Auto-generated method stubboolean flag = true;while(flag) {System.out.println("1修改密码,2查看个人信息,3录入教师或学生信息, 4查看教师和学生信息,5退出以上操作");int i = KB.scanInt();switch(i) {case 1:this.changePwd();break;case 2:this.search();break;case 3:this.luru(persons);break;case 4:this.searchAll(persons);break;default:flag = false;break;}}}}import java.io.Serializable;
import java.util.ArrayList;public abstract class Person implements Serializable{private String id;private String pwd;private int role;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public int getRole() {return role;}public void setRole(int role) {this.role = role;}public static final int MANAGER = 1;public static final int TEACHER = 2;public static final int STUDENT = 3;// 有参和无参构造方法public Person() {super();}public Person(String id, String pwd, int role) {super();this.id = id;this.pwd = pwd;this.role = role;}public abstract void menu(ArrayList<Person>  persons);public void changePwd() {System.out.println("输入新密码");this.setPwd(KB.scan());System.out.println("密码修改成功!");//添加的}public void search() {String roles = "";switch(role) {case Person.MANAGER:roles = "管理员";break;case Person.TEACHER:roles = "教师";break;case Person.STUDENT:roles = "学生";break;}System.out.println(roles + "账号是:" + id + "\n密码是:" + pwd);}public static Person login(ArrayList<Person> persons) {System.out.println("请输入账号和密码:");String name = KB.scan();String pwd = KB.scan();for(int i = 0;i < persons.size();i++) {Person person = persons.get(i);if(name.equals(person.getId())&&pwd.equals(person.getPwd())) {return person;}else break;}return null;}}import java.util.ArrayList;public class Student extends Person {private int score;public int getScore() {return score;}public void setScore(int score) {this.score = score;}public Student() {super();}public Student(String id, String pwd, int role) {super(id, pwd, role);}@Overridepublic void search() {super.search();System.out.println("成绩是:"+score);}@Overridepublic void menu(ArrayList<Person> persons) {// TODO Auto-generated method stubboolean flag = true;while(flag) {System.out.println("1修改密码,2查看个人信息,3退出以上操作");int i = KB.scanInt();switch(i) {case 1:this.changePwd();break;case 2:this.search();break;default:flag = false;break;}}}
}import java.util.ArrayList;public class Teacher extends Person{public Teacher() {super();}public Teacher(String id, String pwd, int role) {super(id, pwd, role);}public void luru (ArrayList<Person> persons) {System.out.println("输入要录入的学生的账号");String name = KB.scan();for(int i= 0;i<persons.size();i++) {Person person =  persons.get(i);if(person.getId().equals(name)&&person.getRole()==Person.STUDENT) {System.out.println("输入要录入的学生成绩:");((Student)person).setScore(KB.scanInt());System.out.println("成绩录入成功!");//添加的}}}public void searchAll(ArrayList<Person> persons) {for (Person person:persons) {if(person.getRole()==Person.STUDENT)person.search();}}@Overridepublic void menu(ArrayList<Person> persons) {// TODO Auto-generated method stubboolean flag = true;while(flag) {System.out.println("1修改密码,2查看个人信息,3录入学生成绩,4查看所有学生信息,5退出以上操作");int i = KB.scanInt();switch(i) {case 1:this.changePwd();break;case 2:this.search();break;case 3:this.luru(persons);break;case 4:this.searchAll(persons);break;default:flag = false;break;}}}}

代码中有一些bug,希望能多多指正,谢谢。

java面向对象一些基本练习题6相关推荐

  1. java面向对象一些基本练习题4

    创建一个简单的学生信息管理系统,能够实现管理员登录,修改密码,录入教师账号和密码,录入学生账号和密码,查看个人信息,查看所有账号信息:教师登录,查看个人信息,修改密码,录入学生成绩,查询学生成绩:学生 ...

  2. java面向对象上机题库_Java面向对象编程上机-练习题汇总

    Java面向对象编程上机-练习题汇总 [练习题1]类的成员变量: 猜数字游戏:一个类A有一个成员变量v,有一个初值100.定义一个类,对A类的成员变量v进行猜.如果大了则提示大了,小了则提示小了.等于 ...

  3. Java面向对象练习题

    练习题 题目分析 总结 题目分析 一. 定义一个Hero类 属性有 power,name,分别代表体力值和英雄的名子,体力值默认为100: 方法有 1.void go(); //行走的方法,如果体力值 ...

  4. java面向对象 程序设计题_java面向对象程序设计练习题

    java面向对象程序设计练习题 [练习题]01.类的成员变量 猜数字游戏 一个类 A 有一个成员变量 v有一个初值100.定义一个类 对 A 类的成员变量 v 进行猜.如果大了则提示大了 小 ...

  5. 【Java】Java学习笔记(2)——Java面向对象基础作业函数题

    本人私人博客:Megalomania,大部分文章会现在博客上传,有不足之处欢迎指正. 学校小学期Java课程的练习题,留个档便于以后需要时候有例子可以回忆,写的烂的地方请多多包含 1.求两个数值之和 ...

  6. java面向对象程序设计 习题答案_Java面向对象程序设计习题解答与实验 张桂珠.pdf...

    Java 面 向对 象 程 序 设 计 习题 解 答 与 实验 张桂珠 姚晓峰 陈爱国 主编 北 京 邮 电 大 学 出 版 社 ·北 京· 内 容 简 介 Java 面向对象程序设计需要做大量的练习 ...

  7. java面向对象-------静态初始化块

    1.构造方法用于对象的初始化!静态初始化块,用于类的初始化操作,在静态初始化块中不能直接访问非static成员. package java面向对象; /** * 测试静态初始化块 */public c ...

  8. JAVA面向对象-----final关键字

    JAVA面向对象-–final关键字 1:定义静态方法求圆的面积 2:定义静态方法求圆的周长 3:发现方法中有重复的代码,就是PI,圆周率.1:如果需要提高计算精度,就需要修改每个方法中圆周率. 4: ...

  9. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

最新文章

  1. python根据二叉树的前序遍历和中序遍结果历重建二叉树
  2. Java线程详解(17)-原子量
  3. Fiddler之弱网测试(Web)
  4. js比较两个String字符串找出不同,并将不同处高亮显示
  5. 第四范式裴沵思出席绿公司年会:传统企业要尽快完成在线化武装
  6. 多线程调用同一个方法,局部变量会共享吗
  7. 数组作为方法参数_传递地址
  8. VB.NET实现DirectPlay(3)Find HOSTs
  9. android自定义表盘部件,Android自定义view仿支付宝芝麻信用表盘
  10. DSDV的问题(Problems of DSDV)
  11. vb把窗体嵌入桌面底层_桌面透明便签插件便签软件
  12. java 到异常_java编程中遇到的异常以及异常的一些处理
  13. LINUX CENTOS 7 X86_64中开始菜单的编辑安装软件alacarte即可
  14. Q3DSurface 配置使用教程
  15. java画图工具_java画图板工具
  16. 小程序未来移动社交电商!
  17. 教你自制一款简单的助听器
  18. 笔记本电脑的应用、维护、采购全攻略
  19. 旅行商问题(TSP)
  20. 教师需要为学生的学习把握节奏

热门文章

  1. 海康威视 测试工程师 校招一面面经
  2. java设计五子棋游戏总结
  3. vue修改config后怎么生效_vue组件中修改样式怎么不生效?
  4. 《云计算架构技术与实践》连载17:2.4.2 存储云
  5. html导航栏移动线的位置,编辑html,如何把导航栏固定在网页底部随屏幕移动?...
  6. 互联网架构【高可用】
  7. 一个数据分析师的自我修养
  8. daydayup.py
  9. 【BCH-2 5A 50HZ差动继电器】
  10. 闭观修炼中........!