我們采用分層的項目思想,將該系統分為前臺顯示層,后臺業務處理層,存儲層。
該系統程序中有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進行操作:
