之前拜读过《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); } } }
这样程序有一个好处,要增加相应的功能,只需新加一个类,然后在工厂类和主函数中添加相应的分支即可,对其他的代码不做修改,保证了代码的安全性。