通訊錄
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);
}