首先是text.cpp
#include"contact.h"
enum func
{
Exit,
Add,
Del,
Search
};
void mune()
{
printf("******0.exit *********\n");
printf("******1.add *********\n");
printf("******2.del *********\n");
printf("******3.search*********\n");
printf("*****************************************************\n");
printf("*****************************************************\n");
printf("*****************************************************\n");
}
int main()
{
int input = 0;
struct contact mm;
struct contact* pfs = &mm;
pfs->ps=(struct Information*)malloc(3*sizeof(Information));
pfs->size = 0;
pfs->capacity = 3*sizeof(Information);
Read(pfs);
do
{
mune();
scanf("%d", &input);
switch(input)
{
case Exit:
break;
case Add:
AddContact(pfs);
break;
case Del:
DelContact(pfs);
break;
case Search:
SearchContact(pfs);
break;
}
} while (input);
printf("退出成功,使用愉快");
Preserve(pfs);
return 0;
}
然后是contact.cpp
#include"contact.h"
void CheckCapacity(struct contact* pfs);
void Read(struct contact* pfs)
{
struct Information tem = { 0 };
FILE* pf = fopen("text.dat", "rb");
if (pf == NULL)
return;
while (fread(&tem, sizeof(Information), 1, pf))
{
CheckCapacity(pfs);
pfs->ps[pfs->size] = tem;
}
fclose(pf);
pf = NULL;
}
void CheckCapacity(struct contact* pfs)
{
struct Information * str=NULL;
if (pfs->size == pfs->capacity)
{
str = (struct Information*)realloc(pfs->ps, pfs->capacity + 3 * sizeof(Information));
pfs->capacity += 3 * sizeof(Information);
}
if (str != NULL)
pfs->ps = str;
}
void AddContact(struct contact* pfs)
{
CheckCapacity(pfs);
printf("请输入要添加的人的姓名");
scanf("%s", ((pfs->ps)+(pfs->size))->name);
while (getchar() != '\n');
printf("请输入要添加的人的电话号码");
scanf("%s", ((pfs->ps) + (pfs->size))->number);
while ((getchar()) != '\n');
printf("请输入要添加的人的住址");
scanf("%s", ((pfs->ps) + (pfs->size))->address);
while ((getchar()) != '\n');
printf("请输入要添加的人的性别");
scanf("%s", ((pfs->ps) + (pfs->size))->sex);
while ( getchar() != '\n');
(pfs->size)++;
}
void DelContact(struct contact* pfs)
{
char ne[20] = {0};
int count = 0;
char c;
printf("请输入要删除的人的姓名");
scanf("%s", ne);
while ((c = getchar()) != '\n');
while (!(strcmp(ne, ((pfs->ps) + 1 + count)->name)))
{
count++;
}
*((pfs->ps) + 1 + count)->name = *((pfs->ps) + 1 + pfs->size)->name;
*((pfs->ps) + 1 + count)->number = *((pfs->ps) + 1 + pfs->size)->number;
*((pfs->ps) + 1 + count)->sex = *((pfs->ps) + 1 + pfs->size)->sex;
*((pfs->ps) + 1 + count)->address = *((pfs->ps) + 1 + pfs->size)->address;
}
void SearchContact(struct contact* pfs)
{
char ne[20] = { 0 };
int count = 0;
char c;
printf("请输入要查看的人的姓名");
scanf("%s", ne);
while ((c = getchar()) != '\n');
while ((strcmp(ne, ((pfs->ps) + count)->name)))
{
count++;
}
printf("%s\n", ((pfs->ps) + count)->name);
printf("%s\n", ((pfs->ps) + count)->number);
printf("%s\n", ((pfs->ps) + count)->address);
printf("%s\n", ((pfs->ps) + count)->sex);
}
void Preserve(struct contact* pfs)
{
int i;
FILE* pf = fopen("text.dat", "wb");
for(i=0;i<pfs->size;i++)
fwrite(pfs->ps, sizeof(Information), 1, pf);
fclose(pf);
pf = NULL;
}
最后头文件contact.h
#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Information
{
char name[20];
char number[20];
char address[20];
char sex[2];
};
struct contact
{
int size;
int capacity;
struct Information *ps;
};
void AddContact(struct contact* pfs);
void DelContact(struct contact* pfs);
void SearchContact(struct contact* pfs);
void Preserve(struct contact* pfs);
void Read(struct contact* ps);
void CheckCapacity(struct contact* ps);