实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
实现一下功能:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
方法用静态顺寻表来实现较为简单
//address.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 1000
typedef struct pCON
{
char name[20]; //姓名
char sex[2]; //性别
char age[3]; //年龄
char tele[15]; //电话
char address[25] ; //地址
}pCon;
typedef struct CONTACT
{
struct pCON data[MAX_SIZE]; //存储最大容量
int size; //当前存储容量
}Con;
void Init(Con* pcon); //初始化
void Insert(Con* pcon); //插入
void Delete(Con* pcon); //删除
void Search(Con* pcon); //查找
void Change(Con* pcon); //更改
void Show(Con* pcon); //打印
void Clear(Con* pcon); //清除
void Sort(Con* pcon); //以姓名排序
//address.c
#include"address.h"
void Init(Con* pcon) //初始化
{
if (pcon == NULL)
{
printf("非法输入!\n");
return;
}
pcon->size = 0;
}
int find(Con *pcon, char *name) //根据姓名查找位置
{
int i = 0;
for (i = 0; i < pcon->size; i++)
{
if (strcmp(name, pcon->data[i].name)==0)
{
return i;
}
}
return -1;
}
void Insert(Con *pcon) //插入
{
if (pcon->size ==MAX_SIZE)
{
printf("通讯录已经满了!\n");
return;
}
printf("请输入名字:");
scanf("%s", (pcon->data[pcon->size]).name);
printf("请输入性别:");
scanf("%s", (pcon->data[pcon->size]).sex);
printf("请输入年龄:");
scanf("%s", (pcon->data[pcon->size]).age);
printf("请输入电话:");
scanf("%s", (pcon->data[pcon->size]).tele);
printf("请输入地址:");
scanf("%s", (pcon->data[pcon->size]).address);
pcon->size++;
}
void Delete(Con *pcon) //删除
{
char name[20];
int ret = 0;
printf("请输入要删除人的名字:");
scanf("%s", &name);
ret = find(pcon, name);
if (ret!=-1)
{
int i = 0;
for (i = ret; i < pcon->size-1; i++)
{
pcon->data[ret] = pcon->data[ret + 1];
}
pcon->size--;
printf("已删除该联系人\n");
}
else
{
printf("此人不存在,删除失败!\n");
}
}
void Search(Con *pcon) //查找信息
{
char name[20];
int ret = 0;
printf("请输入联系人姓名\n");
scanf("%d", name);
ret = find(pcon, name);
if (ret!=-1)
{
printf("姓名:%s 性别: %s 年龄 :%s 电话:%s 地址: %s \n",
pcon->data[ret].name, pcon->data[ret].sex,
pcon->data[ret].age, pcon->data[ret].tele,
pcon->data[ret].address );
}
else
{
printf("没有找到\n");
}
}
void Change(Con* pcon) //修改
{
char name[20];
int ret = 0;
printf("请输入联系人姓名:\n");
scanf("%s", name);
ret = find(pcon, name);
if (ret!=-1)
{
printf("请输入修改后名字:");
scanf("%s", (pcon->data[ret]).name);
printf("请输入修改后性别:");
scanf("%s", (pcon->data[ret]).sex);
printf("请输入修改后年龄:");
scanf("%s", (pcon->data[ret]).age);
printf("请输入修改后电话:");
scanf("%s", (pcon->data[ret]).tele);
printf("请输入修改后地址:");
scanf("%s", (pcon->data[ret]).address);
printf("已经修改\n");
}
}
void Show(Con * pcon) //显示
{
if (pcon->size == 0)
{
printf("通讯录为空!\n");
}
int i = 0;
for (i = 0; i < pcon->size; i++)
{
printf("姓名:%s 性别: %s 年龄 :%s 电话:%s 地址: %s \n",
pcon->data[i].name, pcon->data[i].sex,
pcon->data[i].age, pcon->data[i].tele,
pcon->data[i].address
);
}
}
void Clear(Con *pcon) //清除
{
pcon->size = 0;
}
void Sort(Con *pcon) //以名字排序
{
int i = 0;
int j = 0;
for (i = 0; i < pcon->size-1; i++)
{
for (j = 0; j < pcon->size - i - 1; j++)
{
if (strcmp(pcon->data[j].name, pcon->data[j + 1].name)>0)
{
pCon tmp;
tmp = pcon->data[j];
pcon->data[j] = pcon->data[j + 1];
pcon->data[j + 1] = tmp;
}
}
}
}
//test.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"address.h"
void print() //显示界面
{
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********\n");
printf("\n");
printf("请输入要操作的序号:\n");
}
int main()
{
Con pcon;
int choice=1;
Init(&pcon);
while (choice)
{
print();
printf("请选择:>");
scanf("%d", &choice);
switch (choice)
{
case 1:
Insert(&pcon); //插入
system("cls"); //清屏
break;
case 2:
Delete(&pcon); //删除
system("cls");
break;
case 3:
Search(&pcon); //查找
break;
case 4:
Change(&pcon); //修改
system("cls");
break;
case 5:
Show(&pcon); //打印
break;
case 6:
Clear(&pcon);
break; //清除
case 7:
Sort(&pcon); // 以姓名排序
break;
case 8:
exit(0); //退出
default:
printf("输入有误请重新输入!\n"); break;
}
printf("\n");
}
return 0;
}