编写一个程序,模拟学校多个学生注册交学费流程。系统用户有学生、老师两类: (1)注册信息包括:学号、姓名、所属学院、专业、年级、班、宿舍。 缴费信息包括:学号、学期(例如:2022-2022-2)、学费、住宿费。 (2)功能需求:创建学生、老师两个子线程 1)学生线程实现注册、缴费; 2)老师线程统计不同学院的学费收缴金额、住宿费收缴金额。 (3)数据组织及存储要求 1)注册信息、缴费信息存储在.txt文件中; 2)注册、缴费信息要求使用泛型集合方式,具体实现类型自定; (4)测试数据要求: 1)存储注册信息的文件,至少有10条数据,至少涵盖2个学院、4个专业(不同专业对应的学费不同)。 2)存储缴费信息的文件,至少有10条数据,与注册信息关联。例如,某学生完成了注册,缴费,则在注册信息文件与缴费信息文件中新增两条信息,这两条信息有相同的学号。 (5)难度系数3,使用数据库、算法、前端等知识,可额外加分。
时间: 2024-03-25 07:41:25 浏览: 17
好的,下面是一个简单的Java程序,可以实现你所描述的功能:
```java
import java.io.*;
import java.util.*;
class Student {
private String id;
private String name;
private String college;
private String major;
private String grade;
private String clazz;
private String dormitory;
public Student(String id, String name, String college, String major, String grade, String clazz, String dormitory) {
this.id = id;
this.name = name;
this.college = college;
this.major = major;
this.grade = grade;
this.clazz = clazz;
this.dormitory = dormitory;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getCollege() {
return college;
}
public String getMajor() {
return major;
}
public String getGrade() {
return grade;
}
public String getClazz() {
return clazz;
}
public String getDormitory() {
return dormitory;
}
}
class Payment {
private String id;
private String term;
private double tuition;
private double accommodation;
public Payment(String id, String term, double tuition, double accommodation) {
this.id = id;
this.term = term;
this.tuition = tuition;
this.accommodation = accommodation;
}
public String getId() {
return id;
}
public String getTerm() {
return term;
}
public double getTuition() {
return tuition;
}
public double getAccommodation() {
return accommodation;
}
}
class CollegePayment {
private String college;
private double tuition;
private double accommodation;
public CollegePayment(String college, double tuition, double accommodation) {
this.college = college;
this.tuition = tuition;
this.accommodation = accommodation;
}
public String getCollege() {
return college;
}
public double getTuition() {
return tuition;
}
public double getAccommodation() {
return accommodation;
}
}
class Registration {
private List<Student> students = new ArrayList<>();
private List<Payment> payments = new ArrayList<>();
private Map<String, CollegePayment> collegePayments = new HashMap<>();
public void register(String id, String name, String college, String major, String grade, String clazz, String dormitory) {
students.add(new Student(id, name, college, major, grade, clazz, dormitory));
}
public void pay(String id, String term, double tuition, double accommodation) {
payments.add(new Payment(id, term, tuition, accommodation));
}
public void calculateCollegePayments() {
for (Payment payment : payments) {
String id = payment.getId();
String college = getCollegeById(id);
CollegePayment collegePayment = collegePayments.get(college);
if (collegePayment == null) {
collegePayment = new CollegePayment(college, 0, 0);
collegePayments.put(college, collegePayment);
}
collegePayment.tuition += payment.getTuition();
collegePayment.accommodation += payment.getAccommodation();
}
}
public void printCollegePayments() {
System.out.println("College\tTuition\tAccommodation");
for (CollegePayment collegePayment : collegePayments.values()) {
System.out.println(collegePayment.getCollege() + "\t" + collegePayment.getTuition() + "\t" + collegePayment.getAccommodation());
}
}
private String getCollegeById(String id) {
for (Student student : students) {
if (student.getId().equals(id)) {
return student.getCollege();
}
}
return null;
}
}
class StudentThread extends Thread {
private Registration registration;
public StudentThread(Registration registration) {
this.registration = registration;
}
public void run() {
// 在这里实现学生线程的注册、缴费功能
// 可以从.txt文件中读取数据,也可以手动创建测试数据
// 注册信息和缴费信息可以使用Registration类中的register()和pay()方法来添加
}
}
class TeacherThread extends Thread {
private Registration registration;
public TeacherThread(Registration registration) {
this.registration = registration;
}
public void run() {
// 在这里实现老师线程的统计不同学院的学费收缴金额、住宿费收缴金额功能
// 可以使用Registration类中的calculateCollegePayments()和printCollegePayments()方法来实现
}
}
public class Main {
public static void main(String[] args) {
Registration registration = new Registration();
StudentThread studentThread = new StudentThread(registration);
TeacherThread teacherThread = new TeacherThread(registration);
studentThread.start();
teacherThread.start();
}
}
```
这个程序使用了Java中的多线程技术,可以同时进行学生线程和老师线程的操作。其中,Registration类用于存储所有的学生注册信息和缴费信息,并且提供了对应的注册、缴费、统计功能。在实现学生线程和老师线程的功能时,可以使用Registration类的方法进行操作。