久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3143|回復: 1
收起左側

c語言單鏈表實現學生信息的增刪改查源程序

[復制鏈接]
ID:418215 發表于 2021-1-12 22:47 | 顯示全部樓層 |閱讀模式
C語言鏈表的基礎知識就不多說了,關鍵在于要知道它是不連續的內存單元通過指針的方式把數據串接成鏈的。百度一大把資料。
直接對程序加以說明,以及注意事項:
1.添加信息:直接在創建的鏈表尾部添加。讀者也可以自己試著修改成,鏈表指定位置添加。
2.刪除信息:首先分三種情況,第一:刪除的數據在表頭,第二:刪除的數據在表中間,最后,刪除的數據是表尾(即next指向的是NULL)。
3.修改、查詢信息:通過指定的方式去查找,比較簡單沒啥好說的。
4.登錄:這里我設置了默認的賬號密碼,三次之內輸入正確即可進入創建鏈表,否則退出進程。


思考:程序45行getchar()的作用?
在scanf中輸入name信息后按回車結束,輸入緩沖中保存了這個回車符,如果后面一個輸入信息格式是字符(串)格式,
它會自動把這個回車符賦給這個信息,所以getchar的作用是吃掉這個回車符。

單片機源程序如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "student.h"


  5. int main(int argv,char *argc[])
  6. {
  7.         Stu *head;
  8.         int entry,Num;
  9.         entry=login();
  10.         if(entry != 0)
  11.                 return -1;
  12.         head=creat();
  13.         print(head);
  14.         while(1){
  15.                 printf("input 1.添加  2.刪除  3.修改  4.查詢  5.打印  6.退出\n");
  16.                 scanf("%d",&Num);
  17.                 switch(Num){
  18.                         case 1:head=add(head);print(head);break;
  19.                         case 2:head=delet(head);print(head);break;
  20.                         case 3:head=modify(head);print(head);break;
  21.                         case 4:query(head);break;
  22.                         case 5:print(head);break;
  23.                         case 6:return 0;
  24.                         default:printf("Invalid input\n");break;
  25.                 }
  26.         }
  27.         return 0;
  28. }


  29. /*  創建學生鏈表  */
  30. Stu *creat(void)
  31. {
  32.         int n=0;
  33.         char i[4];
  34.         Stu *p1,*p2;
  35.         Stu *head = NULL;
  36.         p1=p2=(Stu *) malloc(sizeof(Stu));
  37.         do{
  38.                 printf("please input student info:\n");
  39.                 printf("name:");
  40.                 scanf("%s",p1->name);
  41.                 getchar();
  42.                 printf("sex:");
  43.                 scanf("%c",&p1->sex);
  44.                 printf("num:");
  45.                 scanf("%d",&p1->num);
  46.                 printf("score:");
  47.                 scanf("%f",&p1->score);
  48.                 printf("addr:");
  49.                 scanf("%s",p1->addr);
  50.                 if(!n){
  51.                         n++;
  52.                         head=p1;
  53.                 }else{

  54.                         p2->next=p1;
  55.                         p2=p1;
  56.                 }
  57.                 printf("whether input next:yes/no\n");
  58.                 scanf("%s",i);
  59.                 if(!strncmp(i,"y",1)){
  60.                         p1=(Stu *)malloc(sizeof(Stu));
  61.                 }else{
  62.                         p1->next = NULL;

  63.                 }
  64.         }while(!strncmp(i,"y",1));

  65.         return head;
  66. }


  67. /*   添加學生信息   */
  68. Stu *add(Stu *p)
  69. {
  70.         Stu *q,*head;
  71.         head = p;
  72.         char i[4];

  73.         while(p->next != NULL){
  74.                 p=p->next;
  75.         }

  76.         q=(Stu *) malloc(sizeof(Stu));
  77.         do{
  78.                 printf("please add student info:\n");
  79.                 printf("name:");
  80.                 scanf("%s",q->name);
  81.                 getchar();
  82.                 printf("sex:");
  83.                 scanf("%c",&q->sex);
  84.                 printf("num:");
  85.                 scanf("%d",&q->num);
  86.                 printf("score:");
  87.                 scanf("%f",&q->score);
  88.                 printf("addr:");
  89.                 scanf("%s",q->addr);
  90.                 p->next = q;
  91.                 p=q;
  92.                 printf("whether add next:yes/no\n");
  93.                 scanf("%s",i);
  94.                 if(!strncmp(i,"y",1)){
  95.                         q=(Stu *) malloc(sizeof(Stu));
  96.                 }else{

  97.                         q->next= NULL;
  98.                 }
  99.         }while(!strncmp(i,"y",1));

  100.         return head;
  101. }


  102. /*   刪除學生信息    */
  103. Stu *delet(Stu *p)
  104. {
  105.         Stu *q,*head;
  106.         int Num;
  107.         char i[4];
  108.         head = q= p;
  109.         if(!p)
  110.                 return head;
  111.         do{
  112.                 printf("please input delete student num:");
  113.                 scanf("%d",&Num);
  114.                 while(p->num !=Num){
  115.                         if(p->next!=NULL){
  116.                                 if(q!=p){
  117.                                         q->next=p;
  118.                                         q=p;
  119.                                 }
  120.                                 p=p->next;
  121.                         }else{
  122.                                 printf("No find the student,sorry!\n");
  123.                                 return head;
  124.                         }
  125.                 }
  126.                 if(p==head){
  127.                         head=p->next;
  128.                 }else if(p->next ==NULL){
  129.                         q->next=NULL;
  130.                 }else{
  131.                         q->next=p->next;
  132.                 }
  133.                 free(p);
  134.                 printf("whether delete again:yes/no?\n");
  135.                 scanf("%s",i);

  136.         }while(!strncmp(i,"y",1));

  137.         return head;
  138. }


  139. /*   修改學生信息    */
  140. Stu *modify(Stu *p)
  141. {
  142.         Stu *head;
  143.         char i[4];
  144.         int Num,y;
  145.         head=p;
  146.         printf("please modify student num:");
  147.         scanf("%d",&Num);
  148.         do{
  149.                 while(p->num!= Num){
  150.                         if(p->next!=NULL){
  151.                                 p=p->next;
  152.                         }else{
  153.                                 printf("No find the student,sorry!\n");
  154.                                 return head;
  155.                         }                        
  156.                 }
  157.                 printf("Do you want to modify 1.name  2.num  3.sex  4.score  5.addr?");
  158.                 scanf("%d",&y);
  159.                 switch(y){
  160.                         case 1:printf("name:"); scanf("%s",p->name);break;
  161.                         case 2:printf("num:"); scanf("%d",&p->num);break;
  162.                         case 3:printf("sex:"); scanf("%c",&p->sex);break;
  163.                         case 4:printf("score:"); scanf("%f",&p->score);break;
  164.                         case 5:printf("addr:"); scanf("%s",p->addr);break;
  165.                         default:printf("input error!\n");break;
  166.                 }
  167.                 printf("whether modify again:yes/no?\n");
  168.                 scanf("%s",i);
  169.         }while(!strncmp(i,"y",1));

  170.         return head;
  171. }


  172. /*   查詢學生信息    */
  173. void query(Stu *p)
  174. {
  175.         int Num;
  176.         printf("Please input student num:");
  177.         scanf("%d",&Num);
  178.         while(p->num != Num){
  179.                 if(p->next == NULL){
  180.                         printf("No find the student ,sorry!\n");
  181.                         exit(-1);
  182.                 }
  183.                 p= p->next;
  184.         }        
  185.         printf("name=%s ,sex=%c ,score=%4.2f ,addr=%s\n",p->name,p->sex,p->score,p->addr);

  186. }


  187. /*    賬號登錄    */
  188. int login(void)
  189. {
  190.         int i=0;
  191.         char wel[]="Welcome to entery the student system!";
  192.         int len=sizeof(wel);
  193.         char account_new[16],account[]="class_student";
  194.         char passwd_new[16],passwd[]="123456";
  195.         printf("defaule:: 賬號:class_student  密碼:123456\n");
  196.         printf("if error 3 times exit\n");
  197.         for(i=0;i<3;i++){
  198.                 printf("please input your 賬號:");
  199.                 scanf("%s",account_new);
  200.                 printf("please input your 密碼:");
  201.                 scanf("%s",passwd_new);
  202.                 if((!strncmp(account,account_new,strlen(account))) &&
  203.                         (!strncmp(passwd,passwd_new,strlen(passwd)))) {
  204.                         printf("succeeful!\n");
  205.                         break;
  206.                 }else{
  207.                         if(i==2)
  208.                                 return -1;
  209.                         printf("error!\n");
  210.                 }
  211.         }
  212.         printf("%s",wel);
  213.         printf("\n");
  214.         return 0;

  215. }


  216. /*   信息打印    */
  217. void print(Stu *p)
  218. {
  219.         if(!p)
  220.                 return;
  221.         do{
  222.                 printf("name:%s ,sex:%c ,num:%d , score:%4.2f ,addr:%s \n",p->name,p->sex,p->num,p->score,p->addr);
  223.                 p=p->next;
  224.         }while(p != NULL);

  225. }
復制代碼
51hei.png
所有資料51hei提供下載:
c語言之單鏈表.zip (7.48 KB, 下載次數: 18)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:276663 發表于 2021-1-13 12:51 | 顯示全部樓層
有沒有循環鏈表?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av一区在线 | av网址在线播放 | 亚洲一区中文字幕 | 毛片视频网站 | 国产一区二区在线视频 | 在线免费视频一区 | 日皮视频免费 | 成人亚洲精品久久久久软件 | 国产一区二区三区在线看 | 亚洲色图综合 | 中文字幕一区在线 | 欧美一区二区在线 | 日韩欧美在线观看视频 | 一片毛片 | 日韩在线视频免费观看 | 亚洲精品久久久久久久久久久久久 | 久久最新精品视频 | 国产精品99免费视频 | 国产一区在线免费 | 日韩欧美国产精品 | 一区二区三区视频免费观看 | 三级成人在线观看 | 91视频网| 成年人视频免费在线观看 | 国产亚洲网站 | 欧美一二区 | 日日噜噜噜夜夜爽爽狠狠视频, | 99亚洲精品 | 久久欧美精品 | 色婷婷亚洲国产女人的天堂 | 国产激情视频在线观看 | 精品自拍视频在线观看 | 色网站在线免费观看 | 暖暖日本在线视频 | 欧美综合一区 | 亚洲男人网 | 国产亚洲精品久久久久久牛牛 | 精品久久久网站 | 久久夜色精品国产 | 欧美精品一区在线 | 国产综合视频 |