所有注释都在代码里
Demo
为了实现输出
在这里插入代码片package com.java0719.aftrnoon.Test01;
import java.util.Scanner;
//思考一个问题为什么要给Demo调用类?
//目的是为了让其简单化,让Demo只进行输出,同时是为了让其变量变得更让人清楚易懂
//为什么创建四个类来进行调用?
/*第一有两个类进行存储的可以理解为:一个商家要商品,
中间出现了中间商中间商为了给这个物品进行包装和挑选,
开发商有物资,中间商从这个开发商拿取物资。
这只是一个抽象的理解具体理解还是看个人
*/
public class Demo {
public static void main(String[] args) {
// 定义一个输出的量
Scanner sc = new Scanner(System.in);
// 把这个类带进来,定义为userManager、employeeManger、users
UserManager userManager = new UserManager();
EmployeeManager employeeManager = new EmployeeManager();
main:
for (; ; ) {
User[] users = userManager.getUsers();
// 输出这句话
System.out.println("请选择功能:1、注册 2、登入 ");
// 打印这个变量flag
String flag = sc.next();
// 进行死循环标题为u(为了方便跳出循环)
u:
for (; ; ) {
// switch(变量)
switch (flag) {
// case String flag = "1";可以这么理解当case值为1时候
/*
* case 1 是注册 注册需要注意什么?
* 用户名是否相等
* 所以才进行遍历,要明白每次遍历的目的是什么。
* */
case "1":
// 同样子进行打印
System.out.println("请输入账号");
String username = sc.next();
// 对users数组进行遍历定义变量名为user
for (User user : users) {
// 如果username 等于 user这个类调用出来的值
if (username == user.getUsername()) {
// 输出重复
System.out.println("用户名重复,请重新输入!");
// 跳出这个循环跳转到标题为 u 的死循环
continue u;
}
}
/*
* 遍历过后在考虑用户名密码问题
* */
System.out.println("请输入密码:");
String password = sc.next();
// 调用这两个username 和 password 最后输出的结果给info这个变量
// 为什么可以以这么用这个是在UserManger 这个类里面进行了进行了一个输出,最后直接拿出来这个结果
String info = userManager.register(username, password);
System.out.println(info);
continue main;
// 登入我们定一个初始的admin为了在里面进行添加查询等系列操作
case "2":
System.out.println("请输入账号:");
String username1 =sc.next();
System.out.println("请输入密码:");
String password1 = sc.next();
// 定义变量 b 把 username1 和 password1 带入到UserManger 里面的构造器进行套值
boolean b =userManager.login(username1,password1);
// 当b 为真时候进行判断
if(b){
// 进到员工管理
// new一个新的类让里面的方法被调用
Employee [] employees = employeeManager.getEmployees();
System.out.println("登录成功!");
e:
for (;;){
System.out.println("请选择功能:1.添加员工 2.查询员工 3.修改员工 4.删除员工");
String selection = sc.next();
switch (selection){
// 添加员工
case "1":
System.out.println("请输入员工姓名");
String name = sc.next();
// 定义变量 c 用employeeManger这个方法进行调用把name带进去
String s = employeeManager.addEmp(name);
System.out.println(s);
// 查到了进行跳出
continue e;
// 查询员工
case "2":
System.out.println("请选择功能:1.根据id查询 2.查询所有");
String s2 =sc.next();
switch (s2) {
// 根据查询id
case "1":
System.out.println("请输入id:");
int id = sc.nextInt();
// 定义 对象为empById 调用的是 employeeManager这个类
Employee empById = employeeManager.getEmpById(id);
if (empById != null) {
// 进行判断目的是为了害怕出现空指针异常
// 由于id带入了employeeManger这个类在这个类里面进行了一些操作
// 在employeeManger这面有注释
System.out.println("你要找的" + id + "员工信息为:" + empById.getName());
// empById.getName()这个是进行输出由于employeeManger进行了封装所以才用set和get方法
} else {
System.out.println("你要找的" + id + "员工不存在!");
}
continue e;
// 查询所有就需要员工姓名
case "2":
// 对这个employees进行了遍历对象名字为employee
for (Employee employee : employees) {
// 一样子如果数组出现了0 就会空指针异常
if (employee != null) {
// 进行输出id和name
System.out.println(employee.getId() + "," + employee.getName());
}
}
continue e;
}
// 修改员工信息
case "3":
System.out.println("请输入工号:");
int id =sc.nextInt();
// 用emp这个对象来代替,ID引入到这个类里面的一个值
Employee emp = employeeManager.getEmpById(id);
if (emp!= null){
System.out.println("你要的修改" + id + "员工信息" +emp.getName());
System.out.println("请输入新的名字:");
String name1 = sc.next();
// 在这里进行一个set方法把name1带进去了此时emp就是修改后的名字
emp.setName(name1);
// 需要把当前已经修改好的对象重新给数组
for (int i = 0 ; i< employees.length;i++){
// 更改的对象只是set 和 get里面的需要进行循环把emp带入进去
// 这里的emp指的是一个一直不管怎么改变数组中地址不会改变这里进行是对地址的一个判断
if (employees[i]==emp){
// 这里就是赋值
employees[i] = emp;
}
}
System.out.println("修改成功!新的信息为:"+ emp.getId() + "," + emp.getName());
}else {
System.out.println("你要找的" + id + "号员工不存在!");
}
case "4":
System.out.println("请输入工号");
int id1 = sc.nextInt();
// 定义emp1对象来代指输出的id
Employee emp1 = employeeManager.getEmpById(id1);
if (emp1!=null){
for (int i = 0; i < employees.length;i++){
// 依旧进行地址的比较,之后把删除的地方输入null就可以了
if(employees[i] == emp1){
employees[i] = null;
}
}
// 移位
System.out.println("删除成功");
}else {
System.out.println("你要找的" + id1 + "号员工不存在!");
}
}
continue e;
}
}else {
continue main;
}
}
}
}
}
}
Employee
package com.java0719.aftrnoon.Test01;
public class Employee {
private int id ;
private String name;
//封装id 和 name进行一个get 和 set 方法
public Employee(){
}
public Employee(int id,String name){
this.id = id;
this.name=name;
}
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 ;
}
}
EmployeeManger
package com.java0719.aftrnoon.Test01;
public class EmployeeManager {
private Employee[] employees = new Employee[10];
private int index = 0 ;
private int id = 1001;
//查询id
public Employee getEmpById(int id){
// 定义emp 为一个空值
Employee emp = null;
// 进行遍历
for (Employee employee : employees) {
// 当employee 不为空值这是一个数组对这个数组进行遍历
if(employee != null){
// 引用的id 等于这个数组里的吧employee 这个值赋给emp;
if(id == employee.getId()){
emp = employee;
}
}
}
// 返回emp 值
return emp;
}
//添加员工名字和工号
public String addEmp(String name){
Employee employee = new Employee(id,name);
employees[index] = employee;
// id采取的是从1001进行开始自增;
index ++;
return "添加成功,工号:" + (id++)+ ",姓名" +name;
}
public Employee[] getEmployees() {
return employees;
}
public void setEmployees(Employee[] employees) {
this.employees = employees;
}
}
User
package com.java0719.aftrnoon.Test01;
public class User {
// 封装这两个变量
// 所有 this 都是自己类本身定义的变量引用是为了对这个变量进行赋值,之后再封装。
// this 取值取近值
private String username;
private String password;
// set 和 get 方法来对变量username 和 password进行存值取值
// get 是为了取值的
public String getUsername() {
return username;
}
// set是为了存值的
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// 空参:习惯!要求即使有参也要
public User() {
}
// 对这个构造器内进行存值
public User(String username,String password){
this.username = username;
this.password = password;
}
}
UserManger
package com.java0719.aftrnoon.Test01;
public class UserManager {
// 封装这个数组,和 index(index封装是为了让其不让在其他类里混乱来保证当前类该变量的稳定性)
private User [] users = new User[10];
private int index = 1;
public UserManager(){
users[0] = new User("admin","123456");
}
// 定义一个String 类的构造器
public String register(String username,String password){
// 对User类进行赋值
User user = new User(username,password);
// user 赋值给 users 数组
users[index] = user;
// 每次下标加一
index++;
// 等于输出用户名密码
return "注册成功,账号:"+ username + ",密码" +password;
}
// 声明这个构造器是布尔类型在定义两个变量username 和 password
public boolean login(String username,String password){
// 定义b为布尔类型
boolean b =false;
// 对数组u进行遍历
for (User u : users) {
// 对 u(就是指users数组)进行判断里面没有空值
if(u != null){
// 如果没有空值进行下面判断在User类存储的数组(username 和 password)和你登入的名字是否一样
if (u.getUsername().equals(username) && u.getPassword().equals(password)){
// 把b的值赋值为true因为b为布尔类型所以输出的false或者true
b=true;
// 跳出循环,当相等时跳出循环
break;
}
}
}
// 把这个构造器这个布尔类型等待套用,套用时候直接输入两个变量username和password
// 在这个构造器里面进行判断在输出给套用这个类变量
return b;
}
// 对数组进行取值
public User[] getUsers() {
return users;
}
// 对数组进行存值
public void setUsers(User[] users) {
// this调用自己家的上面的封装users 等号右边的users是为了进行存取的
this.users = users;
}
}