今天寫(xiě)一個(gè)具有簡(jiǎn)單功能的學(xué)生管理系統(tǒng)!不過(guò),這個(gè)系統(tǒng)的構(gòu)建基于現(xiàn)實(shí)中的Java程序開(kāi)發(fā)框架!所有的代碼全部自己去寫(xiě),并且要在程序中體現(xiàn)出面向?qū)ο蟮募?xì)想和程序開(kāi)發(fā)中的框架實(shí)現(xiàn)原理。
首相,對(duì)問(wèn)題進(jìn)行分析:
程序要完成的功能很簡(jiǎn)單,當(dāng)程序運(yùn)行的時(shí)候出現(xiàn)以下信息

--------圖1--------
然后程序等待用戶輸入
如果用戶選擇1,那么進(jìn)入增加人員的信息(
下面來(lái)分析增加人員的過(guò)程:
首先,要新建一個(gè)Person類(lèi),當(dāng)用戶選擇1的時(shí)候就實(shí)例化Person類(lèi),并將Person進(jìn)行初始化,這并沒(méi)有結(jié)束此次的操作,最后的操作是將Person類(lèi)存儲(chǔ)到文件中,這個(gè)文件名我定義為Person.ser。這樣這個(gè)過(guò)程才算結(jié)束,但這里的結(jié)束并不是程序結(jié)束,而是完成了1操作,整個(gè)程序并沒(méi)有結(jié)束,除非用戶選擇4退出程序,否則程序一直執(zhí)行。
)
如果用戶選擇2,那么程序查看所有人員的信息(
在這個(gè)過(guò)程中,程序要將Person.ser文件中的內(nèi)容寫(xiě)入到程序中,并打印到控制臺(tái)顯示,執(zhí)行完這一步之后,程序返回上一步操作,在這里程序仍然沒(méi)有退出。
)
如果用戶選擇3,程序進(jìn)入的是對(duì)信息進(jìn)行修改的頁(yè)面(
這個(gè)過(guò)程相對(duì)來(lái)說(shuō)比較復(fù)雜,因?yàn)檫@個(gè)過(guò)程涉及到Person.ser文件內(nèi)容的寫(xiě)入和寫(xiě)出過(guò)程,也就是先把文件中的內(nèi)容輸出到控制臺(tái)顯示當(dāng)前用戶的信息,等待用戶輸入新的信息,當(dāng)用戶輸入信息后,要將原來(lái)的信息進(jìn)行覆蓋,也就是將信息從新寫(xiě)到Person.ser中——這里我們僅僅考慮Person.ser中只有一個(gè)Person的情況。
)
通過(guò)以上分析,我們可以很清楚的知道,這個(gè)程序需要一個(gè)循環(huán)來(lái)做支撐,并且這個(gè)循環(huán)每執(zhí)行一次都要輸出圖1的內(nèi)容。
首先新建一個(gè)Persion類(lèi)
package Object;
import java.io.Serializable;
//要想將類(lèi)存儲(chǔ)在文件中必須實(shí)現(xiàn)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類(lèi)中包含了程序中所有的text信息
package Text;
/**
*
* 這個(gè)類(lèi)是用來(lái)輸出整個(gè)程序中要輸出的所有的Text信息!!!
* Text類(lèi)中沒(méi)有任何屬性,只有幾個(gè)輸出文本的方法!!!
*
*
* */
public class Text {
//這個(gè)方法用來(lái)顯示用戶運(yùn)行程序時(shí)的信息
public String mainText(){
return "\n\t\t1.增加人員的信息" + "\n\t\t2.瀏覽人員的信息" + "\n\t\t3.修改人員的信息" + "\n\t\t4.退出系統(tǒng)" + "\n\n請(qǐng)選擇要使用的操作:";
}
//輸入有誤信息
public String errText(){
return "您所輸入的信息有誤,請(qǐng)重新輸入!!!";
}
//增加信息顯示
public String addText(){
return "請(qǐng)輸入您要增加的學(xué)生的信息";
}
public String addName(){
return "請(qǐng)輸入學(xué)生的姓名:";
}
public String addAge(){
return "請(qǐng)輸入學(xué)生的年齡:";
}
public String addScore(){
return "請(qǐng)輸入學(xué)生的成績(jī):";
}
//修改的內(nèi)容Modify
public String modifyText(){
return "請(qǐng)輸入您要修改的內(nèi)容";
}
public String edd(){
return "操作成功";
}
}
Methods類(lèi)中包含了所有的方法:
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;
/**
*
* 這個(gè)方法中包括了整個(gè)程序所要用到的方法,包括:
* 從控制臺(tái)寫(xiě)入(Input)信息方法;
* 向控制臺(tái)寫(xiě)出(Output)信息的方法;
* 基本上包含了所有的方法
*
*
* */
public class Methods {
private static Person obj;
//用戶從控制臺(tái)向程序?qū)懭霐?shù)據(jù),用來(lái)選擇用戶想要的操作
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;
}
//將類(lèi)從程序中寫(xiě)出,寫(xiě)到文件中
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;
}
//修改類(lèi)的方法
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èi)容為: \n" + p);
this.Output(this.InputPerson());
text.edd();
}
}
Main用來(lái)調(diào)用這些方法,完成想要的結(jié)果
package Main;
import Methods.Methods;
import Object.Person;
import Text.Text;
/**
*
* 這里是程序的入口,當(dāng)執(zhí)行這個(gè)程序的時(shí)候首先打印了圖1的內(nèi)容,為了表現(xiàn)面向?qū)ο蟮乃枷耄覍⒊绦蛑惺紫纫蛴〉男畔?br />
* 放入到一個(gè)Text類(lèi)中。
* 因?yàn)閮H僅當(dāng)用戶選擇了退出程序的時(shí)候才能退出程序,所以這個(gè)程序必須用一個(gè)‘死’循環(huán),只有當(dāng)用戶選擇了4的時(shí)候,用戶
* 才退出程序!
*
* */
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;
//有一個(gè)循序
while(mainCycle){
//只有當(dāng)用戶輸入的是4的時(shí)候程序才退出循環(huán)
System.out.println( text.mainText());
//捕獲控制臺(tái)用戶輸入的選擇信息
int select = m.InputSelect();
if(select == 4)//這里的判斷是——用戶輸入的信息等于4的時(shí)候程序結(jié)束循環(huán)
{
mainCycle = false;
}
else
{
switch(select)//用戶選擇的數(shù)據(jù)
{
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());
}
}
}
}
}
}
這個(gè)程序的運(yùn)行結(jié)果如下:



posted on 2010-11-06 17:15
tovep 閱讀(362)
評(píng)論(0) 編輯 收藏