基于C语言编写的电子通讯录

        该系统实现了电子通讯录的基本功能(新建联系人、查找联系人、修改联系人信息、删除联系人),这个代码是在基于C语言的学生成绩管理系统的基础上修改的,代码包含的知识比较综合,源代码是三个人合作完成的。

录入联系人的信息

void Creatlist(Nodelinklist **tx20,int n){
	Nodelinklist *p=NULL,*pr=NULL;//p为当前节点,pr为尾结点
	int j=0;
	if(n==0){*tx20=NULL; printf("\n你创建了一个空表");return;}
    (*tx20)=(Nodelinklist *)malloc(sizeof(Nodelinklist));
    printf("\n第%d个编号:",j+1);scanf("%s",(*tx20)->Stu.no);getchar();//提示输入编号 
	printf("第%d个姓名:",j+1);gets((*tx20)->Stu.name);//提示输入姓名 
	printf("第%d个电子邮件:",j+1) ;gets((*tx20)->Stu.email);//提示输入电子邮件
	printf("第%d个地址:",j+1) ;gets((*tx20)->Stu.add);//提示输入地址 
	printf("第%d个电话:",j+1);gets((*tx20)->Stu.phone); 
	(*tx20)->next=NULL;
	pr=(*tx20);  
	*tx20=pr;
	for(j=1;j<n;j++){
    p=(Nodelinklist *)malloc(sizeof(Nodelinklist));
	printf("\n第%d个编号;",j+1);scanf("%s",p->Stu.no);getchar();
	printf("第%d个姓名:",j+1);gets(p->Stu.name);
	printf("第%d个电子邮件:",j+1);gets(p->Stu.email);
	printf("第%d个地址:",j+1) ;gets(p->Stu.add);
	printf("第%d个电话:",j+1);gets(p->Stu.phone);
	p->next=NULL;
	pr->next=p;
    pr=p;

	}	
}

通过姓名查找联系人新建联系人

int  find(Nodelinklist **tx20,int n){
	char A[100]={'\0'};
	Nodelinklist *p=NULL;
	int i=0;
    if(*tx20==NULL){
		printf("\n通讯录中没有联系人可删除!");
		return 0;
	}	
	printf("\n输入他的姓名:");
	gets(A);
    p=*tx20; 
	for(i=0;i<n;i++){
		if(strcmp(A,p->Stu.name)!=0){
			p=p->next;
		}else{
		break;
		}
	}
	if(i==n){
			printf("\n通讯录中找不到此联系人!");
			return 0;
		}
	printf("\n你要找联系人信息:\n编号:%s,姓名:%s,电子邮件:%s,地址:%s,电话:%s\n",p->Stu.no,p->Stu.name,p->Stu.email,p->Stu.add,p->Stu.phone);
	return 1;
}

新建联系人

void Insert_L_NH(Nodelinklist **tx20,int *n){
	int i=0,j=0;
	Nodelinklist *p=NULL,*pr=NULL;
	printf("\n\n开始插入:\n");
	printf("Please input i=:\n");
	scanf("%d",&i);//输入要插入的位置
	if(i<1){
		printf("\n插入失败!");
		return;
	}
	//先开辟结点
	p=(Nodelinklist *)malloc(sizeof(Nodelinklist));
	getchar();
	printf("新联系人的的编号为:");
	gets((p->Stu).no);
	printf("新联系人的姓名为:");
	gets((p->Stu).name);
	printf("新联系人的电子邮件为:");
	gets((p->Stu).email);
	printf("新联系人的地址为:");
	gets((p->Stu).add);			
	printf("新联系人的电话号码为:");
	gets((p->Stu).phone);
	p->next=NULL;
	if(*tx20==NULL){//原表是一个空表,新插入的节点成为标中唯一的一个节点
		*tx20=p;
		printf("插入成功!\n");
		(*n)++;
		return;
	}
	if(*tx20!=NULL){//原表不为空
		//特殊处理i=1
	    if(i==1){
			p->next=*tx20;
		    *tx20=p;
		    printf("插入成功!\n");
		    (*n)++;
		    return;
		}
		//一般情况
		if((i>1)&&(i<=*n)){
			pr=*tx20;
		    for(j=2;j<=i-1;j++){
				pr=pr->next;
			}//先要进行遍历,定位到前一个节点
			p->next=pr->next;
		    pr->next=p;
			printf("插入成功!\n");
			(*n)++;
			return;
		}
		//插入越界
		if(i>*n){
			pr=*tx20;	
			i=*n;
	        for(j=1;j<=i-1;j++){
				pr=pr->next;
			}//先要进行遍历,定位到前一个节点
	        pr->next=p;
            (*n)++;
	        return;
		}
	}	
}

 按编号查找联系人

int Find(Nodelinklist **tx20,char B[100],int n){
	int i=0;
	Nodelinklist *p=NULL;
	p=*tx20;
	for(;i<n;i++){
		if(strcmp(B,p->Stu.name)!=0){
			p=p->next;
		}else{
			break;
		}
	}
	if(p==NULL){
		return 0;
	}else{
		return i+1;
	}
}

按姓名删除联系人

void Delet_L_NH(Nodelinklist **tx20,int *n){
	Nodelinklist *p=NULL,*pr=NULL;
	int i=0,j=0;
	char thename[100]={'\0'};
	printf("\n开始删除:\n");
	//先判断链表是否为空
	if(*tx20==NULL){
		printf("The link is empty!");
		return;
	}
	//输入要删除的姓名 
	printf("请输入你要删除的联系人的姓名:\n");
	gets(thename);
	p=*tx20;
    //判断特殊情况,存不存在这个学生
	if(Find(tx20,thename,*n)==0){
		printf("\n查无此人!");
		return;
	}
	//判断特殊情况,是不是第一个学生
	if(Find(tx20,thename,*n)==1){
		*tx20=p->next;
		free(p);
		printf("删除成功!\n");
		(*n)--;
		return;
	}
	//一般情况
	if(Find(tx20,thename,*n)!=1&&Find(tx20,thename,*n)!=0){
		for(i=2;i<=(Find(tx20,thename,*n)-1);i++){
			p=p->next;
		}//用查找函数可知道是第几个节点,再用循环定位到该节点的前一个地址
		p->next=p->next->next;
		printf("删除成功!\n");
		(*n)--;
		return;
	}
} 

按姓名的首字母将联系人排序(冒泡排序)

void PopSort(Nodelinklist **tx20,int n){
	Nodelinklist *h=NULL,*f=NULL,*p=NULL;
	int i=0,j=0;
	Stu temp;
    if(*tx20==NULL){
		printf("\n空表,无值可输!");
		return;
	}
    h=*tx20;
	f=(*tx20)->next;
	for(i=1;i<n;i++){
		h=*tx20;
		f=h->next;//交换会改变第一个节点
		for(j=1;j<n-i+1;j++){
			/*if((f->Stu.score)>(h->Stu.score)){
							temp=f->Stu;
							f->Stu=h->Stu;
							h->Stu=temp;
						}*/
			if(strcmp(f->Stu.name,h->Stu.name)<0){
				temp=f->Stu;
			    f->Stu=h->Stu;
			    h->Stu=temp;
			}
			h=h->next;
			f=f->next;
		}
	}
	p=*tx20;
	for(i=1;p!=NULL;i++){
		printf("\n第%d个联系人的的信息,编号:%s,姓名:%s,电子邮件:%s,地址:%s,联系电话:%s\n",i,p->Stu.no,p->Stu.name,p->Stu.email,p->Stu.add,p->Stu.phone);p=p->next;
	}
}

修改联系人的信息

void ReviseChange(Nodelinklist **tx20,int n){
	char A[10]={'\0'},B[12]={'\0'};
	int j=0,i=0;
    Nodelinklist *p=NULL;
	printf("\n\n开始修改联系人的信息:");
	if(*tx20==NULL){
		printf("\n无法进行修改,这是一个空表!");
		return;
	}
	printf("输入联系人的姓名");
    gets(A);
	for(i=0,p=*tx20;i<n;i++){
		if(strcmp(A,p->Stu.name)!=0){
			p=p->next;
		}else{
			break;
		}
	}	
	if(p==NULL){
		printf("查无此人!");
		return;
	}
    printf("该同学信息:\n编号:%s,姓名:%s,电子邮件:%s,地址:%s,电话号码:%s\n",p->Stu.no,p->Stu.name,p->Stu.email,p->Stu.add,p->Stu.phone); 
	printf("该联系人的电子邮件改为:");gets(p->Stu.email);
	printf("该联系人的地址改为:") ;gets(p->Stu.add);
	printf("该联系人的电话号码改为:");gets(p->Stu.phone);
} 

代码的主要功能函数如上,读者如有更好地建议可以在评论区相互交流。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值