智能医学工程-计算机程序设计-2025版-实验11:使用AI辅助编程

12 阅读5分钟

一、实验目的

  1. 掌握如何使用 AI 工具(如 DeepSeek、文心智能体平台、ChatGPT 等)辅助编写 Java 代码。
  2. 学会利用 AI 工具生成代码片段、优化代码结构、调试代码错误。
  3. 理解 AI 辅助编程的局限性,学会在 AI 生成的代码基础上进行手动优化。
  4. 综合运用 AI 辅助编程的知识,设计并实现一个较为复杂的医院患者管理系统。
  5. 提升学生的代码编写效率和问题解决能力。

二、实验学时

2学时

三、实验类型

验证性

四、实验需求

1、硬件

每人配备计算机1台,建议优先使用个人计算机开展实验。

2、软件

安装IntelliJ IDEA,以及Java运行所需要的相关基础环境。

3、网络

本地主机能够访问互联网和实验中心网络。

4、工具

文心智能体平台链接:ilql1j.smartapps.baidu.com

五、实验任务

  1. AI 生成基础代码:使用 AI 工具生成医院患者管理系统的核心类(如 PatientDoctor 等)。
  2. AI 优化代码结构:使用 AI 工具优化生成的代码,提高代码的可读性和可维护性。
  3. AI 调试代码错误:使用 AI 工具调试代码中的错误,并修复问题。
  4. AI 生成测试用例:使用 AI 工具生成单元测试用例,验证代码的正确性。
  5. 综合任务:结合 AI 辅助编程,实现一个完整的医院患者管理系统。

六、实验内容及步骤

任务 1:AI 生成基础代码

步骤:

  1. 使用 AI 工具生成 Patient 类和 Doctor 类的代码。
  2. 确保生成的代码包含必要的属性和方法。

向 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 优化代码结构

步骤:

  1. 使用 AI 工具优化生成的代码,提高代码的可读性和可维护性。
  2. 例如,将重复代码提取为方法,或使用设计模式优化代码结构。

向 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 调试代码错误

步骤:

  1. 在代码中故意引入一些错误(如空指针异常、逻辑错误等)。
  2. 使用 AI 工具调试代码,并修复错误。

示例错误代码:

// 错误示例:未初始化 symptom
Patient patient = new Patient("张三", 35, null);
patient.printInfo();

修复后的代码:

// 修复示例:检查 symptom 是否为 null
if (patient.getSymptom() == null) {
    System.out.println("患者症状未填写。");
} else {
    patient.printInfo();
}

任务 4:AI 生成测试用例

步骤:

  1. 使用 AI 工具生成单元测试用例,验证代码的正确性。
  2. 使用 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:综合任务 - 医院患者管理系统

步骤:

  1. 结合 AI 辅助编程,实现一个完整的医院患者管理系统。
  2. 系统功能包括患者挂号、医生接诊、患者信息查询等。

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)实验考核结束后,进行公布成绩。