当前位置:   article > 正文

C语言:基于顺序表的学生管理系统,超级详细,全部都有注释,看完不懂来扇我。_基于c语言学生信息管理系统毕业论文

基于c语言学生信息管理系统毕业论文

1.基本功能

1.添加 2.删除 3.修改 4.查找 5.排序 6.展示 7.退出

2.代码实现

2.1头文件

  1. #ifndef __STU_H__
  2. #define __STU_H__
  3. #define MAX_STU 30
  4. typedef struct{
  5. char name[20];
  6. char sex;
  7. int score;
  8. }stu_t;
  9. typedef struct{
  10. stu_t stu[MAX_STU];
  11. int n; //当前班级内学生的个数
  12. }class_t;
  13. #define PRINT_ERR(msg) do{\
  14. printf("%s",msg);\
  15. while(getchar()!='\n');\
  16. goto retry;\
  17. }while(0)
  18. #define ADD_STU 1
  19. #define DEL_STU 2
  20. #define MOD_STU 3
  21. #define FIND_STU 4
  22. #define SORT_STU 5
  23. #define SHOW_STU 6
  24. #define QUIT_STU 7
  25. int add_stu(class_t *cls);
  26. int delete_stu(class_t *cls);
  27. void show_stu(class_t *cls);
  28. int find_stu(class_t *cls);
  29. void modify_stu(class_t *cls);
  30. void sort_stu(class_t *cls);
  31. #endif

2.2函数块

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "stu.h"
  4. static int num;
  5. void input_stu(stu_t *stu)
  6. {
  7. int ret;
  8. retry:
  9. printf("input (name sex score) > ");
  10. //scanf的返回值是输入成功的项目的个数
  11. ret = scanf("%s %c %d",
  12. stu->name,
  13. &stu->sex,
  14. &stu->score);
  15. if(ret != 3)
  16. PRINT_ERR("input iterm error,try again\n");
  17. if((stu->sex != 'm') &&
  18. (stu->sex != 'w'))
  19. PRINT_ERR("input sex error,try again\n");
  20. if((stu->score < 0) ||
  21. (stu->score > 100))
  22. PRINT_ERR("input score error,try again\n");
  23. }
  24. int add_stu(class_t *cls)
  25. {
  26. if((++cls->n) >= MAX_STU){
  27. printf("class full,try again\n");
  28. return -1;
  29. }
  30. input_stu(&cls->stu[cls->n]);
  31. return 0;
  32. }
  33. int delete_stu(class_t *cls)
  34. {
  35. int i,j;
  36. char name[20] = {0};
  37. //1.判断班级内的学生是否是空
  38. if(cls->n < 0){
  39. printf("班级内没有学生\n");
  40. return 0;
  41. }
  42. //2.输入删除学生的姓名
  43. printf("input delete stu name > ");
  44. scanf("%s",name);
  45. getchar();
  46. //3.开始删除
  47. for(i=j=0;i<=cls->n;i++){
  48. if(strcmp(name,cls->stu[i].name)){
  49. cls->stu[j] = cls->stu[i];
  50. j++;
  51. }
  52. }
  53. //4.重置n的值
  54. cls->n = j-1;
  55. printf("删除了%d个学生\n",i-j);
  56. return i-j;
  57. }
  58. void print_info(stu_t *stu)
  59. {
  60. printf("name = %-10s,sex = %c,score = %d\n",
  61. stu->name,
  62. stu->sex,
  63. stu->score);
  64. }
  65. void show_stu(class_t *cls)
  66. {
  67. int i;
  68. for(i=0;i<=cls->n;i++){
  69. print_info(&cls->stu[i]);
  70. }
  71. }
  72. int find_stu(class_t *cls)
  73. {
  74. int i,ret=0;
  75. char name[20] = {0};
  76. num=0;
  77. printf("input stu name > ");
  78. scanf("%s",name);
  79. getchar();
  80. for(i=0;i<=cls->n;i++){
  81. if(strcmp(name,cls->stu[i].name)==0){
  82. print_info(&cls->stu[i]);
  83. num = num | 1<<i;
  84. ret++;
  85. }
  86. }
  87. return ret;
  88. }
  89. void modify_stu(class_t *cls)
  90. {
  91. int i,which,tmp=0,j;
  92. //1.查找学并获取查找到的学生的个数
  93. i = find_stu(cls);
  94. if(i==0){
  95. printf("查找学生失败,请查证后输入\n");
  96. return ;
  97. }
  98. printf("共查找到了%d个学生\n",i);
  99. retry:
  100. printf("请输出要修改第几个学生信息 > ");
  101. scanf("%d",&which);
  102. getchar();
  103. if(which <=0 || which >i){
  104. printf("input error,try again\n");
  105. goto retry;
  106. }
  107. for(j=0;j<=29;j++){
  108. if(num>>j & 0x1){
  109. tmp++;
  110. if(tmp == which) break;
  111. }
  112. }
  113. //2.修改学生信息
  114. printf("正在修改%s学生的信息\n",cls->stu[j].name);
  115. input_stu(&cls->stu[j]);
  116. }
  117. void sort_stu(class_t *cls)
  118. {
  119. stu_t tmp;
  120. int i,j;
  121. int flags=0;
  122. for(i=0;i<cls->n;i++){
  123. for(flags=j=0;j<cls->n-i;j++){
  124. if(cls->stu[j].score>cls->stu[j+1].score){
  125. tmp=cls->stu[j];
  126. cls->stu[j] = cls->stu[j+1];
  127. cls->stu[j+1] = tmp;
  128. flags=1;
  129. }
  130. }
  131. if(flags == 0) break;
  132. }
  133. }

3main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "stu.h"
  4. int main(int argc, const char *argv[])
  5. {
  6. int chose,loop=1;
  7. //1.创建班级
  8. class_t *cls =(class_t *) malloc(sizeof(class_t));
  9. if(cls == NULL){
  10. printf("malloc memory error\n");
  11. return -1;
  12. }
  13. cls->n=-1;
  14. while(loop){
  15. puts("-----------------欢迎使用学生管理系统-----------------------");
  16. puts("-----1.添加 2.删除 3.修改 4.查找 5.排序 6.展示 7.退出-------");
  17. puts("------------------------------------------------------------");
  18. printf("input chose > ");
  19. scanf("%d",&chose);
  20. getchar();
  21. switch(chose){
  22. case ADD_STU:
  23. add_stu(cls);
  24. break;
  25. case DEL_STU:
  26. delete_stu(cls);
  27. break;
  28. case MOD_STU:
  29. modify_stu(cls);
  30. break;
  31. case FIND_STU:
  32. find_stu(cls);
  33. break;
  34. case SORT_STU:
  35. sort_stu(cls);
  36. break;
  37. case SHOW_STU:
  38. show_stu(cls);
  39. break;
  40. case QUIT_STU:
  41. printf("退出学生管理系统\n");
  42. loop=0;
  43. break;
  44. default:
  45. printf("输入错误,请重新选择\n");
  46. break;
  47. }
  48. }
  49. //4.释放内存
  50. if(cls != NULL){
  51. free(cls);
  52. cls=NULL;
  53. }
  54. return 0;
  55. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/807637
推荐阅读
相关标签
  

闽ICP备14008679号