仿写学生管理系统

时间:2020-03-24
本文章向大家介绍仿写学生管理系统,主要包括仿写学生管理系统使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
  1 #include <stdio.h>
  2 
  3 #include <stdlib.h>
  4 
  5 #include <string.h>
  6 
  7 
  8 
  9 typedef struct _node
 10 
 11 {
 12 
 13   char name[64];
 14 
 15   char id[10];
 16 
 17   char score[64];
 18 
 19   struct _node *next;
 20 
 21 } Node;
 22 
 23 
 24 
 25 typedef struct _list
 26 
 27 {
 28 
 29   Node *head;
 30 
 31 } List;
 32 
 33 
 34 
 35 //--1--插入新的学生(头插法)
 36 
 37 void AddStudentByHead(List *list);
 38 
 39 //尾插法V1
 40 
 41 void AddStudentByEndV1(List *list);
 42 
 43 //尾插法V2只能单独使用
 44 
 45 void AddStudentByEndV2(List *list);
 46 
 47 void ChangeStudent(List *list, char *input);
 48 
 49 void Input(Node *p);
 50 
 51 int Search(List *list, char *input);
 52 
 53 void Delete(List *list, char *input);
 54 
 55 void PrintStudent(List *list);
 56 
 57 void ClearList(List *list);
 58 
 59 Node *PrintFlage(List *list, char *input);
 60 
 61 
 62 
 63 int main(void)
 64 
 65 {
 66 
 67   List list;
 68 
 69   list.head = NULL;
 70 
 71   char code;
 72 
 73   int c;
 74 
 75   char input1[64];
 76 
 77   char input2[64];
 78 
 79   char input3[64];
 80 
 81   int flag = 0;
 82 
 83   Node *temp;
 84 
 85   while (1)
 86 
 87   {
 88 
 89 ​    printf("\n\
 90 
 91 ​    ╔———————————————学生信息管理系统————————————————╗\n\
 92 
 93 ​                            \n\
 94 
 95 ​    =============== 功能菜单 ================\n\
 96 
 97 ​                      \n\
 98 
 991 录入学生信息\n\
100 
1012 查找学生信息\n\
102 
1034 删除学生信息\n\
104 
1053 修改学生信息\n\
106 
1075 显示所有学生信息\n\
108 
1096 退出系统\n\
110 
111 ​    ==========================================\n\
112 
113 ​    说明:通过数字选择菜单\n\
114 
115   ╚——————————————————————————————————————————————╝\n");
116 
117 
118 
119 
120 
121 ​    printf("请输入指令代码(1-6)\n");
122 
123do
124 
125 ​    {
126 
127 ​      scanf("%c", &code);
128 
129 ​    } while (code>54||code<49);
130 
131 132 
133    
134 
135 
136 
137switch (code)
138 
139 ​    {
140 
141 
142 
143case '1':
144 
145 ​      printf("请选择插入学生的方法(1-头插法 2-尾插法V1):");
146 
147 ​      scanf("%d", &c);
148 
149 
150 
151switch (c)
152 
153 ​      {
154 
155case 1:
156 
157 ​        AddStudentByHead(&list);
158 
159break;
160 
161case 2:
162 
163 ​        AddStudentByEndV1(&list);
164 
165break;
166 
167 
168 
169default:
170 
171 ​        printf("输入指令错误\n");
172 
173 ​      }
174 
175break;
176 
177 
178 
179case '2':
180 
181 ​      printf("请输入你要查找的学生:");
182 
183 ​      scanf("%s", input1);
184 
185 ​      flag = (Search(&list, input1));
186 
187if (flag > 0)
188 
189 ​      {
190 
191 ​        temp = PrintFlage(&list, input1);
192 
193 ​        printf("学生姓名:%s\t学号%s\t分数:%s\t", temp->name, temp->id, temp->score);
194 
195 ​      }
196 
197else
198 
199 ​      {
200 
201 ​        printf("不好意思,查无此人\n");
202 
203 ​      }
204 
205break;
206 
207 
208 
209case '3':
210 
211 ​      printf("请输入你要更改的学生名字:");
212 
213 ​      scanf("%s", input2);
214 
215 ​      flag = Search(&list, input2);
216 
217 ​      temp = PrintFlage(&list, input2);
218 
219if (flag > 0)
220 
221 ​      {
222 
223 ​        printf("当前的学生信息为:\n");
224 
225 ​        printf("学生姓名:%s\t学号%s\t分数:%s\t", temp->name, temp->id, temp->score);
226 
227 ​        printf("请输入您要更改的学生信息\n");
228 
229 ​        ChangeStudent(&list, input2);
230 
231 ​      }
232 
233else
234 
235 ​      {
236 
237 ​        printf("不好意思,你要更改的学生名字尚未存在\n");
238 
239 ​      }
240 
241break;
242 
243 
244 
245case '4':
246 
247 
248 
249 ​      printf("请输入你要删除的学生名字:");
250 
251 ​      scanf("%s", input3);
252 
253if (Search(&list, input3) > 0)
254 
255 ​      {
256 
257 ​        Delete(&list, input3);
258 
259 ​      }
260 
261else
262 
263 ​      {
264 
265 ​        printf("不好意思,你要删除的学生名字尚未存在\n");
266 
267 ​      }
268 
269break;
270 
271 
272 
273case '5':
274 
275 ​      PrintStudent(&list);
276 
277break;
278 
279case '6':
280 
281if (!list.head)
282 
283 ​      {
284 
285 ​        printf("还没有信息呢\n");
286 
287 ​      }
288 
289goto END;
290 
291 
292 
293default:
294 
295 ​      printf("输入指令错误\n");
296 
297break;
298 
299 ​    }
300 
301 ​    printf("^__^\n");
302 
303 ​    printf("\n\n");
304 
305   }
306 
307 END:
308 
309   ClearList(&list), printf("删库跑路成功^__^\n");
310 
311 
312 
313   system("pause");
314 
315   return 0;
316 
317 }
318 
319 //--1--插入新的学生
320 
321 void AddStudentByHead(List *list)
322 
323 {
324 
325   Node *p, *temp;
326 
327   p = (Node *)malloc(sizeof(Node));
328 
329   Input(p);
330 
331 
332 
333   if (list->head)
334 
335   {
336 
337 ​    temp = list->head;
338 
339 ​    list->head = p;
340 
341 ​    p->next = temp;
342 
343   }
344 
345   else
346 
347   {
348 
349 ​    list->head = p;
350 
351 ​    p->next = NULL;
352 
353   }
354 
355 }
356 
357 //尾插法
358 
359 void AddStudentByEndV1(List *list)
360 
361 {
362 
363   Node *p;
364 
365   p = (Node *)malloc(sizeof(Node ));
366 
367   Input(p);
368 
369 
370 
371   Node *last;
372 
373   last = list->head;
374 
375 
376 
377   if (last)
378 
379   {
380 
381while (last->next)
382 
383 ​    {
384 
385 ​      last = last->next;
386 
387 ​    }
388 
389 ​    last->next = p;
390 
391 ​    p->next=NULL;
392 
393   }
394 
395   else
396 
397   {
398 
399 ​    list->head = p;
400 
401 ​    p->next = NULL;
402 
403   }
404 
405 }
406 
407 //尾插法
408 
409 /*
410 
411 void AddStudentByEndV2(List *list)
412 
413 {
414 
415   Node *p;
416 
417   p = (Node *)malloc(sizeof(Node ));
418 
419   Input(p);
420 
421   static Node *tail;
422 
423 
424 
425   if (list->head)
426 
427   {
428 
429 ​    tail=list->head;
430 
431 ​    tail->next = p;
432 
433 ​    p->next = NULL;
434 
435   }
436 
437   else
438 
439   {
440 
441 ​    list->head = p;
442 
443 ​    p->next = NULL;
444 
445   }
446 
447 
448 
449   tail = p;
450 
451 }
452 
453 */
454 
455 void ChangeStudent(List *list, char *input)
456 
457 {
458 
459   Node *p;
460 
461   for (p = list->head; p; p = p->next)
462 
463   {
464 
465if (!strcmp(p->name, input))
466 
467 ​    {
468 
469 ​      Input(p);
470 
471break;
472 
473 ​    }
474 
475   }
476 
477 }
478 
479 void Input(Node *p)
480 
481 {
482 
483   printf("请输入姓名:");
484 
485   scanf("%s", p->name);
486 
487   printf("请输入学号(2位数字):");
488 
489   scanf("%s", p->id);
490 
491   printf("请输入学生分数(小于1000):");
492 
493   scanf("%s", p->score);
494 
495 }
496 
497 int Search(List *list, char *input)
498 
499 {
500 
501   int flag = -1; //标志
502 
503   Node *p;
504 
505   for (p = list->head; p; p = p->next)
506 
507   {
508 
509if (!strcmp(p->name, input))
510 
511 ​    {
512 
513 ​      flag = 1;
514 
515break;
516 
517 ​    }
518 
519   }
520 
521 
522 
523   return flag;
524 
525 }
526 
527 Node *PrintFlage(List *list, char *input)
528 
529 {
530 
531   Node *p;
532 
533   for (p = list->head; p; p = p->next)
534 
535   {
536 
537if (!strcmp(p->name, input))
538 
539 ​    {
540 
541 
542 
543break;
544 
545 ​    }
546 
547   }
548 
549   return p;
550 
551 }
552 
553 void Delete(List *list, char *input)
554 
555 {
556 
557   Node *p, *q = NULL;
558 
559   for (p = list->head; p; q = p, p = p->next)
560 
561   {
562 
563if (!strcmp(p->name,input))
564 
565 ​    {
566 
567 
568 
569if (q)
570 
571 ​      {
572 
573 ​        q->next = p->next;
574 
575 576 
577 ​      }
578 
579else
580 
581 ​      {
582 
583 ​        list->head = p->next; 
584 
585 ​      }
586 
587free(p);
588 
589break;
590 
591 ​    }
592 
593 594 
595   }
596 
597 }
598 
599 void PrintStudent(List *list)
600 
601 {
602 
603   Node *p;
604 
605   for (p = list->head; p; p = p->next)
606 
607   {
608 
609 ​    printf("学生姓名:%s\t学号:%s\t分数:%s\t\n", p->name, p->id, p->score);
610 
611   }
612 
613 }
614 
615 //--6--删库跑路
616 
617 void ClearList(List *list)
618 
619 {
620 
621   Node *p, *q;
622 
623   for (p = list->head; p; p = q)
624 
625   {
626 
627 ​    q = p->next;
628 
629free(p);
630 
631   }
632 
633 }

原文地址:https://www.cnblogs.com/Knightl8/p/12561051.html