📋 作业概览
本文档包含第二天面向对象编程的三个核心作业:
- 汽车类设计 - 掌握复杂对象的状态管理
- 员工类设计 - 理解业务逻辑的封装
- 学生成绩管理系统 - 多类协作的系统设计
🚗 作业一:汽车类设计
📝 设计要求
设计一个完整的Car类,模拟真实汽车的属性和行为,包含状态管理、燃油系统、驾驶操作等功能。
💻 完整实现
java
/**
* 🚗 汽车类 - 面向对象编程实战
*/
public class Car {
// 基本属性
private String brand;
private String model;
private String color;
private double price;
private String fuelType;
// 性能参数
private int currentSpeed;
private int maxSpeed;
private double fuelLevel;
private double fuelCapacity;
private double mileage;
// 状态属性
private boolean isEngineOn;
private boolean isMoving;
// 构造函数
public Car(String brand, String model, String color, double price, String fuelType) {
this.brand = brand;
this.model = model;
this.color = color;
this.price = price;
this.fuelType = fuelType;
this.currentSpeed = 0;
this.maxSpeed = 180;
this.fuelLevel = 100.0;
this.fuelCapacity = 60.0;
this.mileage = 0.0;
this.isEngineOn = false;
this.isMoving = false;
}
// 启动车辆
public void start() {
if (isEngineOn) {
System.out.println("🚗 引擎已经启动了!");
return;
}
if (fuelLevel <= 0) {
System.out.println("⛽ 燃油不足,无法启动!");
return;
}
isEngineOn = true;
System.out.println("✅ " + brand + " " + model + " 引擎启动成功!");
}
// 熄火停车
public void stop() {
if (!isEngineOn) {
System.out.println("🚗 引擎已经关闭了!");
return;
}
currentSpeed = 0;
isMoving = false;
isEngineOn = false;
System.out.println("🛑 车辆已停止,引擎关闭");
}
// 加速
public void accelerate(int speedIncrease) {
if (!isEngineOn) {
System.out.println("❌ 请先启动引擎!");
return;
}
if (fuelLevel <= 5) {
System.out.println("⛽ 燃油不足,无法加速!");
return;
}
int newSpeed = currentSpeed + speedIncrease;
if (newSpeed > maxSpeed) {
currentSpeed = maxSpeed;
System.out.println("🚀 已达到最高速度:" + maxSpeed + " km/h");
} else {
currentSpeed = newSpeed;
System.out.println("🚀 加速到:" + currentSpeed + " km/h");
}
if (currentSpeed > 0) {
isMoving = true;
}
// 消耗燃油
fuelLevel -= speedIncrease * 0.1;
if (fuelLevel < 0) fuelLevel = 0;
}
// 减速
public void decelerate(int speedDecrease) {
if (!isEngineOn) {
System.out.println("❌ 引擎未启动!");
return;
}
int newSpeed = currentSpeed - speedDecrease;
if (newSpeed <= 0) {
currentSpeed = 0;
isMoving = false;
System.out.println("🛑 车辆已停止");
} else {
currentSpeed = newSpeed;
System.out.println("🐌 减速到:" + currentSpeed + " km/h");
}
}
// 驾驶指定距离
public void drive(double distance) {
if (!isEngineOn) {
System.out.println("❌ 请先启动引擎!");
return;
}
if (distance <= 0) {
System.out.println("❌ 驾驶距离必须大于0!");
return;
}
double fuelNeeded = calculateFuelConsumption(distance);
if (fuelLevel < fuelNeeded) {
System.out.println("⛽ 燃油不足,无法完成此次行程!");
System.out.println("需要:" + String.format("%.2f", fuelNeeded) + "L,当前:" + String.format("%.2f", fuelLevel) + "L");
return;
}
System.out.println("🛣️ 开始行驶 " + distance + " 公里...");
mileage += distance;
fuelLevel -= fuelNeeded;
currentSpeed = 60; // 平均速度
isMoving = true;
System.out.println("✅ 行驶完成!总里程:" + String.format("%.1f", mileage) + " km");
System.out.println("⛽ 剩余燃油:" + String.format("%.2f", fuelLevel) + "L");
}
// 加油/充电
public void refuel(double amount) {
if (amount <= 0) {
System.out.println("❌ 加油量必须大于0!");
return;
}
double oldLevel = fuelLevel;
fuelLevel = Math.min(fuelLevel + amount, fuelCapacity);
double actualAdded = fuelLevel - oldLevel;
System.out.println("⛽ 加油成功!");
System.out.println("加入:" + String.format("%.2f", actualAdded) + "L");
System.out.println("当前油量:" + String.format("%.2f", fuelLevel) + "/" + fuelCapacity + "L");
if (actualAdded < amount) {
System.out.println("💡 油箱已满,剩余 " + String.format("%.2f", amount - actualAdded) + "L 未能加入");
}
}
// 计算油耗
public double calculateFuelConsumption(double distance) {
// 简单的油耗计算:每100km消耗8L
return distance * 8.0 / 100.0;
}
// 获取燃油效率
public double getFuelEfficiency() {
if (mileage == 0) return 0;
double totalFuelUsed = fuelCapacity - fuelLevel;
return mileage / totalFuelUsed * 100; // 每百公里油耗
}
// 显示车辆信息
public void showCarInfo() {
System.out.println("═══════════════════════════════════");
System.out.println("🚗 车辆详细信息 ");
System.out.println("═══════════════════════════════════");
System.out.println("🏷️ 品牌:" + brand);
System.out.println("📦 型号:" + model);
System.out.println("🎨 颜色:" + color);
System.out.println("💰 价格:¥" + String.format("%.2f", price));
System.out.println("⛽ 燃料类型:" + fuelType);
System.out.println("🏁 最高速度:" + maxSpeed + " km/h");
System.out.println("🛢️ 油箱容量:" + fuelCapacity + "L");
System.out.println("═══════════════════════════════════");
}
// 显示当前状态
public void getCurrentStatus() {
System.out.println("📊 " + brand + " " + model + " 当前状态:");
System.out.println("🔧 引擎:" + (isEngineOn ? "启动" : "关闭"));
System.out.println("🚗 速度:" + currentSpeed + " km/h");
System.out.println("⛽ 油量:" + String.format("%.2f", fuelLevel) + "/" + fuelCapacity + "L");
System.out.println("🛣️ 里程:" + String.format("%.1f", mileage) + " km");
System.out.println("📍 状态:" + (isMoving ? "行驶中" : "静止"));
}
// 保养建议
public void getMaintenanceAdvice() {
System.out.println("\n🔧 保养建议:");
if (mileage > 10000) {
System.out.println("🔧 建议进行大保养(里程超过10000km)");
} else if (mileage > 5000) {
System.out.println("🔧 建议更换机油(里程超过5000km)");
}
if (fuelLevel < 20) {
System.out.println("⛽ 建议尽快加油");
}
if (mileage == 0) {
System.out.println("🎉 新车状态,注意磨合期驾驶");
}
}
// Getter方法
public String getBrand() { return brand; }
public String getModel() { return model; }
public double getCurrentSpeed() { return currentSpeed; }
public double getFuelLevel() { return fuelLevel; }
public double getMileage() { return mileage; }
public boolean isEngineOn() { return isEngineOn; }
}
🎮 测试示例
java
public class CarTest {
public static void main(String[] args) {
// 创建汽车
Car car = new Car("丰田", "凯美瑞", "白色", 248000, "汽油");
// 显示车辆信息
car.showCarInfo();
// 启动并驾驶
car.start();
car.drive(50);
car.accelerate(30);
car.getCurrentStatus();
// 保养建议
car.getMaintenanceAdvice();
}
}
👥 作业二:员工类设计
📝 设计要求
设计一个完整的Employee类,管理企业员工信息,包含薪资管理、职业发展、绩效评估等功能。
💻 完整实现
java
/**
* 👥 员工类 - 企业人力资源管理
*/
public class Employee {
// 基本信息
private String employeeId;
private String name;
private String department;
private String position;
private String hireDate;
// 薪资信息
private double baseSalary;
private double bonus;
private int workYears;
// 绩效和状态
private String performanceRating;
private boolean isActive;
// 构造函数
public Employee(String employeeId, String name, String department,
String position, double baseSalary) {
this.employeeId = employeeId;
this.name = name;
this.department = department;
this.position = position;
this.baseSalary = baseSalary;
this.bonus = 0.0;
this.workYears = 0;
this.performanceRating = "待评估";
this.isActive = true;
this.hireDate = "2024-01-01";
}
// 计算总工资
public double calculateTotalSalary() {
return baseSalary + bonus;
}
// 加薪
public void giveRaise(double percentage) {
if (!isActive) {
System.out.println("❌ 离职员工无法调薪");
return;
}
if (percentage <= 0 || percentage > 50) {
System.out.println("❌ 加薪幅度必须在0-50%之间");
return;
}
double oldSalary = baseSalary;
baseSalary *= (1 + percentage / 100);
System.out.println("🎉 " + name + " 加薪成功!");
System.out.println("从 ¥" + String.format("%.2f", oldSalary) +
" 涨到 ¥" + String.format("%.2f", baseSalary));
}
// 添加奖金
public void addBonus(double amount, String reason) {
if (!isActive) {
System.out.println("❌ 离职员工无法发放奖金");
return;
}
if (amount <= 0) {
System.out.println("❌ 奖金金额必须大于0");
return;
}
bonus += amount;
System.out.println("🎁 为 " + name + " 发放奖金 ¥" + amount);
System.out.println("原因:" + reason);
System.out.println("总奖金:¥" + String.format("%.2f", bonus));
}
// 升职
public void promote(String newPosition, double salaryIncrease) {
if (!isActive) {
System.out.println("❌ 离职员工无法升职");
return;
}
String oldPosition = position;
position = newPosition;
baseSalary += salaryIncrease;
System.out.println("🚀 " + name + " 升职成功!");
System.out.println("从 " + oldPosition + " 升至 " + newPosition);
System.out.println("薪资增加:¥" + String.format("%.2f", salaryIncrease));
}
// 更新绩效
public void updatePerformance(String rating) {
if (!isActive) {
System.out.println("❌ 离职员工无法评估绩效");
return;
}
performanceRating = rating;
System.out.println("📊 " + name + " 绩效评级更新为:" + rating);
// 根据绩效给予奖金
switch (rating) {
case "优秀":
addBonus(baseSalary * 0.2, "优秀绩效奖励");
break;
case "良好":
addBonus(baseSalary * 0.1, "良好绩效奖励");
break;
case "需改进":
System.out.println("⚠️ 建议制定改进计划");
break;
}
}
// 计算年收入
public double calculateYearlyIncome() {
return (baseSalary + bonus) * 12;
}
// 显示员工信息
public void showEmployeeInfo() {
System.out.println("═══════════════════════════════════");
System.out.println("👥 员工详细信息 ");
System.out.println("═══════════════════════════════════");
System.out.println("🆔 员工ID:" + employeeId);
System.out.println("👤 姓名:" + name);
System.out.println("🏢 部门:" + department);
System.out.println("💼 职位:" + position);
System.out.println("💰 基本工资:¥" + String.format("%.2f", baseSalary));
System.out.println("🎁 奖金:¥" + String.format("%.2f", bonus));
System.out.println("💵 总工资:¥" + String.format("%.2f", calculateTotalSalary()));
System.out.println("📊 绩效评级:" + performanceRating);
System.out.println("🕐 工作年限:" + workYears + " 年");
System.out.println("📅 入职日期:" + hireDate);
System.out.println("✅ 在职状态:" + (isActive ? "在职" : "离职"));
System.out.println("═══════════════════════════════════");
}
// 生成工资条
public void generatePaySlip() {
System.out.println("\n💰 工资条");
System.out.println("姓名:" + name + " (" + employeeId + ")");
System.out.println("部门:" + department + " - " + position);
System.out.println("基本工资:¥" + String.format("%.2f", baseSalary));
System.out.println("奖金:¥" + String.format("%.2f", bonus));
System.out.println("应发总额:¥" + String.format("%.2f", calculateTotalSalary()));
System.out.println("年收入预估:¥" + String.format("%.2f", calculateYearlyIncome()));
}
// 职业建议
public void getCareerAdvice() {
System.out.println("\n💡 职业发展建议:");
if (workYears < 2) {
System.out.println("📚 新员工阶段,建议多学习业务知识");
} else if (workYears < 5) {
System.out.println("🚀 成长阶段,可以考虑承担更多责任");
} else {
System.out.println("👑 资深员工,建议考虑管理岗位");
}
if ("优秀".equals(performanceRating)) {
System.out.println("🌟 表现优异,有升职潜力");
} else if ("需改进".equals(performanceRating)) {
System.out.println("⚠️ 需要提升绩效,建议参加培训");
}
}
// Getter和Setter方法
public String getName() { return name; }
public String getDepartment() { return department; }
public String getPosition() { return position; }
public double getBaseSalary() { return baseSalary; }
public boolean isActive() { return isActive; }
public void setWorkYears(int workYears) { this.workYears = workYears; }
public void setActive(boolean active) { this.isActive = active; }
}
🎓 作业三:学生成绩管理系统
📝 系统设计
设计一个完整的学生成绩管理系统,包含Student、Subject、Grade三个核心类。
💻 核心类实现
Student类
java
public class Student {
private String studentId;
private String name;
private int age;
private String className;
private String major;
private Grade[] grades;
private int gradeCount;
public Student(String studentId, String name, int age, String className, String major) {
this.studentId = studentId;
this.name = name;
this.age = age;
this.className = className;
this.major = major;
this.grades = new Grade[20]; // 最多20门课程
this.gradeCount = 0;
}
// 添加成绩
public void addGrade(Grade grade) {
if (gradeCount < grades.length) {
grades[gradeCount] = grade;
gradeCount++;
System.out.println("✅ 成绩添加成功:" + grade.getSubject().getSubjectName());
} else {
System.out.println("❌ 成绩记录已满!");
}
}
// 计算GPA
public double calculateGPA() {
if (gradeCount == 0) return 0.0;
double totalPoints = 0;
int totalCredits = 0;
for (int i = 0; i < gradeCount; i++) {
Grade grade = grades[i];
double points = getGradePoints(grade.getScore());
int credits = grade.getSubject().getCredits();
totalPoints += points * credits;
totalCredits += credits;
}
return totalCredits > 0 ? totalPoints / totalCredits : 0.0;
}
private double getGradePoints(double score) {
if (score >= 90) return 4.0;
else if (score >= 80) return 3.0;
else if (score >= 70) return 2.0;
else if (score >= 60) return 1.0;
else return 0.0;
}
// 显示学生信息
public void showStudentInfo() {
System.out.println("🎓 学生信息:" + name + " (" + studentId + ")");
System.out.println("班级:" + className + " | 专业:" + major);
System.out.println("GPA:" + String.format("%.2f", calculateGPA()));
System.out.println("已修课程:" + gradeCount + " 门");
}
// Getter方法
public String getStudentId() { return studentId; }
public String getName() { return name; }
public Grade[] getGrades() { return grades; }
public int getGradeCount() { return gradeCount; }
}
Subject类
java
public class Subject {
private String subjectCode;
private String subjectName;
private int credits;
private String teacher;
private String difficulty;
public Subject(String subjectCode, String subjectName, int credits, String teacher) {
this.subjectCode = subjectCode;
this.subjectName = subjectName;
this.credits = credits;
this.teacher = teacher;
this.difficulty = "中等";
}
public void getSubjectInfo() {
System.out.println("📚 " + subjectName + " (" + subjectCode + ")");
System.out.println("学分:" + credits + " | 教师:" + teacher);
}
// Getter方法
public String getSubjectCode() { return subjectCode; }
public String getSubjectName() { return subjectName; }
public int getCredits() { return credits; }
public String getTeacher() { return teacher; }
}
Grade类
java
public class Grade {
private Student student;
private Subject subject;
private double score;
private String examDate;
private String gradeType;
public Grade(Student student, Subject subject, double score, String gradeType) {
this.student = student;
this.subject = subject;
this.score = score;
this.gradeType = gradeType;
this.examDate = "2024-01-15";
}
public String getLetterGrade() {
if (score >= 90) return "A";
else if (score >= 80) return "B";
else if (score >= 70) return "C";
else if (score >= 60) return "D";
else return "F";
}
public boolean isPassGrade() {
return score >= 60;
}
// Getter方法
public Student getStudent() { return student; }
public Subject getSubject() { return subject; }
public double getScore() { return score; }
public String getGradeType() { return gradeType; }
}
🎮 系统测试
java
public class GradeManagementTest {
public static void main(String[] args) {
// 创建学生
Student student = new Student("2024001", "张三", 20, "计算机1班", "计算机科学");
// 创建科目
Subject java = new Subject("CS101", "Java编程", 4, "李老师");
Subject math = new Subject("MATH201", "高等数学", 5, "王老师");
// 添加成绩
Grade javaGrade = new Grade(student, java, 92, "期末考试");
Grade mathGrade = new Grade(student, math, 78, "期末考试");
student.addGrade(javaGrade);
student.addGrade(mathGrade);
// 显示结果
student.showStudentInfo();
System.out.println("\n📊 成绩详情:");
for (int i = 0; i < student.getGradeCount(); i++) {
Grade grade = student.getGrades()[i];
System.out.println(grade.getSubject().getSubjectName() +
": " + grade.getScore() + " (" + grade.getLetterGrade() + ")");
}
}
}
🎯 学习总结
✅ 完成的技能
通过这三个作业,你已经掌握了:
-
复杂类的设计
- 多属性管理
- 状态转换控制
- 业务逻辑封装
-
数据验证和处理
- 输入参数检查
- 边界条件处理
- 异常情况应对
-
多类协作设计
- 类之间的关系
- 对象引用传递
- 系统整体架构
-
实际业务建模
- 现实问题抽象
- 领域知识转换
- 用户需求实现
🚀 进阶建议
-
代码优化
- 使用集合框架替代数组
- 添加异常处理机制
- 实现接口和抽象类
-
功能扩展
- 添加数据持久化
- 实现查询和统计
- 设计用户界面
-
设计模式
- 学习常用设计模式
- 重构现有代码
- 提高代码质量
🎊 恭喜完成第2天作业!
你已经具备了Java面向对象编程的核心技能,可以独立设计和实现复杂的业务类。继续保持这种学习势头,向更高级的特性进发!