通讯录系统
目录
通讯录系统头文件:
通讯录系统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");
}
相关文章:
通讯录系统
目录 通讯录系统头文件: 通讯录系统Test: 通讯录系统函数源代码: 通讯录系统头文件: #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert…...
14:00面试,14:06就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,…...
F5 LTM 知识点和实验 3-负载均衡中的负载算法
第三章:负载均衡中的负载算法 负载算法分为静态的和动态的。静态的连接分布模式是预先设置的,流量处理中是不会变化的,动态的连接分布模式也是预先设置的,但是连接分布会根据某些因素的改变而调整。 轮询(round robi…...
多线程(JavaEE初阶系列2)
目录 前言: 1.什么是线程 2.为什么要有线程 3.进程与线程的区别与联系 4.Java的线程和操作系统线程的关系 5.多线程编程示例 6.创建线程 6.1继承Thread类 6.2实现Runnable接口 6.3继承Thread,使用匿名内部类 6.4实现Runnable接口,使…...
Ubuntu20.04点Ubuntu software没反应,打不开的解决方案(Ubuntu笔记)
首先检查Ubuntu Software的状态,在终端输入:systemctl status snap.ubuntu-software.ubuntu-software.service 如果状态显示为inactive,则需要启动snap.ubuntu-software.ubuntu-software.service,在终端输入:sudo sys…...
力扣1114.按序打印-----题目解析
题目描述 解析: 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海外公会是什么?
在数字社交媒体领域,TikTok已成为全球性的热门应用之一,印尼市场也不例外。作为全球第四人口最多的国家,印尼的年轻人口众多,是一个极具潜力的市场。对于希望在印尼市场进行TikTok公会申请的机构来说,了解市场发展趋势…...
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、准备安装介质,SWPM10SP25,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种模式
程序员副业赚钱的方式有很多,我总结了程序员兼职赚钱,增加收入的八种模式,希望能够给在迷茫的程序员一点参考! 投资理财 很多程序员多少都会买买基金、炒炒股作为一个小副业,由于程序员大多是理科生,有比…...
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),key不存在就新增,存在就什么都不做。同时有多个客户端发送setn…...
【问题记录】Ubuntu 22.04 环境下,程序报:段错误(核心已转储)怎么使用 core 文件和GDB调试器 解决?
目录 环境 问题情况 解决思路 原因分析 解决方法 番外知识 环境 VMware Workstation 16 Pro (版本:16.1.2 build-17966106)ubuntu-22.04.2-desktop-amd64 问题情况 本人在运行百万并发的服务端程序时,程序运行报:…...
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(Data Manipulation Language)1.写入数据2.读取数据3.删除数据 三、HBase组成架构1. Master架构…...
JTS-Angle角度类
目录: 获取AB连线与正北方向的角度求距离此点一定距离、一定夹角的点经纬度判断point点 在线段startPoint-etartPoint的左侧或者右侧米转换为弧度弧度转换为米 定义Point点 public class LatLngPoint {final static double RC 6378137;final static double RJ …...
pytest---环境切换(base-url)
前言 前面小编介绍了如何通过pytest的插件来实现自动化测试的环境的切换,当时使用的方法是通过钩子函数进行获取命令行参数值,然后通过提前配置好的参数进行切换测试环境地址,今天小编再次介绍一种方法,通过pytest的插件ÿ…...
linux跑代码,程序终止了,但资源没有释放。
linux跑代码,程序终止了,但资源没有释放。 程序终止,但是资源没有释放. kill -9 5062完成。 linux终止进程...
数据结构--线性表2-1
目录 一、线性结构的定义 二、线性表的表示 三、顺序表的实现(或操作) 1、修改: 2、插入: 四、顺序表的运算效率分析:时间效率分析: 一、线性结构的定义 若结构时非空有限集,则有且仅有一个…...
网访问内网机器:基于frp的内网穿透
随缘更新些我自己的博客网站里的文章吧 因为经常需要远程访问自己的机器,所以写一个博客记录一下 公网访问内网机器:基于frp的内网穿透 从公网中访问自己的私有设备向来是一件难事儿。 1. 为什么需要内网穿透? A. 计算机网络 如何在自己的机…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
