taizhang

之前拜读过《java写一个简单的学生管理系统》,觉得可以使用工厂模式来做,便于维护和拓展。原文附上链接:http://www.cnblogs.com/liuzhenlong/p/4940599.html

这是一个用List来实现学生管理系统:

首先,既然要做学生管理系统,就先建一个学生类

package factory;
/*
 * 学生类
 */
public class Student {

    String name;
    String studentId;
    String sex;
    int grade;
    
    //  构造器
     
    public Student(String name,String studentId,String sex,int grade){
        this.name = name;
        this.studentId = studentId;
        this.sex = sex;
        this.grade = grade;
    }
    
    //  get、set方法
     
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getstudentId(){
        return studentId;
    }
    public void setstudentId(String studentId){
        this.studentId = studentId;
    }
    public String getSex(){
        return sex;
    }
    public void setSex(String sex){
        this.sex = sex;
    }
    public int getGrade(){
        return grade;
    }
    public void setGrade(int grade){
        this.grade = grade;
    }
    
}

接下来我们想到学生管理系统会有“增加学生”“删除学生”“修改成绩”“查询成绩”“查看全部学生信息”等功能,对,还有一个菜单界面,菜单界面可以在主函数当中做。

尽量使程序可维护,可拓展,我们可以通过继承的方式实现上边的功能。

一,新建一个Operation抽象类

package factory;

import java.util.LinkedList;
import java.util.List;

/*
 * 尝试用工厂模式来做学生管理系统_抽象操作类
 */
public abstract class Operation {
    static List<Student> StudentList = new LinkedList<Student>();
    public void menuOperation(){
        
    }

}

二、分别建立“增加学生”“删除学生”“修改成绩”“查询成绩”“查看全部学生信息”的类,继承自Operation

package factory;

import java.util.Scanner;

/*
 * 添加成员
 */
public class ManagerAdd extends Operation {
    
    public void menuOperation(){
        
        System.out.println("请输入学生的姓名:");
        Scanner Sname = new Scanner(System.in);
        String name = Sname.nextLine();
        System.out.println("请输入学生的性别:");
        Scanner Ssex = new Scanner(System.in);
        String sex = Ssex.nextLine();
        System.out.println("请输入学生的学号:");
        Scanner SId = new Scanner(System.in);
        String studentId = SId.nextLine();
        System.out.println("请输入学生的成绩:");
        Scanner Sgrade = new Scanner(System.in);
        int grade = Sgrade.nextInt();
        StudentList.add(new Student(name,studentId,sex,grade));
        System.out.println("添加成功!!!!!");
    }
}
package factory;
/*
 * 删除成员
 */
import java.util.Scanner;

public class ManageDelete extends Operation{

    public void menuOperation(){
        System.out.println("请告诉我需要删除学生的学号:");
        Scanner Sid = new Scanner(System.in);
        String SstudentId = Sid.nextLine();
        boolean isfindDelete = false;
        for (int i = 0; i < StudentList.size(); i++) {
            if(SstudentId.equals(StudentList.get(i).getstudentId())){
                System.out.println("发现了该学生,正在删除...");
                StudentList.remove(i);
                System.out.println("删除成功!!!");
                isfindDelete =true;
            }
        }
        if(!isfindDelete){
            System.out.println("抱歉,没有找到");
        }
    }
}
package factory;
/*
 * 修改成绩
 */
import java.util.Scanner;

public class ManageChange extends Operation{

    public void menuOperation(){
        System.out.println("请告诉我需要修改成绩学生的学号:");
        Scanner GId = new Scanner(System.in);
        String GstudentId = GId.nextLine();
        boolean isfindChange = false;
        for (int j = 0; j < StudentList.size(); j++) {
            if(GstudentId.equals(StudentList.get(j).getstudentId())){
                System.out.println("发现了该学生,正在修改...");
                System.out.println("学生原成绩为"+StudentList.get(j).getGrade());
                System.out.println("请输入修改后学生的成绩:");
                Scanner Ggrade = new Scanner(System.in);
                int grade2 = Ggrade.nextInt();
                StudentList.get(j).setGrade(grade2);
                System.out.println("修改成功!!!");
                isfindChange =true;
            }else{
                
            }
        }
        if(!isfindChange){
            System.out.println("抱歉,没有找到");
        }
    }
}
package factory;
/*
 * 查询某个学生的信息
 */
import java.util.Scanner;

public class ManageFind extends Operation{

    public void menuOperation(){
        System.out.println("请告诉我需要查询学生的学号:");
        Scanner CId = new Scanner(System.in);
        String CstudentId = CId.nextLine();
        boolean isfindData = false;
        for (int i = 0; i < StudentList.size(); i++) {
            if(CstudentId.equals(StudentList.get(i).getstudentId())){
                System.out.println("名字:"+StudentList.get(i).getName());
                System.out.println("性别:"+StudentList.get(i).getSex());
                System.out.println("学号:"+StudentList.get(i).getstudentId());
                System.out.println("成绩:"+StudentList.get(i).getGrade());
                isfindData = true;
            
            }
        }
        if(!isfindData){
        System.out.println("抱歉,没有找到");
        }
        
    }
}
package factory;
/*
 * 查看所有学生的信息
 */
public class ManageView extends Operation{

    public void menuOperation(){
        //遍历列表中的元素,输出
        for(Student st:StudentList){
            System.out.println(st.getName() + st.getstudentId() + st.getSex() + 
                    st.getGrade());
        }
    }
}

接下来就是主函数和工厂类的实现

主函数如下

package factory;
/*
 * 灵感来自http://www.cnblogs.com/liuzhenlong/p/4940599.html
 */
import java.util.Scanner;

public class TestManage {
    public static void main(String [] agrs){
        //select(studentList);
        System.out.println("***************");
        System.out.println("*欢迎来到学生管理系统 *");
        System.out.println("*1:增加学生                    *");
        System.out.println("*2:删除学生                    *");
        System.out.println("*3:修改成绩                    *");
        System.out.println("*4:查询成绩                    *");
        System.out.println("*5:查看学生信息              *");
        System.out.println("***************");
        
        System.out.println("您想选择的操作是:");
        Scanner sc = new Scanner(System.in);
        int choice = sc.nextInt();
        ManageFaction.creatOperation(choice);//调用工厂类
    }
}

工厂类

package factory;
/*
 * 工厂类:完成各个功能
 */
import java.util.Scanner;

public class ManageFaction {

    public static void creatOperation(int choice){
        boolean isStopOperation = true;
        while(isStopOperation){
            Operation oper = null;
            switch(choice){
            case 1:
                oper = new ManagerAdd();
                break;
            case 2:
                oper = new ManageDelete();
                break;
            case 3:
                oper = new ManageChange();
                break;
            case 4:
                oper = new ManageFind();
                break;
            case 5:
                oper = new ManageView();
                break;
                default: break;
            }
            oper.menuOperation();

            TestManage.main(null);
        }
    }
}

这样程序有一个好处,要增加相应的功能,只需新加一个类,然后在工厂类和主函数中添加相应的分支即可,对其他的代码不做修改,保证了代码的安全性。

 

分类:

技术点:

相关文章: