题目简介
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
代码实现
Contact.h
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __CONTACT_H__
#define __CONTACT_H__
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define MAX 1000 //通讯录最大存储量
#define NAME_MAX 20//名字最大长度
#define SEX_MAX 5 //性别...
#define ADDR_MAX 30 //地址...
#define TELE_MAX 12 //电话...
typedef struct PeoInfo
{
char name[NAME_MAX];
char sex[SEX_MAX];
int age;
char addr[ADDR_MAX];
char tele[TELE_MAX];
}PeoInfo;
typedef struct contact
{
PeoInfo data[MAX];
int size;
}contact;
void InitContact(contact* pcon);
void AddContact(contact* pcon);
void DelContact(contact* pcon);
void ShowContact(const contact* pcon);
void SearchContact(const contact* pcon);
void ClearContact(contact* pcon);
void ModifyContact(contact* pcon);
void SortContact(contact* pcon);
#endif
Contact.c
#include"Contact.h"
void InitContact(contact* pcon)
{
assert(pcon);
pcon->size = 0;
memset(pcon->data, 0, sizeof(pcon->data));
}
void AddContact(contact* pcon)
{
assert(pcon);
if (pcon->size == MAX)
{
printf("内存已满,请删除无用的联系人之后再加\n");
return;
}
else
{
printf("请输入姓名:>\n");
scanf("%s", pcon->data[pcon->size].name);
printf("请输入年龄:>\n");
scanf("%d", &(pcon->data[pcon->size].age));
printf("请输入性别:>\n");
scanf("%s", pcon->data[pcon->size].sex);
printf("请输入地址:>\n");
scanf("%s", pcon->data[pcon->size].addr);
printf("请输入电话:>\n");
scanf("%s", pcon->data[pcon->size].tele);
pcon->size++;
printf("添加成功\n");
}
}
static int FindContact(const contact* pcon,char name[])//只有内部可以看到
{
int i = 0;
for (i = 0; i < pcon->size; i++)
{
if (strcmp(pcon->data[i].name,name) == 0)
return i;
}
return -1;
}
void DelContact(contact* pcon)
{
assert(pcon);
if (pcon->size == 0)
{
printf("没有你要删除的联系人!\n");
return;
}
int i = 0;
int pos = 0;
char name[NAME_MAX] = {0};
printf("请输入你要删除人的姓名:>\n");
scanf("%s", name);
pos = FindContact(pcon,name);
if (pos == -1)
{
printf("没有找到你要删除的人\n");
return;
}
for (i = pos; i < pcon->size - 1; i++)
{
pcon->data[i] = pcon->data[i + 1];
}
pcon->size--;
printf("删除成功!\n");
}
void ShowContact(const contact* pcon)
{
assert(pcon);
if (pcon->size == 0)
return;
int i = 0;
printf("%10s\t%5s\t%5s\t%15s\t%15s\t\n", "姓名", "年龄", "性别", "地址", "电话");
for (i = 0; i < pcon->size; i++)
{
printf("%10s\t%5d\t%5s\t%15s\t%15s\t\n",
pcon->data[i].name,
pcon->data[i].age,
pcon->data[i].sex,
pcon->data[i].addr,
pcon->data[i].tele);
}
}
void SearchContact(const contact* pcon)
{
assert(pcon);
if (pcon->size == 0)
return;
char name[NAME_MAX] = { 0 };
int pos = 0;
printf("请输入你要查找的人的姓名:>\n");
scanf("%s", name);
pos = FindContact(pcon, name);
if (pos == -1)
{
printf("没有找到你要找的人\n");
return;
}
printf("%10s\t%5s\t%5s\t%15s\t%15s\t\n", "姓名", "年龄", "性别", "地址", "电话");
printf("%10s\t%5d\t%5s\t%15s\t%15s\t\n",
pcon->data[pos].name,
pcon->data[pos].age,
pcon->data[pos].sex,
pcon->data[pos].addr,
pcon->data[pos].tele);
}
void ClearContact(contact* pcon)
{
assert(pcon);
pcon->size = 0;
}
void ModifyContact(contact* pcon)
{
assert(pcon);
if (pcon->size == 0)
return;
char name[NAME_MAX] = { 0 };
int pos = 0;
printf("请输入你要查找的人的姓名:>\n");
scanf("%s", name);
pos = FindContact(pcon, name);
if (pos == -1)
{
printf("没有找到你要找的人\n");
return;
}
printf("请输入修改后的姓名:>\n");
scanf("%s", pcon->data[pos].name);
printf("请输入修改后的年龄:>\n");
scanf("%d", &(pcon->data[pos].age));
printf("请输入修改后的性别:>\n");
scanf("%s", pcon->data[pos].sex);
printf("请输入修改后的地址:>\n");
scanf("%s", pcon->data[pos].addr);
printf("请输入修改后的电话:>\n");
scanf("%s", pcon->data[pos].tele);
}
void SortContact(contact* pcon)
{
assert(pcon);
if (pcon->size == 0)
return;
int i = 0;
int j = 0;
PeoInfo tmp;
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)
{
tmp = pcon->data[j];
pcon->data[j] = pcon->data[j + 1];
pcon->data[j+1] = tmp;
}
}
}
printf("排序成功\n");
}
test.c
#include"Contact.h"
contact con;
void menu()
{
printf("************************\n");
printf("***1.添加 2.删除***\n");
printf("***3.查找 4.修改***\n");
printf("***5.显示 6.清空***\n");
printf("***7.排序 0.exit***\n");
printf("************************\n");
}
enum //不加枚举名作用类似于#define
{
Exit,
Add,
Del,
Search,
Modify,
Show,
Clear,
Sort
};
void test()
{
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
printf("\n");
switch (input)
{
case Exit:
printf("退出程序\n");
return;
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 Clear:
ClearContact(&con);
break;
case Sort:
SortContact(&con);
break;
default:
printf("选择有误,请重新选择\n");
break;
}
} while (input);
}
int main()
{
InitContact(&con);
test();
system("pause");
return 0;
}
在这里和大家一起分享一下我做这个通讯录的时候遇到的问题以及如何解决的
1.
这时候我们放在全局变量就可以解决了
2.排序的时候运用冒泡排序的时候一定要注意临界值。