iT邦幫忙

2025 iThome 鐵人賽

0

統整目前為止的程式碼跟功能

程式碼:

import java.util.ArrayList;
import java.util.Scanner;

class Main{
    String name;
    int systolic;   // 收縮壓
    int diastolic;  // 舒張壓
    String level;   // 等級

    public BloodPressureRecord(String name, int systolic, int diastolic) {
        this.name = name;
        this.systolic = systolic;
        this.diastolic = diastolic;
        this.level = classify(systolic, diastolic);
    }

    // 判定血壓等級
    private String classify(int s, int d) {
        if (s < 90 || d < 60) return "低血壓";
        else if ((s >= 90 && s <= 119) && (d >= 60 && d <= 79)) return "正常";
        else if ((s >= 120 && s <= 139) || (d >= 80 && d <= 89)) return "高血壓一級";
        else return "高血壓二級";
    }

    @Override
    public String toString() {
        return String.format("%-10s 收縮壓:%3d  舒張壓:%3d  →  %-6s",
                name, systolic, diastolic, level);
    }
}

public class BloodPressureSystem {
    private static final ArrayList<BloodPressureRecord> records = new ArrayList<>();
    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("=== 血壓管理系統===");
        while (true) {
            System.out.println("\n------ 主選單 ------");
            System.out.println("1. 新增血壓紀錄");
            System.out.println("2. 顯示所有紀錄");
            System.out.println("3. 統計報表");
            System.out.println("4. 離開系統");
            System.out.print("請選擇功能(1-4):");

            String choice = scanner.nextLine();

            switch (choice) {
                case "1" -> addRecord();
                case "2" -> showRecords();
                case "3" -> showReport();
                case "4" -> {
                    System.out.println("系統結束,感謝使用!");
                    return;
                }
                default -> System.out.println("輸入錯誤,請重新選擇!");
            }
        }
    }

    private static void addRecord() {
        System.out.print("請輸入姓名:");
        String name = scanner.nextLine();
        System.out.print("請輸入收縮壓(systolic):");
        int s = Integer.parseInt(scanner.nextLine());
        System.out.print("請輸入舒張壓(diastolic):");
        int d = Integer.parseInt(scanner.nextLine());

        BloodPressureRecord record = new BloodPressureRecord(name, s, d);
        records.add(record);
        System.out.println("已新增紀錄:" + record);
    }

    private static void showRecords() {
        if (records.isEmpty()) {
            System.out.println("目前沒有任何血壓紀錄。");
            return;
        }
        System.out.println("\n=== 所有血壓紀錄 ===");
        for (BloodPressureRecord r : records) {
            System.out.println(r);
        }
    }

    private static void showReport() {
        if (records.isEmpty()) {
            System.out.println("沒有資料可統計。");
            return;
        }

        int sumS = 0, sumD = 0;
        int low = 0, normal = 0, high1 = 0, high2 = 0;

        for (BloodPressureRecord r : records) {
            sumS += r.systolic;
            sumD += r.diastolic;
            switch (r.level) {
                case "低血壓" -> low++;
                case "正常" -> normal++;
                case "高血壓一級" -> high1++;
                case "高血壓二級" -> high2++;
            }
        }

        double avgS = (double) sumS / records.size();
        double avgD = (double) sumD / records.size();

        System.out.println("\n=== 血壓統計報表 ===");
        System.out.printf("平均收縮壓:%.1f mmHg%n", avgS);
        System.out.printf("平均舒張壓:%.1f mmHg%n", avgD);
        System.out.println("----------------------");
        System.out.printf("低血壓:%d%n", low);
        System.out.printf("正常:%d%n", normal);
        System.out.printf("高血壓一級:%d%n", high1);
        System.out.printf("高血壓二級:%d%n", high2);
        System.out.println("----------------------");
        System.out.println("紀錄總數:" + records.size());
    }
}

執行結果:
用隨便取的名字跟亂寫的血壓數值來測試

=== 血壓管理系統===

------ 主選單 ------
1. 新增血壓紀錄
2. 顯示所有紀錄
3. 統計報表
4. 離開系統
請選擇功能(1-4):1
請輸入姓名:王小明
請輸入收縮壓(systolic):135
請輸入舒張壓(diastolic):85
已新增紀錄:王小明      收縮壓:135  舒張壓: 85  →  高血壓一級

------ 主選單 ------
請選擇功能(1-4):1
請輸入姓名:李小華
請輸入收縮壓(systolic):118
請輸入舒張壓(diastolic):76
已新增紀錄:李小華      收縮壓:118  舒張壓: 76  →  正常

------ 主選單 ------
請選擇功能(1-4):3

=== 血壓統計報表 ===
平均收縮壓:126.5 mmHg
平均舒張壓:80.5 mmHg
----------------------
低血壓:0
正常:1
高血壓一級:1
高血壓二級:0
----------------------
紀錄總數:2

上一篇
血壓等級分析
系列文
30 天完成:血壓健康追蹤系統29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言