// 課程信息
typedef struct {
char id[20]; // 課程號
char name[50]; // 課程名稱
char intro[200]; // 介紹
int credit; // 學分
int max_stu; // 選課上限
int cur_stu; // 當前已選人數
char stu_list[MAX_STU][20]; // 已選學生學號列表
} Course;
// 學生信息
typedef struct {
char id[20]; // 學號
char pwd[20]; // 密碼
char courses[MAX_COURSE][20]; // 已選課程號列表
int course_cnt;
} Student;
// 全局數據(簡化版,實際建議文件/數據庫持久化)
Course courses[MAX_COURSE];
Student students[MAX_STU];
int course_cnt = 0, stu_cnt = 0;
int login(char *id, char *pwd, int role) { // role: 1-admin, 2-student
if (role == 1) {
return strcmp(id, "admin")==0 && strcmp(pwd, "admin123")==0;
} else {
for (int i=0; i
void admin_add_course() {
if (course_cnt >= MAX_COURSE) { printf("課程已滿\n"); return; }
Course *c = &courses[course_cnt++];
printf("課程號: "); scanf("%s", c->id);
printf("名稱: "); scanf("%s", c->name);
printf("介紹: "); scanf("%s", c->intro);
printf("學分: "); scanf("%d", &c->credit);
printf("上限: "); scanf("%d", &c->max_stu);
c->cur_stu = 0;
printf("添加成功!\n");
}
void student_select_course(int stu_idx) {
char cid[20];
printf("輸入要選的課程號: "); scanf("%s", cid);
for (int i=0; i= courses[i].max_stu) {
printf("該課程已滿(%d/%d)\n", courses[i].cur_stu, courses[i].max_stu);
return;
}
// 檢查是否已選
for (int j=0; j
courses.dat、students.dat,退出時寫回(二進制 fwrite/fread 或文本 fprintf/fscanf)。while(1){ show_menu(); scanf("%d",&opt); ... },或移植至 Qt/GTK 圖形界面。本系統屬典型「管理信息系統」(MIS)入門項目,核心在於數據結構設計與業務邏輯封裝。建議分模塊編寫(course.c、student.c、auth.c、main.c),使用 Makefile 管理編譯,養成工程化習慣。