声明:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<windows.h>
typedef struct Continfo
{
char name[1024];
char sex[1024];
char age[1024];
char phone[1024];
char address[1024];
}Continfo;
typedef struct Contbook
{
Continfo* people;
int size;
int fullsize;
}Contbook;
Contbook g_contbook;
初始化操作:
void init()
{
g_contbook.size = 0;
g_contbook.fullsize = 1000;
g_contbook.people = (Continfo*)malloc(sizeof(Continfo)*g_contbook.fullsize);
for (int i = 0; i < g_contbook.fullsize; ++i)
{
g_contbook.people[i].name[0] = '\0';
g_contbook.people[i].sex[0] = '\0';
g_contbook.people[i].age[0] = '\0';
g_contbook.people[i].phone[0] = '\0';
g_contbook.people[i].address[0] = '\0';
}
}
新增联系人:
void addconnection()
{
printf("新增联系人\n");
if (g_contbook.size >g_contbook.fullsize)
{
printf("空间不足!扩容1000!成功啦!!!\n");
g_contbook.fullsize += 1000;
g_contbook.people = (Continfo*)realloc(g_contbook.people, g_contbook.fullsize*sizeof(Continfo));
}
printf("请输入联系人的姓名: ");
Continfo* peopleinfo = &g_contbook.people[g_contbook.size];
scanf("%s", peopleinfo->name);
printf("请输入联系人的性别: ");
scanf("%s", peopleinfo->sex);
printf("请输入联系人的年龄: ");
scanf("%s", peopleinfo->age);
printf("请输入联系人的电话号码: ");
scanf("%s", peopleinfo->phone);
printf("请输入联系人的住址: ");
scanf("%s", peopleinfo->address);
++g_contbook.size;
system("cls");
printf("新增联系人成功!\n");
}
打印联系人信息:
void Printallconnection()
{
if (g_contbook.size == 0)
{
system("cls");
printf("通讯录里没有任何奇怪的东西!\n");
}
else
{
system("cls");
printf("您的所有联系人: \n");
for (int i = 0; i < g_contbook.size; ++i)
{
Continfo* info = &g_contbook.people[i];
printf("[%d] 姓名:%s\t 性别:%s\t 年龄:%s\t 电话号码:%s\t 住址:%s\t \n",
i + 1, info->name, info->sex,info->age, info->phone, info->address);
}
printf("显示联系人成功!\n");
}
}
删除联系人信息:
void deleteconnection()
{
if (g_contbook.size == 0)
{
printf("删除失败!您的通讯录比您的脸都干净!\n");
}
else
{
Printallconnection();
while (1)
{
printf("请输入您要删除的联系人的序号: ");
int num1 = 0;
scanf("%d", &num1);
if (num1 == 1000)
{
system("cls");
printf("取消删除成功!\n");
return;
}
else if (num1<1 || num1>g_contbook.size)
{
printf("您的输入有误!请看清楚再输!\n");
continue;
}
else
{
g_contbook.people[num1-1] = g_contbook.people[g_contbook.size - 1];
--g_contbook.size;
printf("删除联系人成功!\n");
return;
}
}
}
}
查找联系人信息:
void findconnection()
{
if (g_contbook.size == 0)
{
printf("查找失败!您的通讯录比您的脸都干净!\n");
}
else
{
printf("请输入您要查找的联系人姓名: ");
char name[1024] = { 0 };
scanf("%s", name);
for (int i = 0; i < g_contbook.size; ++i)
{
Continfo* info = &g_contbook.people[i];
if (strcmp(info->name, name) == 0)
{
printf("[%d] 姓名:%s\t 性别:%s\t 年龄:%s\t 电话号码:%s\t 住址:%s\t \n",
i + 1, info->name, info->sex, info->age, info->phone, info->address);
continue;
}
else
{
system("cls");
printf("未找到联系人\n");
return;
}
}
printf("查找联系人成功!\n");
}
}
更新联系人信息:
void updateconnection()
{
if (g_contbook.size == 0)
{
printf("修改失败!您的通讯录比您的脸都干净!\n");
return;
}
else
{
Printallconnection();
while (1)
{
printf("请输入您要修改的联系人的序号: ");
int num2 = 0;
scanf("%d", &num2);
if (num2<1 || num2>g_contbook.size)
{
printf("您的输入有误!请看清楚再输!\n");
continue;
}
Continfo* info = &g_contbook.people[num2-1];
printf("请问(%s)新的名字是: ",info->name);
char name[1024] = { 0 };
scanf("%s", name);
if (strcmp(name, "/") != 0)
{
strcpy(info->name, name);
}
printf("请问(%s)新的性别是: ", info->sex);
char sex[1024] = { 0 };
scanf("%s", sex);
if (strcmp(sex, "/") != 0)
{
strcpy(info->sex, sex);
}
printf("请问(%s)新的年龄是: ", info->age);
char age[1024] = { 0 };
scanf("%s", age);
if (strcmp(age, "/") != 0)
{
strcpy(info->age, age);
}
printf("请问(%s)新的电话号码是: ", info->phone);
char phone[1024] = { 0 };
scanf("%s", phone);
if (strcmp(phone, "/") != 0)
{
strcpy(info->phone, phone);
}
printf("请问(%s)新的住址是: ", info->address);
char address[1024] = { 0 };
scanf("%s", address);
if (strcmp(address, "/") != 0)
{
strcpy(info->address, address);
}
printf("修改联系人信息成功!\n");
return;
}
}
}
清空联系人信息:
void emptyconnection()
{
printf("是否确认清除所有联系人???\n确认输入1,取消输入2!\n");
int num = 0;
scanf("%d", &num);
if (num == 1)
{
g_contbook.size = 0;
printf("清空联系人成功!\n");
Printallconnection();
}
else if (num == 2)
{
printf("我就知道你舍不得删掉!");
return;
}
else printf("您的输入有误!是不是不想删!\n");
}
排序联系人信息:
void sortconnection()
{
if (g_contbook.size == 0)
{
system("cls");
printf("啥都没有!怎么排序!\n");
return;
}
int a = 0;
for (a = 0; a < g_contbook.size; ++a)
{
for (int b = 0;b<g_contbook.size -a- 1; ++b)
{
if (strcmp(g_contbook.people[a].name, g_contbook.people[b].name)>0)
{
Continfo tmp = g_contbook.people[b];
g_contbook.people[b] = g_contbook.people[b + 1];
g_contbook.people[b + 1] = tmp;
printf("排序联系人信息成功!\n");
Printallconnection();
}
return;
}
}
}
文件的写入:
void infowrite()
{
FILE* pf = fopen("connectbook.txt", "wb");
if (pf == NULL)
{
perror("open file for write");
exit(EXIT_FAILURE);
}
int i = 0;
for (i = 0; i < g_contbook.size; i++)
{
fwrite(&g_contbook.people[i], sizeof(Continfo), 1, pf);
}
fclose(pf);
pf = NULL;
}
文件的读取:
void inforead()
{
FILE* pfread = fopen("connectbook.txt", "rb");
if (pfread == NULL)
{
perror("open file for read");
exit(EXIT_FAILURE);
}
Continfo temp = { 0 };
int i = 0;
while (fread(&temp, sizeof(Continfo), 1, pfread))
{
g_contbook.people[i] = temp; i++; g_contbook.size++;
}
fclose(pfread);
}
void xianyu()
{}
菜单界面:
int menu()
{
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("请输入您的选择: ");
int choice = 0;
scanf("%d", &choice);
return choice;
}
typedef void(*Func)();
主函数:
int main()
{
Func arr[] =
{
xianyu,
addconnection,
deleteconnection,
findconnection,
updateconnection,
Printallconnection,
emptyconnection,
sortconnection,
infowrite,
inforead
};
init();
while (1)
{
int choice = menu();
if (choice < 0 || choice >= sizeof(arr)/sizeof(arr[0]))
{
printf("您的输入有误!\n");
continue;
}
if (choice == 0)
{
printf("欢迎您下次使用!拜拜!");
break;
}
arr[choice]();
}
system("pause");
return 0;
}