第2天Java学习作业 - 完整解答

📋 作业概览

本文档包含第二天面向对象编程的三个核心作业:

  1. 汽车类设计 - 掌握复杂对象的状态管理
  2. 员工类设计 - 理解业务逻辑的封装
  3. 学生成绩管理系统 - 多类协作的系统设计

🚗 作业一:汽车类设计

📝 设计要求

设计一个完整的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() + ")");
        }
    }
}

🎯 学习总结

✅ 完成的技能

通过这三个作业,你已经掌握了:

  1. 复杂类的设计

    • 多属性管理
    • 状态转换控制
    • 业务逻辑封装
  2. 数据验证和处理

    • 输入参数检查
    • 边界条件处理
    • 异常情况应对
  3. 多类协作设计

    • 类之间的关系
    • 对象引用传递
    • 系统整体架构
  4. 实际业务建模

    • 现实问题抽象
    • 领域知识转换
    • 用户需求实现

🚀 进阶建议

  1. 代码优化

    • 使用集合框架替代数组
    • 添加异常处理机制
    • 实现接口和抽象类
  2. 功能扩展

    • 添加数据持久化
    • 实现查询和统计
    • 设计用户界面
  3. 设计模式

    • 学习常用设计模式
    • 重构现有代码
    • 提高代码质量

🎊 恭喜完成第2天作业!

你已经具备了Java面向对象编程的核心技能,可以独立设计和实现复杂的业务类。继续保持这种学习势头,向更高级的特性进发!

相关推荐
菜鸟小九14 分钟前
Leetcode20 (有效的括号)
java·数据结构·算法
悟能不能悟18 分钟前
讲一件Java虚拟线程
java·开发语言·oracle
fictionist21 分钟前
动态 Web 开发技术入门篇
java·服务器·开发语言·笔记·学习·mysql·spring
louisgeek22 分钟前
Java Date-Time
java
N_NAN_N1 小时前
[蓝桥杯 2024 国 Python B] 设计
java·数据结构·算法·并查集
weixin_483745621 小时前
Springboot项目的目录结构
java·后端
Tirson Yang2 小时前
西安java面试总结1
java·面试
小猫咪怎么会有坏心思呢2 小时前
华为OD机试-猴子爬山-dp(JAVA 2025A卷)
java·算法·华为od
保持学习ing2 小时前
SpringBoot 前后台交互 -- CRUD
java·spring boot·后端·ssm·项目实战·页面放行
啾啾Fun3 小时前
Java反射操作百倍性能优化
java·性能优化·反射·缓存思想