1.主函数
通过枚举,结构体来构建基础
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<Windows.h>
#include<stdlib.h>
#define Max_Name 20
#define Max_Address 20
#define Max_Sex 2
#define Max_phone 20
#define Max 1000
#define SZ 2
#define Begin 3
//enum effitient
//{
// a = 20,b=20
//};
enum option
{
Exist,Add,Print,Del,Sort,Search,Change
};
enum option2
{
name=1,age,tele,addr,sex
};
typedef struct peo
{
char name[Max_Name];
char sex[Max_Sex];
int age;
char Phone_Number[Max_phone];
char address[Max_Address];
}peo;
typedef struct con
{
peo* man;
int num;
int colum;
}con;
con every;
2.函数文件
实现功能
#include"Address_Book.h"
void menu()
{
printf("*********通讯录*********\n");
printf("* 1.增加 2.打印 ****\n");
printf("* 3.删除 4.排序 ****\n");
printf("* 5.查找 6.改变 ****\n");
printf("*** 0.退出 ***\n");
printf("************************\n");
}
void iniCon(con* p)
{
p->num = 0;
p->man =(peo*)malloc(Begin*sizeof(peo));
p->colum = Begin;
memset(p->man, 0, sizeof(p->man));
}
void Add_man(con* p)
{
if (p->colum == p->num)
{
printf("需要扩容\n");
p->colum += SZ;
p->man=(peo*)realloc(p->man, (p->colum) * sizeof(peo));
/*perror("realloc");*/
printf("扩容成功\n");
}
printf("请输入名字\n");
scanf("%s", p->man[p->num].name);//为什么不加&符号,因为这是name是数组,数组名为首元素地址
printf("请输入性别\n");
scanf("%s", p->man[p->num].sex);
printf("请输入年龄\n");
scanf("%d", &(p->man[p->num].age));
printf("请输入电话\n");
scanf("%s", p->man[p->num].Phone_Number);
printf("请输入地址\n");
scanf("%s", p->man[p->num].address);
printf("已成功录入!!!!\n");
p->num++;
}
void Print_man(con*p)
{
int a = 0;
printf("%-2s\t%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n", "序号", "名字", "性别", "年龄", "电话", "地址");
for (a = 0; a < p->num; a++)
{
printf("%-2d\t", a+1);
printf("%-20s\t", p->man[a].name);
printf("%-5s\t", p->man[a].sex);
printf("%-5d\t", p->man[a].age);
printf("%-12s\t", p->man[a].Phone_Number);
printf("%-20s\n", p->man[a].address);
}
}
void Del_man(con *p)
{
int a;
printf("请输入你想要清空的人\n");
scanf("%d", &a);
if (a < Max)
{
memset(&(p->man[a]), 0, sizeof(p->man[a]));
printf("清除成功\n");
}
else
printf("输入错误\n");
}
int sort_name(const void* p1,const void* p2)
{
return strcmp(((peo*)p1)->name,((peo*)p2)->name);
}
int sort_sex(const void* p1, const void* p2)
{
return strcmp(((peo*)p1)->sex, ((peo*)p2)->sex);
}
int sort_tele(const void* p1, const void* p2)
{
return strcmp(((peo*)p1)->Phone_Number, ((peo*)p2)->Phone_Number);
}
int sort_addr(const void* p1, const void* p2)
{
return strcmp(((peo*)p1)->address, ((peo*)p2)->address);
}
int sort_int(const void* p1, const void* p2)
{
return ((peo*)p1)->age - ((peo*)p2)->age;
}
void Sort_man(con* p)
{
int a;
printf("你想用什么排序:1.名字 2.年龄 3.电话 4.地址 5.性别\n");
scanf("%d", &a);
switch (a)
{
case name:
qsort(p->man, p->num, sizeof(peo), sort_name);
break;
case age:
qsort(p->man, p->num, sizeof(p->man[0]), sort_int);
break;
case tele:
qsort(p->man, p->num, sizeof(p->man[0]), sort_tele);
break;
case addr:
qsort(p->man, p->num, sizeof(p->man[0]), sort_addr);
break;
case sex:
qsort(p->man, p->num, sizeof(p->man[0]), sort_sex);
break;
default:
break;
}
}
void Search_man(con* p)
{
char se[20];
int m;
int k;
printf("你想要搜寻谁:>\n");
while ((k = getchar()) != '\n' && k != EOF);
fgets(se,20,stdin);
se[strlen(se)-1] = '\0';
int a;
for (a = 0; a < p->num; a++)
{
if (!strcmp(p->man[a].name, se))
{
printf("恭喜,已找到\n");
printf("%-2d\t", a + 1);
printf("%-20s\t", p->man[a].name);
printf("%-5s\t", p->man[a].sex);
printf("%-5d\t", p->man[a].age);
printf("%-12s\t", p->man[a].Phone_Number);
printf("%-20s\n", p->man[a].address);
break;
}
}
if(a==p->num)
printf("根本就没有,找不到的。\n");
}
void Change_man(con*p)
{
int a;
printf("你想改变哪一个人(输入序号):>\n");
scanf("%d", &a);
printf("请输入名字\n");
scanf("%s", p->man[a].name);//为什么不加&符号,因为这是name是数组,数组名为首元素地址
printf("请输入性别\n");
scanf("%s", p->man[a].sex);
printf("请输入年龄\n");
scanf("%d", &(p->man[a].age));
printf("请输入电话\n");
scanf("%s", p->man[a].Phone_Number);
printf("请输入地址\n");
scanf("%s", p->man[a].address);
printf("已成功改变!!!!\n");
}
void Exit(con*p)
{
free(p->man);
p->man = NULL;
}
3.主程序文件
控制程序流程
#define _CRT_SECURE_NO_WARNINGS 1
#include"Address_Book.h"
//动态版
int main()
{
iniCon(&every);
every.man[1].age = 19;
strcpy (every.man[1].name , "233");
strcpy (every.man[1].Phone_Number ,"1128282882");
strcpy(every.man[1].address, "西南大学");
strcpy(every.man[1].sex, "男");
every.man[2].age = 20;
strcpy(every.man[2].name, "2蛮吧");
strcpy(every.man[2].Phone_Number, "28282882191");
strcpy(every.man[2].sex, "男");
strcpy(every.man[2].address, "重庆大学");
every.man[0].age = 22;
strcpy(every.man[0].Phone_Number, "22838322221");
strcpy(every.man[0].name, "3蛮吧");
strcpy(every.man[0].sex, "男");
strcpy(every.man[0].address, "重邮大学");
every.num = 3;
int input;
do {
menu();
scanf("%d", &input);
switch (input)
{
case Add:
Add_man(&every);
system("cls");
break;
case Print:
Print_man(&every);
break;
case Del:
Del_man(&every);
break;
case Sort:
Sort_man(&every);
Print_man(&every);
break;
case Search:
Search_man(&every);
break;
case Change:
Print_man(&every);
Change_man();
Print_man(&every);
break;
case 0:
printf("已退出\n");
Exit(&every);
break;
default:
printf("输入错误请重试\n");
break;
}
} while (input);
return 0;
}