四、java面向对象高级——分类和分包思想、static关键字

1.案例驱动模式

1.1案例驱动模式概述 (理解)

通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题

1.2案例驱动模式的好处 (理解)

  • 解决重复代码过多的冗余,提高代码的复用性
  • 解决业务逻辑聚集紧密导致的可读性差,提高代码的可读性
  • 解决代码可维护性差,提高代码的维护性

2.分类思想

2.1分类思想概述 (理解)

分工协作,专人干专事

2.2黑马信息管理系统 (理解)

  • Student类 标准学生类,封装键盘录入的学生信息(id , name , age , birthday)

  • StudentDao类 Dao : (Data Access Object 缩写) 用于访问存储数据的数组或集合

  • StudentService类 用来进行业务逻辑的处理(例如: 判断录入的id是否存在)

  • StudentController类 和用户打交道(接收用户需求,采集用户信息,打印数据到控制台)

    在这里插入图片描述

3.分包思想

3.1分包思想概述 (理解)

如果将所有的类文件都放在同一个包下,不利于管理和后期维护,所以,对于不同功能的类文件,可以放在不同的包下进行管理

3.2包的概述 (记忆)

  • 本质上就是文件夹

  • 创建包

    多级包之间使用 " . " 进行分割
    多级包的定义规范:公司的网站地址翻转(去掉www)
    比如:黑马程序员的网站址为www.itheima.com
    后期我们所定义的包的结构就是:com.itheima.其他的包名

  • 包的命名规则

    字母都是小写

3.3包的注意事项 (理解)

  • package语句必须是程序的第一条可执行的代码
  • package语句在一个java文件中只能有一个
  • 如果没有package,默认表示无包名

3.4类与类之间的访问 (理解)

  • 同一个包下的访问

    不需要导包,直接使用即可

  • 不同包下的访问

    1.import 导包后访问

    2.通过全类名(包名 + 类名)访问

  • 注意:import 、package 、class 三个关键字的摆放位置存在顺序关系

    package 必须是程序的第一条可执行的代码

    import 需要写在 package 下面

    class 需要在 import 下面

4.黑马信息管理系统

4.1系统介绍 (理解)

在这里插入图片描述

4.2学生管理系统 (应用)

4.2.1需求说明

  • 添加学生: 键盘录入学生信息(id,name,age,birthday)

    使用数组存储学生信息,要求学生的id不能重复

  • 删除学生: 键盘录入要删除学生的id值,将该学生从数组中移除,如果录入的id在数组中不存在,需要重新录入

  • 修改学生: 键盘录入要修改学生的id值和修改后的学生信息

    将数组中该学生的信息修改,如果录入的id在数组中不存在,需要重新录入

  • 查询学生: 将数组中存储的所有学生的信息输出到控制台

4.2.2实现步骤

  • 环境搭建实现步骤

    存储的类作用
    com.itheima.edu.info.manager.domainStudent.java封装学生信息
    com.itheima.edu.info.manager.daoStudentDao.java访问存储数据的数组,进行赠删改查(库管)
    com.itheima.edu.info.manager.serviceStudentService.java业务的逻辑处理(业务员)
    com.itheima.edu.info.manager.controllerStudentController.java和用户打交道(客服接待)
    com.itheima.edu.info.manager.entryInfoManagerEntry.java程序的入口类,提供一个main方法
  • 菜单搭建实现步骤

    • 需求
      • 黑马管理系统菜单搭建
      • 学生管理系统菜单搭建
    • 实现步骤
      1. 展示欢迎页面,用输出语句完成主界面的编写
      2. 获取用户的选择,用Scanner实现键盘录入数据
      3. 根据用户的选择执行对应的操作,用switch语句完成操作的选择
  • 添加功能实现步骤

    在这里插入图片描述

  • 添加功能优化:判断id是否存在

    在这里插入图片描述

  • 查询功能实现步骤

    在这里插入图片描述

  • 删除功能实现步骤

    在这里插入图片描述

  • 修改功能实现步骤

    在这里插入图片描述

  • 系统优化

    • 把updateStudent和deleteStudentById中录入学生id代码抽取到一个方法(inputStudentId)中
      该方法的主要作用就是录入学生的id,方法的返回值为String类型

    • 把addStudent和updateStudent中录入学生信息的代码抽取到一个方法(inputStudentInfo)中
      该方法的主要作用就是录入学生的信息,并封装为学生对象,方法的返回值为Student类型

4.2.3代码实现

学生类

public class Student {private String id;private String name;private String age;private String birthday;public Student() {}public Student(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;}}

程序入口InfoManagerEntry类

public class InfoManagerEntry {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":// System.out.println("学生管理");// 开启学生管理系统StudentController studentController = new StudentController();studentController.start();break;case "2":System.out.println("老师管理");TeacherController teacherController = new TeacherController();teacherController.start();break;case "3":System.out.println("感谢您的使用");// 退出当前正在运行的JVM虚拟机System.exit(0);break;default:System.out.println("您的输入有误, 请重新输入");break;}}}
}

StudentController类

public class StudentController {// 业务员对象private StudentService studentService = new StudentService();private Scanner sc = new Scanner(System.in);// 开启学生管理系统, 并展示学生管理系统菜单public void start() {//Scanner sc = new Scanner(System.in);studentLoop:while (true) {System.out.println("--------欢迎来到 <学生> 管理系统--------");System.out.println("请输入您的选择: 1.添加学生  2.删除学生  3.修改学生  4.查看学生  5.退出");String choice = sc.next();switch (choice) {case "1":// System.out.println("添加");addStudent();break;case "2":// System.out.println("删除");deleteStudentById();break;case "3":// System.out.println("修改");updateStudent();break;case "4":// System.out.println("查询");findAllStudent();break;case "5":System.out.println("感谢您使用学生管理系统, 再见!");break studentLoop;default:System.out.println("您的输入有误, 请重新输入");break;}}}// 修改学生方法public void updateStudent() {String updateId = inputStudentId();Student newStu = inputStudentInfo(updateId);studentService.updateStudent(updateId, newStu);System.out.println("修改成功!");}// 删除学生方法public void deleteStudentById() {String delId = inputStudentId();// 3. 调用业务员中的deleteStudentById根据id, 删除学生studentService.deleteStudentById(delId);// 4. 提示删除成功System.out.println("删除成功!");}// 查看学生方法public void findAllStudent() {// 1. 调用业务员中的获取方法, 得到学生的对象数组Student[] stus = studentService.findAllStudent();// 2. 判断数组的内存地址, 是否为nullif (stus == null) {System.out.println("查无信息, 请添加后重试");return;}// 3. 遍历数组, 获取学生信息并打印在控制台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 void addStudent() {// StudentService studentService = new StudentService();// 1. 键盘接收学生信息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);// 3. 将学生对象,传递给StudentService(业务员)中的addStudent方法boolean result = studentService.addStudent(stu);// 4. 根据返回的boolean类型结果, 在控制台打印成功\失败if (result) {System.out.println("添加成功");} else {System.out.println("添加失败");}}// 键盘录入学生idpublic 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 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;}
}

StudentService类

public class StudentService {// 创建StudentDao (库管)private StudentDao studentDao = new StudentDao();// 添加学生方法public boolean addStudent(Student stu) {// 2. 将学生对象, 传递给StudentDao 库管中的addStudent方法// 3. 将返回的boolean类型结果, 返还给StudentControllerreturn studentDao.addStudent(stu);}// 判断学号是否存在方法public boolean isExists(String id) {Student[] stus = studentDao.findAllStudent();// 假设id在数组中不存在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() {// 1. 调用库管对象的findAllStudent获取学生对象数组Student[] allStudent = studentDao.findAllStudent();// 2. 判断数组中是否有学生信息 (有: 返回地址,  没有: 返回null)// 思路: 数组中只要存在一个不是null的元素, 那就代表有学生信息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);}
}

StudentDao类

public class StudentDao {// 创建学生对象数组private static Student[] stus = new Student[5];// 添加学生方法public boolean addStudent(Student stu) {// 2. 添加学生到数组//2.1 定义变量index为-1,假设数组已经全部存满,没有null的元素int index = -1;//2.2 遍历数组取出每一个元素,判断是否是nullfor (int i = 0; i < stus.length; i++) {Student student = stus[i];if(student == null){index = i;//2.3 如果为null,让index变量记录当前索引位置,并使用break结束循环遍历break;}}// 3. 返回是否添加成功的boolean类型状态if(index == -1){// 装满了return false;}else{// 没有装满, 正常添加, 返回truestus[index] = stu;return true;}}// 查看学生方法public Student[] findAllStudent() {return stus;}public void deleteStudentById(String delId) {// 1. 查找id在容器中所在的索引位置int index = getIndex(delId);// 2. 将该索引位置,使用null元素进行覆盖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) {// 1. 查找updateId, 在容器中的索引位置int index = getIndex(updateId);// 2. 将该索引位置, 使用新的学生对象替换stus[index] = newStu;}
}

4.3老师管理系统 (应用)

4.3.1需求说明

  • 添加老师: 通过键盘录入老师信息(id,name,age,birthday)

    使用数组存储老师信息,要求老师的id不能重复

  • 删除老师: 通过键盘录入要删除老师的id值,将该老师从数组中移除,如果录入的id在数组中不存在,需要重新录入

  • 修改老师: 通过键盘录入要修改老师的id值和修改后的老师信息

    将数组中该老师的信息修改,如果录入的id在数组中不存在,需要重新录入

  • 查询老师: 将数组中存储的所有老师的信息输出到控制台

4.3.2实现步骤

  • 环境搭建实现步骤

    存储的类作用
    com.itheima.edu.info.manager.domainStudent.java Teacher.java封装学生信息 封装老师信息
    com.itheima.edu.info.manager.daoStudentDao.java TeacherDao.java访问存储数据的数组,进行赠删改查(库管)
    com.itheima.edu.info.manager.serviceStudentService.java TeacherService.java业务的逻辑处理(业务员)
    com.itheima.edu.info.manager.controllerStudentController.java TeacherController.java和用户打交道(客服接待)
    com.itheima.edu.info.manager.entryInfoManagerEntry.java程序的入口类,提供一个main方法
  • 菜单搭建实现步骤

    1. 展示欢迎页面,用输出语句完成主界面的编写
    2. 获取用户的选择,用Scanner实现键盘录入数据
    3. 根据用户的选择执行对应的操作,用switch语句完成操作的选择
  • 添加功能实现步骤

    在这里插入图片描述

  • 查询功能实现步骤

    在这里插入图片描述

  • 删除功能实现步骤

    在这里插入图片描述

  • 修改功能实现步骤

    在这里插入图片描述

  • 系统优化

    • 把updateTeacher和deleteTeacherById中录入老师id代码抽取到一个方法(inputTeacherId)中
      该方法的主要作用就是录入老师的id,方法的返回值为String类型
    • 把addTeacher和updateTeacher中录入老师信息的代码抽取到一个方法(inputTeacherInfo)中
      该方法的主要作用就是录入老师的信息,并封装为老师对象,方法的返回值为Teacher类型

4.3.3代码实现

老师类

public class Teacher extends Person{private String id;private String name;private String age;private String birthday;public Teacher() {}public Teacher(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;}
}

TeacherController类

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":// System.out.println("添加老师");addTeacher();break;case "2":// System.out.println("删除老师");deleteTeacherById();break;case "3":// System.out.println("修改老师");updateTeacher();break;case "4":// System.out.println("查看老师");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();// 2. 调用业务员中的删除方法, 根据id, 删除老师teacherService.deleteTeacherById(id);// 3. 提示删除成功System.out.println("删除成功");}public void findAllTeacher() {// 1. 从业务员中, 获取老师对象数组Teacher[] teachers = teacherService.findAllTeacher();// 2. 判断数组中是否有元素if (teachers == null) {System.out.println("查无信息, 请添加后重试");return;}// 3. 遍历数组, 取出元素, 并打印在控制台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) {// 1. 接收不存在的老师idSystem.out.println("请输入老师id:");id = sc.next();// 2. 判断id是否存在boolean exists = teacherService.isExists(id);if (exists) {System.out.println("id已被占用, 请重新输入:");} else {break;}}Teacher t = inputTeacherInfo(id);// 5. 将封装好的老师对象, 传递给TeacherService继续完成添加操作boolean result = teacherService.addTeacher(t);if (result) {System.out.println("添加成功");} else {System.out.println("添加失败");}}// 录入老师idpublic 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;}
}

TeacherService类

public class TeacherService {private TeacherDao teacherDao = new TeacherDao();public boolean addTeacher(Teacher t) {return teacherDao.addTeacher(t);}public boolean isExists(String id) {// 1. 获取库管对象中的数组Teacher[] teachers = teacherDao.findAllTeacher();boolean exists = false;// 2. 遍历数组, 取出每一个元素, 进行判断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);}
}

TeacherDao类

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) {// 1. 查询id在数组中的索引位置int index = getIndex(id);// 2. 将该索引位置的元素, 使用null进行替换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;}
}

5.static关键字

5.1static关键字概述 (理解)

static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量

5.2static修饰的特点 (记忆)

  • 被类的所有对象共享

    是我们判断是否使用静态关键字的条件

  • 随着类的加载而加载,优先于对象存在

    对象需要类被加载后,才能创建

  • 可以通过类名调用

    也可以通过对象名调用

5.3static关键字注意事项 (理解)

  • 静态方法只能访问静态的成员

  • 非静态方法可以访问静态的成员,也可以访问非静态的成员

  • 静态方法中是没有this关键字

  • 示例代码

    • Student类
    package com.itheima.test;public class Student {String name;int age;static String school;/*静态随着类的加载而加载, 优先于对象存在非静态需要在创建对象之后,才可以进行使用1. 静态方法中, 只能访问静态成员(成员变量, 成员方法)2. 非静态方法中, 可以使用静态成员, 也可以使用非静态成员3. 静态方法中, 没有this关键字*/public void show() {System.out.println(name + "..." + age + "..." + school);}public static void method(){// this: 当前对象的引用// this需要在创建对象之后, 才会存在, 静态存在的时候, 对象可能还没有被创建// this.name = "张三";System.out.println(school);}
    }
    • 测试类
    package com.itheima.test;public class Test1Static {/*1. 被static修饰的成员, 会被该类的所有对象所[共享]2. 被static修饰的成员, 会随着类的加载而加载, 优先于对象存在3. 多了一种调用方式, 可以通过类名.进行调用*/public static void main(String[] args) {Student.school = "传智专修学院";Student stu1 = new Student();stu1.name = "张三";stu1.age = 23;//stu1.school = "传智专修学院";stu1.show();Student stu2 = new Student();stu2.show();//调用静态方法Student.method();}
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五、java面向对象高级——java中的继承和抽象类

1. 继承 1.1 继承的实现&#xff08;掌握&#xff09; 继承的概念 继承是面向对象三大特征之一&#xff0c;可以使得子类具有父类的属性和方法&#xff0c;还可以在子类中重新定义&#xff0c;以及追加属性和方法 实现继承的格式 继承通过extends实现格式&#xff1a;class 子…

万丰科技机器人排名_2020年全国机器人企业数量大排名(省份榜|9月)

点击上方兔子岛关注浩然哥原创不易 欢迎分享转载请注明出处作者&#xff1a;浩然哥2020年全国机器人企业数量大排名省份榜|9月大家好&#xff0c;《全国机器人企业数量大排名》又和大家见面了。本期是2020年省份榜的9月份榜单。2020年年底了&#xff0c;近期7月、9月、11月&am…

php函数scandir_PHP函数glob:扫描目录文件更好的方式

如果想要扫描一个目录下的文件&#xff0c;以及目录&#xff0c;应该怎么做呢。大家第一印象&#xff0c;可能是 scandir &#xff0c;这个函数用来扫描给定路径下的文件列表&#xff0c;用法示例如下&#xff1a;array scandir ( string $directory [, int $sorting_order [, …

可信计算 沈昌祥_沈昌祥院士:用主动免疫可信计算构筑车联网安全防线

“智能网联汽车如果没有网络安全&#xff0c;就相当于一个没有免疫系统的人&#xff0c;因此要在智能汽车方面构筑自主可控、安全可信的产业链。” 在6月24日举办的第四届世界智能大会——新一代汽车智能化发展峰会上&#xff0c;中国工程院院士沈昌祥如是说。文&#xff5c;田…

七、java面向对象高级——内部类、lambda表达式及常用API

1.内部类 1.1 内部类的基本使用&#xff08;理解&#xff09; 内部类概念 在一个类中定义一个类。举例&#xff1a;在一个类A的内部定义一个类B&#xff0c;类B就被称为内部类 内部类定义格式 格式&举例&#xff1a; /*格式&#xff1a;class 外部类名{修饰符 class 内部…

id jquery选择器 开头_HTML的id选择器类选择器

一、问题&#xff1a;我们前面讲了标签选择器有一个缺陷就是它不加选择的把所有相同的标签全都变成统一样式&#xff0c;这对于我们个性化定制产生了阻碍&#xff0c;因此我们便引出了id选择器&#xff0c;来进行特别指定进行配置样式二、id选择器1.定义&#xff1a;根据指定的…

八、java中常见API及java异常处理

1.包装类 1.1 基本类型包装类&#xff08;记忆&#xff09; 基本类型包装类的作用 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据 常用的操作之一&#xff1a;用于基本数据类型与字符串之间的转换 基本类型对应的包装类 基本数据类型包装类by…

弹出并点击弹框关闭 自定义toast_关于别名配置使用弹框交互应用的思考

温馨提示如果你喜欢本文&#xff0c;请帮助我将这篇文章分享到朋友圈&#xff0c;喜欢我的文章&#xff0c;可以关注我&#xff0c;我们一起交流。本文&#xff1a;2052字 | 估计阅读&#xff1a;6分钟我在思考功能实现需求的时候&#xff0c;会斟酌和判断使用什么样的功能和交…

POJ 1189 钉子和小球

题目链接&#xff1a;http://poj.org/problem?id1189 dp 可以知道一共有2^n条路径&#xff0c;则设顶点有2^n个球&#xff0c;若当前为*则向左右的球各有一半&#xff1b;若为.&#xff0c;则球全部掉入正下方。 1 #include<iostream>2 #include<cstring>3 #inclu…

MySQL学习笔记(总结)

一、MySQL课程内容 对应视频教程&#xff1a;千锋教育JavaWeb基础入门到实战教程&#xff0c;javaSE基础进阶java web快速入门教程完整版_哔哩哔哩_bilibili 1.1 数据库介绍 数据库概念术语介绍 1.2 MySQL数据库 下载、安装、配置、卸载MySQL客户端工具的安装及使用 1.3 …

按群计数10以内_【乐玩乐学】有趣的计数活动

_有趣的计数活动写给爸爸妈妈的话&#xff1a;时间、日期、体重、地址世界上到处都是各种各样的数字。有了数字我们的交流才变得更加通畅。但是在这些方便的数字出现之前&#xff0c;生活在很久很久以前的人们是怎么数数、怎么表示数量的呢&#xff1f;他们用的就是手、脚等身体…

数据结构学习笔记总结(部分内容后续会更新)

第一章 绪论 1.1 数据结构的研究内容 1.2 基本概念和术语 1.2.1 数据、数据元素、数据项和数据对象 1.数据 数据&#xff1a;是能够输入计算机且能被计算机处理的各种符号的集合 信息的载体是对客观事物符号化的表示能够被计算机识别、存储和加工 包括&#xff1a; 数值型的…

git 怎么拉去分支代码_Git使用技巧1——代码写错分支了怎么办?

工欲善其事&#xff0c;必先利其器。前言Git的本质git是一个版本控制工具&#xff0c;一切以版本控制为中心&#xff0c;版本即每一次commit&#xff0c;其实分支是指向commit的&#xff0c;HEAD也是指向某一次提交的&#xff0c;HEAD其实指向的就是当前分支的最近一次commit&a…

一、MySQL基础

MySQL基础 今日目标&#xff1a; 完成MySQL的安装及登陆基本操作能通过SQL对数据库进行CRUD能通过SQL对表进行CRUD能通过SQL对数据进行CRUD 1&#xff0c;数据库相关概念 以前我们做系统&#xff0c;数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会…

如何给ppt编辑页码_拒绝千篇一律:Word插入“侧边”页码,让文档别具一格!...

微信扫码观看全套Excel、Word、PPT视频之前&#xff0c;有为大家介绍过插入页码的技法&#xff0c;你还记吗&#xff1f;(点击此处&#xff0c;阅读文章)我们已知道Word插入页码的方法&#xff0c;而且我们也很会用了。但是&#xff0c;如果要插入下图所示的侧边页码&#xff0…

二、MySQL高级

mysql高级 今日目标 掌握约束的使用 掌握表关系及建表原则 重点掌握多表查询操作 掌握事务操作 1&#xff0c;约束 上面表中可以看到表中数据存在一些问题&#xff1a; id 列一般是用标示数据的唯一性的&#xff0c;而上述表中的id为1的有三条数据&#xff0c;并且 马花疼…

Maven基础(总结)——入门学习

Maven基础 一、Maven概述 1.Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09;提供了一套依赖管理…

c#重写了窗体的OnKeyDown事件,但是不执行

设置下窗体的KeyPreview属性值为True即可 总结&#xff1a;遇到类似这样的问题&#xff0c;比如其他窗体运行没问题&#xff0c;就新建的窗体有问题。应该检查下窗体的属性。 转载于:https://www.cnblogs.com/codeDevotee/p/7093333.html

MyBatis学习笔记(超详细总结)

MyBatis学习笔记 一、MyBatis概述 1.什么是MyBatis? MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为yBatis 。2013年11…

创建并发布npm包

1.npm官网创建npm账户 npm网站地址&#xff1a;https://www.npmjs.com/ npm网站注册地址&#xff1a;https://www.npmjs.com/signup 2.命令行工具登录npm npm login 验证登录是否成功 npm who am i 3.创建npm库 npm init 按照提示输入相应内容&#xff1a; 以下为package.json内…