在Ç语言的学习过程中,接触到通讯录的简单实现,从简单的开始,先用数组实现此任务思路如下:
- 首先需要一个结构体
PeoInfo
来存储联系人的信息,之后需要将它定义为数组,方便存储更多的联系人;- 定义整形变量
size
,记录联系人的数目。
为方便操作,封装以上两个变量,操作时,可能需要改变size
的值(如果不封装,每次传参需要传两个),封装到一个新的结构体Contact
中,Contact
的成员分为:
PeoInfo
类型的数组数据,INT
类型的变量size
,数组data
用来存储信息,size
用来记录个数。
接下来就需要对通讯录进行操作,而这些操作实际上是对结构体Contact
进行操作,通过Contact
定义的变量Contact
就可以实现这个功能,也就是对data
数组的操作。
- 增加:判断数组是否仍能继续存储,若能,则给
size
所在的位置赋值,并将size++
;若不能,则提示空间已满并返回 ;- 查找:输入想要查找的联系人的
name
,若匹配成功,则输出联系人信息;若匹配失败,提示查找失败并返回;- 删除:输入想要删除的联系人的
name
,先进行查找,若查找成功,则将后一个联系人的信息向前挪动,并将size--
;若查找失败,提示删除失败并返回;- 修改:输入想要修改的联系人的
name
,先进行查找,若查找成功,则修改联系人信息;若查找失败,提示修改失败并返回;- 显示:输出所有联系人的有效信息;
- 排序:对有效的联系人信息进行排序;
- 清空:数组初始化,给
size
赋值为0;- 退出:退出程序。
注:
- 在查找联系人时,可以按照任一变量进行查找,但本程序是按照
Name
查找的,若想用其他变量查找,只需自行改变相应操作即可。- 数组的大小是固定的,预编译定义的大小为1000。增加信息和删除信息,除了将联系人的信息存储进数组以外,还需要改变
size
的值。
有了上面的介绍以后,就可以创建结构体了。
#define NAME_MAX 20
#define SEX_MAX 10
#define TELE_MAX 20
#define ADDRE_MAX 20
#define CAPACITY_MAX 1000
typedef struct PeoInfo { //联系人信息
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char tele[TELE_MAX];
char addre[ADDRE_MAX];
}PeoInfo;
typedef struct Contact { //通讯录信息
PeoInfo data[CAPACITY_MAX];
int size;
}Contact,*pContact;
函数部分就是正常的增删查改、排序、输出、清空。只需要想清楚操作的是data数组,而数组中有效信息的个数为size即可,下面附上函数部分在头文件中的声明:
void menu();
void InitContact(pContact pCon);
void ChooseOption(pContact pCon);
void Add(pContact pCon);
void Delete(pContact pCon);
void Search(const pContact pCon);
void Modify(pContact pCon);
void Show(const pContact pCon);
void Sort(pContact pCon);
void Empty(pContact pCon);
void Destroy(pContact pCon);
下面是全部代码:
Contact.h
#pragma once
#ifndef __CONTACT_H__
#define __CONTACT_H__
#include<stdio.h>
#include<assert.h>
#include<string.h>
#define NAME_MAX 20
#define SEX_MAX 10
#define TELE_MAX 20
#define ADDRE_MAX 20
#define CAPACITY_MAX 1000
typedef struct PeoInfo { //联系人信息
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char tele[TELE_MAX];
char addre[ADDRE_MAX];
}PeoInfo;
typedef struct Contact { //通讯录信息
PeoInfo data[CAPACITY_MAX];
int size;
}Contact,*pContact;
void menu();
void InitContact(pContact pCon);
void ChooseOption(pContact pCon);
void Add(pContact pCon);
void Delete(pContact pCon);
void Search(const pContact pCon);
void Modify(pContact pCon);
void Show(const pContact pCon);
void Sort(pContact pCon);
void Empty(pContact pCon);
void Destroy(pContact pCon);
#endif //__CONTACT_H__
Contact.c
#define _CRT_SECURE_NO_WARNINGS
#include"Contact.h"
enum Option
{
EXIT,
ADD,
DELETE,
SEARCH,
MODIFY,
SHOW,
SORT,
EMPTY
};
void ChooseOption(pContact pCon)
{
int input = 0;
do{
menu();
scanf("%d", &input);
switch (input)
{
case ADD:
Add(pCon);
break;
case DELETE:
Delete(pCon);
break;
case SEARCH:
Search(pCon);
break;
case MODIFY:
Modify(pCon);
break;
case SHOW:
Show(pCon);
break;
case SORT:
Sort(pCon);
break;
case EMPTY:
Empty(pCon);
break;
case EXIT:
Destroy(pCon);
printf("Exit success!\n");
break;
default:
printf("Input Error!\n");
break;
}
} while (input);
}
void menu()
{
printf("******************************\n");
printf("*** 1.add 2.delete ***\n");
printf("*** 3.search 4.modify ***\n");
printf("*** 5.show 6.sort ***\n");
printf("*** 7.empty 0.exit ***\n");
printf("******************************\n");
printf("Please input:");
}
void InitContact(pContact pCon)
{
memset(pCon->data, 0, CAPACITY_MAX * sizeof(PeoInfo));
pCon->size = 0;
}
void Add(pContact pCon)
{
assert(pCon);
if (pCon->size == CAPACITY_MAX)
{
printf("Contact is full!\n");
return;
}
printf("Please input name:\n");
scanf("%s", pCon->data[pCon->size].name);
printf("Please input age:\n");
scanf("%d", &pCon->data[pCon->size].age);
printf("Please input sex:\n");
scanf("%s", pCon->data[pCon->size].sex);
printf("Please input tele:\n");
scanf("%s", pCon->data[pCon->size].tele);
printf("Please input addre:\n");
scanf("%s", pCon->data[pCon->size].addre);
pCon->size++;
}
static int Find(const pContact pCon)
{
int i = 0;
char name[NAME_MAX] = { 0 };
assert(pCon);
printf("Please input name:\n");
scanf("%s", name);
for (i = 0; i < pCon->size; i++)
{
if (strcmp(name, pCon->data[i].name) == 0)
return i;
}
return -1;
}
void Delete(pContact pCon)
{
int i = 0;
int ret = 0;
assert(pCon);
ret = Find(pCon);
if (ret == -1)
{
printf("Delete is not exist!\n");
return;
}
else
{
for (i = ret; i < pCon->size; i++)
{
pCon->data[i] = pCon->data[i + 1];
}
pCon->size--;
printf("Successfully deleted!\n");
}
}
void Search(const pContact pCon)
{
int ret = 0;
assert(pCon);
ret = Find(pCon);
if (ret == -1)
{
printf("Search failure!\n");
return;
}
else
{
printf("Search Success!\n");
printf("%10s %5s %10s %15s %10s\n", "Name", "Age", "Sex", "Tele", "Addre");
printf("%10s %5d %10s %15s %10s\n", pCon->data[ret].name,
pCon->data[ret].age, pCon->data[ret].sex, pCon->data[ret].tele, pCon->data[ret].addre);
}
}
void Modify(pContact pCon)
{
int i = 0;
int ret = 0;
assert(pCon);
ret = Find(pCon);
if (ret == -1)
{
printf("Find failure!\n");
return;
}
else
{
printf("Please input name:\n");
scanf("%s", pCon->data[ret].name);
printf("Please input age:\n");
scanf("%d", &pCon->data[ret].age);
printf("Please input sex:\n");
scanf("%s", pCon->data[ret].sex);
printf("Please input tele:\n");
scanf("%s", pCon->data[ret].tele);
printf("Please input addre:\n");
scanf("%s", pCon->data[ret].addre);
printf("Modify Success!\n");
}
}
void Show(const pContact pCon)
{
int i = 0;
assert(pCon);
if (pCon->size == 0)
{
printf("Contact is empty!\n");
}
printf("%10s %5s %10s %15s %10s\n", "Name", "Age", "Sex", "Tele", "Addre");
for (i = 0; i < pCon->size; i++)
{
printf("%10s %5d %10s %15s %10s\n", pCon->data[i].name,
pCon->data[i].age, pCon->data[i].sex, pCon->data[i].tele, pCon->data[i].addre);
}
}
void Sort(pContact pCon)
{
int i = 0;
int j = 0;
int flag = 0;
assert(pCon);
for (i = 0; i < pCon->size - 1; i++)
{
for (j = 0; pCon->size - 1 - i; j++)
{
if (strcmp(pCon->data[j].name, pCon->data[j + 1].name) > 0)
{
PeoInfo tmp = pCon->data[j];
pCon->data[j] = pCon->data[j + 1];
pCon->data[j + 1] = tmp;
flag = 1;
}
}
if (flag == 0)
break;
}
printf("Sort success!\n");
}
void Empty(pContact pCon)
{
assert(pCon);
memset(pCon->data, 0, CAPACITY_MAX * sizeof(PeoInfo));
pCon->size = 0;
printf("Empty success!\n");
}
void Destroy(pContact pCon)
{
pCon->size = 0;
}
test.c
#include"Contact.h"
void Test()
{
Contact Con;
InitContact(&Con);
ChooseOption(&Con);
}
int main()
{
Test();
return 0;
}
程序运行结果如下:
-
添加
-
删除
-
查找
-
修改>
-
展示
-
清空
-
退出
以上!