c语言 链表使用示例

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 typedef struct list{
  5     struct list *next;
  6     char name[30];//用户名称
  7     char addr[50];//地址
  8     char num[8];//号码 
  9 }user;
 10  
 11 void insert(user *h);
 12 void edit(user *h);
 13 void del(user *h);
 14 void S_byName(user *h);
 15 void S_byNum(user *h);
 16 void display(user *h);
 17  
 18 int main()
 19 {
 20     int flag;
 21     user *head=(user *)malloc(sizeof(user));
 22     head->next=NULL;
 23     while(1)
 24     {
 25         printf("电话号码目录系统\n");
 26         printf("    1、添加新电话用户信息\n");
 27         printf("    2、修改电话用户信息\n");
 28         printf("    3、删除已有电话用户信息\n");
 29         printf("    4、根据用户名查询电话信息\n");
 30         printf("    5、根据电话号码查询用户信息\n");
 31         printf("    6、显示全部用户信息\n");
 32         printf("    7、退出\n");
 33         printf("请选择:");
 34         scanf("%d",&flag);
 35         if(flag==1)
 36             insert(head);
 37         else if(flag==2)
 38             edit(head);
 39         else if(flag==3)
 40             del(head);
 41         else if(flag==4)
 42             S_byName(head);
 43         else if(flag==5)
 44                S_byNum(head);
 45           else if(flag==6)
 46             display(head);
 47         else if(flag==7)
 48             return 0;
 49         else
 50             printf("输入有误,请重新选择!\n");
 51     }
 52 }
 53 void insert(user *h)
 54 {
 55     user *p=(user *)malloc(sizeof(user));
 56     p->next=h->next;
 57     h->next=p;
 58     printf("请输入新增用户名称(最多30个字):");
 59     scanf("%s",p->name);
 60     printf("请输入新增用户的家庭住址(最多50字):");
 61     scanf("%s",p->addr);
 62     printf("请输入新增用户的电话号码(8位数):");
 63     scanf("%s",p->num);
 64     printf("新用户记录成功添加:%s  %s  %s\n\n",p->name,p->addr,p->num);
 65 }
 66 void edit(user *h)
 67 {
 68     char name[30];
 69     int flag=0;
 70     user *lh=h->next;
 71     printf("输入要修改用户的名称:");
 72     scanf("%s",name);
 73     while(lh)
 74     {
 75         if(strcmp(name,lh->name)==0)
 76         {
 77             flag=1;
 78             printf("请输入新的名称(30字以内):");
 79             scanf("%s",lh->name);
 80             printf("请输入新的地址(50字以内):");
 81             scanf("%s",lh->addr);
 82             printf("请输入新的号码(8位):");
 83             scanf("%s",lh->num); 
 84             printf("用户记录修改成功:%s  %s  %s\n\n",lh->name,lh->addr,lh->num);
 85             break;
 86         }
 87         lh=lh->next;
 88     }
 89     if(!flag)
 90         printf("不存在这样的用户\n\n");
 91 }
 92 void S_byName(user *h)
 93 {
 94     char name[30];
 95     int flag=0;
 96     user *lh=h->next;
 97     printf("输入要查找的用户名称:");
 98     scanf("%s",name);
 99     while(lh)
100     {
101         if(strcmp(name,lh->name)==0)
102         {
103             flag=1;
104             printf("用户信息为:%s  %s  %s\n\n",lh->name,lh->addr,lh->num);
105             break;
106         }
107         lh=lh->next;
108     }
109     if(!flag)
110         printf("用户名不存在\n\n");
111 }
112 void S_byNum(user *h)
113 {
114     char num[30];
115     int flag=0;
116     user *lh=h->next;
117     printf("输入要查找的电话号码:");
118     scanf("%s",num);
119     while(lh)
120     {
121         if(strcmp(num,lh->num)==0)
122         {
123             flag=1;
124             printf("用户信息为:%s  %s  %s\n\n",lh->name,lh->addr,lh->num);
125             break;
126         }
127         lh=lh->next;
128     }
129     if(!flag)
130         printf("找不到匹配的号码\n\n");
131 }
132 void display(user *h)
133 {
134     user *lh=h->next;
135     int i=1;
136     while(lh)
137     {
138         printf("第%d条用户信息:%s  %s  %s\n",i,lh->name,lh->addr,lh->num);
139         lh=lh->next;
140         i++;
141     }
142     printf("\n");
143 }
144 void del(user *h)
145 {
146     char name[30];
147     int flag=0;
148     user *lh=h;
149     printf("输入要删除的用户名称:");
150     scanf("%s",name);
151     while(lh->next)
152     {
153         if(strcmp(name,lh->next->name)==0)
154         {
155             flag=1;
156             printf("删除用户成功:%s  %s  %s\n\n",lh->next->name,lh->next->addr,lh->next->num);
157             lh->next=lh->next->next;
158             break;
159         }
160         lh=lh->next;
161     }
162     if(!flag)
163         printf("用户名不存在\n\n");
164 }

 

posted on 2014-12-01 09:33  嘘寒问暖  阅读(4979)  评论(0编辑  收藏  举报

导航