C语言实现简单的电子通讯录

**制作一个电子通讯录,通过该通讯录能录入好友ID号、姓名(英文)、手
机号码,家庭住址,公司电话。**
原理:分成5个模块,将模块功能实现写入头文件中。主函数部分代码:
显示函数部分,在Markdown里对不齐,意思就这样,将就一下=。=
这里写图片描述
这里写图片描述

/*******************************************************************
需求:制作一个电子通讯录,通过该通讯录能录入好友ID号、姓名(英文)、手
机号码,家庭住址,公司电话。
模块:主界面:主要显示软件功能,A)添加好友信息 B)列表好友信息。(包含排序功能) C)搜索好友 D)删除好友A)用户输入INSERT命令后,让用户输入好友信息。添加成功或失败都需提示B)用户输入DISPLAY命令后,好友信息升序排列C)用户输入SEARCH命令后,让用户输入将要搜索好友姓名查询。如果未搜索到请友好提示。如果搜索到,显示处该好友信息D)用户输入DELETE命令后,让用户输入将要删除好友姓名删除,如果存在同名的多个好友,则列表出,所有同名的好友信息,让用户通过输入ID号删除提示用户删除成功。
**********************************************************************/
#include "head.h"int main ()
{int Function;int i = 0;char Name[N];int cho;PNode head_node = (PNode) malloc(sizeof(Node)/sizeof(char));if (NULL == head_node){return MALLOC_ERROR;}head_node->next = NULL;while (1){Interface_Display ();scanf ("%d", &Function);switch (Function)               // 功能选择{case 1:                     // 添加好友{Function = 0;Add_Friend (head_node, i++);int j;printf ("\t正在添加\n");printf ("\t请稍候");fflush (stdout);        // 强制刷新缓存,输出显示for (j = 0; j < 3; j++){sleep (1);          // Linux 使用sleep,参数为秒printf (".");fflush (stdout);    // 强制刷新缓存,输出显示}printf ("\n");printf ("\t添加成功!\n");printf ("\t返回主菜单请输入1:");scanf ("%d", &cho);if (1 == cho){break;}else{printf ("\t对不起!您的输入有误!请重新输入:");scanf ("%d", &cho);break;}break;}           case 2:                 // 显示好友信息{system ("clear");printf ("\t*********好友信息********\n");printf ("\n");Friend_Information (head_node);Function = 0;printf ("\t返回主菜单请输入1:");scanf ("%d", &cho);if (1 == cho){break;}else{printf ("\t对不起!您的输入有误!请重新输入:");scanf ("%d", &cho);break;}break;}case 3:                 // 查找好友{system ("clear");printf ("\t*************查找好友*************\n");printf ("\t请输入您要查找的好友姓名:");scanf  ("%s", Name);printf ("\n");int j;          printf ("\t正在查找\n");printf ("\t请稍候");fflush (stdout);        // 强制刷新缓存,输出显示for (j = 0; j < 3; j++){sleep (1);          // Linux 使用sleep,参数为秒printf (".");fflush (stdout);    // 强制刷新缓存,输出显示}printf ("\n");Search_Friend (head_node, Name);printf ("\t返回主菜单请输入1:");scanf ("%d", &cho);if (1 == cho){break;}else{printf ("\t对不起!您的输入有误!请重新输入:");scanf ("%d", &cho);break;}break;}case 4:                     //删除好友{system ("clear");printf ("\t*************删除好友*************\n");printf ("\t请输入要删除好友的姓名:");scanf  ("%s", Name);printf ("\n");Delete_Friend (head_node, Name);printf ("\t返回主菜单请输入1:");scanf ("%d", &cho);if (1 == cho){break;}else{printf ("\t对不起!您的输入有误!请重新输入:");scanf ("%d", &cho);break;}break;}   case 5:                     //退出通讯录{Function = 0;system ("clear");exit (0);}default:                    //输入有误{Function = 0;printf ("\t对不起!您的输入有误!请重新输入:");scanf ("%d", &Function);break;}           }       }   return 0;
}

head.h部分:

#ifndef HEAD_H_
#define HEAD_H_#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>             // sleep函数头文件#define uint unsigned int
#define OK            0
#define ERROR         -1
#define MALLOC_ERROR  -2
#define N             20 typedef int ElementType;
typedef struct node
{ElementType ID;             // ID号char Name [N];              // 姓名char Mobile_Phone [N];      // 手机号码char Home_Address [N];      // 家庭住址char Company_Tell [N];      // 公司电话struct node* next;          // 节点指针
}Node;
typedef Node* PNode;            //重命名节点指针类型//显示操作界面
int Interface_Display ();//添加好友信息 (尾插法)
int Add_Friend (PNode head, ElementType num);//显示所有好友信息
int Friend_Information (PNode head);//查找好友
int Search_Friend (PNode head, char* Name);//删除好友
void Delete_Friend (PNode head, char* Name);#endif

head.c的代码:

#include "head.h"//显示操作界面
int Interface_Display ()
{system ("clear");printf ("\t************************************** \n");printf ("\t~          欢迎使用通讯录               ~\n");printf ("\t~                                     ~\n");printf ("\t~      1 >>>>>>>> 添加好友信息          ~\n");printf ("\t~      2 >>>>>>>> 列表好友信息          ~\n");printf ("\t~      3 >>>>>>>> 搜索好友             ~\n");printf ("\t~      4 >>>>>>>> 删除好友             ~\n");printf ("\t~      5 >>>>>>>> 退出                ~\n");printf ("\t~                                     ~\n");printf ("\t~                                     ~\n");printf ("\t~                       作者:believe  ~\n");printf ("\t~*************************************~\n");printf ("                                         \n");printf ("                                         \n");printf ("\t请输入对应数字选择相应功能:");
}//添加好友信息 (尾插法)
int Add_Friend (PNode head, ElementType num)
{if (NULL == head){return ERROR;}//创建一个新的结点PNode p = (PNode) malloc(sizeof(Node)/sizeof(char));if (NULL == p){return MALLOC_ERROR;}//将新数据赋给新结点system("clear");    printf ("\t*************添加好友***************\n");p->ID = num;printf ("\t好友的ID为:%d\n", p->ID);printf ("\n");printf ("\t请输入好友的名字:");scanf  ("%s", p->Name);printf ("\n");printf ("\t请输入好友的手机号:");scanf  ("%s", p->Mobile_Phone);printf ("\n");printf ("\t请输入好友的家庭住址:");scanf  ("%s", p->Home_Address);printf ("\n");printf ("\t请输入好友的公司电话:");scanf  ("%s", p->Company_Tell);printf ("\n");p->next = NULL;//找到最后一个结点PNode Ptmp;                 //将头结点地址给临时指针PtmpPtmp = head;while (Ptmp->next){Ptmp = Ptmp->next;}Ptmp->next = p;return OK;
}//显示所有好友信息
int Friend_Information (PNode head)
{if (NULL == head){return ERROR;}PNode p = head->next;printf ("\tID\t姓名\t\t手机号\t\t住址\t\t\t公司电话\n");while (p){printf ("\t%d\t%s\t\t%s\t\t%s\t\t\t%s\n", p->ID,p->Name, p->Mobile_Phone, p->Home_Address, p->Company_Tell);p = p->next;}putchar('\n');return OK;
}//查找好友
int Search_Friend (PNode head, char* Name)      //通过名字查找好友
{PNode p = head;PNode q = NULL;if ((NULL != p) && NULL != (p->next)){while (p->next) {q = p->next;if ((NULL != q) && 0 == (strcmp(q->Name, Name))){printf ("\t好友信息: \n\tID:%d\n\t姓名: %s\n\t手机号码: %s\n\t家庭地址:%s\n\t公司电话: %s\n", q->ID, q->Name, q->Mobile_Phone, q->Home_Address, q->Company_Tell);}else{printf ("\t对不起,您的通讯录没有该好友!\n");}p = p->next;}}/*  另一种做法if (NULL == head){return ERROR;}PNode p;int flag = 1;for (p = head->next; p != NULL; p = p->next){if (0 == strcmp(p->Name, Name)){flag = 0;printf ("\t好友信息:\n\tID: %d\n\t姓名: %s\n\t手机号码: %s\n\t家庭地址: %s\n\t公司电话: %s\n", p->ID, p->Name, p->Mobile_Phone, p->Home_Address, p->Company_Tell);}}fi (flag){printf ("\t对不起,您的通讯录没有该好友!\n");}putchar('\n');*/return OK;
}//删除好友
void Delete_Friend (PNode head, char* Name)
{PNode p = head;PNode q = NULL;while (NULL != p && NULL != (p->next)){q = p->next;if (NULL != q && 0 == strcmp(q->Name, Name)){p->next = q->next;free(q);int j;printf ("\t正在删除\n");printf ("\t请稍候");fflush (stdout);            //强制刷新缓存,输出显示for (j = 0; j < 3; j++){sleep (1);              //linux使用sleep,参数为秒printf (".");fflush(stdout);         //强制刷新缓存,输出显示}printf ("\n");printf ("\t该好友已成功删除!\n");}else if (NULL == q->next && 0 != strcmp(q->Name, Name)){printf ("\t您的通讯录没有该好友!\n");}p = p->next;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结构体的传参理解成员的存储方式

结构体的成员变量在内存中存储的方式&#xff0c;决定于设定的内存对齐方式是几字节&#xff1a;gcc编译默认使用4字节对齐&#xff1a; 1 #include <stdio.h>2 3 typedef struct test_buf4 {5 int a;6 char c;7 char buf[8];8 char *str;9 10 }buf…

eclipse插件大全整理学习

Eclipse Web Tools Platform(WTP) 地址&#xff1a;http://download.eclipse.org/webtools/ WTP十分强大&#xff0c;支持HTML, JavaScript, XML, JSP&#xff0c;支持语法着色&#xff0c;代码提示&#xff0c;代码折叠等&#xff0c;以及其它一堆JavaEE相关的功能。Web开发必…

网友力荐教子名言 只有50句却能改变儿女一生

从当今的家庭来看&#xff0c;大多数的家长把自己的一切希望寄托在孩子的身上&#xff0c;这个〝望子成龙〞或〝盼女成凤〞的希望能否成为现实&#xff0c;需要多方面的努力&#xff0c;而家庭是孩子的第一所〝学校〞&#xff0c; 父母是孩子的第一位〝老师〞&#xff0c;家庭…

Python-02-基础知识

一、第一个Python程序 【第一步】新建一个hello.txt 【第二步】将后缀名txt改为py 【第三步】使用记事本编辑该文件 【第四步】在cmd中运行该文件 print("Hello World!") 强调&#xff1a;python解释器执行程序是解释执行&#xff0c;即打开文件读内容&#xff0c;因…

利用FS寄存器获取KERNEL32.DLL基址算法的证明(ZZ)

转自&#xff1a;http://blog.csdn.net/int2e/archive/2008/01/09/2032732.aspxFS寄存器指向当前活动线程的TEB结构&#xff08;线程结构&#xff09; 偏移 说明 000 指向SEH链指针 004 线程堆栈顶部 008 线程堆栈底部 00C SubSystemTib 010 FiberData 014 ArbitraryUse…

script 放置最佳位置以及 html 执行顺序

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 看到知乎上有很多讨论关于javascript位置的文章。所以特意留意了这方面的问题。 首先要了解到的是&#xff1a; html文件是自上而下的执…

【Arduino】使用C#实现Arduino与电脑进行串行通讯

在给Arduino编程的时候&#xff0c;因为没有调试工具&#xff0c;经常要通过使用串口通讯的方式调用Serial.print和Serial.println输出Arduino运行过程中的相关信息&#xff0c;然后在电脑上用Arduino IDE的Serial Monitor来查看print出来的信息。Serial Monitor不仅可以接受Ar…

node、npm、vue安装 -- VUE 项目 demo 实例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 安装node&#xff1a; sudo yum install epel-release sudo yum install nodejs node --version // 安装好后查看版本2. 安装 npm …

用C语言实现简单的停车场管理

这个程序是利用栈和循环队列实现的&#xff0c;自己得先处理好逻辑关系就好了。由于题目没有要求&#xff0c;这个程序就没加重复判断&#xff0c;比如一辆车已经停在车位上或者便道上&#xff0c;再来一辆就判断不了了。关于栈&#xff0c;就是先进后出的思想&#xff0c;队列…

Windows To Ghost系统封装之必备软件集 - 好压

好压压缩软件&#xff08;HaoZip&#xff09;是强大的压缩文件管理器&#xff0c;是完全免费的新一代压缩软件&#xff0c;相比其它压缩软件系统资源占用更少&#xff0c;有更好的兼容性&#xff0c;压缩率比较高。 它提供了对ZIP、7Z和TAR文件的完整支持&#xff0c;能解压RAR…

XSLT学习笔记

1. 样式声明&#xff1a;<xsl:stylesheet>或<xsl:transform> 2. XSLT常用元素&#xff1a; 2.1 <xsl:template>&#xff1a;创建模板 Match属性的作用是使模板和XML元素相关联 e.g.:<xsl:template match"\">......</xsl:template&g…

超详细设置 Idea 类注释模板和方法注释模板

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 网上找了一下&#xff0c;没有很详细且正确介绍Idea配置注释模板的&#xff0c;于是结合多篇文章自己琢磨整理出如下。 设置类注释模板…

水调歌头·中秋

转载于:https://www.cnblogs.com/divineka/archive/2004/09/04/39560.html

代码面试最常用的10大算法

摘要&#xff1a;面试也是一门学问&#xff0c;在面试之前做好充分的准备则是成功的必须条件&#xff0c;而程序员在代码面试时&#xff0c;常会遇到编写算法的相关问题&#xff0c;比如排序、二叉树遍历等等。 在程序员的职业生涯中&#xff0c;算法亦算是一门基础课程&#…

IDEA 2018 集成 MyBatis Generator 插件 详解、代码生成

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、修改maven的pom文件 只需要将如下依赖添加到pom.xml文件中即可。&#xff08;注意此处是以plugin的方式&#xff0c;放在<plugins…

MongoDB监控及报警

转载请注明出处&#xff1a;https://www.cnblogs.com/shining5/p/11142357.html MongoDB监控及报警 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库&#xff0c;其使用go语言开发。基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提…

浅谈三种特殊进程:孤儿进程,僵尸进程和守护进程

昨天学了进程控制&#xff0c;就这三种特殊的进程研究了一下&#xff0c;其中也借鉴了一些前人总计的经验。 1、孤儿进程 如果父进程先退出,子进程还没退出那么子进程将被 托孤给init进程,这里子进程的父进程就是init进程(1号进程).其实还是很好理解的。 // 父进程先子进程退…

设计师为什么要学编程,开发者为什么要学设计?

摘要&#xff1a;设计师和开发者目前正处于互联网的两端&#xff0c;看着彼此做不同的工作。如果他们能互相学习对方的技术&#xff0c;那么会协作得更好。 很多开发者认为&#xff0c;设计师应该学会如何编写代码&#xff0c;这一点是真的&#xff1a;通过学习&#xff0c;设计…

git 查看远程仓库地址

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 就一个命令&#xff1a; git remote -v 如下&#xff1a;

tensorflow之tf.train.exponential_decay()指数衰减法

exponential_decay(learning_rate, global_steps, decay_steps, decay_rate, staircaseFalse, nameNone) 使用方式&#xff1a; tf.tf.train.exponential_decay() 例子&#xff1a; tf.train.exponential_decay(self.config.e_lr, self.e_global_steps&#xff0c;self.config…