随笔 - 20  文章 - 57  trackbacks - 0
<2010年11月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

51CTO

搜索

  •  

最新评论

阅读排行榜

评论排行榜

今天写一个具有简单功能的学生管理系统!不过,这个系统的构建基于现实中的Java程序开发框架!所有的代码全部自己去写,并且要在程序中体现出面向对象的细想和程序开发中的框架实现原理。

首相,对问题进行分析:

程序要完成的功能很简单,当程序运行的时候出现以下信息
--------图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());
    }
    }
   }
   
  }
 
  
 }

}


这个程序的运行结果如下:




posted on 2010-11-06 17:15 tovep 阅读(339) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
主页