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("请选择要使用的功能:\n");
60 printf("录入信息,请输入1,然后回车!\n");
61 printf("查询信息,请输入2,然后回车!\n");
62 printf("修改信息,请输入3,然后回车!\n");
63 printf("删除信息,请输入4,然后回车!\n");
64 printf("计算总分,请输入5,然后回车!\n");
65 printf("排序信息,请输入6,然后回车!\n");
66 printf("输出全部,请输入0,然后回车!\n");
67 printf("退出程序,请输入-1,然后回车!\n");
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("请输入正确的功能编号!!!\n\n");
99 break;
100 }
101 }
102 return 0;
103 }
104
105 //录入信息函数
106 void input_info()
107 {
108 printf("当前功能————录入信息!\n");
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语言成绩,英语成绩,数据库成绩\n");
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\n",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\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("学生结构体数据已满,可以删除一部分学生信息!\n");
140 }
141 }
142
143
144 //查询信息函数
145 void query_info()
146 {
147 printf("当前功能————查询信息!\n");
148 printf("请输入学生的学号\n");
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("没有该学号的学生!\n");
160 }
161 //是否继续查询信息
162 printf("是否继续查询信息?继续请输入y,返回主菜单输入n\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("当前功能————修改信息!\n");
174 printf("请输入学生的学号\n");
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("没有该学号的学生!\n");
186 }
187 }
188
189
190 //删除信息函数
191 void delete_info()
192 {
193 printf("当前功能————删除信息!\n");
194 printf("请输入学生的学号\n");
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\n",id);
206 char be_true;
207 scanf("%s",&be_true);
208 if(be_true=='y')
209 {
210 printf("%d\n", student_index);
211 //执行删除动作
212 delete_one_student(student_index);
213 }
214 }
215 else
216 {
217 printf("没有该学号的学生!\n");
218 }
219 //是否继续删除信息
220 printf("是否继续删除信息?继续请输入y,返回主菜单输入n\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("当前功能————计算总分!\n");
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\n", student_array[i].total_score);
237 }
238 printf("总分计算完成!!!\n");
239 }
240
241
242 //成绩排序函数
243 void sort_info()
244 {
245 printf("当前功能————成绩排序!\n");
246 printf("排序前所有学生信息如下:\n");
247 print_all_students();
248 int sort_type;
249 while(1)
250 {
251 printf("请输入排序字段,学号:1,C语言成绩:2,英语成绩:3,数据库成绩:4\n");
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("排序后所有学生信息如下:\n");
272 print_all_students();
273 //是否继续删除信息
274 printf("是否继续排序信息?继续请输入y,返回主菜单输入n\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\n",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("暂无学生信息\n\n\n");
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\n");
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 字段的新值\n", 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 字段的新值\n", 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 字段的新值\n", 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 字段的新值\n", 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 字段的新值\n", 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("修改成功!新的学生信息如下:\n");
366 //修改后输出学生信息
367 print_one_student(student_array[student_index]);
368 //是否继续删除信息
369 printf("是否继续修改该学生信息?继续请输入y,返回主菜单输入n\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("删除完成\n\n\n");
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("按照 学号 排序完成\n");
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语言成绩 排序完成\n");
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("按照 英语成绩 排序完成\n");
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("按照 数据库成绩 排序完成\n");
485 }
486
487 转发自:微信公众号 xs-cyy