1. 程式人生 > >單向連結串列例項:終端互動簡易通訊錄

單向連結串列例項:終端互動簡易通訊錄

  1 #include    <stdio.h>
  2 #include    <stdlib.h>
  3 #include    <string.h>
  4 
  5 
  6 typedef struct Contacts_infomation{
  7     char name[13];
  8     char work_unit[61];
  9     char phone_number[12];
 10     char E_mail[61];
 11     struct Contacts_infomation *next;
 12 }con_info;
13 14 15 con_info * Creat_node(void) 16 { 17 con_info *new; 18 19 new = (con_info *)malloc(sizeof(con_info)); 20 if(!new){ 21 printf("Malloc Error!\n"); 22 exit(-1); 23 } 24 new->next = NULL; 25 26 return new; 27 } 28 29 int insert_node(con_info ** phead)
30 { 31 con_info *new, *cur; 32 33 cur = *phead; 34 new = Creat_node(); 35 if(!new){ 36 return -1; 37 } 38 39 printf("please input name,work unit,phone number and E-mail (separated by enter):\n"); 40 printf("name:"); 41 scanf("%s", new->name);
42 printf("work unit:"); 43 scanf("%s", new->work_unit); 44 printf("phone number:"); 45 scanf("%s", new->phone_number); 46 printf("E-mail:"); 47 scanf("%s", new->E_mail); 48 49 if(!(*phead)){ 50 *phead = new; 51 return 0; 52 } 53 if(strncmp((*phead)->name,new->name,3) > 0){ 54 new->next = *phead; 55 *phead = new; 56 return 0; 57 } 58 while(cur->next){ 59 if(strncmp(cur->next->name, new->name,3) > 0){ 60 new->next = cur->next; 61 cur->next = new; 62 return 0; 63 } 64 } 65 cur->next = new; 66 67 return 0; 68 } 69 int del_node(con_info **phead){ 70 con_info *cur = *phead; 71 char name[13]; 72 73 if(!cur){ 74 printf("Address book is empty\n"); 75 return -1; 76 } 77 printf("please input want delete name: "); 78 scanf("%s", name); 79 80 if(strcasecmp((*phead)->name, name) == 0){ 81 con_info *tmp = (*phead)->next; 82 free(*phead); 83 *phead = tmp; 84 return 0; 85 } 86 while(cur->next){ 87 if(strcmp(cur->next->name, name) == 0){ 88 con_info *tmp = cur->next; 89 cur->next = tmp->next; 90 free(tmp); 91 return 0; 92 } 93 cur = cur->next; 94 } 95 getchar(); 96 printf("\n\nCan't find %s\n", name); 97 printf("\n\nPlease input Enter continue..."); 98 char ch = getchar(); 99 100 return 0; 101 } 102 103 int mod_node(con_info **phead){ 104 con_info *cur = *phead; 105 char name[13]; 106 char reply[10]; 107 108 if(!cur){ 109 printf("Address book is empty\n"); 110 return -1; 111 } 112 printf("Please input want modify name: "); 113 scanf("%s", name); 114 while(cur){ 115 if(strcasecmp(cur->name, name) == 0){ 116 117 printf("Modify name?(y/any key): "); 118 scanf("%s", reply); 119 if(strcmp(reply, "y") == 0){ 120 printf("Please new input name: "); 121 scanf("%s", cur->name); 122 } 123 printf("Modify work unit?(y/any key): "); 124 scanf("%s", reply); 125 if(strcmp(reply, "y") == 0){ 126 printf("Please input new work_unit: "); 127 scanf("%s", cur->work_unit); 128 } 129 printf("Modify phone number?(y/any key): "); 130 scanf("%s", reply); 131 if(strcmp(reply, "y") == 0){ 132 printf("Please input new phone number: "); 133 scanf("%s", cur->phone_number); 134 } 135 printf("Modify E-mail?(y/any key): "); 136 scanf("%s", reply); 137 if(strcmp(reply, "y") == 0){ 138 printf("Please input new E-mail: "); 139 scanf("%s", cur->E_mail); 140 } 141 return 0; 142 } 143 cur = cur->next; 144 } 145 getchar(); 146 printf("No contact was found.\n"); 147 printf("\n\nPlease input Enter continue..."); 148 char ch = getchar(); 149 return 0; 150 } 151 152 int search_node(con_info **phead){ 153 con_info *cur = *phead; 154 char in[13]; 155 if(!cur){ 156 printf("Address book is empty\n"); 157 return -1; 158 } 159 printf("Please input name or phone number: "); 160 scanf("%s", in); 161 162 while(cur){ 163 if(strcasecmp(cur->name, in) == 0 || strcmp(cur->phone_number, in) == 0){ 164 printf("name\t\twork unit\t\t\t\t\t\t\tphone number\t\tE-mail\n"); 165 printf("%-16s%-64s%-24s%-30s\n", cur->name, cur->work_unit, cur->phone_number, cur->E_mail); 166 getchar(); 167 printf("Please input Enter continue..."); 168 char ch = getchar(); 169 170 return 0; 171 } 172 cur = cur->next; 173 } 174 printf("\n\nCan't find %s\n", in); 175 getchar(); 176 printf("Please input Enter continue..."); 177 char ch = getchar(); 178 179 return 0; 180 } 181 int print_con(con_info *phead){ 182 con_info *cur = phead; 183 184 printf("name\t\twork unit\t\t\t\t\t\t\tphone number\t\tE-mail\n"); 185 if(!cur){ 186 printf("NULL\n"); 187 return -1; 188 } 189 while(cur){ 190 printf("%-16s%-64s%-24s%-30s\n", cur->name, cur->work_unit, cur->phone_number, cur->E_mail); 191 cur = cur->next; 192 } 193 getchar(); 194 printf("\n\nPlease input Enter continue..."); 195 char ch = getchar(); 196 197 return 0; 198 } 199 200 201 202 203 int main(void) 204 { 205 con_info *head = NULL; 206 char op[20]; 207 char dd[20]; 208 209 do{ 210 printf("\n\n\n1.New contacts\n2.Delete contact\n3.Unfoling contacts\n4.Modify contacts\n5.serch\n6.Exit\n\n8.Clean screen\n\n********************************\n\n\n"); 211 printf("Please inpu op: "); 212 scanf("%s", op); 213 printf("\n\n"); 214 if(!strcmp(op,"1")){ 215 insert_node(&head); 216 }else if(!strcmp(op, "2")){ 217 del_node(&head); 218 }else if(!strcmp(op, "3")){ 219 print_con(head); 220 }else if(!strcmp(op, "4")){ 221 mod_node(&head); 222 }else if(!strcmp(op, "5")){ 223 search_node(&head); 224 }else if(!strcmp(op, "6")){ 225 break; 226 }else if(!strcmp(op, "8")){ 227 //printf("\033[2J") ; 228 system("clear"); 229 } 230 else{ 231 printf("Ipunt opearton error\n"); 232 } 233 }while(1); 234 235 return 0; 236 }


由於通訊錄不怎麼需要倒序操作,又是一個簡易的,所以乾脆就使用了單向連結串列。Running demo:

互動介面(^_^簡易的,所以特別簡陋):

各個功能演示一遍: