#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define T 1
#define F -1
typedef int Boolean;
typedef char Elementname;
typedef char Elementadd;
struct Node
{
Elementname name[20];
char number[20];
Elementadd address[20];
struct Node* next;
};
int quit = 1;
typedef struct Node* node;
node list = NULL;
Boolean insert_tail(node list);
Boolean delete_index(node list, int index);
Boolean delete_name(node list, Elementname* name);
Boolean delete_number(node list, Elementname* number);
Boolean update_index(node list, int index, Elementname *name, char *number, Elementadd *address);
void update_name(node list, Elementname *old_name, Elementname *new_name);
void update_number(node list, char *old_number, char *new_number);
Boolean query_index(node list, int index);
void query_name(node list, Elementname* name);
void query_number(node list, char* number);
int input_user(Elementname* name, char* number, Elementadd* address);
void rank_name(node list);
void rank_number(node list);
int init(node* list);
int length(node list);
void print(node list);
void show_function();
int Meau();
int main()
{
show_function();
while(quit)
{
Meau();
}
return 0;
}
void show_function()
{
printf ("\n\n\n\n\n\n\n");
55 printf ("\t\t\t 【通讯录】\n");
56 printf ("================================================================================\n");
57 printf ("\t\t\t\t**************\n");
58 printf ("\t\t\t\t*0.初始化用户*\n");
59 printf ("\t\t\t\t*1.添加用户*\n");
60 printf ("\t\t\t\t*2.显示用户*\n");
61 printf ("\t\t\t\t*3.按通讯录序号删除 *\n");
62 printf ("\t\t\t\t*4.按通讯录姓名删除*\n");
63 printf ("\t\t\t\t*5.按通讯录号码删除*\n");
64 printf ("\t\t\t\t*6.按通讯录序号查询*\n");
65 printf ("\t\t\t\t*7.按通讯录姓名查询*\n");
66 printf ("\t\t\t\t*8.按通讯录号码查询*\n");
67 printf ("\t\t\t\t*9.按通讯录序号修改*\n");
68 printf ("\t\t\t\t*A.修改姓名*\n");
69 printf ("\t\t\t\t*B.修改号码*\n");
70 printf ("\t\t\t\t*C.按姓名-由小到大排序*\n");
71 printf ("\t\t\t\t*D.按号码-由大到小排序*\n");
72 printf ("\t\t\t\t*Q. quit*\n");
73 printf ("\t\t\t\t**************\n");
74 printf ("================================================================================\n");
75
76 }
77
int Meau()
{
char name[20], number[20], address[20], old_name[20], new_name[20], old_number[20], new_number[20];
int index, i, L;
char a;
printf("function :");
scanf ("%s", &a);
switch (a)
{
case '0':
{
init(&list);
break;
}
case '1':
{
printf("Please input, how many people you want save :");
scanf("%d", &L);
for (i = 0; i < L; i++)
{
insert_tail(list);
}
break;
}
case '2':
{
print(list);
break;
}
case '3':
{
printf("Please input index you want to delete :");
scanf("%d", &index);
delete_index(list, index);
break;
}
case '4':
{
printf("Please input name you want to delete :");
scanf("%s", name);
delete_name(list, name);
break;
}
case '5':
{
printf("Please input number you want to delete :");
scanf("%s", number);
delete_number(list, number);
break;
}
case '6':
{
printf("Please input index you want to query :");
scanf("%d", &index);
query_index(list, index);
break;
}
case '7':
{
printf("Please input name you want to query :");
scanf("%s", name);
query_name(list, name);
break;
}
case '8':
{
printf("Please input number you want to query :");
scanf("%s", number);
query_number(list, number);
break;
}
case '9':
{
printf("Please input index, name, number and addess you want to update :");
scanf("%d%s%s%s", &index, name, number, address);
update_index(list, index, name, number, address);
break;
}
case 'A':
{
printf("Please input old_name you want to update new_name :");
scanf("%s%s", old_name, new_name);
update_name(list, old_name, new_name);
break;
}
case 'B':
{
printf("Please input old_number you want to update new_number :");
scanf("%s%s", old_number, new_number);
update_number(list, old_number, new_number);
break;
}
case 'C':
{
rank_name(list);
break;
}
case 'D':
{
rank_number(list);
break;
}
case 'Q':
{
quit = 0;
return quit;
}
default:
{
printf("Please input again\n");
}
}
}
void query_number(node list, char* number)
{
node temp = list;
while (temp->next != list)
{
if (0 == strcmp(temp->next->number, number))
{
printf("find succrss!!\n");
printf("find_name: %s find_number: %s find_address: %s \n", temp->next->name, temp->next->number, temp->next->address);
}
temp = temp->next;
}
}
void query_name(node list, Elementname* name)
{
node temp = list;
while (temp->next != list)
{
if (0 == strcmp(temp->next->name, name))
{
printf("find succrss!!\n");
printf("find_name: %s find_number: %s find_address: %s \n", temp->next->name, temp->next->number, temp->next->address);
}
temp = temp->next;
}
}
Boolean query_index(node list, int index)
{
if (index < 0 || index > length(list))
{
printf("out of range\n");
return F;
}
int i;
for (i = 0; i < index; i++)
{
list = list->next;
}
printf("find succrss!!\n");
printf("find_name: %s find_number: %s find_address: %s \n", list->next->name, list->next->number, list->next->address);
}
void update_number(node list, char *old_number, char *new_number)
{
node temp = list;
while (temp->next != list)
{
if (0 == strcmp(temp->next->number, old_number))
{
strcpy(temp->next->number, new_number);
}
temp = temp->next;
}
}
void update_name(node list, Elementname *old_name, Elementname *new_name)
{
node temp = list;
while (temp->next != list)
{
if (0 == strcmp(temp->next->name, old_name))
{
strcpy(temp->next->name, new_name);
}
temp = temp->next;
}
}
Boolean update_index(node list, int index, Elementname *name, char *number, Elementadd *address)
{
if (index < 0 || index > length(list))
{
printf("out of range\n");
return F;
}
int i;
for (i = 0; i < index; i++)
{
list = list->next;
}
strcpy(list->next->name, name);
strcpy(list->next->number, number);
strcpy(list->next->address, address);
return T;
}
Boolean delete_number(node list, Elementname* number)
{
node temp = list;
while (temp->next != list)
{
if (0 == strcmp(temp->next->number, number))
{
node temp2 = temp->next;
temp->next = temp->next->next;
free(temp2);
}
else
{
temp = temp->next;
}
}
}
Boolean delete_name(node list, Elementname *name)
{
node temp = list;
while (temp->next != list)
{
if (0 == strcmp(temp->next->name, name))
{
node temp2 = temp->next;
temp->next = temp->next->next;
free(temp2);
}
else
{
temp = temp->next;
}
}
}
Boolean delete_index(node list, int index)
{
if (index < 0 || index > length(list))
{
printf("out of range\n");
return F;
}
int i = 0;
for (i = 0; i < index; i++)
{
list = list->next;
}
node temp = list->next;
list->next = list->next->next;
free(temp);
return T;
}
Boolean insert_tail(node list)
{
Elementname name[20];
Elementadd address[20];
char number[20];
input_user(name, number, address);
node temp = list;
node newnode = (node)malloc(sizeof(struct Node));
if(NULL == newnode)
{
return F;
}
newnode->next = list;
strcpy(newnode->name, name);
strcpy(newnode->number, number);
strcpy(newnode->address, address);
while (temp->next != list)
{
temp = temp->next;
}
temp->next =newnode;
return T;
}
void print(node list)
{
node temp = list;
int count = 0;
while (temp->next != list)
{
count++;
printf("order:%d\n", count);
printf("name: %s number: %s address: %s\n", temp->next->name, temp->next->number, temp->next->address);
temp = temp->next;
}
printf("\n");
}
int input_user(Elementname* name, char* number, Elementadd* address)
{
printf("Input someone's name, number, address\n(if you don't know his name, number, address, Please input : XXX)\n");
scanf("%s%s%s",name,number,address);
return 0;
}
int init(node* list)
{
node newnode = (node)malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}
newnode->next = newnode;
*list = newnode;
return T;
}
int length(node list)
{
node temp = list;
int count = 0;
while (temp->next != list)
{
count++;
temp = temp->next;
}
return count;
}
void rank_name(node list)
{
int i, j;
node temp = NULL;
node t;
for (i = 0; i < length(list) - 1; i++)
{
for (j = 0, temp = list; j < length(list) - 1 -i; j++, temp = temp->next )
{
if (strcmp(temp->next->name, temp->next->next->name) > 0)
{
t = temp->next->next;
temp->next->next = t->next;
t->next = temp->next;
temp->next = t;
}
}
}
}
void rank_number(node list)
{
int i, j;
node temp = NULL;
node t;
for (i = 0; i < length(list) - 1; i++)
{
for (j = 0, temp = list; j < length(list) - 1 -i; j++, temp = temp->next )
{
if (strcmp(temp->next->number, temp->next->next->number) < 0)
{
t = temp->next->next;
temp->next->next = t->next;
t->next = temp->next;
temp->next = t;
}
}
}
}
[root@localhost address_list]# ./2
【通讯录】
================================================================================
**************
*0.初始化用户*
*1.添加用户*
*2.显示用户*
*3.按通讯录序号删除 *
*4.按通讯录姓名删除*
*5.按通讯录号码删除*
*6.按通讯录序号查询*
*7.按通讯录姓名查询*
*8.按通讯录号码查询*
*9.按通讯录序号修改*
*A.修改姓名*
*B.修改号码*
*C.按姓名-由小到大排序*
*D.按号码-由大到小排序*
*Q. quit*
**************
================================================================================
Please select function :0
Please select function :1
Please input, how many people you want save :3
Input someone's name, number, address
(if you don't know his name, number, address, Please input : XXX)
xjz 1437855676 huian
Input someone's name, number, address
(if you don't know his name, number, address, Please input : XXX)
hy 1568799876 nanjing
Input someone's name, number, address
(if you don't know his name, number, address, Please input : XXX)
lmx 154789557 beijing
Please select function :2
order:1
name: xjz number: 1437855676 address: huian
order:2
name: hy number: 1568799876 address: nanjing
order:3
name: lmx number: 154789557 address: beijing
Please select function :C
Please select function :2
order:1
name: hy number: 1568799876 address: nanjing
order:2
name: lmx number: 154789557 address: beijing
order:3
name: xjz number: 1437855676 address: huian
Please select function :A
Please input old_name you want to update new_name :xjz zz
Please select function :2
order:1
name: hy number: 1568799876 address: nanjing
order:2
name: lmx number: 154789557 address: beijing
order:3
name: zz number: 1437855676 address: huian
Please select function :3
Please input index you want to delete :0
Please select function :2
order:1
name: lmx number: 154789557 address: beijing
order:2
name: zz number: 1437855676 address: huian