简易通讯录(基于C语言)

今天分享的是简易通讯录

代码实现环境

编译器:VS2019

语言:C语言

首先我们要在VS2019创建一个新项目,里面创建两个源文件(一个用来存放函数,另一个用来创建主函数),一个头文件(就是存放头文件的)

代码展示

test.c

// 禁用Visual Studio中的安全警告,通常与旧的字符串处理函数(如strcpy, sprintf)有关  
#define _CRT_SECURE_NO_WARNINGS  
  
// "contcat.h"是一个头文件,其中包含了contcat数据结构、函数原型等  
#include"contcat.h"  
  
// 用户界面函数,用于显示操作菜单  
void ui ()  
{  
    // 打印出操作菜单  
    printf("***********************************\n");
	printf("****** 1.add         2.del    *****\n");
	printf("****** 3.serach      4.modify *****\n");
	printf("****** 5.show        6.sort    ****\n");
	printf("****** 0.exit         *************\n");
	printf("***********************************\n");
}  
  
int main()  
{  
    int input = 0; // 用户输入的选择  
    contcat con; // 声明一个contcat类型的变量con  
  
    // 初始化contcat数据结构  
    initcontcat(&con);  
  
    // 使用do-while循环来持续显示菜单并等待用户输入  
    do  
    {  
        ui(); // 显示用户界面  
        printf("选择\n"); // 提示用户输入选择  
        scanf("%d", &input); // 读取用户输入  
  
        // 根据用户输入执行相应的操作  
        switch (input)  
        {  
            case 1: addcont(&con); // 添加操作  
                break;  
            case 2: delcont(&con); // 删除操作  
                break;  
            case 3: serachcont(&con); // 查找操作  
                break;  
            case 4: modifycont(&con); // 修改操作  
                break;  
            case 5: showcont(&con); // 显示操作  
                break;  
            case 6: sortcont(&con); // 排序操作  
                break;  
            case 0: printf("退出\n"); // 退出程序  
                break;  
            default: printf("输入错误,请重新输入\n"); // 输入错误的处理  
                break;  
        }  
    } while (input); // 当用户输入非0值时,循环继续  
  
    return 0; // 程序正常退出  
}

contcat.c代码


#include"contcat.h"//引用头文件
//初始化,全部初始化为0
void initcontcat(contcat* pc)
{
	pc->sz = 0;//初始化数
	memset(pc->a, 0, sizeof(pc->a));
	//memset是一个库函数,它定义在<string.h>头文件中。
	//这个函数通常用于设置内存区域中的特定位模式
	//经常用于将一块内存区域初始化为一个特定的值
	//参数为指向要填充的内存块的指针,要填充的值,要填充的字节数
}
//添加联系人
void addcont(contcat* pc)
{
	if (pc->sz == 100)
	{
		printf("联系人已经填满,空间不足");
	}
	//进行添加联系人
	printf("输入姓名");
	scanf("%s", pc->a[pc->sz].name);
	printf("输入年龄");
	scanf("%d", &(pc->a[pc->sz].age));
	printf("输入性别");
	scanf("%s", pc->a[pc->sz].sew);
	printf("输入电话号");
	scanf("%s", pc->a[pc->sz].tele);
	pc->sz++;//每一次添加要对sz+1,这样才会指向下一个位置
}
//显示联系人
void showcont(contcat* pc)
{   printf("%-20s\t%s \t%s\t %s \n ", "姓名", "年龄", "性别", "电话");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		//这个太长了,不利于观看,所以切下一行看
        printf("%-20s\t%d \t%s\t %s \n ", pc->a[i].name,
		pc->a[i].age,pc->a[i].sew, pc->a[i].tele);
	}
		
}
//因为查找,修改,删除其中都有查找,所以先写一个简易的查找
//
int findname(contcat* pc, char name[])
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (strcmp(name ,pc->a[i].name)==0)
		return i;
	}
	return -1;
}
//删除联系人
void delcont(contcat* pc)
{
	char name[20];
	printf("输入你想删除的名字");
	int i = 0;
	scanf("%s", &name);
	int ret =findname(pc, name);
	if (ret == -1)
	{
		printf("查找的人不存在");
		return;
	}
	for (ret; ret < pc->sz; ret++)
	{
		pc->a[ret] = pc->a[ret + 1];
		
	}
	pc->sz--;
	printf("删除成功");
	showcont(pc);
return;
}
//查找联系人
void serachcont(contcat* pc)
{
	char name[20];
	printf("输入你想查找的名字");
	scanf("%s", name);
	int ret=findname(pc, name);
	if (ret == -1)
	{
		printf("查找的人不存在\n");
		return;
	}
	else
	{
		printf("%-20s\t%s \t%s\t %s \n ", "姓名", "年龄", "性别", "电话");
		printf("%-20s\t%d \t%s\t %s \n ", pc->a[ret].name,
			pc->a[ret].age, pc->a[ret].sew, pc->a[ret].tele);
	}
}
void modifycont(contcat* pc)
{
	char name[20];
	printf("输入你想修改的名字\n");
	int i = 0;
	scanf("%s", &name);
	int ret = findname(pc, name);
	if (ret == -1)
	{
		printf("修改的人不存在\n");
		return;
	}
	else
	{
		ren s1;
		printf("输入你修改的名字:");
		scanf("%s", s1.name);
		printf("输入你修改的年龄:");
		scanf("%d", &s1.age);
		printf("输入你修改的性别:");
		scanf("%s", s1.sew);  // 限制性别字段的最大字符数  
		printf("输入你修改的电话:");
		scanf("%s", s1.tele);
		pc->a[ret] = s1;
		printf("修改完成");

	}
	showcont(pc);
	return;
}
//排序
// 冒泡排序函数  
void sortcont(contcat* pc)
{
	for (int front = 0; front < pc->sz - 1; front++)
	{
		for (int behide = 0; behide < pc->sz - front - 1; behide++)
		{
			if (strcmp(pc->a[behide].name, pc->a[behide + 1].name) > 0)
			{
				// 交换pc->data[behide]和pc->data[behide + 1]  
				ren tmp = pc->a[behide];
				pc->a[behide] = pc->a[behide + 1];
				pc->a[behide + 1] = tmp;
			}
		}
	}
	showcont(pc);
	return 0;
}

contcat.h代码

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
typedef struct ren
{
	char name[20];
	int age;
	char sew[5];
	char tele[20];
}ren;
typedef  struct contcat
{
	ren a[100];//存放人的信息
	int sz;//存放信息的个数
}contcat;
//初始化通讯录全为0;
void initcontcat(contcat* pc);
//增加联系人
void addcont(contcat* pc);
//查找联系人
int findname(contcat* pc, char name[]);
//显示联系人
void showcont(contcat* pc);
//删除联系人
void delcont(contcat* pc);
//查找联系人
void serachcont(contcat* pc);
//修改联系人
void modifycont(contcat* pc);
//排序联系人(按年龄排序)
void sortcont(contcat* pc);

欢迎大家指正错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值