在学习了结构体等方面的知识后,这里写一个通讯录来验收学习成果。
一、项目建设
该通讯录项目所能实现的功能有:增加联系人、删除联系人、查找联系人、修改联系人信息、查看通讯录,其中联系人信息包括:姓名,性别,年龄,电话。使用的工具依然是vs2022,这里选择创建contact.h,contact.c,test.c,其中在test.c中完成通讯录的整体框架,contact.c中设计实现目的函数,头文件中进行函数声明等操作。
二、项目实现
1.test.c
首先在test.c中实现基本框架,即打印菜单显示功能,选择分支用switch实现。
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
void menu()
{
printf("*********************************************\n");
printf("***********增加信息 1 查找信息 2***********\n");
printf("***********删除信息 3 更改信息 4***********\n");
printf("***********查看信息 5 退出通讯录 0***********\n");
printf("*********************************************\n");
}
int main()
{
contact con;
inticontact(&con);
int a = 0;
do
{
menu();
printf("请选择:>");
scanf("%d", &a);
switch (a)
{
case 0:
printf("退出通讯录\n");
break;
case 1:
Addcontact(&con);
break;
case 2:
find(&con);
break;
case 3:
del(&con);
break;
case 4:
update(&con);
break;
case 5:
show(&con);
break;
default:
printf("选择错误\n");
break;
}
} while (a);
return 0;
}
2.contact.h
头文件中包含的函数声明如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <string.h>
#define MAX 100
//个人信息
typedef struct information
{
char name[20];
char gender[10];
char tele[20];
int age;
}inma;
//创建通讯录
typedef struct contact
{
inma data[MAX];
int num;
}contact;
//通讯录初始化
void inticontact(contact*);
//增加联系人
void Addcontact(contact*);
//查找联系人
void find(contact*);
//查找部分
int findcontact(const contact*,char*);
//显示联系人信息
void show(const contact*);
//删除联系人
void del(contact*);
//更改信息
void update(contact*);
3.contact.c
1).增加信息
先处理增加信息,这里需要先在主函数中创建contact con;用来接收信息,为方便初始化这里可以创建一个函数inticontact(),再创建函数Addcontact()实现增加信息。
//头文件
//通讯录初始化
void inticontact(contact*);
//增加联系人
void Addcontact(contact*);
//*******************************************************
//contact.c
void inticontact(contact* con)
{
assert(con);
memset(con->data,0, sizeof(con->data));
con->num = 0;
}
void Addcontact(contact* con)
{
assert(con);
printf("请输入姓名:>");
scanf("%s", con->data->name);
printf("请输入性别:>");
scanf("%s", con->data->gender);
printf("请输入年龄:>");
scanf("%d", con->data->age);
printf("请输入电话:>");
scanf("%s", con->data->tele);
con->num++;
}
2).查找信息
接下来实现查找功能,创建find()函数来实现,为了后续方便,可以将查找部分单独封装一个函数findcontact()。
//头文件
//查找联系人
void find(contact*);
//查找部分
int findcontact(const contact*,char*);
//*******************************************************
//contact.c
void find(contact* con)
{
assert(con);
char name[20] = { 0 };
printf("请输入查找联系人的姓名:>");
scanf("%s", name);
int ret = findcontact(con, name);
if (ret == -1)
{
printf("查无此人\n");
return;
}
printf("%-10s\t%-10s\t%-10s\t%-20s\n", "姓名", "性别", "年龄", "电话");
printf("%-10s\t%-10s\t%-10d\t%-20s\n",
con->data[ret].name,
con->data[ret].gender,
con->data[ret].age,
con->data[ret].tele);
}
int findcontact(const contact* con,char* name)
{
assert(con && name);
int i = 0;
for (i = 0; i < con->num; i++)
{
if (!strcmp(con->data[i].name, name))
{
return i;
}
}
return -1;
}
3).查看信息
接下来实现查看功能,创建show()来实现。
//头文件
//显示联系人信息
void show(const contact*);
//*****************************************
//contact.c
void show(const contact* con)
{
assert(con);
if (!con->num)
{
printf("通讯录为空\n");
return;
}
printf("%-10s\t%-10s\t%-10s\t%-20s\n", "姓名", "性别", "年龄", "电话");
int i = 0;
for (i = 0; i < con->num; i++)
{
printf("%-10s\t%-10s\t%-10d\t%-20s\n",
con->data[i].name,
con->data[i].gender,
con->data[i].age,
con->data[i].tele);
}
}
4).删除信息
删除功能创建del();来实现。
//头文件
//删除联系人
void del(contact*);
//************************************
//contact.c
void del(contact* con)
{
assert(con);
char name[20] = { 0 };
if (!con->num)
{
printf("通讯录为空\n");
return;
}
printf("请输入要删除联系人的姓名:>");
scanf("%s", name);
int ret = findcontact(con, name);
if (ret == -1)
{
printf("查无此人\n");
return;
}
int i = 0;
if (ret == con->num)
{
memset(con->data, '\0',sizeof(con->data[ret]));
}
for (i = ret; i < con->num - 1; i++)
{
con->data[i] = con->data[i + 1];
}
con->num--;
printf("删除成功\n");
}
5).更改信息
更改信息部分用del()来实现。
//头文件
//更改信息
void update(contact*);
//***********************************
//contact.c
void update(contact* con)
{
assert(con);
char name[20] = { 0 };
if (!con->num)
{
printf("通讯录为空\n");
return;
}
printf("请输入要更改联系人的姓名:>");
scanf("%s", name);
int ret = findcontact(con, name);
if (ret == -1)
{
printf("查无此人\n");
return;
}
printf("请输入姓名:>");
scanf("%s", con->data[ret].name);
printf("请输入性别:>");
scanf("%s", con->data[ret].gender);
printf("请输入年龄:>");
scanf("%d", &(con->data[ret].age));
printf("请输入电话:>");
scanf("%s", con->data[ret].tele);
printf("修改成功\n");
}
三、功能展示
程序启动输入以下信息:
张三 ,男,23,12345678933
李四,男,20,12324193383
翠花,女,18,12383190138
输入5,进行查看通讯录,结果展示如下:
输入2,查找王五,然后在查找李四,结果如下:
输入4,将张三的性别改成女,输入3,将李四删除,结果如下:
输入0退出通讯录,结果如下:
经测试基本功能正常。