猪冰龙

导航

c语言学生信息管理系统-学习结构体

  1 #include<stdio.h> 
  2 #include<stdlib.h> 
  3 //结构体可以存放的学生信息最大个数,不可变变量
  4  int const MAX_LENGTH=100; 
  5  //学生信息结构体数组,最多可以存放100个学生信息 
  6  struct student{
  7     int id; //学号 
  8     char *name; //姓名 
  9     int age; //年龄
 10     float c_score; //C语言成绩 
 11     float english_score; //英语成绩 
 12     float database_score; //数据库成绩
 13     float total_score; //总分 
 14  }student_array[MAX_LENGTH]; 
 15  
 16  //学生信息数量 
 17  int student_count=0; 
 18 
 19  //函数声明 
 20  void print_all_students();
 21  void input_info(); 
 22  void query_info();
 23  void modify_info();
 24  void delete_info(); 
 25  void compute_total_score();
 26  void sort_info(); 
 27  int search_one_student(); 
 28  void print_one_student(struct student one);
 29  void delete_one_student(int student_index);
 30  char * get_item_name(int item_index);
 31  void modify_one_student(int student_index);
 32  void sort_by_id();
 33  void sort_by_c_score(); 
 34  void sort_by_english_score(); 
 35  void sort_by_database_score();
 36 
 37  //主函数 
 38  int main()
 39  {
 40     while(1)
 41     { 
 42         printf("请选择要使用的功能:\n");
 43         printf("录入信息,请输入1,然后回车!\n");
 44         printf("查询信息,请输入2,然后回车!\n"); 
 45         printf("修改信息,请输入3,然后回车!\n"); 
 46         printf("删除信息,请输入4,然后回车!\n"); 
 47         printf("计算总分,请输入5,然后回车!\n"); 
 48         printf("排序信息,请输入6,然后回车!\n"); 
 49         printf("输出全部,请输入0,然后回车!\n");
 50         printf("退出程序,请输入-1,然后回车!\n"); 
 51         //函数选择变量 
 52         int function=0;
 53         //输入选择的函数编号值 
 54         scanf("%d",&function); 
 55         //根据输入的函数编号,执行对应的功能
 56         switch(function){
 57         case -1: 
 58             exit(1);
 59         case 0: 
 60             print_all_students(); 
 61             break;
 62         case 1: 
 63             input_info();
 64             break;
 65         case 2:
 66             query_info();
 67             break; 
 68         case 3: 
 69             modify_info();
 70             break; 
 71         case 4: 
 72             delete_info();
 73             break; 
 74         case 5: 
 75             compute_total_score(); 
 76             break; 
 77         case 6:
 78             sort_info(); 
 79             break; 
 80         default: 
 81             printf("请输入正确的功能编号!!!\n\n");
 82             break;
 83         } 
 84     } 
 85     return 0; 
 86  } 
 87  
 88  //录入信息函数
 89 void input_info()
 90  {
 91     printf("当前功能————录入信息!\n"); 
 92     //判断是否还有空间 
 93     if(student_count<MAX_LENGTH)
 94     {
 95         //声明一些临时变量
 96         int id=0; char *name=(char *)malloc(100);
 97         int age=0; float c_score=0; 
 98         float english_score=0;
 99         float database_score=0; 
100         printf("请输入学生信息,格式为:学号,姓名,年龄,C语言成绩,英语成绩,数据库成绩\n");
101         scanf("%d %s %d %f %f %f",&id,name,&age,&c_score,&english_score,&database_score);
102         printf("学生信息校对:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f\n",id,name,age,c_score,english_score,database_score); 
103         //学生信息加入结构体数组 
104         student_array[student_count].id=id;
105         student_array[student_count].name=name;
106         student_array[student_count].age=age;
107         student_array[student_count].c_score=c_score; 
108         student_array[student_count].english_score=english_score; 
109         student_array[student_count].database_score=database_score; 
110         student_count++; 
111         //是否继续录入信息
112         printf("是否继续录入信息?继续请输入y,返回主菜单输入n\n");
113         char go_on; 
114         scanf("%s",&go_on); 
115         if(go_on=='y')
116         { 
117             input_info();
118         } 
119     }
120     else
121     { 
122         printf("学生结构体数据已满,可以删除一部分学生信息!\n");
123     }
124  } 
125 
126 
127  //查询信息函数 
128 void query_info()
129  {
130     printf("当前功能————查询信息!\n");
131     printf("请输入学生的学号\n"); 
132     int id=0; 
133     scanf("%d",&id);
134     //查找输入id学生的序号
135     int student_index=search_one_student(id);
136     if(student_index!=-1)
137     {
138         print_one_student(student_array[student_index]); 
139     }
140     else
141     { 
142         printf("没有该学号的学生!\n");
143     } 
144     //是否继续查询信息 
145     printf("是否继续查询信息?继续请输入y,返回主菜单输入n\n");
146     char go_on; 
147     scanf("%s",&go_on);
148     if(go_on=='y') 
149         query_info();
150  } 
151  
152  
153  //修改信息函数
154 void modify_info()
155  { 
156     printf("当前功能————修改信息!\n");
157     printf("请输入学生的学号\n");
158     int id=0; 
159     scanf("%d",&id);
160     //查找输入id学生的序号
161     int student_index=search_one_student(id);
162     if(student_index!=-1)
163     { 
164         modify_one_student(student_index); 
165     }
166     else
167     { 
168         printf("没有该学号的学生!\n");
169     } 
170 } 
171  
172  
173  //删除信息函数 
174 void delete_info()
175  { 
176     printf("当前功能————删除信息!\n");
177     printf("请输入学生的学号\n"); 
178     int id=0;
179     scanf("%d",&id);
180     //查找输入id学生的序号
181     int student_index=search_one_student(id);
182     if(student_index!=-1)
183     { 
184         //防止student_index被改变,传入temp_index计算
185         int temp_index=student_index;
186         print_one_student(student_array[temp_index]);
187         //删除前进行确认
188         printf("确定删除学号 %d 同学的信息?继续请输入y\n",id);
189         char be_true; 
190         scanf("%s",&be_true);
191         if(be_true=='y')
192         { 
193             printf("%d\n", student_index); 
194             //执行删除动作 
195             delete_one_student(student_index); 
196         } 
197     }
198     else
199     { 
200         printf("没有该学号的学生!\n"); 
201     } 
202     //是否继续删除信息
203     printf("是否继续删除信息?继续请输入y,返回主菜单输入n\n");
204     char go_on; 
205     scanf("%s",&go_on);
206     if(go_on=='y') 
207     delete_info();
208  } 
209  
210  
211  //计算总分函数 
212 void compute_total_score()
213  { 
214      printf("当前功能————计算总分!\n"); 
215     for (int i = 0; i < student_count; ++i)
216     { 
217          student_array[i].total_score=student_array[i].c_score+student_array[i].english_score+student_array[i].database_score; 
218          print_one_student(student_array[i]);
219          printf("总成绩:%f\n", student_array[i].total_score);
220     } 
221     printf("总分计算完成!!!\n");
222  } 
223  
224  
225  //成绩排序函数
226 void sort_info()
227  {
228     printf("当前功能————成绩排序!\n"); 
229     printf("排序前所有学生信息如下:\n");
230     print_all_students();
231     int sort_type;
232     while(1)
233     { 
234      printf("请输入排序字段,学号:1,C语言成绩:2,英语成绩:3,数据库成绩:4\n");
235      scanf("%d",&sort_type);
236      if(sort_type>=1&&sort_type<=4)
237      break; 
238     }
239     switch(sort_type)
240     { 
241     case 1: 
242         sort_by_id(); 
243         break; 
244     case 2:
245         sort_by_c_score();
246         break;
247     case 3: 
248         sort_by_english_score(); 
249         break; 
250     case 4: 
251         sort_by_database_score(); 
252         break;
253     } 
254      printf("排序后所有学生信息如下:\n");
255      print_all_students(); 
256      //是否继续删除信息 
257      printf("是否继续排序信息?继续请输入y,返回主菜单输入n\n"); 
258      char go_on;
259      scanf("%s",&go_on);
260     if(go_on=='y')
261         sort_info();
262  } 
263 
264 
265 //根据输入的学号,遍历结构体数组,若存在该学生,返回数组下标,不存在返回-1
266 int search_one_student(int id)
267  {
268     for (int i = 0; i < student_count; ++i)
269     { 
270         if(student_array[i].id==id)
271         { 
272             return i;
273         }
274     } 
275     return -1; 
276  } 
277 
278 
279 //输出某个学生的信息 
280 void print_one_student(struct student one)
281 {
282     printf("学生信息:学号:%d,姓名:%s,年龄:%d,C语言成绩:%f,英语成绩:%f,数据库成绩:%f\n",one.id,one.name,one.age,one.c_score,one.english_score,one.database_score);
283 } 
284 
285 
286 //输出所有学生的信息
287 void print_all_students()
288 { 
289     if(student_count==0)
290     {
291         printf("暂无学生信息\n\n\n");
292     }
293     for (int i = 0; i < student_count; ++i)
294     { 
295         print_one_student(student_array[i]);
296     } 
297 } 
298 
299 
300 void modify_one_student(int student_index)
301 { 
302     //修改前,输出学生信息 
303     print_one_student(student_array[student_index]); 
304     //字段序号初始值 
305     int item_index=0; 
306     //不允许修改学号字段 
307     while(1)
308     { 
309         printf("请输入要修改的字段序号,姓名:1,年龄:2,C语言成绩:3,英语成绩:4,数据库成绩:5\n"); 
310         scanf("%d",&item_index); 
311         if(item_index>=1&&item_index<=5)
312         break; 
313     } 
314     switch(item_index)
315     { 
316         case 1: 
317             printf("请输入 %s 字段的新值\n", get_item_name(item_index)); 
318             char* item_value_1=(char *)malloc(100);
319             ; 
320             scanf("%s",item_value_1);
321             student_array[student_index].name=item_value_1;
322             break;
323         case 2:
324             printf("请输入 %s 字段的新值\n", get_item_name(item_index));
325             int item_value_2; 
326             scanf("%d",&item_value_2);
327             student_array[student_index].age=item_value_2;
328             break;
329         case 3: 
330             printf("请输入 %s 字段的新值\n", get_item_name(item_index));
331             float item_value_3;
332             scanf("%f",&item_value_3); 
333             student_array[student_index].c_score=item_value_3;
334             break; 
335         case 4:
336             printf("请输入 %s 字段的新值\n", get_item_name(item_index));
337             float item_value_4;
338             scanf("%f",&item_value_4); 
339             student_array[student_index].english_score=item_value_4;
340             break; 
341         case 5:
342             printf("请输入 %s 字段的新值\n", get_item_name(item_index)); 
343             float item_value_5;
344             scanf("%f",&item_value_5); 
345             student_array[student_index].database_score=item_value_5;
346             break; 
347     }
348     printf("修改成功!新的学生信息如下:\n");
349     //修改后输出学生信息 
350     print_one_student(student_array[student_index]);
351     //是否继续删除信息 
352     printf("是否继续修改该学生信息?继续请输入y,返回主菜单输入n\n");
353     char go_on; 
354     scanf("%s",&go_on);
355     if(go_on=='y') 
356         modify_one_student(student_index);
357 } 
358 
359 
360 //删除数组对应序号的学生信息,把i位置后面的数据组元素向前移动覆盖i,student_count计数器减1 
361 void delete_one_student(int student_index)
362 {
363     for (int i = student_index; i < student_count-1; ++i) 
364     { 
365         student_array[i]=student_array[i+1]; 
366     } 
367     student_count--;
368     printf("删除完成\n\n\n"); 
369 } 
370 
371 
372 //根据输入的字段序号,返回字段名称
373 char * get_item_name(int item_index)
374 { 
375     switch(item_index)
376     {     
377         case 0:
378             return "学号";     
379         case 1: 
380             return "姓名"; 
381         case 2:
382             return "年龄";
383         case 3:
384             return "C语言成绩"; 
385         case 4:
386             return "英语成绩";
387         case 5: 
388             return "数据库成绩";
389         default: 
390                 return "";
391     } 
392 } 
393 
394 
395 //按照id排序,使用最简单的冒泡排序法
396 void sort_by_id()
397 { 
398     for (int i = 0; i < student_count; ++i)
399     {
400         for (int j = i; j < student_count; ++j) 
401         { 
402             if(student_array[i].id>student_array[j].id)
403             {                     
404                 struct student temp=student_array[i]; 
405                 student_array[i]=student_array[j];
406                 student_array[j]=temp;
407             } 
408         } 
409     } 
410     printf("按照 学号 排序完成\n");
411 } 
412 
413 
414 //按照C语言成绩排序,使用最简单的冒泡排序法
415 void sort_by_c_score()
416 { 
417     for (int i = 0; i < student_count; ++i)
418     { 
419         for (int j = i; j < student_count; ++j)
420         {
421             if(student_array[i].c_score>student_array[j].c_score)
422             { 
423                 struct student temp=student_array[i];
424                 student_array[i]=student_array[j]; 
425                 student_array[j]=temp;
426             } 
427         } 
428     }
429     printf("按照 C语言成绩 排序完成\n");
430 } 
431 
432 
433 //按照英语成绩排序,使用最简单的冒泡排序法 
434 void sort_by_english_score()
435 { 
436     for (int i = 0; i < student_count; ++i)
437     { 
438         for (int j = i; j < student_count; ++j)
439         { 
440             if(student_array[i].english_score>student_array[j].english_score)
441             { 
442                 struct student temp=student_array[i]; 
443                 student_array[i]=student_array[j]; 
444                 student_array[j]=temp;
445             }
446         }
447     }
448     printf("按照 英语成绩 排序完成\n"); 
449 } 
450 
451 
452 //按照数据库成绩排序,使用最简单的冒泡排序法 
453 void sort_by_database_score()
454 { 
455     for (int i = 0; i < student_count; ++i)
456     { 
457         for (int j = i; j < student_count; ++j)
458         {
459             if(student_array[i].database_score>student_array[j].database_score)
460             { 
461                 struct student temp=student_array[i]; 
462                 student_array[i]=student_array[j]; 
463                 student_array[j]=temp;
464             } 
465         }
466     } 
467     printf("按照 数据库成绩 排序完成\n");
468 }

 转发自:http://mp.weixin.qq.com/s/MGaBxgZGJ5WFBieVLMmdCg

posted on 2017-03-24 16:02  猪冰龙  阅读(1815)  评论(0编辑  收藏  举报