头文件:
/* 单链表中每个结点的联系人结构体定义*/
typedef struct Node/* 每个联系人结构体*/
{
char name[10];//姓名
char telnum[20];//电话号码
char address[256];//地址
struct Node *next;
}SLNode;
void Initiate(SLNode ** head)/* 初始化单链表*/
{
if((*head=(SLNode *)malloc(sizeof(SLNode)))== NULL)
{
printf("内存空间不足!\n");
exit(1) ;
}
(*head)->next=NULL;/* 置链尾标记NULL */
}
int Length(SLNode *head)//求当前通讯录中的联系人数
{
SLNode *p;/* p指向头结点*/
int size;/* size初始值为0 */
p = head->next;
size = 0 ;
while(p != NULL && head != NULL)/* 循环计数*/
{
k = k->next;
size++;
}
return size;/* 返回其大小*/
}
void DataWrite(SLNode *head)
{
SLNode *p;
int i;
FILE *fp;
fp = fopen("Address ","wb+");//打开文件,覆盖以前的文件
p = head->next;
for( i = 0;i < Length(head);i++)
{
fwrite(p,sizeof(SLNode),1,fp);
p =p->next;
}
fclose(fp);//关闭文件
}
void Load(SLNode *head)/* 初始化*/
{
SLNode *q,*p,*m;
FILE *fp;
int count = 0 ;
fp = fopen("Address ","rb");//以读的方式打开二进制文件
//rewind(fp);
if(fp == NULL)
{
fp = fopen("Address ","wb+");
if(fp != NULL)
{
printf("通讯录打开失败!创建新的通讯录!\n");
}
else
{
printf("通讯录打开失败!创建新的通讯录失败!\n");
exit(0);
}
}
else
{
q = (SLNode *)malloc(sizeof(SLNode ));
while(fread(q,sizeof(SLNode),1,fp))
{
//fread(q,sizeof(SLNode),1,fp);
if(ferror(fp))
{
printf("error!\n");
break;
}
p = head;
m = (SLNode *)malloc(sizeof(SLNode));
strcpy(m->name,q->name);
strcpy(m->telnum,q->telnum);
strcpy(m->address,q->address);
count++;
m->next=p->next;/* 将新结点插入队头结点*/
p->next=m;
memset(q,'\0',sizeof(SLNode));
}
}
fclose(fp);
printf("\t\t\t\t 通讯录总联系人数:%d \n",Length(head));
}
int PrintAll(SLNode *head)/* 打印所有出所有联系人信息*/
{
int i;
SLNode *q;
q = head->next;
if(q == NULL)
{
printf("通讯录为空!\n");
return -1;
}
else
{
for(i = 0 ; i< Length(head);i++)//逐个打印联系人信息
{
printf("编号:%d\t姓名:%s\t号码:%s\t地址:%s\n",i+1,q->name,q->telnum,q->address);
q = q->next;
}
return 0;
}
}
void ANParam(S
数据结构通讯录系统源代码 来自淘豆网m.daumloan.com转载请标明出处.