A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 恋梦 于 2015-3-28 00:44 编辑

同样,废话不多说,虽然论坛里已经有一个这种类似的贴子了,但我感觉还是太少,所以想了想还是把我的这个贴子发出来,因为这个思路确实太乱了,太深了,而且我感觉这道题就是个坑,零基础怎么可能全都能弄出来,反正我是零基础,所以我把这个贴子贴出来让给同样类似的零基础的一个思路,另注明,里面函数命名乱七八糟的基本要靠猜,代码相当不规范,还有部分没有注释,如果不是为了赶时间我会再好好调适的,还有一点就是目前有个问题未解决就是scanf挡不住程序运行,所以我在前面加了个getchar();,所以一开始要多输一个无用的字符,才是程序正式开始使用。如果有谁能帮我解决这个问题,还望给我回个贴我看下怎么解决,谢谢。
如果对你有帮忙,求个赞。[hide=d20]//
  1. //  main.c
  2. //  测试题9
  3. //
  4. //  Created by osx on 15-2-5.
  5. //  Copyright (c) 2015年 osx. All rights reserved.
  6. //

  7. // 9、 编写一个学生管理系统程序,用来记录学生的信息(包括姓名、年龄、性别、学号、分数),提供增加、删除、查询学生信息的入口。(C语言)

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

  10. void gongNing (); // 增加、删除、查询的功能声明
  11. void zengJia(); // 增加功能声明
  12. void shanchu(); // 删除功能声明
  13. void chaxun(); // 查询功能声明
  14. void xuehao();
  15. void xingming();
  16. void xingbie();
  17. void fenshu();
  18. void suoyou();
  19. void shanchuxingming();
  20. void shanchuxuehao();
  21. void shanchuxingbie();
  22. void shanchufenshu();
  23. void shanchusuoyou();

  24. // 定义一个学生的结构体
  25. struct Student
  26. {
  27.     char name[10]; // 姓名
  28.     int age; // 年龄
  29.     char set[10]; // 姓别
  30.     int number;  // 学号
  31.     double score; // 分数
  32. } ;
  33. // 定义一个学生数组可放100人
  34. struct Student str[100];

  35. int main()
  36. {
  37.     // 提示用户登陆学生管理系统
  38.     //    printf("欢迎登陆学生管理系统\n");
  39.     printf("\n\n\n\n\t\t\t\t\t\t 欢迎使用学生管理系统!\n");
  40.    
  41.     // 调用功能
  42.     gongNing();
  43.    
  44.    
  45.     // 程序归零,正常退出
  46.     return 0;
  47. }
  48. // 所有功能定义
  49. void gongNing ()
  50. {
  51.     // 保证功能函数一直不退出循环,想退出的时候再退出(可退出的死循环)
  52.     for (; ; ) {

  53.     // 定义功能的标识
  54.     int n = 0;
  55.    
  56.     // 提示用户输入
  57.     printf("\t\t\t\t\t\t*******************\n");
  58.     printf("\t\t\t\t\t\t   1.增加学生信息\n");
  59.     printf("\t\t\t\t\t\t   2.删除学生信息\n");
  60.     printf("\t\t\t\t\t\t   3.查询学生信息\n");
  61.     printf("\t\t\t\t\t\t   退出系统按任意键\n");
  62.     printf("\t\t\t\t\t\t*******************\n");
  63.    
  64.     // 接收用户的选择
  65.     getchar();
  66.     scanf("%d", &n);
  67.    
  68.     // 定义用户所需进入的选择
  69.     if (n == 1)
  70.     {
  71.         zengJia(); // 增加
  72.     }
  73.     else if (n == 2)
  74.     {
  75.         shanchu(); // 删除
  76.     }
  77.     else if (n == 3)
  78.     {
  79.         chaxun(); // 查询
  80.     }
  81.     else {
  82.         break;
  83.     }
  84.    
  85.     }
  86. }

  87. // 增加功能定义
  88. void zengJia()
  89. {
  90.     // 定义学生数组每个人的信息
  91.     static int i;
  92.     while (i<100) {
  93.         printf("请输入该学生的姓名\n");
  94.         scanf("%s",str.name);
  95.         printf("请输入该学生的年龄(5岁-30岁之间)\n");
  96.         scanf("%d",&str.age);
  97.         // 检察年龄是否适当(5岁-30岁之间)
  98.         while  (str.age<5 || str.age>30)
  99.         {
  100.             printf("对不起您的学生年龄输入可能有误\n");
  101.             printf("请重新输入该学生年龄\n");
  102.             getchar();
  103.             scanf("%d",&str.age);
  104.         }
  105.         
  106.         printf("请输入该学生的性别(man或woman)\n");
  107.         scanf("%s",str.set);
  108.         // 只能输入男或女或man或woman
  109.         while ((strcmp("man",str.set)!=0) && (strcmp("woman",str.set)!=0))
  110.         {
  111.             printf("您输入的性别有误\n请重新输入\n");
  112.             scanf("%s",str.set);
  113.         }
  114.         
  115.         printf("请输入该学生的学号\n");
  116.         scanf("%d",&str.number);
  117.         // 检察学号是否相同,学号具有惟一性,不能同时给多人赋值
  118.         for (int a = 0; a<i; a++)
  119.         {
  120.             while  (str.number == str[a].number)
  121.             {
  122.                 printf("对不起学号具有惟一性,不能同时给多人同一学号\n");
  123.                 printf("请重新输入该学生的学号\n");
  124.                 scanf("%d",&str.number);
  125.             }
  126.         }
  127.         printf("请输入该学生的分数\n");
  128.         scanf("%lf",&str.score);
  129.         // 检察分数是否适当
  130.         while  (str.score<0 || str.score>100)
  131.         {
  132.             printf("对不起您的考生考分不符合判卷标准\n");
  133.             printf("请重新输入该学生的分数\n");
  134.             scanf("%lf",&str.score);
  135.         }
  136.         
  137.         // 确保每次调用函数都输入下一个数组的信息
  138.         i++;
  139.         printf("是否继续添加,请按1,返回菜单请按任意键\n");
  140.         int a = 0;
  141.         scanf("%d", &a);
  142.         if (a == 1)
  143.         {
  144.             zengJia();
  145.             break;
  146.         }
  147.         else
  148.         {
  149.             break;
  150.         }
  151.     }
  152. }
  153. // 删除功能定义
  154. void shanchu()
  155. {
  156.     printf("请输入需要删除的选择\n学号删除请按1\n姓名删除请按2\n性别删除请按3\n分数删除请按4\n删除所有请按5\n返回请按任意键\n");
  157.     int a = 0;
  158.     scanf("%d",&a);
  159.     if (a == 1) {
  160.         shanchuxuehao();
  161.     } else if (a == 2) {
  162.         shanchuxingming();
  163.     } else if (a == 3) {
  164.         shanchuxingbie();
  165.     } else if (a == 4) {
  166.         shanchufenshu();
  167.     } else if (a == 5){
  168.         shanchusuoyou();
  169.     }
  170. }
  171. void shanchuxuehao()
  172. {
  173.     // 提示用户需要删除该学生的学号
  174.     printf("请输入需要删除该学生的学号\n");
  175.     int n = 0;
  176.     scanf("%d",&n);
  177.     // 找到这个学号对应的数组
  178.     for (int i = 0,count = 0; i<100; i++)
  179.     {
  180.         // 定义一个空的学生变量a
  181.         struct Student a;
  182.         // 如果数组某一个元素的学号与需要删除的学号相等
  183.         if (str.number == n)
  184.         {
  185.             printf("您要删除的学生姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n如不是很按1(跳过继续查找),返回请按2,删除请按任意键\n",str.name, str.age, str.set, str.number,str.score);
  186.             int b = 0;
  187.             scanf("%d",&b);
  188.             if (b==1) {
  189.                 continue;
  190.             } else if (b ==2) {
  191.                 shanchu();
  192.             } else {
  193.                 str = a; // 然后将这个数组元素清空
  194.                 --count;
  195.             };
  196.         }
  197.         ++count;
  198.         if (count==100) {
  199.             printf("无此学生\n");
  200.             shanchu();
  201.         }
  202.     }
  203.    
  204. }
  205. void shanchuxingming()
  206. {
  207.     // 提示用户需要删除该学生的学姓名
  208.     printf("请输入需要删除该学生的姓名\n");
  209.     char n[10] = {0};
  210.     scanf("%s",n);
  211.     // 找到这个性别对应的数组
  212.     for (int i = 0,count = 0; i<100; i++)
  213.     {
  214.         // 定义一个空的学生变量a
  215.         struct Student a;
  216.         // 如果数组某一个元素的姓名与需要删除的姓名相等
  217.         if (strcmp(str.name, n) == 0)
  218.         {
  219.             printf("您要删除的学生姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n如不是很按1(跳过继续查找),返回请按2,删除请按任意键\n",str.name, str.age, str.set, str.number,str.score);
  220.             int b = 0;
  221.             scanf("%d",&b);
  222.             if (b==1) {
  223.                 continue;
  224.             } else if (b ==2) {
  225.                 shanchu();
  226.             } else {
  227.                 str = a; // 然后将这个数组元素清空
  228.                 --count;
  229.             };
  230.         }
  231.         ++count;
  232.         if (count==99) {
  233.             printf("无此学生\n");
  234.             shanchu();
  235.         }
  236.     }
  237. }
复制代码


评分

参与人数 2技术分 +1 黑马币 +5 收起 理由
Micro + 1 很给力!
张文文 + 5 很给力!

查看全部评分

19 个回复

正序浏览
是不是运气不出来哦?
回复 使用道具 举报
要是抽到这个题   可真是得先哭一会。
回复 使用道具 举报
我也是零基础,零基础学起来真难
回复 使用道具 举报
我也是这道题,感觉好难啊。。。。估计自己的知识量还不够吧
回复 使用道具 举报
我刚写完这个题目,我用的时switch ,一输入字母就GG,完全挡不住,我最后就直接说输入其它数字返回上一菜单,不让他们输入字母了,坑爹
回复 使用道具 举报
题目看似很短,其实功能很多,看完这些需要好久,学习一下
回复 使用道具 举报
最近也在为这个题发愁,来看看
回复 使用道具 举报
iOS开发用到C的地方不多,赶紧学OC吧,浪费那个时间,别人早就成大神了
回复 使用道具 举报
我只想问你是怎么把代码行数给弄上去的
回复 使用道具 举报
xiezhongmin 发表于 2015-2-8 09:18
又不是要你开发项目,写这么多干啥,就是几个函数的事!

我哪知道这是什么要求呀,所以尽量写好一点吧
再者说,自己写一个这个东西,真的进步很大
回复 使用道具 举报
又不是要你开发项目,写这么多干啥,就是几个函数的事!
回复 使用道具 举报

死循环可以考虑用while(1)多重判断可以考虑用switch。代码可以优化一下,嘿嘿。
回复 使用道具 举报
好贴,点赞!
回复 使用道具 举报
byuan04 发表于 2015-2-8 00:37
零基础还是很难的...

我同样是零基础不过学了一个多月了,已经把视频全部学完了,但是光凭学完的视频做出这些来,可能性并不大,因为这里面我用到了几个很小的功能都是零基础里面没有讲过的
回复 使用道具 举报
恋梦 发表于 2015-2-8 00:17
你感觉难还是不难

零基础还是很难的...
回复 使用道具 举报
没这题,不过感觉好难
回复 使用道具 举报
byuan04 发表于 2015-2-8 00:13
同做这道题 感觉难度和之前人做的完全不是一个级别的

你感觉难还是不难
回复 使用道具 举报
同做这道题 感觉难度和之前人做的完全不是一个级别的
回复 使用道具 举报
  1. void shanchuxingbie()
  2. {
  3. // 提示用户需要删除该学生的学姓别
  4. printf("请输入需要删除该学生的姓别(man或woman)\n");
  5. char n[10] = {0};
  6. scanf("%s",n);
  7. // 找到这个性别对应的数组
  8. for (int i = 0,count = 0; i<100; i++)
  9. {
  10. // 定义一个空的学生变量a
  11. struct Student a;
  12. // 如果数组某一个元素的姓名与需要删除的姓名相等
  13. if (strcmp(str[i].set, n) == 0)
  14. {
  15. printf("您要删除的学生姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n如不是很按1(跳过继续查找),返回请按2,删除请按任意键\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
  16. int b = 0;
  17. scanf("%d",&b);
  18. if (b==1) {
  19. continue;
  20. } else if (b ==2) {
  21. shanchu();
  22. } else {
  23. str[i] = a; // 然后将这个数组元素清空
  24. --count;
  25. };
  26. }
  27. ++count;
  28. if (count==99) {
  29. printf("无此学生\n");
  30. shanchu();
  31. }
  32. }

  33. }
  34. void shanchufenshu()
  35. {
  36. // 提示用户需要删除该学生的分数
  37. printf("请输入需要删除多少学生的分数以内的数据用“-”(如:90-100,单个成绩100-100)\n");
  38. int n = 0,m = 0;
  39. scanf("%d-%d",&n, &m);
  40. for (;n <= m;n++)
  41. {
  42. // 找到这个学号对应的数组
  43. for (int i = 0,count = 0; i<100; i++)
  44. {
  45. // 定义一个空的学生变量a printf("您要删除的学生是%d-%d将被删除,返回请按2,确认请按任意键\n",n,m);
  46. struct Student a;
  47. // 如果数组某一个元素的学号与需要删除的学号相等
  48. if (str[i].number == n)
  49. {
  50. str[i] = a; // 然后将这个数组元素清空
  51. --count;
  52. }
  53. ++count;
  54. if (count==99) {
  55. printf("无此学生\n");
  56. shanchu();
  57. }
  58. }
  59. }
  60. }
  61. void shanchusuoyou()
  62. {
  63. for (int i = 0; i<100; i++) {
  64. struct Student a;
  65. // 如果数组某一个元素的姓名与需要删除的姓名相等

  66. printf("您将要删除所有学生信息,返回请按1,删除请按任意键\n");
  67. int b = 0;
  68. scanf("%d",&b);
  69. if (b==1) {
  70. continue;
  71. } else if (b ==2) {
  72. shanchu();
  73. } else {
  74. str[i] = a; // 然后将这个数组元素清空
  75. };
  76. }
  77. }

  78. // 查询功能定义
  79. void chaxun()
  80. {
  81. printf("按学号查询请按1\n按姓名查询请按2\n按性别查询请按3\n按分数查询请按4\n查询所有(按录入顺序)请按5\n");
  82. int a = 0;
  83. scanf("%d", &a);
  84. if (a==1) {
  85. xuehao();
  86. } else if (a == 2) {
  87. xingming();
  88. } else if (a == 3) {
  89. xingbie();
  90. } else if (a == 4) {
  91. fenshu();
  92. } else if (a == 5) {
  93. suoyou();
  94. }
  95. printf("是否继续查询,查询请按1,返回菜单请按任意键\n");
  96. int b = 0;
  97. scanf("%d",&b);
  98. if (b == 1) {
  99. chaxun();
  100. }
  101. }
  102. void suoyou()
  103. {
  104. printf("从录入顺序\n");
  105. for (int i = 0; i<=99; i++) {
  106. printf("第%d个的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",(i+1),str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
  107. }
  108. }
  109. void fenshu()
  110. {
  111. // 提示用户输入需要查询的学生分数
  112. printf("请输入需要查询的学生分数\n");
  113. double n = 0;
  114. scanf("%lf",&n);
  115. // 将这个分数找出
  116. for (int i = 0,count = 0; i<100; i++)
  117. {
  118. // 如果数组的某一个元素分数与需要查找的元素分数相等
  119. if (str[i].score == n)
  120. {
  121. // 打印这个学生元素的所有信息
  122. printf("该学生的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
  123. --count;
  124. }
  125. ++count;
  126. // 遍历每一个分数,如果找不到打印无此学生,退出此功能
  127. if (count==100)
  128. {
  129. printf("无此学生\n");
  130. break;
  131. }
  132. }

  133. }

  134. void xingbie()
  135. {
  136. // 提示用户输入需要查询的学生姓别
  137. printf("请输入需要查询的学生姓别\n");
  138. char n[10] = {0};
  139. scanf("%s",n);
  140. // 将这个姓别找出
  141. for (int i = 0,count = 0; i<100; i++)
  142. {
  143. // 如果数组的某一个元素姓别与需要查找的元素姓别相等
  144. if (strcmp(str[i].set, n) == 0)
  145. {
  146. // 打印这个学生元素的所有信息
  147. printf("该学生的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
  148. --count;
  149. }
  150. ++count;
  151. // 遍历每一个姓别,如果找不到打印无此学生,退出此功能
  152. if (count == 100)
  153. {
  154. printf("无此学生\n");
  155. break;
  156. }
  157. }

  158. }

  159. void xingming()
  160. {
  161. // 提示用户输入需要查询的学生姓名
  162. printf("请输入需要查询的学生姓名\n");
  163. char n[10] = {0};
  164. scanf("%s",n);
  165. // 将这个姓名找出
  166. for (int i = 0, count = 0; i<100; i++)
  167. {
  168. // 如果数组的某一个元素姓名与需要查找的元素姓名相等
  169. if (strcmp(str[i].name, n) == 0)
  170. {
  171. // 打印这个学生元素的所有信息
  172. printf("该学生的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
  173. --count;
  174. }
  175. // 遍历每一个姓名,如果找不到打印无此学生,退出此功能
  176. ++count;
  177. if (count==100)
  178. {
  179. printf("无此学生\n");
  180. break;
  181. }

  182. }

  183. }
  184. void xuehao()
  185. {
  186. // 提示用户输入需要查询的学生学号
  187. printf("请输入需要查询的学生学号\n");
  188. int n = 0;
  189. scanf("%d",&n);
  190. // 将这个学号找出
  191. for (int i = 0; i<100; i++)
  192. {
  193. // 如果数组的某一个元素学号与需要查找的元素学号相等
  194. if (str[i].number == n)
  195. {
  196. // 打印这个学生元素的所有信息
  197. printf("该学生的姓名是%s、年龄是%d、性别是%s、学号是%d、分数是%f\n",str[i].name, str[i].age, str[i].set, str[i].number,str[i].score);
  198. break;
  199. }
  200. // 遍历每一个学号,如果找不到打印无此学生,退出此功能
  201. else if (i == 99)
  202. {
  203. printf("无此学生\n");
  204. break;
  205. }
  206. }

  207. }
  208. [/hide]
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马