1.分类思想
package->class
- domain->Xx类:标准类,封装键盘录入的基本信息
- dao->XxDao类:用于访问存储数据的数组集合,即和数据库直接交互类
- service->XxService类:用来进行业务的逻辑处理
- controller->XxController类:和用户打交道
- entry->XxxEntry类:程序的入口类,提供一个main方法
2.分包思想
- 不同类文件放到不同的包下,包即相当于文件夹
- 命名规则:字母都是小写,多级包-公司网站地址翻转
2.1 类与类之间的访问
- 同一个包下:不需要访问,直接导包
- 不同包下:import导包后访问或通过全类名(包名+类名)访问
3. 应用场景:多个包下出现相同的类名称
3.使用IDEA
- 新建empty project,取名Xxx
- 在Xxx下new module,选择Java,选择Java版本,取名xxxx
- 如果没有iml文件,
- java class默认在src下,如果要在src下的package下,需要用“package+路径名”声明
4.学生老师信息管理系统实操
需求说明:(代码逻辑只会展示学生,老师是一样的)
-
添加学生:键盘录入学生信息(id、name、age、birthday),使用数组存放学生信息,要求学生的id不能重复
-
删除学生:键盘录入要删除学生的id值,将该学生从数组中移除,如果录入的id在数组中不存在,需要重新录入
-
修改学生:键盘录入学生的id值和修改后的学生信息,将数组中该学生的信息修改,如果录入的id在数组中不存在,则需要重新录入
-
查询学生信息:将数组中存储的所有学生的信息输出到控制台
-
添加老师:键盘录入老师信息(id、name、age、birthday),使用数组存放老师信息,要求老师的id不能重复
-
删除老师:键盘录入要删除老师的id值,将该老师从数组中移除,如果录入的id在数组中不存在,需要重新录入
-
修改老师:键盘录入老师的id值和修改后的老师信息,将数组中该老师的信息修改,如果录入的id在数组中不存在,则需要重新录入
-
查询老师信息:将数组中存储的所有老师的信息输出到控制台
代码
增删改查的逻辑后续再补哈哈哈哈哈哈我太拖啦
被Static修饰的成员会被该类所有对象共享
被Static修饰的成员会随着类的加载而加载,优先于对象而存在
被Static修饰的成员可以使用“类名+.”的方式被调用
- break只能跳出当前switch语句,如果想要跳出指定循环语句,只需要在循环语句前加一个标号即可
lo:while(true){
switch(){
case 1:
break lo;
}
}
又或者是使用System,exit(0)语句,表示退出当前正在运行的JVM虚拟机
分包分析
- 用户逻辑有关的代码应该放在Controller类中。
main
package com.bianting.Administration.entry;
import com.bianting.Administration.controller.StudentController;
import com.bianting.Administration.controller.TeacherController;
import java.util.Scanner;
/**
* Created by 边婷
* on 2024/1/7 17:41
*
* 添加学生:键盘录入学生信息(id、name、age、birthday),使用数组存放学生信息,要求学生的id不能重复
* 删除学生:键盘录入要删除学生的id值,将该学生从数组中移除,如果录入的id在数组中不存在,需要重新录入
* 修改学生:键盘录入学生的id值和修改后的学生信息,将数组中该学生的信息修改,如果录入的id在数组中不存在,则需要重新录入
* 查询学生信息:将数组中存储的所有学生的信息输出到控制台
* */
public class Administration {
public static void main(String[] args) {
// 1. 创建Scanner对象
Scanner sc = new Scanner(System.in);
// 进入不同的端系统
while (true) {
// 搭建主菜单
System.out.println("********************************************************");
System.out.println("欢迎进入学生教师信息管理系统");
System.out.println("********************************************************");
System.out.println("请选择您要进入的端系统号:1-学生端;2-教师端;0-退出系统");
System.out.println("********************************************************");
System.out.println("请输入端系统号:");
String systemPortNum = sc.next();
switch (systemPortNum) {
case "1":
StudentController studentController = new StudentController();
studentController.start();
break;
case "2":
TeacherController teacherController = new TeacherController();
teacherController.start();
break;
case "0":
//System.out.println("T0");
System.exit(0);
break;
default:
System.out.println("您输入的信息有误,请重新输入");
break;
}
}
}
}
Controller
package com.bianting.Administration.controller;
import com.bianting.Administration.domain.Student;
import com.bianting.Administration.service.StudentsService;
import java.util.ArrayList;
import java.util.Scanner;
/**
* Created by 边婷
* on 2024/1/13 12:35
*/
/***
* 方法中接受用户输入的信息
* 将学生信息封装为学生对象传递给Service
* 接受方法的boolean类型返回值,根据结果在控制台打印输入成功、输入失败
*/
public class StudentController {
Scanner sc = new Scanner(System.in);
StudentsService studentsService = new StudentsService();
// 1.菜单
public void start(){
StudentLoop: while (true) {
// 搭建主菜单
System.out.println("********************************************************");
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("0 返回上一级菜单");
System.out.println("********************************************************");
System.out.println("请输入你想选择的操作:");
String Snum = sc.next();
switch (Snum) {
// 增
case "1":
// System.out.println("S1");
addStudent();
break;
// 删
case "2":
// System.out.println("S2");
deleteStudent();
break;
// 改
case "3":
// System.out.println("S3");
modifyStudent();
break;
// 查
case "4":
// System.out.println("S4");
findAllStudent();
break;
// 退出
case "0":
// System.out.println("S0");
// System.exit(0);
break StudentLoop;
default:
System.out.println("您输入的信息有误,请重新输入");
break;
}
}
}
// 2.添加学生
public void addStudent() {
while (true) {
// 输入学生的id、age、name、birthday
System.out.println("请输入学生的id:");
String id = sc.next();
// 判断id是否合法是否存在(在Service类里)
int idNumStudent = studentsService.idNumStudent(id);
if (idNumStudent==0) {
System.out.println("请输入学生的名字:");
String name = sc.next();
System.out.println("请输入学生的年龄:");
String age = sc.next();
System.out.println("请输入学生的生日:");
String birthday = sc.next();
// 封装为学生对象
Student student = new Student();
student.setAge(age);
student.setBirthday(birthday);
student.setId(id);
student.setName(name);
// 传入Service
studentsService.addStudent(student);
// 输出添加成功信息
System.out.println("添加成功");
break;
}
System.out.println("id重复,请重新输入:");
}
}
// 5.展示所有学生的信息
public void findAllStudent(){
System.out.println("学号\t\t姓名\t\t年龄\t\t生日");
ArrayList<Student> stuArr = studentsService.findAllStudent();
for (Student student : stuArr) {
System.out.println(student.getId()+"\t"+student.getName()+"\t\t"+student.getAge()+"\t\t"+student.getBirthday());
}
}
// 3.删除学生
public void deleteStudent() {
while (true) {
// 拿到键盘输入的学生id
System.out.println("请输入您想要删除的学生id:");
String Sid = sc.next();
int i = studentsService.idNumStudent(Sid);
if(i == 0){
System.out.println("目前还不存在此id的学生");
break;
}
else {
boolean result = studentsService.deleteStudent(Sid);
if (result) {
System.out.println("删除成功!");
break;
} else System.out.println("删除失败,请重新输入");
}
}
}
// 4.修改学生信息(根据指定id修改学生其他信息)
public void modifyStudent(){
while (true){
System.out.println("请输入你要修改的学生id:");
String id = sc.next();
if(studentsService.idNumStudent(id) == 0){
System.out.println("不存在此id的学生");
break;
}
if(studentsService.idNumStudent(id) ==1){
boolean remove = studentsService.deleteStudent(id);
if (remove){
addStudent();
break;
}
}
System.out.println("输入id有误!");
}
}
}
domain
package com.bianting.Administration.domain;
import java.util.Date;
/**
* Created by 边婷
* on 2024/1/7 17:44
* 键盘录入学生信息(id、name、age、birthday),使用数组存放学生信息,要求学生的id不能重复
*/
//JavaBean类
public class Student {
private int id;//学生id
private String name;
private int age;
private Date birthday;
// 有参构造和无参构造
public Student(int id, String name, int age, Date birthday) {
this.id = id;
this.name = name;
this.age = age;
this.birthday = birthday;
}
public Student() {
}
// set、get
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
service
package com.bianting.Administration.service;
/**
* Created by 边婷
* on 2024/1/9 1:21
*/
import com.bianting.Administration.dao.StudentDao;
import com.bianting.Administration.domain.Student;
import java.util.ArrayList;
/**
* service类主要注重业务逻辑的处理
*/
public class StudentsService {
StudentDao studentDao = new StudentDao();
// 添加学生
public boolean addStudent(Student student){
return studentDao.addStudent(student);
}
// 判断学生id是否合法
public int idNumStudent(String id){
return studentDao.idNumStudent(id);
}
// 展示所有学生信息
public ArrayList<Student> findAllStudent(){
return studentDao.findAllStudent();
}
// 通过学生id删除学生对象
public boolean deleteStudent(String id){
return studentDao.deleteStudent(id);
}
}
dao
package com.bianting.Administration.dao;
/**
* Created by 边婷
* on 2024/1/13 14:33
*/
import com.bianting.Administration.domain.Student;
import java.util.ArrayList;
/**
* 主要和数据库打交道
* 即数据容器的创建、增删改查
* 或是与数据库进行连接
*/
public class StudentDao {
private ArrayList<Student> stuArr = new ArrayList<>();
// 查找所有学生信息
public ArrayList<Student> findAllStudent(){
return stuArr;
}
// 根据指定id查找学生
public int idNumStudent(String id){
int flag=0;//记录集合中含有此id的学生数量
for (Student student : stuArr) {
if(id.equals(student.getId())){
flag++;
}
}
return flag;
}
// 根据指定id查找学生信息
// 在集合中添加学生信息
public boolean addStudent(Student student) {
return stuArr.add(student);
}
// 根据指定id删除对应学生对象
public boolean deleteStudent(String id) {
boolean remove=false;
for (Student student : stuArr) {
if(student.getId().equals(id)) {
remove = stuArr.remove(student);
return remove;
}
}
return remove;
}
}
5.一些碎碎念
2024.01.13
代码都跑起来了,有些逻辑依旧很简单没有完全想到但是作为练手我想是够了
有些小地方是改过不能照搬,稍微的看一下就都明白了
一年不写代码的恶果就是四五个小时就只能写这么点,我真是废物呜呜呜
2024.01.15
基本都完结了,该有的闭合都有了应该,以上只有学生端,教师端使用cv大法即可,终于!!!