用读写文件方式实现通讯录

<pre class="cpp" name="code">#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SEEK_SET
struct person
{
	char name[10];
	char sex[4];
	int age;
	char tel[11];
	char addr[20];
};
char filename[20];
FILE * fp;
void add();
void show();
void insert();
void search();
void modify();
void delet();
	
int main()
{
		int ch;
		add();
		while(1)
		{
				printf("***********************************************************\n");
				printf("1.添加联系人信息 2.查找联系人信息 3.修改联系人信息     \n");
				printf("4. 删除联系人信息5.显示所有联系人信息 6.插入联系人信息 0.退出 \n");
				printf("***********************************************************\n");
			printf("输入你的选择:\n");
			scanf("%d",&ch);
	     	 if(ch<7&&ch>=0)
			 {
				switch(ch)
				{
				case 1:add();
					break;
				case 2:search();
					break;
				case 3: modify();
					break;
				case 4:delet();
					break;
				case 5:show();
					break;
				case 6:insert();
					break;
				case 0:exit(0);
					}
				}
			 printf("选择错误,请再次选择\n");
			}
		return 0;
	}
	
void add()
{
	struct person p;
	printf("请输入文件名:");
	scanf("%s",filename);
	if((fp=(FILE *)fopen(filename,"w+"))==NULL)
	{
		printf("打开文件失败无法创建通讯录!\n");
		exit(0);
	}
	else
		fprintf(fp,"%-10s%-20s%-25s%-30s%-40s\r\n","姓名","性别","年龄","电话","住址");
	printf("请输入姓名、性别、年龄、电话、家庭住址(以0结束)\n");
	while(strcmp(p.name,"0")!=0)
	{    
		scanf("%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
		fprintf(fp,"%-10s%-20s%-25d%-30s%-40s\n",p.name,p.sex,p.age,p.tel,p.addr);
		scanf("%s",p.name);
	}
    fclose(fp);
}

void show()
{   
	struct person p;
	if((fp=fopen(filename,"r"))==NULL)
	{
		printf("无法打开文件!\n");
		exit(0);	
	}
	printf("%35s\n\n","通讯薄");
	fseek(fp,128,SEEK_SET);
	fprintf(fp,"%c",'b');
	fscanf(fp,"%s%s%d%s%s\n",p.name,p.sex,&p.age,p.tel,p.addr);	printf("%-10s%-15s%-20s%-25s%-30s\n","姓名","性别","年龄","电话","住址");
	 printf("%-10s%-15s%-20d%-25s%-30s\n",p.name,p.sex,p.age,p.tel,p.addr);

	fclose(fp);	
}

void insert()
{
	struct person p;
	if((fp=fopen(filename,"a"))==NULL)
	{
		printf("无法打开文件!\n");
		exit(0);	
	}
	printf("请输入要添加的姓名、性别、年龄、电话、家庭住址\n");
    scanf("%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
    fprintf(fp,"%-10s%-20s%25d%-30s%-40s\n",p.name,p.sex,p.age,p.tel,p.addr);
	fclose(fp);
}


void search()
{   
	struct person p;
	int k=0;
	char namekey[10];
	printf("请输入姓名\n");
	scanf("%s",namekey);
	if((fp=fopen(filename,"r"))==NULL)
	{
		printf("无法打开文件!\n");
		exit(0);	
	}
	while(!feof(fp))
	{
		
		fscanf(fp,"%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
		if(strcmp(p.name ,namekey)==0)
		{
			printf("%-10s%-20s%-25d%-30s%-40s\n",p.name,p.sex,p.age,p.tel,p.addr);
			k=1;
			break;
		}
	}
	if(!k)
	 printf("通讯录中无此人的记录\n");
	fclose(fp);
		
}
	 
void modify()
	{
		struct person p;
		int k=0;
		long offset;
		char namekey[11];
		printf("请输入你要修改的联系人的姓名:\n");
		scanf("%s",p.name);
		if((fp=(FILE *)fopen(filename,"r+"))==NULL)
		{
			printf("无法打开文件!\n");
			exit(0);	
		}
		while(feof(fp==0))
		{
			
			offset=ftell(fp);
			fscanf(fp,"%s%s%d%s%s",p.name,p.sex,&p.age,p.tel.p.addr);
			if(strcmp(namekey,p.name)==0)
			{
				k=1;
				break;
			}
		}
		if(k)
		{   
			printf("已找到,记录为:\n");
			printf("%-10s%-20s%30d%-40s%-50s\n",p.name,p.sex,p.age,p.tel,p.addr);
			printf("请输入新的联系人信息:\n");
			printf("请输入你要修改的姓名、性别、年龄、电话、家庭住址\n");
			scanf("%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
			fseek(fp,offset,SEEK_SET);
			printf("%ld",ftell(fp));
			fprintf(fp,"%-10s%-20s%30d%-40s%-50s\n",p.name,p.sex,p.age,p.tel,p.addr);
		}
		else
			printf("通讯录中没有此人的记录\n");
		fclose(fp);
	}
	
void delet()
{   
	struct person p;
	int k=0;
	long offset;
	char namekey[10];
	printf("请输入姓名:\n");
	scanf("%s",namekey);
	if((fp=fopen(filename,"r"))==NULL)
	{
		printf("无法打开文件!\n");
		exit(0);
	}
	while(!feof(fp))
	{
		offset=ftell(fp);
		fscanf(fp,"%s%s%d%s%s",p.name,p.sex,&p.age,p.tel,p.addr);
		if(strcmp(namekey,p.name)==0)
		{
			k=1;
			break;
		}
	}
	if(k)
	{
		printf("%-10s%-20s%30d%-40s%-50s\n",p.name,p.sex,&p.age,p.tel,p.addr);
		fseek(fp,offset,SEEK_SET);
		fprintf(fp,"%-10s%-20s%30d%-40s%-50s\n"," "," "," "," "," ");
	}
	else
		printf("通讯录中没有找到此人的记录\n");
	fclose(fp);
}





 


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实训项目,满足以下要求 【要求】 (1)程序的主窗口如左图所示。 程序启动时,窗口左边的“姓名”列表框中显示了本软件中已保存的所有人员姓名,从中选择一个姓名,窗口左边的“详细信息”区域显示出此人的详细通讯录内容。 (2)窗口顶部“城市”和“性别”两个列表框中列出了可供选择的城市名称和姓名。使用这两个控件,可以筛选出感兴趣的内容。例如,在“城市”中选择“南京”,在性别中选择“男”,则在“姓名”列表框中只显示出程序所保存的住在南京的男性人员。选择“城市”和“性别”中的“全部”,则列出所有人员。 (3)单击“添加”按钮 ,弹出一个对话框。通过此对话框,可以添加新的通讯录条目。在添加新条目时,所在城市应从组合框中选择,若组合框中没有想要的城市,可以直接在组合框中键入。要求键入的新城市名能自动添加到“添加”对话框中“所在城市”组合框和主窗口中“城市”组合框的下拉列表中。 (4)在主窗口中点击“删除”按钮 可以删除当前显示的条目。 (5)增加“保存”和“打开”按钮或菜单项,要求能够自动保存所做的添加和删除操作。 (6)所有的数据保存在.txt文件中,并能出。比如.txt文件的每一行保存一条记录。如:姓名|性别|生日…………【可选用CFile/CStdioFile类】 【提示】创建通讯类,包括姓名、性别、生日、所在城市、工作单位、办公电话、住宅电话等必要信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值