• C基础练习(学生管理系统)


    1.系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令

    2.开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。”

    同理,当输入其他的成绩处理命令时也作相应的处理。

    3.输入命令 T,调用Type子函数录入成绩。界面提示输入学生人数

    输入3 后提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提示学号:1

    输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2

    以此类推,直到输入结束

    4.输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

    5.输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令

    输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

    6.输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令

    输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

    7.输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。

    输入3 ,找到3号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令

    8.输入命令C , 执行清屏函数语句system("clear");

    清除屏幕的所有内容。提示输入命令

    9.输入命令H , 调用Help子函数显示帮助菜单。Help子函数调用结束,返回。提示输入命令

    10.输入命令Q , 则退出系统。

    11.构造思想:

    1)输出数组元素时,要将学号单独处理,输出为整数(即保留0位小数)。同理,在计算成绩时也要将第1列的学号撇开,只计算第2列之后的。成绩保留2位小数。

    2)学生人数n贯穿始终,通过n的值判断当前命令的子函数是否能够调用执行。例如:当n=0时,说明还没有录入成绩。而一旦输入命令T,也即调用Type子函数录入了成绩,则n的值就不再是0。当n!=0时,就可以进行其他的成绩操作。

    代码展示

    1. #include
    2. #include
    3. #include
    4. struct student // 定义结构体数组,用来存放学生信息
    5. {
    6. int num;
    7. float Chinese;
    8. float math;
    9. float English;
    10. float average;
    11. } stu[32];
    12. void Help(); // 声明函数
    13. int Type(struct student *p, int n);
    14. void List(int n);
    15. void Average(int n);
    16. void paixu(int n);
    17. void Search(int n);
    18. int main(int argc, char const *argv[])
    19. {
    20. Help(); // 调用帮助菜单函数
    21. char ml;
    22. int n = 0;
    23. while (1) // 重复输入命令
    24. {
    25. printf("请输入命令=");
    26. scanf(" %c", &ml);
    27. if (ml == 'C')
    28. system("clear"); // 输入C时,触发清屏函数
    29. else if (ml == 'Q')
    30. break; // 输入Q时退出程序
    31. else if (ml == 'T')
    32. n = Type(stu, n); // 输入T时调用Type函数录入信息
    33. else if (n == 0) // 当学生人数为0时无法使用其它命令,需要先录入信息
    34. printf("成绩表为空!请先使用命令T录入学生成绩\n");
    35. else if (n != 0)
    36. {
    37. if (ml == 'H')
    38. Help(); // 当输入H时调用Help函数打开帮助菜单
    39. else if (ml == 'L')
    40. List(n); // 输入L时调用List函数列出学生信息
    41. else if (ml == 'A')
    42. Average(n); // 输入A时调用Average函数计算平均分
    43. else if (ml == 'P')
    44. paixu(n); // 输入P时调用paixu函数进行排序
    45. else if (ml == 'S')
    46. Search(n); // 输入S时调用Search函数进行查询
    47. }
    48. getchar(); // 回收垃圾字符
    49. }
    50. return 0;
    51. }
    52. int Type(struct student *p, int n) // 录入信息函数
    53. {
    54. int num;
    55. printf("请输入学生人数:");
    56. scanf("%d", &num);
    57. printf("请输入%d个学生的成绩\n", num);
    58. printf("学号 语文 数学 外语\n");
    59. for (int a = n; a < n + num; a++) // for循环遍历录入信息
    60. {
    61. printf("%d ", a + 1);
    62. stu[a].num = a + 1;
    63. scanf("%f %f %f", &stu[a].Chinese, &stu[a].math, &stu[a].English);
    64. }
    65. n = num + n;
    66. return n; // 返回学生人数
    67. }
    68. void Help() // 帮助菜单
    69. {
    70. printf("**************************************\n");
    71. printf("* 学生成绩管理系统————帮助菜单 *\n");
    72. printf("**************************************\n");
    73. printf("* H=显示帮助菜单 *\n");
    74. printf("* T=成绩录入 *\n");
    75. printf("* A=计算学生平均分 *\n");
    76. printf("* L=列出成绩表 *\n");
    77. printf("* P=按平均成绩由高到低排序 *\n");
    78. printf("* S=按学号查询学生成绩 *\n");
    79. printf("* C=清屏 *\n");
    80. printf("* Q=退出系统 *\n");
    81. printf("**************************************\n");
    82. printf(" Copyright 2024.08.06 By zhr\n");
    83. }
    84. void List(int n) // 列出学生信息函数
    85. {
    86. printf("学生成绩如下:\n");
    87. printf("学号 语文 数学 外语 平均分\n");
    88. for (int a = 0; a < n; a++) // for循环遍历结构体数组
    89. {
    90. printf("%d %.2f %.2f %.2f %.2f", stu[a].num, stu[a].Chinese, stu[a].math, stu[a].English, stu[a].average);
    91. printf("\n");
    92. }
    93. }
    94. void Average(int n) // 计算平均分函数
    95. {
    96. for (int a = 0; a < n; a++)
    97. stu[a].average = (stu[a].Chinese + stu[a].English + stu[a].math) / 3;
    98. printf("平均分已计算,请使用命令L查看\n");
    99. }
    100. void paixu(int n) // 排序函数
    101. {
    102. struct student stu1[32];
    103. if (stu[0].average == 0) // 平均分未计算时无法排序
    104. printf("无法排序,请先使用命令A计算平均分\n");
    105. else
    106. {
    107. for (int a = 0; a < n - 1; a++)
    108. {
    109. for (int b = 0; b < n - 1 - a; b++)
    110. {
    111. if (stu[b].average < stu[b + 1].average)
    112. {
    113. stu1[b] = stu[b]; // 通过交换结构体数组进行排序
    114. stu[b] = stu[b + 1];
    115. stu[b + 1] = stu1[b];
    116. }
    117. }
    118. }
    119. printf("已完成排序,请使用命令L查看\n");
    120. }
    121. }
    122. void Search(int n)
    123. {
    124. int num;
    125. printf("请输入要查询的学生的学号:");
    126. scanf("%d", &num);
    127. printf("学号 语文 数学 外语 平均分\n");
    128. for (int a = 0; a < n; a++)
    129. if (stu[a].num == num) // 通过学号打印学生信息
    130. printf("%d %.2f %.2f %.2f %.2f\n", stu[a].num, stu[a].Chinese, stu[a].math, stu[a].English, stu[a].average);
    131. }

  • 相关阅读:
    MATLAB R2018b安装教程
    Compact格式下MySQL的数据如何存储到磁盘
    Spring的使用
    为什么Java能够称霸移动开发领域这么多年?
    AttributeError: module ‘hanlp.utils.rules‘ has no attribute ‘tokenize_english‘
    用递归实现字符串逆序(不使用库函数)
    (高阶) Redis 7 第19讲 缓存过期淘汰策略 大厂篇
    C200/10/1/1/1/00 VPM04D300000 VDM01U30AL00
    PHP8的数组-PHP8知识详解
    Android学习笔记 1.7 Android应用的基本组件介绍
  • 原文地址:https://blog.csdn.net/qq_64136247/article/details/140964556