您的位置:首页 > 其它

文件读写操作+动态内存分配+结构体指针+函数指针数组实现通讯录系统

2016-08-09 23:44 501 查看
实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:

姓名、性别、年龄、电话、住址

提供方法:

1. 添加联系人信息

2. 删除指定联系人信息

3. 查找指定联系人信息

4. 修改指定联系人信息

5. 显示所有联系人信息

6. 清空所有联系人

7. 以名字排序所有联系人


8.     保存现有文件到桌面的通讯录.txt文件

9.     从桌面的 通讯录.txt 读取信息并打印出来



头文件:contact.h

#pragma once  //只编译一次
#define _CRT_SECURE_NO_WARNINGS

#ifndef __CONTACT__
#define __CONTACT__
#define MAX_NAME 100
#define MAX_SEX 20
#define MAX_TELEPHONE 20
#define MAX_ADDRESS 100
#define MAX_CAPACITY 1000 //最大容量
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct People
{
char name[MAX_NAME];
char sex[MAX_SEX];
int age;
char telephone[MAX_TELEPHONE];
char address[MAX_ADDRESS];
int flag;
}People;

typedef struct Contact
{
People * people;
int count;
}Contact,*PContact;

void Add(PContact con);
void Delete(PContact con);
void Find(PContact con);
void Modify(PContact con);
void Show(PContact con);
void Empty(PContact con);
void Sort(PContact con);
void Save(PContact con);
void Free(PContact con);
void Show_file(PContact con);
void menu();

#endif // !__CONTACT__




主函数:main_contact.c

#include "contact.h"

int main()
{
Contact contact = {0};
int input = 1;
void(*fun[9])(PContact) = {Add,Delete,Find,Modify,Show,Empty,Sort,Save,Show_file};

while(1)
{
menu();
printf("请选择功能======>");
scanf("%d", &input);
system("cls");
if (input == 0)
{
Free(&contact);
exit(0);
}
else if (input < 10 && input>0)
{
fun[input - 1](&contact);
}
else
printf("输入有误!\n");

}
return 0;
}




函数实现代码:code_contact.h

#include "contact.h"

void menu()
{
printf("******************************  通讯录  ******************************\n");
printf("**********************************************************************\n");
printf("**********************************************************************\n");
printf("*****************           1.添加联系人信息                **********\n");
printf("*****************           2.删除指定联系人信息            **********\n");
printf("*****************           3.查找指定联系人信息            **********\n");
printf("*****************           4.修改指定联系人信息            **********\n");
printf("*****************           5.显示所有联系人信息            **********\n");
printf("*****************           6.清空所有联系人                **********\n");
printf("*****************           7.以名字排序所有联系人          **********\n");
printf("*****************           8.保存所有信息到桌面            **********\n");
printf("*****************           9.查看现有文件所存储的联系人    **********\n");
printf("*****************           0.退出程序                      **********\n");
printf("**********************************************************************\n");
printf("**********************************************************************\n");
printf("******************************  通讯录  ******************************\n");
}

void go_menu()
{
printf("返回主菜单请输入y\n");
fflush(stdin);
while (1)
{
int c = 0;
c = getchar();
if (c == 'y')
return;
}
}

void Add(PContact con)
{
int i = 0;
int num = 0;

printf("请输入要添加的人数======>\n");
fflush(stdin);
scanf("%d", &num);

if ( num>MAX_CAPACITY || num < 0 )
{
printf("输入有误,人数范围限制在0-1000,请重新选择!\n");
}

if (con->count == 0)
{
People * Tmp = (People *)malloc(sizeof(People)*num);

if (Tmp == NULL)
{
printf("out of memery");
exit(EXIT_FAILURE);
}
else
{
con->people = Tmp;
}
}
else
{
People * Tmp = (People *)realloc(con->people, sizeof(People)*(con->count+num));

if(Tmp==NULL)
{
printf("out of memery");
exit(EXIT_FAILURE);
}
else
{
con->people = Tmp;
}

}

for (i = 0; i < num; i++)
{
printf("第%d个联系人\n", i + 1);
printf("输入姓名==>>");
fflush(stdin);
scanf("%s", (con->people + con->count)->name);
printf("输入性别==>>");
fflush(stdin);
scanf("%s", (con->people + con->count)->sex);
printf("输入年龄==>>");
fflush(stdin);
scanf("%d", &(con->people + con->count)->age);
printf("输入电话==>>");
fflush(stdin);
scanf("%s", (con->people + con->count)->telephone);
printf("输入地址==>>");
fflush(stdin);
scanf("%s", (con->people + con->count)->address);
(con->people + con->count)->flag = 1;
con->count++;
printf("\n");
}
go_menu();

}

void Show(PContact con)
{
int i = 0;

for (i = 0; i <con->count; i++)
{
if ((con->people + i)->flag == 1)
printf("姓名:%s          性别:%s          \n年龄:%d          电话:%s          地址:%s          \n",
(con->people + i)->name, (con->people + i)->sex, (con->people + i)->age,
(con->people + i)->telephone, (con->people + i)->address);
}
printf("以显示全部\n");
go_menu();

}
void Find(PContact con)
{
int i = 0;
int t = 0;
char search[100];

printf("请输入要查找的名字:=======>");
fflush(stdin);
scanf("%s", search);

for(i=0; i<con->count; i++)
{
if (strcmp((con->people + i)->name, search)==0)
{
printf("姓名:%s          性别:%s         \n年龄:%d           电话:%s           地址:%s          \n",
(con->people + i)->name, (con->people + i)->sex, (con->people + i)->age,
(con->people + i)->telephone, (con->people + i)->address);
t = 1;
}
}
if (t == 0)
printf("不存在此联系人!\n");
else
printf("已显示所有符合条件的联系人!\n");

go_menu();

}
void Delete(PContact con)
{
int i = 0;
int t = 0;
char search[100];
printf("请输入要删除的名字:=======>");
fflush(stdin);
scanf("%s", search);
for (i = 0; i<con->count; i++)
{
if (strcmp((con->people + i)->name, search)== 0)
{
(con->people + i)->flag = 0;
t = 1;
}
}
if (t == 0)
printf("此联系人不存在,删除失败!\n");
else
printf("删除成功!\n");
go_menu();

}
void Empty(PContact con)
{
con->count = 0;
printf("已清空所有联系人\n");
go_menu();

}

void Modify(PContact con)
{

char search[100];
int i;
printf("请输入要修改的名字:===>>>>>>>");
fflush(stdin);
scanf("%s", search);
for (i = 0; i<con->count; i++)
{
if (strcmp(search,(con->people+i)->name) == 0)
{
printf("请输入要修改该联系人的信息:=======>>>>>>>>name/sex/age/phone/address/\n");
fflush(stdin);
scanf("%s", search);
if (strcmp("name", search) == 0)
{
printf("请输入新信息:");
fflush(stdin);
scanf("%s", search);
strcpy((con->people + i)->name, search);
}
if (strcmp("sex", search) == 0)
{
printf("请输入新信息:");
fflush(stdin);
scanf("%s", search);
strcpy((con->people + i)->sex, search);
}
if (strcmp("age", search) == 0)
{
int b;
printf("请输入新信息:");
fflush(stdin);
scanf("%d", &b);
(con->people + i)->age = b;
}
if (strcmp("address", search) == 0)
{
printf("请输入新信息:");
fflush(stdin);
scanf("%s", search);
strcpy((con->people + i)->address, search);
}
if (strcmp("phone", search) == 0)
{
printf("请输入新信息:");
fflush(stdin);
scanf("%s", search);
strcpy((con->people + i)->telephone, search);
}

}
}
go_menu();

}

int cmp(const void *elem1, const void *elem2)
{
return strcmp(((People*)elem1)->name, ((People*)elem2)->name);
}
void Sort(PContact con)
{
int i = 0;

qsort(con->people, con->count, sizeof(People), cmp);
for (i = 0; i<con->count; i++)
{
if ((con->people + i)->name != '\0')
printf("姓名:%s          性别:%s         \n年龄:%d           电话:%s           地址:%s          \n",
(con->people + i)->name, (con->people + i)->sex, (con->people + i)->age,
(con->people + i)->telephone, (con->people + i)->address);

printf("\n");
}
go_menu();

}

void Save(PContact con)
{
int i = 0;
FILE* file = fopen("C:\\Users\\Administrator\\Desktop\\通讯录.txt","w");

if (file == NULL)
{
perror("C:\\Users\\Administrator\\Desktop\\通讯录.txt");
exit(EXIT_FAILURE);
}
for (i = 0; i < con->count; i++)
{
if((con->people+i)->flag==1)
fprintf(file,"姓名:%s          性别:%s          \n年龄:%d          电话:%s          地址:%s          \n",
(con->people + i)->name, (con->people + i)->sex, (con->people + i)->age,
(con->people + i)->telephone, (con->people + i)->address);
}
if (fclose(file) != 0)
{
perror("fclose");
exit(0);
}
printf("联系人信息已保存到桌面。\n");
go_menu();

}

void Free(PContact con)
{
free(con->people);
con->people = NULL;

}

void Show_file(PContact con)
{
FILE * file = fopen("C:\\Users\\Administrator\\Desktop\\通讯录.txt", "r");
if (file == NULL)
{
perror("C:\\Users\\Administrator\\Desktop\\通讯录.txt");
exit(EXIT_FAILURE);
}
while (!feof(file))//feof 如果到了文件的末尾就返回1  文件还没有结束就返回0
{
char c = fgetc(file);
putchar(c);
}
printf("\n");
if (fclose(file) != 0)
{
perror("fclose");
exit(0);
}
go_menu();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: