基于AI辅助的Java程序设计贯穿式教学案例
教学目标
- 掌握Java基础语法、面向对象编程技术、Swing GUI程序设计、集合框架、异常管理、I/O流、网络编程、JDBC编程
- 掌握IDE、Markdown等技术的使用
- 掌握使用AI辅助编写Java程序、辅助撰写报告的思路与方法
思路
在一个学期的Java课程讲授过程中,通过一个贯穿教学案例,逐步让学生掌握并应用Java编程技术。
该教学案例以一个功能的简单的信息系统程序作为起点,在随后的教学过程中逐渐对该程序进行理解、改造、增加功能,最终完成一个功能相对完整的程序。
在整个过程中,还需要求学生逐步掌握AI大模型工具在编程辅助与报告撰写的应用。从而,实现“Java能力”与“AI素养”的同步提升。
案例相关git仓库
https://gitee.com/jmune/java-project-evolution
仓库中包含初始案例代码库与案例个步骤的实施方案。
实施方案
以下为贯穿案例的具体实施方案。
一、初步导入:简单MIS系统
思路:
引入一个功能简单但编写规范以面向对象范式编写的MIS系统。案例中使用的是学生信息管理系统,仅具备基本功能(通过姓名、专业和GPA添加、删除和搜索学生)。该案例使用AI生成,根据需求进行裁剪,以降低程序的复杂性从而满足教学需求。
教学目标:
- 初步掌握面向对象程序的规范化编写。
- 初步掌握在IDE中导入代码并运行的技能。
- 初步掌握Markdown。
引入时机: 讲解完Java绪论后的实验课上。
使用步骤:
- 实验课给出系统完整源代码。指导学生在命令行下编译并运行该程序。
- 实验课指导学生在IDE中编译并运行该程序。
- 实验课简单讲解代码中涉及的面向对象知识。
- 布置课后作业项目案例作业1:学生信息管理系统(面向对象初步接触),让同学以Markdown格式的博客提交。
- 优秀作业分享:找出几份完成较好的博客作业进行课上点评,并将相关链接发到QQ群进行分享。
作业内容如下:
阅读、理解并运行系统源代码,编写Markdown格式博客案例初步分析报告1。
Markdown相关参考文章:拓展阅读:使用Markdown编写文档
作业格式请参考如下Markdown示例:
# 博文标题
[TOC]
## 功能讲解
数据处理:该程序主要处理什么数据?这些数据存储在哪里?与C语言程序相比,Java代码处理这些数据有何不同之处。
功能说明:程序运行截图(请在菜单显示出你们小组成员的学号与姓名),每张截图要配有简要文字说明其功能。
## 类功能讲解
简述每个类的功能概述、属性的用途、所包含的方法。
简述哪个类与所有其它类都不太一样。
## 基本语法讲解
简述代码中所使用到的一些Java特有语法。
二、面向对象深入学习
思路:
学完面向对象基础概念后,对小系统可以做出基础的面向对象分析,有助于面向对象概念的掌握。作业中引入AI平台,让学生初步了解如何使用AI帮助自己学习。
教学目标:
- 掌握使用面向对象的基础知识(构造方法、封装、toString)分析源代码;
- 掌握面向对象设计基本概念;
- 掌握使用package管理类。
引入时机: 讲解完Java封装、构造方法、package与类的设计后。
使用步骤:
- 布置课后作业项目案例作业2:对案例进行面向对象分析,让同学以Markdown格式的博客提交。
- 优秀作业点评:如果有学生使用AI生成报告,点评几份AI味比较浓的报告,提醒学生使用AI编写报告所带来的失控感。
- 优秀作业分享:找出几份完成较好的博客作业进行课上点评,并将相关链接发到QQ群进行分享。
作业内容如下:
使用自己已经学习的面向对象知识,针对学生管理系统编写简易面向对象分析报告。
请提交Markdown格式的博文链接。
注意:报告中不可以只有图而无文字说明。每幅图都要有相应的文字说明。
询问AI:报告中关于包结构部分可以将代码上传到AI平台后,询问应该如何为其设计良好的包结构。
推荐AI平台:DeepSeek、通义千问、智谱清言、Kimi。
报告格式如下:
# 博文名称
## 1. 案例中哪里体现出了封装性及其好处?
## 2. 案例中的setter/getter模式与封装性
什么是setter/getter?有什么用?怎么自动生成?
## 3. 案例中某些类的toString()方法
简述toString方法有什么用?
toString一般应包含什么内容?
toString()方法从哪里来?
## 4. 案例中几个常用方法解析
简述案例代码几个常用方法的解析:
类名.构造方法名,功能描述;
类名.方法签名(入参、功能、返回参数),功能描述;
类名.方法签名(入参、功能、返回参数),功能描述。
## 5. 案例中的面向对象设计
5.1 尝试用一段话描述案例所解决的问题。找到其中的名词与动词。
5.2 如果让你设计,根据上面的分析你会抽象出什么类?各具备什么功能?
## 6. 使用package为系统重新规划包结构
6.1 每个包的说明:
6.2 IDE中包结构截图。
三、使用DAO模式改造系统
思路:
在学生掌握了面向对象编程基础后,通过实际项目案例深入理解设计模式的应用。DAO模式作为企业级开发中常用的数据访问层设计模式,能够帮助学生理解分层架构思想。通过改造学生信息管理系统,让学生在实践中体会接口编程、依赖倒置原则的实际应用,同时培养多种数据存储方式的集成能力。
教学目标:
- 掌握DAO设计模式的核心概念和实现方法
- 理解接口与多态的关系
- 掌握良好的包结构设计和模块化编程思想
- 培养使用AI工具辅助编程的能力,并保持对代码的理解和控制力
- 提升系统设计和文档编写能力
引入时机: 在完成Java面向对象编程基础教学(包括类与对象、封装、继承、多态、接口、包管理等)后。
使用步骤:
- 课上讲授:DAO模式与一个使用DAO模式的小例子。
- 布置作业:发布"使用DAO模式改造学生信息管理系统"
- 作业点评:选出较好的报告进行分享。同时点评AI生成报告存在的问题。
AI辅助生成报告指南:
1.方法:建议将自己想写的要点使用Markdown格式先列出来,然后写出一个撰写报告的格式化提示词(Markdown格式)联合自己所写的源代码,提交给AI,让其生成。
2.注意:使用AI生成报告务必需要根据实际情况进行删改。不要让自己想写的东西被生成的文字所淹没。不要让自己的报告充满语法正确、言之无物的废话。
作业内容如下:
老师所提供的系统代码(附件:StudentsManagementSystemProject.zip)的学生数据都是存储List中。现在需要使用DAO模式改造该系统,为其提供多种数据存取模式(1. 通过文本文件存取;2.通过List存取)。要求在主程序中可以自由切换这两种数据存取模式。
其他项目要求:项目使用良好的包结构组织。
进阶(特别加分):增加通过Excel文件存取的模式。
请参考:Maven简要使用说明:在IDEA中创建一个基于POI的处理Excel文件的简单Java Maven项目
说明:可以使用AI协助完成系统与报告。但自己要能看懂、能进行修改。
提交:
1.Markdown格式的博文链接(放入留言)
2.博文对应的PDF文档
3.你的生成报告的提示词。
博文要求:本次博文要求不再提供模板,要求根据自己所思所想,完成一份相对比较完整的报告。博文中应有IDE项目目录结构截图、程序运行的截图或视频。
四、使用AI为系统添加Swing GUI界面
思路:
GUI图形界面开发是提升学生编程兴趣的有效途径,Swing作为Java的标准GUI工具包,虽然相对传统但学习曲线平缓,适合教学使用。利用AI生成基础GUI代码可以解决界面布局繁琐、事件处理复杂等技术难点,让学生专注于业务逻辑与界面集成的核心概念理解。
教学目标:
- 理解MVC(Model-View-Controller)设计模式在GUI程序中的应用
- 掌握Swing基本组件的使用和布局管理
- 学会GUI事件处理机制和线程安全编程
- 培养使用AI工具生成并理解复杂代码的能力
- 提升系统集成和模块化设计思维
- 建立用户界面设计与用户体验的基本概念
引入时机: 讲解完Java基础、面向对象概念和DAO模式、Java GUI编程后。
使用步骤:
- 理论课:讲解Java Swing编程基本概念与MVC模式在GUI编程的应用;
- 实验课:指导使用AI编写登录界面、带菜单的窗体,并将这两部分关联起来。
- 课后布置:作业“使用AI为系统添加Swing GUI界面”。
作业内容如下:
为你的商城购物车系统、学生管理系统添加GUI(图形用户界面)。也可自己选择编写一些实用的GUI小程序。
要求:
1.建议数据展示使用JTable或更好的展示方式。
2.尽量使用MVC模式。或者能在报告中说明,你如何使用了MVC模式。
3.系统的业务逻辑代码应既可用于控制台界面、也可用于图形用户界面。需配验证运行界面截图。
4.提交后,需联系助教或者老师演示运行才能加分。
5.对AI生成的代码,要能看懂大部分,并能进行局部修改。
参考文章:
五、为系统增加文件存取功能
思路:
在学生已经掌握面向对象基础并完成了一个信息管理系统的基础上,引入文件操作,让学生学会如何将数据持久化保存到文件中,以及如何从文件中读取数据。同时,通过使用AI大模型来帮助学生解决遇到的问题,并学会如何与AI合作完成编程任务。
教学目标:
1.掌握Java中文件读写的基本操作。
2.学会使用流(InputStream/OutputStream、Reader/Writer)进行文件操作。
3.学会使用AI大模型辅助编程,解决实际问题。
4.综合运用IDE调试和优化代码。
5.尝试使用DAO模式为系统增加文件存取功能(可选)
引入时机: 讲解完Java IO流、异常处理、集合框架后
使用步骤:
1.布置课后作业项目案例作业:使用文件存取数据,要求学生在已有的系统基础上,添加将数据保存到文件和从文件加载数据的功能。
2.学生可以使用AI平台咨询如何实现文件存取,以及如何处理可能出现的异常。
3.优秀作业点评:点评时注意学生是否合理使用了文件流,是否处理了异常,以及代码的健壮性。同时,点评几份使用AI辅助完成的作业,讨论AI辅助编程的利弊。
4.优秀作业分享:将完成较好的作业链接发到QQ群进行分享。
作业内容如下:
请为你的系统添加使用文件存取数据的功能。要求如下:
- 系统启动时,从文件(如students.txt)中加载学生信息到内存中。
- 系统退出时,将内存中的学生信息保存到文件(如students.txt)中。
- 使用字符流(Reader/Writer)进行文本文件的读写,或者使用序列化(ObjectInputStream/ObjectOutputStream)进行二进制文件的读写。
- 在读写文件时,注意处理异常,确保程序不会因为文件读写错误而崩溃。
- 可选:使用DAO模式可以加分。
- 可选:使用GUI作为界面可以加分。
请提交以下内容:
- 更新后的系统源代码(可以提交gitee仓库链接或压缩包)。
- 一篇Markdown格式的博文,描述你是如何实现文件存取功能的,以及在使用AI辅助编程时的体验和收获。
- 询问AI:在实现文件存取功能时,你可以将你的代码或问题描述给AI平台,询问如何实现文件的读写,以及如何设计存储格式。例如,你可以询问:“如何在Java中将一个学生对象列表写入到文本文件中?”或者“使用序列化保存学生对象时需要注意什么?”
Markdown格式的博文格式如下:
# 博文名称
## Git提交记录截图
放置一张截图,要体现每个参与者的贡献。
## 1. 文件存取功能概述
简述为什么要使用文件存取数据,以及你实现的基本思路。
## 2. 文件存储格式设计
1. 你选择了文本文件还是二进制文件?为什么?
2. 如果使用文本文件,请说明每一行代表什么,每个字段之间如何分隔。
3. 如果使用二进制文件,请说明你使用了什么序列化机制。
4. 询问AI:如果使用csv文件存取数据有什么有什么优缺点?如果使用json格式字符串存取数据有什么优缺点?
## 3. 关键代码解析
### 3.1 从文件加载数据
展示从文件加载数据的代码,并解释每一步的作用。
### 3.2 将数据保存到文件
展示将数据保存到文件的代码,并解释每一步的作用。
### 3.3 异常处理
你是如何处理文件读写过程中可能出现的异常的?
## 4. 使用AI辅助编程的体验
4.1 你向AI询问了什么问题?AI给出了怎样的回答?请分点列出。
4.2 你对AI的回答是否满意?你是如何验证AI提供的方法的正确性的?
4.3 对于AI生成的代码,你是在已有代码的基础上进行逐步修改还是全文件覆盖?何时使用哪种方法
4.4 在使用AI辅助编程的过程中,你有哪些收获和体会?
## 5. 遇到的问题及解决方法
在实现文件存取功能的过程中,你遇到了哪些问题?是如何解决的?
## 6. 总结
通过本次作业,你学到了什么?还有什么可以改进的地方?
六、将系统改造为C/S模式(可选)
思路:
学完Java网络编程后,将单机版学生管理系统改造为C/S架构,有助于掌握网络编程、I/O流编程与多线程开发技术。
通过TCP Socket实现客户端与服务器的通信,让学生理解网络应用的基本原理。
教学目标:
- 掌握Java TCP Socket编程的基本操作;
- 理解C/S架构的设计思想和实现;
- 掌握多线程服务器编程;
- 学会网络通信协议的设计;
- 培养网络应用的调试和测试能力。
引入时机: 讲解完Java网络编程、多线程、TCP/IP协议后。
使用步骤:
- 布置课后作业"将学生管理系统改造为C/S模式",让同学以Markdown格式的博客提交。
- 优秀作业点评:如果有学生使用AI生成报告,点评几份AI味比较浓的报告,提醒学生使用AI编写报告所带来的失控感。
- 优秀作业分享:找出几份完成较好的博客作业进行课上点评,并将相关链接发到QQ群进行分享。
作业内容如下:
使用Java TCP网络编程将原有的学生信息管理系统改造为C/S架构,实现客户端与服务器的分离。
具体要求:
- 设计并实现服务器端程序,处理客户端请求
- 设计并实现客户端程序,提供用户界面(控制台或者GUI均可)。
- 使用多线程处理多个客户端连接
- 实现学生信息的增删改查网络操作
- 定义客户端与服务器之间的通信协议(可选)
请提交以下内容:
- 系统源代码(可以提交gitee仓库链接或压缩包)。
- 一篇Markdown格式的博文,描述你是如何实现文件存取功能的,以及在使用AI辅助编程时的体验和收获。
注意:报告中不可以只有图而无文字说明。每幅图都要有相应的文字说明。
博客报告模板如下:
# 将学生管理系统改造为C/S模式 - 开发过程报告
## 1. 系统架构设计
### 1.1 C/S架构设计思路
- 描述从单机系统到C/S架构的改造思路
- 客户端和服务器端的职责划分
### 1.2 系统架构图
[插入C/S架构设计图]
**架构说明:**
- 客户端与服务器的通信方式
- 数据持久化层的设计
- 多线程处理机制
## 2. 关键问题
主要回答如下问题:
1. 使用了字节流还是字符流来传递数据?简述I/O流应用于网络编程的好处?》
2. 如何使用多线程实现多客户端同时操作学生数据?多线程并发访问数据可能会带来什么问题?
## 3. 运行截图
## 4. 关键代码解析
### 4.1 客户端与服务器端通信
以某一个具体功能说明
### 4.2 服务器端将从Socket读取到的数据存入本地
### 4.3 服务器端如何支持多个客户端同时访问
## 5. 遇到的问题及解决方法
分点列出你在使用开发过程中碰到主要难点,及使用AI或其他方法解决的过程。至少亮两点。
## 6. 总结
通过本次作业,你学到了什么?还有什么可以改进的地方?
询问AI:能否使用应用层的网络协议的来改写该系统。该问题可借用AI。
七、使用数据库存取数据
思路:
学完JDBC和DAO模式后,对学生信息管理系统进行数据库改造,有助于掌握数据库编程和分层架构的思想。作业中引入AI平台,让学生学会如何使用AI解决实际问题。
教学目标:
- 掌握JDBC基本操作(连接数据库、执行SQL、处理结果集)。
- 掌握DAO模式的设计与实现。
- 掌握使用package进行分层管理。
- 学会数据库表设计与实体类映射。
- 培养JDBC编程和异常处理能力。
- 学会使用AI辅助完成代码重构和功能添加。
引入时机: 讲解完JDBC、DAO模式。
使用步骤:
- 布置课后作业为系统增加存取数据库的能力,要求以Markdown格式的博客提交。
- 优秀作业点评:点评使用AI辅助解决问题的思路和代码质量。
- 优秀作业分享:找出几份完成较好的博客作业进行课上点评,并将相关链接分享。
作业内容如下:
使用JDBC和DAO模式对学生信息管理系统进行改造,使其能够使用MySQL数据库存储数据。
具体要求:
- 适当修改Student.java,将id转为Long型
- 根据Student类创建students表,需要自增长主键
- 使用JDBCUtil.java进行数据库连接管理
- 使用DAO模式进行改造,至少分成dao包、model包、utils包等
- 可选:使用GUI作为界面可以加分。
请提交以下内容:
- 系统源代码(可以提交gitee仓库链接或压缩包)。
- 一篇Markdown格式的博文,描述你是如何实现文件存取功能的,以及在使用AI辅助编程时的体验和收获。
注意:报告中不可以只有图而无文字说明。每幅图都要有相应的文字说明。
博客报告模板如下:
# 为学生管理系统增加数据库存取能力 - 开发过程报告
## Git提交记录截图
放置一张截图,要体现每个参与者的贡献。
## 1. 数据库设计与实体类说明
这里描述
1. 数据库表截图
2. 你所设计的每个实体类与数据库中表的关系。
3. 询问AI:为什么要将Student类的id改为Long型
## 2. DAO模式设计与实现
### 2.1 包结构设计
展示项目包结构并说明每个包的职责:
### 2.2 DAO接口设计
展示如StudentDAO接口定义。
### 2.3 DAO实现类
展示如StudentDAO接口定义。
展示StudentDAOImpl的核心实现:
## 3. 运行截图
关键操作的运行截图
## 4. 关键代码解析
### 4.1 从数据库加载数据
### 4.2 将数据保存到数据库
展示将数据保存到文件的代码,并解释每一步的作用。
### 4.3 异常处理
你是如何处理数据库读写过程中可能出现的异常的?
## 5. 遇到的问题及解决方法
分点列出你在使用开发过程中碰到主要难点,及使用AI或其他方法解决的过程。至少亮两点。
## 6. 总结
通过本次作业,你学到了什么?还有什么可以改进的地方?
询问AI:除了使用JDBCUtil.java这种方式可以让数据库代码编写更简单以外,还有其他什么可以常用的方式。

浙公网安备 33010602011771号