admin管理员组文章数量:1530043
过程详解
- step 0.总体思路
- step 1.创建通讯录
- step 2.创建联系人结构体并初始化通讯录
- step 3.Add增加联系人的信息到通讯录
- step 4.显示通讯中的信息
- step 5.删除指定联系人
- step 6.查找指定联系人
- step 7.修改指定联系人的信息
- step 8.排序通讯录中的信息
step 0.总体思路
注:将所有的头文件声明放入contact.h的头文件中
step 1.创建通讯录
test.c文件👇
#include "contact.h"
void menu()
{
printf("*************************************************\n");
printf("**************1.Add 2.Del*****************\n");
printf("**************3.Search 4.Modify**************\n");
printf("**************5.Show 6.Sort****************\n");
printf("************** 0.exit *************\n");
printf("*************************************************\n");
}
int main()
{
//创建通讯录
int input = 0;
//通讯录测试主体↓
do
{
menu();//打印简单菜单,显示通讯录的功能
printf("请选择:");
scanf("%d", &input);//接收选择(数字)选择进入功能窗口
switch (input)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 0:
printf("退出通讯录");
break;
default:
printf("选择错误,请重新选择:\n");
break;
}
} while (input);
}
step 2.创建联系人结构体并初始化通讯录
#pragma once
#include<stdio.h>
#include <string.h>
//便于后续可能更改数据
#define N_MAX 100
#define NAME_MAX 30
#define GENDER_MAX 5
#define TEL_MAX 13
#define ADDR_MAX 50
//创建联系人结构体
struct PeoInfo
{
char name[NAME_MAX];
char gender[GENDER_MAX];
int tel[TEL_MAX];
int age;
char addres[ADDR_MAX];
};
struct Contact
{
struct PeoInfo data[N_MAX];
int sz;
};
//初始化通讯录
void InitContact(struct Contact* pc);
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
void InitContact(struct Contact* pc)
{
pc->sz = 0;
memset(pc->data, 0, N_MAX * sizeof(struct PeoInfo));
}
👉memest函数笔记
memset(cplusplus)
step 3.Add增加联系人的信息到通讯录
//增加联系人的信息到通讯录
void AddContact(struct Contact* pc)
{
//首先判断能否增加信息
if (pc->sz == N_MAX)
{
printf("通讯录已满,无法增加联系人的信息\n");
return;
}
else
{
printf("请输入联系人的名字:");
scanf("%s", pc->data[pc->sz].name);
printf("请输入联系人的性别:");
scanf("%s", pc->data[pc->sz].gender);
printf("请输入联系人的电话:");
scanf("%s", pc->data[pc->sz].tel);
printf("请输入联系人的年龄:");
scanf("%d", &pc->data[pc->sz].age);//注意这里age不是数组名!要有‘&’
printf("请输入联系人的地址:");
scanf("%s", pc->data[pc->sz].addres);
printf("成功增加联系人的信息\n\n");
pc->sz++;
}
}
运行结果👇
step 4.显示通讯中的信息
//显示通讯录中的信息
void ShowContact(const struct Contact* pc)
{
assert(pc);
int i = 0;
printf("%-20s\t%-5s\t%-15s\t%-5s\t%-30s\n","姓名","性别","电话","年龄","地址");
//右对齐-正数 ; 左对齐-负数
for (i = 0; i < (pc->sz); i++)
{
printf("%-20s\t%-5s\t%-15s\t%-5d\t%-30s\n", pc->data[i].name,
pc->data[i].gender,
pc->data[i].tel,
pc->data[i].age,
pc->data[i].addres);
}
}
运行结果👇
step 5.删除指定联系人
//根据姓名查找指定联系人
int FindByName(const struct Contact* pc, char* name)
{
assert(pc);
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (0 == strcmp(pc->data[i].name, name))
{
//printf("该联系人不存在\n");
return i;
}
}
return -1;
}
//删除指定联系人
void DelContact(struct Contact* pc)
{
assert(pc);
char name[NAME_MAX];
printf("请输入指定删除的联系人的姓名:");
scanf("%s", &name);
int ret = FindByName(pc, name);
if (-1 == ret)
{
printf("该联系人不存在\n");
return;
}
else
{
int i = 0;
for (i = 0; i < (pc->sz - 1); i++)
{
pc->data[ret + i] = pc->data[ret + 1 + i];
}
pc->sz--;
printf("成功删除指定联系人\n");
}
}
👉strcmp函数笔记
step 6.查找指定联系人
思路:前半部分同 step5.删除 的思路(到查找为止)->后半部分同 step4.显示 的思路(输出指定查找的联系人)
//查找指定联系人
void SearchContact(const struct Contact* pc)
{
assert(pc);
char name[NAME_MAX];
printf("请输入指定查找的联系人的姓名:");
scanf("%s", &name);
int ret = FindByName(pc, name);
if (-1 == ret)
{
printf("该联系人不存在\n");
return;
}
else
{
printf("%-20s\t%-5s\t%-15s\t%-5s\t%-30s\n", "姓名", "性别", "电话", "年龄", "地址");
printf("%-20s\t%-5s\t%-15s\t%-5d\t%-30s\n", pc->data[ret].name,
pc->data[ret].gender,
pc->data[ret].tel,
pc->data[ret].age,
pc->data[ret].addres);
}
}
step 7.修改指定联系人的信息
思路:类似step5.删除 +step3.增加的思路(删除变修改)
//修改指定联系人的信息
void ModifyContact(struct Contact* pc)
{
assert(pc);
char name[NAME_MAX];
printf("请输入指定修改的联系人的姓名:");
scanf("%s", &name);
int ret = FindByName(pc, name);
if (-1 == ret)
{
printf("该联系人不存在\n");
return;
}
else
{
//注意是[ret]!
printf("请输入联系人的名字:");
scanf("%s", pc->data[ret].name);
printf("请输入联系人的性别:");
scanf("%s", pc->data[ret].gender);
printf("请输入联系人的电话:");
scanf("%s", pc->data[ret].tel);
printf("请输入联系人的年龄:");
scanf("%d", &pc->data[ret].age);
printf("请输入联系人的地址:");
scanf("%s", pc->data[ret].addres);
printf("成功修改联系人的信息\n\n");
}
}
step 8.排序通讯录中的信息
利用qsort函数
//按名字排序
int CmpByName(const void* e1, const void* e2)
{
return ((struct PeoInfo*)e1)->name - ((struct PeoInfo*)e2)->name;
}
//排序通讯录中的信息
void SortContact(const struct Contact* pc)
{
qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByName);
}
👉qsort函数
源码
版权声明:本文标题:【C语言进阶】[struct结构体的应用]——contact1.0通讯录(初级) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1726639813a1079516.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论