通讯录管理系统(简易)

2023-11-08

/*****************************************************************

*
*****************************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *menu[]={"*******************************",\
			 "*** 1.添加一位通讯录成员。  ***",\
			 "*** 2.查询一位通讯录成员。  ***",\
			 "*** 3.删除一位通讯录成员。  ***",\
			 "*** 4.修改一位通讯录成员。  ***",\
			 "*** 5.显示所有通讯录成员。  ***",\
			 "*** 6.删除通讯录。          ***",\
			 "*** 0.退出通讯录。          ***",\
			 "*******************************"};


typedef  struct{
	char name[20];
	char tel[11];
}DataType;


typedef struct node{
    DataType data;
    struct node *next;
}LNode,*Linklist;
//定义结点


int CreatLinklist(Linklist *L)
{
    (*L)=(Linklist)malloc(sizeof(LNode));
    if((*L) == NULL)
    {
		printf("malloc error\n");
        return 0;
    }
    (*L)->next=NULL;
    return 1;
}
//创建空单链表

Linklist L;


void Destroy_Linklist(Linklist *H)     //注意传入的参数是头指针的地址,否则无法修改单链表的值(无法销毁单链表)。
{
    Linklist p,q;
    p=*H;
    while(p)
    {
        q=p;
        p=p->next;
        free(q);
    }
    *H=NULL;
}
//销毁单链表

int Lenth_Linklist(Linklist H)
{
    Linklist p=H;
    int count=-1;//存在头结点
    while(p)
    {
        p=p->next;
        count++;
    }
    return (count);
}
//求单链表的表长
int Check_Linklist_name(Linklist H,char *x)
{
	Linklist p=H->next;
	int i=1;
	while(p)
		{
			if(strcmp((p->data).name,x)==0)
				{
					break;
				}
			else
				{
					p=p->next;
					i++;
				}
		}
		if(p == NULL)
		{
			printf("未找到联系人!\n");
			return 0;
		}
		return i;	
}
//用姓名查询单链表

int Check_Linklist_tel(Linklist H,char *x)
{
	Linklist p=H->next;
	int i=1;
	while(p)
		{
			if(strcmp((p->data).tel,x)==0)
				{
					break;
				}
			else
				{
					p=p->next;
					i++;
				}
		}
		if(p == NULL)
		{
			printf("未找到联系人!\n");
			return 0;
		}
		return i;	
}
//用电话号码查询单链表

int Insert_Linklist(Linklist H,int i,char *ch,char *x)
{
	Linklist p,q;
	int j=1;
	if(H==NULL)
	{
		printf("菜单不存在!\n");
		return 0;
	}
	if(i<1||i>Lenth_Linklist(H)+1)
	{
		printf("插入位置错误!\n");
		return 0;
	}
	p=H;
	while(p!=NULL && j<i)
	{
		p=p->next;
		j++;
	}
	q=(Linklist)malloc(sizeof(LNode));
	if(q == NULL)
	{
		printf("分配空间出错!\n");
		return 0;
	}
	strcpy(q->data.name,ch);
	strcpy(q->data.tel,x);
	q->next=p->next;
	p->next=q;
	return 1;
}
//插入信息

int Delete_Linklist(Linklist H,int i)
{
	Linklist p,q;
	int j=1;
	if(H==NULL)
	{
		printf("链表不存在!\n");
		return 0;
	}
	if(i<1||i>Lenth_Linklist(H))
	{
		printf("选择位置错误!\n");
		return 0;
	}
	p=H;
	while(p!=NULL && j<i)
	{
		p=p->next;
		j++;
	}
	q=p->next;
	p->next=q->next;
	free(q);
	return 1;
}
//删除第i个结点


void printmenu()
{
	int i;
	for(i=0;i<9;i++)
	{
		printf("%s\n",*(menu+i));
	}
	printf("请选择你需要的功能:");
}

void choosenum();


void display()
{
	int i;
	Linklist p;
	p=L;
	system("clear");
	for(i=1;p->next!=NULL;i++)
	{
		p=p->next;
		printf("第%d位联系人信息如下:\n",i);
		printf("姓名:%s\n",p->data.name);
		printf("电话号码:%s\n\n",p->data.tel);
	}
	getchar();
	getchar();
	system("clear");
	printmenu();
	choosenum();
}//功能5


void fun1()
{	
	char name[20];
	char tel[11];
	system("clear");
	printf("请输入姓名:");
	scanf("%s",name);
	putchar('\n');
	printf("请输入电话:");
	scanf("%s",tel);
	Insert_Linklist(L,1,name,tel);
	system("clear");
	printmenu();
	choosenum();
}//功能1

void fun2()
{
	system("clear");
	char name[20];
	char tel[11];
	Linklist p;
	p=L;
	int i,j;
	printf("根据姓名查找请输入 1\n");
	printf("根据电话号码查询请输入 2\n");
	scanf("%d",&i);
	if(1 == i)
	{
		system("clear");
		printf("请输入姓名:");
		scanf("%s",name);
		j=Check_Linklist_name(L,name);
		for(i=0;i<j;i++)
			{
				p=p->next;
			}
		printf("姓名为:%s\n",p->data.name);
		printf("电话号码为:%s\n",p->data.tel);
		getchar();
		getchar();
		system("clear");
		printmenu();
		choosenum();
	}
	else if(2 == i)
	{
		system("clear");
		printf("请输入电话号码:");
		scanf("%s",tel);
		j=Check_Linklist_tel(L,tel);
		for(i=0;i<j;i++)
			{
				p=p->next;
			}
		printf("姓名为:%s\n",p->data.name);
		printf("电话号码为:%s\n",p->data.tel);
		getchar();
		getchar();
		system("clear");
		printmenu();
		choosenum();
	}
	else
	{
		printf("输入的选择错误!\n");
		system("clear");
		printmenu();
		choosenum();
	}
	
}//功能2

void fun3()
{	
	system("clear");
	char name[20];
	char tel[11];
	Linklist p;
	p=L;
	int i,j;
	printf("根据姓名删除请输入 1\n");
	printf("根据电话号码删除请输入 2\n");
	scanf("%d",&i);
	if(1 == i)
	{
		system("clear");
		printf("请输入姓名:");
		scanf("%s",name);
		j=Check_Linklist_name(L,name);
		Delete_Linklist(L,j);
		getchar();
		system("clear");
		printmenu();
		choosenum();
	}
	else if(2 == i)
	{
		system("clear");
		printf("请输入电话号码:");
		scanf("%s",tel);
		j=Check_Linklist_tel(L,tel);
		Delete_Linklist(L,j);
		getchar();
		system("clear");
		printmenu();
		choosenum();
	}
	else
	{
		printf("输入的选择错误!\n");
		system("clear");
		printmenu();
		choosenum();
	}
}//功能3

void fun4()
{
	int i,j;
	char name[20],newname[20];
	char tel[11],newtel[11];
	system("clear");
	printf("根据姓名修改信息请输入     1\n");
	printf("根据电话号码修改信息请输入 2\n");
	scanf("%d",&i);
	if(1 == i)
	{
		printf("请输入姓名:");
		scanf("%s",name);
		j=Check_Linklist_name(L,name);
		Delete_Linklist(L,j);
		printf("请输入新的姓名:");
		scanf("%s",newname);
		printf("请输入新的电话号码:");
		scanf("%s",newtel);
		Insert_Linklist(L,1,newname,newtel);
		getchar();
		system("clear");
		printmenu();
		choosenum();
	}
	else if(2 == i)
	{
		printf("请输入电话号码:");
		scanf("%s",tel);
		j=Check_Linklist_tel(L,tel);
		Delete_Linklist(L,j);
		printf("请输入新的姓名:");
		scanf("%s",newname);
		printf("请输入新的电话号码:");
		scanf("%s",newtel);
		Insert_Linklist(L,1,newname,newtel);
		getchar();
		system("clear");
		printmenu();
		choosenum();
		
	}
	else
	{
		printf("输入的选择错误!\n");
		system("clear");
		printmenu();
		choosenum();
		
	}
}//功能4	

void fun6()
{
	Destroy_Linklist(&L);
	system("clear");
	printf("删除成功\n");
	getchar();
	getchar();
	Linklist L;
	CreatLinklist(&L);
	system("clear");
	printmenu();	
	choosenum();
}//功能6



void choosenum()
{
	int i;
	scanf("%d",&i);
	switch(i){
		case 1: fun1(); break;
		case 2: fun2(); break;
		case 3: fun3(); break;
		case 4: fun4(); break;
		case 5: display(); break;
		case 6: fun6(); break;
		case 0: printf("thank\n"); exit(0); break;
		default: printf("请输入正确的功能选项\n");getchar();getchar();getchar(); system("clear");printmenu();choosenum();
	}
}



int main(int argc,char *argv[])
{
	CreatLinklist(&L);
	system("clear");
	printmenu();
	choosenum();
	return 0;
}

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通讯录管理系统(简易) 的相关文章

  • 数据列表组件 jqGrid 二次封装

    前段时间在jqgrid基础上 进行了二次封装 应用在公司新的开发平台上 相比以前效果更佳 开发更方便 减少代码50 共享下提供大家参考学习 先看效果 数据表格 树结构表格 多级表头 最多支持3级 用法
  • c++ set用法 入门必看 超详细

    1 set的作用 set就是集合的意思 集合的特点就是不会出现重复的内容 一般用来作查重或去重操作 举个场景 给出一个表 姓名 爱好 小明 打篮球 小刚 画画 小明 听音乐 问该表中出现了多少个人 学会了set 就可以很轻松地解决这个问题
  • python3收邮件_认真对待 Python3 收邮件

    前言 之前老是用Python发邮件 用起来挺方便的 但是一直没实现用Python收邮件 最近忙着笔试面试 但是又不能时刻打开浏览器 刷手机看看有没有新邮件 尤其是有没有关于面试 笔试通知的邮件 啊 所以写个脚本来做下定时任务 一旦有相关的主
  • 黑客爱用的 HOOK 技术大揭秘!

    黑客爱用的 HOOK 技术大揭秘 什么是 HOOK 技术 病毒木马为何惨遭杀软拦截 商业软件为何频遭免费破解 系统漏洞为何能被补丁修复 这一切的背后到底是人性的扭曲 还是道德的沦丧 敬请收看今天的专题文章 什么是 HOOK 技术 上面是开个
  • Ninja简介-Android10.0编译系统(九)

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • 【深度学习与计算机视觉】3、最优化与梯度下降

    三 最优化与梯度下降 上一节深度学习与计算机视觉系列 3 线性SVM与SoftMax分类器中提到两个对图像识别至关重要的概念 用于把原始像素信息映射到不同类别得分的得分函数 score function 用于评估参数W效果 评估该参数下每类
  • 超分辨率技术如何发展?这6篇ECCV 18论文带你一次尽览

    原作 Tetianka Martyniuk林鳞 编译自 Medium量子位 出品 公众号 QbitAI 还有什么能比国际顶会更能反映图像技术的最前沿进展 在这篇文章中 亲历了ECCV 2018的机器学习研究员Tetianka Martyni
  • Mac 修改默认 Python 环境

    Mac 环境中既有自带的 Python2 7 也有自己安装的 Python 3 5 1 默认想用 Python3 的环境 1 添加 Python3 的环境变量 vi bash profile Setting PATH for Python
  • 根节点左边POJ 1456 Supermarket根节点左边

    今天一直在学习根节点左边之类的问题 现在正好有机会和大家共享一下 心贪的目题 用并查集优化 取d左边近来的一点为根节点 include
  • 挂钩(HOOK)

    5 5 挂钩 HOOK 5 5 1 为什么引入挂钩 在Apache1 3版本中 对HTTP 请求的处理包括若干个固定阶段 比如地址转换阶段 身份确认阶段 身份认证阶段 权限确认阶段 MIME类型识别阶段等等 这也意味着Apache1 3 中
  • Qt Creator静态成员变量、全局变量、静态成员函数。

    静态成员变量 是一个全局区域的变量 不同 cpp文件间可以相互访问 记得包含 cpp对应的头文件 1 在mainwindow h中定义 public MainWindow QWidget parent nullptr MainWindow
  • 解决docker nginx无法查看日志的问题

    我们知道 Nginx的日志默认存放在 var log nginx access log var log nginx error log 但在使用nginx镜像构建的容器时 出现无法查看日志的问题 用cat命令后无反应 通过如下命令可以看到
  • android面试题-ActivityRecord TaskRecord和ProcessRecord之间的关系

    转自 http blog csdn net mwq384807683 article details 72529285 源码分析相关面试题 Volley源码分析 注解框架实现原理 okhttp3 0源码分析 onSaveInstanceSt
  • 数据分析之训练数据集处理

    在训练dbnet的时候 需要进行数据分析的一些方法来分割数据集 这里刚好整理一下 coding utf 8 用于解决编码问题 x strip strip 方法删除前导空格和尾随空格 with open as 方法 with open 1 t
  • 外向交货单发货过账BAPI:BAPI_OUT…

    前面说过 可以使用 WS DELIVERY UPDATE 进行外向交货单的发货过账 当然 这个可实现的很多 过账 冲销 删除都可以 但是这个不是bapi 是个函数 则会缺少bapi自带的那些校验 为了更安全 其实建议是使用 BAPI OUT
  • 创建Gravatar头像

    Gravatar Globally Recognized Avatar的缩写 是一项用于提供在全球范围内使用的头像服务 只要你在Gravatar的服务器上上传了你自己的头像 你便可以在其他任何支持Gravatar的博客 论坛等地方使用它 它
  • shared-service.ts

    shared service ts import Observable from rxjs Observable import Injectable from angular core import Subject from rxjs Su
  • npm link

    正文 npm link的用法 假如我们想自己开发一个依赖包 以便在多个项目中使用 一种可行的方法 也是npm给我们提供的标准做法 那就是我们独立开发好这个 依赖包 然后将它直接发布到 npm镜像站 上去 等以后想在其他项目中使用的时候 直接
  • 为什么说测试岗位是巨坑?10年测试人告诉你千万别上当

    每次都有人问我软件测试的前景是什么样的 每年也会有人很多人纷纷涌入测试的岗位上 希望自己能够进入阿里 华为等大厂 但是测试岗位真的那么吃香吗 今天我结合从零基础小白到测试开发的成长经历 来说下这个行业的发展前景 以及要入行的同学应该从哪个地
  • MinIO安装配置访问以及SpringBoot整合MinIO

    MinIO 1 MinIO安装 Minio 是个基于 Golang 编写的开源对象存储服务 存储非结构化数据 如 图片 视频 音乐等 官网地址 https min io 中文地址 http minio org cn 官网文档 中文 地址 h

随机推荐