我们采用分层的项目思想,将该系统分为前台显示层,后台业务处理层,存储层。
该系统程序中有Main 、Mnue、 Person 、PersonOperate 、FileOperate和 InputData
Menu属于前台显示层,它列出管理系统的菜单
StudentOperate属于后台业务处理层, 它的主要作用是①接收数据②实例化对象③调用FileObject类
FileOperate属于存储层,它应用IO进行读写操作
部分代码如下:
InputData类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
publicclass InputData {
private BufferedReader buf=null;
public InputData(){
buf=new BufferedReader(new InputStreamReader(System.in));
}
public String getString(){
String str=null;
try{
str=buf.readLine();
}catch(IOException e){}
return str;
}
publicint getInt(){
int temp=0;
//如果输入的不是数字,至少应该有一个提示,告诉用户输入错了
//可以使用正则表达式
String str=null;
boolean flag=true;
while(flag){
//输入数据
str=this.getString();
if(!(str.matches("""d+"))){
//如果输入的不是一个数字,则必须重新输入
System.out.print("输入的内容必须是整数,请重新输入:");
}else{
//输入的是一个正确的数字,则可以进行转换
temp=Integer.parseInt(str);
//表示退出循环
flag=false;
}
}
return temp;
}
publicfloat getFloat(){
float f=0.0f;
//如果输入的不是数字,至少应该有一个提示,告诉用户输入错了
//可以使用正则表达式
String str=null;
boolean flag=true;
while(flag){
//输入数据
str=this.getString();
if(!(str.matches("""d+?.""d{1,2}"))){
//如果输入的不是一个数字,则必须重新输入
System.out.print("输入的内容必须是小数(小数点后两位),请重新输入:");
}else{
//输入的是一个正确的数字,则可以进行转换
f=Float.parseFloat(str);
//表述退出循环
flag=false;
}
}
return f;
}
}
FileOperate类
package com.dr.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
publicclass FileOperate {
publicstaticfinal String FILENAME="E:""person.ser";
//把对象保存在文件之中
publicvoid save(Object obj){
ObjectOutputStream out=null;
try{
out=new ObjectOutputStream(new FileOutputStream(new File(FILENAME)));
//写入对象
out.writeObject(obj);
}catch(Exception e){
try{
throw e;
}catch(Exception e1){}
}finally{
try{
out.close();
}catch(Exception e){}
}
}
//把对象从文件中读出来
public Object read() throws Exception{
Object obj=null;
ObjectInputStream input=null;
try{
input=new ObjectInputStream(new FileInputStream(new File(FILENAME)));
obj=input.readObject();
}catch(Exception e){
throw e;
}finally{
try{
input.close();
}catch(Exception e){}
}
return obj;
}
}
StudentOperate类
package com.dr.op;
import com.dr.util.FileOperate;
import com.dr.util.InputData;
import com.dr.vo.Student;
publicclass StudentOperate {
private InputData input=null;
public StudentOperate(){
this.input=new InputData();
}
publicvoid add(){
//要使用输入数据的类
String name=null;
int age=0;
float score=0.0f;
System.out.print("请输入学生姓名:");
name=this.input.getString();
System.out.print("请输入学生年龄:");
age=this.input.getInt();
System.out.print("请输入学生成绩:");
score=this.input.getFloat();
//生成Student对象,把对象保存在文件中
Student s=new Student(name,age,score);
try{
new FileOperate().save(s); //io操作层
System.out.println("数据保存成功!");
}catch(Exception e){
System.out.println("数据保存失败!");
}
}
publicvoid show(){
//从文件中把内容读进来
Student s=null;
try{
s=(Student)new FileOperate().read();
}catch(Exception e){
System.out.println("显示内容失败,请确定数据是否存在!");
}
if(s!=null){
System.out.println(s);
}
}
publicvoid update(){
//先将之前的信息查出来
Student s=null;
try{
s=(Student)new FileOperate().read();
}catch(Exception e){
System.out.println("显示内容失败,请确定数据是否存在!");
}
if(s!=null){
String name=null;
int age=0;
float score=0.0f;
System.out.print("请输入新的姓名(原姓名:"+s.getName()+")");
name=this.input.getString();
System.out.print("请输入新的年龄(原年龄:"+s.getAge()+")");
age=this.input.getInt();
System.out.print("请输入新的成绩(原成绩:"+s.getScore()+")");
score=this.input.getFloat();
//信息重新设置
s.setName(name);
s.setAge(age);
s.setScore(score);
try{
new FileOperate().save(s);
System.out.println("数据更新成功!");
}catch(Exception e){
System.out.println("数据更新失败!");
}
}
}
}
Menu类
package com.dr.menu;
import com.dr.op.StudentOperate;
import com.dr.util.InputData;
publicclass Menu {
InputData input=null;
public Menu(){
this.input=new InputData();
//循环出现菜单
while(true){
this.show();
}
}
//需要定义的菜单内容
publicvoid show(){
System.out.println("欢迎进入学生信息管理系统");
System.out.println(""t"t"t1、增加学生信息");
System.out.println(""t"t"t2、浏览学生信息");
System.out.println(""t"t"t3、修改学生信息");
System.out.println(""t"t"t4、退出系统");
System.out.print(""n"n请选择要使用的操作:");
int temp=input.getInt();
switch(temp){
case 1:{//增加学生信息
new StudentOperate().add();
break;
}
case 2:{//浏览学生信息
new StudentOperate().show();
break;
}
case 3:{//修改学生信息
new StudentOperate().update();
break;
}
case 4:{//退出系统
System.out.println("选择的是退出系统");
System.out.println("系统退出!");
System.exit(1);
}
}
}
}
Main类,对系统进行测试
package com.dr.main;
import com.dr.menu.Menu;
publicclass Main {
publicstaticvoid main(String[] args) {
new Menu();
}
}
运行结果:
选择1进行操作:
选择2进行操作:
选择3进行操作:
选择4进行操作: