通讯录源代码(1)(包含文件操作——文件写入和读取)(文本文件)

//contact.h
#pragma once

#pragma warning(disable:4996)
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include <assert.h>
#include <malloc.h>
#include <string.h>
#include <errno.h>


#define NAME_MAX 30
#define ADDRESS_MAX 100
#define TELEPHONE_MAX 20
#define CONTACT_MAX 100

typedef struct Contact{
    
    
	char name[NAME_MAX];
	char address[ADDRESS_MAX];
	char telephone[TELEPHONE_MAX];
	int age;
}Contact;


typedef struct ContactBook{
    
    
	int size;
	Contact array[CONTACT_MAX];


}ContactBook;


void ContactBookInit(ContactBook *pcb);
void ContactBookAdd(ContactBook *pcb, Contact *pb);
void ContactBookDel(ContactBook *pcb, char *name);
Contact* ContactBookSearch(ContactBook *pcb, const char *name);
void ContactBookUpdate(ContactBook *pcb, Contact *pb);
void ContactBookPrint(ContactBook *pcb);
void ContactBookSaveText(ContactBook *pcb,const char *file);
void ContactBookLoadText(ContactBook *pcb, const char *file);

//contact.c
#include "contact.h"

void ContactBookInit(ContactBook *pcb)
{
    
    
	assert(pcb);
	pcb->size = 0;
	memset(pcb->array, 0, sizeof(Contact)*CONTACT_MAX);

}

void  ContactBookAdd(ContactBook *pcb,Contact *pb)
{
    
    
	assert(pcb);
	if (pcb->size == CONTACT_MAX)
	{
    
    
		printf("通讯录已满,添加失败!");
		return;
	}

	memcpy(&pcb->array[pcb->size], pb, sizeof(Contact));
	pcb->size++;

	
}

void ContactBookDel(ContactBook *pcb,char *name)
{
    
    
	assert(pcb);
	int i = 0;
	for (; i < pcb->size; i++)
	{
    
    
		if (strcmp(pcb->array[i].name,name)==0)
		{
    
    
			memmove(pcb->array + i, pcb->array + i + 1, sizeof(Contact)*(pcb->size - i - 1));
		}

	}

	pcb->size--;
}

Contact *ContactBookSearch(ContactBook *pcb, const char *name)
{
    
    
	assert(pcb);
	int i = 0;
	for (; i < pcb->size; i++)
	{
    
    
		if (strstr(pcb->array[i].name, name) != NULL)
		{
    
    
			return &pcb->array[i];
		}
	}
	
	return NULL;
}

void ContactBookUpdate(ContactBook *pcb, Contact *pb)
{
    
    
	assert(pcb);
	int i = 0;
	for (; i < pcb->size; i++)
	{
    
    
		if (strcmp(pcb->array[i].name, pb->name)==0)
		{
    
    
			memcpy(&pcb->array[i], pb, sizeof(Contact));
		}
	}
}

void ContactBookPrint(ContactBook *pcb)
{
    
    
	assert(pcb);
	int i = 0;
	for (; i < pcb->size; i++)
	{
    
    
		printf("%s\n", pcb->array[i].name);
		printf("%s\n", pcb->array[i].address);
		printf("%s\n", pcb->array[i].telephone);
		printf("%d\n", pcb->array[i].age);
		printf("\n");
	}


}

//文本文件写入
void ContactBookSaveText(ContactBook *pcb, const char *file)
{
    
    
	assert(pcb);
	FILE *fin = fopen(file, "w");
	if (fin == NULL)
	{
    
    
		printf("打开文件写失败 %s\n", strerror(errno));
		exit(-1);
	}
	int i = 0;
	for (; i < pcb->size; i++)
	{
    
    
		fprintf(fin, "%s %s %s %d\n", pcb->array[i].name, pcb->array[i].address, pcb->array[i].telephone, pcb->array[i].age);

	}
	

	fclose(fin);

}

//文本文件读取
void ContactBookLoadText(ContactBook *pcb, const char *file)
{
    
    

	assert(pcb);
	FILE *fout = fopen(file, "r");
	if (fout == NULL)
	{
    
    
		printf("文件打开读失败 %s", strerror(errno));
		exit(-1);
	}
	int i = 0;
	
	
		while (fscanf(fout, "%s %s %s %s %d\n", pcb->array[i].name, pcb->array[i].address, \
			pcb->array[i].telephone, &pcb->array[i].age) != EOF)
		{
    
    
			i++;
			pcb->size++;
		}

	
	fclose(fout);
}

//main.c
#include "contact.h"

void Menu()
{
    
    

ContactBook b;
ContactBookInit(&b);
ContactBookLoadText(&b, "contact.text");
//文件的读取!!!

int option = 0;

do{
    
    
	printf("*****************************************************\n");
	printf(" 1.增加联系人                2.删除联系人            \n");
	printf(" 3.查找联系人                4.修改联系人            \n");
	printf(" 5.保存文件                  6.显示所有联系人        \n");
	printf(" 0.退出                                              \n");
	printf("*****************************************************\n");

	printf("Please Select-> ");
	scanf("%d", &option);
	if (option == 1)
	{
    
    
		Contact p;
		printf("请输入增加联系人的名字:\n");
		scanf("%s", p.name);
		printf("请输入增加联系人的地址:\n");
		scanf("%s", p.address);
		printf("请输入增加联系人的电话:\n");
		scanf("%s", p.telephone);
		printf("请输入增加联系人的年龄:\n");
		scanf("%d", &p.age);

		ContactBookAdd(&b, &p);
		printf("增加联系人成功!\n\n");


	}
	else if (option == 2)
	{
    
    
		printf("请输入你要删除联系人的名字:");
		char name[NAME_MAX];
		scanf("%s", name);
		ContactBookDel(&b, name);
		printf("删除联系人成功!\n\n");
	}

	else if (option == 3)
	{
    
    
		printf("请输入你要查找联系人的名字:");
		char name[NAME_MAX];
		scanf("%s", name);
		Contact *p = ContactBookSearch(&b, name);
		if (p)
		{
    
    
			printf("该联系人的名字是:%s\n", p->name);
			printf("该联系人的地址是:%s\n", p->address);
			printf("该联系人的电话是:%s\n", p->telephone);
			printf("该联系人的年龄是:%d\n", p->age);
		}
		printf("\n\n");
	}
	else if (option == 4)
	{
    
    
		Contact p;
		printf("请输入你要修改联系人的名字:\n");
		scanf("%s", p.name);
		printf("请输入你要修改联系人的地址:\n");
		scanf("%s", p.address);
		printf("请输入你要修改联系人的电话:\n");
		scanf("%s", p.telephone);
		printf("请输入你要修改联系人的年龄:\n");
		scanf("%d", &p.age);
		ContactBookUpdate(&b, &p);
	}
	else if (option == 5)
	{
    
    
		ContactBookSaveText(&b, "contact.text");
		printf("文件保存成功!\n\n");
	}
	else if (option == 6)
	{
    
    
		ContactBookPrint(&b);

	}
	else if (option != 0)
	{
    
    
		printf("输入错误,请重新输入!\n");
	}

	Sleep(1000);
	system("cls");
	
} while (option != 0);

}

int main()
{
    
    
	Menu();
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/cfk17829572643/article/details/114992636