千家信息网

如何使用C语言实现学生成绩管理系统

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章主要介绍了如何使用C语言实现学生成绩管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先上图:整个程序采用链表来管理学生成
千家信息网最后更新 2025年11月13日如何使用C语言实现学生成绩管理系统

这篇文章主要介绍了如何使用C语言实现学生成绩管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

先上图:

整个程序采用链表来管理学生成绩,保存学生成绩用的是 文件处理函数,使用 fopen(FilePath, "wb") 将学生信息在内存中的数据直接写入文件,相应的打开程序后读取时使用 fopen(FilePath, "rb") 将数据直接再次还原到内存中去。

选项6 是手动保存链表数据及配置数据。
选项7 配置每次修改链表中的数据是否需要自动保存。

选项1 进入后,直接按照提示输入 学生的各个信息,一行一个


选项3 修改学生信息,进入后选择以什么方式查找要修改的学生,然后输入学生的学号或姓名,找到之后(因为可能存在重名的同学,所以这里做了序号索引),输入结果索引,然后根据提示将该学生的信息重新输入一遍,达到修改的效果。

选项4 查询,功能如上图所示

选项5 排序,根据提示输入条件,排序会导致链表数据改变,所以回到主菜单后会自动保存数据到文件

选项8 投票系统,输入链表中存在的人名,对应下方投票结果会实时变动,并排序,最高票数的人颜色高亮。


选项9 输入后右侧出现提示"导出成功",则在相应目录下会出现student_export.txt文件,里面包含有链表中所有学生信息,这里采用的是 fprintf 函数输出到文件。

链表排序时,数据交换使用了kernel32.dll 中的内存数据拷贝 MoveMemory 函数,只需要将除链表中的pNext 以外的数据进行拷贝交换即可。

下面上代码:

// 学生管理系统.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "string.h"#include "conio.h"#include "windows.h"#include "stdlib.h"#define LIST_TITLE "学号 姓名 性别 语文 数学 英语\n"#define LIST_TITLE_1 "学号 姓名 性别 语文 数学 英语 均分\n"#define FILE_DATABASE "C:\\student_database.dat"#define FILE_EXPORT "C:\\student_export.txt"//颜色enum{ BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE};//功能索引enum{ Func_Add = 1,//添加学生信息 Func_Delete,//删除 Func_Modify,//修改 Func_Search,//搜索 Func_Sort,//排序 Func_Save,//保存 Func_AutoSave,//自动保存 Func_Vote,//投票系统 Func_Export,//导出学生信息 Func_ExitSystem//退出系统};struct Student{ int num;//学号 char name[20];//姓名 char sex[8];//性别 float score[3];//三门课程成绩 float averge;//平均分 int count;//投票计数 Student* pNext;};Student* G_pStuHead;//链表头bool G_autoStore = false;//自动保存/************************************************************************//*设置字体颜色*//************************************************************************/void setFontColor(int ForgC){ WORD wColor; HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi;  if(GetConsoleScreenBufferInfo(hOutput, &csbi)) {  //设置字体颜色  wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);  SetConsoleTextAttribute(hOutput, wColor); }}/************************************************************************//*光标跳转到指定位置*//************************************************************************/void gotoxy(int x, int y){    // 更新光标位置     COORD pos;     HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);    pos.X = x;    pos.Y = y;    SetConsoleCursorPosition(hOutput, pos); // 隐藏光标 //     CONSOLE_CURSOR_INFO cursor;//     cursor.bVisible = FALSE;//     cursor.dwSize = 1; //值介于1 ~ 100 之间 单元格底部为下划线 ~ 完全填充单元格//     SetConsoleCursorInfo(hOutput, &cursor); }/************************************************************************//*主菜单中指定位置打印是否自动保存*//************************************************************************/void printAutoStoreInfo(){ setFontColor(LIGHTGREEN); gotoxy(13, 10); printf("%s\n", G_autoStore ? "是" : "否"); setFontColor(WHITE);}/************************************************************************//*显示最上面的系统标题*//************************************************************************/void showSystemTitle(){ setFontColor(LIGHTGREEN); printf("--------------------------------------------------------\n"); printf("\t\t欢迎进入学生管理系统\n"); printf("--------------------------------------------------------\n"); setFontColor(WHITE);}/************************************************************************//*初始化屏幕*//************************************************************************/void initScreen(){ system("CLS"); showSystemTitle(); printf("请输入数字序列号,选择您要执行的操作:\n"); printf("1、添加学生信息\n"); printf("2、删除学生信息\n"); printf("3、修改学生信息\n"); printf("4、查询学生信息\n"); printf("5、排序\n"); printf("6、保存(如打开自动保存,则无需手动执行)\n"); printf("7、自动保存:"); printAutoStoreInfo(); printf("8、投票系统\n"); printf("9、导出学生信息\n"); setFontColor(LIGHTRED); printf("10、退出学生管理系统\n"); setFontColor(WHITE);}/************************************************************************//*从指定位置开始清除指定长度元素*//************************************************************************/void gotodelete(int x, int y, int length){ int i;     for (i = 0; i < length; i++) {  gotoxy(x + i, y);  printf(" "); }}/************************************************************************//*清除指定位置元素*//************************************************************************/void gotodelete(int x, int y){ gotodelete(x, y, 1);}/************************************************************************//*投票系统 *//************************************************************************/void voteSystem(){ bool hasFound; char name[20]; int count, i, j; Student* pStu, *pTmp; Student** pStuArr; //初始化票数清零 pStu = G_pStuHead->pNext; while(pStu != NULL) {  pStu->count = 0;  pStu = pStu->pNext; } count = 0; pStuArr = (Student**)malloc(4 * 100);//用于存放已经获得票数的同学指针 gotoxy(0, 6); printf("投票结果如下:\n"); gotoxy(0, 3); printf("请在下方输入你想投给的人的姓名(输入-1返回主菜单):\n");  while (1) {  gotodelete(0, 4, 20);//清空输入行  gotoxy(0, 4);  scanf("%s", name);    if(strcmp(name, "-1") == 0)  {   break;  }  hasFound = false;  pStu = G_pStuHead->pNext;  //在系统中查找对应的人名  while(pStu != NULL)  {   if(strcmp(pStu->name, name) == 0)   {    hasFound = true;    break;   }   pStu = pStu->pNext;  }  if(! hasFound)  {   printf("查无此人!!!");   Sleep(1000);   gotodelete(0, 5, 20);   continue;  }  //找到之后,这个人所对应的票数+1  pStu->count++;  for (i = 0; i < count; i++)  {   if(pStuArr[i] == pStu)   {    break;   }  }  if(i == count)//说明未找到,则添加进候选人数组  {   pStuArr[count++] = pStu;   if(count % 100 == 0)   {    pStuArr = (Student**)realloc(pStuArr, count + 100);   }  }  //冒泡排序,票数  for (i = 0; i < count - 1; i++)  {   for (j = i + 1; j < count; j++)   {    if(pStuArr[i]->count < pStuArr[j]->count)    {     pTmp = pStuArr[i];     pStuArr[i] = pStuArr[j];     pStuArr[j] = pTmp;    }   }  }  gotoxy(0, 7);//跳转到打印票数的那行  //打印票数  for (i = 0; i < count; i++)  {   if(i == 0)   {    setFontColor(LIGHTGREEN);   }   else   {    setFontColor(WHITE);   }   printf("%d %s\t%d\n", pStuArr[i]->num, pStuArr[i]->name, pStuArr[i]->count);  } } free(pStuArr); }/************************************************************************//*导出学生信息(明文) *//************************************************************************/bool exportStudentInfo(){ Student* pStu; FILE* fp; pStu = G_pStuHead->pNext; if((fp = fopen(FILE_EXPORT, "w")) == NULL) {  return false; } while (pStu != NULL) {  fprintf(fp, "%d %s  %s %.2f %.2f %.2f %.2f\n", pStu->num, pStu->name, pStu->sex,        pStu->score[0], pStu->score[1], pStu->score[2], pStu->averge);  pStu = pStu->pNext; } fclose(fp); return true;}/************************************************************************//*保存学生信息 (以数据库形式保存)*//************************************************************************/bool saveStudentInfo(){ FILE *fp; Student *pStu; pStu = G_pStuHead; if((fp = fopen(FILE_DATABASE, "wb")) == NULL) {  return false; } fwrite(&G_autoStore, sizeof(G_autoStore), 1, fp); while (pStu != NULL) {  fwrite(pStu, sizeof(Student), 1, fp);  pStu = pStu->pNext; } fclose(fp); return true;}/************************************************************************//*读取学生信息(读取数据库形式的文档) *//************************************************************************/bool loadStudentInfo(){ FILE *fp; int count; Student stu, *pStu, *pStuNew; count = 0; pStu = G_pStuHead; if((fp = fopen(FILE_DATABASE, "rb")) == NULL) {  return false; } fread(&G_autoStore, sizeof(G_autoStore), 1, fp);//读取是否自动保存 while(1) {  fread(&stu, sizeof(Student), 1, fp);//读取文档中每个同学的数据  if(feof(fp))//到文档尾则跳出  {   break;  }  if(count++ > 0)//这里 > 0 是因为保存的时候会把链表头保存进去,而链表头是没有有效数据的,所以要排除掉  {   pStuNew = (Student*)malloc(sizeof(Student));   MoveMemory(pStuNew, &stu, sizeof(Student) - 4);//将结构体除指针外的所有数据拷贝进内存   pStuNew->pNext = NULL;   pStu->pNext = pStuNew;   pStu = pStuNew;  }  if(stu.pNext == NULL)  {   break;  } } fclose(fp); return true;}/************************************************************************//*学生信息排序 *//************************************************************************/bool sortStudentInfo(){ int order1, order2; bool swapData; char yesOrNo; Student* pStu1, *pStu2, tmpStu; pStu1 = G_pStuHead->pNext; if(pStu1 == NULL) {  printf("系统中无学生信息!\n");  system("pause");  return false; } printf("输入以下序号执行相应功能(输入其他序号返回主菜单):\n"); printf("1、根据学号进行排序\n"); printf("2、根据姓名排序\n"); printf("3、根据语文成绩排序\n"); printf("4、根据数学成绩排序\n"); printf("5、根据英语成绩排序\n"); printf("6、根据平均分成绩排序\n"); scanf("%d", &order1); if(order1 >= 1 && order1 <= 6) {  printf("请选择正序OR倒序排列?(输入其他序号返回主菜单)\n");  printf("1、正序排列\n");  printf("2、倒序排列\n");  scanf("%d", &order2);  if(order2 >= 1 && order2 <= 2)  {   //冒泡排序   for ( ; pStu1->pNext != NULL; pStu1 = pStu1->pNext)   {    for (pStu2 = pStu1->pNext; pStu2 != NULL; pStu2 = pStu2->pNext)    {     swapData = false;//是否交换数据     switch(order1)     {     case 1://根据学号排序      {       if(order2 == 1 ? (pStu1->num > pStu2->num) : (pStu1->num < pStu2->num))//三目运算符, 判断正序还是倒序       {        swapData = true;       }       break;      }     case 2://根据姓名排序      {       if(order2 == 1 ? (strcmp(pStu1->name, pStu2->name) > 0) : (strcmp(pStu1->name, pStu2->name) < 0))       {        swapData = true;       }       break;      }     case 3://根据语文排序     case 4://根据数学排序     case 5://根据英语排序      {       if(order2 == 1 ? (pStu1->score[order1 - 3] > pStu2->score[order1 - 3]) : (pStu1->score[order1 - 3] < pStu2->score[order1 - 3]))       {        swapData = true;       }       break;      }     case 6://根据均分排序      {       if(order2 == 1 ? (pStu1->averge > pStu2->averge) : (pStu1->averge < pStu2->averge))       {        swapData = true;       }       break;      }     }     if(swapData)     {      //交换内存数据,只需要将除pNext指针外的结构体数据拷贝交换即可      MoveMemory(&tmpStu, pStu1, sizeof(Student) - 4);      MoveMemory(pStu1, pStu2, sizeof(Student) - 4);      MoveMemory(pStu2, &tmpStu, sizeof(Student) - 4);     }    }   }   printf("排序完成,是否显示?Y/N\n");   getchar();//过滤掉输入时的换行符   scanf("%c", &yesOrNo);   if(yesOrNo == 'Y' || yesOrNo == 'y')   {    pStu1 = G_pStuHead->pNext;    setFontColor(LIGHTGREEN);    printf(LIST_TITLE_1);//显示列表标题头    setFontColor(WHITE);    //打印排序后的各个学生信息    while(pStu1 != NULL)    {     printf("%d %s  %s %.2f %.2f %.2f %.2f\n", pStu1->num, pStu1->name, pStu1->sex,        pStu1->score[0], pStu1->score[1], pStu1->score[2], pStu1->averge);     pStu1 = pStu1->pNext;    }    system("pause");   }   return true;  } } return false;}/************************************************************************//*查询学生信息 *//************************************************************************/void searchStudentInfo(){ bool hasFound; int order, stuID, count, i, min, max; float score; char name[20]; Student* pStu; Student** pStuArr; pStuArr = NULL;  while (1) {  system("CLS");  showSystemTitle();  if(pStuArr != NULL)//如果再次查询,这里需要判断,将上一轮查询的学生信息指针数组清空  {   free(pStuArr);  }  count = 0;  stuID = 0;  hasFound = false;  pStu = G_pStuHead->pNext;  pStuArr = (Student**)malloc(4 * 100);//初始化查询到后存放的学生信息指针数组  printf("输入以下序号执行相应功能(输入其他序号返回主菜单):\n");  printf("1、输入学号查询信息\n");  printf("2、输入姓名查询信息\n");  printf("3、输入语文成绩范围查询信息\n");  printf("4、输入数学成绩范围查询信息\n");  printf("5、输入英语成绩范围查询信息\n");  printf("6、输入平均分范围查询信息\n");  printf("7、列出所有学生信息\n");  scanf("%d", &order);  switch(order)  {  case 1://根据学号查询   {    printf("请输入要查询的学生学号:");    scanf("%d", &stuID);    while (pStu != NULL)    {     if(pStu->num == stuID)     {      hasFound = true;      break;     }     pStu = pStu->pNext;    }    if(hasFound)//    {     setFontColor(LIGHTGREEN);     printf(LIST_TITLE_1);     setFontColor(WHITE);     printf("%d %s  %s %.2f %.2f %.2f %.2f\n", pStu->num, pStu->name, pStu->sex,        pStu->score[0], pStu->score[1], pStu->score[2], pStu->averge);    }        break;   }  case 2://根据姓名查询   {    printf("请输入要查询的学生姓名:");    scanf("%s", name);    while (pStu != NULL)    {     if(strcmp(pStu->name, name) == 0)     {      hasFound = true;      pStuArr[count++] = pStu;      if(count % 100 == 0)      {       pStuArr = (Student**)realloc(pStuArr, count + 100);      }     }     pStu = pStu->pNext;    }    if(hasFound)    {     setFontColor(LIGHTGREEN);     printf(LIST_TITLE_1);     setFontColor(WHITE);     for (i = 0; i < count; i++)     {      printf("%d %s  %s %.2f %.2f %.2f %.2f\n", pStuArr[i]->num, pStuArr[i]->name, pStuArr[i]->sex,         pStuArr[i]->score[0], pStuArr[i]->score[1], pStuArr[i]->score[2], pStuArr[i]->averge);     }    }    break;   }  case 3://根据语文成绩范围查询  case 4://根据数学成绩范围查询  case 5://根据英语成绩范围查询  case 6://根据平均分范围查询   {    char *subjectStrArr[4] = {"语文", "数学", "英语", "平均"};    printf("请输入要查询的%s成绩范围:", subjectStrArr[order - 3]);    scanf("%d %d", &min, &max);    while (pStu != NULL)    {     if(order < 6)// 3 ~ 5     {      score = pStu->score[order - 3];     }     else  //order = 6     {      score = pStu->averge;     }     if(score >= min && score <= max)     {      //找到符合条件的学生信息,则加入到指针数组中去      hasFound = true;      pStuArr[count++] = pStu;      if(count % 100 == 0)      {       pStuArr = (Student**)realloc(pStuArr, count + 100);      }     }     pStu = pStu->pNext;    }    if(hasFound)    {     setFontColor(LIGHTGREEN);     printf(LIST_TITLE_1);     setFontColor(WHITE);     //打印指针数组中的学生信息     for (i = 0; i < count; i++)     {      printf("%d %s  %s %.2f %.2f %.2f %.2f\n", pStuArr[i]->num, pStuArr[i]->name, pStuArr[i]->sex,        pStuArr[i]->score[0], pStuArr[i]->score[1], pStuArr[i]->score[2], pStuArr[i]->averge);     }         }    break;   }  case 7://列出所有学生信息   {    hasFound = true;    setFontColor(LIGHTGREEN);    printf(LIST_TITLE_1);    setFontColor(WHITE);    while(pStu != NULL)    {     printf("%d %s  %s %.2f %.2f %.2f %.2f\n", pStu->num, pStu->name, pStu->sex,        pStu->score[0], pStu->score[1], pStu->score[2], pStu->averge);     pStu = pStu->pNext;    }    break;   }  default:   {    goto lab_search;   }  }  if(! hasFound)  {   printf("未能找到相应的学生信息!\n");  }  system("pause"); }lab_search: free(pStuArr);}/************************************************************************//*删除学生信息 *//************************************************************************/bool deleteStudentInfo(){ char yesOrNo; int stuID; bool hasFound; Student* pStu, *pStu1; hasFound = false; pStu = G_pStuHead->pNext; pStu1 = G_pStuHead; printf("请输入欲删除的学生学号:"); scanf("%d", &stuID); while (pStu != NULL) {  if(pStu->num == stuID)  {   hasFound = true;   break;  }  pStu1 = pStu;  pStu = pStu->pNext; } if(hasFound) {  printf("找到此学生的信息如下:\n");  setFontColor(LIGHTGREEN);  printf(LIST_TITLE_1);  setFontColor(WHITE);  printf("%d %s  %s %.2f %.2f %.2f %.2f\n", pStu->num, pStu->name, pStu->sex,     pStu->score[0], pStu->score[1], pStu->score[2], pStu->averge);  printf("是否删除?Y/N");  getchar();//过滤掉输入时的换行符  scanf("%c", &yesOrNo);  if(yesOrNo == 'y' || yesOrNo == 'Y')  {   pStu1->pNext = pStu->pNext;   free(pStu);   printf("已删除\n");  }  else  {   hasFound = false;  } } else {  printf("未找到对应学生的信息\n"); } system("pause"); return hasFound;}/************************************************************************//*修改学生信息 *//************************************************************************/bool modifyStudentInfo(){ int order, count, i; int stuID; char name[20]; char yesOrNo; bool hasModify; Student* pStu; Student** pStuArr; hasModify = false; count = 0; pStu = G_pStuHead->pNext; pStuArr = (Student**)malloc(4 * 100);//用于存放查找到的学生信息指针,这里定义指针数组是防止查询姓名出现重名 printf("请输入以下序号,选择对应功能(1或2,否则返回上级菜单)\n"); printf("1、输入学号查找学生\n"); printf("2、输入姓名查找学生\n"); scanf("%d", &order); if(order == 1) {  printf("请输入要修改的学生学号:\n");  scanf("%d", &stuID);  while(pStu != NULL)  {   if(pStu->num == stuID)   {    pStuArr[count++] = pStu;    break;   }   pStu = pStu->pNext;  } } else if(order == 2) {  printf("请输入要修改的学生姓名:\n");  scanf("%s", name);  while(pStu != NULL)  {   if(strcmp(pStu->name, name) == 0)   {    pStuArr[count++] = pStu;    if(count % 100 == 0)//如果数组存放满了,则再次申请内存    {     pStuArr = (Student**)realloc(pStuArr, count + 100);    }   }   pStu = pStu->pNext;  } } else {  return false; } if(count == 0) {  printf("未能找到任何信息,是否继续修改?Y/N");  getchar();//过滤掉输入时的换行符  scanf("%c", &yesOrNo);  if(yesOrNo == 'y' || yesOrNo == 'Y')  {   system("CLS");   showSystemTitle();   return modifyStudentInfo();  } } else {  printf("为您查找到%d个学生信息:\n   ", count);  setFontColor(LIGHTGREEN);  printf(LIST_TITLE);  setFontColor(WHITE);  for (i = 0; i < count; i++)  {   printf("%d、%d %s  %s %.2f %.2f %.2f\n", i + 1, pStuArr[i]->num, pStuArr[i]->name, pStuArr[i]->sex,     pStuArr[i]->score[0], pStuArr[i]->score[1], pStuArr[i]->score[2]);  }  printf("请输入您要修改的信息序号(1~%d),其他数字返回主菜单\n", count);  scanf("%d", &order);  if(order >= 1 && order <= count)  {   printf("请依次输入\n");   setFontColor(LIGHTGREEN);   printf(LIST_TITLE);   setFontColor(WHITE);   pStu = pStuArr[order - 1];   scanf("%d %s %s %f %f %f", &pStu->num, pStu->name, pStu->sex, &pStu->score[0], &pStu->score[1], &pStu->score[2]);   pStu->averge = (pStu->score[0] + pStu->score[1] + pStu->score[2]) / 3;   hasModify = true;  } } free(pStuArr); return hasModify;}/************************************************************************//*检测学号是否存在*//************************************************************************/bool checkStuIDExist(int stuID){ Student* pStu; pStu = G_pStuHead->pNext; while(pStu != NULL) {  if(pStu->num == stuID)  {   return true;  }  pStu = pStu->pNext; } return false;}/************************************************************************//*添加学生信息 *//************************************************************************/bool addStudentInfo(){ printf("输入-1回车,返回上级菜单\n"); setFontColor(LIGHTGREEN); printf(LIST_TITLE); setFontColor(WHITE); char c; bool hasAdd = false; Student* pStu = G_pStuHead; Student* pStuNew; while (pStu->pNext != NULL) {  pStu = pStu->pNext; } while(1) {  pStuNew = (Student*)malloc(sizeof(Student));  scanf("%d", &pStuNew->num);  if(pStuNew->num == -1)//输入-1返回主菜单  {   while ((c = getchar()) != EOF && c != '\n');//不停地使用getchar()获取缓冲中字符,直到获取的c是"\n"或文件结尾符EOF为止   free(pStuNew);   return hasAdd;  }  else if(checkStuIDExist(pStuNew->num))  {   while ((c = getchar()) != EOF && c != '\n');//不停地使用getchar()获取缓冲中字符,直到获取的c是"\n"或文件结尾符EOF为止   printf("该学号已存在,请重新输入!\n");   free(pStuNew);   continue;  }  hasAdd = true;  scanf("%s %s %f %f %f", pStuNew->name, pStuNew->sex, &pStuNew->score[0],    &pStuNew->score[1], &pStuNew->score[2]);  pStuNew->averge = (pStuNew->score[0] + pStuNew->score[1] + pStuNew->score[2]) / 3;  pStuNew->pNext = NULL;  pStu->pNext = pStuNew;  pStu = pStuNew; } return hasAdd;}/************************************************************************//*根据指令序号执行对应功能  *//************************************************************************/bool orderToExecute(int order){ bool succ; succ = false; if(order != Func_Save && order != Func_AutoSave && order!= Func_Export) {  system("CLS");  showSystemTitle(); } switch (order) { case Func_Add://添加  {   succ = addStudentInfo();   break;  } case Func_Delete://删除  {   succ = deleteStudentInfo();   break;  } case Func_Modify://修改  {   succ = modifyStudentInfo();   break;  } case Func_Search://搜索  {   searchStudentInfo();   break;  } case Func_Sort://排序  {   succ = sortStudentInfo();   break;  } case Func_Save://保存  {   succ = saveStudentInfo();   if(succ)   {    gotoxy(42, Func_Save + 3);    setFontColor(LIGHTGREEN);    printf("保存成功!");    setFontColor(WHITE);    gotodelete(0, Func_ExitSystem + 4, 2);    gotoxy(0, Func_ExitSystem + 4);   }   return false;  } case Func_AutoSave://设置自动保存  {   G_autoStore = ! G_autoStore;   printAutoStoreInfo();   orderToExecute(Func_Save);//保存配置   break;  } case Func_Vote://投票系统  {   voteSystem();   break;  } case Func_Export://导出所有学生信息(明文)  {   succ = exportStudentInfo();   gotoxy(17, Func_Export + 3);   setFontColor(LIGHTGREEN);   if(succ)   {    printf("导出成功!");   }   else   {    printf("导出失败!");   }   setFontColor(WHITE);   gotodelete(0, Func_ExitSystem + 4, 2);   gotoxy(0, Func_ExitSystem + 4);   return false;  } default:  {      break;  } } return succ;}int main(int argc, char* argv[]){ int order; bool succ; system("title 学生管理系统 by 机智蛋"); order = 0; succ = false; G_pStuHead = (Student*)malloc(sizeof(Student)); G_pStuHead->pNext = NULL; loadStudentInfo(); while(1) {  if(order != Func_Save && order != Func_AutoSave && order != Func_Export)//当输入这几个指令时不需要初始化屏幕  {   initScreen();  }  if(succ && order != Func_Save && G_autoStore)//执行自动保存  {   orderToExecute(Func_Save);  }  succ = false;  do   {   scanf("%d", &order);   if(order >= Func_Add && order <= Func_ExitSystem)   {    break;   }   else   {    printf("指令错误,请重新输入\n");   }  } while (1);    if(order == Func_ExitSystem)//退出  {   printf("欢迎下次继续使用,拜拜~~\n");   return 0;  }  succ = orderToExecute(order);//执行功能   }  return 0;}

感谢你能够认真阅读完这篇文章,希望小编分享的"如何使用C语言实现学生成绩管理系统"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0