任务19 简单个人电话号码查询系统
系列文章
任务19 简单个人电话号码查询系统
- 问题描述
人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。 - 基本要求
(1) 在外存上,用文件保存电话号码信息;
(2) 在内存中,设计数据结构存储电话号码信息;
(3) 提供查询功能:根据姓名实现快速查询;
(4) 提供其他维护功能:例如插入、删除、修改等;
(5) 按电话号码进行排序。
文章目录
- 系列文章
- 一、实践目的与要求
- 1、目的
- 2、要求
- 二、课题任务
- 三、总体设计
- 1.存储结构及数据类型定义
- 2.程序结构
- 3.所实现的功能函数
- 四、小组成员及分工
- 五、 测试
- 文件读取
- 添加联系人
- 删除联系人
- 修改联系人
- 查询联系人
- 退出
- 六、源代码获取
一、实践目的与要求
1、目的
通过此次实践环节主要达到以下目的:
(1)进一步理解和运用结构化程序设计的思想和方法,学会根据具体问题选择合理的计算机存储结构实现数据的存储,构造较有效率的算法;
(2)学会算法描述的方法,并编制具有结构清晰、合理和易读性的小型实用程序;
(3)并会设计测试方案,完成程序的测试,能撰写出该程序的技术报告,为文档整理工作打下一个初步的基础;
(4)培养小组成员间互相学习,取长补短,协同工作的能力。
2、要求
(1)模块化程序设计,锯齿型书写格式,代码要有足够的注释;
(2)根据课题中规定的要求实现既定目标;
(3)撰写格式排版规范、结构完整的技术文档。
二、课题任务
(题目、内容及主要功能描述)
简单个人电话号码查询系统
- 问题描述
人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。 - 基本要求
(1) 在外存上,用文件保存电话号码信息;
(2) 在内存中,设计数据结构存储电话号码信息;
(3) 提供查询功能:根据姓名实现快速查询;
(4) 提供其他维护功能:例如插入、删除、修改等;
(5) 按电话号码进行排序。
三、总体设计
1.存储结构及数据类型定义
(采用了什么存储结构、被处理数据定义的数据类型,数据类型定义中要有注释说明)
typedef struct {char name[50];char phoneNumber[20];
} Contact;
2.程序结构
(程序整体的模块结构图)

3.所实现的功能函数
(每个功能对应的函数名、函数形参及返回值说明)
void addContact(Contact* contacts, int* count, const char* name, const char* phoneNumber)// 添加联系人 函数名addContact 函数形参Contact* contacts, int* count, const char* name, const char* phoneNumber 函数返回值void
void deleteContact(Contact* contacts, int* count, const char* name) // 删除联系人 函数名deleteContact 函数形参Contact* contacts, int* count, const char* name 函数返回值void
void updateContact(Contact* contacts, int count, const char* name, const char* newPhoneNumber) // 修改联系人 函数名updateContact 函数形参Contact* contacts, int count, const char* name, const char* newPhoneNumber 函数返回值void
const char* findContact(const Contact* contacts, int count, const char* name)// 查询联系人 函数名findContact 函数形参const Contact* contacts, int count, const char* name 函数返回值const char*
void saveContactsToFile(const Contact* contacts, int count, const char* filename) // 保存联系人到文件 函数名saveContactsToFile 函数形参const Contact* contacts, int count, const char* filename 函数返回值void
int loadContactsFromFile(Contact* contacts, const char* filename) // 从文件中加载联系人 函数名loadContactsFromFile 函数形参Contact* contacts, const char* filename 函数返回值int
int comparePhoneNumbers(const void* a, const void* b) //用于比较两个联系人的电话号码 函数名comparePhoneNumbers 函数形参const void* a, const void* b 函数返回值int
void sortContactsByPhoneNumber(Contact* contacts, int count) 函数名
sortContactsByPhoneNumber 函数形参 Contact* contacts, int count 函数返回值void
int main(); 函数名main 函数形参无 函数返回值int
四、小组成员及分工
(组长、组员及每人承担的具体模块任务或其他)
组长:
void addContact(Contact* contacts, int* count, const char* name, const char* phoneNumber)// 添加联系人 函数名addContact 函数形参Contact* contacts, int* count, const char* name, const char* phoneNumber 函数返回值void
void deleteContact(Contact* contacts, int* count, const char* name) // 删除联系人 函数名deleteContact 函数形参Contact* contacts, int* count, const char* name 函数返回值void
void updateContact(Contact* contacts, int count, const char* name, const char* newPhoneNumber) // 修改联系人 函数名updateContact 函数形参Contact* contacts, int count, const char* name, const char* newPhoneNumber 函数返回值void
组员1:
const char* findContact(const Contact* contacts, int count, const char* name)// 查询联系人 函数名findContact 函数形参const Contact* contacts, int count, const char* name 函数返回值const char*
void saveContactsToFile(const Contact* contacts, int count, const char* filename) // 保存联系人到文件 函数名saveContactsToFile 函数形参const Contact* contacts, int count, const char* filename 函数返回值void
int loadContactsFromFile(Contact* contacts, const char* filename) // 从文件中加载联系人 函数名loadContactsFromFile 函数形参Contact* contacts, const char* filename 函数返回值int
组员2:
int comparePhoneNumbers(const void* a, const void* b) //用于比较两个联系人的电话号码 函数名comparePhoneNumbers 函数形参const void* a, const void* b 函数返回值int
void sortContactsByPhoneNumber(Contact* contacts, int count) 函数名
sortContactsByPhoneNumber 函数形参 Contact* contacts, int count 函数返回值void
int main(); 函数名main 函数形参无 函数返回值int
五、 测试
(整合各功能模块后的测试结果截图及说明)
文件读取

添加联系人

删除联系人

修改联系人

查询联系人

退出

针对于文件的读写以及数据的排序工作,在添加、删除和修改联系人后调用排序功能,每步都保存在文件中。
六、源代码获取
本次的分享就到这里啦,创作不易,感谢点赞收藏👍
感兴趣的小伙伴可以在评论区留言或者私信我哦💕
提示:代码获取链接: 下载源码
相关文章:
任务19 简单个人电话号码查询系统
系列文章 任务19 简单个人电话号码查询系统 问题描述 人们在日常生活中经常需要查找某个人或某个单位的电话号码,本实验将实现一个简单的个人电话号码查询系统,根据用户输入的信息(例如姓名等)进行快速查询。基本要求 (1) 在外存…...
day4--链表内指定区间反转
迭代方法 1. 第m个节点的前一个节点pre和第n个节点; 2. 将第m个节点到第n个节点的链表部分反转; 3. 将pre节点的next指向反转后链表的头节点,将反转后链表的尾节点的next指向n1节点。 /*** struct ListNode {* int val;* struct ListNode…...
HTTP状态码是什么?常用的状态码有什么?
HTTP(Hypertext Transfer Protocol)是一种用于传输超文本和其他内容的应用层协议。 历史: HTTP最早的版本是HTTP/0.9,它只支持简单的 GET 请求,而不支持其他操作。 HTTP/1.0 版本增加了许多新特性,如支持…...
【软件分析/静态分析】学习笔记01——Introduction
🔗 课程链接:李樾老师和谭天老师的:南京大学《软件分析》课程01(Introduction)_哔哩哔哩_bilibili 目录 一、静态程序分析介绍 1.1 PL and Static Analysis 程序语言和静态分析 1.2 为什么要学 Static Analysis? …...
Java数组
文章目录 前言一维数组数组定义创建数组数组的内存模型数组数据初始化数组元素访问遍历数组length常见数组异常 二分查找数组的操作数组的复制数组的排序 二维数组扩展 Java中定义数组的语法如下: 数据类型[] 数组名 new 数据类型[数组长度]; 数据类型指的是数组中…...
【数据库原理入门】
数据库原理:深入探索与实践指南 引言 在我们的日常生活中,数据库无处不在,从在线购物、银行交易到社交媒体,都离不开数据库。要想成为一名出色的开发者,理解数据库原理是非常重要的。本文将以简明易懂的方式…...
练习Vue烘培坊项目
烘培坊项目 文章目录 烘培坊项目项目概述项目页面展示后台管理页面登录页面文章详情页面稿件发布页面 项目关键代码实现后台管理页面稿件管理页面内容列表页面文章详情页面烘培坊主页面注册页面登录页面个人信息页面稿件发布页面 项目概述 烘培坊(Bakery࿰…...
API测试| 了解API接口测试| API接口测试指南
什么是API? API是一个缩写,它代表了一个 pplication P AGC软件覆盖整个房间。API是用于构建软件应用程序的一组例程,协议和工具。API指定一个软件程序应如何与其他软件程序进行交互。 例行程序:执行特定任务的程序。例程也称为过…...
使用canvas给图片添加水印
上接文章“图片处理” canvas元素其实就是一个画布,我们可以很方便地绘制一些文字、线条、图形等,它也可以将一个img标签里渲染的图片画在画布上。 我们在上传文件到后端的时候,使用input标签读取用户本地文件后得到的其实是一个Blob对象&a…...
栈和队列的概念和实现
栈 栈 定义:只能在一端进行插入或删除操作的的线性表 主要特点:后进先出 存储结构的实现 顺序存储结构 链式存储结构 用途:通常作为一种临时存放数据的容器。如果后存入的元素先处理则使用栈。比如用于保存函…...
PostgreSQL 源码部署
文章目录 说明1. 准备工作1.1 源码包下载1.2 解压安装目录1.3 安装依赖包1.4 添加用户1.5 创建数据目录 2. 编译安装2.1 源码编译2.2 配置环境变量2.3 初始化数据库2.4 启动数据库2.5 连接数据库 3. 参数调整3.1 配置 pg_hba3.2 监听相关2.4 日志文件2.5 内存参数 说明 本篇文…...
医疗IT系统安科瑞隔离电源装置在医院的应用
【摘要】介绍该三级综合医院采用安科瑞隔离电源系统5件套,使用落地式配电柜安装方式,从而实现将TN系统转化为IT系统,以及系统绝缘情况监测。 【关键词】医用隔离电源系统;IT系统;绝缘情况监测;三级综合医院…...
高压放大器在3D打印中的应用
随着3D打印技术的快速发展,高压放大器在3D打印中的应用越来越受到人们的关注。高压放大器在3D打印中扮演着非常重要的角色,可以提高3D打印的效率和精度,从而实现更高的打印质量。本文将详细介绍高压放大器在3D打印中的应用及其原理。 高压放…...
chatgpt赋能python:Python中的三角函数介绍
Python中的三角函数介绍 Python作为一种高级编程语言,可以处理基础算术运算、三角函数等高等数学的操作。其中,三角函数是常用的数学函数之一,Pyhon中的三角函数包括正弦函数、余弦函数、正切函数等。 正弦函数 正弦函数在三角学中是最基本…...
异常检测论文1
本文仅作为个人阅读文献,做笔记记录。 <> \usepackage[dvipsnames]{xcolor} 一、摘要部分: 我们发现,现有的数据集偏向于局部结构异常,如划痕、凹痕或污染。特别是,它们缺乏违反逻辑约束形式的异常࿰…...
linux搭建hadoop环境
1、安装JDK (1)下载安装JDK:确保计算机联网之后命令行输入下面命令安装JDK sudo apt-get install sun-java8-jdk (2)配置计算机Java环境:打开/etc/profile,在文件最后输入下面…...
02 Maven创建及使用
maven作用 主要用作基于java平台的项目 maven能提供一种项目配置 maven能自动从maven的中央仓库帮我们自动下载并管路项目依赖的jar包 提供了标准的目录结构 中央仓库两种类型:共有的中央仓库:私有中央仓库 使用mvn -v查看是否安装成功 修改本地仓库的的位置 在setting…...
如何在 Rocky Linux 上检查磁盘空间?
在 Rocky Linux 上检查磁盘空间是系统管理和维护的重要任务之一。磁盘空间的监控和管理可以帮助我们及时发现和解决存储空间不足的问题,以确保系统的正常运行。本文将详细介绍在 Rocky Linux 上检查磁盘空间的方法。 方法 1:使用 df 命令 df 命令是 Li…...
【软考系统规划与管理师笔记】第2篇 信息技术知识1
目录 1 软件工程 1.1 软件需求分析与定义 1.2 软件设计、测试与维护 1.3 软件质量保证及质量评价 1.4 软件配置管理 1.5 软件过程管理 1.6 软件复用 2 面向对象系统分析与设计 2.1 面向对象设计的基本概念 2.2统一建模语言与可视化建模 3. 应用集成技术 3.1 数据库与…...
【无标题】ELISA-3(加装跟踪装置)—让群体协作更智能!
群体智能是近年来发展迅速的一个人工智能学科领域,通过对蚂蚁、蜜蜂等为代表的社会性昆虫群体行为的研究,实现分布式等智能行为。作为新一代人工智能的重要方向,群体智能通常用于无人机、机器人集群的协同作业。目前,群体智能在基…...
UE5-MCP终极教程:3步实现AI自动化游戏场景创作
UE5-MCP终极教程:3步实现AI自动化游戏场景创作 【免费下载链接】UE5-MCP MCP for Unreal Engine 5 项目地址: https://gitcode.com/gh_mirrors/ue/UE5-MCP 你是否曾梦想过用一句话就能创造出令人惊叹的游戏场景?UE5-MCP(Unreal Engine…...
用 DeepWiki 线索看 OpenClaw:它到底用到了哪些 AI 技术?
用 DeepWiki 线索看 OpenClaw:它到底用到了哪些 AI 技术? OpenClaw 近来在个人 AI 助手、Agent 框架和本地优先智能体领域里讨论度很高。很多人第一次看到它,会把它简单理解为“一个能接聊天渠道的大模型壳子”。但如果顺着 GitHub 文档以及项…...
CSS遮罩艺术:从基础阴影到高级毛玻璃特效实战
1. 从零开始理解CSS遮罩 遮罩效果在前端开发中就像给界面元素戴上了一层"面纱"。想象一下,当你需要突出某个弹窗内容时,背后的页面会变暗——这就是最常见的遮罩应用场景。我们先从最基础的实现方式说起。 基础遮罩的实现通常需要一个覆盖全…...
Qwen2.5-Coder-1.5B快速入门:5个步骤搭建你的私有代码生成服务
Qwen2.5-Coder-1.5B快速入门:5个步骤搭建你的私有代码生成服务 你是否经常需要编写重复性代码?或者面对复杂算法时卡壳?现在,你可以拥有一个私有的AI编程助手。本文将带你用最简单的方式,在本地部署Qwen2.5-Coder-1.5…...
Phi-4-mini-reasoning保姆级教学:Web服务健康检查失败的5类根因与对策
Phi-4-mini-reasoning保姆级教学:Web服务健康检查失败的5类根因与对策 1. 问题背景与模型介绍 Phi-4-mini-reasoning 是一款专注于推理任务的文本生成模型,特别擅长处理数学题、逻辑题、多步分析和简洁结论输出。与通用聊天模型不同,它采用…...
WebPlotDigitizer终极指南:从科研图表到结构化数据的完整解决方案
WebPlotDigitizer终极指南:从科研图表到结构化数据的完整解决方案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 在科研和…...
HP20x气压传感器Arduino驱动深度解析
1. Grove Barometer HP20x 高精度气压/温度/海拔传感器驱动深度解析1.1 项目定位与工程价值Grove Barometer HP20x 是 Seeed Studio 推出的基于 HP206C(或兼容型号 HP203B/HP202C)高精度气压传感芯片的模块化传感器。该驱动库并非简单封装,而…...
从设计到上线:基于快马平台开发一个具备完整功能的qclaw官网实战指南
从设计到上线:基于快马平台开发一个具备完整功能的qclaw官网实战指南 最近接手了一个qclaw官网的开发需求,需要从零开始构建一个具备完整功能的官方网站。经过调研,我选择了InsCode(快马)平台作为开发环境,因为它不仅提供了完整的…...
AD09 PCB设计核心技巧与实战经验
1. PCB设计基础与AD09平台概述作为一名从业超过十年的硬件工程师,我使用过从Protel 99到Altium Designer 21的各种版本,其中AD09(Altium Designer 2009)因其稳定性和适中的硬件要求,至今仍是许多工程师的首选工具。PCB…...
M24LR64E-R双接口NFC标签驱动与嵌入式集成指南
1. 项目概述NFC Tag M24LR6E 是一款面向嵌入式系统的 Arduino 兼容库,专为驱动 Seeed Studio 推出的 Grove - NFC Tag 模块而设计。该模块核心芯片为 STMicroelectronics 的 M24LR64E-R,是一款高度集成的双接口(IC RF)近场通信标…...
