一、实验目的
- 掌握接口的基本概念,理解接口与类的区别。
- 学会定义接口并实现接口内的方法。
- 理解接口的多态性,能够通过接口引用调用实现类的方法。
- 掌握客户端与服务端的交互设计,实现基于接口的远程服务调用。
- 综合运用接口的知识,设计并实现一个较为复杂的医院患者管理系统,包含客户端和服务端。
二、实验学时
2学时
三、实验类型
验证性
四、实验需求
1、硬件
每人配备计算机1台,建议优先使用个人计算机开展实验。
2、软件
IntelliJ IDEA,以及Java运行所需要的相关基础环境。
3、网络
本地主机能够访问互联网和实验中心网络。
4、工具
无。
五、实验任务
- 定义接口:设计一个
MedicalService
接口,包含医疗服务的基本方法。 - 实现接口:设计
Doctor
类和Nurse
类,分别实现MedicalService
接口。 - 服务端实现:实现服务端程序,提供远程医疗服务。
- 客户端实现:实现客户端程序,调用服务端的远程服务。
- 综合任务:设计一个完整的医院管理系统,支持客户端与服务端的交互。
六、实验内容及步骤
任务 1:定义接口
步骤:
- 定义一个
MedicalService
接口,包含医疗服务的基本方法,如diagnose
和treat
。
示例代码:
import java.rmi.Remote;
import java.rmi.RemoteException;
// MedicalService.java
public interface MedicalService extends Remote {
String diagnose(String patientName) throws RemoteException;
String treat(String patientName) throws RemoteException;
}
任务 2:实现接口
步骤:
- 设计
Doctor
类和Nurse
类,分别实现MedicalService
接口。 - 在实现类中重写接口方法,提供具体的医疗服务。
示例代码:
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MedicalServiceImpl extends UnicastRemoteObject implements MedicalService {
protected MedicalServiceImpl() throws RemoteException {
super();
}
@Override
public String diagnose(String patientName) {
return new Doctor("王医生").diagnose(patientName);
}
@Override
public String treat(String patientName) {
return new Doctor("王医生").treat(patientName);
}
}
任务 3:服务端实现
步骤:
- 实现服务端程序,提供远程医疗服务。
- 使用 Java 的
RMI
(远程方法调用)技术实现远程服务。
示例代码:
// MedicalServiceImpl.java
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MedicalServiceImpl extends UnicastRemoteObject implements MedicalService {
protected MedicalServiceImpl() throws RemoteException {
super();
}
@Override
public String diagnose(String patientName) {
return new Doctor("王医生").diagnose(patientName);
}
@Override
public String treat(String patientName) {
return new Doctor("王医生").treat(patientName);
}
}
// MedicalServer.java
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class MedicalServer {
public static void main(String[] args) {
try {
// 创建远程对象
MedicalService medicalService = new MedicalServiceImpl();
// 注册远程对象
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("MedicalService", medicalService);
System.out.println("医疗服务端已启动,等待客户端调用...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
任务 4:客户端实现
步骤:
- 实现客户端程序,调用服务端的远程服务。
- 使用 Java 的
RMI
技术调用远程方法。
示例代码:
// MedicalClient.java
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class MedicalClient {
public static void main(String[] args) {
try {
// 获取远程对象
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
MedicalService medicalService = (MedicalService) registry.lookup("MedicalService");
// 调用远程方法
String diagnoseResult = medicalService.diagnose("张三");
String treatResult = medicalService.treat("张三");
System.out.println(diagnoseResult);
System.out.println(treatResult);
} catch (Exception e) {
e.printStackTrace();
}
}
}
任务 5:综合任务 - 医院管理系统
步骤:
- 设计一个完整的医院管理系统,支持客户端与服务端的交互。
- 实现患者挂号、诊断和治疗功能。
示例代码:
// HospitalSystem.java
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Scanner;
public class HospitalSystem {
public static void main(String[] args) {
try {
// 获取远程对象
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
MedicalService medicalService = (MedicalService) registry.lookup("MedicalService");
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请选择操作: 1. 诊断 2. 治疗 3. 退出");
int choice = scanner.nextInt();
scanner.nextLine(); // 清除缓冲区
switch (choice) {
case 1:
System.out.print("请输入患者姓名: ");
String patientName = scanner.nextLine();
String diagnoseResult = medicalService.diagnose(patientName);
System.out.println(diagnoseResult);
break;
case 2:
System.out.print("请输入患者姓名: ");
patientName = scanner.nextLine();
String treatResult = medicalService.treat(patientName);
System.out.println(treatResult);
break;
case 3:
System.out.println("退出系统。");
return;
default:
System.out.println("无效选择,请重新输入。");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
操作示例:
启动服务端,如图 1、图 2所示:
启动客户端,如图 3、图 4所示:
运行医院管理系统,如图 5、图 6所示:
七、实验考核
本实验考核采用【实验随堂查】方式开展。
每个实验完成后,在实验课上通过现场演示的方式向实验指导教师进行汇报,并完成现场问答交流。
每个实验考核满分100分,其中实验成果汇报60分,现场提问交流40分。
实验考核流程:
(1)学生演示汇报实验内容的完成情况,实验指导老师现场打分。
(2)指导老师结合实验内容进行提问,每位学生提问2-3个问题,根据回答的情况现场打分。
(3)实验考核结束后,进行公布成绩。