C语言学生管理系统源码分享

  1 大家好
  2 我就是如假包换的...陈玲
  3 自从运营了C语言程序设计微信公众号
  4 很多粉丝都给我备注
  5 ...奇葩
  6 实在是不敢当
  7 也被人开始叫玲玲姐
  8 我知道
  9 很多人都想看我出境
 10 我本人也有 1 年多的舞台演讲训练
 11 实话告诉大家 —— 我喜欢出境
 12 
 13 不过,既然我们做编程语言公众号的,就要去掉其他因素,我们挖掘文字本身所蕴含的力量。所以,这次分享的表达方式就是 —— 纯文字。
 14 
 15 今天的分享,只有一个目的
 16 就是上代码
 17 那么,准备好了
 18 #include<stdio.h> 
 19 #include<stdlib.h> 
 20 //结构体可以存放的学生信息最大个数,不可变变量
 21  int const MAX_LENGTH=100; 
 22  //学生信息结构体数组,最多可以存放100个学生信息 
 23  struct student{
 24     int id; //学号 
 25     char *name; //姓名 
 26     int age; //年龄
 27     float c_score; //C语言成绩 
 28     float english_score; //英语成绩 
 29     float database_score; //数据库成绩
 30     float total_score; //总分 
 31  }student_array[MAX_LENGTH]; 
 32  
 33  //学生信息数量 
 34  int student_count=0; 
 35 
 36  //函数声明 
 37  void print_all_students();
 38  void input_info(); 
 39  void query_info();
 40  void modify_info();
 41  void delete_info(); 
 42  void compute_total_score();
 43  void sort_info(); 
 44  int search_one_student(); 
 45  void print_one_student(struct student one);
 46  void delete_one_student(int student_index);
 47  char * get_item_name(int item_index);
 48  void modify_one_student(int student_index);
 49  void sort_by_id();
 50  void sort_by_c_score(); 
 51  void sort_by_english_score(); 
 52  void sort_by_database_score();
 53 
 54  //主函数 
 55  int main()
 56  {
 57     while(1)
 58     { 
 59         printf("请选择要使用的功能:
");
 60         printf("录入信息,请输入1,然后回车!
");
 61         printf("查询信息,请输入2,然后回车!
"); 
 62         printf("修改信息,请输入3,然后回车!
"); 
 63         printf("删除信息,请输入4,然后回车!
"); 
 64         printf("计算总分,请输入5,然后回车!
"); 
 65         printf("排序信息,请输入6,然后回车!
"); 
 66         printf("输出全部,请输入0,然后回车!
");
 67         printf("退出程序,请输入-1,然后回车!
"); 
 68         //函数选择变量 
 69         int function=0;
 70         //输入选择的函数编号值 
 71         scanf("%d",&function); 
 72         //根据输入的函数编号,执行对应的功能
 73         switch(function){
 74         case -1: 
 75             exit(1);
 76         case 0: 
 77             print_all_students(); 
 78             break;
 79         case 1: 
 80             input_info();
 81             break;
 82         case 2:
 83             query_info();
 84             break; 
 85         case 3: 
 86             modify_info();
 87             break; 
 88         case 4: 
 89             delete_info();
 90             break; 
 91         case 5: 
 92             compute_total_score(); 
 93             break; 
 94         case 6:
 95             sort_info(); 
 96             break; 
 97         default: 
 98             printf("请输入正确的功能编号!!!

");
 99             break;
100         } 
101     } 
102     return 0; 
103  } 
104  
105  //录入信息函数
106 void input_info()
107  {
108     printf("当前功能————录入信息!
"); 
109     //判断是否还有空间 
110     if(student_count<MAX_LENGTH)
111     {
112         //声明一些临时变量
113         int id=0; char *name=(char *)malloc(100);
114         int age=0; float c_score=0; 
115         float english_score=0;
116         float database_score=0; 
117         printf("请输入学生信息,格式为:学号,姓名,年龄,C语言成绩,英语成绩,数据库成绩
");
118         scanf("%d %s %d %f %f %f",&id,name,&age,&c_score,&english_score,&database_score);
119         printf("学生信息校对:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f
",id,name,age,c_score,english_score,database_score); 
120         //学生信息加入结构体数组 
121         student_array[student_count].id=id;
122         student_array[student_count].name=name;
123         student_array[student_count].age=age;
124         student_array[student_count].c_score=c_score; 
125         student_array[student_count].english_score=english_score; 
126         student_array[student_count].database_score=database_score; 
127         student_count++; 
128         //是否继续录入信息
129         printf("是否继续录入信息?继续请输入y,返回主菜单输入n
");
130         char go_on; 
131         scanf("%s",&go_on); 
132         if(go_on=='y')
133         { 
134             input_info();
135         } 
136     }
137     else
138     { 
139         printf("学生结构体数据已满,可以删除一部分学生信息!
");
140     }
141  } 
142 
143 
144  //查询信息函数 
145 void query_info()
146  {
147     printf("当前功能————查询信息!
");
148     printf("请输入学生的学号
"); 
149     int id=0; 
150     scanf("%d",&id);
151     //查找输入id学生的序号
152     int student_index=search_one_student(id);
153     if(student_index!=-1)
154     {
155         print_one_student(student_array[student_index]); 
156     }
157     else
158     { 
159         printf("没有该学号的学生!
");
160     } 
161     //是否继续查询信息 
162     printf("是否继续查询信息?继续请输入y,返回主菜单输入n
");
163     char go_on; 
164     scanf("%s",&go_on);
165     if(go_on=='y') 
166         query_info();
167  } 
168  
169  
170  //修改信息函数
171 void modify_info()
172  { 
173     printf("当前功能————修改信息!
");
174     printf("请输入学生的学号
");
175     int id=0; 
176     scanf("%d",&id);
177     //查找输入id学生的序号
178     int student_index=search_one_student(id);
179     if(student_index!=-1)
180     { 
181         modify_one_student(student_index); 
182     }
183     else
184     { 
185         printf("没有该学号的学生!
");
186     } 
187 } 
188  
189  
190  //删除信息函数 
191 void delete_info()
192  { 
193     printf("当前功能————删除信息!
");
194     printf("请输入学生的学号
"); 
195     int id=0;
196     scanf("%d",&id);
197     //查找输入id学生的序号
198     int student_index=search_one_student(id);
199     if(student_index!=-1)
200     { 
201         //防止student_index被改变,传入temp_index计算
202         int temp_index=student_index;
203         print_one_student(student_array[temp_index]);
204         //删除前进行确认
205         printf("确定删除学号 %d 同学的信息?继续请输入y
",id);
206         char be_true; 
207         scanf("%s",&be_true);
208         if(be_true=='y')
209         { 
210             printf("%d
", student_index); 
211             //执行删除动作 
212             delete_one_student(student_index); 
213         } 
214     }
215     else
216     { 
217         printf("没有该学号的学生!
"); 
218     } 
219     //是否继续删除信息
220     printf("是否继续删除信息?继续请输入y,返回主菜单输入n
");
221     char go_on; 
222     scanf("%s",&go_on);
223     if(go_on=='y') 
224     delete_info();
225  } 
226  
227  
228  //计算总分函数 
229 void compute_total_score()
230  { 
231      printf("当前功能————计算总分!
"); 
232     for (int i = 0; i < student_count; ++i)
233     { 
234          student_array[i].total_score=student_array[i].c_score+student_array[i].english_score+student_array[i].database_score; 
235          print_one_student(student_array[i]);
236          printf("总成绩:%f
", student_array[i].total_score);
237     } 
238     printf("总分计算完成!!!
");
239  } 
240  
241  
242  //成绩排序函数
243 void sort_info()
244  {
245     printf("当前功能————成绩排序!
"); 
246     printf("排序前所有学生信息如下:
");
247     print_all_students();
248     int sort_type;
249     while(1)
250     { 
251      printf("请输入排序字段,学号:1,C语言成绩:2,英语成绩:3,数据库成绩:4
");
252      scanf("%d",&sort_type);
253      if(sort_type>=1&&sort_type<=4)
254      break; 
255     }
256     switch(sort_type)
257     { 
258     case 1: 
259         sort_by_id(); 
260         break; 
261     case 2:
262         sort_by_c_score();
263         break;
264     case 3: 
265         sort_by_english_score(); 
266         break; 
267     case 4: 
268         sort_by_database_score(); 
269         break;
270     } 
271      printf("排序后所有学生信息如下:
");
272      print_all_students(); 
273      //是否继续删除信息 
274      printf("是否继续排序信息?继续请输入y,返回主菜单输入n
"); 
275      char go_on;
276      scanf("%s",&go_on);
277     if(go_on=='y')
278         sort_info();
279  } 
280 
281 
282 //根据输入的学号,遍历结构体数组,若存在该学生,返回数组下标,不存在返回-1
283 int search_one_student(int id)
284  {
285     for (int i = 0; i < student_count; ++i)
286     { 
287         if(student_array[i].id==id)
288         { 
289             return i;
290         }
291     } 
292     return -1; 
293  } 
294 
295 
296 //输出某个学生的信息 
297 void print_one_student(struct student one)
298 {
299     printf("学生信息:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f
",one.id,one.name,one.age,one.c_score,one.english_score,one.database_score);
300 } 
301 
302 
303 //输出所有学生的信息
304 void print_all_students()
305 { 
306     if(student_count==0)
307     {
308         printf("暂无学生信息


");
309     }
310     for (int i = 0; i < student_count; ++i)
311     { 
312         print_one_student(student_array[i]);
313     } 
314 } 
315 
316 
317 void modify_one_student(int student_index)
318 { 
319     //修改前,输出学生信息 
320     print_one_student(student_array[student_index]); 
321     //字段序号初始值 
322     int item_index=0; 
323     //不允许修改学号字段 
324     while(1)
325     { 
326         printf("请输入要修改的字段序号,姓名:1,年龄:2,C语言成绩:3,英语成绩:4,数据库成绩:5
"); 
327         scanf("%d",&item_index); 
328         if(item_index>=1&&item_index<=5)
329         break; 
330     } 
331     switch(item_index)
332     { 
333         case 1: 
334             printf("请输入 %s 字段的新值
", get_item_name(item_index)); 
335             char* item_value_1=(char *)malloc(100);
336             ; 
337             scanf("%s",item_value_1);
338             student_array[student_index].name=item_value_1;
339             break;
340         case 2:
341             printf("请输入 %s 字段的新值
", get_item_name(item_index));
342             int item_value_2; 
343             scanf("%d",&item_value_2);
344             student_array[student_index].age=item_value_2;
345             break;
346         case 3: 
347             printf("请输入 %s 字段的新值
", get_item_name(item_index));
348             float item_value_3;
349             scanf("%f",&item_value_3); 
350             student_array[student_index].c_score=item_value_3;
351             break; 
352         case 4:
353             printf("请输入 %s 字段的新值
", get_item_name(item_index));
354             float item_value_4;
355             scanf("%f",&item_value_4); 
356             student_array[student_index].english_score=item_value_4;
357             break; 
358         case 5:
359             printf("请输入 %s 字段的新值
", get_item_name(item_index)); 
360             float item_value_5;
361             scanf("%f",&item_value_5); 
362             student_array[student_index].database_score=item_value_5;
363             break; 
364     }
365     printf("修改成功!新的学生信息如下:
");
366     //修改后输出学生信息 
367     print_one_student(student_array[student_index]);
368     //是否继续删除信息 
369     printf("是否继续修改该学生信息?继续请输入y,返回主菜单输入n
");
370     char go_on; 
371     scanf("%s",&go_on);
372     if(go_on=='y') 
373         modify_one_student(student_index);
374 } 
375 
376 
377 //删除数组对应序号的学生信息,把i位置后面的数据组元素向前移动覆盖i,student_count计数器减1 
378 void delete_one_student(int student_index)
379 {
380     for (int i = student_index; i < student_count-1; ++i) 
381     { 
382         student_array[i]=student_array[i+1]; 
383     } 
384     student_count--;
385     printf("删除完成


"); 
386 } 
387 
388 
389 //根据输入的字段序号,返回字段名称
390 char * get_item_name(int item_index)
391 { 
392     switch(item_index)
393     {     
394         case 0:
395             return "学号";     
396         case 1: 
397             return "姓名"; 
398         case 2:
399             return "年龄";
400         case 3:
401             return "C语言成绩"; 
402         case 4:
403             return "英语成绩";
404         case 5: 
405             return "数据库成绩";
406         default: 
407                 return "";
408     } 
409 } 
410 
411 
412 //按照id排序,使用最简单的冒泡排序法
413 void sort_by_id()
414 { 
415     for (int i = 0; i < student_count; ++i)
416     {
417         for (int j = i; j < student_count; ++j) 
418         { 
419             if(student_array[i].id>student_array[j].id)
420             {                     
421                 struct student temp=student_array[i]; 
422                 student_array[i]=student_array[j];
423                 student_array[j]=temp;
424             } 
425         } 
426     } 
427     printf("按照 学号 排序完成
");
428 } 
429 
430 
431 //按照C语言成绩排序,使用最简单的冒泡排序法
432 void sort_by_c_score()
433 { 
434     for (int i = 0; i < student_count; ++i)
435     { 
436         for (int j = i; j < student_count; ++j)
437         {
438             if(student_array[i].c_score>student_array[j].c_score)
439             { 
440                 struct student temp=student_array[i];
441                 student_array[i]=student_array[j]; 
442                 student_array[j]=temp;
443             } 
444         } 
445     }
446     printf("按照 C语言成绩 排序完成
");
447 } 
448 
449 
450 //按照英语成绩排序,使用最简单的冒泡排序法 
451 void sort_by_english_score()
452 { 
453     for (int i = 0; i < student_count; ++i)
454     { 
455         for (int j = i; j < student_count; ++j)
456         { 
457             if(student_array[i].english_score>student_array[j].english_score)
458             { 
459                 struct student temp=student_array[i]; 
460                 student_array[i]=student_array[j]; 
461                 student_array[j]=temp;
462             }
463         }
464     }
465     printf("按照 英语成绩 排序完成
"); 
466 } 
467 
468 
469 //按照数据库成绩排序,使用最简单的冒泡排序法 
470 void sort_by_database_score()
471 { 
472     for (int i = 0; i < student_count; ++i)
473     { 
474         for (int j = i; j < student_count; ++j)
475         {
476             if(student_array[i].database_score>student_array[j].database_score)
477             { 
478                 struct student temp=student_array[i]; 
479                 student_array[i]=student_array[j]; 
480                 student_array[j]=temp;
481             } 
482         }
483     } 
484     printf("按照 数据库成绩 排序完成
");
485 }
486 
487 转发自:微信公众号 xs-cyy
原文地址:https://www.cnblogs.com/zhubinglong/p/6640710.html