[C.C++] 学生信息管理系统——C语言版

432 0
Honkers 2025-4-2 11:18:15 来自手机 | 显示全部楼层 |阅读模式

一.开发环境需求 

操作系统:Windows 7,Windows 10,Windows 11。

开发环境工具:Cfree,Dev C++,VC6++。

开发语言:C语言。

二. 功能需求 

  1. 制作一个学生信息管理系统。
  2. 在制作的系统中,能录入学生信息、删除学生信息、修改学生信息,查询学生信息、排序学生信息。
  3. 系统使用方法便捷,简单,功能容易实现。
  4. 学生的信息包括:学号、姓名、班级、性别、英语成绩,C语言成绩,平均成绩,总成绩
  5. 避免系统bug的出现,优化系统。

三.功能说明 

录入学生信息:将学生的信息输入到学生信息管理系统中。

删除学生信息:将学生信息管理系统中不需要的学生信息删除。

修改学生信息:在学生信息管理系统中修改学生的部分信息。

查询学生信息:在学生信息管理系统中输入需求显示查询结果。

显示学生信息:在学生信息管理系统中按需求显示所有学生信息。

排序学生信息:按一定规律对学生信息进行排序。

显示最好成绩:显示所有学生中总成绩最高的同学。

分组统计成绩:按照总成绩进行分组统计。

清屏:清除以上操作结果。

四.构造算法框架

  1.构造功能框架

此步是将系统主要功能的算法框架建立出来(只是框架,不需要实现功能)

  1. //学生信息结构体
  2. struct student
  3. {int num;
  4. char name[20];
  5. char clas[20];
  6. char sex[5];
  7. float Eng_score;
  8. float C_score;
  9. float total;
  10. float aver;
  11. };
  12. struct student stu[50];
  13. //主函数
  14. int main()
  15. {
  16. void menu(); //功能函数的调用声明
  17. void in();
  18. void delet();
  19. void updet();
  20. void select();
  21. void print();
  22. void sort();
  23. void max();
  24. void cut();
  25. void clea();
  26. menu();
  27. int n;
  28. printf("请选择功能(1-9):\n");
  29. scanf("%d",&n);
  30. while(n)
  31. {
  32. if(n>=1&&n<=9)
  33. {
  34. switch(n)
  35. {
  36. case 1:in();break;
  37. case 2:delet();break;
  38. case 3:updet();break;
  39. case 4:select();break;
  40. case 5:print();break;
  41. case 6:sort();break;
  42. case 7:max();break;
  43. case 8:cut();break;
  44. case 9:clea();break;
  45. }
  46. if(n==9)
  47. {
  48. menu();
  49. }
  50. printf("\n");
  51. printf("请选择功能(1-9):");
  52. scanf("%d",&n);
  53. }
  54. else
  55. {
  56. printf("\n");
  57. printf("请重新输入:");
  58. scanf("%d",&n);
  59. }
  60. }
  61. return 0;
  62. }
  63. //菜单界面
  64. void menu()
  65. {
  66. }
  67. //录入学生信息
  68. void in()
  69. {
  70. }
  71. //删除学生信息
  72. void delet()
  73. {
  74. }
  75. //查找学生信息
  76. void updet()
  77. {
  78. }
  79. //修改学生信息
  80. void select()
  81. {
  82. }
  83. //显示所有学生信息
  84. void print()
  85. {
  86. }
  87. //排序
  88. void sort()
  89. {
  90. }
  91. //显示最大值
  92. void max()
  93. {
  94. }
  95. //分组统计
  96. void cut()
  97. {
  98. }
  99. //清屏
  100. void clea()
  101. {
  102. }
复制代码

 2.设计系统目录

按照学生信息管理系统的功能进行设计,将学生信息管理系统的功能呈现出来,供用户选择。

  1. void menu()
  2. {
  3. printf("\n\n\n");
  4. printf("\t\t-------------------------------------------------\n");
  5. printf("\t\t|| ---------------- ||\n");
  6. printf("\t\t||**************学生信息管理系统***************||\n");
  7. printf("\t\t|| ---------------- ||\n");
  8. printf("\t\t|| ||\n");
  9. printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n");
  10. printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n");
  11. printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n");
  12. printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n");
  13. printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n");
  14. printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n");
  15. printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n");
  16. printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n");
  17. printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
  18. printf("\t\t|| ||\n");
  19. printf("\t\t||*********************************************||\n");
  20. }
复制代码

运行结果 

五.在框架的基础上一一实现各项功能  

1. 录入学生信息:将学生的信息输入到学生信息管理系统中,并保存到文件中。

  1. //录入学生信息
  2. void in()
  3. {
  4. void print();
  5. FILE *fp;
  6. int i, m=0;
  7. char ch[2];
  8. if((fp=fopen("stu.txt","rb"))==NULL)//文件不存在先使用wb创建文件,再将其改为rb;反之使用直接使用rb。
  9. {
  10. printf("文件打开失败\n");
  11. return;
  12. }
  13. while(!feof(fp))
  14. {
  15. if(fread(&stu[m],LEN,1,fp)==1)
  16. {
  17. m++;
  18. }
  19. }//m指代文件中学生的数量。
  20. fclose(fp);
  21. if(m==0)
  22. {
  23. printf("文件没有内容\n");
  24. }
  25. else
  26. {
  27. print();
  28. }
  29. if((fp=fopen("stu.txt","ab+"))==NULL)
  30. {
  31. printf("文件打开失败\n");
  32. return;
  33. }
  34. printf("输入学生信息(y/n);\n");
  35. scanf("%s",ch);
  36. while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
  37. {
  38. printf("number:\n");
  39. scanf("%3d",&stu[m].num);
  40. for(i=0;i<m;i++)
  41. {
  42. if(stu[i].num==stu[m].num)
  43. {
  44. printf("您的信息已存在\n");
  45. fclose(fp);
  46. getchar();
  47. return;
  48. }
  49. }
  50. printf("name:\n");
  51. scanf("%s",stu[m].name);
  52. printf("class:\n");
  53. scanf("%s",stu[m].clas);
  54. printf("sex:\n");
  55. scanf("%s",stu[i].sex);
  56. printf("Eng_score:\n");
  57. scanf("%f",&stu[m].Eng_score);
  58. printf("C_score:\n");
  59. scanf("%f",&stu[m].C_score);
  60. stu[i].total=stu[i].C_score+stu[i].Eng_score;
  61. stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
  62. if(fwrite(&stu[m],LEN,1,fp)!=1)//录入数据,并保存到文件中。
  63. {
  64. printf("不能保存\n");
  65. getchar();
  66. }
  67. else
  68. {
  69. printf("信息保存成功\n");
  70. m++;
  71. }
  72. printf("是否继续录入学生信息(y/n):");
  73. scanf("%s",ch);
  74. }
  75. fclose(fp);//注意,打开文件后,操作完成后,必须关闭文件
  76. }
复制代码

运行结果

2.删除学生信息:将学生信息管理系统中不需要的学生信息删除,在删除完成后需将学生人数进行减一。

  1. //删除学生信息
  2. void delet()
  3. {
  4. void print();
  5. FILE *fp;
  6. int num,m=0;
  7. int i,j;
  8. int flag=0;
  9. char ch[2];
  10. if((fp=fopen("stu.txt","rb"))==NULL)
  11. {
  12. printf("文件打开失败\n");
  13. return;
  14. }
  15. while(!feof(fp))
  16. {
  17. if(fread(&stu[m],LEN,1,fp)==1)
  18. {
  19. m++;
  20. }
  21. }
  22. fclose(fp);
  23. if(m==0)
  24. {
  25. printf("文件中没有学生信息\n");
  26. }
  27. else
  28. {
  29. print();
  30. printf("请输入需要删除学生信息的学号:");
  31. scanf("%d",&num);
  32. }
  33. for(i=0;i<m;i++)
  34. {
  35. if(stu[i].num==num)
  36. {
  37. printf("该学生已找到,是否删除(y/n):");
  38. scanf("%s",ch);
  39. if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
  40. {
  41. for(j=i;j<m;j++)
  42. {
  43. stu[j]=stu[j+1];
  44. }
  45. m--;//删除该学生后,需要对学生人数减一
  46. flag=1;//标记已经进行了删除操作
  47. if((fp=fopen("stu.txt","wb"))==NULL)
  48. {
  49. printf("文件打开失败\n");
  50. return;
  51. }
  52. for(j=0;j<m;j++)
  53. {
  54. if(fwrite(&stu[j],LEN,1,fp)!=1)
  55. {
  56. printf("不能保存\n");
  57. getchar();
  58. }
  59. }
  60. fclose(fp);
  61. printf("删除成功!\n");break;
  62. }
  63. else
  64. {
  65. printf("学生信息存在,不需要删除。");
  66. break;
  67. }
  68. }
  69. }
  70. if(m==i&&flag==0)
  71. {
  72. printf("未找到该学生");
  73. }
  74. }
复制代码

运行结果 

3.修改学生信息:在学生信息管理系统中修改学生的部分信息。

  1. //修改学生信息
  2. void updet()
  3. {
  4. void print();
  5. int num;
  6. char name[10];
  7. char clas[20];
  8. char sex[5];
  9. float Eng_score;
  10. float C_score;
  11. FILE *fp;
  12. int m=0,a;
  13. int i,j;
  14. if((fp=fopen("stu.txt","rb"))==NULL)
  15. {
  16. printf("文件打开失败\n");
  17. return;
  18. }
  19. while(!feof(fp))
  20. {
  21. if(fread(&stu[m],LEN,1,fp)==1)
  22. {
  23. m++;
  24. }
  25. }
  26. fclose(fp);
  27. if(m==0)
  28. {
  29. printf("文件中没有学生信息\n");
  30. }
  31. else
  32. {
  33. print();
  34. printf("请输入需要修改学生信息的学号:");
  35. scanf("%d",&num);
  36. }//通过学号找到需要修改信息的学生。
  37. for(i=0;i<m;i++)
  38. {
  39. if(num==stu[i].num)
  40. {
  41. printf("1:学号,2:姓名,3:班级,4:性别,5:英语成绩,6:C语言成绩\n");
  42. printf("该学生已被找到,请选择需要修改的内容(1-5):");
  43. scanf("%d",&a);
  44. while(a)
  45. {
  46. switch (a)
  47. {
  48. case 1:
  49. printf("将%d学生的学号修改为:",num);
  50. scanf("%d",&num);
  51. stu[i].num=num;
  52. for(j=i+1;j<m;j++)
  53. {
  54. if(stu[j].num==num)
  55. {
  56. printf("您修改的学号已存在\n");
  57. getchar();
  58. return;
  59. }
  60. }
  61. break;
  62. case 2:
  63. printf("将%d学生的姓名修改为:",num);
  64. scanf("%s",name);
  65. strcpy(stu[i].name,name);
  66. break;
  67. case 3:
  68. printf("将%d学生的班级修改为:",num);
  69. scanf("%s",clas);
  70. strcpy(stu[i].clas,clas);
  71. break;
  72. case 4:
  73. printf("将%d学生的性别修改为:",num);
  74. scanf("%s",sex);
  75. strcpy(stu[i].sex,sex);
  76. break;
  77. case 5:
  78. printf("将%d学生的英语成绩修改为:",num);
  79. scanf("%f",&Eng_score);
  80. stu[i].Eng_score=Eng_score;
  81. stu[i].total=stu[i].C_score+stu[i].Eng_score;
  82. stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
  83. break;
  84. case 6:
  85. printf("将%d学生的C语言成绩修改为:",num);
  86. scanf("%f",&C_score);
  87. stu[i].C_score=C_score;
  88. stu[i].total=stu[i].C_score+stu[i].Eng_score;
  89. stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
  90. break;
  91. default:
  92. printf("选择错误,请重新选择需要修改的内容:");
  93. scanf("%d",&a);
  94. break;
  95. }
  96. printf("请选择需要修改的内容(如果已修改完成请按0):");
  97. scanf("%d",&a);
  98. }
  99. if((fp=fopen("stu.txt","wb"))==NULL)
  100. {
  101. printf("文件打开失败\n");
  102. return;
  103. }
  104. for(j=0;j<m;j++)
  105. {
  106. if(fwrite(&stu[j],LEN,1,fp)!=1)
  107. {
  108. printf("不能保存\n");
  109. getchar();
  110. }
  111. }
  112. fclose(fp);
  113. printf("修改成功!\n");
  114. break;
  115. }
  116. }
  117. if(m==i)
  118. {
  119. printf("未找到该学生\n");
  120. }
  121. }
复制代码

运行结果 

4.查询学生信息:在学生信息管理系统中输入需求显示查询结果。

  1. //查询学生信息
  2. void select()
  3. {
  4. int num,m=0;
  5. int i;
  6. FILE *fp;
  7. if((fp=fopen("stu.txt","rb"))==NULL)
  8. {
  9. printf("文件打开失败\n");
  10. return;
  11. }
  12. while(!feof(fp))
  13. {
  14. if(fread(&stu[m],LEN,1,fp)==1)
  15. {
  16. m++;
  17. }
  18. }
  19. fclose(fp);
  20. if(m==0)
  21. {
  22. printf("文件没有内容\n");
  23. return;
  24. }
  25. printf("请输入学生学号进行查询:");
  26. scanf("%d",&num);//通过输入学号进行查找。
  27. for(i=0;i<m;i++)
  28. {
  29. if(num==stu[i].num)
  30. {
  31. printf("\n");
  32. printf("该学生信息已被查到;\n");
  33. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  34. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
  35. break;
  36. }
  37. }
  38. if(m==i)
  39. {
  40. printf("该学生信息不存在\n");
  41. return;
  42. }
  43. }
复制代码

运行结果 

5.显示学生信息:在学生信息管理系统中按需求显示所有学生信息。

  1. //显示学生信息
  2. void print()
  3. {
  4. int i,m=0;
  5. FILE *fp;
  6. if((fp=fopen("stu.txt","rb"))==NULL)
  7. {
  8. printf("文件打开失败\n");
  9. return;
  10. }
  11. while(!feof(fp))
  12. {
  13. if(fread(&stu[m],LEN,1,fp)==1)//将文件中的学生信息读取出来,并按照定义的结构体数组呈现。
  14. {
  15. m++;
  16. }
  17. }
  18. fclose(fp);
  19. if(m==0)
  20. {
  21. printf("文件中没有内容\n");
  22. }
  23. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  24. for(i=0;i<m;i++)
  25. {
  26. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
  27. }
  28. }
复制代码

运行结果 

  

6.排序学生信息:按一定规律对学生信息进行排序。

  1. //排序
  2. void sort()
  3. {
  4. int i,j,m=0;
  5. int ch;
  6. FILE *fp;
  7. struct student temp;
  8. if((fp=fopen("stu.txt","rb"))==NULL)
  9. {
  10. printf("文件打开失败\n");
  11. return;
  12. }
  13. while(!feof(fp))
  14. {
  15. if(fread(&stu[m],LEN,1,fp)==1)
  16. {
  17. m++;
  18. }
  19. }
  20. fclose(fp);
  21. if(m==0)
  22. {
  23. printf("文件中没有内容\n");
  24. }
  25. printf("1:学号升序,2:英语成绩升序,3:C语言升序,4:总成绩升序,5:平均成绩升序\n");
  26. printf("请选择显示形式:");
  27. scanf("%d",&ch);
  28. switch (ch)
  29. {
  30. case 1:
  31. for(i=0;i<m;i++)
  32. {
  33. for(j=i+1;j<m;j++)
  34. {
  35. if(stu[i].num>stu[j].num)
  36. {
  37. temp=stu[i];
  38. stu[i]=stu[j];
  39. stu[j]=temp;
  40. }
  41. }
  42. }
  43. break;
  44. case 2:
  45. for(i=0;i<m;i++)
  46. {
  47. for(j=i+1;j<m;j++)
  48. {
  49. if(stu[i].Eng_score>stu[j].Eng_score)
  50. {
  51. temp=stu[i];
  52. stu[i]=stu[j];
  53. stu[j]=temp;
  54. }
  55. }
  56. }
  57. break;
  58. case 3:
  59. for(i=0;i<m;i++)
  60. {
  61. for(j=i+1;j<m;j++)
  62. {
  63. if(stu[i].C_score>stu[j].C_score)
  64. {
  65. temp=stu[i];
  66. stu[i]=stu[j];
  67. stu[j]=temp;
  68. }
  69. }
  70. }
  71. break;
  72. case 4:
  73. for(i=0;i<m;i++)
  74. {
  75. for(j=i+1;j<m;j++)
  76. {
  77. if(stu[i].total>stu[j].total)
  78. {
  79. temp=stu[i];
  80. stu[i]=stu[j];
  81. stu[j]=temp;
  82. }
  83. }
  84. }
  85. break;
  86. case 5:
  87. for(i=0;i<m;i++)
  88. {
  89. for(j=i+1;j<m;j++)
  90. {
  91. if(stu[i].aver>stu[j].aver)
  92. {
  93. temp=stu[i];
  94. stu[i]=stu[j];
  95. stu[j]=temp;
  96. }
  97. }
  98. }
  99. break;
  100. }
  101. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  102. for(i=0;i<m;i++)
  103. {
  104. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
  105. }
  106. }
复制代码

运行结果 

  

7.显示最好成绩:显示所有学生中总成绩最高的同学。

  1. //最大值
  2. void max()
  3. {
  4. int i,j=0;
  5. FILE *fp;
  6. int m=0;
  7. if((fp=fopen("stu.txt","rb"))==NULL)
  8. {
  9. printf("文件打开失败\n");
  10. return;
  11. }
  12. while(!feof(fp))
  13. {
  14. if(fread(&stu[m],LEN,1,fp)==1)
  15. {
  16. m++;
  17. }
  18. }
  19. fclose(fp);
  20. if(m==0)
  21. {
  22. printf("文件中没有内容\n");
  23. }
  24. for(i=0;i<m;i++)
  25. {
  26. if(stu[i].total>stu[j].total)
  27. j=i;
  28. }
  29. printf("总成绩成绩最高的同学是:\n");
  30. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  31. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
  32. }
复制代码

运行结果 

  

8.分组统计成绩:按照总成绩进行分组统计。 

  1. //分组统计
  2. void cut()
  3. {
  4. int i,j;
  5. float n;
  6. FILE *fp;
  7. int m=0;
  8. if((fp=fopen("stu.txt","rb"))==NULL)
  9. {
  10. printf("文件打开失败\n");
  11. return;
  12. }
  13. while(!feof(fp))
  14. {
  15. if(fread(&stu[m],LEN,1,fp)==1)
  16. {
  17. m++;
  18. }
  19. }
  20. fclose(fp);
  21. if(m==0)
  22. {
  23. printf("文件中没有内容\n");
  24. }
  25. printf("请输入按总成绩分组的值:");
  26. scanf("%f",&n);
  27. printf("总成绩大于%.2f的同学有:\n",n);
  28. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  29. for(i=0;i<m;i++)
  30. {
  31. if(stu[i].total>=n)
  32. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
  33. }
  34. printf("总成绩小于%.2f的同学有:\n",n);
  35. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  36. for(j=0;j<m;j++)
  37. {
  38. if(stu[j].total<n)
  39. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
  40. }
  41. }
复制代码

运行结果 

  

9.清屏:清除以上操作结果。

  1. //清屏
  2. void clea()
  3. {
  4. system("cls");
  5. }
复制代码

六.源代码

  1. #include <stdio.h>
  2. #include<string.h>
  3. #include <stdlib.h>
  4. #define LEN sizeof(struct student)
  5. //学生信息结构体
  6. struct student
  7. {int num;
  8. char name[20];
  9. char clas[20];
  10. char sex[5];
  11. float Eng_score;
  12. float C_score;
  13. float total;
  14. float aver;
  15. };
  16. struct student stu[50];
  17. //系统操作
  18. int main()
  19. {
  20. void menu();
  21. void in();
  22. void delet();
  23. void updet();
  24. void select();
  25. void print();
  26. void sort();
  27. void max();
  28. void cut();
  29. void clea();
  30. menu();
  31. int n;
  32. printf("请选择功能(1-9):\n");
  33. scanf("%d",&n);
  34. while(n)
  35. {
  36. if(n>=1&&n<=9)
  37. {
  38. switch(n)
  39. {
  40. case 1:in();break;
  41. case 2:delet();break;
  42. case 3:updet();break;
  43. case 4:select();break;
  44. case 5:print();break;
  45. case 6:sort();break;
  46. case 7:max();break;
  47. case 8:cut();break;
  48. case 9:clea();break;
  49. }
  50. if(n==9)
  51. {
  52. menu();
  53. }
  54. printf("\n");
  55. printf("请选择功能(1-9):");
  56. scanf("%d",&n);
  57. }
  58. else
  59. {
  60. printf("\n");
  61. printf("请重新输入:");
  62. scanf("%d",&n);
  63. }
  64. }
  65. return 0;
  66. }
  67. //目录
  68. void menu()
  69. {
  70. printf("\n\n\n");
  71. printf("\t\t-------------------------------------------------\n");
  72. printf("\t\t|| ---------------- ||\n");
  73. printf("\t\t||**************学生信息管理系统***************||\n");
  74. printf("\t\t|| ---------------- ||\n");
  75. printf("\t\t|| ||\n");
  76. printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n");
  77. printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n");
  78. printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n");
  79. printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n");
  80. printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n");
  81. printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n");
  82. printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n");
  83. printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n");
  84. printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n");
  85. printf("\t\t|| ||\n");
  86. printf("\t\t||*********************************************||\n");
  87. }
  88. //录入学生信息
  89. void in()
  90. {
  91. void print();
  92. FILE *fp;
  93. int i, m=0;
  94. char ch[2];
  95. if((fp=fopen("stu.txt","rb"))==NULL)
  96. {
  97. printf("文件打开失败\n");
  98. return;
  99. }
  100. while(!feof(fp))
  101. {
  102. if(fread(&stu[m],LEN,1,fp)==1)
  103. {
  104. m++;
  105. }
  106. }
  107. fclose(fp);
  108. if(m==0)
  109. {
  110. printf("文件没有内容\n");
  111. }
  112. else
  113. {
  114. print();
  115. }
  116. if((fp=fopen("stu.txt","ab+"))==NULL)
  117. {
  118. printf("文件打开失败\n");
  119. return;
  120. }
  121. printf("输入学生信息(y/n);\n");
  122. scanf("%s",ch);
  123. while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
  124. {
  125. printf("number:\n");
  126. scanf("%3d",&stu[m].num);
  127. for(i=0;i<m;i++)
  128. {
  129. if(stu[i].num==stu[m].num)
  130. {
  131. printf("您的信息已存在\n");
  132. fclose(fp);
  133. getchar();
  134. return;
  135. }
  136. }
  137. printf("name:\n");
  138. scanf("%s",stu[m].name);
  139. printf("class:\n");
  140. scanf("%s",stu[m].clas);
  141. printf("sex:\n");
  142. scanf("%s",stu[i].sex);
  143. printf("Eng_score:\n");
  144. scanf("%f",&stu[m].Eng_score);
  145. printf("C_score:\n");
  146. scanf("%f",&stu[m].C_score);
  147. stu[i].total=stu[i].C_score+stu[i].Eng_score;
  148. stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
  149. if(fwrite(&stu[m],LEN,1,fp)!=1)
  150. {
  151. printf("不能保存\n");
  152. getchar();
  153. }
  154. else
  155. {
  156. printf("信息保存成功\n");
  157. m++;
  158. }
  159. printf("是否继续录入学生信息(y/n):");
  160. scanf("%s",ch);
  161. }
  162. fclose(fp);
  163. }
  164. //删除学生信息
  165. void delet()
  166. {
  167. void print();
  168. FILE *fp;
  169. int num,m=0;
  170. int i,j;
  171. int flag=0;
  172. char ch[2];
  173. if((fp=fopen("stu.txt","rb"))==NULL)
  174. {
  175. printf("文件打开失败\n");
  176. return;
  177. }
  178. while(!feof(fp))
  179. {
  180. if(fread(&stu[m],LEN,1,fp)==1)
  181. {
  182. m++;
  183. }
  184. }
  185. fclose(fp);
  186. if(m==0)
  187. {
  188. printf("文件中没有学生信息\n");
  189. }
  190. else
  191. {
  192. print();
  193. printf("请输入需要删除学生信息的学号:");
  194. scanf("%d",&num);
  195. }
  196. for(i=0;i<m;i++)
  197. {
  198. if(stu[i].num==num)
  199. {
  200. printf("该学生已找到,是否删除(y/n):");
  201. scanf("%s",ch);
  202. if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
  203. {
  204. for(j=i;j<m;j++)
  205. {
  206. stu[j]=stu[j+1];
  207. }
  208. m--;
  209. flag=1;
  210. if((fp=fopen("stu.txt","wb"))==NULL)
  211. {
  212. printf("文件打开失败\n");
  213. return;
  214. }
  215. for(j=0;j<m;j++)
  216. {
  217. if(fwrite(&stu[j],LEN,1,fp)!=1)
  218. {
  219. printf("不能保存\n");
  220. getchar();
  221. }
  222. }
  223. fclose(fp);
  224. printf("删除成功!\n");break;
  225. }
  226. else
  227. {
  228. printf("学生信息存在,不需要删除。");
  229. break;
  230. }
  231. }
  232. }
  233. if(m==i&&flag==0)
  234. {
  235. printf("未找到该学生");
  236. }
  237. }
  238. //修改学生信息
  239. void updet()
  240. {
  241. void print();
  242. int num;
  243. char name[10];
  244. char clas[20];
  245. char sex[5];
  246. float Eng_score;
  247. float C_score;
  248. FILE *fp;
  249. int m=0,a;
  250. int i,j;
  251. if((fp=fopen("stu.txt","rb"))==NULL)
  252. {
  253. printf("文件打开失败\n");
  254. return;
  255. }
  256. while(!feof(fp))
  257. {
  258. if(fread(&stu[m],LEN,1,fp)==1)
  259. {
  260. m++;
  261. }
  262. }
  263. fclose(fp);
  264. if(m==0)
  265. {
  266. printf("文件中没有学生信息\n");
  267. }
  268. else
  269. {
  270. print();
  271. printf("请输入需要修改学生信息的学号:");
  272. scanf("%d",&num);
  273. }
  274. for(i=0;i<m;i++)
  275. {
  276. if(num==stu[i].num)
  277. {
  278. printf("1:学号,2:姓名,3:班级,4:性别,5:英语成绩,6:C语言成绩\n");
  279. printf("该学生已被找到,请选择需要修改的内容(1-5):");
  280. scanf("%d",&a);
  281. while(a)
  282. {
  283. switch (a)
  284. {
  285. case 1:
  286. printf("将%d学生的学号修改为:",num);
  287. scanf("%d",&num);
  288. stu[i].num=num;
  289. for(j=i+1;j<m;j++)
  290. {
  291. if(stu[j].num==num)
  292. {
  293. printf("您修改的学号已存在\n");
  294. getchar();
  295. return;
  296. }
  297. }
  298. break;
  299. case 2:
  300. printf("将%d学生的姓名修改为:",num);
  301. scanf("%s",name);
  302. strcpy(stu[i].name,name);
  303. break;
  304. case 3:
  305. printf("将%d学生的班级修改为:",num);
  306. scanf("%s",clas);
  307. strcpy(stu[i].clas,clas);
  308. break;
  309. case 4:
  310. printf("将%d学生的性别修改为:",num);
  311. scanf("%s",sex);
  312. strcpy(stu[i].sex,sex);
  313. break;
  314. case 5:
  315. printf("将%d学生的英语成绩修改为:",num);
  316. scanf("%f",&Eng_score);
  317. stu[i].Eng_score=Eng_score;
  318. stu[i].total=stu[i].C_score+stu[i].Eng_score;
  319. stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
  320. break;
  321. case 6:
  322. printf("将%d学生的C语言成绩修改为:",num);
  323. scanf("%f",&C_score);
  324. stu[i].C_score=C_score;
  325. stu[i].total=stu[i].C_score+stu[i].Eng_score;
  326. stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;
  327. break;
  328. default:
  329. printf("选择错误,请重新选择需要修改的内容:");
  330. scanf("%d",&a);
  331. break;
  332. }
  333. printf("请选择需要修改的内容(如果已修改完成请按0):");
  334. scanf("%d",&a);
  335. }
  336. if((fp=fopen("stu.txt","wb"))==NULL)
  337. {
  338. printf("文件打开失败\n");
  339. return;
  340. }
  341. for(j=0;j<m;j++)
  342. {
  343. if(fwrite(&stu[j],LEN,1,fp)!=1)
  344. {
  345. printf("不能保存\n");
  346. getchar();
  347. }
  348. }
  349. fclose(fp);
  350. printf("修改成功!\n");
  351. break;
  352. }
  353. }
  354. if(m==i)
  355. {
  356. printf("未找到该学生\n");
  357. }
  358. }
  359. //查询学生信息
  360. void select()
  361. {
  362. int num,m=0;
  363. int i;
  364. FILE *fp;
  365. if((fp=fopen("stu.txt","rb"))==NULL)
  366. {
  367. printf("文件打开失败\n");
  368. return;
  369. }
  370. while(!feof(fp))
  371. {
  372. if(fread(&stu[m],LEN,1,fp)==1)
  373. {
  374. m++;
  375. }
  376. }
  377. fclose(fp);
  378. if(m==0)
  379. {
  380. printf("文件没有内容\n");
  381. return;
  382. }
  383. printf("请输入学生学号进行查询:");
  384. scanf("%d",&num);
  385. for(i=0;i<m;i++)
  386. {
  387. if(num==stu[i].num)
  388. {
  389. printf("\n");
  390. printf("该学生信息已被查到;\n");
  391. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  392. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
  393. break;
  394. }
  395. }
  396. if(m==i)
  397. {
  398. printf("该学生信息不存在\n");
  399. return;
  400. }
  401. }
  402. //显示学生信息
  403. void print()
  404. {
  405. int i,m=0;
  406. FILE *fp;
  407. if((fp=fopen("stu.txt","rb"))==NULL)
  408. {
  409. printf("文件打开失败\n");
  410. return;
  411. }
  412. while(!feof(fp))
  413. {
  414. if(fread(&stu[m],LEN,1,fp)==1)
  415. {
  416. m++;
  417. }
  418. }
  419. fclose(fp);
  420. if(m==0)
  421. {
  422. printf("文件中没有内容\n");
  423. }
  424. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  425. for(i=0;i<m;i++)
  426. {
  427. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
  428. }
  429. }
  430. //排序
  431. void sort()
  432. {
  433. int i,j,m=0;
  434. int ch;
  435. FILE *fp;
  436. struct student temp;
  437. if((fp=fopen("stu.txt","rb"))==NULL)
  438. {
  439. printf("文件打开失败\n");
  440. return;
  441. }
  442. while(!feof(fp))
  443. {
  444. if(fread(&stu[m],LEN,1,fp)==1)
  445. {
  446. m++;
  447. }
  448. }
  449. fclose(fp);
  450. if(m==0)
  451. {
  452. printf("文件中没有内容\n");
  453. }
  454. printf("1:学号升序,2:英语成绩升序,3:C语言升序,4:总成绩升序,5:平均成绩升序\n");
  455. printf("请选择显示形式:");
  456. scanf("%d",&ch);
  457. switch (ch)
  458. {
  459. case 1:
  460. for(i=0;i<m;i++)
  461. {
  462. for(j=i+1;j<m;j++)
  463. {
  464. if(stu[i].num>stu[j].num)
  465. {
  466. temp=stu[i];
  467. stu[i]=stu[j];
  468. stu[j]=temp;
  469. }
  470. }
  471. }
  472. break;
  473. case 2:
  474. for(i=0;i<m;i++)
  475. {
  476. for(j=i+1;j<m;j++)
  477. {
  478. if(stu[i].Eng_score>stu[j].Eng_score)
  479. {
  480. temp=stu[i];
  481. stu[i]=stu[j];
  482. stu[j]=temp;
  483. }
  484. }
  485. }
  486. break;
  487. case 3:
  488. for(i=0;i<m;i++)
  489. {
  490. for(j=i+1;j<m;j++)
  491. {
  492. if(stu[i].C_score>stu[j].C_score)
  493. {
  494. temp=stu[i];
  495. stu[i]=stu[j];
  496. stu[j]=temp;
  497. }
  498. }
  499. }
  500. break;
  501. case 4:
  502. for(i=0;i<m;i++)
  503. {
  504. for(j=i+1;j<m;j++)
  505. {
  506. if(stu[i].total>stu[j].total)
  507. {
  508. temp=stu[i];
  509. stu[i]=stu[j];
  510. stu[j]=temp;
  511. }
  512. }
  513. }
  514. break;
  515. case 5:
  516. for(i=0;i<m;i++)
  517. {
  518. for(j=i+1;j<m;j++)
  519. {
  520. if(stu[i].aver>stu[j].aver)
  521. {
  522. temp=stu[i];
  523. stu[i]=stu[j];
  524. stu[j]=temp;
  525. }
  526. }
  527. }
  528. break;
  529. }
  530. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  531. for(i=0;i<m;i++)
  532. {
  533. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
  534. }
  535. }
  536. //最大值
  537. void max()
  538. {
  539. int i,j=0;
  540. FILE *fp;
  541. int m=0;
  542. if((fp=fopen("stu.txt","rb"))==NULL)
  543. {
  544. printf("文件打开失败\n");
  545. return;
  546. }
  547. while(!feof(fp))
  548. {
  549. if(fread(&stu[m],LEN,1,fp)==1)
  550. {
  551. m++;
  552. }
  553. }
  554. fclose(fp);
  555. if(m==0)
  556. {
  557. printf("文件中没有内容\n");
  558. }
  559. for(i=0;i<m;i++)
  560. {
  561. if(stu[i].total>stu[j].total)
  562. j=i;
  563. }
  564. printf("总成绩成绩最高的同学是:\n");
  565. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  566. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
  567. }
  568. //分组统计
  569. void cut()
  570. {
  571. int i,j;
  572. float n;
  573. FILE *fp;
  574. int m=0;
  575. if((fp=fopen("stu.txt","rb"))==NULL)
  576. {
  577. printf("文件打开失败\n");
  578. return;
  579. }
  580. while(!feof(fp))
  581. {
  582. if(fread(&stu[m],LEN,1,fp)==1)
  583. {
  584. m++;
  585. }
  586. }
  587. fclose(fp);
  588. if(m==0)
  589. {
  590. printf("文件中没有内容\n");
  591. }
  592. printf("请输入按总成绩分组的值:");
  593. scanf("%f",&n);
  594. printf("总成绩大于%.2f的同学有:\n",n);
  595. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  596. for(i=0;i<m;i++)
  597. {
  598. if(stu[i].total>=n)
  599. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);
  600. }
  601. printf("总成绩小于%.2f的同学有:\n",n);
  602. printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");
  603. for(j=0;j<m;j++)
  604. {
  605. if(stu[j].total<n)
  606. printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);
  607. }
  608. }
  609. //清屏
  610. void clea()
  611. {
  612. system("cls");
  613. }
复制代码

七.总结

以上就是使用C语言编写的学生信息管理系统,在制作系统的过程中也遇到过很多的问题。

可能在第一次制作系统的时候,很可能是没有头绪的,这个时候我们不要放弃,开始没有头绪是正常的,此时我们应该静下心来去分析系统的功能,将思路打开,画出流程图,将系统的基本框架算法编译出来,然后逐个功能去分析去实现,大胆的将自己想到的算法编译出来,然后再逐个优化,最后一定能制作出一个非常好的系统。

在制作学生管理系统时,各项功能的实现一定要在心中有一个大概的流程,然后再使用C语言进行编译,在进行文件的的读和写操作后都要记得关闭文件,要理解各种函数的作用和意义,这样帮助我们更好的制作出想要的系统。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行