基于C语言开发(控制台)通讯录管理程序

通讯录程序设计

一、课程设计题目与要求

题目 :通讯录管理程序

1. 问题描述

编写一个简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。

2. 基本要求

程序应提供的基本基本管理功能有:

  • 添加:即增加一个人的记录到通信录中
  • 显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。
  • 存储:即将通讯录信息保存在一个文件中。
  • 装入:即将文件中的信息读入程序。
  • 查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。
  • 修改:可修改一个人的除姓名外其它信息。

3. 测试数据

程序应输入不少于 10 个人员的通讯录信息,应考虑到人员可以同名的情况。

4. 实现提示

程序可用一个结构体数组、单向链表或对象数组来管理人员信息,每个人员的姓名,地址,电话号码和邮政编码用一个结构体或类实现。

5.设计要求

一个功能选择主菜单;实现 6 个基本功能;

二、总体设计

总体功能框架

数据结构概要设计

定义一个结构数组来装姓名、地址、生日、手机、邮编、邮箱。

三、详细设计

数据结构详细设计

结构数组设计

typedef struct contact  //定义一个结构体来存放通讯录中的人员信息
{char name[NAME_MAX];char address[ADDR_MAX];char tel[TEL_MAX];char mail[MAIL_MAX];
} contact;
typedef struct people
{contact student[SIZE];int count;
} people, *pcon;

系统功能详细设计

函数原型

函数功能
void init(pcon p)//初始化通讯录
int search(pcon p)//因为后边几个函数中都用姓名查找一个联系人,所以单独写一个查找函数方便使用
void add_people(pcon p)//录入联系人信息
void find_people(pcon p)//查找一个联系人,并输出他的所有信息
void delete_people(pcon p)//删除某联系人信息
void change_people(pcon p)//修改联系人信息
void show_people(pcon p)//显示所有联系人信息
void filesave(pcon p)//将添加的联系人保存至文件里
void read_from_file(pcon p)   //从文件中读取联系人信息

函数形参说明

struct Contacts recode[]表示用于存放通讯录的个人信息

函数算法流程图

四、运行结果

【图 1:程序功能主菜单】

【图 2:添加联系人信息】

【图 3:添加联系人信息】

【图 4:显示联系人信息】

【图 5:查找联系人信息】

【图 6:修改联系人信息】

【图 7:删除联系人信息】

【图 8:退出通讯录】

五、课程设计总结

编程中的问题及解决方法

  • 删除数据无法操作经过反复尝试是因为文件打开路径没有用双反斜杆。
  • fseek 是用来设置文件指针 stream 的位置的函数
  • feof 是文件流指针,不到结尾返回 0,否则返回 1,判断一个状态的函数 FILE*fp=fopen,打开成功才能调用这个函数。

小结

结构体和共同体

  • 结构体变量所占内存长度是各成员占的内存长度的总和。共同体变量所占内存长度是各最长的成员占的内存长度。
  • 如果程序的规模较大,往往将对结构体类型的声明集中放到一个头文件中(以.h为后缀名)。哪个源文件需要用到此类的结构体只要包含该头文件即可。

文件操作

  • 文件操作都是由库函数来完成的,
  • 文件打开函数 fopen
    fopen 函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为 FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。例如:
  • FILE *fp;
    fp=(“file a”,“r”);
    其意义是在当前目录下打开文件 file a,只允许进行“读”操作,并使 fp 指向该文件。
  • fclose 函数
    调用的一般形式是: fclose(文件指针); 例如:
    fclose(fp);正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。文件的读写对文件的读和写是最常用的文件操作。

在编码过程中发现自己在结构体和文件操作这方面的运用还很不熟练,所以乘机会复习了教材第十二章和第十三章的相关内容,受益匪浅。

心得体会

通过这次实验,我认识到了指针的重要性,以后要多加强对指针这方面的理解认识,多加练习,为以后的学习打好基础,也体会到了团队分工合作共同完成一项任务的成就感。

程序设计方法

分析需求,分块设计函数,一一实现。

六、参考文献

  • 苏小红. C 语言程序设计[M]. 高等教育出版社: 高等教育出版社, 2013.
  • [美], Brian, W, Kernighan(布莱恩·克尼汉), [美], Dennis, M, Ritchie(丹尼斯·里奇). 计算机科学丛书:C 程序设计语言(第 2 版·新版)[M]. 机械工业出版社:机械工业出版社, 2004. 250-489

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544370.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

豆包 MarsCode 代码练习体验

我最近体验了豆包MarsCode的代码练习,感觉非常棒!首先,进入平台后,界面简洁明了,使用起来非常方便。选择内置题目时,题目类型丰富多样,涵盖了基础知识和一些进阶挑战,非常适合不同水…

【Kubernetes知识点】解读HPA的 thrashing(抖动)问题

【Kubernetes知识点】解读HPA的 thrashing(抖动)问题 目录 1 概念 1.1 什么是 Thrashing 现象?1.2 HPA 中 Thrashing 产生的原因1.3 解决 Thrashing 的优化措施 1.3.1 设置合适的阈值1.3.2 使用自定义指标和基于负载的自动扩缩1.3.3 增加扩…

探寻大模型时代智慧农业新未来,商汤与上海市农委达成战略合作

近日,在中国农民丰收节上海会场丰收庆典活动上,商汤科技与上海市农业农村委员会(下称:上海市农委)签署战略合作协议,双方将依托先进的AI大模型技术,共同推进上海智慧农业发展,打造国…

基向量和投影矩阵

文章目录 1. 投影向量2. 基向量,列向量秩1分解3. SVD,奇异向量秩1分解4. 小结:5. 图解分析 1. 投影向量 假设我们有一个向量b和一个向量q,求向量b在向量q上的投影向量p: 求向量p的长度: q T b ∣ q ∣ ⋅ ∣ b ∣ ⋅ cos ⁡ …

UNet 眼底血管分割实战教程

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 💫 欢迎来到我的学习笔记! 在医学影像分析领域,准确地分割眼底血管对于眼科疾病的诊断和治疗至关重要。…

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …

关于yolov5训练需要更改的参数汇总

首先我给大家展示一下项目目录 第一步我们需要修改data文件夹下的voc.yaml文件,这里我复制了一份改名为hat.yaml 需要修改第21,22行的路径,train是图片的训练集,val是图片训练的验证集,nc是标签的数量,name…

解决银河麒麟桌面操作系统V10SP1 SSH连接“connection reset by ip地址 port 22”问题

解决银河麒麟桌面操作系统V10SP1 SSH连接“connection reset by ip地址 port 22”问题 💖The Begin💖点点关注,收藏不迷路💖 遇到SSH连接银河麒麟V10SP1时“connection reset by ip地址 port 22”的错误,可以尝试以下步…

深入浅出热门AI大模型,新手到专家的必备指南《实战AI大模型》

今天,人工智能技术的快速发展和广泛应用已经引起了大众的关注和兴趣,它不仅成为技术发展的核心驱动力,更是推动着社会生活的全方位变革。特别是作为AI重要分支的深度学习,通过不断刷新的表现力已引领并定义了一场科技革命。大型深…

矿区车辆4G视频监控解决方案

一、背景介绍 随着科技的发展和矿山产业的不断进步,矿区的安全问题越来越受到关注。尤其是矿区车辆的运行安全,更是重中之重。为了更好地对矿区车辆进行监控和管理,提高运行安全性,4G视频监控解决方案应运而生。 二、需求分析 1…

Nmap网络扫描器基础功能介绍

怎么快速知道网络中存在哪些设备呢?我们可以借用扫描工具Nmap来实现这个功能。 下载 Windows系统可以前往Nmap官网下载安装包。 Linux使用对应的包管理器可以直接安装,命令如下 # Debian/Ubuntu apt install nmap# RedHat/Fedora yum install nmap …

全西安前十的数字媒体产业链都在这

在古城西安,有一处汇聚着创新与活力的地方,那便是西安国际数字影像产业园。这里,承载着西安数字媒体产业的未来与希望,成为了数字媒体产业链的闪耀聚集地。 西安国际数字影像产业园以其独特的魅力和优势,吸引了众多数字…

Go语言基础学习01-Liunx下Go开发环境配置;源码组织方式;go build/install/get详解

目录 Linux环境下配置安装VScode并配置Go语言开发环境Go语言源码的组织方式Go语言源码安装后的结果Go程序构建和安装的过程go build扩展go get 命令详解 之前学习过Go语言,学习的时候没有记录笔记,最近找了个极客时间的Go语言36讲,打算时间学…

004_动手实现MLP(pytorch)

import torch from torch import nn from torch.nn import init import numpy as np import sys import d2lzh_pytorch as d2l # 1.数据预处理 mnist_train torchvision.datasets.FashionMNIST(root/Users/w/PycharmProjects/DeepLearning_with_LiMu/datasets/FashionMnist, t…

二刷LeetCode:“51.N皇后 37.解数独”题解心得(简单易懂)

引言(初遇噩梦,再遇坦然) 在阅读本文之前,建议大家已经接触过回溯算法,并完成回溯相关题目,例如:子集问题、组合问题、排列问题。 子集:子集II、子集 组合:组合、组合总和…

多比特AI事业部VP程伟光受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 武汉市多比特信息科技有限公司AI事业部VP程伟光先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾,演讲议题为“AI对于项目经理工作的影响和变化解析”。大会将于10月26-27日在北京举办&am…

Scanner流程控制语句

1. Scanner类 Scanner的意思是扫描 Scanner是JDK提供的一个类,位于java.util包下,所以我们如果需要使用则必须导包,导包的语句必须在声明包之后,在声明类之前 Scanner类是用来接受用户输入的各种信息 Scanner类提供了用于接受…

SpringBoot开发——整合Hutool工具类轻松生成验证码

文章目录 1、Hutool简介2、验证码效果展示2.1 扭曲干扰验证码2.2 线条干扰验证码2.3 圆圈干扰验证码3、验证码应用场景3.1. 用户注册与身份验证3.2. 支付验证3.3. 订单与物流通知3.4. 信息安全与隐私保护3.5. 通知与提醒3.6. 其他应用场景4、Hutool工具类实现验证码生成4.1 引入…

学习threejs,绘制任意字体模型

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言二、🍀绘制任意字体模型…

Python邮件发送附件:怎么配置SMTP服务器?

Python邮件发送附件如何实现?Python发送带附件邮件? 在自动化和脚本编写中,使用Python发送带有附件的邮件是一个非常实用的功能。AokSend将详细介绍如何配置SMTP服务器,以便在Python中实现邮件发送附件的功能。 Python邮件发送附…