学习任务:通讯录课程设计的验收
学习心得:今天对自己的程序的改错,发现一定要有足够的耐心,即使错误百出,也要坚持,坚持就是胜利——虽然是人人都说的大白话,但如果真的是自己亲身体会出来的,一定别有一番滋味。
1 /*****************************************************************
2 * Copyright (C) 2018 SU_QIAN Ltd. All rights reserved.
3 *
4 * 文件名称:linklist.c
5 * 创 建 者:warning
6 * 创建日期:2018年07月21日
7 * 描 述:linklist
8 *
9 *****************************************************************/
10 #include <string.h>
11 #include <stdio.h>
12 #include <stdlib.h>
13
14 #define OK 1
15 #define ERROR 0
16 #define TRUE 1
17 #define FALSE 0
18 #define MAXSIZE 20
19
20
21 typedef int Status;
22 //typedef int ElemType;
23
24 char *menu[]={"\n",\
25 "******************************",\
26 "***welcome to my phone book***",\
27 "** 1.insert **",\
28 "** 2.locate **",\
29 "** 3.delete **",\
30 "** 4.traverse **",\
31 "** 5.clear **",\
32 "** 0.quit **",\
33 "*****************************"};
34
35 typedef struct node
36 {
37 char name[20];//姓名
38 char number[15];//号码
39 struct node *next;
40 }Node;
41
42 typedef Node *LinkList;//head p
43
44 Status InitList(LinkList *L)
45 {
46 *L=(LinkList)malloc(sizeof(Node));
47 if((*L)==NULL)
48 {
49 printf("Init Fail!");
50 return ERROR;
51 }
52 (*L)->next=NULL;
53 return OK;
54 }
55
56 //长度
57 int ListLength(LinkList L)
58 {
59 int i=0;
60 LinkList p=L->next;
61 while(p!=NULL)
62 {
63 p=p->next;
64 i++;
65 }
66 return i;
67 }
68
69 //判断是否为空
70 Status EmptyList(LinkList L)
71 {
72 LinkList p=L->next;
73 if(p==NULL)
74 {
75 printf("LinkList is Empty!\n");
76 return 1;
77 }
78 return 0;
79 }
80
81 //插入
82 Status ListInsert(LinkList L)
83 {
84 LinkList p=L;
85 LinkList q;
86 q= (LinkList)malloc(sizeof(Node));
87 if (q == NULL)
88 {
89 printf("malloc error!\n");
90 return ERROR;
91 }
92 printf("name:");
93 scanf("%s",q->name);
94 printf("number:");
95 scanf("%s",q->number);
96 q->next=p->next;
97 p->next=q;
98 return OK;
99 }
100
101 //遍历
102 Status ListTraverse(LinkList L)
103 {
104 LinkList p;
105 if (NULL == L)
106 {
107 printf("LinkList is not inited\n");return ERROR;
108 }
109 if (EmptyList(L))
110 {
111 printf("the Phone Book is empty\n");return OK;
112 }
113 p = L->next;
114 while( p != NULL)
115 {
116 printf("name is %s\t",p->name);
117 printf("number is %s\n",p->number);
118 p = p->next;
119 }
120 printf("have %d record(s)\n",ListLength(L));
121 return OK;
122 }
123
124 //定位
125 Status LocateElem(LinkList L)
126 {
127 LinkList p;
128 char name[20];
129 printf("please input the name which you want to locate\n");
130 scanf("%s",name);
131 if (EmptyList(L))
132 {
133 printf("the Phone Book is empty\n");return FALSE;
134 }
135 p = L->next;
136 while(p != NULL)
137 {
138 if(strcmp(name,p->name)==0)
139 {
140 printf("name is %s\t",p->name);
141 printf("number is %s\n",p->number);
142 return TRUE;
143 }p = p->next;
144 }
145 return FALSE;
146 }
147
148 //删除
149 Status ListDelete(LinkList L)
150 {
151 LinkList p,q;
152 int j,i;
153 if ((L) == NULL)
154 {
155 printf("Linklist is not init\n");return ERROR;
156 }
157 printf("delete which one");
158 scanf("%d",&i);
159 if (i<1 || i>ListLength(L))
160 {
161 printf("delete position error\n");return ERROR;
162 }
163 p = L;
164 j = 1;
165 while(p != NULL && j<i)
166 {
167 p = p->next;
168 j++;
169 }
170 q = p->next;p->next = q->next; free(q);
171 printf("delete successfully");
172 return OK;
173 }
174
175 //清空
176 Status ClearList(LinkList L)
177 {
178 //char a[2];
179 //printf("sure to clear?(y/n)");
180 //scanf("%s",a);
181 //if(strcmp(a,'y')==0)
182 LinkList p,q;
183 if(EmptyList(L))
184 {
185 printf("List is empty,need'nt clear\n");
186 return FALSE;
187 }
188 p = (L)->next;
189 while(p != NULL)
190 {
191 q = p;
192 p = p->next;
193 free(q);
194 }
195 (L)->next = NULL;
196 printf("clear successfully!");
197 return TRUE;
198
199 }
200
201 //菜单
202 char display_menu(char **menu,int len,LinkList L)
203 {
204 int i;
205 char sel,temp;
206 while(1)
207 {
208 for(i=0;i<len;i++)
209 {
210 printf(" %s\n",*(menu+i));
211 }
212 printf("please input your choice:\n");
213 scanf(" %c",&sel);
214 while(scanf("%c",&temp)!=EOF)
215 {
216 if(temp=='\n')
217 break;
218 }
219 switch(sel)
220 {
221 case '0':
222 printf("thanks\n");exit(0);break;
223 case '2':
224 ListInsert(L);break;
225 case '2':
226 LocateElem(L);break;
227 case '3':
228 ListDelete(L);break;
229 case '4':
230 ListTraverse(L);break;
231 case '5':
232 ClearList(L);break;
233 }
234 }
235 }
236
237
238 int main(int argc,char *argv[])
239 {
240 LinkList L;
241 Status i;
242 i=InitList(&L);
243 display_menu(menu,10,L);
244 return 0;
245 }