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

// student结构体存储学生信息 typedef struct student{ int num; // 学号 char name[10]; // 姓名 int score; // 分数 } ElemType;

typedef struct LNode { // 定义节点 ElemType data; // 数据域 struct LNode *next; // 指针域 } LNode, *LinkList;

void CreateList(LinkList &L); // 创建链表 void NodeAppend(LinkList &L, ElemType e); // 增加节点 int NodeDelete(LinkList &L, int num); // 删除节点 int NodeModify(LinkList &L, int num, ElemType e); // 修改节点 int NodeSearch(LinkList L, int num, ElemType &e); // 查找节点 void ReadFile(LinkList &L); // 读取文件 void WriteFile(LinkList L); // 写入文件 void AddStudent(LinkList &L); // 增加学生 void DeleteStudent(LinkList &L); // 删除学生 void ModifyStudent(LinkList &L); // 修改学生 void SearchStudent(LinkList L); // 查找学生 void DisplayStudent(LinkList L); // 显示学生 void Menu(); // 主菜单

// 创建链表(含头节点) void CreateList(LinkList &L) { L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; }

// 尾部增加节点 void NodeAppend(LinkList &L, ElemType e) { LNode *q = (LinkList)malloc(sizeof(LNode)); q->data = e; q->next = NULL; LNode *p = L; while (p->next) p = p->next; p->next = q; }

// 根据编号删除节点 int NodeDelete(LinkList &L, int num) { LNode *p, *q; p = L; while (p->next) { q = p->next; if (num == (q->data).num) { p->next = q->next; free(q); return 0; } p = p->next; } return 1; }

// 根据编号修改节点 int NodeModify(LinkList &L, int num, ElemType e) { LNode *p, *q; p = L; while (p->next) { q = p->next; if (num == (q->data).num) { q->data = e; return 0; } p = p->next; } return 1; }

// 根据编号搜索节点,若找到则将节点信息存储至e并返回 int NodeSearch(LinkList L, int num, ElemType &e) { LNode *p, *q; p = L; while (p->next) { q = p->next; if (num == (q->data).num) { e = q->data; return 0; } p = p->next; } return 1; }

// 读取文件中的数据到链表 void ReadFile(LinkList &L) { FILE *fp = NULL; fp = fopen('student.txt', 'r'); if (fp == NULL) { printf('Can not open the file '); exit(1); } CreateList(L); ElemType temp; while (fscanf(fp, '%d %s %d', &temp.num, temp.name, &temp.score) != EOF) { NodeAppend(L, temp); } fclose(fp); }

// 将链表中的数据用覆盖的方式写入文件中 void WriteFile(LinkList L) { FILE *fp = NULL; fp = fopen('student.txt', 'w'); if (fp == NULL) { printf('Can not open the file '); exit(1); } LNode *p = L; ElemType temp; while (p->next) { temp = p->next->data; fprintf(fp, '%d %s %d ', temp.num, temp.name, temp.score); p = p->next; } fclose(fp); }

// 录入学生信息 void AddStudent(LinkList &L) { ElemType e; printf('请输入要录入的学生信息: '); printf('学号 姓名 分数 '); scanf('%d %s %d', &e.num, e.name, &e.score); NodeAppend(L, e); system('pause'); }

// 删除学生信息 void DeleteStudent(LinkList &L) { int num; printf('请输入要删除的学生学号:'); scanf('%d', &num); if (NodeDelete(L, num) == 1) printf('未查找到该学生! '); else printf('删除成功! '); system('pause'); }

// 修改学生信息 void ModifyStudent(LinkList &L) { ElemType e; int num; printf('请输入要修改的学生的当前学号:'); scanf('%d', &num); printf('请输入修改后的信息:学号 姓名 分数 '); scanf('%d %s %d', &e.num, e.name, &e.score); if (NodeModify(L, num, e) == 1) printf('未查找到该学生! '); else printf('修改成功! '); system('pause'); }

// 查找学生信息 void SearchStudent(LinkList L) { ElemType e; int num; printf('请输入要查找的学生学号: '); scanf('%d', &num); if (NodeSearch(L, num, e) == 1) printf('未查找到改该学生! '); else printf('学号 姓名 分数 %d %s %d ', e.num, e.name, e.score); system('pause'); }

// 显示学生信息 void DisplayStudent(LinkList L) { printf('学号 姓名 分数 '); LNode *p = L; ElemType e; while (p->next) { e = p->next->data; printf('%d %s %d ', e.num, e.name, e.score); p = p->next; } system('pause'); }

// 主菜单 void Menu() { system('cls'); printf('------------------------------------------ '); printf(' 学生管理系统
'); printf('
'); printf('
'); printf(' 1.增加学生信息 2.删除学生信息
'); printf('
'); printf(' 3.修改学生信息 4.查找学生信息
'); printf('
'); printf(' 5.显示所有信息 0.退出管理系统
'); printf('
'); printf('------------------------------------------ '); printf('
'); printf(' 请输入:'); }

// 主函数 int main() { LinkList L; CreateList(L); ReadFile(L); int choice = 1; while (choice) { Menu(); scanf('%d', &choice); switch (choice) { case 1: AddStudent(L); break; case 2: DeleteStudent(L); break; case 3: ModifyStudent(L); break; case 4: SearchStudent(L); break; case 5: DisplayStudent(L); break; case 0: WriteFile(L); break; } } return 0;

C语言单链表实现学生管理系统

原文地址: https://www.cveoy.top/t/topic/pePW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录