#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <stdlib.h>
#include <assert.h>
#include<string.h>
struct person {
char name[32];
char phone[12];
char gender[5];
unsigned char age;
char adress[20];
struct person *next;
};
int menu()
{
int n = 0;
printf("\n");
printf("*************************\n");
printf("*** 通讯录系统 ***\n");
printf("***1.添加 2.删除***\n");
printf("***3.查找 4.修改***\n");
printf("***5.显示 6.清空***\n");
printf("***7.排序 0.退出***\n");
printf("*************************\n");
printf("请选择功能:");
scanf("%d",&n);
return n;
}
void insert(struct person **head)
{
int i = 0;
int n = 0;
assert(head != NULL);
printf("请输入所添加人数");
scanf("%d",&n);
for(i=0; i<n; i++)
{
struct person *p = (struct person*)malloc(sizeof(struct person));
p ->next = NULL;
printf("name:");
scanf("%s",p ->name);
printf("gender:");
scanf("%s",p ->gender);
printf("age:");
scanf("%d",&p ->age);
printf("phone:");
scanf("%s",p ->phone);
printf("adress:");
scanf("%s",p ->adress);
printf("\n");
p->next = *head;
*head = p;
}
}
void print(struct person *head)
{
while(head != NULL){
printf("name:%s,gender:%s,age:%d,phone:%s,adress:%s",head->name,head->gender,
head->age,head->phone,head->adress);
printf("\n");
head = head->next;
}
}
void Drop(struct person **head)
{
char name[32];
struct person *pre = NULL;
struct person *cur = *head;
assert(*head != NULL);
printf("请输入要删除的人的名字:");
scanf("%s", name);
while ( cur != NULL )
{
if ( strcmp(cur->name, name) == 0)
break;
pre = cur;
cur = cur->next;
}
if ( pre == NULL )
{
*head = cur->next;
free(cur);
}
else
{
if ( cur != NULL )
{
pre->next = cur->next;
free(cur);
}
else
printf("查无此人");
}
}
void find(struct person *head)
{
struct person *cur = head;
char name[32];
printf("姓名:");
scanf("%s", name);
while ( cur != NULL )
{
if ( strcmp(cur->name, name) == 0 ) {
printf("name:%s,gender:%s,age:%d,phone:%s,adress:%s",cur->name,cur->gender,
cur->age,cur->phone,cur->adress);
break;
}
cur = cur->next;
}
if ( cur == NULL ) {
printf("查无此人\n");
}
}
void sort(struct person *head)
{
struct person *cur = head;
struct person *p = cur;
while ( cur != NULL ) {
p = cur;
while (p != NULL ) {
if ( strcmp(p->name ,cur->name) < 0 ) {
char tmp[100];
int k = 0;
strcpy(tmp, p->name);
strcpy(p->name, cur->name);
strcpy(cur->name, tmp);
strcpy(tmp, p->gender);
strcpy(p->gender, cur->gender);
strcpy(cur->gender, tmp);
k = p->age;
p->age = cur->age;
cur->age = k;
strcpy(tmp, p->phone);
strcpy(p->phone, cur->phone);
strcpy(cur->phone, tmp);
strcpy(tmp, p->adress);
strcpy(p->adress, cur->adress);
strcpy(cur->adress, tmp);
}
p = p->next;
}
cur = cur->next;
}
}
void revise(struct person **head)
{
struct person *cur = *head;
char name[32];
assert(*head != NULL);
printf("请输入想修改信息的人的名字:");
scanf("%s",name);
while(cur != NULL )
{
if(strcmp(cur->name,name))
{
printf("请输入新联系人的名字:");
scanf("%s", cur->name);
printf("请输入新联系人的性别:");
scanf("%s", cur->gender);
printf("请输入新联系人的年龄:");
scanf("%d", &cur->age);
printf("请输入新联系人的电话:");
scanf("%s", cur->phone);
printf("请输入新联系人的地址:");
scanf("%s", cur->adress);
break;
}
cur = cur->next;
}
if(cur == NULL)
printf("查无此人\n");
}
void empty(struct person **head)
{
struct person *cur = *head;
assert(*head != NULL);
while ( cur != NULL ) {
struct person *nxt = cur->next;
free(cur);
cur = nxt;
}
*head = NULL;
}
int main()
{
int i = 0;
struct person *head = NULL;
do{
i = menu();
switch( i ){
case 1:
insert(&head);
break;
case 2:
Drop(&head);
break;
case 3:
find(head);
break;
case 4:
revise(&head);
break;
case 5:
print(head);
break;
case 6:
empty(&head);
break;
case 7:
sort(head);
break;
case 0:
printf("退出\n");
break;
default:
printf("输入有误\n");
break;
}
}while(i);
}