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

基于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.mrgr.cn/news/35043.html

相关文章:

  • C#版使用融合通信API发送手机短信息
  • 数字化转型的路径、挑战和应用场景
  • 2023年MathorCup数学建模B题城市轨道交通列车时刻表优化问题解题全过程文档加程序
  • Kafka参数了解
  • 线性代数(第四章:方程组)
  • 会议直击|美格智能受邀出席第三届无锡智能网联汽车生态大会,共筑汽车产业新质生产力
  • Java之路--搞定数据类型及运算符已如探囊取物
  • golang学习笔记11-模块化与包管理【重要】
  • 32岁前端干了8年,是继续做前端开发,还是转其它工作_ui设计师转开发
  • pwd 命令:显示当前工作目录
  • 嵌入式工程师需要拥有哪些能力?
  • 第二讲 数据结构
  • 百度C++一面-面经总结
  • 制药污水处理设备流程说明介绍
  • 2024年最强网络安全学习路线,详细到直接上清华的教材!
  • 【Linux 报错】“userdel: user xxxx is currently used by process xxx”
  • 基类和派生类的赋值对象转换、派生类与基类成员的函数隐藏、派生类中的默认成员函数、继承与友元、继承与静态成员函数、菱形继承、菱形虚拟继承等的介绍
  • Java:Object操作
  • Linux Shell: 使用 Expect 自动化 SCP 和 SSH 连接的 Shell 脚本详解
  • 软件安全测评的必要性,安全测评有必要找第三方软件检测机构吗?
  • ECharts的特点
  • JMeter与大模型融合应用之JMeter菜单栏中切入大模型交互详解
  • 什么软件可以同声传译?5款高效沟通的翻译软件速速收藏
  • 低场核磁共振成像系统MRI的成像优势特点
  • 车辆合格证识别接口-汽车管理智能化-python示例
  • 外包功能测试干了4年,技术退步太明显了。。。。。