1. 程序入口:
entry包(main入口):
public class ManagerEntry {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("--------信息管理系统--------");
System.out.println("1.学生管理 2.老师管理 3.退出");
String choice = sc.next();
switch (choice) {
case "1":
OtherStudentController studentController = new OtherStudentController();
studentController.start();
break;
case "2":
TeacherController teacherController = new TeacherController();
teacherController.start();
break;
case "3":
System.out.println("感谢您的使用");
System.exit(0);
break;
default:
System.out.println("您的输入有误, 请重新输入");
break;
}
}
}
}
2. 封装信息:
domain包(类的封装):
public class Person {
private String id;
private String name;
private String age;
private String birthday;
public Person() {
}
public Person(String id, String name, String age, String birthday) {
this.id = id;
this.name = name;
this.age = age;
this.birthday = birthday;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
public class Student extends Person {
public Student() {
}
public Student(String id, String name, String age, String birthday) {
super(id, name, age, birthday);
}
}
public class Teacher extends Person {
public Teacher() {
}
public Teacher(String id, String name, String age, String birthday) {
super(id, name, age, birthday);
}
}
3. 用户交互:
controller包:
- 接收信息、打印显示信息,与用户交互。
基础学生控制台(父类):
public abstract class BaseStudentController {
private StudentService studentService = new StudentService();
private Scanner sc = new Scanner(System.in);
public final void start() {
studentLoop:
while (true) {
System.out.println("--------欢迎来到 <学生> 管理系统--------");
System.out.println("1.添加学生 2.删除学生 3.修改学生 4.查看学生 5.退出");
String choice = sc.next();
switch (choice) {
case "1":
addStudent();
break;
case "2":
deleteStudentById();
break;
case "3":
updateStudent();
break;
case "4":
findAllStudent();
break;
case "5":
System.out.println("感谢您使用学生管理系统, 再见!");
break studentLoop;
default:
System.out.println("您的输入有误, 请重新输入");
break;
}
}
}
public final void updateStudent() {
String updateId = inputStudentId();
Student newStu = inputStudentInfo(updateId);
studentService.updateStudent(updateId, newStu);
System.out.println("修改成功!");
}
public final void deleteStudentById() {
String delId = inputStudentId();
studentService.deleteStudentById(delId);
System.out.println("删除成功!");
}
public final void findAllStudent() {
Student[] stus = studentService.findAllStudent();
if (stus == null) {
System.out.println("查无信息, 请添加后重试");
return;
}
System.out.println("学号\t\t姓名\t年龄\t生日");
for (int i = 0; i < stus.length; i++) {
Student stu = stus[i];
if (stu != null) {
System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t\t" + stu.getBirthday());
}
}
}
public final void addStudent() {
String id;
while (true) {
System.out.println("请输入学生id:");
id = sc.next();
boolean flag = studentService.isExists(id);
if (flag) {
System.out.println("学号已被占用, 请重新输入");
} else {
break;
}
}
Student stu = inputStudentInfo(id);
boolean result = studentService.addStudent(stu);
if (result) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
}
public String inputStudentId() {
String id;
while (true) {
System.out.println("请输入学生id:");
id = sc.next();
boolean exists = studentService.isExists(id);
if (!exists) {
System.out.println("您输入的id不存在, 请重新输入:");
} else {
break;
}
}
return id;
}
public abstract Student inputStudentInfo(String id);
}
学生控制台:
- 接受信息,使用set方法赋值。
public class StudentController extends BaseStudentController {
private Scanner sc = new Scanner(System.in);
@Override
public Student inputStudentInfo(String id) {
System.out.println("请输入学生姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
String age = sc.next();
System.out.println("请输入学生生日:");
String birthday = sc.next();
Student stu = new Student();
stu.setId(id);
stu.setName(name);
stu.setAge(age);
stu.setBirthday(birthday);
return stu;
}
}
开闭原则,进行修改:
- 接受信息使用构造方法赋值。
public class OtherStudentController extends BaseStudentController {
private Scanner sc = new Scanner(System.in);
@Override
public Student inputStudentInfo(String id) {
System.out.println("请输入学生姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
String age = sc.next();
System.out.println("请输入学生生日:");
String birthday = sc.next();
Student stu = new Student(id,name,age,birthday);
return stu;
}
}
教师控制台:
public class TeacherController {
private Scanner sc = new Scanner(System.in);
private TeacherService teacherService = new TeacherService();
public void start() {
teacherLoop:
while (true) {
System.out.println("--------欢迎来到 <老师> 管理系统--------");
System.out.println("请输入您的选择: 1.添加老师 2.删除老师 3.修改老师 4.查看老师 5.退出");
String choice = sc.next();
switch (choice) {
case "1":
addTeacher();
break;
case "2":
deleteTeacherById();
break;
case "3":
updateTeacher();
break;
case "4":
findAllTeacher();
break;
case "5":
System.out.println("感谢您使用老师管理系统, 再见!");
break teacherLoop;
default:
System.out.println("您的输入有误, 请重新输入");
break;
}
}
}
public void updateTeacher() {
String id = inputTeacherId();
Teacher newTeacher = inputTeacherInfo(id);
teacherService.updateTeacher(id,newTeacher);
System.out.println("修改成功");
}
public void deleteTeacherById() {
String id = inputTeacherId();
teacherService.deleteTeacherById(id);
System.out.println("删除成功");
}
public void findAllTeacher() {
Teacher[] teachers = teacherService.findAllTeacher();
if (teachers == null) {
System.out.println("查无信息, 请添加后重试");
return;
}
System.out.println("学号\t\t姓名\t年龄\t生日");
for (int i = 0; i < teachers.length; i++) {
Teacher t = teachers[i];
if (t != null) {
System.out.println(t.getId() + "\t" + t.getName() + "\t" + t.getAge() + "\t\t" + t.getBirthday());
}
}
}
public void addTeacher() {
String id;
while (true) {
System.out.println("请输入老师id:");
id = sc.next();
boolean exists = teacherService.isExists(id);
if (exists) {
System.out.println("id已被占用, 请重新输入:");
} else {
break;
}
}
Teacher t = inputTeacherInfo(id);
boolean result = teacherService.addTeacher(t);
if (result) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
}
public String inputTeacherId(){
String id;
while(true){
System.out.println("请输入id");
id = sc.next();
boolean exists = teacherService.isExists(id);
if(!exists){
System.out.println("您输入的id不存在, 请重新输入:");
}else{
break;
}
}
return id;
}
public Teacher inputTeacherInfo(String id){
System.out.println("请输入老师姓名:");
String name = sc.next();
System.out.println("请输入老师年龄:");
String age = sc.next();
System.out.println("请输入老师生日:");
String birthday = sc.next();
Teacher t = new Teacher();
t.setId(id);
t.setName(name);
t.setAge(age);
t.setBirthday(birthday);
return t;
}
}
4. 逻辑处理:
service包:
学生业务逻辑层:
public class StudentService {
private BaseStudentDao studentDao = StudentDaoFactory.getStudentDao();
public boolean addStudent(Student stu) {
return studentDao.addStudent(stu);
}
public boolean isExists(String id) {
Student[] stus = studentDao.findAllStudent();
boolean exists = false;
for (int i = 0; i < stus.length; i++) {
Student student = stus[i];
if(student != null && student.getId().equals(id)){
exists = true;
break;
}
}
return exists;
}
public Student[] findAllStudent() {
Student[] allStudent = studentDao.findAllStudent();
boolean flag = false;
for (int i = 0; i < allStudent.length; i++) {
Student stu = allStudent[i];
if(stu != null){
flag = true;
break;
}
}
if(flag){
return allStudent;
}else{
return null;
}
}
public void deleteStudentById(String delId) {
studentDao.deleteStudentById(delId);
}
public void updateStudent(String updateId, Student newStu) {
studentDao.updateStudent(updateId, newStu);
}
}
老师业务逻辑层:
public class TeacherService {
private TeacherDao teacherDao = new TeacherDao();
public boolean addTeacher(Teacher t) {
return teacherDao.addTeacher(t);
}
public boolean isExists(String id) {
Teacher[] teachers = teacherDao.findAllTeacher();
boolean exists = false;
for (int i = 0; i < teachers.length; i++) {
Teacher teacher = teachers[i];
if(teacher != null && teacher.getId().equals(id)){
exists = true;
break;
}
}
return exists;
}
public Teacher[] findAllTeacher() {
Teacher[] allTeacher = teacherDao.findAllTeacher();
boolean flag = false;
for (int i = 0; i < allTeacher.length; i++) {
Teacher t = allTeacher[i];
if(t != null){
flag = true;
break;
}
}
if(flag){
return allTeacher;
}else{
return null;
}
}
public void deleteTeacherById(String id) {
teacherDao.deleteTeacherById(id);
}
public void updateTeacher(String id, Teacher newTeacher) {
teacherDao.updateTeacher(id,newTeacher);
}
}
5. 数据存储层:
dao包:
接口:
public interface BaseStudentDao {
public abstract boolean addStudent(Student stu);
public abstract Student[] findAllStudent();
public abstract void deleteStudentById(String delId);
public abstract int getIndex(String id);
public abstract void updateStudent(String updateId, Student newStu);
}
秉承开闭原则,进行容器替换:
public class OtherStudentDao implements BaseStudentDao {
private static ArrayList<Student> stus = new ArrayList<>();
static {
Student stu1 = new Student("001","张三","23","2000-00-00");
Student stu2 = new Student("002","李四","24","2000-00-00");
stus.add(stu1);
stus.add(stu2);
}
public boolean addStudent(Student stu) {
stus.add(stu);
return true;
}
public Student[] findAllStudent() {
Student[] students = new Student[stus.size()];
for (int i = 0; i < students.length; i++) {
students[i] = stus.get(i);
}
return students;
}
public void deleteStudentById(String delId) {
int index = getIndex(delId);
stus.remove(index);
}
public int getIndex(String id){
int index = -1;
for (int i = 0; i < stus.size(); i++) {
Student stu = stus.get(i);
if(stu != null && stu.getId().equals(id)){
index = i;
break;
}
}
return index;
}
public void updateStudent(String updateId, Student newStu) {
int index = getIndex(updateId);
stus.set(index, newStu);
}
}
学生存储:
public class StudentDao implements BaseStudentDao {
private static Student[] stus = new Student[5];
static {
Student stu1 = new Student("001","张三","23","2000-00-00");
Student stu2 = new Student("002","李四","24","2000-00-00");
stus[0] = stu1;
stus[1] = stu2;
}
@Override
public boolean addStudent(Student stu) {
int index = -1;
for (int i = 0; i < stus.length; i++) {
Student student = stus[i];
if(student == null){
index = i;
break;
}
}
if(index == -1){
return false;
}else{
stus[index] = stu;
return true;
}
}
public Student[] findAllStudent() {
return stus;
}
public void deleteStudentById(String delId) {
int index = getIndex(delId);
stus[index] = null;
}
public int getIndex(String id){
int index = -1;
for (int i = 0; i < stus.length; i++) {
Student stu = stus[i];
if(stu != null && stu.getId().equals(id)){
index = i;
break;
}
}
return index;
}
public void updateStudent(String updateId, Student newStu) {
int index = getIndex(updateId);
stus[index] = newStu;
}
}
教师存储:
public class TeacherDao {
private static Teacher[] teachers = new Teacher[5];
public boolean addTeacher(Teacher t) {
int index = -1;
for (int i = 0; i < teachers.length; i++) {
Teacher teacher = teachers[i];
if(teacher == null){
index = i;
break;
}
}
if(index == -1){
return false;
}else{
teachers[index] = t;
return true;
}
}
public Teacher[] findAllTeacher() {
return teachers;
}
public void deleteTeacherById(String id) {
int index = getIndex(id);
teachers[index] = null;
}
public int getIndex(String id){
int index = -1;
for (int i = 0; i < teachers.length; i++) {
Teacher t = teachers[i];
if(t != null && t.getId().equals(id)){
index = i;
break;
}
}
return index;
}
public void updateTeacher(String id, Teacher newTeacher) {
int index = getIndex(id);
teachers[index] = newTeacher;
}
}
6. 解耦:
factory包:
- 提供 static 修改的 getStudentDao 方法,该方法用于创建 StudentDao 对象并返回
public class StudentDaoFactory {
public static BaseStudentDao getStudentDao(){
return new OtherStudentDao();
}
}