楼层: 首页/ 软件技术/ C 语言/ 小项目:学生成绩管理系统
12

小项目:学生成绩管理系统

Mini Project — Grade Manager

把前面学的全用上——结构体当学生、链表存全班、文件做持久化、菜单做交互。下面是骨架,你可以照着补全增删改查和排序。别直接抄,自己敲一遍跑通,这就是你的第一个 C 作品。

项目骨架:链表 + 文件 + 菜单

#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Student { char id[15]; // 学号 char name[20]; double score; struct Student *next; } Student; // 头插一个学生(增) Student *add_stu(Student *head, const char *id, const char *name, double sc) { Student *s = (Student *)malloc(sizeof(Student)); strcpy(s->id, id); strcpy(s->name, name); s->score = sc; s->next = head; return s; } // 按学号查找(查) Student *find_stu(Student *head, const char *id) { for (Student *p = head; p; p = p->next) if (strcmp(p->id, id) == 0) return p; return NULL; } // 保存到文件(持久化) void save(Student *head, const char *path) { FILE *fp = fopen(path, "w"); for (Student *p = head; p; p = p->next) fprintf(fp, "%s %s %.1f\n", p->id, p->name, p->score); fclose(fp); } int main() { Student *head = NULL; head = add_stu(head, "2026001", "小明", 92.5); head = add_stu(head, "2026002", "小红", 88.0); Student *t = find_stu(head, "2026001"); if (t) printf("找到:%s %.1f\n", t->name, t->score); save(head, "students.txt"); printf("已保存到 students.txt\n"); return 0; }

运行结果

找到:小明 92.5 已保存到 students.txt

练给你留的扩展作业

① 加一个"按学号删除"功能(删链表节点要把前一个节点的 next 接到下一个)。② 加一个"按成绩从高到低排序"(插入排序或冒泡)。③ 启动时从 students.txt 读回数据。④ 做一个 while 循环菜单:1 增加 2 查询 3 删除 4 保存 5 退出。做完这四样,你的 C 就真的入门了。