Linux c 通讯录(可保存至文件)

通讯录排序(按首字母顺序) 效果: 1.使用 //模拟数据 -(void)loadData {     NSArray *dataArr = @[                      @"比昂",@"阿狸",@"阿三",@"小明",@"张三",@"秋秋",@"波比",@"苏三",@"馒头",@"彩笔",@"咪咪",@"蔡芯",@"成龙",@"陈鑫",@"陈丹",@"成名",@"阿 阅读详情

功能:

1 添加信息 2 查找信息 3 查看信息 4 修改信息 5删除信息 6清空信息 7保存至文件及 从文件中读取。。。

main函数文件

#include "adress.h"
#include <stdio.h>
#include <stdlib.h>

void print(ElemType e)
{
	printf(" num:%d \n",e);
}
void print2(char *a)
{
	printf("name :%s ",a);
}
int Equal(char *e1,char *e2 )
{
	return (strcmp(e1,e1) == 0)? TURE : FALSE;
}
int main()
{
    int choose,ret;
	Sad *m;
	LinkInit(&m);
	
	ret = openold(m);
	if(ret == FAILURE)
	{
		printf("read failure!\n");
	}
	if(ret == SUCCESS)
	{
		printf("read success!\n");
	}
	

    welcome(); 
    while (1)
    {
        menu();
        scanf("%d",&choose);
        switch(choose)
        {
            case 1:ret = function();
				if (ret == SUCCESS)
				{
					printf(" Init success!\n");
				}
				else
				{
					printf(" Init failure!\n");
				}
			
                   break;
            case 2:ret = add(m);
				if(ret == SUCCESS)
				{
					printf("Insert success!\n");
				}
				else 
				{
					printf("Insert failure!\n");
				}
                   break;
            case 3:ret = addressTraver(m,print,print2);
				if(ret == SUCCESS)
				{
					printf(" Traver success!\n");
				}
				else
				{
					printf(" Traver failure!\n");
				}
                
                   break;
            case 4:ret = LocatElem(m);
				if(ret == SUCCESS)
				{
				printf(" LocatElem success!\n");
				}
				else
				{
					printf(" LocatElem failure!\n");
				}
                
                   break;
            case 5:ret = change(m,Equal);
				if(ret == SUCCESS)
				{
					printf(" Change success!\n");
				}
				else
				{
					printf(" Change failure!\n");
				}
                 
                   break;
            case 6:ret = delete(m);
				if(ret == SUCCESS)
				{
					printf(" Delete success!\n");
				}
				else
				{
					printf(" Delete failure!\n");
				}
                   break;
            case 7:ret = rever(m);
				if(ret == SUCCESS)
				{
					printf(" rever success!\n");
				}
				else
				{
					printf(" rever failure!\n");
				}
					break;
            case 8:ret = clear(m);
				if(ret == SUCCESS)
				{
					printf(" Clear success!\n");
				}
				else
				{
					printf(" Clear failure!\n");
				}
                   break;
			case 9:ret = destory(&m);
				if(ret == SUCCESS)
				{
					printf(" Destory success!\n");
				}
				else
				{
					printf(" Destory failure!\n");
				}
					break;
			case 10 : ret = save(m);
				if(ret == SUCCESS)
				{
					printf("Save success!\n");
				}
				else
				{
					printf("Save faiure!\n");
				}
					sleep(1);
					exit(1);
					break;
        }
 
    }
	return 0;
    
}

 函数文件

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

void menu()// 主界面
{
    printf("*************welcome to use********\n");    
    printf("**1 功能简介           2 添加信息**\n");
	printf("**3 查看信息           4 查找信息**\n");
	printf("**5 修改信息           6 删除信息**\n");
	printf("**7 反转信息           8 清空信息**\n");
	printf("**9 毁坏信息           10  退出  **\n");
	printf("*************************************\n");
}
function()
{
    printf("!!!!!!!!想多了!!!!!!! \n");
}
void welcome()//欢迎
{

    system("clear");
    printf("\n\n\n\n\n\n\n\n\n\n\n************************************************\n");
    printf("********************WELCOME*********************\n");
    printf("***************老式山寨诺基亚版*****************\n");
    sleep(1);  
}
int LinkInit(Sad **l)// 初始化
{
    *l = (Sad *)malloc(sizeof(Sad)*1);
    if(NULL == *l)
    {
        return FAILURE;
    }
    (*l)->next = NULL;
    return SUCCESS;
}

int add(Sad *l)// 添加信息
{
	if(NULL == l)
	{
		return FAILURE;
	}
	Sad *q = l;
	while(q)
	{
		Sad *p = (Sad *)malloc (sizeof (Sad)*1);
		printf("please input name:\n");
		scanf("%s",p->name);
		if(strcmp(p->name,"fine") == 0)
            break;
		printf("please input the num:\n");
		scanf("%d",&p->num);
		p->next = q->next;
		q->next = p;
		q = q->next;
	}
	
	
	char *a;                                //冒泡
	a = (char *)malloc(sizeof(char)*20);
	int x = 0;
	Sad *s = l;
	Sad *k = l;
	for(s = l;s != NULL;s=s->next)
	{
		for(k = s->next; k != NULL;k = k->next)
		{
			if(strcmp(s->name,k->name) > 0)
			{
				
				strcpy(a,k->name);
				strcpy(k->name,s->name);
				strcpy(s->name,a);
				x = k -> num;
				k-> num = s->num;
				s->num = x;
			}

		}

		
	}
				
	return SUCCESS;

	
	
	/*Sad *q = l->next;                //插入
	Sad *f = l;
	while(1)
	{
		Sad *p = (Sad *)malloc (sizeof (Sad) * 1);
		printf("please input name:\n");
		scanf("%s",p->name);
		if(strcmp(p->name,"fine") == 0)
		{   
			free(p);
			break;
		}
		printf("please input the num:\n");
		scanf("%d",&p->num);
	
		while(f)
		{
			printf("************\n");
			if(strcmp(p->name,q->name) < 0)
			{
				printf("************\n");
				p->next = f->next;
				f->next = p;
			}
			printf("************\n");
			q = q->next;
			f = f->next;
			
		}
		
			if(strcmp(p->name,q->name) > 0)
			{
					q->next = p;
					p->next = NULL;
			}
		
		
	}*/

}
int addressTraver(Sad *l, void (*p)(ElemType),void (*pp)(char *))//遍历
{
	if (NULL == l)
	{
		return FAILURE;
	}	
	Sad *q = l;
	while (q->next)
	{
		q = q -> next;
		pp(q->name);
		p(q->num);
	}
	return SUCCESS;
}
int LocatElem(Sad *l) //寻找信息
{
	if(NULL == l)
	{
		return FAILURE;
	}
	char lookname[20] = {0};
	printf("please input the name to lookfor:\n");
	scanf("%s",lookname);
	Sad *q = l->next;
	while (q)
	{
		if (strcmp(lookname,q->name) == 0)
		{
			printf("name:%s\n",q->name);
			printf("num:%d\n",q->num);
			return SUCCESS;
			break;
		}
		q = q->next;
		
	}
	return FAILURE;
	
}
int change ( Sad *l,int (*p)(char*,char*))//更改信息
{
	if(NULL == l)
	{
		return FAILURE;
	}
	char changename[20] = {0};
	Sad *q = l->next;
	printf("please input the name to change:\n");
	scanf ("%s",changename);
	while(q)
	{
		if (p(changename,q->name) == TURE)
		//if (strcmp(changename,q->name) == 0)
		{
			int b;
			printf("1 change name  2 change num \n");
			scanf ("%d",&b);
			if(b == 1)
			{
				printf("input the name you want to change:\n");
				scanf ("%s",q->name);
				return SUCCESS;
				break;

			}
			else if(b == 2)
			{
				printf("input the new num:\n");
				scanf("%d",&q->num);
				return SUCCESS;
				break;
			}
		}
		else
		{
			q = q->next;
		}
	}
	if (q == NULL)
	{
		printf("There are not the name!\n");
		return FAILURE;
	}
}
int delete (Sad *l)//通过搜索名字进行删除
{
	if(NULL == l)
	{
		return FAILURE;
	}
	char deletename[20] = {0};
	printf("please input the name to delete:\n");
	scanf("%s",deletename);
	Sad *q = l->next;
	while(q)
	{
		if (strcmp (deletename,q->name) == 0)
		{
			Sad *n = q;
			int e;
			e = n->num;
			q->next = n->next;
			free(n);
			printf("Delete %d success!\n",e);
			return SUCCESS;
			break;
		}
		else
		{
			q = q->next;
		}
	}
	if(q == NULL)
	{
		printf("There are not the name!\n");
		return FAILURE;
	}
}
int rever(Sad *l)//实现排名反转
{
	if (NULL == l)
	{
		return FAILURE;
	}
	Sad *p = l->next;
	l->next = NULL;
	while (p != NULL)
	{
		Sad *q = p;
		p = p->next;
		q->next = l->next;
		l->next = q;
	}
	return SUCCESS;
}
int clear(Sad *l) //清除信息
{
	if(NULL == l)
	{
		return FAILURE;
	}
	Sad *p = l->next;
	while(p)
	{
		l->next = p->next;
		free(p);
		p = p->next;
	}
	return SUCCESS;	
}
int destory(Sad **l) //毁坏
{
	if(NULL == *l)
	{
		return FAILURE;
	}
	free (*l);
	*l = NULL;
	return SUCCESS;
}
int save(Sad *l)
{
	
	int i;
	FILE *pf = fopen("address.txt","w+");
	if(pf == NULL)
	{
		perror("fopen");
		exit(1);
	}
	Sad *p = l;
	while(p->next)
	{
		p = p->next;
		fwrite(p,sizeof(*p),1,pf);
	}
	fseek(pf,0,SEEK_SET);
	close(pf);
	
	return SUCCESS;
}

int openold(Sad *l)
{
	if(NULL == l)
	{
		return FAILURE;
	}
	Sad *q = l;
	if( q == NULL)
	{
		return FAILURE;
	}
	int fd;
	FILE *pf = fopen("address.txt","r");
	if(NULL == pf)
	{
		perror("fopen");
		exit(1);
	}
	int ret;
	while(1)
	{
		Sad *p = (Sad *)malloc(sizeof(Sad));
		ret = fread(p,sizeof(*p),1,pf);
		if (-1 == ret)
		{
			perror("fread");
			exit(1);
		}
		if(ret == 0)
		{
			break;
		}
		p->next = q->next;
		q->next = p;
		q = q->next;
		
	}
	ftruncate(pf,0);//清空文件内容(可加可不加)
	fseek(pf,0,SEEK_SET);
	close(pf);
	return SUCCESS;
}
		
		

 头文件:

#ifndef _ADRESS_H
#define _ADRESS_H
#define SUCCESS 10000
#define FAILURE 10001
#define  TURE   10003
#define FALSE   10004

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

struct adress
{
	char name[20];
	int num;
	struct adress *next;
};
typedef struct adress Sad;
typedef int ElemType;

int LinkInit(Sad **l);
void welcome ();
void menu();
int add(Sad *l);
int addressTraver(Sad *l, void (*p)(ElemType),void (*pp)(char *));
int LocatElem(Sad *l);
int change ( Sad *l,int (*p)(char*,char*));
int delete (Sad *l);
int rever(Sad *l);
int clear(Sad *l);
int destory(Sad **l);

#endif

 

linux编写的一个简单的通讯录 立即下载

相关推荐

C语言实现带文件操作的通讯录

Linux c 环境下实现的一个简单通讯录,添加,删除,查找,遍历,清空,写入到文件,重文件当中读等操作。并且使用makefile编程

linux c 单链表通讯录(排序)

头文件: #ifndef _ADRESS_H #define _ADRESS_H #define SUCCESS 10000 #define FAILURE 10001 #define TURE 10003 #define FALSE 10004 struct adress { char name[20]; int num; struct adress *next; }; t...

chenxinntu的博客 598

linux编写的通讯录

linux编写的通讯录,大家共享一下,希望共同交流

Linux命令大全,从A到Z都有总结,封神之作!

本文为Linux命令大全,从A到Z都有总结,建议大家收藏以便查用,或者查漏补缺! A 命令 描述 access 用于检查调用程序是否可以访问指定的文件,用于检查文件是否存在 accton 用于打开或关闭记帐进程或更改信息进程记帐文件 aclocal 用于从configure.in文件自动生成aclocal.m4文件 acpi 用于显示电池状态和其他 ACPI 信息 acpi_available 测试 ACPI(高级配置和电源接口)子系统是否可用 acpid 提供智能电源管

网络技术联盟站 651

Linux通讯录资源

本文档内部是 Linux通讯录代码讲解和截图,内容简单详细

linux c写的通讯录代码

linux c写的通讯录代码

通讯录(单链表的操作方法)

发现大部分的文章对于链表的基本方法讲述很模糊,今天我为大家根据这个“通讯录”仔细讲解一下链表的的操作。 第一步:定义头文件 #include<stdio.h> #include<stdlib.h> #include<io.h> #include<windows.h> //清屏操作 #include<malloc.h> //动态分配内存 第二步:定义结构体指针变量 typedef struct N

weixin_63032791的博客 3747

scDeepCluster_pytorch代码解读与文章理解

论文:Clustering single-cell RNA-seq data with a。

qq_34179307的博客 915

单链表的排序+手机通讯录源码

(程序都是针对有头结点的链表进行排序) 1.插入排序     需要用两个指针对链表进行遍历,一个指针用于标记待插入的节点(外循环),另一个指针用于寻找插入位置(内循环)。因为需要进行节点的删除与插入,因此对用于遍历的两个指针,还需要再添加两个前驱指针。 Node *InsertSortList( Node *L ) {   Node *p1, *p2, *temp, *p

qcz_nuist的博客 580

从0到1搭建StarRocks3.4.1存算一体架构(VM 虚拟机版)

本文详细介绍了如何在VM虚拟机上从零搭建StarRocks 3.4.1存算一体架构。首先阐述了StarRocks作为高性能分布式SQL数据仓库的优势,重点讲解了其存算一体架构的设计原理。随后提供完整的安装指南,包括环境准备(3台CentOS 8虚拟机配置)、网络互通验证、Java环境配置、软件包解压安装等关键步骤。文章特别详细说明了FE和BE节点的配置文件修改(fe.conf和be.conf)以及必要的防火墙端口开放配置。通过图文并茂的方式,帮助开发者和运维人员快速掌握StarRocks集群部署方法,为后续

小 tom的博客 1329

01_MySQL下载、安装与配置(以MySQL8.0.31版本为例)

1.点击下载好的mysql安装包 进入到mysql installer界面。2.选择MySQL Servers选项 一直下拉。

4818

在Linux系统中用c语言创建通讯录

** 嵌入式系统开发 ** 在Linux系统中用c语言创建通讯录,按名字排序,综合操作,及时保存创建完之后的通讯录内容,打开,删除,退出。 第一步,下载并安装VMware Workstation Pro,然后安装Linux虚拟机,然后在Lunux系统中装好相应的固件; 第二步,按住Ctrl+Alt+T进入命令行,输入vim+filename.c,创建文本文件,进入之后开始进行写代码,代码如下: #include <stdio.h> #include <malloc.h> //得到指

weixin_46165286的博客 1290

基于CNN对抗嵌入的图像隐写——CNN-Based Adversarial Embedding for Image Steganography

CNN-Based Adversarial Embedding for Image Steganography https://ieeexplore.ieee.org/abstract/document/8603808 这篇论文发表在TIFS( IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY),TIFS是网络与信息安全领域的国际两大顶级期刊之一,中国计算机学会(CCF)推荐的A类期刊,SCI一区TOP期刊,目前影响因子有7多了。 1 概

weixin_48654804的博客 2279

Linux学习笔记2:实现通讯录

需要注意的点为使用了指向指针的指针(**ppeople)接收了指向联系人链表头部指针的指针,这是因为在LIST_INSERT 中会涉及头部指针变量本身的赋值操作,使用 *ppeople 即可对指针变量原本的内容进行修改。如果 item 不是链表头部节点,则将它的前向节点的 next 指针指向 item 的后向节点,从而跳过 item这个节点;搜索联系人,对链表进行遍历,每次循环调用 strcmp 对传入的联系人姓名和当前链表节点存储的联系人姓名进行比较,如果相等返回0,表示找到了对应的存储节点。

hfhfhz的博客 612

【以太网硬件十二】以太网端口自协商过程解密之二

简述以太网端口自协商的过程

highman110的博客 2488

2. Android_逆向的历史与发展

学完本节,希望你能够:了解 Android 逆向工程的发展历程,从早期 APK 破解到现代应用保护;入门先把这几类「在干啥」搞清楚,后面学脱壳、反反调试会顺很多。(反编译 APK 得到的类汇编代码,相当于程序的「菜谱」)就能绕过验证,到后来混淆、加固、反调试一起上,逆向难度越来越高。(第三节 什么是 CPU 指令集),帮你搞清楚「反汇编看到的那些指令」是从哪来的、和 Android 逆向有啥关系。有必要——先搞清「没加固时怎么玩」,再学脱壳和对抗,思路才顺。读起来费劲,但逻辑还在,耐心一点还能跟。

长沙火山 1390

【C语言】通讯录管理系统

本文主要是写了一个简易版的通讯录管理系统

福州最帅男模的博客 838

CATIA V6二次开发——如何利用CaptureToFile截屏

CaptureToFile 今天给大家分享一个很有趣的功能,如何利用CATIA自带的功能输出模型展示图? 先上方法: 方法本身并不难,只需要赋予格式及输出路径即可完成该功能。结果如下: 看到这样一张图片不禁让我陷入了沉思,怎么会这么丑???? 那么如何让这个简单的功能变得有趣,图片变得好看点呢? 第一步:背景换色 第二步:隐藏结构树 ...

WorkMan的博客 2982

Linux入门项目2:通讯录实现

当item指向一个person,想删除该person,在这里不直接删除,而是就让他前一个person直接指向后一个person,把它跳过,那么就能实现消失。链表的操作+文件的操作(读/写)+对数据格式的解包和打包+对链表操作需要有接口层(添加、删除、查找、遍历)(后续不用链表存,比如用红黑树等等,通过接口不用修改上层)+业务逻辑(用户输入用户名和电话,再插入到链表)在链表中添加一个节点item进去,item的next指向第一个person,再指回节点,people指向item。链表的头加入一个节点进去。

m0_69946848的博客 315

VTK-9.5.0 1D2D3DWidget实现灰度图+深度图+3D点云显示(可轻松集成到自己的项目)

VTK1D2D3DWidget是一个基于Qt和VTK开发的3D点云可视化工具,支持RGB和深度点云数据的显示与处理。主要功能包括点云加载、可视化、保存为PLY格式文件,以及背景颜色、点间隔、坐标轴显示等参数的自定义设置。该工具采用模块化设计,核心组件包括主窗口管理类、VTK渲染组件和自定义鼠标交互样式,依赖Qt5+和VTK9.5.0库实现跨平台支持。项目提供完整的源码和构建指南,适用于点云数据的快速展示与分析。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 385

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

实现通讯录(结构体)

文件保存时候,是一个个进去存储,输入进去之后,要用fflush(fp)。因为只用fprintf(fp," %s %s ",item->name,item->phone),只是存到缓存,需要刷新进文件。代码内容不要出现数字,将数字和输出这些内容放入定义,以便后期统一修改操作。注:操作时候如果要更改链表内容,需要改变地址,要使用二次指针**这样去定义。大部分内容都是指针实现功能,下面写几个编程时候注意的点和不常见的使用方式。fclose:关闭一个打开的文件。feof:是否读到文件的结尾。

qq_59569086的博客 633

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

linux学习4实现通讯录(结构体)

linux学习4实现通讯录(结构体)

weixin_42607200的博客 228

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

在Linux下开发简易通讯录

通过这一段时间的学习,这两天花了不少时间巩固理解,终于完成了在Linux下开发简易通讯录,由于时间仓促,该程序有着不少bug,对于用户的输入容错率也不高,只做了开始菜单的输入容错,功能也只实现了基本的增删改查,而且没有实现内容的脱机保存。 下面附上代码: 头文件 cwtxl.h #pragma once #define OK 1 #define ERROR 0 #define TRUE...

fanshu12138的博客 1198

Linux C通讯录文件版

头文件: #ifndef _LINKLIST_H_ #define _LINKLIST_H_ typedef int DATA; typedef enum{TRUE,FALSE,ERROR}BOOL; enum{QUIT,INSERT,DISPLAY,SEARCH,DELETE}; typedef struct addlist { long pertel; long comtel; int...

qq_37667464的博客 352

电子通讯录(文件保存版)

需求 制作一个电子通讯录,通过该通讯录能存入好友ID号、姓名(英文)、手机号码、家庭住址、公司电话。 模块  主界面:主要显示软件功能。 A) 添加好友信息。                                   //  id为唯一标识 B) 列表好友信息。(包含排序功能) C) 搜索好友 D) 删除好友 //按姓名查找,如有重名全部列出,让用户选择 E )修改好

h674174380的博客 776

【Linux C】通讯录/+文件读写

班上好多同学贴了通讯录代码了,我就贴贴自己的思路,和自己写的一些代码片段。没有采用什么hash、双向链表的方法,感觉太大材小用了,可以在后面更复杂的项目再用到这些。 其中因为以前写的通讯录被自己sb误删,嗯,于是有自己的理解和参考了一些优秀同学的代码,由此成为今天的一篇优快云文章 可借鉴学习的通讯录文章: (大家一起共同进步 微笑=w=) https://blog.youkuaiyun.com/qq...

三七 516
上一篇: Linux c 编写停车场管理系统(有注释)
下一篇: Linux c 停车场管理系统
chenxinntu
博客等级 码龄8年 15粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值