diff --git "a/05 \346\236\227\344\274\237\345\275\254/20221222 \345\256\214\345\226\204\345\255\246\347\224\237\347\256\241\347\220\206\347\263\273\347\273\237.md" "b/05 \346\236\227\344\274\237\345\275\254/20221222 \345\256\214\345\226\204\345\255\246\347\224\237\347\256\241\347\220\206\347\263\273\347\273\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..874f374723edd7bd14e3ee7cd2724a8a44ba2627 --- /dev/null +++ "b/05 \346\236\227\344\274\237\345\275\254/20221222 \345\256\214\345\226\204\345\255\246\347\224\237\347\256\241\347\220\206\347\263\273\347\273\237.md" @@ -0,0 +1,199 @@ +## 学生管理系统 + +```java +import java.util.Scanner; + +public class studen { + //把扫描器放在最外层。这样里面的所有方法都可以用了 + static Scanner sc =new Scanner(System.in); + static String[] stu=new String[10]; + + //一个文件就是一个系统 + public static void main(String[] args) { + //先定义一个数组,存放学生的信息 + //家色号里面已经有一些学生信息了 + stu[0]="林伟彬"; + stu[1]="林彬彬"; + + + aa:while (true){ + welCom(); + int a = choiceMenu(sc.nextInt()); + if (a==1){ + break; + } + } + + } + public static void welCom(){ + System.out.println("\n====================================="+ + "\n- \t\t欢迎使用3班学生系统\t\t\t-"+ + "\n- \t\t1.浏览所有学生信息\t\t\t\t-"+ + "\n- \t\t2.添加学生信息\t\t\t\t-"+ + "\n- \t\t3.修改学生信息\t\t\t\t-"+ + "\n- \t\t4.删除学生信息\t\t\t\t-"+ + "\n- \t\t5.查询学生信息\t\t\t\t-"+ + "\n- \t\t6.退出管理系统\t\t\t\t-"+ + "\n====================================="+ + "\n\t请输入对应的数字选择你需要的功能:"); + } + //2.根据输入的数字。进入不同的菜单分支 + public static int choiceMenu(int num){ + int a = 0; + switch (num){ + case 1: + //1.浏览所有学生信息 +// System.out.println("你选择了浏览所有学生"); + viewAllStudent(); + break; + case 2: + //2.添加学生信息 + addStudent(); + break; + case 3: + //修改学生信息 + editstudent(); + break; + case 4: + deleteStudent(); + //删除学生信息 + + break; + case 5: + searchStudent(); + //查询单个学生信息 + break; + case 6: + //退出管理系统 + System.out.println("你选择了退出系统"); + a = 1; + break; + default: + System.out.println("您输入的选项错误"); + } + return a; + } + //5.查询学生信息 + private static void searchStudent() { + System.out.println("请输入要查找的学生姓名:"); + String naem =sc.next(); + //查找这个学生的索引值 + int index = searchIndex(naem); + //判断学生如果找不到,就返回-1 是找到了就返回索引+1 + if (index==-1){ + System.out.println("对不起,没有该学生!"); + }else { + System.out.println("恭喜,找到了。Ta在"+(index+1)+"个"); + } + } + + //2.1删除学生的一个方法 + private static void deleteStudent() { + //1.输入要删除的学生姓名 + System.out.println("请输入要删除的学生:"); + String name = sc.next(); + //在数组中,查找这个naem对应的索引值, + int index = searchIndex( name); + //判断这个索引存不存在, + if (index == -1) { + System.out.println("对不起,没有该学生,无法删除"); + } else { + //将此索引值对应的元素改成null,用null + //数组是定长的,无法真正的删除 + stu[index] = null; + System.out.println("修改成功!"); + } + } + //类中的方法,可以有权限修饰符来显示该方法能被谁调用 + + //2.2修改学生的一个方法 + public static void editstudent() { + //1.输入要修改的学生姓名 + System.out.println("请输入要修改的学生姓名:"); + String name =sc.next(); + //在数组中,查找这个naem对应的索引值, + int index =searchIndex(name); + //判断这个索引存不存在, + if (index==-1){ + System.out.println("对不起,没有该学生,无法修改"); + }else { + //将索引值对应的元素改成用户输入的姓名 + System.out.println("请问你要把【"+name+"】修改成谁"); + String newName =sc.next(); + stu[index]=newName; + System.out.println("修改成功!"); + } + //如果找不到,说明没有学生。就不能修改 + //2.将找到的学生姓名改成输入的姓名 + + } + + //3.浏览所有学生信息的方法,封装的好处,可以复用,方便维护 + public static void viewAllStudent(){ + System.out.println("3班现有以下学生"); + //计数器,统计null的个数 + int count =0; + for (String name:stu){ + if (name==null){ + count++; + continue; + } + System.out.print(name+"\t"); + } + //判断,null的个数正好等于数组长度,说明整个数据库都是null + if (count == stu.length){ + System.out.println("目前,还没有学生信息!"); + } + } + //4.添加学生信息 + public static void addStudent(){ + //先找到没有人的位置,也就是第一个null的位置 + //然后将它改成你要添加的姓名 + System.out.println("请输入你要添加的学生姓名:"); + String name =sc.next(); + //先判断是否已经有该学生了 + int index =searchIndex(name); + if (index!=-1){ + System.out.println("该学生已经在数据库了,请不要重复添加!"); + }else { + int nullIndex =searchIndex(null); + stu[nullIndex]=name; + System.out.println("添加成功!"); + viewAllStudent(); + } + + + } + + //4.1先把找位置的功能,单独出来,做一个方法,返回找到的位置 + public static int searchIndex(String str){ + //定义一个索引变量 + int index=-1;//因为在数组里,0表示第一个元素,改成-1,就表示不存在。 + //null是特殊类型。所以要单独判断 + if (str==null){ + for (int i=0; i120) { + System.out.println("你给的年龄有误"); + } else { + age = a; + } + } + + public int getAge() { + return age; + } + + //成员方法 + public void show() { + System.out.println(name + "," + age); + } + } + /* + 学生测试类 + */ + public class StudentDemo { + public static void main(String[] args) { + //创建对象 + Student s = new Student(); + //给成员变量赋值 + s.name = "林青霞"; + s.setAge(30); + //调用show方法 + s.show(); + } + } + ``` + +### 4.3 private的使用 + +* 需求:定义标准的学生类,要求name和age使用private修饰,并提供set和get方法以及便于显示数据的show方法,测试类中创建对象并使用,最终控制台输出  林青霞,30 + +* 示例代码: + + ```java + /* + 学生类 + */ + class Student { + //成员变量 + private String name; + private int age; + + //get/set方法 + public void setName(String n) { + name = n; + } + + public String getName() { + return name; + } + + public void setAge(int a) { + age = a; + } + + public int getAge() { + return age; + } + + public void show() { + System.out.println(name + "," + age); + } + } + /* + 学生测试类 + */ + public class StudentDemo { + public static void main(String[] args) { + //创建对象 + Student s = new Student(); + + //使用set方法给成员变量赋值 + s.setName("林青霞"); + s.setAge(30); + + s.show(); + + //使用get方法获取成员变量的值 + System.out.println(s.getName() + "---" + s.getAge()); + System.out.println(s.getName() + "," + s.getAge()); + + } + } + ``` + +### 4.4 this关键字 + +* this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题) + * 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量 + * 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量 + +```java +public class Student { + private String name; + private int age; + + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setAge(int age) { + this.age = age; + } + + public int getAge() { + return age; + } + + public void show() { + System.out.println(name + "," + age); + } +} +``` + +## 5. 构造方法 + +### 5.1 构造方法概述 + +构造方法是一种特殊的方法 + +* 作用:创建对象 Student stu = **new Student();** + +* 格式: + + public class 类名{ + + ​ 修饰符 类名( 参数 ) { + + ​ } + + } + +* 功能:主要是完成对象数据的初始化 + +* 示例代码: + +```java +class Student { + private String name; + private int age; + + //构造方法 + public Student() { + System.out.println("无参构造方法"); + } + + public void show() { + System.out.println(name + "," + age); + } +} +/* + 测试类 + */ +public class StudentDemo { + public static void main(String[] args) { + //创建对象 + Student s = new Student(); + s.show(); + } +} +``` + +### 5.2 构造方法的注意事项 + +* 构造方法的创建 + +如果没有定义构造方法,系统将给出一个默认的无参数构造方法 +如果定义了构造方法,系统将不再提供默认的构造方法 + +* 构造方法的重载 + +如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法 + +* 推荐的使用方式 + +无论是否使用,都手工书写无参数构造方法 + +* 重要功能! + +可以使用带参构造,为成员变量进行初始化 + +* 示例代码 + +```java +/* + 学生类 + */ +class Student { + private String name; + private int age; + + public Student() {} + + public Student(String name) { + this.name = name; + } + + public Student(int age) { + this.age = age; + } + + public Student(String name,int age) { + this.name = name; + this.age = age; + } + + public void show() { + System.out.println(name + "," + age); + } +} +/* + 测试类 + */ +public class StudentDemo { + public static void main(String[] args) { + //创建对象 + Student s1 = new Student(); + s1.show(); + + //public Student(String name) + Student s2 = new Student("林青霞"); + s2.show(); + + //public Student(int age) + Student s3 = new Student(30); + s3.show(); + + //public Student(String name,int age) + Student s4 = new Student("林青霞",30); + s4.show(); + } +} +``` + +### 5.3 标准类制作 + +① 类名需要见名知意 + +② 成员变量使用private修饰 + +③ 提供至少两个构造方法 + +* 无参构造方法 +* 带全部参数的构造方法 + +④ get和set方法 + +​ 提供每一个成员变量对应的setXxx()/getXxx() + +⑤ 如果还有其他行为,也需要写上 + +### 5.4 练习1 + +需求: + +​ 定义标准学生类,要求分别使用空参和有参构造方法创建对象,空参创建的对象通过setXxx赋值,有参创建的对象直接赋值,并通过show方法展示数据。 + +* 示例代码: + +```java +class Student { + //成员变量 + private String name; + private int age; + + //构造方法 + public Student() { + } + + public Student(String name, int age) { + this.name = name; + this.age = age; + } + + //成员方法 + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setAge(int age) { + this.age = age; + } + + public int getAge() { + return age; + } + + public void show() { + System.out.println(name + "," + age); + } +} +/* + 创建对象并为其成员变量赋值的两种方式 + 1:无参构造方法创建对象后使用setXxx()赋值 + 2:使用带参构造方法直接创建带有属性值的对象 +*/ +public class StudentDemo { + public static void main(String[] args) { + //无参构造方法创建对象后使用setXxx()赋值 + Student s1 = new Student(); + s1.setName("林青霞"); + s1.setAge(30); + s1.show(); + + //使用带参构造方法直接创建带有属性值的对象 + Student s2 = new Student("林青霞",30); + s2.show(); + } +} +``` + +### 5.4 练习2 + +![111](images\111.jpg) + +```java +public class User { + //1.私有化全部的成员变量 + //2.空参构造 + //3.带全部参数的构造 + //4.针对于每一个私有化的成员变量都要提供其对应的get和set方法 + //5.如果当前事物还有其他行为,那么也要写出来,比如学生的吃饭,睡觉等行为 + + private String username;//用户名 + private String password;//密码 + private String email;//邮箱 + private char gender;//性别 + private int age;//年龄 + + //空参构造方法 + public User() { + } + + //带全部参数的构造 + public User(String username, String password, String email, char gender, int age) { + this.username = username; + this.password = password; + this.email = email; + this.gender = gender; + this.age = age; + } + + //get和set + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public char getGender() { + return gender; + } + + public void setGender(char gender) { + this.gender = gender; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public void eat(){ + System.out.println(username + "在吃饭"); + } +} + +public class Test { + public static void main(String[] args) { + //写一个标准的javabean类 + //咱们在课后只要能把这个标准的javabean能自己写出来,那么就表示今天的知识点就ok了 + + + //利用空参构造创建对象 + User u1 = new User(); + //如果利用空参创建对象,还想赋值只能用set方法赋值 + u1.setUsername("zhangsan"); + u1.setPassword("1234qwer"); + u1.setEmail("itheima@itcast.cn"); + u1.setGender('男'); + u1.setAge(23); + //获取属性的值并打印 + System.out.println(u1.getUsername() + ", " + u1.getPassword() + + ", " + u1.getEmail() + ", " + u1.getGender() + ", " + u1.getAge()); + u1.eat(); + + System.out.println("============================="); + + //简单的办法 + //利用带全部参数的构造来创建对象 + //快捷键:ctrl + p + User u2 = new User("lisi","12345678","lisi@itcast.cn",'女',24); + System.out.println(u2.getUsername() + ", " + u2.getPassword() + + ", " + u2.getEmail() + ", " + u2.getGender() + ", " + u2.getAge()); + u2.eat(); + } +} + +``` + diff --git "a/05 \346\236\227\344\274\237\345\275\254/images/1.png" "b/05 \346\236\227\344\274\237\345\275\254/images/1.png" new file mode 100644 index 0000000000000000000000000000000000000000..69e38e4a45c77a813956c0b9acdcaa37a9e44043 Binary files /dev/null and "b/05 \346\236\227\344\274\237\345\275\254/images/1.png" differ diff --git "a/05 \346\236\227\344\274\237\345\275\254/images/111.jpg" "b/05 \346\236\227\344\274\237\345\275\254/images/111.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..06a93bd69176b93ce8d29e542f242835b2e28527 Binary files /dev/null and "b/05 \346\236\227\344\274\237\345\275\254/images/111.jpg" differ diff --git "a/05 \346\236\227\344\274\237\345\275\254/images/2(1).png" "b/05 \346\236\227\344\274\237\345\275\254/images/2(1).png" new file mode 100644 index 0000000000000000000000000000000000000000..b20a425ce858373fdc36dbd226a1610d4b9924b0 Binary files /dev/null and "b/05 \346\236\227\344\274\237\345\275\254/images/2(1).png" differ diff --git "a/05 \346\236\227\344\274\237\345\275\254/images/2.png" "b/05 \346\236\227\344\274\237\345\275\254/images/2.png" new file mode 100644 index 0000000000000000000000000000000000000000..b20a425ce858373fdc36dbd226a1610d4b9924b0 Binary files /dev/null and "b/05 \346\236\227\344\274\237\345\275\254/images/2.png" differ diff --git "a/05 \346\236\227\344\274\237\345\275\254/images/3.png" "b/05 \346\236\227\344\274\237\345\275\254/images/3.png" new file mode 100644 index 0000000000000000000000000000000000000000..556aa2c7cc9bdbebaa980195b1154a86450e03d5 Binary files /dev/null and "b/05 \346\236\227\344\274\237\345\275\254/images/3.png" differ diff --git "a/05 \346\236\227\344\274\237\345\275\254/images/4.png" "b/05 \346\236\227\344\274\237\345\275\254/images/4.png" new file mode 100644 index 0000000000000000000000000000000000000000..9424362f39b81c92f39dd687eb02af6918db5aa7 Binary files /dev/null and "b/05 \346\236\227\344\274\237\345\275\254/images/4.png" differ