- 前言
- 一、思路
- 1、流程图
- 2、代码
- (1)登录界面
- (2)功能框架
- ①基本的函数框架
- ②改进
- 二、分布实现
- 1、定义结构体
- 2、文件读取
- 3、输出学生信息
- (1)功能实现
- (2)输出界面
- 4、增加学生信息
- (1)功能实现
- (2)输出界面
- 5、文件保存
- 6、查询学生信息
- (1)输出界面
- (2)功能实现
- ① 按照学号查找
- ② 按照姓名查找
- 7、修改学生信息
- 8、删除学生信息
- (1)输出界面
- (2)功能实现
- 9、排序学生信息
- 10、退出管理系统
- 三、完整代码
- 总结
C语言学完了,知识很多,也很琐碎,学生信息管理系统对我们而言,就是一次机会,一次让我们将C语言知识融会贯通的机会,通过编程学生信息管理系统,我们运用了循环、指针,结构体,链表、函数、文件等知识,也能让我们更加熟悉了C语言相关知识。话不多说,直接开始。
一、思路学生信息管理系统,说难也难,说简单也简单,对于初学者的我们也算一项不小的挑战了,对于这个系统,它的功能等等很多,所以我们需要有一个大概的思路,来让我们更好的完成它。
1、流程图 2、代码根据这个流程图,我们先做好一个大概的框架,然后再一部分一部分的补全即可。
(1)登录界面将学生信息管理系统的功能键选择的提示信息打印出来,就组成了一个简易的登录界面:
void welcome() { printf("****************************************************************n"); printf("*********** 学生成绩管理系统 ***********n"); printf("*********** 1 ---- 增加学生信息 ***********n"); printf("*********** 2 ---- 删除学生信息 ***********n"); printf("*********** 3 ---- 修改学生信息 ***********n"); printf("*********** 4 ---- 查询学生信息 ***********n"); printf("*********** 5 ---- 输出学生信息 ***********n"); printf("*********** 6 ---- 排序学生信息 ***********n"); printf("*********** 0 ---- 退出管理系统 ***********n"); printf("****************************************************************n"); printf("请选择想要实现的功能(数字):"); }
运行结果为:
一共七个功能,为了程序的可读性,我们尽量使用其英语全拼,
#include// 主菜单界面 void welcome(); // 增加学生信息 void Add(); // 删除学生信息 void Delete(); // 修改学生信息 void Fix(); // 查询学生信息 void Search(); // 输出学生信息 void print(); // 排序学生信息 void Sort(); // 退出管理系统 void goodbye(); int main() { int choice = 0; while (true) { welcome(); scanf("%d", &choice); switch (choice) { case 1:// 增加学生信息 Add(); break; case 2:// 删除学生信息 Delete(); break; case 3:// 修改学生信息 Fix(); break; case 4:// 查询学生信息 Search(); break; case 5:// 输出学生信息 print(); break; case 6:// 排序学生信息 Sort(); break; case 0:// 退出管理系统 goodbye(); break; } printf("是否需要继续 *** 作?(Yes:1 / No:0):"); scanf("%d", &choice); if (choice == 0) { break; } } return 0; } void welcome() { printf("****************************************************************n"); printf("*********** 学生成绩管理系统 ***********n"); printf("*********** 1 ---- 增加学生信息 ***********n"); printf("*********** 2 ---- 删除学生信息 ***********n"); printf("*********** 3 ---- 修改学生信息 ***********n"); printf("*********** 4 ---- 查询学生信息 ***********n"); printf("*********** 5 ---- 输出学生信息 ***********n"); printf("*********** 6 ---- 排序学生信息 ***********n"); printf("*********** 0 ---- 退出管理系统 ***********n"); printf("****************************************************************n"); printf("请选择想要实现的功能(数字):"); } // 增加学生信息 void Add() { } // 删除学生信息 void Delete() { } // 修改学生信息 void Fix() { } // 查询学生信息 void Search() { } // 输出学生信息 void print() { } // 排序学生信息 void Sort() { } // 退出管理系统 void goodbye() { }
运行结果为:
对于登录界面,信息会不断输出,所以我们在 welcome()函数中加入一行代码
system("cls");
其对应的头文件为:windows.h
功能为:清屏
这样我们的学生信息系统在使用时,就会更加的简洁。
二、分布实现 1、定义结构体我们存储学生信息用到的是链表,所以我们首先要定义结构体,来创建链表。(信息可以自行定义)
typedef struct Node { int ID;// 学号 char Name[50];// 姓名 char Sex[10];// 性别 char Class[50];// 班级 char Room[20];// 宿舍号 int Score;// 成绩 struct Node* next;// 指针域 }node; node list;// 链表2、文件读取
运用文件的相关知识,我们就可以将之前已经在文件中写的一部分信息,保存在文件中,当我们要读取它们的时候,从文件中读取它们,并将它们放入链表中,不用担心每次打开信息就会丢失的问题。
这里就需要用到文件的读取以及链表的插入相关的知识点。
这里文件的读取,我选择的是 fscanf () 函数,而链表的插入我选择的是尾插法。
代码如下:
// 读取文件 int Read_FILE(node* L) { FILE* pfRead = fopen("student_information.txt", "r"); node st; node* s; node* t = L; if (pfRead == NULL) { return 0; } while (fscanf(pfRead, "%d %s %s %s %s %d", &st.ID, st.Name, st.Sex, st.Class, st.Room, &st.Score) != EOF) { s = (node*)malloc(sizeof(node)); *s = st; // 尾插法 t->next = s; t = s; t->next = NULL; } return 1; }3、输出学生信息
先从简单的部分入手,读取学生信息,我们只需要对链表进行一次遍历即可,注意要判断链表是否为空。
将功能和界面分开做更有利于我们快速完成:
(1)功能实现// 输出学生信息 void Print(node* L) { system("cls"); node* p = L->next; Print_Printf(); if (p != NULL) { while (p != NULL) { printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", p->ID, p->Name, p->Sex, p->Class, p->Room, p->Score); printf("________________________________________________________________n"); p = p->next; } } }(2)输出界面
void Print_Printf() { printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); }
运行结果如下:
①选择输出学生信息
②输出界面
完成输出函数以后,我们需要继续完成增加函数,由于之前在文件读取中,我们使用了尾插法,为了起到练习的作业,我们现在使用头插法添加学生信息。
我们将功能和界面分开来做:
(1)功能实现void Add(node* L, node e) { // 头插法 node* p = L; node* s = (node*)malloc(sizeof(node)); *s = e; s->next = p->next; p->next = s; }(2)输出界面
// 增加学生信息 void Add_Printf() { system("cls"); node st; printf("请输入新增学生的相关信息:n"); printf("学号:"); scanf("%d", &st.ID); printf("姓名:"); scanf("%s", st.Name); printf("性别:"); scanf("%s", st.Sex); printf("班级:"); scanf("%s", st.Class); printf("宿舍号:"); scanf("%s", st.Room); printf("成绩:"); scanf("%d", &st.Score); Add(&list, st); }
运行结果为:
①选择添加学生信息
②输出添加学生的相关信息
③选择输出学生信息
④输出界面
刚刚我们完成了增加学生信息,尝试过的同学可能已经发现了,当我们关闭程序的时候,我们之前添加的信息并不会保存下来,所以就需要用到了文件来进行信息保存。
代码如下:
// 保存文件 int Save_FILE(node* L) { FILE* pfWrite = fopen("student_information.txt", "w"); if (pfWrite == NULL) { return 0; } node* p = L->next; while (p != NULL) { fprintf(pfWrite, " %d %s %s %s %s %dn", p->ID, p->Name, p->Sex, p->Class, p->Room, p->Score); p = p->next; } return 1; }
然后我们将这个文件保存的函数放在添加函数的最后:
void Add(node* L, node e) { // 头插法 node* p = L; node* s = (node*)malloc(sizeof(node)); *s = e; s->next = p->next; p->next = s; Save_FILE(L); }
这样我们添加的学生信息就可以存放在文件中了。
6、查询学生信息同样的,还是将功能和界面分开做,这里的查询功能有两种方式,分别通过学号、姓名查找学生信息,鉴于后边的修改、删除函数同样需要用到查询,所以我们在信息查询完成后会返回其前一个节点的位置。
(1)输出界面// 查询学生信息 void Search_Printf(node* L) { system("cls"); int choice = 0; printf("按照学号查询 ---- 1n"); printf("按照姓名查询 ---- 2n"); printf("请输入查询方式:"); scanf("%d", &choice); int id; char name[50]; node* st; if (choice == 1) { printf("请输入要查询的学号:"); scanf("%d", &id); st = Search(id, L); if (st == NULL) { printf("查无此人!n"); } else { printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); } } else if (choice == 2) { printf("请输入要查询的姓名:"); scanf("%s", name); st = Search(name, L); if (st == NULL) { printf("查无此人!n"); } else { st = st->next; printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); } } }(2)功能实现 ① 按照学号查找
// 按学号进行查找 node* Search_id(int id, node* L) { node* p = L; while (p->next != NULL) { if (p->next->ID == id) { return p; } p = p->next; } return NULL; }② 按照姓名查找
注意 strcmp 函数需要头文件 string.h
// 按姓名进行查找 node* Search_name(char name[], node* L) { node* p = L; while (p->next != NULL) { if (strcmp(name,p->next->Name)) { return p; } p = p->next; } return NULL; }
运行结果为:
①按照学号查询
②按照姓名查询
// 修改学生信息 void Fix(node* L) { system("cls"); int id; printf("请输入要查找的学生的学号:"); scanf("%d", &id); node* st = Search_id(id, L); if (st == NULL) { printf("查无此人!n"); return; } st = st->next; int choice = 0; while (1) { system("cls"); // 输出一次所要修改的学生成绩 printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); printf("修改姓名 ---- 1n"); printf("修改性别 ---- 2n"); printf("修改班级 ---- 3n"); printf("修改宿舍号 ---- 4n"); printf("修改成绩 ---- 5n"); printf("请输入要修改的信息:"); scanf("%d", &choice); switch (choice) { case 1: printf("请输入姓名:"); scanf("%s", st->Name); break; case 2: printf("请输入性别:"); scanf("%s", st->Sex); break; case 3: printf("请输入班级:"); scanf("%s", st->Class); break; case 4: printf("请输入宿舍号:"); scanf("%s", st->Room); break; case 5: printf("请输入成绩:"); scanf("%d", st->Score); break; } printf("是否继续修改该学生信息?(Yes:1 / No:0):"); scanf("%d", &choice); if (choice == 0) { break; } } // 修改完成后该学生的信息 printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); // 保存信息 Save_FILE(L); }
运行结果为:
这里运用到的是链表的删除的相关知识点。
(1)输出界面// 删除学生信息 void Delete_Printf(node* L) { system("cls"); int id; node* p; printf("请输入要删除的学生的学号:"); scanf("%d", &id); node* st = Search_id(id, L); p = st; if (st == NULL) { printf("查无此人!n"); return; } st = st->next; printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); Delete(p); // 保存信息 Save_FILE(L); }(2)功能实现
void Delete(node* s) { node* t = s->next; s->next = t->next; t->next = NULL; free(t); }
运行结果为:
再次尝试
说明删除成功!
排序这里主要还是注意链表的交换,涉及到数据域的交换与指针域的交换。
// 排序学生信息 void Sort(node* L) { system("cls"); int choice = 0; printf("按照学号从大到小排序 ---- 1n"); printf("按照学号从小到大排序 ---- 2n"); printf("按照成绩从大到小排序 ---- 3n"); printf("按照成绩从小到大排序 ---- 4n"); printf("请选择排序方式:"); scanf("%d", &choice); int flag = 0; for (node* p = L->next; p != NULL; p = p->next) { for (node* q = p; q != NULL; q = q->next) { switch (choice) { case 1: if (!cmp_big_ID(*p, *q)) { flag = 1; } break; case 2: if (!cmp_small_ID(*p, *q)) { flag = 1; } break; case 3: if (!cmp_big_Score(*p, *q)) { flag = 1; } break; case 4: if (!cmp_small_Score(*p, *q)) { flag = 1; } break; } if (flag == 1) { // 交换数据域 node t = *p; *p = *q; *q = t; // 处理指针域 t.next = p->next; p->next = q->next; q->next = t.next; flag = 0; } } } } // 学号从大到小 bool cmp_big_ID(node e1, node e2) { return e1.ID > e2.ID; } // 成绩从大到小 bool cmp_big_Score(node e1, node e2) { return e1.Score > e2.Score; } // 学号从小到大 bool cmp_small_ID(node e1, node e2) { return e1.ID < e2.ID; } // 成绩从小到大 bool cmp_small_Score(node e1, node e2) { return e1.Score < e2.Score; }
运行结果为:
①学号从大到小:
②学号从小到大:
③成绩从小到大:
④成绩从小到大:
终于!!!到了最激动人心的时刻了,我们的学生信息管理系统要做完了,万事俱备只欠东风!
注意:exit(0)表示正常运行程序并退出程序。
// 退出管理系统 void goodbye() { system("cls"); printf("欢迎下次使用学生信息管理系统!"); exit(0);// 结束程序 }三、完整代码
#include总结#include #include #include typedef struct Node { int ID;// 学号 char Name[50];// 姓名 char Sex[10];// 性别 char Class[50];// 班级 char Room[20];// 宿舍号 int Score;// 成绩 struct Node* next;// 指针域 }node; node list;// 链表 // 读取文件 int Read_FILE(node* L); // 保存文件 int Save_FILE(node* L); // 主菜单界面 void welcome(); // 增加学生信息 void Add(node *L,node e);// 功能 void Add_Printf();// 界面 // 删除学生信息 void Delete_Printf(node*L);// 界面 void Delete(node* s);// 功能 // 修改学生信息 void Fix(node *L); // 查询学生信息 void Search_Printf(node* L);// 界面 node* Search_id(int id, node* L);// 按学号进行查找 node* Search_name(char name[], node* L);// 按姓名进行查找 // 输出学生信息 void Print(node* L);// 功能 void Print_Printf();// 界面 // 排序学生信息 void Sort(node* L); bool cmp_big_ID(node e1, node e2);// 学号从大到小 bool cmp_big_Score(node e1, node e2);// 成绩从大到小 bool cmp_small_ID(node e1, node e2);// 学号从小到大 bool cmp_small_Score(node e1, node e2);// 成绩从小到大 // 退出管理系统 void goodbye(); int main() { int choice = 0; Read_FILE(&list); while (true) { welcome(); scanf("%d", &choice); switch (choice) { case 1:// 增加学生信息 Add_Printf(); break; case 2:// 删除学生信息 Delete_Printf(&list); break; case 3:// 修改学生信息 Fix(&list); break; case 4:// 查询学生信息 Search_Printf(&list); break; case 5:// 输出学生信息 Print(&list); break; case 6:// 排序学生信息 Sort(&list); break; case 0:// 退出管理系统 goodbye(); break; } printf("是否需要继续 *** 作?(Yes:1 / No:0):"); scanf("%d", &choice); if (choice == 0) { break; } } return 0; } void welcome() { system("cls"); printf("****************************************************************n"); printf("*********** 学生成绩管理系统 ***********n"); printf("*********** 1 ---- 增加学生信息 ***********n"); printf("*********** 2 ---- 删除学生信息 ***********n"); printf("*********** 3 ---- 修改学生信息 ***********n"); printf("*********** 4 ---- 查询学生信息 ***********n"); printf("*********** 5 ---- 输出学生信息 ***********n"); printf("*********** 6 ---- 排序学生信息 ***********n"); printf("*********** 0 ---- 退出管理系统 ***********n"); printf("****************************************************************n"); printf("请选择想要实现的功能(数字):"); } // 读取文件 int Read_FILE(node* L) { FILE* pfRead = fopen("student_information.txt", "r"); node st; node* s; node* t = L; if (pfRead == NULL) { return 0; } while (fscanf(pfRead, "%d %s %s %s %s %d", &st.ID, st.Name, st.Sex, st.Class, st.Room, &st.Score) != EOF) { s = (node*)malloc(sizeof(node)); *s = st; // 尾插法 t->next = s; t = s; t->next = NULL; } return 1; } // 保存文件 int Save_FILE(node* L) { FILE* pfWrite = fopen("student_information.txt", "w"); if (pfWrite == NULL) { return 0; } node* p = L->next; while (p != NULL) { fprintf(pfWrite, " %d %s %s %s %s %dn", p->ID, p->Name, p->Sex, p->Class, p->Room, p->Score); p = p->next; } return 1; } // 增加学生信息 void Add_Printf() { system("cls"); node st; printf("请输入新增学生的相关信息:n"); printf("学号:"); scanf("%d", &st.ID); printf("姓名:"); scanf("%s", st.Name); printf("性别:"); scanf("%s", st.Sex); printf("班级:"); scanf("%s", st.Class); printf("宿舍号:"); scanf("%s", st.Room); printf("成绩:"); scanf("%d", &st.Score); Add(&list, st); } void Add(node* L, node e) { // 头插法 node* p = L; node* s = (node*)malloc(sizeof(node)); *s = e; s->next = p->next; p->next = s; Save_FILE(L); } // 删除学生信息 void Delete_Printf(node* L) { system("cls"); int id; node* p; printf("请输入要删除的学生的学号:"); scanf("%d", &id); node* st = Search_id(id, L); p = st; if (st == NULL) { printf("查无此人!n"); return; } st = st->next; printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); Delete(p); // 保存信息 Save_FILE(L); } void Delete(node* s) { node* t = s->next; s->next = t->next; t->next = NULL; free(t); } // 修改学生信息 void Fix(node* L) { system("cls"); int id; printf("请输入要修改的学生的学号:"); scanf("%d", &id); node* st = Search_id(id, L); if (st == NULL) { printf("查无此人!n"); return; } st = st->next; int choice = 0; while (1) { system("cls"); // 输出一次所要修改的学生成绩 printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); printf("修改姓名 ---- 1n"); printf("修改性别 ---- 2n"); printf("修改班级 ---- 3n"); printf("修改宿舍号 ---- 4n"); printf("修改成绩 ---- 5n"); printf("请输入要修改的信息:"); scanf("%d", &choice); switch (choice) { case 1: printf("请输入姓名:"); scanf("%s", st->Name); break; case 2: printf("请输入性别:"); scanf("%s", st->Sex); break; case 3: printf("请输入班级:"); scanf("%s", st->Class); break; case 4: printf("请输入宿舍号:"); scanf("%s", st->Room); break; case 5: printf("请输入成绩:"); scanf("%d", st->Score); break; } printf("是否继续修改该学生信息?(Yes:1 / No:0):"); scanf("%d", &choice); if (choice == 0) { break; } } // 修改完成后该学生的信息 printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); // 保存信息 Save_FILE(L); } // 查询学生信息 void Search_Printf(node* L) { system("cls"); int choice = 0; printf("按照学号查询 ---- 1n"); printf("按照姓名查询 ---- 2n"); printf("请输入查询方式:"); scanf("%d", &choice); int id; char name[50]; node* st; if (choice == 1) { printf("请输入要查询的学号:"); scanf("%d", &id); st = Search_id(id, L); if (st == NULL) { printf("查无此人!n"); } else { st = st->next; printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); } } else if (choice == 2) { printf("请输入要查询的姓名:"); scanf("%s", name); st = Search_name(name, L); if (st == NULL) { printf("查无此人!n"); } else { st = st->next; printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score); printf("________________________________________________________________n"); } } } // 按学号进行查找 node* Search_id(int id, node* L) { node* p = L; while (p->next != NULL) { if (p->next->ID == id) { return p; } p = p->next; } return NULL; } // 按姓名进行查找 node* Search_name(char name[], node* L) { node* p = L; while (p->next != NULL) { if (strcmp(name, p->next->Name) == 0) { return p; } p = p->next; } return NULL; } // 输出学生信息 void Print(node* L) { system("cls"); node* p = L->next; Print_Printf(); if (p != NULL) { while (p != NULL) { printf("________________________________________________________________n"); printf("%d|%st|%st|%st|%st|%dt|n", p->ID, p->Name, p->Sex, p->Class, p->Room, p->Score); printf("________________________________________________________________n"); p = p->next; } } } void Print_Printf() { printf("________________________________________________________________n"); printf("|学号t|姓名t|性别t|班级tt|宿舍号tt|成绩t|n"); printf("________________________________________________________________n"); } // 排序学生信息 void Sort(node* L) { system("cls"); int choice = 0; printf("按照学号从大到小排序 ---- 1n"); printf("按照学号从小到大排序 ---- 2n"); printf("按照成绩从大到小排序 ---- 3n"); printf("按照成绩从小到大排序 ---- 4n"); printf("请选择排序方式:"); scanf("%d", &choice); int flag = 0; for (node* p = L->next; p != NULL; p = p->next) { for (node* q = p; q != NULL; q = q->next) { switch (choice) { case 1: if (!cmp_big_ID(*p, *q)) { flag = 1; } break; case 2: if (!cmp_small_ID(*p, *q)) { flag = 1; } break; case 3: if (!cmp_big_Score(*p, *q)) { flag = 1; } break; case 4: if (!cmp_small_Score(*p, *q)) { flag = 1; } break; } if (flag == 1) { // 交换数据域 node t = *p; *p = *q; *q = t; // 处理指针域 t.next = p->next; p->next = q->next; q->next = t.next; flag = 0; } } } } // 学号从大到小 bool cmp_big_ID(node e1, node e2) { return e1.ID > e2.ID; } // 成绩从大到小 bool cmp_big_Score(node e1, node e2) { return e1.Score > e2.Score; } // 学号从小到大 bool cmp_small_ID(node e1, node e2) { return e1.ID < e2.ID; } // 成绩从小到大 bool cmp_small_Score(node e1, node e2) { return e1.Score < e2.Score; } // 退出管理系统 void goodbye() { system("cls"); printf("欢迎下次使用学生信息管理系统!"); exit(0);// 结束程序 }
到此,学生管理系统的代码部分就结束了,耗时9个小时,代码+博客终于完成了,也算是有了满满的成就感,希望可以帮助到大家。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)