C语言同学录(通讯录)的实现

嵌入式 二叉树实现通讯录管理系统 #define N 50 typedef struct student { char name[N]; char studentID[N]; char brithday[N]; char tele[N]; }TreeData; typedef struct treenode { TreeData * stuinfo; struct treenode * leftchild; struct tree 阅读详情

这个很久以前就完成了,一直没贴出来。

这个同学录实际上就是通讯录,使用链表实现,也算是对链表的一种运用吧。


具体功能看Menu函数。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Student{
	char name[20];
	char tel[20];
	char qq[20];
	char address[20];
	struct Student *next;
}INFO;

INFO *head;
void  Initiate();//初始化
void Menu ();//主菜单
void Add ();//添加联系人
void List ();//显示通讯录
void Alter();//修改
void Find ();//查找联系人
void Find_Name ();//按姓名查找
void Find_Tel ();//按学号查找
void Delate ();//删除联系人
void Delate_Name ();
void Delate_Tel ();
/* void Delate_Name ();//按姓名删除
void Delate_Tel ();//按电话删除 */

//初始化
void Initiate ()
{
	
	if((head=(INFO*)malloc(sizeof(INFO)))==NULL) exit(1);
    head->next=NULL;
}

//主菜单
void Menu()
{
	printf ("\n");
	printf ("\n");
	printf ("\n");
    printf("**************欢迎使用通讯录系统**************");
    printf("\n");
    printf("\n");
    printf("***********    1.添加好友      ***********\n");
    printf("***********    2.查询好友      ***********\n");
    printf("***********    3.修改好友      ***********\n");
    printf("***********    4.删除好友     ***********\n");
    printf("***********    5.显示所有好友    ***********\n");
    printf("***********    0.退通讯录      ***********\n\n\n");

}
//添加通讯录好友
void Add()
{
	INFO *p,*q;
	if ((q=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1);
    printf("请输入要添加信息!\n");
    printf("姓名:\n");                             //添加信息
    scanf("%s",&q->name);
    printf("电话号码:\n");
    scanf("%s",q->tel);
    printf("QQ:\n");
    scanf("%s",q->qq);
	printf("地址:\n");
    scanf("%s",q->address);
	
	
	
	//保存聊天记录
	FILE *file_in = fopen("同学录.txt", "w");
	if (file_in == NULL)
	{
		perror("fopen TXT");
		return ;
	}

	fprintf (file_in, "姓名:\t%s\t", q->name);
	fprintf (file_in, "号码:\t%s\t", q->tel);
	fprintf (file_in, "QQ:\t%s\t", q->qq);
	fprintf (file_in, "地址:\t%s\t", q->address);
	fclose (file_in);
	
	for (p = head;p->next!=NULL;p=p->next);
	p->next=q;
	q->next=NULL;
	printf("信息已添加完成!\n");
	
}
//查找
void Find ()
{
	int i;
	printf ("\n\n\n\n\n\n**************************************\n");
	printf ("\t\t1按姓名查找\n");
	printf ("\t\t2按电话号码查找\n");
	printf ("**************************************\n");
	printf ("请选择:(按其他数字键返回!)");
	scanf ("%d",&i);
	switch (i)
	{
	case 1:
		{
			Find_Name ();
			break;
		}
	case 2:
		{
			Find_Tel ();
			break;
		}
	
	}
}

void Find_Name ()
{
	INFO *p;
	char name[20];
	if (head->next==NULL) // 如果是一个空链表;
	{
		printf("通讯录空!\n");
        return;
	}
	printf("请输入要查找姓名:\n");
    scanf("%s",&name);
	for (p=head->next;p!=NULL;p=p->next)//循环遍历链表中的节点,找出此时最小的节点
	{
		if(strcmp(p->name,name)==0)
		{
			printf("姓名\t电话\tQQ\t地址\n");
            printf("%s\t%s\t%s\t%s\n",p->name,p->tel,p->qq,p->address);
		}
		else  if(p->next==NULL)
		{
            printf("没有该好友信息!\n");
		}	
	}
}
	
void Find_Tel ()
{
	INFO *p;
	char tel[20];
	if (head->next==NULL)// 如果是一个空链表;
	{
		printf("通讯录空!\n");
      return;
	}
	printf("请输入要查找电话号码:\n");
    scanf("%s",&tel);
	for (p=head->next;p!=NULL;p=p->next)//循环遍历链表中的节点,找出此时最小的节点
	{
		if(strcmp(p->tel,tel)==0)
		{
			printf("姓名\t电话\tQQ\t地址\n");
            printf("%s\t%s\t%s\t%s\n",p->name,p->tel,p->qq,p->address);
		}
		else  if(p->next==NULL)
		{
            printf("没有该好友信息!\n");
		}	
	}	
}	
//修改通讯录信息
void Alter()
{
	char name [50]; //先查找 
	INFO *p,*p1;
	if(head->next==NULL)
	{
		printf("通讯录空!\n");
		return;
	}
	printf("请输入要修改姓名:\n");
    scanf("%s",name);
	for(p=head->next;p!=NULL;p=p->next)
	{
		if(strcmp(p->name,name)==0)
        {   
            break;
        }
        else if(p->next==NULL)
        {
            printf("信息!\n");
            return;
        }
	}
	p1=(INFO *)malloc(sizeof(INFO));
    printf("new姓名:\n");                             //添加信息
    scanf("%s",p1->name);
    strcpy(p->name,p1->name);
    printf("new电话号码:\n");
    scanf("%s",p1->tel);
    strcpy(p->tel,p1->tel);
    printf("newQQ:\n");
    scanf("%s",p1->qq);
    strcpy(p->qq,p1->qq);
    printf("new地址:\n");
    scanf("%s",p1->address);
    strcpy(p->address,p1->address);
    printf("信息已修改\n");
    //显示修改信息
    printf("姓名\t电话\tQQ\t地址\n");
    printf("%s\t%s\t%s\t%s\n",p->name,p->tel,p->qq,p->address);
    free(p1);
}
//删除通讯录信息
void Delate()
{
    int i;
	printf ("\n\n\n\n\n\n**************************************\n");
	printf ("\t\t1按姓名删除\n");
	printf ("\t\t2按电话号码删除\n");
	printf ("**************************************\n");
	printf ("请选择:(按其他数字键返回!)");
	scanf ("%d",&i);
	switch (i)
	{
	case 1:
		{
			Delate_Name ();
			break;
		}
	case 2:
		{
			Delate_Tel ();
			break;
		}
	
	}
}
void Delate_Name()
{
	char  name[20];                                     //先查找 删除
    INFO *p = head->next, *p1 =head->next,*p2;
    if (head->next == NULL)
    {
        printf("通讯录空\n");
        return;
    }
    printf("请输入要删除姓名:\n");
    scanf(" %s",name);
    while ((strcmp(p->name,name)!=0 )&& p->next != NULL)
    {
        p1=p;
        p =p->next;
    }
    if (strcmp(name, p->name)==0)                    //输删除信息
    {
        if (p == head->next&&p->next!=NULL)
		{ 
            head->next = p->next;
		}	
        else  if(p==head->next&&p->next==NULL)
        {
            head->next=p->next;
            printf("好友已全部删除!\n");
            return;
        }
        else
            p1->next = p->next;
    }
    else
    {
        printf("不存在该好友!\n");
        return;
    }
    printf("信息已删除!\n");
	printf("您还有以下好友!\n");
    printf("姓名\t电话号码\tQQ\t地址\n");
    for(p2=head->next;p2!=NULL;p2=p2->next)
    printf("%s\t%s\t%s\t%s\n",p2->name,p2->tel,p2->qq,p2->address);
}	
	
void Delate_Tel()
{
	char  tel[20];                                     //先查找 删除
    INFO *p = head->next, *p1 =head->next,*p2;
    if (head->next == NULL)
    {
        printf("通讯录空\n");
        return;
    }
    printf("请输入要删除电话号码:\n");
    scanf(" %s",tel);
    while ((strcmp(p->tel,tel)!=0 )&& p->next != NULL)
    {
        p1=p;
        p =p->next;
    }
    if (strcmp(tel, p->tel)==0)                    //输删除信息
    {
        if (p == head->next&&p->next!=NULL)
		{ 
            head->next = p->next;
		}	
        else  if(p==head->next&&p->next==NULL)
        {
            head->next=p->next;
            printf("好友已全部删除!\n");
            return;
        }
        else
            p1->next = p->next;
    }
    else
    {
        printf("不存在该好友!\n");
        return;
    }
    printf("信息已删除!\n");
	printf("您还有以下好友!\n");
    printf("姓名\t电话号码\tQQ\t地址\n");
    for(p2=head->next;p2!=NULL;p2=p2->next)
    printf("%s\t%s\t%s\t%s\n",p2->name,p2->tel,p2->qq,p2->address);
	
}	 
//显示所记录	
void List()
{    
    INFO *p;
    if(head->next==NULL)
    {
        printf("通讯录记录!\n");
        return;
    }
   printf("姓名\t电话号码\tQQ\t地址\n");
    for(p=head->next;p!=NULL;p=p->next)
    printf("%s\t%s\t\t%s\t%s\n",p->name,p->tel,p->qq,p->address);
   
}	
	
int main() 
{ 
	

    int  choice;
    char  yes_no;
    
    Initiate();
    do
    {
        Menu();
        printf("请输入指令0-5:\n");
        scanf("%d",&choice);
        printf("\n");
        switch(choice)
       {
            case 1:Add();
			       
            break;
            case 2:Find();
            break;
            case 3:Alter();
            break;
            case 4:Delate();
            break;
            case 5:List();
            break;
            case 0:
            printf("************谢您使用************\n");
            exit(0);  //正常退出
            break;
            default:
            printf("输入误!请重新输入\n");
             break;
        }
         printf("是否继续  Y  or   N?  \n");
         do
        {
           scanf("%c",&yes_no);
        }
	while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
    }
    while(yes_no=='Y'||yes_no=='y');
}

	

同学通讯录C语言项目实践及反馈征集 该通讯录项目将支持以下基本功能:添加、删除和修改联系人信息。根据姓名、电话等信息查询联系人。导入与导出联系人数据到文本文件。对联系人列表进行排序。在接下来的章节中,我们将深入探讨每个功能的实现细节以及如何对它们进行优化,以满足不同用户的需求。此外,我们还将介绍如何通过外部反馈和技术交流来改进系统,以及如何进行有效的数据结构设计、内存管理和代码质量控制。 阅读详情

相关推荐

我的交叉验证翻车实录:从‘炼丹’到可靠评估,我是怎么用五折验证拯救我的图像分割模型的

本文分享了作者在医学图像分割模型评估中从失败到成功的实战经验。通过引入五折交叉验证方法,解决了传统数据划分的局限性,显著提升了模型评估的稳定性和泛化能力。文章详细介绍了Python实现、数据准备策略和训练流水线改造,为AI医疗影像分析提供了可靠的技术方案。

weixin_42625070的博客 271

同学录C语言程序设计,C语言同学录实现

实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1.添加联系人信息2.删除指定联系人信息3.查找指定联系人信息4.修改指定联系人信息5.显示所有联系人信息6.清空所有联系人contacts.h#ifndef CONTACTS_H#define CONTACTS_H#endif#include #include #include #de...

weixin_29867607的博客 350

决策树(分类树、回归树)

决策树 前言:第一篇博客,最近看完决策树,想着归纳一下,也方便自己以后回顾。写的会比较全面一些,可能会有很多不太正确的地方,欢迎大家交流指正 : ) 决策树模型: 决策树模型是运用于分类以及回归的一种树结构。决策树由节点和有向边组成,一般一棵决策树包含一个根节点、若干内部节点和若干叶节点。决策树的决策过程需要从决策树的根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选...

你午睡了吗 9万+

同学录管理系统(C语言)

同学录管理系统 实现学生通讯录管理的几个操作功能(新建、插入、删除、从文件中读取、写入文件和查询、屏幕输出等功能)。通讯录中学生的信息有学号、姓名、出生日期、性别、电话和地址等。 [内容] 1、利用链式存储结构来实现 2、系统的菜单功能项如下: 1----新建学生通讯录 2----向学生通讯录插入学生信息 3----在通讯录删除学生信息 4----在文件中读取通讯录信息 5----向...

weixin_43587055的博客 5351

Rockchip RK3568实战:手把手教你调试I2S音频驱动(附ALSA设备树配置详解)

本文提供Rockchip RK3568平台I2S音频驱动的实战调试指南。详细解析了从硬件连接到软件配置的全过程,重点涵盖ALSA驱动框架下的设备树配置、时钟计算、DMA参数设置以及常见问题(如无声、爆音)的排查与解决方法,帮助开发者快速定位并解决音频驱动难题。

weixin_28358083的博客 499

【AI Infra】Perfetto性能分析工具指南

Perfetto是一款开源性能分析工具,提供系统级和应用级的活动数据追踪功能。其界面分为四个区域:左侧操作区(包含Trace查看、SQL查询、预置分析等功能)、上方信息区、中间图形化展示区以及下方详细信息区。工具支持快捷键操作(w/s缩放、a/d移动、m标记等),并能高效处理大体积Trace文件。通过Timeline分析可发现性能瓶颈,如案例中update_actor耗时过高的问题,最终定位到CPU offloading导致的MemcpyH2D操作耗时过长,提出了优化方案。Perfetto相比Systrac

baiweizeng的博客 1510

C语言实现通讯录

提供通讯录源码~ 帮助大一写C语言大作业的同学

哒哒的博客 738

MFC 利用soap 调用web service

MFC 利用soap 调用web service

congjiaoyan3682的博客 785

C语言 学生记录管理系统

【代码】C语言 学生记录管理系统。

laocooon的博客 1198

《QT+PCL》点云的点选与框选

【代码】《QT+PCL》点云的点选与框选。

阁楼 3602

YOLOv8目标出入计数部署:讲解C#使用ONNX检测模型进行目标出入计数 可运行完整实例

代码、步骤、讲解完整,可一键运行,效果如下:车辆出入计数人员出入计数。

Limiiiing的博客 79

(超详解)C语言实现通讯录

(超详解)C语言实现通讯录

qq_67887457的博客 1万+

TDS水质检测传感器原理图设计,已量产(液体传感器)

最近调试了一款针对生活用水、水培系统的 TDS 水质检测模块 —— 毕竟 TDS(总溶解固体)值直接关联水的洁净程度,是这类场景里既实用又易获取的水质指标。下面拆解下这个电路的设计逻辑,说说每个部分是怎么配合实现精准检测的。

不脱发的程序猿 1541

C:使用结构体简单实现通讯录

使用结构体创建通讯录,实现增、删、改、查、显示、排序六种功能。

ghdfn的博客 585

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C语言编写通讯录(多文件)

通讯录功能: 记录50人 姓名、性别、电话 最多存储50人 按1、添加联系人 按2、删除联系人(按名字) 按3、修改联系人信息(按名字) 按4、查找联系人:姓名、电话,支持模糊查找 按5、显示所有联系人信息(二维数组) 编写思路: 采用多文件编程,main.c(主函数) phone_book.c(通讯录主要功能实现),tools.c(工具函数,用于提示,显示等),以及头文件phone_book.h tools.h 由于是在Linux系统下用vim编...

zdy_1211的博客 383

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

通讯录(C语言)

我们需要用C语言模拟一个通讯录可以用来存储1000个人的信息,要以文件的形式保存起来,可以实现文件的读和写。每个人的信息包括:姓名、电话、性别、住址、年龄。

m0_69323023的博客 848

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

之前写过一个初级的通讯管理系统,里边对于通讯录的容量是提前设置好的,这有一个坏处就是当容量达到最大值时就无法再添加信息。所以为了解决这样的问题,可以选择动态内存函数进行动态管理,在必要时自主增添容量。C语言通讯录管理系统C语言动态内存管理。

@情话 1167

c语言代码大全_轻松学做C语言课程设计:学生通讯录管理系统

「今天是学习C语言第 166 天」纸上学来终觉浅,绝知此事要躬行。——陆游「冬夜读书示子聿」# 题外话C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力。从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现。PS:大家也可以直接留言提供一些课程设计选题,有可能根据大家的题目提供新的示例程序。一般课程设计考察的知识点:...

weixin_39642998的博客 865

C语言同学录实现

作业: 实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人contacts.h #ifndef CONTACTS_H #define CONTACTS_H

Always__的代码世界 1769

【C语言】通讯录管理系统(文件版本)

之前写过两个版本的通讯录管理系统,存在一个缺陷就是所有的用户信息的临时的,当关掉程序后所有的用户信息都会丢失掉,为了使用户信息一直保存在文件当中,可以使用相关的文件操作的动态管理系统进行改进。

@情话 2154

用C语言实现通讯录(初阶)

包括三个文件。 test.c——用于测试功能 Contact.c——用于写各种功能函数实现代码 Contact.h——用于声明函数或者结构的 代码如下: 1、Contact.h #define _CRT_SECURE_NO_WARNINGS 1 #define MAX 1000 #define MAX_NAME 20 #define MAX_SEX 5 #define MAX_TEL 12 #define MAX_ADDR 30 #include <stdio.h> #include &lt

qq_41025829的博客 333

文件读入数组 语言_轻松学做C语言课程设计:学生通讯录管理系统

「今天是学习C语言第 166 天」纸上学来终觉浅,绝知此事要躬行。——陆游「冬夜读书示子聿」# 题外话C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力。从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现。PS:大家也可以直接留言提供一些课程设计选题,有可能根据大家的题目提供新的示例程序。一般课程设计考察的知识点:...

weixin_27256197的博客 266

用C语言编写通讯录

<br />#include <stdio.h><br />#include <malloc.h><br />#define NULL 0<br />#define LEN sizeof(struct student)<br />struct student<br />{<br />long int num;<br />float score;<br />struct student*next;<br />};<br />int n;<br />struct student*creat(void)<br /

sunchuanhui7264的专栏 834

最基本的单链表同学录

/*****************************************************copyright (C), 2014-2015, Jinling Institute of TecnologyFile name:12.5.cAuthor: Zhang.Y.F  Version:0.1    Date: 2017-12-08 23:17Description:Func

chenlj_1的博客 609

校友录管理系统设计c语言,校友录管理系统分析设计分析.doc

校友录管理系统分析设计分析校友录管理系统概要设计姓 名:龙云所学 院:传媒与信息工程专 业:12软件学 号:20121112118指 导 教 师:刘春华目录:一 、、、、、、、、、、、、、、、、、、、、、、、、、、、校友录的基本功能二、、、、、、、、、、、、、、、、、、、、、、、、、、、、数据库系统三、、、、、、、、、、、、、、、、、、、、、、、、、...

weixin_42298039的博客 668

杰出校友录管理系统C语言,校友录管理系统概要设计.doc

校友录管理系统概要设计姓 名:龙云所学 院:传媒与信息工程专 业:12软件学 号:20121112118指 导 教 师:刘春华目录:一 、、、、、、、、、、、、、、、、、、、、、、、、、、、校友录的基本功能二、、、、、、、、、、、、、、、、、、、、、、、、、、、、数据库系统三、、、、、、、、、、、、、、、、、、、、、、、、、、、、总体设计四、、、、、...

weixin_34584899的博客 481
上一篇: 编程实现冒泡排序
下一篇: 网络编程基础知识巩固
Oligay
博客等级 码龄10年 25粉丝 80原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值