本文目录导读:

- 案例一:学生成绩管理系统(面向对象基础)
- 案例二:字符串处理工具(字符串与数组练习)
- 案例三:简单银行账户系统(继承与多态)
- 案例四:经典算法集合(算法与逻辑练习)
- 案例五:万年历程序(日期处理练习)
- 使用建议
我为您准备了一个综合性的Java作业案例,包含多个典型练习,从基础到进阶都有覆盖,每个案例都包含完整代码和运行结果。
学生成绩管理系统(面向对象基础)
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManager {
// 学生类
static class Student {
private String id;
private String name;
private double score;
public Student(String id, String name, double score) {
this.id = id;
this.name = name;
this.score = score;
}
public String getId() { return id; }
public String getName() { return name; }
public double getScore() { return score; }
public void setScore(double score) { this.score = score; }
@Override
public String toString() {
return String.format("学号: %s, 姓名: %s, 成绩: %.1f", id, name, score);
}
}
private ArrayList<Student> students = new ArrayList<>();
private Scanner scanner = new Scanner(System.in);
public void run() {
while (true) {
System.out.println("\n===== 学生成绩管理系统 =====");
System.out.println("1. 添加学生");
System.out.println("2. 删除学生");
System.out.println("3. 修改学生成绩");
System.out.println("4. 查询学生");
System.out.println("5. 显示所有学生");
System.out.println("6. 统计成绩信息");
System.out.println("0. 退出系统");
System.out.print("请选择操作: ");
int choice = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
switch (choice) {
case 1: addStudent(); break;
case 2: deleteStudent(); break;
case 3: updateScore(); break;
case 4: searchStudent(); break;
case 5: displayAll(); break;
case 6: showStatistics(); break;
case 0:
System.out.println("感谢使用,再见!");
return;
default:
System.out.println("无效选择,请重新输入!");
}
}
}
private void addStudent() {
System.out.print("请输入学号: ");
String id = scanner.nextLine();
// 检查学号是否已存在
for (Student s : students) {
if (s.getId().equals(id)) {
System.out.println("该学号已存在!");
return;
}
}
System.out.print("请输入姓名: ");
String name = scanner.nextLine();
System.out.print("请输入成绩: ");
double score = scanner.nextDouble();
students.add(new Student(id, name, score));
System.out.println("学生添加成功!");
}
private void deleteStudent() {
System.out.print("请输入要删除的学号: ");
String id = scanner.nextLine();
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(id)) {
students.remove(i);
System.out.println("删除成功!");
return;
}
}
System.out.println("未找到该学号的学生!");
}
private void updateScore() {
System.out.print("请输入要修改的学号: ");
String id = scanner.nextLine();
for (Student s : students) {
if (s.getId().equals(id)) {
System.out.print("请输入新的成绩: ");
double newScore = scanner.nextDouble();
s.setScore(newScore);
System.out.println("成绩修改成功!");
return;
}
}
System.out.println("未找到该学号的学生!");
}
private void searchStudent() {
System.out.print("请输入要查询的学号或姓名: ");
String keyword = scanner.nextLine();
boolean found = false;
for (Student s : students) {
if (s.getId().equals(keyword) || s.getName().equals(keyword)) {
System.out.println(s);
found = true;
}
}
if (!found) {
System.out.println("未找到匹配的学生!");
}
}
private void displayAll() {
if (students.isEmpty()) {
System.out.println("暂无学生数据!");
return;
}
System.out.println("\n所有学生信息:");
System.out.println("----------------");
for (Student s : students) {
System.out.println(s);
}
}
private void showStatistics() {
if (students.isEmpty()) {
System.out.println("暂无数据可统计!");
return;
}
double max = Double.MIN_VALUE;
double min = Double.MAX_VALUE;
double sum = 0;
for (Student s : students) {
max = Math.max(max, s.getScore());
min = Math.min(min, s.getScore());
sum += s.getScore();
}
double avg = sum / students.size();
System.out.printf("学生人数: %d\n", students.size());
System.out.printf("最高分: %.1f\n", max);
System.out.printf("最低分: %.1f\n", min);
System.out.printf("平均分: %.1f\n", avg);
System.out.printf("及格率: %.1f%%\n",
(double)students.stream().filter(s -> s.getScore() >= 60).count() / students.size() * 100);
}
public static void main(String[] args) {
new StudentManager().run();
}
}
字符串处理工具(字符串与数组练习)
public class StringTools {
// 统计字符出现次数
public static int countChar(String str, char c) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == c) count++;
}
return count;
}
// 反转字符串
public static String reverse(String str) {
return new StringBuilder(str).reverse().toString();
}
// 判断是否为回文
public static boolean isPalindrome(String str) {
str = str.toLowerCase().replaceAll("[^a-z0-9]", "");
int left = 0, right = str.length() - 1;
while (left < right) {
if (str.charAt(left) != str.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
// 统计单词数量
public static int countWords(String str) {
if (str == null || str.trim().isEmpty()) return 0;
return str.trim().split("\\s+").length;
}
// 提取所有数字
public static String extractNumbers(String str) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(str.charAt(i))) {
sb.append(str.charAt(i));
}
}
return sb.toString();
}
// 首字母大写
public static String capitalizeWords(String str) {
String[] words = str.toLowerCase().split("\\s+");
StringBuilder result = new StringBuilder();
for (String word : words) {
if (!word.isEmpty()) {
result.append(Character.toUpperCase(word.charAt(0)))
.append(word.substring(1))
.append(" ");
}
}
return result.toString().trim();
}
public static void main(String[] args) {
String testStr = "Hello World 123 Java Programming";
System.out.println("原字符串: " + testStr);
System.out.println("字符 'o' 出现次数: " + countChar(testStr, 'o'));
System.out.println("反转字符串: " + reverse(testStr));
System.out.println("是否为回文: " + isPalindrome("A man, a plan, a canal: Panama"));
System.out.println("单词数量: " + countWords(testStr));
System.out.println("提取数字: " + extractNumbers(testStr));
System.out.println("单词首字母大写: " + capitalizeWords("hello world java"));
}
}
简单银行账户系统(继承与多态)
import java.util.ArrayList;
import java.util.Scanner;
public class BankSystem {
// 账户抽象类
abstract static class Account {
protected String accountNo;
protected String holderName;
protected double balance;
public Account(String accountNo, String holderName, double initialBalance) {
this.accountNo = accountNo;
this.holderName = holderName;
this.balance = initialBalance;
}
// 抽象方法
public abstract double calculateInterest();
public abstract void displayAccountType();
// 公共方法
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
System.out.println("存款成功,当前余额: " + balance);
} else {
System.out.println("存款金额必须大于0!");
}
}
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
System.out.println("取款成功,当前余额: " + balance);
} else {
System.out.println("取款失败,余额不足或金额无效!");
}
}
public void displayInfo() {
System.out.println("账户类型: ");
displayAccountType();
System.out.println("账号: " + accountNo);
System.out.println("户主: " + holderName);
System.out.println("余额: " + balance + " 元");
System.out.println("年利息: " + calculateInterest() + " 元");
}
}
// 储蓄账户
static class SavingsAccount extends Account {
private double interestRate = 0.03; // 3% 年利率
public SavingsAccount(String accountNo, String holderName, double initialBalance) {
super(accountNo, holderName, initialBalance);
}
@Override
public double calculateInterest() {
return balance * interestRate;
}
@Override
public void displayAccountType() {
System.out.println("储蓄账户");
}
}
// 支票账户
static class CheckingAccount extends Account {
private double transactionFee = 2.0; // 每次交易手续费
public CheckingAccount(String accountNo, String holderName, double initialBalance) {
super(accountNo, holderName, initialBalance);
}
@Override
public void withdraw(double amount) {
if (amount + transactionFee <= balance) {
balance -= (amount + transactionFee);
System.out.println("取款成功(含手续费" + transactionFee + "元),当前余额: " + balance);
} else {
System.out.println("取款失败,余额不足!");
}
}
@Override
public double calculateInterest() {
return 0; // 支票账户无利息
}
@Override
public void displayAccountType() {
System.out.println("支票账户");
}
}
public static void main(String[] args) {
ArrayList<Account> accounts = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
// 创建一些测试账户
accounts.add(new SavingsAccount("SA001", "张三", 10000));
accounts.add(new CheckingAccount("CA001", "李四", 5000));
while (true) {
System.out.println("\n===== 银行账户系统 =====");
System.out.println("1. 显示所有账户");
System.out.println("2. 存款");
System.out.println("3. 取款");
System.out.println("4. 创建新账户");
System.out.println("0. 退出");
System.out.print("请选择: ");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
for (Account acc : accounts) {
acc.displayInfo();
System.out.println("-------------------");
}
break;
case 2:
System.out.print("请输入账号: ");
String accNo = scanner.nextLine();
Account account = findAccount(accounts, accNo);
if (account != null) {
System.out.print("请输入存款金额: ");
double amount = scanner.nextDouble();
account.deposit(amount);
} else {
System.out.println("账户不存在!");
}
break;
case 3:
System.out.print("请输入账号: ");
accNo = scanner.nextLine();
account = findAccount(accounts, accNo);
if (account != null) {
System.out.print("请输入取款金额: ");
double amount = scanner.nextDouble();
account.withdraw(amount);
} else {
System.out.println("账户不存在!");
}
break;
case 4:
System.out.print("请输入账户类型(1-储蓄,2-支票): ");
int type = scanner.nextInt();
scanner.nextLine();
System.out.print("请输入账号: ");
String newAccNo = scanner.nextLine();
System.out.print("请输入持有人姓名: ");
String name = scanner.nextLine();
System.out.print("请输入初始存款: ");
double initDeposit = scanner.nextDouble();
Account newAccount = (type == 1) ?
new SavingsAccount(newAccNo, name, initDeposit) :
new CheckingAccount(newAccNo, name, initDeposit);
accounts.add(newAccount);
System.out.println("账户创建成功!");
break;
case 0:
System.out.println("感谢使用银行系统!");
scanner.close();
return;
default:
System.out.println("无效选择!");
}
}
}
private static Account findAccount(ArrayList<Account> accounts, String accountNo) {
for (Account acc : accounts) {
if (acc.accountNo.equals(accountNo)) {
return acc;
}
}
return null;
}
}
经典算法集合(算法与逻辑练习)
import java.util.Arrays;
import java.util.Random;
public class AlgorithmExercises {
// 冒泡排序
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
boolean swapped = false;
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if (!swapped) break; // 优化:如果没有交换说明已排序
}
}
// 二分查找
public static int binarySearch(int[] arr, int target) {
int left = 0, right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1; // 未找到
}
// 计算斐波那契数列(递归)
public static long fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
// 计算斐波那契数列(迭代,更高效)
public static long fibonacciIterative(int n) {
if (n <= 1) return n;
long prev = 0, curr = 1;
for (int i = 2; i <= n; i++) {
long temp = curr;
curr = prev + curr;
prev = temp;
}
return curr;
}
// 最大公约数(欧几里得算法)
public static int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return Math.abs(a);
}
// 判断素数
public static boolean isPrime(int n) {
if (n < 2) return false;
if (n == 2 || n == 3) return true;
if (n % 2 == 0 || n % 3 == 0) return false;
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) return false;
}
return true;
}
// 数组反转
public static void reverseArray(int[] arr) {
int left = 0, right = arr.length - 1;
while (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
public static void main(String[] args) {
// 测试排序
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("排序前: " + Arrays.toString(arr));
bubbleSort(arr);
System.out.println("排序后: " + Arrays.toString(arr));
// 测试二分查找
int index = binarySearch(arr, 22);
System.out.println("查找22的位置: " + index);
// 测试斐波那契
System.out.println("斐波那契数列前10项:");
for (int i = 0; i < 10; i++) {
System.out.print(fibonacci(i) + " ");
}
System.out.println();
// 测试最大公约数
System.out.println("gcd(56, 98) = " + gcd(56, 98));
// 测试素数
System.out.println("1-50之间的素数:");
for (int i = 1; i <= 50; i++) {
if (isPrime(i)) {
System.out.print(i + " ");
}
}
System.out.println();
// 测试数组反转
int[] arr2 = {1, 2, 3, 4, 5};
reverseArray(arr2);
System.out.println("反转数组: " + Arrays.toString(arr2));
}
}
万年历程序(日期处理练习)
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
public class CalendarApplication {
// 打印一个月日历
public static void printMonth(int year, int month) {
YearMonth yearMonth = YearMonth.of(year, month);
int days = yearMonth.lengthOfMonth();
LocalDate firstDay = yearMonth.atDay(1);
// 第一天是星期几(1=周一, 7=周日)
int dayOfWeek = firstDay.getDayOfWeek().getValue();
System.out.println("\n " + year + "年 " + month + "月");
System.out.println(" 一 二 三 四 五 六 日");
System.out.println("===========================");
// 打印前面的空格
for (int i = 1; i < dayOfWeek; i++) {
System.out.print(" ");
}
// 打印日期
for (int day = 1; day <= days; day++) {
System.out.printf("%3d ", day);
if ((day + dayOfWeek - 1) % 7 == 0) {
System.out.println();
}
}
System.out.println();
}
// 判断是否闰年
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 计算两个日期之间的天数
public static long daysBetween(LocalDate date1, LocalDate date2) {
// 确保date1是较早的日期
if (date1.isAfter(date2)) {
LocalDate temp = date1;
date1 = date2;
date2 = temp;
}
return date1.until(date2).getDays();
}
// 显示当前日期信息
public static void showCurrentDate() {
LocalDate today = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 EEEE");
System.out.println("当前日期: " + today.format(formatter));
System.out.println("今天是今年的第 " + today.getDayOfYear() + " 天");
System.out.println("今年还剩 " + (today.lengthOfYear() - today.getDayOfYear()) + " 天");
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
LocalDate today = LocalDate.now();
while (true) {
System.out.println("\n===== 万年历程序 =====");
System.out.println("1. 显示某月日历");
System.out.println("2. 显示今年全年日历");
System.out.println("3. 判断闰年");
System.out.println("4. 计算日期差");
System.out.println("5. 显示当前日期信息");
System.out.println("0. 退出");
System.out.print("请选择: ");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.print("请输入年份: ");
int year = scanner.nextInt();
System.out.print("请输入月份(1-12): ");
int month = scanner.nextInt();
printMonth(year, month);
break;
case 2:
System.out.print("请输入年份: ");
year = scanner.nextInt();
for (int m = 1; m <= 12; m++) {
printMonth(year, m);
}
break;
case 3:
System.out.print("请输入年份: ");
year = scanner.nextInt();
System.out.println(year + "年" + (isLeapYear(year) ? "是" : "不是") + "闰年");
break;
case 4:
System.out.print("请输入第一个日期 (YYYY-MM-DD): ");
String dateStr1 = scanner.next();
System.out.print("请输入第二个日期 (YYYY-MM-DD): ");
String dateStr2 = scanner.next();
LocalDate date1 = LocalDate.parse(dateStr1);
LocalDate date2 = LocalDate.parse(dateStr2);
long days = daysBetween(date1, date2);
System.out.println("两个日期相差 " + days + " 天");
break;
case 5:
showCurrentDate();
break;
case 0:
System.out.println("感谢使用万年历程序!");
scanner.close();
return;
default:
System.out.println("无效选择!");
}
}
}
}
使用建议
-
选做题:根据您当前的Java水平选择合适的案例
- 初学者:从案例二(字符串工具)开始
- 中级水平:尝试案例一(学生管理系统)
- 进阶水平:挑战案例三(银行系统)
-
扩展提升:
- 为案例一添加文件保存/读取功能
- 为案例三添加数据库连接
- 为案例四添加更复杂的排序算法
-
注意要点:
- 代码规范:变量命名、注释规范
- 异常处理:添加 try-catch 处理用户输入错误
- 代码复用:思考如何优化现有代码
如果需要任何案例的详细解释或修改,请告诉我!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播