C/C++之分文件写静态通讯录详解(保姆级教学)

这篇具有很好参考价值的文章主要介绍了C/C++之分文件写静态通讯录详解(保姆级教学)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂。

目录

1. 前言

2.主函数

3.增加函数 

 4.位置查找函数

5.删除函数 

6.查找函数 

7. 修改函数

8.排序函数 

 9.头文件的展示


1. 前言

         在前面我们学习了自定义类型,其中包括结构体,位段,枚举,联合体,其中最有意思的是他们的内存对齐,想要学习的小伙伴们可以点击https://blog.csdn.net/Infernal_Puppet/article/details/133720624

进行学习,今天我们就来实现一下通讯录,后期我们还会讲动态通讯录,利用文件存储通讯录信息。通讯录包括 通讯录的增删查改排序,接下来让我们感受一下通讯录的实现把。

2.主函数

enum nums {
	退出,
	增加,
	查找,
	删除,
	修改,
	排序
};
void menu()
{
	printf("*************************\n");
	printf("***  1.增加   2.查找  ***\n");
	printf("***  3.删除   4.修改  ***\n");
	printf("***  5.排序   0.退出  ***\n");
	printf("*************************\n");
}
void init_adderstbook(Struct *pc)
{
	memset(pc->arr, 0, sizeof(pc->arr));
	pc->i = 0;
}
void print(Struct* pc)
{
	int i;
	printf("%-20s%-15s%-3s\n", "姓名", "电话", "年龄");
	for (i = 0; i <pc->i; i++)
	{
		printf("%-20s%-15s%-3d\n", pc->arr [i].name , pc->arr[i].phone , pc->arr[i].age );
	}
}
int main()
{
	Struct s;
	init_adderstbook(&s);
	while(1)
	{
		menu();
		int num;
		printf("请输入你想选择的序号:");
		scanf("%d", &num);
		int ret;
		switch (num)
		{
			case 增加:
				add(&s);
				print(&s);
				break;
			case 查找:
				finds(&s);
				break;
			case 删除:
				del(&s);
				print(&s);
				break;
			case 修改:
				mod(&s);
				print(&s);
				break;
			case 排序:
				qsort(s.arr, s.i, sizeof(s.arr[0]), mysort);
				print(&s);
				break;
			case 退出:
				return 0;
		}

	}

	return 0;
}

        这里面包括菜单函数,打印函数,结构体的初始化,还有一个枚举的定义,枚举主要用于switch case语句,由于我们要写的函数较多,容易忘记函数是什么,顺序是什么,我们就可以利用枚举进行定义。

3.增加函数 

void add(Struct *pc)
{
	assert(pc);
	if (pc->i + 1 == Max_Size)
	{
		printf("通讯录满了\n");
		return;
	}
	printf("请输入联系人的姓名:");
	scanf("%s", pc->arr[pc->i].name);
	printf("请输入联系人的电话;");
	scanf("%s", pc->arr[pc->i].phone);
	printf("请输入联系人的年龄:");
	scanf("%d", &pc->arr[pc->i].age);
	pc->i++;
}

        由于我们要传结构体,分为传值和传址,我们利用传址进行函数的传参,主要原因是这样更高效,由于是指针,我们用assert判断是不是空指针,再判断通讯录是不是满了,然后进行数据的输入。

 4.位置查找函数

int find(Struct *pc,char name[])
{
	assert(pc);
	int i = 0;
	for (i = 0; i <= pc->i; i++)
	{
		if (strcmp(name, pc->arr[i].name) == 0)
		{
			return  i;
		}
	}
	return -1;
}

        在这里我们创建了一个位置查找函数,这个函数主要是用于查找到name的位置,如果没有找到返回-1,找到返回所在的位置,这个函数主要用于删除函数和查找函数以及修改函数。

5.删除函数 

void del(Struct* pc)
{
	assert(pc);
	char name[50];
	printf("请输入你想删除人的名字\n");
	scanf("%s", name);
	int ret = find(pc, name);
	int i;
	if (ret != -1)
	{
		for (i = ret; i < pc->i; i++)
		{
			pc->arr[i] = pc->arr[i + 1];
		}
		pc->i--;
	}
}

         同样我们先判断是不是指针是不是空指针,然后进行想要查找的名字,利用find函数找到这个名字的位置,如果不是-1进行删除操作,也就是从这个位置开始,进行覆盖操作(前一个等于后一个直到结束),通讯录的人数减少一个,

6.查找函数 

void finds(Struct* pc)
{
	assert(pc);
	char name[50];
	scanf("%s", name);
	int ret = find(pc, name);
	if (ret != -1)
	{
		printf("%-20s%-15s%-3s\n", "姓名", "电话", "年龄");
		printf("%-20s%-15s%-3d\n", pc->arr[ret].name, pc->arr[ret].phone, pc->arr[ret].age);
	}
	else
		printf("没找到\n");
}

        先进行指针是不是空的判断,输入要查找的人的名字,利用find函数进行查找,如果有进行打印,没有则打印没有找到。

7. 修改函数

void mod(Struct* pc)
{
	assert(pc);
	char name[50];
	printf("请输入你想修改的名字:");
	scanf("%s", name);
	int ret = find(pc, name);
	if (ret != -1)
	{
		printf("请输入你修改后的信息\n");
		printf("请输入联系人的姓名:");
		scanf("%s", pc->arr[ret].name);
		printf("请输入联系人的电话;");
		scanf("%s", pc->arr[ret].phone);
		printf("请输入联系人的年龄:");
		scanf("%d", &pc->arr[ret].age);
	}
	else
		printf("没有此人\n");
}

        先进行指针是不是空的判断,输入想要修改的人的名字,利用find函数进行查找,找到后对其进行修改,没有找到则返回没找到。

8.排序函数 

        在这个函数中我们用到了qsort函数,qsort函数的参数是要排序的数组,排序几个元素,每个元素占几个字节,排序方式函数,想要学习的可点击qsort函数详细讲解以及利用冒泡排序模拟实现qsort函数-CSDN博客,进行查看。

 9.头文件的展示

        由于我们是分文件写的,分为主函数文件,函数文件,函数声明文件,其中函数文件和主函数文件是.c文件,函数声明文件是.h文件,具体代码如下:

#pragma once
#define Max_Size 50
#include <stdio.h>
#include <assert.h>
#include <string.h>

struct  xinxi {
	char name[50];
	char phone[13];
	int age;
};
typedef struct  adderstbook {
	struct xinxi arr[Max_Size];
	int i;
}Struct;
void add (Struct *pc);
int find(Struct* pc,char name[]);
void del(Struct* pc);
void finds(Struct* pc);
void mod(Struct* pc);
int mysort(const void* e1, const void* e2);

        今天的内容就结束了,欢迎大家来三连;文章来源地址https://www.toymoban.com/news/detail-723487.html

到了这里,关于C/C++之分文件写静态通讯录详解(保姆级教学)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】——通讯录(静态-动态增长-文件储存)

      目录 前言: 一:整体框架 关于通讯录结构体的创建  二:通讯录的功能实现(静态) 2.1初始化通讯录 2.2增加联系人 2.3打印通讯录 2.4删除联系人  2.5 查找联系人 2.6修改联系人  2.7排序联系人 三:通讯录优化——动态内存  3.1通讯录的创建 3.2初始化通讯录  3.3增加联系

    2024年02月07日
    浏览(44)
  • 静态版通讯录——C语言【详解+全部码源】

    前言: 我们用C语言实现一个可以存放100个人信息的通讯录 每个人的信息包括: 姓名、性别、年龄、住址、电话 通讯录的功能包括: 增加联系人 删除指定联系人 查找指定联系人 修改指定联系人 显示联系人信息 排序联系人(按照年龄/名字) 与我们之前的扫雷和三子棋项目

    2023年04月20日
    浏览(32)
  • C语言之通讯录的实现(静态版,动态版,文件版)

    个人主页(找往期文章包括但不限于本期文章中不懂的知识点): 我要学编程(ಥ_ಥ)-CSDN博客 目录 静态通讯录的实现逻辑  test.c:通讯录的逻辑实现 Contact.h:函数的声明与头文件的包含 Contact.c:函数的实现  通讯录源码:  test.c: Contact.c: Contect.h: 动态版通讯录  test.c: Co

    2024年04月13日
    浏览(43)
  • 通讯录的实现(静态版本,动态版本,文件版本)(后附完整源代码)

    对于通讯录来说,我们需要它实现以下几个功能。 1.人的信息:姓名+年龄+性别+电话+地址。 2.可以存放100个人的信息。 功能: 1增加联系人。 2删除联系人。 3查找指定联系人信息。 4修改指定联系人信息。 5显示所有联系人信息。 6按名字排序。 接下来分为三个模块,test.c

    2024年01月19日
    浏览(47)
  • 【C语言】通讯录(文件) -- 详解

    前面介绍了 【C语言】静态通讯录 -- 详解_炫酷的伊莉娜的博客-CSDN博客 和 【C语言】动态通讯录 -- 详解_炫酷的伊莉娜的博客-CSDN博客 。当通讯录运行起来时,可以对通讯录中的数据进行增加、删除或修改等。此时数据是存放在内存中,当程序退出时,通讯录中的数据自然就

    2024年02月12日
    浏览(41)
  • C语言——通讯录详解(文件版)

    我们已经掌握了通讯录的静态版和动态版,下面我们将学习通讯录的文件版。学习了文件版,我们就不用担心退出程序后,已经添加的联系人清空了。在以前的通讯录(通讯录静态版、通讯录动态版)基础上,我们在完成两个目标就可以实现通讯录文件版。 目标: 通讯录退

    2024年02月09日
    浏览(37)
  • 【c语言】通讯录(静态)

    小张刚学习完结构体,枚举,联合相关的知识,实践实践,写一个通讯录呗! 通讯录的功能 1.通讯录可存放100的信息 2.信息的内容姓名,性别,年龄,电话,地址 3.支持增加联系人 4.支持删除联系人 5.支持查找联系人 6.支持修改联系人 7.支持排序联系人 8.打印数据 文件类型

    2024年02月13日
    浏览(43)
  • C语言---认识动态内存管理并实现一个动态通讯录:静态通讯录别来沾边

    👧个人主页:@小沈熬夜秃头中୧⍤⃝❅ 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:C语言学习 🔑本章内容:动态内存管理 送给各位💌:当你的能力还驾驭不了你的目标时那你就应该沉下心来历练 记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~ 提示:以下是本篇

    2024年02月08日
    浏览(92)
  • 通讯录的实现(静态入手版)

    🍉博客主页:阿博历练记 📖文章专栏:c语言(初阶与进阶) 🎁代码仓库:阿博编程日记 🌹欢迎关注:欢迎友友们点赞收藏+关注哦 在生活中,我们可以通过通讯录快速实现对一位好友的查找,便捷了我们的日常生活,今天阿博就带领友友们一起探索通讯录的实现🙈🙈🙈

    2024年02月02日
    浏览(64)
  • C语言进阶——静态通讯录

    作者: 敲代码の流川枫 博客主页:流川枫的博客 专栏:C语言从入门到进阶 语录: Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网 点击免费注册和我一起刷题吧 目录 1.contact.h——通讯录相关的声明 2.contact.c——通讯录相关的

    2024年02月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包