我们来用c语言模拟实现一个通讯录,用来保存一个人的姓名、性别、年龄、电话、住址。
超过十余年行业经验,技术领先,服务至上的经营模式,全靠网络和口碑获得客户,为自己降低成本,也就是为客户降低成本。到目前业务范围包括了:网站建设、成都网站设计,成都网站推广,成都网站优化,整体网络托管,小程序开发,微信开发,手机APP定制开发,同时也可以让客户的网站和网络营销和我们一样获得订单和生意!在通讯录中还要实现增删查改等功能来管理通讯录。
一、设计思路通讯录成员:
我们使用结构体来定义一个人员信息,结构体包括成员姓名、性别、年龄、电话、住址。
typedef struct PeoInfo {
char name[32]; //姓名
char sex[8]; //性别
int age; //年龄
char phonenumber[12]; //电话
char adress[20]; //住址
}PeoInfo;
通讯录实现:
同样我们需要定义一个通讯录结构,我们使用一个结构体数组来保存人员信息,在定义成员size和capacity来记录当前通讯录已储存人员数量和通讯录大存储数量。
typedef struct Contact {
PeoInfo con[MAXNUM]; //1000个大小的数组来保存人员信息
int size; //当前数组大小
int capacaty ; //数组大容量
}Contact;
二、工程设计我们需要三个工程文件来实现通讯录
1.contact.h //用来引入库函数和声明通讯录实现函数三、代码,分模块实现
2.contact.c //通讯录实现函数的定义
3.test.c //用来测试通讯录功能
int main() {
Contact contact;
InitContact(&contact);
while (1) {
int choose = memu();
switch (choose)
{
case 1:
AddContact(&contact); //增加联系人
break;
case 2:
DeleContact(&contact); //删除联系人
break;
case 3:
FindContact(&contact); //查找联系人
break;
case 4:
ChangeContact(&contact); //修改联系人信息
break;
case 5:
ShowContact(&contact); //打印通讯录
break;
case 6:
CleanContact(&contact); //清空通讯录
break;
case 7:
SortContact(&contact); //按姓名排序
break;
case 0:
printf("退出成功\n");
exit(0);
default:
printf("请输入正确选项\n");
system("pause");
}
}
return 0;
}
int memu() {
system("cls");
printf("*****************************************\n");
printf("********* 通讯录 *********\n");
printf("********* 1.ADD 2.DELETE *********\n");
printf("********* 3.FIND 4.CHANGE *********\n");
printf("********* 5.SHOW 6.CLEAN *********\n");
printf("********* 7.SORT 0.EXIT *********\n");
printf("*****************************************\n");
int input;
printf("请输入选项\n");
scanf_s("%d", &input);
getchar();
return input;
}
这里输入的选项和switch-case函数对应起来实现选择功能。
效果如下:
void InitContact(Contact* ps) {
assert(ps);
ps->size = 0;
ps->capacaty = MAXNUM; //通讯录大容量这里是1000.
}
因为我们是静态实现的通讯录大容量是固定的,我们实现的是1000.
void AddContact(Contact* ps) {
assert(ps);
if (ps->size == MAXNUM) {
printf("通讯录已满\n");
exit(-1);
}
printf("请输入被添加人的姓名\n");
scanf("%s", ps->con[ps->size].name);
printf("请输入被添加人的性别\n");
scanf("%s", ps->con[ps->size].sex);
printf("请输入被添加人的年龄\n");
scanf("%d",& ps->con[ps->size].age);
printf("请输入被添加人的电话\n");
scanf("%s", ps->con[ps->size].phonenumber);
printf("请输入被添加人的住址\n");
scanf("%s", ps->con[ps->size].adress);
getchar();
ps->size++;
printf("输入成功,请按回车继续\n");
getchar();
}
注意:我们在添加联系人之前需要判断通讯录是否满员,这里用size和capacity比较,如果相等就表示满员,直接退出。判断后没有满员,则录入成员的信息,再使size++表示添加成功。
void ShowContact(Contact* ps) {
assert(ps);
system("cls");
printf("%-7s\t%-5s\t%-5s\t%-11s\t%-32s\t\n","姓名","性别","年龄"," 电话","住址");
for (int i = 0; i< ps->size; i++) {
printf("%-7s\t%-5s\t%-5d\t%-11s\t%-32s\t\n", ps->con[i].name,
ps->con[i].sex,
ps->con[i].age,
ps->con[i].phonenumber,
ps->con[i].adress);
}
printf("输入回车继续\n");
getchar();
}
我们只需要遍历通讯录打印信息即可
在删除联系人之前我们需要查找要删除的联系人是否存在,存在则返回他的下标不存在返回-1,
我们通过查找联系人姓名来查找
int FindByName(Contact* ps, char* name) {
for (int i = 0; i< ps->size; i++) {
if (strcmp(name, ps->con[i].name) == 0) {
return i;
}
}
return -1;
}
我们使用变量pos来接收FindName()函数返回值,-1就是不存在此人,存在则删除该联系人,size--
void DeleContact(Contact * ps) {
assert(ps);
char name[32];
printf("请输入要删除的姓名\n");
scanf("%s", name);
getchar();
int pos = FindByName(ps, name);
if (pos == -1) {
printf("查无此人\n");
return;
}
for (int j = pos; j< ps->size; j++) {
ps->con[j] = ps->con[j + 1];
}
ps->size--;
printf("删除完毕按回车继续\n");
getchar();
}
void FindContact(Contact* ps) {
assert(ps);
char name[32];
printf("请输入要查找的姓名\n");
scanf("%s", name);
getchar();
int pos = FindByName(ps, name);
if (pos == -1) {
printf("查无此人\n");
return;
}
system("cls");
printf("查找成功\n");
printf("%-10s\t%-5s\t%-5s\t%-11s\t%-32s\t\n", "姓名", "性别", "年龄", " 电话", "住址");
printf("%-10s\t%-5s\t%-5d\t%-11s\t%-32s\t\n", ps->con[pos].name,
ps->con[pos].sex,
ps->con[pos].age,
ps->con[pos].phonenumber,
ps->con[pos].adress);
printf("输入回车继续\n");
getchar();
}
同样我们使用FindbyName()函数来查找联系人,查找到之后返回下标来打印联系人信息
void ChangeContact(Contact* ps) {
assert(ps);
char name[32];
printf("请输入要修改的姓名\n");
scanf("%s", name);
getchar();
int pos = FindByName(ps, name);
if (pos == -1) {
printf("查无此人\n");
return;
}
printf("请输入要修改的年龄\n");
scanf("%d", &ps->con[pos].age);
printf("请输入要修改的电话\n");
scanf("%s", ps->con[pos].phonenumber);
printf("请输入要修改的住址\n");
scanf("%s", ps->con[pos].adress);
printf("修改完成\n");
printf("%-10s\t%-5s\t%-5s\t%-11s\t%-32s\t\n", "姓名", "性别", "年龄", " 电话", "住址");
printf("%-10s\t%-5s\t%-5d\t%-11s\t%-32s\t\n", ps->con[pos].name,
ps->con[pos].sex,
ps->con[pos].age,
ps->con[pos].phonenumber,
ps->con[pos].adress);
printf("输入回车继续\n");
getchar();
}
这里都使用了FindbyName()来定位要修改的联系人,从而修改联系人信息
void SortContact(Contact* ps)
{
if (ps->size == 0)
{
printf("通讯录中没有联系人\n");
}
else
{
for (int i = 0; i< ps->size - 1; i++)
{
for (int j = 0; j< ps->size - 1 - i; j++)
{
if ((strcmp(ps->con[j].name, ps->con[j + 1].name)) >0)
{
PeoInfo temp = ps->con[j];
ps->con[j] = ps->con[j + 1];
ps->con[j + 1] = temp;
}
}
}
printf("排序成功!\n");
}
}
void CleanContact(Contact* ps) {
assert(ps);
ps->size = 0;
printf("清除完毕按回车继续\n");
getchar();
}
清空通讯录只需要将size置为0这样就表示清除了所有联系人四、完整代码 contact.h
#pragma once
#pragma warning(disable : 4996)
#include#include#include#include
#define MAXNUM 1000
typedef struct PeoInfo {
char name[32];
char sex[8];
int age;
char phonenumber[12];
char adress[20];
}PeoInfo;
typedef struct Contact {
PeoInfo con[MAXNUM];
int size;
int capacaty ;
}Contact;
void InitContact(Contact* ps);
void DestoryContact(Contact* ps);
void AddContact(Contact* ps);
void DeleContact(Contact* ps);
void FindContact(Contact* ps);
void ChangeContact(Contact* ps);
void CleanContact(Contact* ps);
void ShowContact(Contact* ps);
void SortContact(Contact* ps);
void SortContact(Contact* ps);
contact.c#include"contact.h"
void InitContact(Contact* ps) {
assert(ps);
ps->size = 0;
ps->capacaty = MAXNUM;
}
void DestoryContact(Contact* ps) {
assert(ps);
ps->size = 0;
}
void AddContact(Contact* ps) {
assert(ps);
if (ps->size == MAXNUM) {
printf("通讯录已满\n");
exit(-1);
}
printf("请输入被添加人的姓名\n");
scanf("%s", ps->con[ps->size].name);
printf("请输入被添加人的性别\n");
scanf("%s", ps->con[ps->size].sex);
printf("请输入被添加人的年龄\n");
scanf("%d",& ps->con[ps->size].age);
printf("请输入被添加人的电话\n");
scanf("%s", ps->con[ps->size].phonenumber);
printf("请输入被添加人的住址\n");
scanf("%s", ps->con[ps->size].adress);
getchar();
ps->size++;
printf("输入成功,请按回车继续\n");
getchar();
}
void ShowContact(Contact* ps) {
assert(ps);
system("cls");
printf("%-7s\t%-5s\t%-5s\t%-11s\t%-32s\t\n","姓名","性别","年龄"," 电话","住址");
for (int i = 0; i< ps->size; i++) {
printf("%-7s\t%-5s\t%-5d\t%-11s\t%-32s\t\n", ps->con[i].name,
ps->con[i].sex,
ps->con[i].age,
ps->con[i].phonenumber,
ps->con[i].adress);
}
printf("输入回车继续\n");
getchar();
}
void SortContact(Contact* ps);
int FindByName(Contact* ps, char* name) {
for (int i = 0; i< ps->size; i++) {
if (strcmp(name, ps->con[i].name) == 0) {
return i;
}
}
return -1;
}
void DeleContact(Contact * ps) {
assert(ps);
char name[32];
printf("请输入要删除的姓名\n");
scanf("%s", name);
getchar();
int pos = FindByName(ps, name);
if (pos == -1) {
printf("查无此人\n");
return;
}
for (int j = pos; j< ps->size; j++) {
ps->con[j] = ps->con[j + 1];
}
ps->size--;
printf("删除完毕按回车继续\n");
getchar();
}
void FindContact(Contact* ps) {
assert(ps);
char name[32];
printf("请输入要查找的姓名\n");
scanf("%s", name);
getchar();
int pos = FindByName(ps, name);
if (pos == -1) {
printf("查无此人\n");
return;
}
system("cls");
printf("查找成功\n");
printf("%-10s\t%-5s\t%-5s\t%-11s\t%-32s\t\n", "姓名", "性别", "年龄", " 电话", "住址");
printf("%-10s\t%-5s\t%-5d\t%-11s\t%-32s\t\n", ps->con[pos].name,
ps->con[pos].sex,
ps->con[pos].age,
ps->con[pos].phonenumber,
ps->con[pos].adress);
printf("输入回车继续\n");
getchar();
}
void ChangeContact(Contact* ps) {
assert(ps);
char name[32];
printf("请输入要修改的姓名\n");
scanf("%s", name);
getchar();
int pos = FindByName(ps, name);
if (pos == -1) {
printf("查无此人\n");
return;
}
printf("请输入要修改的年龄\n");
scanf("%d", &ps->con[pos].age);
printf("请输入要修改的电话\n");
scanf("%s", ps->con[pos].phonenumber);
printf("请输入要修改的住址\n");
scanf("%s", ps->con[pos].adress);
printf("修改完成\n");
printf("%-10s\t%-5s\t%-5s\t%-11s\t%-32s\t\n", "姓名", "性别", "年龄", " 电话", "住址");
printf("%-10s\t%-5s\t%-5d\t%-11s\t%-32s\t\n", ps->con[pos].name,
ps->con[pos].sex,
ps->con[pos].age,
ps->con[pos].phonenumber,
ps->con[pos].adress);
printf("输入回车继续\n");
getchar();
}
void CleanContact(Contact* ps) {
assert(ps);
ps->size = 0;
printf("清除完毕按回车继续\n");
getchar();
}
void SortContact(Contact* ps)
{
if (ps->size == 0)
{
printf("通讯录中没有联系人\n");
}
else
{
for (int i = 0; i< ps->size - 1; i++)
{
for (int j = 0; j< ps->size - 1 - i; j++)
{
if ((strcmp(ps->con[j].name, ps->con[j + 1].name)) >0)
{
PeoInfo temp = ps->con[j];
ps->con[j] = ps->con[j + 1];
ps->con[j + 1] = temp;
}
}
}
printf("排序成功!\n");
}
}
test.c#include "contact.h"
int memu() {
system("cls");
printf("*****************************************\n");
printf("********* 通讯录 *********\n");
printf("********* 1.ADD 2.DELETE *********\n");
printf("********* 3.FIND 4.CHANGE *********\n");
printf("********* 5.SHOW 6.CLEAN *********\n");
printf("********* 7.SORT 0.EXIT *********\n");
printf("*****************************************\n");
int input;
printf("请输入选项\n");
scanf_s("%d", &input);
getchar();
return input;
}
int main() {
Contact contact;
InitContact(&contact);
while (1) {
int choose = memu();
switch (choose)
{
case 1:
AddContact(&contact);
break;
case 2:
DeleContact(&contact);
break;
case 3:
FindContact(&contact);
break;
case 4:
ChangeContact(&contact);
break;
case 5:
ShowContact(&contact);
break;
case 6:
CleanContact(&contact);
break;
case 7:
SortContact(&contact);
break;
case 0:
DestoryContact(&contact);
printf("退出成功\n");
exit(0);
default:
printf("请输入正确选项\n");
system("pause");
}
}
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧