通讯录 C语言

实现的功能:

1、从本地文件加载原有数据

2、添加联系人

3、删除信息

4、修改信息

5、显示全部联系人

6、查找并查看联系人

7、保存到本地文件

#include<stdio.h>
#define size 10000
struct tel     //定义结构体数组 
{
	char name[20];
	int age;
	long phnum;
	long qq;
	char addr[20];
	
}stu[size],*p;

int length;    //定义全局变量 

void cover()
{
	printf("\t\t    *****************************\t\t\n"); 
	printf("\t\t    *       欢迎使用此程序\t*\n");
	printf("\t\t    *        1.添加信息\t\t*\n");
	printf("\t\t    *        2.显示信息\t\t*\n");
	printf("\t\t    *        3.查询信息\t\t*\n");
	printf("\t\t    *        4.修改信息\t\t*\n");
	printf("\t\t    *        5.删除信息\t\t*\n");
	printf("\t\t    *        6.退出  \t\t*\n");
	printf("\t\t    *****************************\t\t\n"); 
} 

void init()
{
	FILE *fp;
	int i=0; 
	length=0;
	fp=fopen("d:\\shi","r");
	if(fp==NULL)
	{
		printf("\tthe first use !");
  		fp=fopen("d:\\shi","w+");
	}
	else 
	{	
	    p=stu;
	    while(fread(p,sizeof(struct tel),1,fp)==1)
		{
			p++;i++; 
		} 
		printf("\t已成功加载%d个文件",i);         
	}	
	length=i;
	fclose(fp); 
}
                                       
void add()
{
	FILE *fp;
	fp=fopen("d:\\shi","w+");
	p=length+stu;
	printf("\n请输入姓名:");
	scanf("%s",p->name);
	printf("\n请输入年龄:");
	scanf("%d",&p->age);
	printf("\n请输入电话号码:");
	scanf("%ld",&p->phnum); 
	printf("\n请输入qq号:"); 
	scanf("%ld",&p->qq);
	printf("\n请输入地址:"); 
	scanf("%s",p->addr); 
	length++; 
	printf("\n现在已有数据%d个\n\n",length);
	fclose(fp);                            
} 

void save()
{
	FILE *fp;
	fp=fopen("d:\\shi","w+");
	for(p=stu;p<stu+length;p++)
	fwrite(p,sizeof(struct tel),1,fp);  
	fclose(fp);
} 

void show()
{
	FILE *fp;
	p=stu;
	fp=fopen("d:\\shi","r");
	if(fp!=NULL)
	{
 		printf("姓名\t\t年龄\t\t电话\t\tQQ号\t\t地址\t    \n");
      	while(fread(p,sizeof(struct tel),1,fp)==1)
	  	{
			printf("%s\t\t%d\t\t%ld\t\t%ld\t\t%s",p->name,p->age,p->phnum,p->qq,p->addr);
			printf("\n");
			p++;
	  	} 
	}
	else
	{
		printf("错误\n"); 
  		exit(0);
	}
	fclose(fp);                 
}

int search()
{
	FILE *fp;
	char names[20];
	int i=0;
	printf("请输入人员姓名:");
	if((fp=fopen("d:\\shi","r+"))==NULL)
 	{
	    printf("文件不存在\n");
	    exit(0);
  	}
	else if((fp=fopen("d:\\shi","r+"))!=NULL)
	{
	  	scanf("%s",names);
	  	for(p=stu;p<length+stu;p++)
		if((strcmp(names,p->name))==0) 
		{
		   i++; 
		   return i;
     	}
	  	if (p>=stu+length)
		 	return -1;
	} 
	fclose(fp);
}

void delete()
{
	int i,k; 
	k=search();
	if(k!=-1)
	{
		for(i=k;i<length-1;i++)
		{
			p[i-1]=p[i];
		} 
		length--;
	} 
 	else
 	{
	 	printf("没有此人,无法删除!");
	}
} 

void change()
{
	FILE *fp;
	int k,i;
	fp=fopen("d:\\shi","r+");
	k=search();
	if(k!=-1)
	{
		i=k-1;
		printf("\n请输入姓名:");
		scanf("%s",stu[i].name);
		printf("\n请输入年龄:");
		scanf("%d",&stu[i].age);
		printf("\n请输入电话号码:");
		scanf("%ld",&stu[i].phnum); 
		printf("\n请输入qq号:"); 
		scanf("%ld",&stu[i].qq);
		printf("\n请输入地址:"); 
		scanf("%s",stu[i].addr); 
	}
	else
		printf("没有此人,无法修改!");
	fclose(fp);
}

int xuanze()
{
	char k; 
	int i=0;

	scanf("%c",&k);
	if(k=='y')
	i++;
	return i;
}

main()        //主函数 
{
	int x;			
    do
	{
	    system("cls"); /*清屏*/
	    init();
	    printf("\n");
	    cover();
	    printf("请输入选择的菜单:"); 
    	    scanf("%d",&x);
	    switch(x)
     	{
			case 1:
				add(); 
				save();
				printf("继续使用软件吗?(y/n)\n");
				xuanze();
				if((xuanze())==1)
				  	break;
				else
				  	exit(0);
			case 2:
				show();
				printf("继续使用软件吗?(y/n)\n");
				xuanze();
				if(xuanze()==1)
				 	break;
				else
		            exit(0);	
    		case 3:
				search();
				printf("姓名\t\t年龄\t\t电话\t\tQQ号\t\t地址\t    \n");
				printf("%s\t\t%d\t\t%ld\t\t%ld\t\t%s\n",p->name,p->age,p->phnum,p->qq,p->addr);
				printf("继续使用软件吗?(y/n)\n");
				xuanze();
				if(xuanze()==1)
				 	break;
				else
		            exit(0);
    		case 4:
			 	change();
				save(); 
				printf("继续使用软件吗?(y/n)\n");
				xuanze();
				if(xuanze()==1)
				 	break;
				else
		            exit(0);
    		case 5:
				delete();
				save(); 
				printf("继续使用软件吗?(y/n)\n");
				xuanze();
				if(xuanze()==1)
				 	break;
				else
    				exit(0);
        	case 6:
       	            exit(0);            
        	default:
		         printf("输入错误!\n");
			  	 exit(0);
   		}
     }while(1);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值