今天分享的是简易通讯录
代码实现环境
编译器:VS2019
语言:C语言
首先我们要在VS2019创建一个新项目,里面创建两个源文件(一个用来存放函数,另一个用来创建主函数),一个头文件(就是存放头文件的)
代码展示
test.c
// 禁用Visual Studio中的安全警告,通常与旧的字符串处理函数(如strcpy, sprintf)有关
#define _CRT_SECURE_NO_WARNINGS
// "contcat.h"是一个头文件,其中包含了contcat数据结构、函数原型等
#include"contcat.h"
// 用户界面函数,用于显示操作菜单
void ui ()
{
// 打印出操作菜单
printf("***********************************\n");
printf("****** 1.add 2.del *****\n");
printf("****** 3.serach 4.modify *****\n");
printf("****** 5.show 6.sort ****\n");
printf("****** 0.exit *************\n");
printf("***********************************\n");
}
int main()
{
int input = 0; // 用户输入的选择
contcat con; // 声明一个contcat类型的变量con
// 初始化contcat数据结构
initcontcat(&con);
// 使用do-while循环来持续显示菜单并等待用户输入
do
{
ui(); // 显示用户界面
printf("选择\n"); // 提示用户输入选择
scanf("%d", &input); // 读取用户输入
// 根据用户输入执行相应的操作
switch (input)
{
case 1: addcont(&con); // 添加操作
break;
case 2: delcont(&con); // 删除操作
break;
case 3: serachcont(&con); // 查找操作
break;
case 4: modifycont(&con); // 修改操作
break;
case 5: showcont(&con); // 显示操作
break;
case 6: sortcont(&con); // 排序操作
break;
case 0: printf("退出\n"); // 退出程序
break;
default: printf("输入错误,请重新输入\n"); // 输入错误的处理
break;
}
} while (input); // 当用户输入非0值时,循环继续
return 0; // 程序正常退出
}
contcat.c代码
#include"contcat.h"//引用头文件
//初始化,全部初始化为0
void initcontcat(contcat* pc)
{
pc->sz = 0;//初始化数
memset(pc->a, 0, sizeof(pc->a));
//memset是一个库函数,它定义在<string.h>头文件中。
//这个函数通常用于设置内存区域中的特定位模式
//经常用于将一块内存区域初始化为一个特定的值
//参数为指向要填充的内存块的指针,要填充的值,要填充的字节数
}
//添加联系人
void addcont(contcat* pc)
{
if (pc->sz == 100)
{
printf("联系人已经填满,空间不足");
}
//进行添加联系人
printf("输入姓名");
scanf("%s", pc->a[pc->sz].name);
printf("输入年龄");
scanf("%d", &(pc->a[pc->sz].age));
printf("输入性别");
scanf("%s", pc->a[pc->sz].sew);
printf("输入电话号");
scanf("%s", pc->a[pc->sz].tele);
pc->sz++;//每一次添加要对sz+1,这样才会指向下一个位置
}
//显示联系人
void showcont(contcat* pc)
{ printf("%-20s\t%s \t%s\t %s \n ", "姓名", "年龄", "性别", "电话");
int i = 0;
for (i = 0; i < pc->sz; i++)
{
//这个太长了,不利于观看,所以切下一行看
printf("%-20s\t%d \t%s\t %s \n ", pc->a[i].name,
pc->a[i].age,pc->a[i].sew, pc->a[i].tele);
}
}
//因为查找,修改,删除其中都有查找,所以先写一个简易的查找
//
int findname(contcat* pc, char name[])
{
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (strcmp(name ,pc->a[i].name)==0)
return i;
}
return -1;
}
//删除联系人
void delcont(contcat* pc)
{
char name[20];
printf("输入你想删除的名字");
int i = 0;
scanf("%s", &name);
int ret =findname(pc, name);
if (ret == -1)
{
printf("查找的人不存在");
return;
}
for (ret; ret < pc->sz; ret++)
{
pc->a[ret] = pc->a[ret + 1];
}
pc->sz--;
printf("删除成功");
showcont(pc);
return;
}
//查找联系人
void serachcont(contcat* pc)
{
char name[20];
printf("输入你想查找的名字");
scanf("%s", name);
int ret=findname(pc, name);
if (ret == -1)
{
printf("查找的人不存在\n");
return;
}
else
{
printf("%-20s\t%s \t%s\t %s \n ", "姓名", "年龄", "性别", "电话");
printf("%-20s\t%d \t%s\t %s \n ", pc->a[ret].name,
pc->a[ret].age, pc->a[ret].sew, pc->a[ret].tele);
}
}
void modifycont(contcat* pc)
{
char name[20];
printf("输入你想修改的名字\n");
int i = 0;
scanf("%s", &name);
int ret = findname(pc, name);
if (ret == -1)
{
printf("修改的人不存在\n");
return;
}
else
{
ren s1;
printf("输入你修改的名字:");
scanf("%s", s1.name);
printf("输入你修改的年龄:");
scanf("%d", &s1.age);
printf("输入你修改的性别:");
scanf("%s", s1.sew); // 限制性别字段的最大字符数
printf("输入你修改的电话:");
scanf("%s", s1.tele);
pc->a[ret] = s1;
printf("修改完成");
}
showcont(pc);
return;
}
//排序
// 冒泡排序函数
void sortcont(contcat* pc)
{
for (int front = 0; front < pc->sz - 1; front++)
{
for (int behide = 0; behide < pc->sz - front - 1; behide++)
{
if (strcmp(pc->a[behide].name, pc->a[behide + 1].name) > 0)
{
// 交换pc->data[behide]和pc->data[behide + 1]
ren tmp = pc->a[behide];
pc->a[behide] = pc->a[behide + 1];
pc->a[behide + 1] = tmp;
}
}
}
showcont(pc);
return 0;
}
contcat.h代码
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
typedef struct ren
{
char name[20];
int age;
char sew[5];
char tele[20];
}ren;
typedef struct contcat
{
ren a[100];//存放人的信息
int sz;//存放信息的个数
}contcat;
//初始化通讯录全为0;
void initcontcat(contcat* pc);
//增加联系人
void addcont(contcat* pc);
//查找联系人
int findname(contcat* pc, char name[]);
//显示联系人
void showcont(contcat* pc);
//删除联系人
void delcont(contcat* pc);
//查找联系人
void serachcont(contcat* pc);
//修改联系人
void modifycont(contcat* pc);
//排序联系人(按年龄排序)
void sortcont(contcat* pc);
欢迎大家指正错误