Java中的一些思想
Java中的一些思想
1 分类思想
-
分工协作,专人干专事
-
信息管理系统
-
Student类
标准学生类,封装键盘录入的学生信息(id , name , age , birthday) -
StudentDao类
Dao : (Data Access Object 缩写) 用于访问存储数据的数组或集合 -
StudentService类
用来进行业务逻辑的处理(例如: 判断录入的id是否存在) -
StudentController类
和用户打交道(接收用户需求,采集用户信息,打印数据到控制台)
-
2 分包思想
- 如果将所有的类文件都放在同一个包下,不利于管理和后期维护,所以,对于不同功能的类文件,可以放在不同的包下进行管理
-
包: 本质上就是文件夹
-
创建包
-
多级包之间使用 " . " 进行分割
-
多级包的定义规范:公司的网站地址翻转(去掉www)
-
-
包的命名规则: 字母都是小写
-
注意事项
-
package语句必须是程序的第一条可执行的代码
-
package语句在一个java文件中只能有一个
-
如果没有package,默认表示无包名
-
3 类与类之间的访问
-
同一个包下的访问: 不需要导包,直接使用即可
-
不同包下的访问
-
import
导包后访问 -
通过全类名(包名 + 类名)访问
-
-
注意:
import 、package 、class
三个关键字的摆放位置存在顺序关系package
必须是程序的第一条可执行的代码import
需要写在package
下面class
需要在import
下面
4 static关键字
static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量
4.1 static修饰的特点
-
被类的所有对象共享:是我们判断是否使用静态关键字的条件
-
随着类的加载而加载,优先于对象存在;对象需要类被加载后,才能创建
-
可以通过类名调用,也可以通过对象名调用
4.2 注意事项
-
静态方法只能访问静态的成员
-
非静态方法可以访问静态的成员,也可以访问非静态的成员
-
静态方法中是没有this关键字
5 信息管理系统
5.1 系统说明
5.1.1 学生管理系统
-
添加学生: 键盘录入学生信息(id,name,age,birthday)
使用数组存储学生信息,要求学生的id不能重复
-
删除学生: 键盘录入要删除学生的id值,将该学生从数组中移除,如果录入的id在数组中不存在,需要重新录入
-
修改学生: 键盘录入要修改学生的id值和修改后的学生信息
将数组中该学生的信息修改,如果录入的id在数组中不存在,需要重新录入
-
查询学生: 将数组中存储的所有学生的信息输出到控制台
5.1.2 老师管理系统
-
添加老师: 通过键盘录入老师信息(id,name,age,birthday)
使用数组存储老师信息,要求老师的id不能重复
-
删除老师: 通过键盘录入要删除老师的id值,将该老师从数组中移除,如果录入的id在数组中不存在,需要重新录入
-
修改老师: 通过键盘录入要修改老师的id值和修改后的老师信息
将数组中该老师的信息修改,如果录入的id在数组中不存在,需要重新录入
-
查询老师: 将数组中存储的所有老师的信息输出到控制台
5.2 实现步骤
包 | 存储的学生类 | 存储的老师类 | 作用 |
---|---|---|---|
com.fcarey.schoolManager.domain | Student.java | Teacher.java | 封装学生信息 |
com.fcarey.schoolManager.dao | StudentDao.java | TeacherDao.java | 访问存储数据的数组,进行赠删改查(库管) |
com.fcarey.schoolManager.service | StudentService.java | TeacherService.java | 业务的逻辑处理(业务员) |
com.fcarey.schoolManager.controller | StudentController.java | TeacherController.java | 和用户打交道(客服接待) |
com.fcarey.schoolManager.entry | SchoolManagerEntry.java | SchoolManagerEntry.java | 程序的入口类,提供一个main方法 |
5.3 代码实现
5.3.1 Student
-
Student.java
package com.fcarey.schoolManager.domain; /* * 封装学生信息 * */ public class Student { // 定义学生ID,指定为私有属性 private String sid; // 定义学生名字,指定为私有属性 private String name; // 定义学生年龄,指定为私有属性 private String age; // 定义学生生日,指定为私有属性 private String brithday; // 保留默认的构造方法 public Student() { } // 定义Student构造方法包含sid,name,age,birthday信息 public Student(String sid, String name, String age, String brithday) { this.sid = sid; this.name = name; this.age = age; this.brithday = brithday; } public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid; } 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 getBrithday() { return brithday; } public void setBrithday(String brithday) { this.brithday = brithday; } }
-
SchoolManagerEntry.java
package com.fcarey.schoolManager.entry;
import com.fcarey.schoolManager.controller.StudentController;
import com.fcarey.schoolManager.controller.TeacherController;
import java.util.Scanner;
/*
* 程序的入口类,提供一个main方法
* */
public class SchoolManagerEntry {
public static void main(String[] args) {
while (true) {
System.out.println("--------欢迎来到fcarey信息管理系统--------");
System.out.println("请输入您的选择: 1.学生管理 2.老师管理 3.退出");
Scanner sc = new Scanner(System.in);
// 接收用户输入的选择
String choice = sc.nextLine();
switch (choice) {
case "1":
StudentController studentController = new StudentController();
studentController.start();
break;
case "2":
TeacherController teacherController = new TeacherController();
teacherController.start();
break;
case "3":
// 退出当前正在运行的JVM虚拟机
System.exit(0);
default:
System.out.println("输入错误,请输入列表所对应数字!!!\n");
}
}
}
}
-
StudentController.java
package com.fcarey.schoolManager.controller; import com.fcarey.schoolManager.domain.Student; import com.fcarey.schoolManager.service.StudentService; import java.util.Scanner; /* * 和用户打交道 * */ public class StudentController { private StudentService studentService = new StudentService(); public void start() { studentLoop: while (true) { System.out.println("--------欢迎来到 <学生> 管理系统--------"); System.out.println("请输入您的选择: 1.添加学生 2.删除学生 3.修改学生 4.查询学生 5.查看学生 6.退出"); Scanner scanner = new Scanner(System.in); String choice = scanner.nextLine(); switch (choice) { case "1": // 添加学生 addStudent(); break; case "2": // 删除学生 deleteStudent(); break; case "3": // 修改学生 updateStudent(); break; case "4": // 查询学生 findStudent(); break; case "5": // 查看学生 retrieveStudent(); break; case "6": // 退出 System.out.println("退出学生管理系统"); break studentLoop; default: System.out.println("输入错误,请输入列表所对应数字!!!"); } } } private void findStudent() { // 处理数据库中没有学生时的情况 if (!isNull()) { System.out.println("当前数据库没有学生信息"); } else { // 处理数据库中有学生时情况 Scanner findsc = new Scanner(System.in); System.out.println("请输入学生id:"); String sid = findsc.nextLine(); // 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1 int flag = studentService.isExist(sid); // 当学生存在时 if (flag != -1) { // 将查询到的学生信息进行打印 Student student = studentService.findStudent(flag); System.out.println("所查询学生信息如下:\n" + student.getSid() + "\t" + student.getName() + "\t" + student.getAge() + "\t\t" + student.getBrithday()); } else { System.out.println("学生对象不存在哦"); } } } private void updateStudent() { Scanner updatesc = new Scanner(System.in); System.out.println("请输入学生id:"); String sid = updatesc.nextLine(); // 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1 int flag = studentService.isExist(sid); if (flag != -1) { // 当学生存在时,将更新的信息及所在学生数组中的索引位置传入studentService.updateStudent方法,进行数据更新 studentService.updateStudent(editStudent(sid), flag); System.out.println("更新成功。"); } else { System.out.println("学生对象不存在哦"); } } private Student editStudent(String sid) { // 处理学生信息,并返回学生对象 Scanner editsc = new Scanner(System.in); System.out.println("请输入学生姓名:"); String name = editsc.next(); System.out.println("请输入学生年龄:"); String age = editsc.next(); System.out.println("请输入学生生日:"); String birthday = editsc.next(); Student student = new Student(); student.setSid(sid); student.setName(name); student.setAge(age); student.setBrithday(birthday); return student; } private void deleteStudent() { Scanner deletesc = new Scanner(System.in); System.out.println("请输入学生id:"); String sid = deletesc.nextLine(); // 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1 if (studentService.isExist(sid) != -1) { // 如果存在该学生信息,将学生IP提交给studentService.deleteStudent处理 studentService.deleteStudent(sid); System.out.println("删除成功,当前还有以下学生"); // 返回最新的学生数据库信息 retrieveStudent(); } else { System.out.println("你要删除的学生不存在哦"); } } private void retrieveStudent() { Student student; // 遍历学生数据库 if (!isNull()) { System.out.println("当前数据库没有学生信息"); } else { for (int i = 0; i < studentService.retrieveStudent().length; i++) { if (studentService.retrieveStudent()[i] != null) { student = studentService.retrieveStudent()[i]; System.out.println(student.getSid() + "\t" + student.getName() + "\t" + student.getAge() + "\t\t" + student.getBrithday()); } } } } // 判断学生数据库,记录的学生是否为空,若是返回false,否返回true public boolean isNull() { StudentService teacherService = new StudentService(); boolean flag = false; for (int i = 0; i < teacherService.retrieveStudent().length; i++) { if (teacherService.retrieveStudent()[i] != null) { flag = true; break; } } return flag; } private void addStudent() { Scanner addsc = new Scanner(System.in); System.out.println("请输入学生id:"); String sid = addsc.nextLine(); int flag = studentService.isExist(sid); // 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1 if (flag == -1) { // 将用户输入的学生数据对象传入studentService.addStudent,以添加学生 studentService.addStudent(editStudent(sid)); System.out.println("添加成功。"); } else { System.out.println("该学生已经添加过啦"); } } }
-
StudentService.java
package com.fcarey.schoolManager.service; import com.fcarey.schoolManager.dao.StudentDao; import com.fcarey.schoolManager.domain.Student; /* * 业务的逻辑处理 * */ public class StudentService { // 接收StudentController的请求并转发给数据访问对象处理 StudentDao studentDao = new StudentDao(); public void addStudent(Student student) { studentDao.addStudent(student); } public int isExist(String sid) { return studentDao.isExist(sid); } public Student[] retrieveStudent() { return studentDao.retrieveStudent(); } public void deleteStudent(String sid) { studentDao.deleteStudent(sid); } public void updateStudent(Student student, int flag) { studentDao.updateStudent(student, flag); } public Student findStudent(int flag) { return studentDao.findStudent(flag); } }
-
StudentDao.java
package com.fcarey.schoolManager.dao;
import com.fcarey.schoolManager.domain.Student;
/*
* 访问存储数据的数组,进行增删改查
* */
public class StudentDao {
// 创建一个学生一维数组,定义5个元素
private static Student[] students = new Student[5];
// 构造默认的构造方法
public StudentDao() {
}
public void addStudent(Student student) {
for (int i = 0; i < students.length; i++) {
if (i == students.length - 1) {
// 确认学生是否加满
System.out.println("学生加满了,加不动了");
return;
}
if (students[i] == null) {
// 没有,则将接收过来的学生对象写入学生数组中
students[i] = student;
break;
}
}
}
public int isExist(String sid) {
int flag = -1;
// 确认是否数据库中是否存在当前学生id信息,存在返回的是所在学生数组索引位置,否则返回-1
for (int i = 0; i < students.length; i++) {
if (students[i] != null) {
if (students[i].getSid().equals(sid)) {
flag = i;
}
}
}
return flag;
}
public Student[] retrieveStudent() {
return students;
}
public void deleteStudent(String sid) {
students[isExist(sid)] = null;
}
public void updateStudent(Student student, int flag) {
students[flag]=student;
}
public Student findStudent(int flag) {
return students[flag];
}
}
5.3.2 Teacher
- 老师类似学生