• 学员管理系统可以实现对学员的添加、全部显示、查询、修改、删除功能

image.png

  • 数据存储格式说明 ```c // 宏定义的常量,代表学生的最大个数

    define NUM 100

// 结构体类型 struct stu 别名为 STU typedef struct stu { char name[30]; // 姓名 int age; // 年龄 char sex[5]; // 性别 }STU;

// 全局变量定义 // 结构体数组 STU s[NUM];
// 标志学生的个数,刚好为数组的下标,从0开始 int n = 0;

  1. - 示例代码
  2. ```c
  3. #include <stdio.h>
  4. #include <string.h>
  5. // 宏定义的常量,代表学生的最大个数
  6. #define NUM 100
  7. // 结构体类型 struct stu 别名为 STU
  8. typedef struct stu {
  9. char name[30]; // 姓名
  10. int age; // 年龄
  11. char sex[5]; // 性别
  12. }STU;
  13. // 全局变量定义
  14. // 结构体数组,默认有5个学生
  15. STU s[NUM] = {
  16. {"mike", 18, "男"},
  17. {"yoyo", 19, "女"},
  18. {"lily", 17, "女"},
  19. {"rock", 21, "男"},
  20. {"mary", 19, "女"}
  21. };
  22. // 标志学生的个数,刚好为数组的下标
  23. int n = 5;
  24. // 帮助菜单显示函数定义
  25. void help_menu() {
  26. printf("\n");
  27. printf(" 欢迎使用本学生信息管理系统\n");
  28. printf("* ================================ *\n");
  29. printf("* 1. 添加 *\n");
  30. printf("* 2. 显示 *\n");
  31. printf("* 3. 查询 *\n");
  32. printf("* 4. 修改 *\n");
  33. printf("* 5. 删除 *\n");
  34. printf("* 6. 退出 *\n");
  35. printf("* ================================ *\n");
  36. }
  37. // 显示所有学生函数定义
  38. void show_all_stu() {
  39. printf("学生信息如下:\n");
  40. // 遍历每一个结构体数组元素,打印元素的成员
  41. for (int i = 0; i < n; i++) {
  42. printf("%s %d %s\n", s[i].name, s[i].age, s[i].sex);
  43. }
  44. }
  45. // 添加学生函数定义
  46. void add_stu() {
  47. // 判断学生个数有没有超过最大值
  48. if (n >= NUM) {
  49. printf("存储空间不够\n");
  50. return; // 提前终止函数,不能往下操作
  51. }
  52. // 打印请输入第n+1个学生提示信息
  53. printf("准备输入第%d个学生的信息\n", n+1);
  54. // 输入学生信息
  55. printf("请输入姓名:");
  56. scanf("%s", s[n].name); // name为数组名,代表数组首元素地址,无需加&
  57. printf("请输入年龄:");
  58. scanf("%d", &s[n].age);
  59. printf("请输入性别(男或女):");
  60. scanf("%s", s[n].sex); // sex为数组名,代表数组首元素地址,无需加&
  61. // 学生个数+1
  62. n++;
  63. }
  64. // 查询学生所在的下标位置
  65. int find_stu_index(char *p) {
  66. // 通过姓名查询某个学生,返回这个学生的下标
  67. for (int i = 0; i < n; i++) {
  68. // 判断姓名是否相等
  69. if (strcmp(s[i].name, p) == 0) {
  70. return i; // 返回找到学生的下标
  71. }
  72. }
  73. // 程序能执行到,说明没有找到,返回-1
  74. return -1;
  75. }
  76. // 打印找到学生的信息
  77. void show_one_stu() {
  78. // 输入需要找的学生
  79. printf("请输入需要找的学生姓名:");
  80. char name[30];
  81. scanf("%s", name);
  82. // 获取学生下标
  83. int i = find_stu_index(name);
  84. // 如果不为-1,则打印学生信息
  85. if (i != -1) {
  86. printf("%s 信息如下\n", name);
  87. printf("%s %d %s\n", s[i].name, s[i].age, s[i].sex);
  88. } else {
  89. printf("没有 %s 相关信息\n", name);
  90. }
  91. }
  92. // 修改某个学生的信息
  93. void modify_one_stu() {
  94. // 输入需要找的学生
  95. printf("请输入需要修改的学生姓名:");
  96. char name[30];
  97. scanf("%s", name);
  98. // 获取学生下标
  99. int i = find_stu_index(name);
  100. // 如果不为-1,则修改学生信息
  101. if (i != -1) {
  102. printf("学生原来的信息:\n");
  103. printf("%s %d %s\n", s[i].name, s[i].age, s[i].sex);
  104. printf("\n");
  105. printf("请输入新的学生信息:\n");
  106. // 输入学生信息
  107. printf("请输入姓名:");
  108. scanf("%s", s[i].name); // name为数组名,代表数组首元素地址,无需加&
  109. printf("请输入年龄:");
  110. scanf("%d", &s[i].age);
  111. printf("请输入性别(男或女):");
  112. scanf("%s", s[i].sex); // sex为数组名,代表数组首元素地址,无需加&
  113. printf("信息更新成功,新信息如下:\n");
  114. printf("%s %d %s\n", s[i].name, s[i].age, s[i].sex);
  115. } else {
  116. printf("没有 %s 相关信息\n", name);
  117. }
  118. }
  119. // 删除某个学生
  120. void del_one_stu() {
  121. // 输入需要找的学生
  122. printf("请输入需要删除的学生姓名:");
  123. char name[30];
  124. scanf("%s", name);
  125. // 获取学生下标
  126. int i = find_stu_index(name);
  127. // 如果不为-1,则删除
  128. if (i != -1) {
  129. // 如果删除不是最后一个元素,把最后一个元素的位置替换到删除元素那个位置
  130. if (i != n-1) {
  131. s[i] = s[n-1];
  132. }
  133. // n需要-1
  134. n--;
  135. printf("%s 删除成功\n", name);
  136. } else {
  137. printf("没有 %s 相关信息\n", name);
  138. }
  139. }
  140. int main() {
  141. // 死循环
  142. while (1) {
  143. // 帮助菜单显示
  144. help_menu();
  145. // 输入操作数字
  146. printf("请输入指令数字:");
  147. int cmd;
  148. scanf("%d", &cmd);
  149. // printf("cmd = %d\n", cmd);
  150. // 选择判断
  151. if (cmd == 1) {
  152. printf("添加学生\n");
  153. add_stu();
  154. } else if ( cmd == 2) {
  155. printf("显示学生\n");
  156. show_all_stu();
  157. } else if ( cmd == 3) {
  158. printf("查询学生\n");
  159. show_one_stu();
  160. } else if ( cmd == 4) {
  161. printf("修改学生\n");
  162. modify_one_stu();
  163. } else if ( cmd == 5) {
  164. printf("删除学生\n");
  165. del_one_stu();
  166. } else if ( cmd == 6) {
  167. printf("退出系统\n");
  168. break;
  169. } else {
  170. printf("指令数字错误,请重新输入\n");
  171. }
  172. }
  173. return 0;
  174. }