实现一个简单的通讯录,主要是对结构体的使用;
linkman.h
#ifndef _LINKMAN_H_
#define _LINKMAN_H_
#include<stdio.h>
#include<Windows.h>
#include<string.h>
#pragma warning(disable:4996)
typedef struct Linkman
{
char name[20];
char sex[10];
int age;
char tel[20];
char addr[30];
}Linkman;
typedef struct Statis
{
Linkman num[1000];
int count;
}Statis;
void add_linkman(Statis *p);
void del_linkman(Statis *p);
void find_linkman(Statis *p);
void revise_linkman(Statis *p);
void display_linkman(Statis *p);
void clear_linkman(Statis *p);
void sort_linkman(Statis *p);
int search(Statis *p, char *name);
void menu_r();
#endif
main.c
#include"linkman.h"
Statis sta;
void 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("######### 0.退出程序 #########\n");
printf("##############################################\n");
printf("请输入想要执行的操作:\n");
}
int main()
{
int select = 0;
do{
menu();
scanf("%d", &select);
switch (select)
{
case 1:
add_linkman(&sta);
break;
case 2:
del_linkman(&sta);
break;
case 3:
find_linkman(&sta);
break;
case 4:
revise_linkman(&sta);
break;
case 5:
display_linkman(&sta);
break;
case 6:
clear_linkman(&sta);
break;
case 7:
sort_linkman(&sta);
break;
case 0:
exit(0);
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (1);
system("pause");
return 0;
}
test.c
#include"linkman.h"
void menu_r()
{
printf("#############################################\n");
printf("###### 1.姓名 2.性别 ######\n");
printf("###### 3.年龄 4.电话 ######\n");
printf("###### 5.地址 0.退出 ######\n");
printf("#############################################\n");
printf("请输入需要修改的选项:\n");
}
int search(Statis *p, char *name)
{
int i = 0;
for (i = 0; i < (p->count); i++)
{
if (strcmp(p->num[i].name, name) == 0)
{
return i;
}
}
return -1;
}
void add_linkman(Statis *p)
{
printf("请输入需要添加的联系人姓名:\n");
scanf("%s", p->num[p->count].name);
printf("请输入需要添加的联系人性别:\n");
scanf("%s", p->num[p->count].sex);
printf("请输入需要添加的联系人年龄:\n");
scanf("%d", &p->num[p->count].age);
printf("请输入需要添加的联系人电话:\n");
scanf("%s", p->num[p->count].tel);
printf("请输入需要添加的联系人地址:\n");
scanf("%s", p->num[p->count].addr);
if (p->count == 1000)
{
printf("达到添加上限!\n");
}
else
{
printf("添加成功!\n");
p->count++;
}
}
void del_linkman(Statis *p)
{
char name[20] = { 0 };
int result;
int i;
printf("请输入需要删除的联系人姓名:\n");
scanf("%s", name);
result = search(p, name);
if (result != -1)
{
printf("您确定要删除此联系人?\n");
printf("删除请输入1,不删除请输入0!\n");
scanf("%d", &i);
if (i == 1)
{
for (i = 0; i < (p->count) - 1; i++)
{
p->num[i] = p->num[i + 1];
}
p->count--;
printf("删除成功!\n");
}
else
{
printf("删除失败!\n");
}
}
else
{
printf("您输入的联系人不存在!\n");
}
}
void find_linkman(Statis *p)
{
char name[20] = { 0 };
int result = 0;
printf("请输入需要查找的联系人姓名:\n");
scanf("%s", name);
result = search(p, name);
if (result != -1)
{
printf("姓名:%s\n", p->num[result].name);
printf("性别:%s\n", p->num[result].sex);
printf("年龄:%d\n", p->num[result].age);
printf("电话:%s\n", p->num[result].tel);
printf("地址:%s\n", p->num[result].addr);
}
else
{
printf("您输入的联系人不存在!\n");
}
}
void revise_linkman(Statis *p)
{
char name[20] = { 0 };
int result = 0;
int i = 0;
printf("请输入需要修改的联系人姓名:\n");
scanf("%s", name);
result = search(p, name);
if (result != -1)
{
printf("姓名:%s\n", p->num[result].name);
printf("性别:%s\n", p->num[result].sex);
printf("年龄:%d\n", p->num[result].age);
printf("电话:%s\n", p->num[result].tel);
printf("地址:%s\n", p->num[result].addr);
do{
menu_r();
scanf("%d", &i);
switch (i)
{
case 1:
printf("请输入您想改的名字:\n");
scanf("%s", p->num[result].name);
break;
case 2:
printf("请输入您想改的性别:\n");
scanf("%s", p ->num[result].sex);
break;
case 3:
printf("请输入您想改的年龄:\n");
scanf("%d", &(p->num[result].age));
break;
case 4:
printf("请输入您想改的电话:\n");
scanf("%s", p->num[result].tel);
break;
case 5:
printf("请输入您想改的地址:\n");
scanf("%s", p->num[result].addr);
break;
case 0:
break;
default:
printf("输入错误,请重新输入!\n");
}
} while (i);
}
else
{
printf("您输入的联系人不存在!\n");
}
}
void display_linkman(Statis *p)
{
int i = 0;
printf("显示所有联系人信息\n");
printf("%10s%7s%7s%9s%11s\n", "姓名", "性别", "年龄", "电话", "地址");
for (i = 0; i < (p->count); i++)
{
printf("%10s", p->num[i].name);
printf("%5s", p->num[i].sex);
printf("%8d", p->num[i].age);
printf("%14s", p->num[i].tel);
printf("%9s", p->num[i].addr);
printf("\n");
}
}
void clear_linkman(Statis *p)
{
int i = 0;
printf("确定清空所有联系人?\n");
printf("清空请输入1,不清空请输入0!\n");
scanf("%d", &i);
if (i == 1)
{
p->count = 0;
}
}
void sort_linkman(Statis *p)
{
int i = 0;
int j = 0;
for (i = 0; i < (p->count) - 1; i++)
{
for (j = 0; j < (p->count) - i - 1; j++)
{
if (strcmp(p->num[j].name, p->num[j + 1].name)>0)
{
Linkman tmp = p->num[j];
p->num[j] = p->num[j + 1];
p->num[j + 1] = tmp;
}
}
}
}