怎么用C语言编写实现学生管理系统

这篇文章主要介绍“怎么用C语言编写实现学生管理系统”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用C语言编写实现学生管理系统”文章能帮助大家解决问题。项目介绍学生信息管理系统

这篇文章主要介绍“怎么用C语言编写实现学生管理系统”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用C语言编写实现学生管理系统”文章能帮助大家解决问题。

项目介绍

学生信息管理系统是一个基于C语言开发的系统,其中有用到冒泡排序、指针、结构体、二位数组等知识。通过模块化的方法编写各个函数,其中在主界面函数调用各个模块的函数的实现以下具体功能:

1、学生信息的增删改查
2、学生成绩的排序
3、统计学生人数
4、显示所有学生的信息。
5、对学生信息存档

总体设计

本实验通过在main函数打开保存数据结果的文档和调用主界面函数;在主界面函数welcom()中实现边框的绘制,以及显示各个功能及各个功能对应的函数实现方法。

录入信息函数addInfo():此函数通过结构体student来保存录入的信息,其中为了确保数据的后续操作的准确性,通过学号的唯一性来标识每个学生的信息,通过编写及调用一个isIdSame()函数,该函数通过遍历所有学号确认学号来保障学号的唯一性,学号重复会提示用户需要重新输入函数。

查找学生信息函数:通过学号查找学生的信息,编写并调用一个findIndex()函数,该函数会遍历结构体的学号信息,查询到会返回该学号的坐标,没有找到该学号则返回-1;通过变量target来保存返回的结果。如果target不等于-1,则程序找到了该学号,通过编写并调用一个showInfo()函数来输出所有该学生的信息;否则输出查询此人,因为下标不可能为负数。

更新学生信息函数update():通过学号来找到该学生,调用findIndex()函数来确定该学生的位置,如果返回结果是小于0则函数结束,查无此人;若大于0则找到该学生,通过do…while函数switch选择语句的嵌套来进行用户需要求改某一项的内容。

删除函数del():查找学生的步骤跟更新学生信息函数的流程一样,如果findIndex()函数小于0则函数结束,否则通过一个for循环把结构体的数组从光标开始往前覆盖从而达到删除效果。

插入学生信息函数inserInfo():通过要求用户输入位置来定位插入到位置,输入用户输入的大于结构体数组的总数则插入到最后一个数组。否则通过一个for循环,把数组从最后开始往后移一位,把用户输入的位置的结果移到后一数组就编写并调用插入函数inserCurrentInfo()对当前位置数组进行覆盖插入。inserCurrentInfo()函数只负责对接收到的该位置的元素所有信息的写入。

排序函数sortTotal():创建一个临时变量提供元素与元素之间交换信息。通过双循环嵌套结构进行结构体的分数进行大小对比、交换位置来进行冒泡排序。最后排序完成之后输出分数由高到低排序的所有学生的信息。

显示学生信息函数showAllInfo():该函数通过全局变量count(该变量记录了所有添加、插入或删除过的学生信息,能准确记录学生的总人数)通过for循环去遍历student结构体,从而输出所有的所生信息。

学生数据存档函数writeData():该函数定义一个指针,以写入方式打开”stu.txt文本”,并把该文本的地址赋给指针fp。通过一个for循环遍历结构体里的元素,把结构体里的元素的属性输入到”stu.txt文本”。

详细代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. #include <windows.h>
  6. void addInfo();// 添加
  7. void welcom(); //主界面 
  8. void showAllInfo();//展示所有信息 
  9. void showInfo(struct Student student);//展示学生信息 
  10. int findIndex(struct Student student[],int id);// 根据学号 返回对应下标 
  11. void del(); //删除 
  12. void search();// 查找学生信息 
  13. void updata();//更新 
  14. void sortTotal();//按总分排序 
  15. void writeData();//数据写入文件中 
  16. void initData();//初始化数据 从文件中读取数据,初始化数组
  17. void showCount(); // 展示存储学生个数 
  18. void inserInfo();//插入学生信息 
  19. void inserCurrentInfo(int site); //当前位置插入 
  20. void con();//按任意键继续 
  21. int find1(struct Student student[],int id); //判断学号是否有重复 重复返回1 不重复返回0 
  22. void isIdSame(int x); //校验所输入学号是否重复 
  23. void gotoxy(int x,int y);//光标定位
  24. int color(int c); //设置颜色输出 
  25. struct Student{
  26.     int id;
  27.     char name[20];
  28.     int _math;
  29.     int _chinese;
  30.     int _english;
  31.     int total;// 总分 
  32. } student[500]; 
  33. int count=0;// 记录当前数组中存储学生个数 
  34. //主函数 
  35. int main(){
  36.     initData(); 
  37.     welcom(); 
  38.     return 0;
  39. }
  40. // 光标定位 
  41. void gotoxy(int x, int y)
  42. {
  43.     COORD pos;
  44.      pos.= x;      //横坐标
  45.      pos.= y;      //纵坐标
  46.      SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
  47. }
  48. //设置颜色输出 
  49. int color(int c)
  50. {
  51.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);        //更改文字颜色
  52.     return 0;
  53. }; 
  54. // 主界面 
  55. void welcom()
  56. {
  57.     while(1){
  58.         system("cls");
  59.             int n;
  60.             int i,= 1;
  61.             color(10);                                          //淡绿色边框
  62.             for (= 5; i <= 35; i++)                               //循环y轴坐标,打印输出上下边框===
  63.             {
  64.                 for (= 10; j <= 57; j++)                      //循环x轴坐标,打印输出左右边框||
  65.                 {
  66.                     gotoxy(j, i);
  67.                     if (== 5 || i == 35) printf("=");            //输出上下边框===
  68.                     else if (== 10 || j == 56) printf("||");    //输出左右边框||
  69.                 }
  70.             }
  71.              color(15);//白色 
  72.              gotoxy(25,8);
  73.              printf("学生信息管理系统");
  74.             color(14);                //设置字体颜色为黄色
  75.             gotoxy(15, 12);
  76.             printf("1:录入学生信息");
  77.             gotoxy(35, 12);
  78.             printf("2.查找学生信息");
  79.             gotoxy(15, 16);
  80.             printf("3.删除学生信息");
  81.             gotoxy(35,16);
  82.             printf("4.修改学生信息");
  83.             gotoxy(15, 20);
  84.             printf("5.插入学生信息");
  85.             gotoxy(35,20);
  86.             printf("6.按照学生成绩排序");     
  87.             gotoxy(15, 24);
  88.             printf("7.统计学生总数");
  89.             gotoxy(35,24);
  90.             printf("8.显示所有学生信息");
  91.             gotoxy(15, 28);
  92.             printf("9.学生数据存档并退出");
  93.             gotoxy(25,32); 
  94.             int choose;
  95.             printf("请选择:[ ]\\b\\b"); //\\b 光标回退一格  
  96.             color(15); //  颜色变回白色 
  97.              scanf("%d", &choose);
  98.                  switch (choose){
  99.                       case 1:addInfo(); break;
  100.                       case 2:search(); break;
  101.                       case 3:del(); break;
  102.                       case 4:updata(); break;
  103.                       case 5:inserInfo();break; 
  104.                       case 6:sortTotal(); break;
  105.                       case 7:showCount(); break;
  106.                       case 8:showAllInfo(); break;
  107.                       case 9:writeData();exit(0);
  108.                       } 
  109.     }                
  110. }
  111. // 添加 
  112. void addInfo(){
  113.     system("cls");
  114.     printf("\\t添加学生信息\\n");
  115.     printf("请输入学号\\n");
  116.     isIdSame(count);
  117.     printf("请输入姓名\\n");
  118.     scanf("%s",&student[count].name);
  119.     printf("请输入语文成绩\\n");
  120.     scanf("%d",&student[count]._chinese);
  121.     printf("请输入数学成绩\\n");
  122.     scanf("%d",&student[count]._math);
  123.     printf("请输入英语成绩\\n");
  124.     scanf("%d",&student[count]._english);
  125.     student[count].total=student[count]._chinese+student[count]._english+student[count]._math;
  126.     printf("%s的信息录入成功\\n\\n",student[count].name);
  127.     int choose;
  128.     printf("1继续 2返回主界面\\n"); 
  129.     count++;  
  130.     scanf("%d",&choose);
  131.     if(choose==1){
  132.         addInfo();
  133.     } 
  134.     system("cls"); 
  135.  
  136. } 
  137.  
  138. // 查找 展示结果 
  139. void search(){
  140.     system("cls");
  141.     int id;
  142.     printf("请输入你想查找学生的学号\\n");
  143.     scanf("%d",&id);
  144.     int target = findIndex(student,id);  //目标下表
  145.     int flag=1;//是否存在要查询的学号 
  146.     
  147.     //for循环对比 
  148.     if(target != -1) 
  149.     {
  150.         printf("\\n\\t查询结果\\n\\n");
  151.         showInfo(student[target]);
  152.         con();  
  153.         
  154.     }
  155.  
  156.     else{ // 输出查询结果 
  157.             printf("\\n查无此人\\n"); 
  158.                 con();
  159.     } 
  160. }
  161.  
  162.  
  163. // 更新 
  164. void updata(){
  165.     system("cls");
  166.     int id;
  167.     printf("请输入你要修改学生的学号\\n");
  168.     scanf("%d",&id);
  169.     int    target = findIndex(student,id);
  170.  
  171.     if(target<0){
  172.         printf("查无此人");
  173.         con(); 
  174.     }else{
  175.         int flag=1;    
  176.     do{
  177.         int choose=0;
  178.         printf("请输入需要修改的选项\\t(1.学号\\t2.姓名\\t3.语文\\t4.数学\\t5.英语):\\n");
  179.         scanf("%d",&choose); 
  180.             switch (choose) {
  181.                 case 1:
  182.                     printf("请输入学号\\n");
  183. //                    scanf("%d",&student[target].id);
  184.                     isIdSame(target);            
  185.                     break;
  186.                 case 2:
  187.                     printf("请输入姓名\\n");
  188.                     scanf("%s",&student[target].name);
  189.                     break;
  190.                 case 3:
  191.                     printf("请输入语文成绩\\n");
  192.                     scanf("%d",&student[target]._chinese);
  193.                     break; 
  194.                 case 4:
  195.                     printf("请输入数学成绩\\n");
  196.                     scanf("%d",&student[target]._math);
  197.                     break;    
  198.                 case 5:
  199.                     printf("请输入英语成绩\\n");
  200.                     scanf("%d",&student[target]._english);
  201.                     break;        
  202.  
  203.             } 
  204.             student[target].total=student[target]._chinese+student[target]._english+student[target]._math;
  205.             printf("%s的信息修改成功\\n",student[target].name);
  206.             printf("\\n按1继续 按2退出修改\\n");
  207.             int choose2; 
  208.             scanf("%d",&choose2);
  209.             if(choose2==1){
  210.                 flag=1;
  211.             }else{
  212.                 flag=0;
  213.             } 
  214.             
  215.     }while(flag);
  216.  
  217.     }    
  218. } 
  219. //删除
  220. void del(){
  221.     system("cls");    
  222.     int id;
  223.     int target;//目标元素的下标 
  224.     printf("\\n请输入你想删除学生的学号\\n");
  225.     scanf("%d",&id);
  226.     target=findIndex(student, id);
  227.     if(target<0){
  228.         printf("\\n查无此人\\n");
  229.         con();
  230.         
  231.     } else{
  232.          for(int i=target;i<count;i++){
  233.              student[i]=student[i+1]; //删除操作 后一位元素覆盖前一位元素 
  234.          }
  235.         printf("删除成功\\n");
  236.         con();
  237.     count--; 
  238.     } 
  239. }
  240.  
  241. //插入学生信息
  242. void inserInfo(){
  243.     system("cls");
  244.     int site; //位置 
  245.     printf("请输入你要插入学生信息的位置(从0开始):\\n");
  246.     scanf("%d",&site);
  247.     //插入位置大于总数,则插入在数组最后一位
  248.     if ( site > count){
  249.         inserCurrentInfo(count); 
  250.         printf("%s的信息插入成功\\n", student[count].name);
  251.         
  252.     }else{
  253.         //不是最后一位 从当前位置 数组全部后移一位 
  254.         for (int i = count; i >= site; i--){
  255.                 student[+ 1] = student[i];
  256.             }
  257.         //在当前位置添加学员
  258.         inserCurrentInfo(site);
  259.         printf("%s同学的信息插入成功\\n", student[site].name);
  260.         con(); 
  261.         }
  262.  
  263. } 
  264. //当前位置插入
  265. void inserCurrentInfo(int site){
  266.      printf("请输入学号\\n");
  267.      isIdSame(site);
  268.      printf("请输入姓名\\n");
  269.      scanf("%s", student[site].name);
  270.      printf("请输入语文成绩\\n");
  271.      scanf("%d", &student[site]._chinese);
  272.      printf("请输入数学成绩\\n");
  273.      scanf("%d", &student[site]._math);
  274.      printf("请输入英语成绩\\n");
  275.      scanf("%d", &student[site]._english);
  276.     student[site].total= student[site]._chinese+student[site]._english+student[site]._math;
  277.      count++;
  278.      con();
  279.  }
  280. // 判断学号是否重复 重复返回1 否则返回0 
  281. int find1(struct Student student[],int id)
  282. {
  283.  int temp = 0;
  284.  for(int i=0;i<count;i++)
  285.   {
  286.    if(student[i].id==id)
  287.     {
  288.      temp=1;
  289.      break;
  290.     }
  291.   } 
  292.  return temp;
  293. } 
  294. //校验所添加学号是否重复
  295. void isIdSame(int x){
  296.  
  297.     int inputId;    
  298.     scanf("%d",&inputId);
  299.      do{
  300.        if(find1(student,inputId)){
  301.          printf("学号有重复,请重新输入\\n");
  302.          scanf("%d",&inputId);
  303.         }
  304.        else
  305.         {
  306.          student[x].id=inputId;
  307.          break;
  308.         }
  309.       }while(1);
  310. }
  311.  
  312. // 根据学号 返回下标 
  313. int findIndex (struct Student student[],int id){
  314.     int temp;
  315.     for(int i=0;i<count;i++){
  316.         if(student[i].id==id){
  317.             temp=i;
  318.             break; 
  319.         } else {
  320.             temp = -1; 
  321.         } 
  322.     }
  323.     
  324.     return temp;
  325. }
  326. //按总分排序
  327.  void sortTotal(){
  328.      //冒泡排序 
  329.     struct Student temp;// 元素与元素交换的临时容器 
  330.     for (int i = 0; i < count - 1; i++){
  331.         for (int j = 0; j < count - 1 - i; j++){
  332.             if (student[j].total<student[j+1].total){
  333.                 temp = student[+ 1];
  334.                 student[+ 1] = student[j];
  335.                 student[j]= temp;
  336.             }
  337.         }
  338.     }
  339.     printf("排序完成");
  340.     showAllInfo();     
  341.  }
  342.  //按任意键继续 
  343.  void con(){
  344.      printf("\\n按任意键继续\\n"); 
  345.      getch();
  346.  }; 
  347.  //展示学生总个数 
  348.  void showCount(){
  349.      system("cls"); 
  350.      printf("\\n\\t学生总个数为:%d个\\n",count); 
  351.     con(); 
  352.  } 
  353.  //初始化数据 
  354.  void initData(){
  355.      FILE * fp = NULL;
  356.      fp = fopen("stu.txt", "r");
  357.      if (!fp){
  358.          printf("文件打开失败\\n");
  359.          exit(0);// 退出程序 
  360.      }
  361.      while (1){    //读取数据 赋值给数组 
  362.          fscanf(fp, "%d%s%d%d%d%d", &student[count].id, student[count].name, &student[count]._chinese, &student[count]._math, &student[count]._english, &student[count].total);
  363.          if (feof(fp)){ //文件末尾 跳出循环 
  364.              break;
  365.          }
  366.          count++;
  367.      }
  368.  }
  369.  //数据写入文件中 
  370.  void writeData(){
  371.     FILE * fp = NULL;
  372.     fp = fopen("stu.txt", "w");
  373.     for (int i = 0; i < count; i++){
  374.         fprintf(fp, "%d\\t%s\\t%d\\t%d\\t%d\\t%d\\n", student[i].id, student[i].name, student[i]._chinese, student[i]._math, student[i]._english,student[i].total);
  375.     }
  376.     printf("数据保存成功\\n");     
  377.  }
  378.  
  379.  
  380. // 展示所有信息
  381. void showAllInfo(){
  382.     system("cls");//清屏 
  383.     for(int i=0;i<count;i++){
  384.         showInfo(student[i]);     
  385.     } 
  386.     con(); 
  387. } 
  388. // 展示学生信息
  389. void showInfo(struct Student stu){//传入数组里的元素 
  390.     printf("学号:%d\\t姓名:%s\\t语文:%d\\t数学:%d\\t英语:%d\\t总分:%d",stu.id,stu.name,stu._chinese,stu._math,stu._english,stu.total);
  391.     printf("\\n-----------------分割线-----------------------\\n"); 
  392. }

主界面

怎么用C语言编写实现学生管理系统

关于“怎么用C语言编写实现学生管理系统”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注恰卡网行业资讯频道,小编每天都会为大家更新不同的知识点。

本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
开发者

怎么用React手写一个手风琴组件

2022-7-23 1:15:16

开发者

java线程池的创建方式有哪些

2022-7-23 1:15:20

搜索