当前位置: 首页 > news >正文

通讯录系统

 

目录

通讯录系统头文件:

 通讯录系统Test:

通讯录系统函数源代码:


通讯录系统头文件:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>#define INIT_CAPACITY 2
#define NEW_INIT_CAPACITY 3typedef struct Info
{char name[12];char sex[8];int age;char telephone[12];char address[20];
}Info;typedef struct Address_Book
{int num;int capacity;Info book[0];
}Address_Book;enum difficult_name
{Exit,Add,Del,Search,Modify,Show,Empty,Sort
};void Init(Address_Book** Book);
void Add_info(Address_Book** Book);
void Del_info(Address_Book** Book);
void Store(Address_Book** Book);
void Search_info(Address_Book** Book);
void Modify_info(Address_Book** Book);
void Show_info(Address_Book** Book);
void Empty_info(Address_Book** Book);
void Sort_info(Address_Book** Book);

 通讯录系统Test:

#include "通讯录啊.h"int main()
{Address_Book* Book = (Address_Book*)malloc(sizeof(Address_Book) + sizeof(Info) * INIT_CAPACITY);if (Book == NULL){perror("main - malloc");return;}Init(&Book);int input = 0;do{printf("操作:\n");scanf("%d", &input);switch (input){case Exit:Store(&Book);printf("程序退出!\n");free(Book);Book = NULL;break;case Add:Add_info(&Book);break;case Del:Del_info(&Book);break;case Search:Search_info(&Book);break;case Modify:Modify_info(&Book);break;case Show:Show_info(&Book);break;case Empty:Empty_info(&Book);break;case Sort:Sort_info(&Book);break;default:printf("没有该操作,请重新输入\n");break;}} while (input);return 0;
}

通讯录系统函数源代码:

#include "通讯录啊.h"int CheckCapacity(Address_Book** Book);void Init(Address_Book** Book)
{assert(Book);(*Book)->capacity = INIT_CAPACITY;(*Book)->num = 0;memset((*Book)->book, 0, sizeof(Info) * (*Book)->capacity);FILE* pf = fopen("Book.txt", "rb");if (pf == NULL){perror("Init");printf(__LINE__);return;}Info temp = { 0 };while (fread(&temp, sizeof(Info), 1, pf)){if (0 == CheckCapacity(Book)){return;}(*Book)->book[(*Book)->num] = temp;(*Book)->num++;}fclose(pf);pf = NULL;
}int CheckCapacity(Address_Book** Book)
{assert(*Book);if ((*Book)->num == (*Book)->capacity){Address_Book* str = (Address_Book*)realloc(*Book, sizeof(Address_Book) + sizeof(Info) * ((*Book)->capacity + NEW_INIT_CAPACITY));if (str == NULL){printf("增容失败!\n");return 0;}*Book = str;(*Book)->capacity += NEW_INIT_CAPACITY;printf("增容成功!!!\n");return 1;}}void Add_info(Address_Book** Book)
{if (0 == CheckCapacity(Book)){return;}printf("请输入联系人姓名:\n");scanf("%s", (*Book)->book[(*Book)->num].name);printf("请输入联系人性别:\n");scanf("%s", (*Book)->book[(*Book)->num].sex);printf("请输入联系人年龄:\n");scanf("%d", &(*Book)->book[(*Book)->num].age);printf("请输入联系人电话:\n");scanf("%s", (*Book)->book[(*Book)->num].telephone);printf("请输入联系人地址:\n");scanf("%s", (*Book)->book[(*Book)->num].address);(*Book)->num++;printf("添加成功!\n");
}int True_False(Address_Book* Book, int* u_flag)
{char name[20];printf("输入联系人名字:\n");scanf("%s", name);for (int i = 0; i < Book->num; i++){if (strcmp(name, Book->book[i].name) == 0){*u_flag = i;return 1;}}return 0;
}void Del_info(Address_Book** Book)
{assert(*Book);int u_flag = 0;int ret = True_False(*Book, &u_flag);if (ret == 1){for (int i = u_flag; i < (*Book)->num; i++){(*Book)->book[i] = (*Book)->book[i + 1];}printf("删除成功!\n");}else{printf("未查询到该联系人,删除失败!\n");}}void Store(Address_Book** Book)
{assert(*Book);FILE* pf = fopen("Book.txt", "wb");if (pf == NULL){perror("Store");return;}for (int i = 0; i < (*Book)->num; i++){fwrite((*Book)->book + i, sizeof(Info), 1, pf);}fclose(pf);pf = NULL;
}void Search_info(Address_Book** Book)
{assert(*Book);int u_flag = 0;int ret = True_False(*Book, &u_flag);if (ret == 1){printf("找到了:\n");//打印信息return;}printf("没找到!\n");}void Modify_info(Address_Book** Book)
{assert(*Book);int u_flag = 0;int ret = True_False(*Book, &u_flag);if (ret == 1){printf("找到了:\n");//修改信息return;}printf("没找到!\n");}void Show_info(Address_Book** Book)
{assert(*Book);for (int i = 0; i < (*Book)->num; i++){//打印信息}}void Empty_info(Address_Book** Book)
{assert(*Book);memset((*Book)->book, 0, sizeof(Info) * (*Book)->num);(*Book)->capacity = 0;(*Book)->num = 0;}int cmp(void* p1, void* p2)
{return strcmp(((Info*)p1)->name, ((Info*)p2)->name);
}void Sort_info(Address_Book** Book)
{assert(*Book);//排序方式多种,可以Switch选择排序方式,这里名字排序qsort((*Book)->book, (*Book)->num, sizeof(Info), cmp);printf("排序完成!\n");
}

相关文章:

通讯录系统

目录 通讯录系统头文件&#xff1a; 通讯录系统Test&#xff1a; 通讯录系统函数源代码&#xff1a; 通讯录系统头文件&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert…...

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…...

F5 LTM 知识点和实验 3-负载均衡中的负载算法

第三章&#xff1a;负载均衡中的负载算法 负载算法分为静态的和动态的。静态的连接分布模式是预先设置的&#xff0c;流量处理中是不会变化的&#xff0c;动态的连接分布模式也是预先设置的&#xff0c;但是连接分布会根据某些因素的改变而调整。 轮询&#xff08;round robi…...

多线程(JavaEE初阶系列2)

目录 前言&#xff1a; 1.什么是线程 2.为什么要有线程 3.进程与线程的区别与联系 4.Java的线程和操作系统线程的关系 5.多线程编程示例 6.创建线程 6.1继承Thread类 6.2实现Runnable接口 6.3继承Thread&#xff0c;使用匿名内部类 6.4实现Runnable接口&#xff0c;使…...

Ubuntu20.04点Ubuntu software没反应,打不开的解决方案(Ubuntu笔记)

首先检查Ubuntu Software的状态&#xff0c;在终端输入&#xff1a;systemctl status snap.ubuntu-software.ubuntu-software.service 如果状态显示为inactive&#xff0c;则需要启动snap.ubuntu-software.ubuntu-software.service&#xff0c;在终端输入&#xff1a;sudo sys…...

力扣1114.按序打印-----题目解析

题目描述 解析&#xff1a; class Foo {public int a 0;public Foo() {}public void first(Runnable printFirst) throws InterruptedException {// printFirst.run() outputs "first". Do not change or remove this line.printFirst.run();a;}public void second…...

Centos7.9安全部署_防火墙配置_端口配置_协议配置_IP配置_全部亲测---记录022_大数据工作笔记0182

在我们平时搭建大数据平台的时候,由于防火墙的限制,会让搭建集群的时候,报各种错误,但是,有些网络环境要求比较严格的地方,防火墙又要求必须要放开,尤其是.. 有些网络环境会安全组进行定时扫描,说实话,我们用的很多开源软件,一般都是低版本的话都有漏洞,但是升级的话又会很容易…...

Tik Tok海外公会是什么?

在数字社交媒体领域&#xff0c;TikTok已成为全球性的热门应用之一&#xff0c;印尼市场也不例外。作为全球第四人口最多的国家&#xff0c;印尼的年轻人口众多&#xff0c;是一个极具潜力的市场。对于希望在印尼市场进行TikTok公会申请的机构来说&#xff0c;了解市场发展趋势…...

elasticsearch批量导入问题

Testvoid bulkIndex() throws IOException{List<Product> products new ArrayList<Product>();products.add(new Product("香烟",135,1)); // products.add(new Product("瓜子",154,2)); // products.add(new Product("矿…...

SAP安装笔记

1、准备安装介质&#xff0c;SWPM10SP25&#xff0c;51050829_NW750_JavaExport、SAP_HANA_CLIENT、kernel放到/sapcd/NetWeaver目录下 ​​​​​​​ 进入SWPM10SP25执行./sapinst安装 2、待出现 “Open your browser and paste the following URL address to access the G…...

速速收藏!程序员副业赚钱的8种模式

程序员副业赚钱的方式有很多&#xff0c;我总结了程序员兼职赚钱&#xff0c;增加收入的八种模式&#xff0c;希望能够给在迷茫的程序员一点参考&#xff01; 投资理财 很多程序员多少都会买买基金、炒炒股作为一个小副业&#xff0c;由于程序员大多是理科生&#xff0c;有比…...

2、基于redis实现分布式锁

目录 2.1. 基本实现2.2. 防死锁2.3. 防误删2.4. redis中的lua脚本2.4.1 redis 并不能保证2.4.2 lua介绍 2.5. 使用lua保证删除原子性 2.1. 基本实现 借助于redis中的命令setnx(key, value)&#xff0c;key不存在就新增&#xff0c;存在就什么都不做。同时有多个客户端发送setn…...

【问题记录】Ubuntu 22.04 环境下,程序报:段错误(核心已转储)怎么使用 core 文件和GDB调试器 解决?

目录 环境 问题情况 解决思路 原因分析 解决方法 番外知识 环境 VMware Workstation 16 Pro &#xff08;版本&#xff1a;16.1.2 build-17966106&#xff09;ubuntu-22.04.2-desktop-amd64 问题情况 本人在运行百万并发的服务端程序时&#xff0c;程序运行报&#xff1a…...

9 Linux实操篇-实用指令

9 Linux实操篇-实用指令 文章目录 9 Linux实操篇-实用指令9.1 指定和修改运行级别-init/systemctl9.2 找回root密码9.3 Linux的指令说明9.3 帮助类-man/help9.4 文件目录类-pwd/ls/cd/mkdir/...9.5 时间日期类-date/cal9.6 搜索查找类-find/locate/which/grep9.7 压缩和解压类-…...

Hbase基础概念

HBase 一、HBase的数据模型1.HBase数据存储结构2.HBase存储概念3.HBase基本架构 二、HBase Shell1.DDL(Data Definition Language)1.namespace2.table 2.DML&#xff08;Data Manipulation Language&#xff09;1.写入数据2.读取数据3.删除数据 三、HBase组成架构1. Master架构…...

JTS-Angle角度类

目录&#xff1a; 获取AB连线与正北方向的角度求距离此点一定距离、一定夹角的点经纬度判断point点 在线段startPoint-etartPoint的左侧或者右侧米转换为弧度弧度转换为米 定义Point点 public class LatLngPoint {final static double RC 6378137;final static double RJ …...

pytest---环境切换(base-url)

前言 前面小编介绍了如何通过pytest的插件来实现自动化测试的环境的切换&#xff0c;当时使用的方法是通过钩子函数进行获取命令行参数值&#xff0c;然后通过提前配置好的参数进行切换测试环境地址&#xff0c;今天小编再次介绍一种方法&#xff0c;通过pytest的插件&#xff…...

linux跑代码,程序终止了,但资源没有释放。

linux跑代码&#xff0c;程序终止了&#xff0c;但资源没有释放。 程序终止&#xff0c;但是资源没有释放. kill -9 5062完成。 linux终止进程...

数据结构--线性表2-1

目录 一、线性结构的定义 二、线性表的表示 三、顺序表的实现&#xff08;或操作&#xff09; 1、修改&#xff1a; 2、插入&#xff1a; 四、顺序表的运算效率分析&#xff1a;时间效率分析&#xff1a; 一、线性结构的定义 若结构时非空有限集&#xff0c;则有且仅有一个…...

网访问内网机器:基于frp的内网穿透

随缘更新些我自己的博客网站里的文章吧 因为经常需要远程访问自己的机器&#xff0c;所以写一个博客记录一下 公网访问内网机器&#xff1a;基于frp的内网穿透 从公网中访问自己的私有设备向来是一件难事儿。 1. 为什么需要内网穿透&#xff1f; A. 计算机网络 如何在自己的机…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...