C语言的个人通讯录管理系统

  随着科技的高速发展,智能手机开始普及,在这个互联网高速发展的世界里,人们需要对你所熟悉的亲朋好友的联系方式记录,因此,通讯录系统可以极大方便人们查找和更新联系人信息

具体代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#define Phone "contact.txt"
#define Phone_Backup "contact_backup.txt"
//通讯录管理系统
//1.主页单
//2.查找联系人
//3.添加联系人
//4.修改联系人
//5.删除联系人
//6.退出系统 
/**结构体**/
//定义一个联系人结构体
struct contact {
	char name[50];//姓名 
	char phone[20];//电话  
};
/*函数声明*/
void write();//文件保存联系人 
void menu();//主菜单
void fnd();//查找联系人 
void add();// 添加联系人
void modify();//修改联系人
void del();//删除联系人 
struct contact contacts[1000];//定义结构体数组
int a = 0;//联系人数量
//主菜单 
void menu(){
	printf("      个人通讯录管理系统\n");
	printf(" 1.查找联系人\n");
	printf(" 2.添加联系人\n");
	printf(" 3.修改联系人\n");
	printf(" 4.删除联系人\n");
	printf(" 5.退出\n");
  	printf(" 请选择(1-5):");
}
//添加联系人 
void add() {
	struct contact con;
	printf("请输入联系人:");
	scanf("%s", con.name);
	printf("请输入联系人手机号:");
	scanf("%s", con.phone);
	FILE* fp;
	if ((fp = fopen(Phone, "ab+")) == NULL) fp = fopen(Phone, "w");
	if (fwrite(&con, sizeof(struct contact), 1, fp) == 1) {
		printf("添加成功\n");
		a++;//更新联系人数量 
	}
	system("pause");
	fclose(fp);
}
//查找联系人 
void  search() {
	struct contact con;
	printf("请输入要查找的联系人:");
	char temp_name[50];
	scanf("%s", temp_name);
	FILE* fp;
	fp = fopen(Phone, "rb");
	while (fread(&con, sizeof(struct contact), 1, fp) == 1)
	{
		if (strcmp(con.name, temp_name) == 0) {
			printf("%s%s%s%s%s", "联系人姓名:", con.name,"\n联系人电话:",con.phone,"\n");
		}
	}
	if(strcmp(con.name, temp_name) != 0){
		printf("未找到该联系人\n");
	}
	system("pause");
	fclose(fp);
}
//修改联系人 
void modify() {
	struct contact con;
	printf("请输入要修改的联系人:");
	char temp_name[50];
	char temp_Phone[20];
	scanf("%s", temp_name);
	printf("请输入要修改的联系人电话:");
	scanf("%s", temp_Phone);
	FILE* fp;
	FILE* new_fp;
	if ((new_fp = fopen(Phone_Backup, "ab+")) == NULL) new_fp = fopen(Phone_Backup, "w");
	fp = fopen(Phone, "rb");
	while (fread(&con, sizeof(struct contact), 1, fp) == 1)
	{
		if (strcmp(con.name, temp_name) == 0) {
			strcpy(con.phone, temp_Phone);
		}
		fwrite(&con, sizeof(struct contact), 1, new_fp);
	}
	fclose(fp);
	fclose(new_fp);
	if (remove(Phone) == 0) {
		if (rename(Phone_Backup, "contact.txt") == 0) printf("修改成功\n");
		else perror("error:");
	}
	else perror("错误:");
	system("pause");
}
//写入文件 
void write() {
	//打开文件
	FILE* fp;
	if ((fp = fopen("contact.txt", "ab+")) == 0) {
		fp = fopen("contact.txt", "wb");
	}
	struct contact con;
	if (fwrite(&con, sizeof(struct contact),1, fp) == 0){
		printf("写入成功");
	}
	fclose(fp);
	return;
}

//删除联系人
void del(){
	FILE *fp;
	char name[20];
	char ch[2];
	int a=0;
	if((fp=fopen(Phone,"r+"))==NULL)		//contacts.txt文件不存在 
    { 
		printf("文件不存在!\n");
		return;
	}
  	while(!feof(fp))  if(fread(&contacts[a],sizeof(struct contact),1,fp)==1) a++;
  	fclose(fp);
  	if(a==0) 
  	{
	  	printf("文件中没有记录!\n");			//data.txt文件存在,但里面没有内容 
	  	return;
  	}
	printf("请输入要删除的联系人的名字:\n");	
	scanf("%s",name);
	for(int i=0;i<a;i++){
		if(strcmp(contacts[i].name,name)==0){
			printf("找到了这条记录,是否删除?(y/n):\n");
     		scanf("%s",ch);	
			if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
      		{
	  			for(int j=i;j<a;j++)
	      		contacts[j]=contacts[j+1];/*将后一个记录移到前一个记录的位置*/
	       		a--;/*记录的总个数减1*/
      			if((fp=fopen(Phone,"wb"))==NULL)
     			{ 
				 	printf("文件不存在\n");
					return;
				}
  				for(int j=0;j<a;j++)/*将更改后的记录重新写入指定的磁盘文件中*/
      			if(fwrite(&contacts[j] ,sizeof(struct contact),1,fp)!=1)
       			{ 
				   	printf("can not save!\n");
      				getch();
				}
  				fclose(fp);
  				printf("删除成功!\n");
      		}else{
      			printf("找到了记录,选择不删除!"); 
	  		}
  				break;
		}
			
	}
}
//主函数 
int main(){
	int code;
	printf("请输入登录密码:");
	scanf("%d",&code);
	while(code!=123456){
        printf("密码错误,请重新输入密码!\n");
        printf("请重新输入密码:");
        scanf("%d",&code);
    }
	system("color f0\n");//白底黑字
	while(1){
		system("cls");
		menu();
		int n;
		printf("请选择:");
		scanf("%d", &n);
		switch(n){
			case 1:
				search();
				break;
			case 2:
				add();
				break;
			case 3:
				modify();
				break;
			case 4:
				del();
				break;
			case 5:return 0;
			break;
			default:
				break;
		}
		//system("pause");
	}
	return 0;
}

注意事项:

1.利用结构体数组保存数据

2.while循环可以不用写,保存数据时可以用到文件存储,这时可以加上while用于读取文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值