在写文件通讯录之前,大家应该对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;
}