一、要求
实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
提供方法:
添加联系人信息
删除指定联系人信息
查找指定联系人信息
修改指定联系人信息
显示所有联系人信息
清空所有联系人
以名字排序所有联系人
二、程序实现
1.创建一个菜单供玩家选择和操作
这个是主函数
#include"test.h"
void menu()
{
printf("*********1.add************2.search***********\n");
printf("*********3.del************4.show*************\n");
printf("*********5.clear**********6.Destroy**********\n");
printf("*********0.exit******************************\n");
}
void game()
{
int input = 0;
Contact con;//通讯录
InitContact(&con);
do
{
menu();
printf("请输入你的操作: \n");
scanf_s("%d", &input);
int ret = 0;//定义ret的时候要放到switch的外面
switch (input)
{
case 0:
printf("推出游戏");
break;
case 1:
AddContact(&con);
break;
case 2:
ret=SearchContact(&con);
if (ret == -1)
{
printf("查无此人\n");
}
break;
case 3:
DelContact(&con);
break;
case 4:
ShowContact(&con);
break;
case 5:
ClearContact(&con);
break;
default:
break;
}
} while (input);
}
int main()
{
game();
return 0;
}
函数的声明在.h文件中
#pragma once//防止重复定义
#define MAX_NUM_PER 5 //定义最大人数为5
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
#include<string.h>
//人物的信息
typedef struct Personlnfo
{
char name[10];
char sex[5];
int age;
char tel[15];
char address[20];
}Personlnfo;//定义结构体
typedef struct Contact
{
Personlnfo per[MAX_NUM_PER];//结构体数组
int usedSize;//当前通讯录的人数
}Contact;
void InitContact(Contact* pCon);//初始化通讯录
void AddContact(Contact* pCon);//添加成员
int SearchContact(Contact* pCon);//找到返回下标 找不到返回-1 姓名查找
void DelContact(Contact* pCon);//删除成员
void ShowContact(Contact* pCon);//展示成员信息
void ClearContact(Contact* pCon);//清除所有成员
一个.h文件要有一个.c文件与之对应
1.初始化成员
#include"test.h"
void InitContact(Contact* pCon)
{
assert(pCon != NULL);
pCon->usedSize = 0;
//将我们数组的内容,置为0
memset(pCon->per,0,sizeof(pCon->per));
}
2.添加成员信息
void AddContact(Contact* pCon)
{
assert(pCon != NULL);
if (pCon->usedSize == MAX_NUM_PER)
{
printf("通讯录已经满了");
return;
}
printf("请输入你的姓名: ");
scanf("%s",pCon->per[pCon->usedSize].name);
printf("请输入你的性别: ");
scanf("%s",pCon->per[pCon->usedSize].sex);
printf("请输入你的年龄: ");
scanf("%d",&(pCon->per[pCon->usedSize].age));
printf("请输入你的电话: ");
scanf("%s",pCon->per[pCon->usedSize].tel);
printf("请输入你的地址: ");
scanf("%s",pCon->per[pCon->usedSize].address);
pCon->usedSize++;
printf("插入成功\n");
}
3.展示成员信息
void ShowContact(Contact* pCon)
{
printf("%-10s %-10s %-10s %-20s %-10s\n", "姓名","年龄","性别","电话","地址");
for (int i = 0; i < pCon->usedSize; i++)
{
printf("%-10s %-10d %-10s %-20s %-10s\n",pCon->per[i].name, pCon->per[i].age,
pCon->per[i].sex, pCon->per[i].tel, pCon->per[i].address);
}
}
左对齐,让数字更加工整
4.查找成员
//找到返回下标 找不到返回-1 姓名查找
int SearchContact(Contact* pCon)
{
assert(pCon != NULL);
printf("请输入你要查找的姓名: ");
char name[10] = { 0 };
scanf("%s", name);
for (int i = 0; i < pCon->usedSize; i++)
{
if ((strcmp(pCon->per[i].name,name))==0)
{
return i;
}
}
return -1;
}
这边没有写找到会怎样,可以自己加。
找到没有显示,找不到则显示查无此人
添加的成员是哈哈
5.删除成员信息
void DelContact(Contact* pCon)
{
assert(pCon != NULL);
int index = SearchContact(pCon);
if (index == -1)
{
printf("没有你要删除的人\n");
return;
}
//说明有删除的人
int i = index;
for (; i < pCon->usedSize -1; i++)
{
pCon->per[i] = pCon->per[i + 1];
}
pCon->usedSize--;
printf("删除成功\n");
}
6.清除所有
void ClearContact(Contact* pCon)
{
pCon->usedSize = 0;
}
这样,就把所有函数写完,程序实现运行
有一个摧毁程序,还没有具体实施,但是前面的已经够用
全部代码
test.h
#pragma once
#define MAX_NUM_PER 5
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
#include<string.h>
//人物的信息
typedef struct Personlnfo
{
char name[10];
char sex[5];
int age;
char tel[15];
char address[20];
}Personlnfo;
typedef struct Contact
{
Personlnfo per[MAX_NUM_PER];//结构体数组
int usedSize;//当前通讯录的人数
}Contact;
void InitContact(Contact* pCon);//初始化通讯录
void AddContact(Contact* pCon);
//找到返回下标 找不到返回-1 姓名查找
int SearchContact(Contact* pCon);
void DelContact(Contact* pCon);
void ShowContact(Contact* pCon);
void ClearContact(Contact* pCon);
main.c
#include"test.h"
void menu()
{
printf("*********1.add************2.search***********\n");
printf("*********3.del************4.show*************\n");
printf("*********5.clear**********6.Destroy**********\n");
printf("*********0.exit******************************\n");
}
void game()
{
int input = 0;
Contact con;//通讯录
InitContact(&con);
do
{
menu();
printf("请输入你的操作: \n");
scanf_s("%d", &input);
int ret = 0;//定义ret的时候要放到switch的外面
switch (input)
{
case 0:
printf("推出游戏");
break;
case 1:
AddContact(&con);
break;
case 2:
ret=SearchContact(&con);
if (ret == -1)
{
printf("查无此人\n");
}
break;
case 3:
DelContact(&con);
break;
case 4:
ShowContact(&con);
break;
case 5:
ClearContact(&con);
break;
default:
break;
}
} while (input);
}
int main()
{
game();
return 0;
}
test.c
//实现.h的内容
#include"test.h"
void InitContact(Contact* pCon)
{
assert(pCon != NULL);
pCon->usedSize = 0;
//将我们数组的内容,置为0
memset(pCon->per,0,sizeof(pCon->per));
/*for (int i = 0; i < MAX_NUM_PER; i++)
}
void AddContact(Contact* pCon)
{
assert(pCon != NULL);
if (pCon->usedSize == MAX_NUM_PER)
{
printf("通讯录已经满了");
return;
}
printf("请输入你的姓名: ");
scanf("%s",pCon->per[pCon->usedSize].name);
printf("请输入你的性别: ");
scanf("%s",pCon->per[pCon->usedSize].sex);
printf("请输入你的年龄: ");
scanf("%d",&(pCon->per[pCon->usedSize].age));
printf("请输入你的电话: ");
scanf("%s",pCon->per[pCon->usedSize].tel);
printf("请输入你的地址: ");
scanf("%s",pCon->per[pCon->usedSize].address);
pCon->usedSize++;
printf("插入成功\n");
}
//找到返回下标 找不到返回-1 姓名查找
int SearchContact(Contact* pCon)
{
assert(pCon != NULL);
printf("请输入你要查找的姓名: ");
char name[10] = { 0 };
scanf("%s", name);
for (int i = 0; i < pCon->usedSize; i++)
{
if ((strcmp(pCon->per[i].name,name))==0)
{
return i;
}
}
return -1;
}
void DelContact(Contact* pCon)
{
assert(pCon != NULL);
int index = SearchContact(pCon);
if (index == -1)
{
printf("没有你要删除的人\n");
return;
}
//说明有删除的人
int i = index;
for (; i < pCon->usedSize -1; i++)
{
pCon->per[i] = pCon->per[i + 1];
}
pCon->usedSize--;
printf("删除成功\n");
}
void ShowContact(Contact* pCon)
{
printf("%-10s %-10s %-10s %-20s %-10s\n", "姓名","年龄","性别","电话","地址");
for (int i = 0; i < pCon->usedSize; i++)
{
printf("%-10s %-10d %-10s %-20s %-10s\n",pCon->per[i].name, pCon->per[i].age,
pCon->per[i].sex, pCon->per[i].tel, pCon->per[i].address);
}
}
void ClearContact(Contact* pCon)
{
pCon->usedSize = 0;
}