Part01 ☀️
Part01 ☀️
课程内容
- 编程环境安装
- JDK安装Java运行环境
- Idea工具安装编码工具
- Idea编程插件提高编码速度!
- 项目搭建
- 项目说明和创建项目
- 面向对象语法回顾
- Swing介绍和常用组件介绍
- 登录页面实现
- 登录逻辑实现
- 注册逻辑实现
1. 实训编码的环境1
实训编码的环境

通过网盘分享的文件:软件资料 链接: https://pan.baidu.com/s/1Jz8_GRFO6UMBNFJU5NJEZQ?pwd=c2gb 提取码: c2gb
代码操作
🎯 JDK

JDK是 java 运行环境配置的工具包,能够是 java 程序运行更加方便顺畅,帮助用户进行编程开发时代码数据库调用,
安装 JDK 是学习 java 程序语言的第一步
JDK 是整个 java 程序的核心,包含 java 运行环境、java 工具和 java 基础类库等,是 java 语言开发工作者必备的工具,让编程更加高效和简单。
安装和教程如下:

jdk-11.0.20_windows-x64_bin是JDK11的版本
jdk-8u162-windows-x64.exe是JDK8的版本
- 说明:
安装 JDK 后,配置环境变量 JAVA_HOME,并且在
cmd
窗口中,输入java -version
提示如下图验证是否安装JDK,并且配置好环境变量

- Java 现在发布的版本很快,有很多版本,但是真正会被大规模使用的是 3 年一个的 LTS 版本。每 3 年发布一个 LTS(Long-Term Support),长期维护版本。意味着只有Java 8 ,Java 11, Java 17,Java 21 才可能被大规模使用。
- 企业开发中主流都是使用 jdk8或者JDK11

🎯 Idea

- IDEA 全称 IntelliJ IDEA,是 java 编程语言的集成开发环境。
- IntelliJ 在业界被公认为最好的 Java 开发工具,尤其在AI代码助手、代码自动提示、重构、JavaEE 支持、各类版本工具(git、svn 等)、JUnit(单元测试)、代码分析、 创新UI设计等方面的功能非常好用。
- IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版还支持 HTML,CSS,PHP,MySQL,Python


- 安装和教程如下:

😃 安装任何一个版本都可以,编码都是一样的哦,无非就是新版本的支持的插件稍微多一些,皮肤跟好看一点
- 安装注意事项:
- 安装 idea 后,会提示是否试用,可以选择试用(30 天)
- 在安装
Idea
后,在Idea
中配置jdk

🎯 截图贴图软件
Snipaste 是一个简单但强大的贴图工具,同时也可以执行截屏、贴图、标注等功能。
你可以将代码的主要思路和语法,截图贴在屏幕的右上角上,方便你随时查看,提高编码效率
- 安装方式:压缩包解压缩后,点击启动程序即可使用(右下角会出现图标),不需要安装。
- 快捷键:
- 截屏 :默认为 F1
- 贴图 :默认为 F3
总结
课堂作业
- 参考上述讲义,完成必备软件!🎤
如果不清楚自己是否装了,可以举手问焱哥
2. Idea编程常用插件
Idea编程常用插件
🎯 TongYi
通义灵码,你的智能编码助手。你可以问我关于编码相关的问题,我们一起更高效率、更高质量地完成编码工作



用过的,都说好!👍
🎯 自动导包的设置

可以这样设置👇

3. 项目搭建 ✏️ 🍐 ❤️
3.1 项目说明和创建项目
项目说明和创建项目


进入Idea的欢迎页面,点击创建项目,具体的步骤如下:


在src文件夹下,创建com.it文件包(选中src文件夹,选择右键,新建,选择包(Package),输入com.it
,回车即可)

在项目的文件夹下,创建lib文件夹(和src目录同级
),导入hutool-all-5.7.20.jar这个第三方的糊涂工具包,用来持久化数据到本地的(这个文件焱哥发群里)

然后在com.it文件包下,依次创建frame(窗口类包)、pojo(实体类包)、util(工具类包)等包,和App.java(启动类)文件,具体情况如下

将下列的类,复制到对应的包中,具体如下: 用户类,工作量类,工具类
public class User {
private String id;
private String username;
private String password;
private String role;
//todo 需要补充空参构造和全参构造,并且get和set方法
}
public class Workload {
private String id;// 工作量id
private String teacher;// 教师用户名
private String workDate;// 工作量日期
private float hours;// 工作量耗时
private String description;// 工作描述
//todo 需要补充空参构造和全参构造,并且get和set方法
}
注意上述的实体类要使用快捷键补充补充空参构造和全参构造,并且get和set方法 👈
工具类DataUtil焱哥直接发群里了,直接复制粘贴到util包即可,不需要自己写,如下图:

在lib下创建workloads.txt和users.txt文件,导入如下内容👇
workloads.txt
c5b6f7c6d8ed4dd19a9263278c81eff0#lisi#2025-06-06#4.0#监考
0adc6136214f45729c650de389840190#lisi#2025-06-06#5.0#上课
7d1b95bc4c2d41129b03a5aa752658e2#wangwu#2025-06-06#5.0#上公选课
users.txt
920ffa13a6474cfeb32490c782649dac#admin#123456#admin
上面这些数据是初始数据,后续会通过数据库来存储,这里先使用文本文件来存储。

接着在frame包中,创建LoginFrame类,然后在App.java中,创建一个LoginFrame对象,启动登录页面,具体效果如下:
/**
* 启动类
*/
public class App {
public static void main(String[] args) {
// 确保在事件调度线程中运行Swing组件
SwingUtilities.invokeLater(() -> {
try {
// 设置系统外观
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// 创建并显示登录窗口
LoginFrame loginFrame = new LoginFrame();
loginFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "启动失败: " + e.getMessage(),
"错误", JOptionPane.ERROR_MESSAGE);
}
});
}
}
登录页LoginFrame类,具体代码如下:
public class LoginFrame extends JFrame {
public LoginFrame() {
// 设置标题和图标
setTitle("教师工作量管理系统 - 登录");
// 设置大小
setSize(350, 250);
// 设置关闭按钮
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//传入 null 时,表示相对于屏幕中央位置进行定位。
setLocationRelativeTo(null);
}
}
整体项目结构如下:

最后启动App类中的main方法,观察是否有引用界面出现,如果有,则说明项目搭建成功!

至此,项目搭建完成!接下来会使用面向对象和Java常用语法来完成项目!🚀
总结
课堂作业
- 参考上述讲义,完成项目说明和创建项目!🎤
完成后,将运行截图发到群内,有加分哦!
3.2 面向对象语法回顾
面向对象语法回顾
在util包下创建JavaBasicsDemo类,来回顾面向对象的语法和Java编写常用的语法,具体如下: 0. 输出语句和main方法
- 字符串(长度,判断是否为空,包含某个字段,等于某个字符串)
- 逻辑判断(if,else)
- 集合(ArrayList,for循环)
- 面向对象(类,构造函数,方法,get和set方法)
- 集合装对象(ArrayList装对象,for循环遍历对象,get和set方法)
- 继承和实现
参考代码:👇
public class JavaBasicsDemo {
public static void main(String[] args) {
// 0. 输出语句
System.out.println("Hello, Java Basics!");
// 字符串操作
String str = "Hello World";
System.out.println("字符串长度: " + str.length());
System.out.println("字符串是否为空: " + str.isEmpty());
System.out.println("字符串是否包含 'World': " + str.contains("World"));
System.out.println("字符串是否等于 'Hello World': " + str.equals("Hello World"));
// 逻辑判断
int num = 10;
if (num > 0) {
System.out.println(num + " 是正数");
} else if (num < 0) {
System.out.println(num + " 是负数");
} else {
System.out.println(num + " 是零");
}
// 集合(ArrayList)操作(存储简单数据类型示例,这里用字符串)
ArrayList<String> stringList = new ArrayList<>();
stringList.add("Apple");
stringList.add("Banana");
stringList.add("pear");
System.out.println("遍历字符串集合:");
for (int i = 0; i < stringList.size(); i++) {
System.out.println(stringList.get(i));
}
// 面向对象 - 集合装对象(ArrayList装Person对象)
ArrayList<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 25));
personList.add(new Person("Bob", 30));
System.out.println("遍历Person对象集合:");
for (int i = 0; i < personList.size(); i++) {
Person person = personList.get(i);
System.out.println("姓名: " + person.getName() + ", 年龄: " + person.getAge());
// 可以尝试修改对象属性(通过set方法)
person.setName("Tom" + i);
person.setAge(person.getAge() + 1);
System.out.println("修改后 - 姓名: " + person.getName() + ", 年龄: " + person.getAge());
}
}
}
// 定义一个简单的Java类,包含了属性、构造函数、get和set方法
class Person {
private String name;
private int age;
// 构造函数
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// get方法
public String getName() {
return name;
}
// set方法
public void setName(String name) {
this.name = name;
}
// get方法
public int getAge() {
return age;
}
// set方法
public void setAge(int age) {
this.age = age;
}
}
接着在util包下创建JavaBasicsDemo2类,来回顾继承和实现 等语法,具体如下:
public class JavaBasicsDemo2 {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.makeSound(); // 输出: Dog barks.
cat.makeSound(); // 输出: Cat meows.
// 调用从父类继承的方法
((Dog) dog).breathe(); // 输出: Mammal is breathing.
((Cat) cat).breathe(); // 输出: Mammal is breathing.
}
}
//接口是一种规范,它定义了一组行为但不提供具体的实现。类可以实现接口,并根据需要来具体实现这些行为。
interface Animal {
void makeSound(); // 动物发出声音的方法
}
class Mammal {
public void breathe() {
System.out.println("Mammal is breathing.");
}
}
//继承允许一个类(子类)基于另一个类(父类)来构建,子类可以复用父类的属性和方法,并可以重写或扩展功能。
// 子类 Dog 实现接口并继承父类 Mammal
class Dog extends Mammal implements Animal {
@Override
public void makeSound() {
System.out.println("Dog barks.");
}
}
// 子类 Cat 实现接口并继承父类 Mammal
class Cat extends Mammal implements Animal {
@Override
public void makeSound() {
System.out.println("Cat meows.");
}
}
总结
课堂作业
- 参考上述讲义,完成面向对象语法回顾练习,熟悉对象和集合!🎤
完成后,将练习代码截图发到群内,有加分哦!
3.3 Swing介绍和常用组件介绍
Swing介绍和常用组件介绍

接下来,我们使用Swing来创建一个简单的GUI界面,包含以下组件:JFrame,JPanel, JLabel,JTextField,JTextArea,JButton,JComboBox,GridLayout,BorderLayout,FlowLayout写一个入门案例

布局管理器
- BorderLayout:将组件放置在窗体的不同区域(北、南、东、西、中)。
- FlowLayout:默认按顺序从左到右排列组件。
- GridLayout:以网格形式排列组件,所有组件大小相同。
在util包下创建SimpleGUIExample类,具体代码如下:👇
public class SimpleGUIExample {
public static void main(String[] args) {
// 创建JFrame实例
JFrame frame = new JFrame("GUI入门");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭按钮
frame.setSize(500, 400);//设置窗口大小
// 设置主布局为BorderLayout
frame.setLayout(new BorderLayout());//设置布局 北、东、南、西、中
// 创建顶部面板,使用FlowLayout
JPanel topPanel = new JPanel(new FlowLayout());//设置布局 从左到右排列
JLabel label = new JLabel("姓名:");
JTextField textField = new JTextField(15); // 文本框
topPanel.add(label);
topPanel.add(textField);
// 添加topPanel到顶部
frame.add(topPanel, BorderLayout.NORTH);//添加到顶部(北)
// 创建中间面板,使用GridLayout(行数,列数)
JPanel centerPanel = new JPanel(new GridLayout(2, 1));
JTextArea textArea = new JTextArea(5, 20);
textArea.setToolTipText("这里可以写很多文字!");
JScrollPane scrollPane = new JScrollPane(textArea); // 增加滚动条支持
centerPanel.add(scrollPane);
String[] options = {"雷电", "暴风", "真火"};
JComboBox<String> comboBox = new JComboBox<>(options);
centerPanel.add(comboBox);
// 添加centerPanel到中部
frame.add(centerPanel, BorderLayout.CENTER);
// 创建底部面板,使用FlowLayout
JPanel bottomPanel = new JPanel(new FlowLayout());
JButton button = new JButton("提交");
button.addActionListener((ActionEvent e) -> {
String name = textField.getText();
String des = textArea.getText();
String selected = (String) comboBox.getSelectedItem();
//弹出Dialog 将上面三个信息展示出来
JOptionPane.showMessageDialog(frame, "姓名:" + name + "\n描述:" + des + "\n类别:" + selected);
});
bottomPanel.add(button);
// 添加bottomPanel到底部(南)
frame.add(bottomPanel, BorderLayout.SOUTH);
// 显示窗口
frame.setVisible(true);
}
}
运行结果如下:

至此,我们通过一个入门案例,熟悉了Swing的基本用法,接下来,我们将进一步学习Swing的常用组件,如:面板、标签、文本框、密码框、按钮等,并学习如何使用布局管理器来布局这些组件。接下来练习一下吧!! 👇
总结
课堂作业
- 参考上述讲义,完成Swing介绍和常用组件的学习,理解其作用!🎤
- 回答图解中各个组件的作用!🎤
3.4 登录页面实现
登录页面实现
上节课我们熟悉了swing的各种组件,接下来我们使用swing来创建一个登录页面,let's go!
1. 页面和组件说明

本节主要实现登录页面的搭建,在搭建页面布局过程中,需要用到诸多组件,如:面板、标签、文本框、密码框、按钮等,这些组件都是 Swing 提供的,下面我们一一介绍这些组件。
- 窗口类 :JFrame,窗口类是 Swing 中最基础的类,用于创建窗口,可以设置窗口的大小、位置、标题等属性。
- 面板: JPanel,面板是 Swing 中最基础的容器,可以用来容纳其他组件,如:标签、文本框、按钮等。
- 标签: JLabel,标签用于显示文本或图像,可以设置文本内容、字体、颜色等属性。
- 文本框 :JTextField,文本框用于输入单行文本,可以设置文本框的长度、是否可编辑等属性。
- 密码框 :JPasswordField,密码框用于输入密码,输入的字符会自动隐藏,可以设置密码框的长度、是否可编辑等属性。
- 按钮 :JButton,按钮用于触发事件,可以设置按钮的文本、图标、背景色等属性。
2. 核心代码
public class LoginFrame extends JFrame {
// 用户名输入框
private JTextField usernameField;
// 密码输入框
private JPasswordField passwordField;
public LoginFrame() {
// 设置标题和图标
setTitle("教师工作量管理系统 - 登录");
// 设置大小
setSize(350, 250);
// 设置关闭按钮
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//传入 null 时,表示相对于屏幕中央位置进行定位。
setLocationRelativeTo(null);
// 创建面板
JPanel panel = new JPanel(new GridLayout(4, 1, 10, 10));
// 设置边框
panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
// 用户名
JPanel userPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
userPanel.add(new JLabel("用户名:"));
usernameField = new JTextField(30);
userPanel.add(usernameField);
panel.add(userPanel);
// 密码
JPanel passPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
passPanel.add(new JLabel("密 码:"));
passwordField = new JPasswordField(30);
passPanel.add(passwordField);
panel.add(passPanel);
// 登录按钮
JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
JButton loginBtn = new JButton("登录");
// 添加点击事件
loginBtn.addActionListener(e -> login());
JButton registerBtn = new JButton("注册");
// 添加点击事件
registerBtn.addActionListener(e -> register());
// 添加按钮
btnPanel.add(loginBtn);
btnPanel.add(registerBtn);
panel.add(btnPanel);
// 添加面板
add(panel);
}
private void register() {
//todo 注册逻辑在这里写
System.out.println("点击注册");
}
private void login() {
//todo 登录逻辑在这里写
System.out.println("点击登录");
}
}
3. 运行项目,观察运行界面


总结
课堂作业
- 参考上述讲义,完成登录页面的搭建!
完成后,将结果截图发到群内,有加分哦!
3.5 注册逻辑实现
注册逻辑实现
好的,使用组件完成了登录注册页面后,接下来我们来实现注册逻辑,首先我们来看下注册逻辑的流程图:
1. 注册逻辑的流程图


2. 注册逻辑核心代码
/**
* 注册
*/
private void register() {
// 1. 获取用户名和密码
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
// 2. 校验用户名和密码
if (username.isEmpty() || password.isEmpty()) {
JOptionPane.showMessageDialog(this, "用户名和密码不能为空");
return;
}
// 3. 校验用户是否存在
User user = DataUtil.getUserByUsername(username);
// 4. 用户已存在
if (user != null) {
JOptionPane.showMessageDialog(this, "用户已存在");
return;
}
// 5.将用户信息持久化到本地存储中
user = new User();
user.setId(String.valueOf(System.currentTimeMillis()));
user.setUsername(username);
user.setPassword(password);
user.setRole("teacher");
DataUtil.saveUser(user); // 保存用户信息
// 6. 提示用户注册成功
JOptionPane.showMessageDialog(this, "注册成功,请点击登录");
}
3. 注册逻辑测试


至此,注册逻辑就完成了,是不是很简单!,完成课堂作业吧!!
总结
课堂作业
- 参考上述讲义,完成注册逻辑实现!
完成后,将结果截图发到群内,有加分哦!
3.6 登录逻辑实现
登录逻辑实现
1. 登录逻辑的流程图

在完成注册后,接下来就可以进行登录了,登录逻辑的流程图如下:

2.登录逻辑核心代码
private void login() {
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
// 检查用户名和密码是否为空
if (username.isEmpty() || password.isEmpty()) {
JOptionPane.showMessageDialog(this, "用户名和密码不能为空");
return;
}
// 查询用户
User user = DataUtil.getUserByUsername(username);
if (user == null) {
JOptionPane.showMessageDialog(this, "用户不存在");
return;
}
if (!password.equals(user.getPassword())) {
JOptionPane.showMessageDialog(this, "密码错误");
return;
}
// 登录成功
dispose(); // 关闭登录窗口
new MainFrame().setVisible(true); // 打开主界面
}
主界面(用户登录成功后进入)
/**
* 主界面
*/
public class MainFrame extends JFrame {
public MainFrame() {
setTitle("教师工作量管理");
setSize(800, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
}
3. 登录逻辑测试

经过上面的测试,登录逻辑也完成了,是不是很简单,完成课堂作业吧!!
总结
课堂作业
- 参考上述讲义,完成登录逻辑实现!
完成后,将结果截图发到群内,有加分哦!