首相,对问题进行分析:
程序要完成的功能很简单,当程序运行的时候出现以下信息
--------图1--------
然后程序等待用户输入
如果用户选择1,那么进入增加人员的信息(
下面来分析增加人员的过程:
首先,要新建一个Person类,当用户选择1的时候就实例化Person类,并将Person进行初始化,这并没有结束此次的操作,最后的操作是将Person类存储到文件中,这个文件名我定义为Person.ser。这样这个过程才算结束,但这里的结束并不是程序结束,而是完成了1操作,整个程序并没有结束,除非用户选择4退出程序,否则程序一直执行。
)
如果用户选择2,那么程序查看所有人员的信息(
在这个过程中,程序要将Person.ser文件中的内容写入到程序中,并打印到控制台显示,执行完这一步之后,程序返回上一步操作,在这里程序仍然没有退出。
)
如果用户选择3,程序进入的是对信息进行修改的页面(
这个过程相对来说比较复杂,因为这个过程涉及到Person.ser文件内容的写入和写出过程,也就是先把文件中的内容输出到控制台显示当前用户的信息,等待用户输入新的信息,当用户输入信息后,要将原来的信息进行覆盖,也就是将信息从新写到Person.ser中——这里我们仅仅考虑Person.ser中只有一个Person的情况。
)
通过以上分析,我们可以很清楚的知道,这个程序需要一个循环来做支撑,并且这个循环每执行一次都要输出图1的内容。
首先新建一个Persion类
package Object;
import java.io.Serializable;
//要想将类存储在文件中必须实现Serializable接口!!!
public class Person implements Serializable{
private String name;
private int age;
private float score;
public Person(String name, int age, float score){
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public String toString(){
return "NAME: " + this.name + " AGE: " + this.age + " SCORE: " + this.score;
}
}
Text类中包含了程序中所有的text信息
package Text;
/**
*
* 这个类是用来输出整个程序中要输出的所有的Text信息!!!
* Text类中没有任何属性,只有几个输出文本的方法!!!
*
*
* */
public class Text {
//这个方法用来显示用户运行程序时的信息
public String mainText(){
return "\n\t\t1.增加人员的信息" + "\n\t\t2.浏览人员的信息" + "\n\t\t3.修改人员的信息" + "\n\t\t4.退出系统" + "\n\n请选择要使用的操作:";
}
//输入有误信息
public String errText(){
return "您所输入的信息有误,请重新输入!!!";
}
//增加信息显示
public String addText(){
return "请输入您要增加的学生的信息";
}
public String addName(){
return "请输入学生的姓名:";
}
public String addAge(){
return "请输入学生的年龄:";
}
public String addScore(){
return "请输入学生的成绩:";
}
//修改的内容Modify
public String modifyText(){
return "请输入您要修改的内容";
}
public String edd(){
return "操作成功";
}
}
Methods类中包含了所有的方法:
package Methods;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;
import Object.Person;
import Text.Text;
/**
*
* 这个方法中包括了整个程序所要用到的方法,包括:
* 从控制台写入(Input)信息方法;
* 向控制台写出(Output)信息的方法;
* 基本上包含了所有的方法
*
*
* */
public class Methods {
private static Person obj;
//用户从控制台向程序写入数据,用来选择用户想要的操作
public int InputSelect(){
Scanner inputSelect = new Scanner(System.in);
int select = inputSelect.nextInt();
return select;
}
//增加Person信息方法
public Person InputPerson(){
Text text = new Text();
Scanner str = new Scanner(System.in);
System.out.println(text.addText() + "\n" + text.addName());
String name = str.next();
System.out.println(text.addAge());
int age = str.nextInt();
System.out.println(text.addScore());
float score = str.nextFloat();
Person p = new Person(name, age, score);
return p;
}
//将类从程序中写出,写到文件中
public void Output(Person p) throws Exception{
ObjectOutputStream out = null;
out = new ObjectOutputStream(new FileOutputStream(new File("e:\\person.ser")));
out.writeObject(p);
out.close();
}
//从文件中读入信息
public Person Output() throws Exception{
ObjectInputStream in = null;
in = new ObjectInputStream(new FileInputStream(new File("e:\\person.ser")));
obj = (Person)in.readObject();
Person p = obj;
in.close();
return p;
}
//修改类的方法
public void ModifyPerson() throws Exception{
Text text = new Text();
Scanner str = new Scanner(System.in);
//先从文件中读入信息
Person p = this.Output();
System.out.println(text.modifyText());
System.out.println("修改前的内容为: \n" + p);
this.Output(this.InputPerson());
text.edd();
}
}
Main用来调用这些方法,完成想要的结果
package Main;
import Methods.Methods;
import Object.Person;
import Text.Text;
/**
*
* 这里是程序的入口,当执行这个程序的时候首先打印了图1的内容,为了表现面向对象的思想,我将程序中首先要打印的信息
* 放入到一个Text类中。
* 因为仅仅当用户选择了退出程序的时候才能退出程序,所以这个程序必须用一个‘死’循环,只有当用户选择了4的时候,用户
* 才退出程序!
*
* */
public class Main {
final static Text text = new Text();
static Methods m = new Methods();
public static void main(String[] args) throws Exception{
boolean mainCycle = true;
//有一个循序
while(mainCycle){
//只有当用户输入的是4的时候程序才退出循环
System.out.println( text.mainText());
//捕获控制台用户输入的选择信息
int select = m.InputSelect();
if(select == 4)//这里的判断是——用户输入的信息等于4的时候程序结束循环
{
mainCycle = false;
}
else
{
switch(select)//用户选择的数据
{
case 1 : {
Person pp = m.InputPerson();
m.Output(pp);
System.out.println(text.edd());
{}//利用输入方法
};break;//用户增加人员信息方法
case 2 : {
System.out.println(m.Output());
};break;//浏览人员的信息
case 3 : {
Person p = m.Output();
System.out.println(text.modifyText());
p = m.InputPerson();
m.Output(p);
System.out.println(text.edd());
};break;//修改人员的信息
default : {
System.out.println(text.errText());
}
}
}
}
}
}
这个程序的运行结果如下: