综合利用封装,继承,多态,接口,自定义异常,Map集合的增删改查,正则匹配完成最全学生信息管理
本文是利用前期JAVA基础所写的信息管理系统由面向过程向面向对象的转变。包括了封装,继承,多态,接口,自定义接口,自定义异常和Map集合的增删改查操作以及正则匹配,代码如下
定义的类和接口如下
1,学生信息类,给学生定义基本属性,提供get,set方法便于给其进行修改,重写toString方法
2,接口主要给学员的信息,管理员的信息提供增删改查的方法方便管理员信息和学生业务类实现主要代码
3,学生业务类实现增删改查的接口
package com.feisi.test;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class StudentBus implements StudentsImp {
StudentInfo stu1=new StudentInfo("060601","王五","javaee",60);
StudentInfo stu2=new StudentInfo("060602","赵六","javaee",70);
StudentInfo stu3=new StudentInfo("060603","李四","javaee",80);
StudentInfo stu4=new StudentInfo("060604","张三","javaee",90);
StudentInfo stu5=new StudentInfo("060605","田七","javaee",88);
StudentInfo stu6=new StudentInfo("060606","刘八","javaee",78);
Map map=new HashMap<>();
public StudentBus() {
map.put(stu1.getStu_id(), stu1);
map.put(stu2.getStu_id(), stu2);
map.put(stu3.getStu_id(), stu3);
map.put(stu4.getStu_id(), stu4);
map.put(stu5.getStu_id(), stu5);
map.put(stu6.getStu_id(), stu6);
}
StudentInfo stu=new StudentInfo();
@Override
public void add() {
Scanner sc = new Scanner(System.in);
System.out.println("请添加学生的id");
String id=sc.nextLine();
stu.setStu_id(id);
System.out.println("请输入学生姓名\n");
String name=sc.nextLine();
stu.setStu_name(name);
System.out.println("请输入学生学科\n");
String prefession=sc.nextLine();
stu.setStu_profession(prefession);
System.out.println("请添加学生成绩");
int grade=sc.nextInt();
stu.setStu_grade(grade);
map.put(stu.getStu_id(),stu);
System.out.println(map);
System.out.println("添加成功");
}
@Override
public void delate() {
while (true) {
System.out.println("请输入想要删除的学员id:");
Scanner sc = new Scanner(System.in);
String id = sc.nextLine();
if (map.containsKey(id) == true) {
System.out.println("正在删除,请稍后!");
map.remove(id);
System.out.println("删除成功!");
break;
} else {
System.out.println("不好意思,查无此人!请重新输入");
continue;
}
}
}
@Override
public void update() {
System.out.println("请输入想要修改的学员id:");
Scanner sc = new Scanner(System.in);
String id = sc.nextLine();
System.out.println("请输入想要修改的学员姓名:");
String name = sc.nextLine();
if(map.containsKey(id)==true){
System.out.println("请输入想要修改的学员的分数:");
int grade = sc.nextInt();
StudentInfo stu=new StudentInfo(id,name,"javaee",grade);
map.replace(id,stu);
System.out.println("修改成功");
System.out.println(map);
}else {
System.out.println("不好意思,查无此人!");
}
}
@Override
public void select() {
System.out.println("请输入想要查询的学员id:");
Scanner sc = new Scanner(System.in);
String id = sc.nextLine();
if(map.containsKey(id)==true){
System.out.println(map.get(id));
}else {
System.out.println("不好意思,查无此人!");
}
}
}
4,管理员信息类同学生业务类重写了增删改查的接口类
package com.feisi.test;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.regex.Pattern;
public class AdminInfo implements StudentsImp {
private String name;
private String psw;
Map map=new HashMap();
public AdminInfo(){
this.name=“曹盛”;
this.psw=“123456”;
map.put(this.name,this.psw);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
@Override
public void add() {
System.out.println("请输入姓名");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
while (true) {
System.out.println("请输入密码由6位数组成");
String psw = sc.nextLine();
if (Pattern.compile("^[0-9]{6}$").matcher(psw).matches() == true) {
map.put(name, psw);
System.out.println(map);
break;
} else {
System.out.println("请重新输入设置的密码");
continue;
}
}
}
@Override
public void update() {
}
@Override
public void delate() {
}
@Override
public void select() {
System.out.println("请输入想要查询的管理员的姓名:");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
if(map.containsKey(name)==true){
System.out.println(map.get(name));
}else {
System.out.println("不好意思,查无此人!");
}
}
}
5,登录类继承了AdminInfo类给其初始化了一个管理员信息并且继承了map集合,在这里实现自定义异常
6,系统测试类多态的体现及操作流程
总结
1,对Map集合用迭代器的遍历取值不会,生成部分很僵硬,没有具体体现Map集合的优势,
2,对异常的处理掌握不够熟练应用起来比较困难。但总体来说能总体将其运用起来完成相应的需求。