当前位置:网站首页>通讯录(动态版)(C语言)(VS)
通讯录(动态版)(C语言)(VS)
2022-08-09 04:46:00 【星尘不会落】
通讯录
前言
1.Mian.c
#include"AddressList.h"
enum Usage
{
ALEXIT,
ALPLUS,
ALDELETE,
ALFSHOW,
ALREPLACE,
ALSHOW,
ALDESTORY,
ALSORT
};
void menu()
{
printf("\n");
printf(" 1.添加联系人信息 2.删除指定联系人信息\n");
printf(" 3.查找指定联系人信息 4.修改指定联系人信息\n");
printf(" 5.显示所有联系人信息 6.清空所有联系人\n");
printf(" 7.以名字排序所有联系人 0.退出\n");
printf("\n");
}
void Play()
{
AL address_list;
AL* pal = &address_list;
ALInIt(pal);
printf("欢迎进入通信录。\n");
int n;
do
{
menu();
printf("请输入:");
scanf("%d", &n);
switch (n)
{
//退出通讯录
case ALEXIT:
printf("退出通讯录中...\n");
ALDel(pal);
break;
//添加联系人信息
case ALPLUS:
ALPlus(pal);
break;
//删除指定联系人信息
case ALDELETE:
ALDelete(pal);
break;
//查找指定联系人信息
case ALFSHOW:
ALFShow(pal);
break;
//修改指定联系人信息
case ALREPLACE:
ALReplace(pal);
break;
//显示所有联系人信息
case ALSHOW:
ALShow(pal);
break;
//清空所有联系人
case ALDESTORY:
ALDestory(pal);
break;
//以名字排序所有联系人
case ALSORT:
ALSort(pal);
break;
//选择错误
default:
printf("选择错误。");
break;
}
} while (n);
printf("退出通讯录成功。\n");
}
int main()
{
Play();
return 0;
}
2.AddressList.c
#include"AddressList.h"
//删除通讯录
void ALDel(AL* pal)
{
assert(pal);
free(pal->persons);
pal->persons = NULL;
pal = NULL;
}
//通讯录初始化
void ALInIt(AL* pal)
{
assert(pal);
pal->persons = (P*)calloc(2, sizeof(P));
if (!pal->persons)
{
perror("ALInIt\n");
return;
}
pal->capacity = 2;
pal->count = 0;
}
//找人
static int ALFindName(const AL* pal, const char* name)
{
assert(pal);
int i;
for (i = 0;i < pal->count;i++)
{
if (!(strcmp(name, pal->persons[i].name)))
return i;
}
return -1;
}
//
static int ALCheckAdd(AL* pal)
{
assert(pal);
if (pal->count == pal->capacity)
{
P* pt = (P*)realloc(pal->persons, (pal->capacity + PLUS_NUMBER) * sizeof(P));
if (!pt)
{
perror("ALPlus\n");
return 1;
}
else
{
pal->persons = pt;
pal->capacity += PLUS_NUMBER;
printf("成功增容两位。\n");
}
}
return 0;
}
//添加联系人信息
void ALPlus(AL* pal)
{
assert(pal);
if (ALCheckAdd(pal))
return;
printf("请添加联系人的姓名:");
scanf("%s", pal->persons[pal->count].name);
printf("请添加联系人的性别:");
scanf("%s", pal->persons[pal->count].gender);
printf("请添加联系人的年龄:");
scanf("%hhd", &pal->persons[pal->count].age);
printf("请添加联系人的电话号码:");
scanf("%s", pal->persons[pal->count].phone);
printf("请添加联系人的地址:");
scanf("%s", pal->persons[pal->count].address);
printf("添加联系人%s信息成功!\n", pal->persons[pal->count].name);
pal->count++;
}
//删除指定联系人信息
void ALDelete(AL* pal)
{
assert(pal);
char tmp_name[MAX_NAME];
printf("请输入您要删除的联系人:");
scanf("%s", tmp_name);
int n = ALFindName(pal, tmp_name);
if (n == -1)
{
printf("查无此人。\n");
return;
}
else
{
int i;
for (i = n;i <= pal->count - 1;i++)
pal->persons[i] = pal->persons[i + 1];
pal->count--;
printf("删除联系人%s成功!\n", tmp_name);
}
}
//查找指定联系人信息
void ALFShow(const AL* pal)
{
assert(pal);
char tmp_name[MAX_NAME];
printf("请输入您要查找的联系人:");
scanf("%s", tmp_name);
int n = ALFindName(pal, tmp_name);
if (n == -1)
{
printf("查无此人。\n");
return;
}
else
{
printf("%3s%21s\t%5s\t%3s\t%12s\t%30s\n", "序列", "名字", "性别", "年龄", "电话", "地址");
printf("%3d:%20s\t%5s\t%4d\t%12s\t%30s\n", n + 1,
pal->persons[n].name,
pal->persons[n].gender,
pal->persons[n].age,
pal->persons[n].phone,
pal->persons[n].address);
}
}
//修改指定联系人信息
void ALReplace(AL* pal)
{
assert(pal);
char tmp_name[MAX_NAME];
printf("请输入您要修改的联系人的信息:");
scanf("%s", tmp_name);
int n = ALFindName(pal, tmp_name);
if (n == -1)
{
printf("查无此人。\n");
return;
}
else
{
printf("请修改联系人的姓名:");
scanf("%s", pal->persons[n].name);
printf("请修改联系人的性别:");
scanf("%s", pal->persons[n].gender);
printf("请修改联系人的年龄:");
scanf("%hhd", &pal->persons[n].age);
printf("请修改联系人的电话号码:");
scanf("%s", pal->persons[n].phone);
printf("请修改联系人的地址:");
scanf("%s", pal->persons[n].address);
printf("以成功修改联系人%s的信息为联系人%s的信息!\n", tmp_name, pal->persons[n].name);
}
}
//显示所有联系人信息
void ALShow(const AL* pal)
{
assert(pal);
int i;
printf("%3s%21s\t%5s\t%3s\t%12s\t%30s\n", "序列", "名字", "性别", "年龄", "电话", "地址");
for (i = 0;i < pal->count;i++)
{
printf("%3d:%20s\t%5s\t%4hhd\t%12s\t%30s\n", i + 1,
pal->persons[i].name,
pal->persons[i].gender,
pal->persons[i].age,
pal->persons[i].phone,
pal->persons[i].address);
}
}
//清空所有联系人
void ALDestory(AL* pal)
{
assert(pal);
pal->count = 0;
printf("清空所有联系人成功!\n");
}
//以名字排序
int NameSort(const void* e1, const void* e2)
{
return strcmp(((P*)e1)->name, ((P*)e2)->name);
}
//以名字排序所有联系人
void ALSort(AL* pal)
{
assert(pal);
qsort(pal->persons, pal->count, sizeof(P), NameSort);
printf("以名字排序所有联系人成功!\n");
}
3.AddressList.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
//_CRT_SECURE_NO_WARNINGS
//包含头文件
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>
//定义
#define PLUS_NUMBER 2
#define MAX_NAME 10
#define MAX_GENDER 5
#define MAX_PHONE 12
#define MAX_ADDRESS 30
//人的信息包括:姓名、性别、年龄、电话、住址
typedef struct People
{
char name[MAX_NAME];//姓名
char gender[MAX_GENDER];//性别
char age;//年龄
char phone[MAX_PHONE];//电话
char address[MAX_ADDRESS];//住址
}P;
//通讯录可以用来存储1000个人的信息
typedef struct AddressList
{
P* persons;
int count;
int capacity;
}AL;
//删除通讯录
void ALDel(AL* pal);
//通讯录初始化
void ALInIt(AL* pal);
//添加联系人信息
void ALPlus(AL* pal);
//删除指定联系人信息
void ALDelete(AL* pal);
//查找指定联系人信息
void ALFShow(const AL* pal);
//修改指定联系人信息
void ALReplace(AL* pal);
//显示所有联系人信息
void ALShow(const AL* pal);
//清空所有联系人
void ALDestory(AL* pal);
//以名字排序所有联系人
void ALSort(AL* pal);
效果
刚开始:

添加联系人信息

删除指定联系人信息:


查找指定联系人信息:

修改指定联系人信息:

显示所有联系人信息:

以名字排序所有联系人:

清空所有联系人:

退出:

看完给个关注,多谢了!!!

边栏推荐
- LeetCode-636. 函数的独占时间
- uboot中board_init bi_arch_number在哪
- 整除性质1
- 说明高级语言、汇编语言、机器语言三者的区别,谈谈你对汇编语言的认识。
- npm package.json
- Ali YunTianChi competition problem (machine learning) - ali cloud security malware detection (complete code)
- The influence law of genes for disease - read the paper
- XJTUSE Professional Course and Experiment Guide
- pr22.5最新版下载地址
- perl基础语法归纳
猜你喜欢

【Harmony OS】【FAQ】鸿蒙问题合集1

Masked AutoEncoder论文及实现

杰理之ANC OFF语音没有作用【篇】

抖音直播新号怎么起号?抖音直播间不进人怎么办?

容易混淆的指针知识点

LeetCode - remove consecutive nodes with a sum of zero from a linked list

2022 High Voltage Electrician Exam Questions and Answers

稳定性测试怎么做,这篇文章彻底讲透了!

2022年8月深圳产品经理认证招生简章(NPDP)

阿里云天池大赛赛题(机器学习)——天猫用户重复购买预测(完整代码)
随机推荐
ceph创建存储池,映射,删除练习
杰理之智能充电仓低电发码关机 触摸不开机【篇】
I.MX6U-ALPHA开发板(串口实验)
极速理解ML交叉验证
【Harmony OS】【ArkUI】ets开发 基础页面布局与数据连接
leetcode:316. 去除重复字母
`数学` 极限, 渐进分析, 近似阶, 线性化, 线性近似, 线性函数
杰理之采用mix out eq 没有作用【篇】
leetcode:402. 移掉 K 位数字
使用ceph-deploycep集群部署,并用3个磁盘作为专用osd
OKR management process, how to implement effective dialogue, using the CFR feedback and recognition?
Golang入门教程
【学习笔记】AGC044
php将在线远程文件写入临时文件
如何选型APS系统,还需明确这七大关键因素
A GDAL API version must be specified. Provide a path to gdal-config using a GDAL_CONFIG environment
人类微生物组和缺失遗传力--读论文
【暑期每日一题】洛谷 P8086 『JROI-5』Music
【Harmony OS】【ARK UI】Public Event Module
杰理之手机OTG问题【篇】