//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;
}
Address book source code (1) (including file operations-file writing and reading) (text file)
Guess you like
Origin blog.csdn.net/cfk17829572643/article/details/114992636
Recommended
Ranking