#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct record
{
int number;//编号
char name[12];//姓名
char sex;//性别
char phone[12];//电话号码
struct record*next;//指向了下一条记录
}RECORD,*PRECORD;
PRECORD phead=NULL;//头指针
//添加记录
void AddRecord(int num,char *name,char sex,char *phone)
{
PRECORD pr=(PRECORD)malloc(sizeof(RECORD)),ptmp;//分配一块内存空间
pr->number=num;
// pr->name=name ;错误的赋值方法
strcpy(pr->name,name);//把传递的name指针指向的字符串拷贝到pr指向的结构体成员中
strcpy(pr->phone,phone);//字符需要这样赋值
pr->sex=sex;
pr->next=NULL;
if(!phead)
phead=pr;
else
{
ptmp=phead;
while(ptmp->next)
ptmp=ptmp->next;
ptmp->next=pr;
}
}
//获取当前链表中的记录的数量
unsigned NumOfRecords()
{
unsigned count=0;
PRECORD ptmp=phead;
while(ptmp)
{
++count;
ptmp=ptmp->next;
}
return count;
}
//显示所有的记录
void ShowRecords()
{
PRECORD pr=phead;
//打印表头
printf("-------------------------------------------\n");
printf("%9s%15s%10s%18s\n","编号","姓名","性别","电话号码");
printf("-----------------------------------------------\n");
//循环打印出所有记录
while(pr)
{
printf("%9d%15s%10s%18s\n",pr->number,pr->name,
pr->sex=='m'? "男":"女",pr->phone);
pr=pr->next;
}
//打印表尾
printf("--------------------------------\n");
}
//删除一条记录
void DelRecord(int num)
{
PRECORD pr=phead,ptmp;
if(!phead)//如果没有记录
{
printf("错误!通讯录为空!\n");
return;
}
if(phead->number ==num)
{
ptmp=phead;
phead=phead->next;
free(ptmp);
printf("删除记录成功!\n");
return;
}
//要删除的记录不是第一条记录
while(pr->next)
{
if(pr->next->number==num)//下一条记录的编号等于我们要删除的编号
{
ptmp=pr->next;//把下一条记录的地址保存到ptmp中
pr->next=ptmp->next;//将当前指针的next指针赋为下一条的下一条记录
free(ptmp);//删除之前我们保存在ptmp当中的那条记录
printf("删除成功\n");
return;
}
pr=pr->next;//让pr不断指向下一条记录
}
printf("没有该编号的记录!\n");
}
int main()
{
//自己手工输入几条记录
AddRecord(10001,"A",'m',"136666");
AddRecord(10002,"B",'l',"139996");
AddRecord(10003,"C",'m',"1366212");
AddRecord(10004,"D",'l',"13665666");
AddRecord(10005,"F",'m',"13663365");
ShowRecords();
printf("*************共有%d条记录*************************\n",NumOfRecords());
DelRecord(10005);
ShowRecords();
printf("***************共有%d条记录******************\n",NumOfRecords());
return 0;
}