通讯录
1.存放1000个人的信息
信息:名字+性别+年龄+电话+住址(复杂对象创建结构体)
2.增加联系人
3.删除联系人
4.修改
5.查找
6.排序
7.存到文件里
1.test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void meun()
{
printf("*******************************\n");
printf("*******1.add 2.del *******\n");
printf("*******3.search 4.modify*******\n");
printf("*******5.show 6.sort *******\n");
printf("*******0.exit *******\n");
printf("*******************************\n");
}
enum Option
{
EXIT,//0
ADD,//1
DEL,
SEARCH,
MODIFY,
SHOW,
SORT
};
int main()
{
int input = 0;
//创建一个通讯录
struct Contact con;
// 通讯录初始化
InitContact(&con);
do {
meun();
printf("请选择->:\n");
scanf("%d", &input);
switch(input)
{
case ADD:
AddContact(&con);
break;
case DEL:
DelContact(&con);
break;
case SEARCH:
SearchContact(&con);
break;
case MODIFY:
ModifyContact(&con);
break;
case SHOW:
ShowContact(&con);
break;
case SORT:
SortContact(&con);
break;
case EXIT:
printf("退出通讯录\n");
break;
default :
printf("选择错误,请重选\n");
break;
}
} while (input);
return 0;
}
2.contact.h
#pragma once
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 30
#define MAX 1000
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct PeoInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char tele[TELE_MAX];
char addr[ADDR_MAX];
};
struct Contact
{
// 存放1000个的信息
struct PeoInfo data[MAX];
int sz;//记录当前通讯录的人数
};
void InitContact(struct Contact* pc);
void AddContact(struct Contact* pc);
void ShowContact(const struct Contact* pc);
void DelContact(struct Contact* pc);
void SearchContact(const struct Contact* pc);
void ModifyContact(struct Contact* pc);
void SortContact(struct Contact* pc);
3. Contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
int FindName(struct Contact* pc, char* arr)
{
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (strcmp(pc->data[i].name, arr) == 0)
{
return i;
}
}
return -1;
}
void InitContact(struct Contact* pc)
{
pc->sz = 0;
memset(pc->data, 0, (sizeof(struct PeoInfo)) * MAX);
// memset(pc->data,0,sizeof(pc->data); //这个也可以进行初始化
}
void AddContact(struct Contact* pc)
{
if (pc->sz == MAX)
{
printf("通讯录满了\n");
}
else
{
// 录取一个人的通讯录信息
printf("请输入名字:->\n");
scanf("%s",& pc->data[pc->sz].name);
printf("请输入年龄:->\n");
scanf("%d",& pc->data[pc->sz].age);
printf("请输入性别:->\n");
scanf("%s",& pc->data[pc->sz].sex);
printf("请输入电话:->\n");
scanf("%s",& pc->data[pc->sz].tele);
printf("请输入地址:->\n");
scanf("%s",& pc->data[pc->sz].addr);
printf("添加成功\n");
pc->sz++;
}
}
void ShowContact(struct Contact* pc)
{
//目录
printf("%15s\t%5s\t%8s\t%15s\t%30s\n", "name", "age", "sex", "tele", "addr");
int i = 0;
for (i = 0; i < pc->sz; i++)
{
//打印通讯录的数据
printf("%15s\t%5d\t%8s\t%15s\t%30s\t\n", pc->data[i].name, pc->data[i].age,
pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
}
}
void DelContact(struct Contact* pc)
{
//先找到对应的下标
char arr[NAME_MAX] = { 0 };
printf("要删除的名字\n");
scanf("%s", arr);
int ret = FindName(pc, arr);
if (ret == -1)
{
printf("要删除的人没找到\n");
}
else
{
//删除数据
int j = 0;
for (j = ret; j < pc->sz - 1; j++)
{
pc->data[j] = pc->data[j + 1];
}
pc->sz--;
printf("删除成功\n");
}
// 没找到
}
void SearchContact(struct Contact* pc)
{
char arr[NAME_MAX];
printf("请输入你要找的人\n");
scanf("%s", arr);
int ret = FindName(pc, arr);
if (ret == -1)
{
printf("你要找的人没找到\n");
}
else
{
printf("%15s\t%5s\t%8s\t%15s\t%30s\n", "name", "age", "sex", "tele", "addr");
int i = ret;
//打印通讯录的数据
printf("%15s\t%5d\t%8s\t%15s\t%30s\t\n",
pc->data[i].name,
pc->data[i].age,
pc->data[i].sex,
pc->data[i].tele,
pc->data[i].addr
);
}
}
void ModifyContact(struct Contact* pc)
{
char arr[NAME_MAX];
printf("请输入你要修改的人\n");
scanf("%s", arr);
int ret = FindName(pc, arr);
if (ret == -1)
{
printf("你要找的人没找到\n");
}
else
{
printf("请输入要修改的内容\n");
printf("请输入名字:->\n");
scanf("%s", &pc->data[ret].name);
printf("请输入年龄:->\n");
scanf("%d", &pc->data[ret].age);
printf("请输入性别:->\n");
scanf("%s", &pc->data[ret].sex);
printf("请输入电话:->\n");
scanf("%s", &pc->data[ret].tele);
printf("请输入地址:->\n");
scanf("%s", &pc->data[ret].addr);
printf("修改成功\n");
}
}
int cmp(const void* e1, const void * e2)
{
return strcmp((char*)e1, (char*)e2);
}
void SortContact(struct Contact* pc)
{
size_t size = sizeof(pc->data[0]);
qsort(pc->data, pc->sz, size, cmp);
}