头文件
#ifndef _ADDRESS_H
#define _ADDRESS_H
#define FAILURE 10000
#define SUCCESS 10001
#define TRUE 10002
#define FALSE 10003
#define SIZE 2
struct data
{
char name[20];
char sex[20];
char age[20];
char ID[20];
};
typedef struct data DATA;
struct node
{
DATA first;
struct node *next;
};
typedef struct node NODE;
void menu();
int addressInsert(NODE *l, int p);
int addressTraverse(NODE *l, void (*p)(char *));
int addressLocate(NODE *l, char *str, int (*p)(char *, char *), void (*k)(char *));
int addressLength(NODE *l, char *str, int (*q)(char *, char *));
int addressDelete(NODE *l, char *str, int (*q)(char *, char *));
int addressSort(NODE *l, void (*f)(DATA *, DATA *));
int addressCorrect(NODE *l, char *str, int (*q)(char *, char *));
#endif
主函数
#include <stdio.h>
#include "address.h"
#include <stdlib.h>
#include <string.h>
void print(char *s)
{
printf("%s ", s);
}
int Equal(char *str, char *ptr)
{
return (strcmp(str, ptr) == 0) ? TRUE : FALSE;
}
void mystrcpy(DATA *e1, DATA *e2 )
{
DATA e3;
e3 = *e2;
*e2 = *e1;
*e1 = e3;
}
int main()
{
int ret, a, i;
char *str = (char *)malloc(sizeof(char));
NODE *N;
N = (NODE *)malloc(sizeof(NODE));
N->next = NULL;
while(1)
{
menu();
scanf("%d", &a);
switch(a)
{
case 1:
for(i = 0; i < SIZE; i++)
{
ret = addressInsert(N, i + 1);
if(ret == FAILURE)
{
printf("Insert failure!\n");
}
else
{
printf("Insert success!\n");
}
sleep(2);
}
break;
case 2:
ret = addressTraverse(N, print);
if(ret == FAILURE)
{
printf("Traverse failure!\n");
}
else
{
printf("Traverse success!\n");
}
sleep(2);
break;
case 3:
//printf("请输入你想查找信息的姓名:\n");
ret = addressLocate(N, str, Equal, print);
if(ret == FAILURE)
{
printf("Locate FAILURE!\n");
}
else
{
printf("%s is %dth element!\n", str, ret);
}
sleep(2);
break;
case 4:
ret = addressDelete(N, str, Equal);
if(ret == FAILURE)
{
printf("Delete FAILURE!\n");
}
else
{
printf("Delete SUCCESS!\n");
}
sleep(2);
break;
case 5:
ret = addressSort(N, mystrcpy);
if(ret == FAILURE)
{
printf("Sort FAILURE\n");
}
else
{
printf("Sort SUCCESS!\n");
}
sleep(2);
break;
case 6:
ret = addressCorrect(N, str, Equal );
if(ret == FAILURE)
{
printf("Correct FAILURE!\n");
}
else
{
printf("Correct SUCCESS!\n");
}
sleep(2);
break;
case 7:
ret = addressLength(N, str, Equal);
if(ret == FAILURE)
{
printf("Length FAILURE!\n");
}
else
{
printf("用户数为 %d !\n", ret);
}
sleep(2);
break;
case 8:
exit(0);
}
}
return 0;
}
功能函数
#include <stdio.h>
#include "address.h"
#include <stdlib.h>
#include <string.h>
void menu()
{
system("clear");
printf("***************************\n");
printf("********1,添加信息*********\n");
printf("********2,查看信息*********\n");
printf("********3,查找信息*********\n");
printf("********4,删除信息*********\n");
printf("********5,排序 *********\n");
printf("********6,修改信息*********\n");
printf("********7,查看用户数******\n");
printf("********8,退出 *********\n");
printf("***************************\n");
printf("*******请选择你想要的功能**\n");
}
int addressInsert(NODE *l, int p)
{
//char str[20] = {0};
if(NULL == l)
{
return FAILURE;
}
NODE *q = l;
int len = 1;
while(len < p)
{
q = q->next;
len++;
}
NODE *b = (NODE *)malloc(sizeof(NODE));
if(NULL == b)
{
return FAILURE;
}
printf("请输入姓名:\n");
scanf("%s", b->first.name);
// printf("%s", str);
//strcpy(b->first.name, str);
printf("请输入性别:\n");
scanf("%s", b->first.sex);
printf("请输入年龄:\n");
scanf("%s", b->first.age);
printf("请输入号码:\n");
scanf("%s", b->first.ID);
b->next = q->next;
q->next = b;
return SUCCESS;
}
int addressTraverse(NODE *l, void (*p)(char *))
{
if(NULL == l)
{
return FAILURE;
}
NODE *q = l;
while(q->next)
{
q = q->next;
printf("姓名 性别 年龄 号码\n");
p(q->first.name);
p(q->first.sex);
p(q->first.age);
p(q->first.ID);
printf("\n");
sleep(2);
}
return SUCCESS;
}
int addressLocate(NODE *l, char *str, int (*q)(char *, char *), void (*k)(char *))
{
//char *str = (char *)malloc(sizeof(char));
printf("请输入你想查找信息的姓名:\n");
scanf("%s", str);
NODE *p = l;
int len = 0;
while(p->next != NULL)
{
p = p->next;
len++;
//printf("%d\n", len);
if(q(p->first.name, str) == TRUE)
{
printf("该联系人详细信息如下:\n");
printf("姓名 性别 年龄 号码 \n");
k(p->first.name);
k(p->first.sex);
k(p->first.age);
k(p->first.ID);
printf("\n");
sleep(2);
return len;
}
}
return FAILURE;
}
int addressLength(NODE *l, char *str, int (*q)(char *, char *))
{
if(NULL == l)
{
return FAILURE;
}
NODE *p = l;
int len = 0;
while(p->next)
{
p = p->next;
len++;
}
return len;
}
int addressDelete(NODE *l, char *str, int (*q)(char *, char *))
{
printf("请输入你想删除信息的姓名:\n");
scanf("%s", str);
NODE *p = l;
int len = 0;
while(p->next)
{
NODE *x = p;
p = p->next;
if(q(p->first.name, str) == TRUE)
{
// NODE *t = p;
//t->first = p->first;
x->next = p->next;
//x->next = t;
free(p);
return SUCCESS;
}
}
return FAILURE;
}
int addressSort(NODE *l, void (*f)(DATA *, DATA *))
{
int i, j;
char *str;
if(NULL == l)
{
return FAILURE;
}
NODE *p = l->next;
while(p->next)
{
NODE *q = p;
p = q->next;
for(i = 0; i < SIZE - 1; i++)
{
for(j = 0; j < SIZE - 1 - i; j++)
{
if(strcmp(q->first.name, p->first.name) > 0)
{
f(&(q->first), &(p->first));
}
}
}
return SUCCESS;
}
}
int addressCorrect(NODE *l, char *str, int (*q)(char *, char *))
{
int m, h;
if(NULL == l)
{
return FAILURE;
}
printf("请输入你想修改信息的姓名:\n");
scanf("%s", str);
NODE *p = l;
while(p->next)
{
p = p->next;
if(q(p->first.name, str) == TRUE)
{
aa: printf("请输入你想修改信息的部分,修改姓名请按1, 修改年龄请按2,修改性别情按3,修改号码请按4,退出修改请按5\n");
scanf("%d", &m);
switch(m)
{
case 1:
bb: printf("请输入新的名字:\n");
scanf("%s", p->first.name);
printf("%s", p->first.name);
printf("清确认修改是否正确,正确并继续修改请按1,错误重新修改请按2,退出修改请按3!\n");
scanf("%d", &h);
if(h == 1)
{
goto aa;
}
else if(2 == h)
{
goto bb;
}
else if(3 == h)
{
return SUCCESS;
}
case 2:
cc: printf("请输入新的年龄:\n");
scanf("%s", p->first.age);
printf("%s", p->first.age);
printf("清确认修改是否正确,正确并继续修改请按1,错误重新修改请按2,退出修改请按3!\n");
scanf("%d", &h);
if(h == 1)
{
goto aa;
}
else if(2 == h)
{
goto cc;
}
else if(3 == h)
{
return SUCCESS;
}
case 3:
dd: printf("请输入新的性别:\n");
scanf("%s", p->first.sex);
printf("%s", p->first.sex);
printf("清确认修改是否正确,正确并继续修改请按1,错误重新修改请按2,退出修改请按3!\n");
scanf("%d", &h);
if(h == 1)
{
goto aa;
}
else if(2 == h)
{
goto dd;
}
else if(3 == h)
{
return SUCCESS;
}
case 4:
ee: printf("请输入新的号码:\n");
scanf("%s", p->first.ID);
printf("%s", p->first.ID);
printf("清确认修改是否正确,正确并继续修改请按1,错误重新修改请按2,退出修改请按3!\n");
scanf("%d", &h);
if(h == 1)
{
goto aa;
}
else if(2 == h)
{
goto ee;
}
else if(3 == h)
{
return SUCCESS;
}
}
}
}
return FAILURE;
}