黑马程序员技术交流社区

标题: 学生管理系统 [打印本页]

作者: muyan091115    时间: 2016-5-21 23:16
标题: 学生管理系统
挺开心的 今天学的 自己写的 字节多了
  1. //
  2. //  main.c
  3. //  StudentsSystem
  4. //
  5. //  Created by 蒋伟 on 16/5/21.
  6. //  Copyright (c) 2016年 蒋伟. All rights reserved.
  7. //

  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <stdlib.h>


  11. #define LENGTH 20

  12. /**
  13. 定义枚举类型性别
  14. */
  15. typedef enum {
  16.     GenderMale,
  17.     GenderFamale
  18. } Gender;

  19. /**
  20. *  定义学生结构体类型
  21. */
  22. typedef struct {
  23.     int id;
  24.     char * name;
  25.     Gender gender;
  26.     int age;
  27.     int score;
  28. } Student;

  29. /**
  30. *  初始化学生信息数组
  31. */
  32. Student students[LENGTH] =
  33. {
  34.     {1,"xiaoMing",GenderMale,18,100},
  35.     {2,"xiaoHong",GenderFamale,16,97},
  36.     {3,"xiaoQiang",GenderMale,25,59},
  37.     {4,"xiaoHuan",GenderFamale,17,99},
  38.     {5,"xiaoHuang",GenderFamale,26,72},
  39.     {6,"xiaoQing",GenderFamale,23,86},
  40.     {7,"xiaoFang",GenderMale,32,23},
  41.     {8,"xiaoWang",GenderFamale,24,98},
  42.     {9,"xiaoJiang",GenderMale,23,100},
  43.     {10,"xiaoLian",GenderMale,35,16},
  44. };

  45. /**
  46. *  代表学生个数的真实长度
  47. */
  48. int realLength = 10;

  49. /**
  50. *  打印主菜单并接受用户下一步操作
  51. *
  52. *  @return 用户的下一步操作
  53. */
  54. int showMenu();

  55. /**
  56. *  查询学生信息
  57. */
  58. void query();

  59. /**
  60. *  增加学生信息
  61. */
  62. void addStudent();

  63. /**
  64. *  删除学生信息
  65. */
  66. void deleteStudent();

  67. /**
  68. *  修改学生信息
  69. */
  70. void modifyStudent();

  71. /**
  72. *  打印查询菜单并接受用户下一步操作
  73. *
  74. *  @return 用户下一步操作
  75. */
  76. int showQueryMenu();

  77. /**
  78. *  查询所有学生信息
  79. */
  80. void queryAll();

  81. /**
  82. *  根据学生编号查询
  83. */
  84. void queryById();

  85. /**
  86. *  根据学生姓名查询
  87. */
  88. void queryByName();

  89. /**
  90. *  根据学生性别查询
  91. */
  92. void queryByGender();

  93. /**
  94. *  根据学生年龄查询
  95. */
  96. void queryByAge();

  97. /**
  98. *  根据学生信息查询
  99. */
  100. void queryByScore();

  101. int main(int argc, const char * argv[]) {
  102.     while(1){
  103.         int userSelect = showMenu();
  104.         printf("\n");
  105.         switch(userSelect){
  106.             case 1:
  107.                 query();
  108.                 break;
  109.             case 2:
  110.                 addStudent();
  111.                 break;
  112.             case 3:
  113.                 deleteStudent();
  114.                 break;
  115.             case 4:
  116.                 modifyStudent();
  117.                 break;
  118.             case 5:
  119.                 printf("谢谢使用!\n");
  120.                 return 0;
  121.             default:
  122.                 printf("输入有误,请重新输入!\n\n");
  123.         }
  124.     }
  125. }

  126. /**
  127. *  打印主菜单并接受用户下一步操作
  128. *
  129. *  @return 用户的下一步操作
  130. */
  131. int showMenu(){
  132.     printf("**********************\n");
  133.     printf("*     欢迎使用学生管理系统     *\n");
  134.     printf("*       1 查询学生       *\n");
  135.     printf("*       2 增加学生       *\n");
  136.     printf("*       3 删除学生       *\n");
  137.     printf("*       4 修改学生       *\n");
  138.     printf("*       5 退出系统       *\n");
  139.     printf("**********************\n");
  140.    
  141.     int userSelect = 0;
  142.     printf("请输入菜单的编号:");
  143.     scanf("%d",&userSelect);
  144.    
  145.     return userSelect;
  146. }

  147. /**
  148. *  查询学生信息
  149. */
  150. void query(){
  151.     while(1){
  152.         int userSelect = showQueryMenu();
  153.         switch(userSelect){
  154.             case 1:
  155.                 queryAll();
  156.                 return;
  157.             case 2:
  158.                 queryById();
  159.                 return;
  160.             case 3:
  161.                 queryByName();
  162.                 return;
  163.             case 4:
  164.                 queryByGender();
  165.                 return;
  166.             case 5:
  167.                 queryByAge();
  168.                 return;
  169.             case 6:
  170.                 queryByScore();
  171.                 return;
  172.             case 7:
  173.                 return;
  174.             default:
  175.                 printf("输入错误,请重新输入!");
  176.         }
  177.     }
  178. }

  179. /**
  180. *  增加学生信息
  181. */
  182. void addStudent(){
  183.     Student stu;
  184.     stu.id = students[realLength-1].id + 1;
  185.     char name1[10];
  186.     printf("\n请输入添加学生的姓名:");
  187.     rewind(stdin);
  188.     fgets(name1,10,stdin);
  189.     size_t len = strlen(name1);
  190.     if(name1[len - 1] == '\n'){
  191.         name1[len - 1] = '\0';
  192.     }
  193.     char *name = calloc(len+1,1);
  194.     strcpy(name,name1);
  195.     stu.name = name;
  196.     printf("请输入添加学生的性别(0->男,1->女:)");
  197.     scanf("%d",&stu.gender);
  198.     printf("请输入添加学生的年龄:");
  199.     scanf("%d",&stu.age);
  200.     printf("请输入添加学生的分数:");
  201.     scanf("%d",&stu.score);
  202.     if(realLength >=20){
  203.         printf("已经添加不进去了!");
  204.         return;
  205.     }
  206.     students[realLength] = stu;
  207.     printf("\n添加成功!信息如下:\n");
  208.     printf("\n编号   姓名         性别 年龄  成绩\n");
  209.     printf("%d\t\t\t%s\t\t\t%s\t\t%d\t\t%d\n",
  210.            students[realLength].id,
  211.            students[realLength].name,
  212.            students[realLength].gender?"女":"男",
  213.            students[realLength].age,
  214.            students[realLength].score);
  215.     realLength++;
  216.     printf("\n");
  217. }

  218. /**
  219. *  删除学生信息
  220. */
  221. void deleteStudent(){
  222.     printf("请输入您需要删除的学生的学号:");
  223.     int id;
  224.     scanf("%d",&id);
  225.     int index = -1;
  226.     for(int i = 0; i < realLength; i++){
  227.         if(students[i].id == id){
  228.             index = i;
  229.         }
  230.     }
  231.     if(index == -1){
  232.         printf("\n没有学号为%d的学生!无法删除!\n\n",id);
  233.     }else{
  234.         for(int i = index; i < realLength - 1; i++){
  235.             students[i] = students[i+1];
  236.         }
  237.         realLength -- ;
  238.         printf("\n删除成功!\n\n");
  239.     }
  240. }

  241. /**
  242. *  修改学生信息
  243. */
  244. void modifyStudent(){
  245.     printf("请输入您需要修改的学生的学号:");
  246.     int id;
  247.     scanf("%d",&id);
  248.     int index = -1;
  249.     for(int i = 0; i < realLength; i++){
  250.         if(students[i].id == id){
  251.             index = i;
  252.         }
  253.     }
  254.     if(index == -1){
  255.         printf("\n没有学号为%d的学生!无法修改!\n\n",id);
  256.     }else{
  257.         while(1){
  258.             int userSelect;
  259.             printf("\n请输入需要修改的信息:1,姓名 2,性别 3,年龄 4,分数:");
  260.             scanf("%d",&userSelect);
  261.             switch(userSelect){
  262.                 case 1:{
  263.                     char name1[10];
  264.                     printf("\n请输入新的姓名:");
  265.                     rewind(stdin);
  266.                     fgets(name1,10,stdin);
  267.                     size_t len = strlen(name1);
  268.                     if(name1[len - 1] == '\n'){
  269.                         name1[len - 1] = '\0';
  270.                     }
  271.                     char *name = calloc(len+1,1);
  272.                     strcpy(name,name1);
  273.                     students[index].name = name;
  274.                     printf("\n修改成功!\n\n");
  275.                     return;
  276.                 }
  277.                 case 2:{
  278.                     Gender newGender;
  279.                     printf("\n请输入新的性别:");
  280.                     scanf("%d",&newGender);
  281.                     students[index].gender = newGender;
  282.                     printf("\n修改成功!\n\n");
  283.                     return;
  284.                 }
  285.                 case 3:{
  286.                     int newAge;
  287.                     printf("\n请输入新的年龄:");
  288.                     scanf("%d",&newAge);
  289.                     students[index].age = newAge;
  290.                     printf("\n修改成功!\n\n");
  291.                     return;
  292.                 }
  293.                 case 4:{
  294.                     int newScore;
  295.                     printf("\n请输入新的分数:");
  296.                     scanf("%d",&newScore);
  297.                     students[index].score = newScore;
  298.                     printf("\n修改成功!\n\n");
  299.                     return;
  300.                 }
  301.                 default:
  302.                     printf("输入有误!");
  303.             }
  304.         }
  305.     }
  306. }
  307. /**
  308. *  打印查询菜单并接受用户下一步操作
  309. *
  310. *  @return 用户下一步操作
  311. */
  312. int showQueryMenu(){
  313.     printf("**********************\n");
  314.     printf("*      1 查询所有学生      *\n");
  315.     printf("*      2 根据学号查询      *\n");
  316.     printf("*      3 根据姓名查询      *\n");
  317.     printf("*      4 根据性别查询      *\n");
  318.     printf("*      5 根据年龄查询      *\n");
  319.     printf("*      6 根据成绩查询      *\n");
  320.     printf("*      7 返回主菜单       *\n");
  321.     printf("**********************\n");
  322.    
  323.     int userSelect = 0;
  324.     printf("请输入菜单的编号:");
  325.     scanf("%d",&userSelect);
  326.    
  327.     return userSelect;
  328.    
  329. }






复制代码



作者: muyan091115    时间: 2016-5-21 23:17
  1. /**
  2. * 查询所有学生信息
  3. */
  4. void queryAll(){
  5. printf("\n编号 姓名 性别 年龄 成绩\n");
  6. for(int i = 0; i < realLength; i++){
  7. printf("%d\t\t\t%s\t\t\t%s\t\t%d\t\t%d\n",
  8. students[i].id,
  9. students[i].name,
  10. students[i].gender?"女":"男",
  11. students[i].age,
  12. students[i].score
  13. );
  14. }
  15. printf("\n");
  16. }

  17. /**
  18. * 根据学生编号查询
  19. */
  20. void queryById(){
  21. printf("\n请输入需要查询的学生的Id:");
  22. int id = 0;
  23. scanf("%d",&id);
  24. int index = -1;
  25. for(int i = 0; i < realLength; i++){
  26. if(students[i].id == id){
  27. index = i;
  28. }
  29. }
  30. if(index == -1){
  31. printf("\n没有学号为%d的学生!\n\n",id);
  32. }else{
  33. printf("\n编号 姓名 性别 年龄 成绩\n");
  34. printf("%d\t\t\t%s\t\t\t%s\t\t%d\t\t%d\n",
  35. students[index].id,
  36. students[index].name,
  37. students[index].gender?"女":"男",
  38. students[index].age,
  39. students[index].score);
  40. printf("\n");
  41. }
  42. }

  43. /**
  44. * 根据学生姓名查询
  45. */
  46. void queryByName(){
  47. printf("\n请输入需要查询的学生的姓名:");
  48. char name[10];
  49. rewind(stdin);
  50. fgets(name,10,stdin);
  51. size_t len = strlen(name);
  52. if(name[len - 1] == '\n'){
  53. name[len - 1] = '\0';
  54. }
  55. int index = -1;
  56. for(int i = 0; i < realLength; i++){
  57. if(strcmp(students[i].name,name) == 0){
  58. index = i;
  59. }
  60. }
  61. if(index == -1){
  62. printf("\n没有性别为%s的学生!\n\n",name);
  63. }else{
  64. printf("\n编号 姓名 性别 年龄 成绩\n");
  65. printf("%d\t\t\t%s\t\t\t%s\t\t%d\t\t%d\n",
  66. students[index].id,
  67. students[index].name,
  68. students[index].gender?"女":"男",
  69. students[index].age,
  70. students[index].score);
  71. printf("\n");
  72. }
  73. }

  74. /**
  75. * 根据学生性别查询
  76. */
  77. void queryByGender(){
  78. printf("\n请输入需要查询的学生的性别\n");
  79. printf("0->男,1->女:");
  80. int gender = 0;
  81. scanf("%d",&gender);
  82. int index = -1;
  83. for(int i = 0; i < realLength; i++){
  84. if(students[i].gender == gender){
  85. index = i;
  86. }
  87. }
  88. if(index == -1){
  89. printf("\n没有性别为%d的学生!\n\n",gender);
  90. }else{
  91. printf("\n编号 姓名 性别 年龄 成绩\n");
  92. for(int i = 0; i < realLength; i++){
  93. if(students[i].gender == gender){
  94. printf("%d\t\t\t%s\t\t\t%s\t\t%d\t\t%d\n",
  95. students[i].id,
  96. students[i].name,
  97. students[i].gender?"女":"男",
  98. students[i].age,
  99. students[i].score
  100. );
  101. }
  102. }
  103. printf("\n");
  104. }
  105. }

  106. /**
  107. * 根据学生年龄查询
  108. */
  109. void queryByAge(){
  110. int min = 0, max = 0;
  111. printf("\n请输入需要查询的学生的年龄段(xx-xx):\n");
  112. scanf("%d-%d",&min, &max);
  113. int index = -1;
  114. for(int i = 0; i < realLength; i++){
  115. if(students[i].age >= min && students[i].age <= max ){
  116. index = i;
  117. }
  118. }
  119. if(index == -1){
  120. printf("\n没有年龄在%d-%d之间的学生!\n\n",min,max);
  121. }else{
  122. printf("\n编号 姓名 性别 年龄 成绩\n");
  123. for(int i = 0; i < realLength; i++){
  124. if(students[i].age >= min && students[i].age <= max){
  125. printf("%d\t\t\t%s\t\t\t%s\t\t%d\t\t%d\n",
  126. students[i].id,
  127. students[i].name,
  128. students[i].gender?"女":"男",
  129. students[i].age,
  130. students[i].score
  131. );
  132. }
  133. }
  134. printf("\n");
  135. }
  136. }

  137. /**
  138. * 根据学生成绩查询
  139. */
  140. void queryByScore(){
  141. int min = 0, max = 0;
  142. printf("\n请输入需要查询的学生的分数段(xx-xx):\n");
  143. scanf("%d-%d",&min, &max);
  144. int index = -1;
  145. for(int i = 0; i < realLength; i++){
  146. if(students[i].score >= min && students[i].score <= max){
  147. index = i;
  148. }
  149. }
  150. if(index == -1){
  151. printf("\n没有分数在%d-%d之间的学生!\n\n",min,max);
  152. }else{
  153. printf("\n编号 姓名 性别 年龄 成绩\n");
  154. for(int i = 0; i < realLength; i++){
  155. if(students[i].score >= min && students[i].score <= max){
  156. printf("%d\t\t\t%s\t\t\t%s\t\t%d\t\t%d\n",
  157. students[i].id,
  158. students[i].name,
  159. students[i].gender?"女":"男",
  160. students[i].age,
  161. students[i].score
  162. );
  163. }
  164. }
  165. printf("\n");
  166. }
  167. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2