一、实验目的
- 掌握如何使用 AI 工具(如 DeepSeek、文心智能体平台、ChatGPT 等)辅助编写 Java 代码。
- 学会利用 AI 工具生成代码片段、优化代码结构、调试代码错误。
- 理解 AI 辅助编程的局限性,学会在 AI 生成的代码基础上进行手动优化。
- 综合运用 AI 辅助编程的知识,设计并实现一个较为复杂的医院患者管理系统。
- 提升学生的代码编写效率和问题解决能力。
二、实验学时
2学时
三、实验类型
验证性
四、实验需求
1、硬件
每人配备计算机1台,建议优先使用个人计算机开展实验。
2、软件
安装IntelliJ IDEA,以及Java运行所需要的相关基础环境。
3、网络
本地主机能够访问互联网和实验中心网络。
4、工具
文心智能体平台链接:ilql1j.smartapps.baidu.com
五、实验任务
- AI 生成基础代码:使用 AI 工具生成医院患者管理系统的核心类(如
Patient
、Doctor
等)。 - AI 优化代码结构:使用 AI 工具优化生成的代码,提高代码的可读性和可维护性。
- AI 调试代码错误:使用 AI 工具调试代码中的错误,并修复问题。
- AI 生成测试用例:使用 AI 工具生成单元测试用例,验证代码的正确性。
- 综合任务:结合 AI 辅助编程,实现一个完整的医院患者管理系统。
六、实验内容及步骤
任务 1:AI 生成基础代码
步骤:
- 使用 AI 工具生成
Patient
类和Doctor
类的代码。 - 确保生成的代码包含必要的属性和方法。
向 AI提问:
AI生成的代码:
public class Patient {
private String name;
private int age;
private String symptom;
public Patient(String name, int age, String symptom) {
this.name = name;
this.age = age;
this.symptom = symptom;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getSymptom() {
return symptom;
}
public void printInfo() {
System.out.println("患者姓名: " + name);
System.out.println("患者年龄: " + age);
System.out.println("患者症状: " + symptom);
}
}
// Doctor.java
public class Doctor {
private String name;
private String department;
public Doctor(String name, String department) {
this.name = name;
this.department = department;
}
public String getName() {
return name;
}
public String getDepartment() {
return department;
}
public void diagnose(Patient patient) {
System.out.println("医生 " + name + " 正在为患者 " + patient.getName() + " 进行诊断。");
System.out.println("患者症状: " + patient.getSymptom());
System.out.println("建议前往 " + department + " 进一步检查。");
}
}
任务 2:AI 优化代码结构
步骤:
- 使用 AI 工具优化生成的代码,提高代码的可读性和可维护性。
- 例如,将重复代码提取为方法,或使用设计模式优化代码结构。
向 AI提问:
AI优化后的代码:
// Patient.java
public class Patient {
private String name;
private int age;
private String symptom;
public Patient(String name, int age, String symptom) {
this.name = name;
this.age = age;
this.symptom = symptom;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getSymptom() {
return symptom;
}
public void printInfo() {
System.out.println("患者姓名: " + name);
System.out.println("患者年龄: " + age);
System.out.println("患者症状: " + symptom);
}
}
// Doctor.java
public class Doctor {
private String name;
private String department;
public Doctor(String name, String department) {
this.name = name;
this.department = department;
}
public String getName() {
return name;
}
public String getDepartment() {
return department;
}
public void diagnose(Patient patient) {
printDiagnosisInfo(patient);
printTreatmentAdvice(patient);
}
private void printDiagnosisInfo(Patient patient) {
System.out.println("医生 " + name + " 正在为患者 " + patient.getName() + " 进行诊断。");
System.out.println("患者症状: " + patient.getSymptom());
}
private void printTreatmentAdvice(Patient patient) {
System.out.println("建议前往 " + department + " 进一步检查。");
}
}
任务 3:AI 调试代码错误
步骤:
- 在代码中故意引入一些错误(如空指针异常、逻辑错误等)。
- 使用 AI 工具调试代码,并修复错误。
示例错误代码:
// 错误示例:未初始化 symptom
Patient patient = new Patient("张三", 35, null);
patient.printInfo();
修复后的代码:
// 修复示例:检查 symptom 是否为 null
if (patient.getSymptom() == null) {
System.out.println("患者症状未填写。");
} else {
patient.printInfo();
}
任务 4:AI 生成测试用例
步骤:
- 使用 AI 工具生成单元测试用例,验证代码的正确性。
- 使用 JUnit 框架编写测试用例。
测试用例代码:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class PatientTest {
@Test
void testPatientInfo() {
Patient patient = new Patient("张三", 35, "发热");
assertEquals("张三", patient.getName());
assertEquals(35, patient.getAge());
assertEquals("发热", patient.getSymptom());
}
}
class DoctorTest {
@Test
void testDoctorDiagnose() {
Doctor doctor = new Doctor("王医生", "发热门诊");
Patient patient = new Patient("张三", 35, "发热");
// 测试诊断方法是否正确
doctor.diagnose(patient);
// 可以通过日志或输出验证
}
}
任务 5:综合任务 - 医院患者管理系统
步骤:
- 结合 AI 辅助编程,实现一个完整的医院患者管理系统。
- 系统功能包括患者挂号、医生接诊、患者信息查询等。
AI生成的代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class HospitalSystem {
private List<Patient> patients = new ArrayList<>();
private List<Doctor> doctors = new ArrayList<>();
public void addPatient(Patient patient) {
patients.add(patient);
System.out.println("患者 " + patient.getName() + " 已挂号。");
}
public void addDoctor(Doctor doctor) {
doctors.add(doctor);
System.out.println("医生 " + doctor.getName() + " 已加入医院。");
}
public void diagnosePatient(String patientName, String doctorName) {
Patient patient = patients.stream()
.filter(p -> p.getName().equals(patientName))
.findFirst()
.orElse(null);
Doctor doctor = doctors.stream()
.filter(d -> d.getName().equals(doctorName))
.findFirst()
.orElse(null);
if (patient != null && doctor != null) {
doctor.diagnose(patient);
} else {
System.out.println("患者或医生未找到。");
}
}
public static void main(String[] args) {
HospitalSystem system = new HospitalSystem();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请选择操作: 1. 添加患者 2. 添加医生 3. 诊断患者 4. 退出");
int choice = scanner.nextInt();
scanner.nextLine(); // 清除缓冲区
switch (choice) {
case 1:
System.out.print("请输入患者姓名: ");
String patientName = scanner.nextLine();
System.out.print("请输入患者年龄: ");
int age = scanner.nextInt();
scanner.nextLine(); // 清除缓冲区
System.out.print("请输入患者症状: ");
String symptom = scanner.nextLine();
system.addPatient(new Patient(patientName, age, symptom));
break;
case 2:
System.out.print("请输入医生姓名: ");
String doctorName = scanner.nextLine();
System.out.print("请输入医生科室: ");
String department = scanner.nextLine();
system.addDoctor(new Doctor(doctorName, department));
break;
case 3:
System.out.print("请输入患者姓名: ");
patientName = scanner.nextLine();
System.out.print("请输入医生姓名: ");
doctorName = scanner.nextLine();
system.diagnosePatient(patientName, doctorName);
break;
case 4:
System.out.println("退出系统。");
return;
default:
System.out.println("无效选择,请重新输入。");
}
}
}
}
七、实验考核
本实验考核采用【实验随堂查】方式开展。
每个实验完成后,在实验课上通过现场演示的方式向实验指导教师进行汇报,并完成现场问答交流。
每个实验考核满分100分,其中实验成果汇报60分,现场提问交流40分。
实验考核流程:
(1)学生演示汇报实验内容的完成情况,实验指导老师现场打分。
(2)指导老师结合实验内容进行提问,每位学生提问2-3个问题,根据回答的情况现场打分。
(3)实验考核结束后,进行公布成绩。