文件通讯录的实现

在写文件通讯录之前,大家应该对fread和fwrite函数有所了解,这篇博客有对fread和fwrite的介绍,希望大家在看文件通讯录之前了解一下:https://blog.csdn.net/cdatreides/article/details/80763141
#ifndef __CONTACT_H__  
#define __CONTACT_H__  

#include <stdlib.h>  
#include <stdio.h>  

#define NAME_LEN 20  
#define SEX_LEN  5  
#define TELE_LEN  12  
#define ADDR_LEN 20  
#define MAX_PEO  1000  
#pragma warning(disable:4996)

typedef struct Peo
{
	char name[NAME_LEN];
	int age;
	char sex[SEX_LEN];
	char tele[TELE_LEN];
	char addr[ADDR_LEN];
}PEO, *PPEO;

typedef struct Contact
{
	PEO dhb[MAX_PEO];//存储人的信息  

	int count;//记录有效个数  

}PCON, *Pcon;


void add_peo(Pcon pcon);
void del_peo(Pcon pcon);
void search(Pcon pcon);
void modify(Pcon pcon);
void show(Pcon pcon);
void clear(Pcon pcon);
void init(Pcon pcon);
void save(Pcon pcon);


#endif  

#include<string.h>  
#include"contact.h"  

int find(char *p, Pcon pcon)
{
	int i = 0;
	for (; i < pcon->count; i++)
	{
		if (strcmp(pcon->dhb[i].name, p) == 0)
			return i;
	}
	return -1;
}

void add_peo(Pcon pcon)
{
	if (pcon->count < MAX_PEO)
	{
		printf("请输入姓名、年龄、性别、电话、住址:\n");
		scanf("%s", pcon->dhb[pcon->count].name);
		scanf("%d", &pcon->dhb[pcon->count].age);
		scanf("%s", pcon->dhb[pcon->count].sex);
		scanf("%s", pcon->dhb[pcon->count].tele);
		scanf("%s", pcon->dhb[pcon->count].addr);

	}
	pcon->count++;
	printf("存储成功\n");

}
void del_peo(Pcon pcon)
{
	int i = 0;
	int ret = 0;
	char name[10];
	printf("请输入要删除的名字:\n");
	scanf("%s", name);
	ret = find(name, pcon);
	if (ret == -1)
	{
		printf("无此联系人\n");
	}
	else
	for (i = ret; i < pcon->count - 1; i++)
	{
		pcon->dhb[i] = pcon->dhb[i + 1];
	}
	pcon->count--;
	printf("删除成功\n");
}
void search(Pcon pcon)
{
	int i = 0;
	int ret = 0;
	char name[10];
	printf("请输入要查找人的名字:\n");
	scanf("%s", name);
	ret = find(name, pcon);
	if (ret == -1)
	{
		printf("无此联系人\n");
	}
	else
	{
		printf("姓名:%10s\t", pcon->dhb[i].name);
		printf("年龄:%10d\t", pcon->dhb[i].age);
		printf("性别:%10s\t", pcon->dhb[i].sex);
		printf("电话:%10s\t", pcon->dhb[i].tele);
		printf("住址:%10s\t", pcon->dhb[i].addr);
		printf("\n");
	}
}

void modify(Pcon pcon)
{
	int i = 0;
	int ret = 0;
	char name[10];
	printf("请输入要查找人的名字:\n");
	scanf("%s", name);
	ret = find(name, pcon);
	printf("请输入姓名、年龄、性别、电话、住址:\n");
	scanf("%s", pcon->dhb[i].name);
	scanf("%d", &pcon->dhb[i].age);
	scanf("%s", pcon->dhb[i].sex);
	scanf("%s", pcon->dhb[i].tele);
	scanf("%s", pcon->dhb[i].addr);
	printf("修改成功\n");

}

void show(Pcon pcon)
{
	int i = 0;
	for (; i <pcon->count; i++)
	{
		printf("姓名:%10s\t", pcon->dhb[i].name);
		printf("年龄:%10d\t", pcon->dhb[i].age);
		printf("性别:%10s\t", pcon->dhb[i].sex);
		printf("电话:%10s\t", pcon->dhb[i].tele);
		printf("住址:%10s\t", pcon->dhb[i].addr);
		printf("\n");
	}
}

void clear(Pcon pcon)
{
	pcon->count = 0;
}

void init(Pcon pcon)
{
	int i = 0;
	FILE *pfread = fopen("myfile.txt", "rb");
	if (pfread == NULL)
	{
		perror("contact.txt");
		exit(EXIT_FAILURE);
	}
	while (fread(&(pcon->dhb[i]), sizeof(PEO), 1, pfread) == 1)
	{
		i++;
	}
	pcon->count = i;
	fclose(pfread);
}


void save(Pcon pcon)
{
	int i = 0;
	FILE *pfwrite = fopen("myfile.txt", "wb");
	if (pfwrite == NULL)
	{
		perror("contact.txt");
		exit(EXIT_FAILURE);
	}
	for (i = 0; i<pcon->count; i++)
	{
		fwrite(&(pcon->dhb[i]), sizeof(PEO), 1, pfwrite);
	}
	fclose(pfwrite);
}

#include "contact.h"  

void print_menu()
{
	printf("*************************************\n");
	printf("*****1:add                2:del******\n");
	printf("*****3:search             4:modify***\n");
	printf("*****5:show               6:clear****\n");
	printf("************* 7:save ****************\n");
	printf("*************************************\n");
}


int main()
{
	PCON con;
	int input = 1;
	con.count = 0;
	init(&con);
	while (input)
	{
		print_menu();
		printf("请选择操作:\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:

			add_peo(&con);
			break;
		case 2:
			del_peo(&con);
			break;
		case 3:
			search(&con);
			break;
		case 4:
			modify(&con);
			break;
		case 5:
			show(&con);
			break;
		case 6:
			clear(&con);
			break;
		case 7:
			save(&con);
			break;
		default:
			break;
		}
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CDatreides/article/details/80790388