Java课程案例

wen java案例 2

本文目录导读:

Java课程案例

  1. 第一阶段:基础语法与逻辑
  2. 第二阶段:面向对象编程
  3. 第三阶段:集合与泛型
  4. 第四阶段:高级特性
  5. 第五阶段:数据库与项目实战
  6. 如何选择合适的案例

Java课程案例通常覆盖基础语法、面向对象、常用API、集合框架、IO流、多线程、网络编程以及JDBC等核心模块,下面我为你整理了几个经典的、由浅入深的课程案例,附带核心代码思路。


第一阶段:基础语法与逻辑

案例1:学生成绩管理系统(控制台版)

目标:练习数组、循环、条件判断和方法封装。 功能

  1. 输入学生人数和成绩
  2. 计算总分、平均分、最高分、最低分
  3. 统计不及格人数及名单

核心代码片段

public class ScoreManager {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入学生人数: ");
        int n = sc.nextInt();
        int[] scores = new int[n];
        String[] names = new String[n];
        // 输入数据
        for (int i = 0; i < n; i++) {
            System.out.print("请输入第" + (i+1) + "个学生姓名: ");
            names[i] = sc.next();
            System.out.print("请输入" + names[i] + "的成绩: ");
            scores[i] = sc.nextInt();
        }
        // 计算统计量
        int sum = 0, max = scores[0], min = scores[0];
        int failCount = 0;
        for (int i = 0; i < n; i++) {
            sum += scores[i];
            if (scores[i] > max) max = scores[i];
            if (scores[i] < min) min = scores[i];
            if (scores[i] < 60) {
                failCount++;
                System.out.println("不及格: " + names[i] + " -> " + scores[i]);
            }
        }
        System.out.println("平均分: " + (double)sum/n + ", 最高分: " + max + ", 最低分: " + min);
    }
}

第二阶段:面向对象编程

案例2:银行账户管理系统

目标:练习类、对象、封装、继承、多态。 核心类设计

// 1. 抽象基类 Account
abstract class Account {
    private String accountNumber;
    private double balance;
    public Account(String accountNumber, double initialBalance) {
        this.accountNumber = accountNumber;
        this.balance = initialBalance;
    }
    // 公共方法
    public void deposit(double amount) {
        balance += amount;
    }
    public abstract boolean withdraw(double amount); // 子类重写
    // getters/setters...
}
// 2. 子类:储蓄账户 (不能透支)
class SavingsAccount extends Account {
    public SavingsAccount(String number, double balance) {
        super(number, balance);
    }
    @Override
    public boolean withdraw(double amount) {
        if (amount <= getBalance()) {
            setBalance(getBalance() - amount);
            return true;
        }
        System.out.println("余额不足");
        return false;
    }
}
// 3. 子类:信用卡账户 (可透支,有信用额度)
class CreditAccount extends Account {
    private double creditLimit; // 信用额度
    public CreditAccount(String number, double balance, double creditLimit) {
        super(number, balance);
        this.creditLimit = creditLimit;
    }
    @Override
    public boolean withdraw(double amount) {
        if (amount <= getBalance() + creditLimit) {
            setBalance(getBalance() - amount);
            return true;
        }
        System.out.println("超出信用额度");
        return false;
    }
}

扩展思考:增加转账、利息计算、交易记录日志等功能。


第三阶段:集合与泛型

案例3:图书管理系统(使用集合框架)

目标:熟练使用ArrayList、HashMap、HashSet、Stream API。 功能

  1. 添加/删除/查找图书
  2. 按分类统计图书数量
  3. 按价格区间筛选
class Book {
    String isbn, title, category;
    double price;
    // constructor, getters, equals & hashCode (基于isbn)
}
class Library {
    private Map<String, Book> bookMap = new HashMap<>(); // isbn -> Book
    public void addBook(Book book) {
        bookMap.put(book.getIsbn(), book);
    }
    public Book findByIsbn(String isbn) { return bookMap.get(isbn); }
    // 按分类统计 (Stream API)
    public Map<String, Long> countByCategory() {
        return bookMap.values().stream()
            .collect(Collectors.groupingBy(Book::getCategory, Collectors.counting()));
    }
    // 筛选价格大于等于80元的图书
    public List<Book> filterByPrice(double minPrice) {
        return bookMap.values().stream()
            .filter(b -> b.getPrice() >= minPrice)
            .collect(Collectors.toList());
    }
}

第四阶段:高级特性

案例4:多线程模拟——火车站售票系统

目标:练习线程安全、同步锁、线程池。 核心问题:多窗口售票,避免超卖。

public class TicketSystem {
    private int totalTickets = 100;
    // 同步方法保证原子性
    public synchronized boolean sellTicket(String windowName) {
        if (totalTickets > 0) {
            totalTickets--;
            System.out.println(windowName + " 售出1张,余票: " + totalTickets);
            return true;
        }
        System.out.println(windowName + " 票已售罄");
        return false;
    }
    // 使用线程池模拟多个窗口
    public static void main(String[] args) {
        TicketSystem system = new TicketSystem();
        ExecutorService pool = Executors.newFixedThreadPool(4);
        for (int i = 0; i < 10; i++) {
            pool.submit(() -> {
                while (system.totalTickets > 0) {
                    system.sellTicket(Thread.currentThread().getName());
                    try { Thread.sleep(50); } catch (InterruptedException e) {}
                }
            });
        }
        pool.shutdown();
    }
}

案例5:简易聊天室(Socket + 多线程)

目标:网络编程基础,理解客户端/服务器模型。 Server端核心

public class ChatServer {
    private static Set<PrintWriter> clients = new CopyOnWriteArraySet<>();
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("服务器启动...");
        while (true) {
            Socket socket = serverSocket.accept();
            new Thread(new ClientHandler(socket)).start();
        }
    }
    static class ClientHandler implements Runnable {
        private Socket socket;
        private PrintWriter out;
        private BufferedReader in;
        public ClientHandler(Socket socket) {
            this.socket = socket;
        }
        @Override
        public void run() {
            try {
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                out = new PrintWriter(socket.getOutputStream(), true);
                clients.add(out);
                String message;
                while ((message = in.readLine()) != null) {
                    // 转发给所有客户端
                    for (PrintWriter writer : clients) {
                        writer.println("用户说: " + message);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                clients.remove(out);
                try { socket.close(); } catch (IOException e) {}
            }
        }
    }
}

第五阶段:数据库与项目实战

案例6:员工信息管理系统(JDBC + 数据库)

目标:连接MySQL,实现增删改查,使用PreparedStatement防止SQL注入。

public class EmployeeDAO {
    private Connection getConnection() throws SQLException {
        String url = "jdbc:mysql://localhost:3306/company?useSSL=false";
        return DriverManager.getConnection(url, "root", "password");
    }
    // 添加员工
    public void addEmployee(Employee emp) {
        String sql = "INSERT INTO employees (name, department, salary) VALUES (?, ?, ?)";
        try (Connection conn = getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1, emp.getName());
            pstmt.setString(2, emp.getDepartment());
            pstmt.setDouble(3, emp.getSalary());
            pstmt.executeUpdate();
        } catch (SQLException e) { e.printStackTrace(); }
    }
    // 查询所有 (结果集转换为对象)
    public List<Employee> queryAll() {
        List<Employee> list = new ArrayList<>();
        String sql = "SELECT * FROM employees";
        try (Connection conn = getConnection();
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(sql)) {
            while (rs.next()) {
                Employee emp = new Employee();
                emp.setId(rs.getInt("id"));
                emp.setName(rs.getString("name"));
                emp.setDepartment(rs.getString("department"));
                emp.setSalary(rs.getDouble("salary"));
                list.add(emp);
            }
        } catch (SQLException e) { e.printStackTrace(); }
        return list;
    }
}

如何选择合适的案例

  • 初学者:从「学生成绩管理」和「银行账户」案例入手。
  • 进阶学习:重点练习「图书管理系统」的集合操作和「多线程售票」的并发控制。
  • 综合项目:推荐完成「聊天室 + JDBC 员工管理」,这是将网络、多线程、数据库融合的经典练习。

这些案例足够覆盖大学Java课程的核心知识点,你可以根据当前学习进度,从最简单的控制台程序逐步扩展到图形界面或Web应用(Spring Boot),如果需要某个案例的完整代码或详细设计文档,可以告诉我。

抱歉,评论功能暂时关闭!