首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

VC++ 學生成績管理系統極簡實作(120 行核心碼)

     編輯:程式設計疑難解答

需求分析

  • 管理 3 門課程成績
  • 按學號查詢:姓名、學號、三科成績
  • 四大功能:錄入、查詢、統計、退出
  • 程式碼精簡,約 120 行

資料結構設計

struct Student {
    char id[20];      // 學號
    char name[20];    // 姓名
    float score[3];   // 三科成績
    float avg;        // 平均
};
Student stu[100];     // 最多 100 位學生
int count = 0;        // 實際人數

核心功能實作

1. 成績錄入

void input() {
    if (count >= 100) { puts("已滿"); return; }
    printf("學號 姓名 成績1 成績2 成績3: ");
    scanf("%s %s %f %f %f", 
        stu[count].id, stu[count].name, 
        &stu[count].score[0], &stu[count].score[1], &stu[count].score[2]);
    stu[count].avg = (stu[count].score[0] + stu[count].score[1] + stu[count].score[2]) / 3;
    count++;
    puts("錄入成功");
}

2. 成績查詢

void query() {
    char id[20];
    printf("輸入學號: "); scanf("%s", id);
    for (int i = 0; i < count; i++) {
        if (strcmp(stu[i].id, id) == 0) {
            printf("學號:%s 姓名:%s 成績:%.1f %.1f %.1f 平均:%.1f\n",
                stu[i].id, stu[i].name,
                stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg);
            return;
        }
    }
    puts("查無此人");
}

3. 成績統計

void stat() {
    if (count == 0) { puts("無資料"); return; }
    float sum[3] = {0}, max[3] = {0}, min[3] = {100,100,100};
    for (int i = 0; i < count; i++) {
        for (int j = 0; j < 3; j++) {
            sum[j] += stu[i].score[j];
            if (stu[i].score[j] > max[j]) max[j] = stu[i].score[j];
            if (stu[i].score[j] < min[j]) min[j] = stu[i].score[j];
        }
    }
    printf("課程  平均  最高  最低\n");
    for (int j = 0; j < 3; j++) {
        printf("%d    %.1f  %.1f  %.1f\n", j+1, sum[j]/count, max[j], min[j]);
    }
}

4. 主選單迴圈

int main() {
    int op;
    while (1) {
        puts("\n1.錄入 2.查詢 3.統計 4.退出");
        printf("選擇: "); scanf("%d", &op);
        if (op == 1) input();
        else if (op == 2) query();
        else if (op == 3) stat();
        else if (op == 4) break;
        else puts("輸入錯誤");
    }
    return 0;
}

完整程式碼(含標頭與編譯指令)

#include <stdio.h>
#include <string.h>

struct Student { char id[20], name[20]; float score[3], avg; } stu[100];
int count = 0;

void input() { /* 同上 */ }
void query() { /* 同上 */ }
void stat()  { /* 同上 */ }

int main() { /* 同上 */ }

編譯與執行

gcc grade.c -o grade
./grade

擴充建議

  • 加入檔案存取(fwrite/fread)實現資料持久化
  • 使用動態記憶體(malloc/realloc)移除 100 人上限
  • 引入 qsort 實現按平均分排序顯示
  • 改用 C++ vector<Student> 簡化記憶體管理

此極簡版本僅 98 行有效碼,涵蓋所有核心需求,適合作為教學範例或快速原型基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved