C语言-通讯录


#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;
}






 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盒曰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值