项目:通讯录

main.c

#include "contact.h"


void menu(void)
{
	printf("*******************************\n");
	printf("************通讯录*************\n");
	printf("*********1.增加联系人 *********\n");
	printf("*********2.删减联系人 *********\n");
	printf("*********3.查找联系人 *********\n");
	printf("*********4.修改联系人 *********\n");
	printf("*********5.查看联系人 *********\n");
	printf("*********6.排序联系人 *********\n");
	printf("************0.退出*************\n");
	printf("*******************************\n");
}


int main()
{
	int input=0;
	struct Peo Peo;
	Init_Contact(&Peo);
	do 
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case Add:
			Add_Contact(&Peo);
			break;
		case Del:
			Del_Contact(&Peo);
			break;
		case Sea:
			Sea_Contact(&Peo);
			break;
		case Mov:
			Mov_Contact(&Peo);
			break;
		case Shw:
			Shw_Contact(&Peo);
			break;
		case Sor:
			Sor_Contact(&Peo);
			break;
		default:
			break;
		}
	} while (input);
	return 0;
}

contact.c

#include "contact.h"

//查找函数
static int Find_Num(struct Peo* ps, char tmp[Max_name])
{
	int i = 0;
	for (i = 0; i <= ps->sign - 1; i++)
	{
		if (!(strcmp(ps->con[i].name, tmp)))
			return i;
	}
	return -1;
}


void Init_Contact(struct Peo* ps)
{
	memset(ps->con,0,sizeof(ps->con));
	ps->sign = 0;
}

void Add_Contact(struct Peo* ps)
{
	
	if (ps->sign == Max_Peo)
	{
		printf("人数已满,无法再加");
	}
	else
	{
		printf("请输入姓名:>");
		scanf("%s", ps->con[ps->sign].name);
		printf("请输入年龄:>");
		scanf("%d", &(ps->con[ps->sign].age));
		printf("请输入性别:>");
		scanf("%s", ps->con[ps->sign].sex);
		printf("请输入电话:>");
		scanf("%s", ps->con[ps->sign].tel);
		printf("添加成功\n\n\n");
		(ps->sign)++;
	}

}

void Shw_Contact(const struct Peo* ps)
{
	if (ps->sign == 0)
	{
		printf("通讯录为空\n\n\n");
	}
	else
	{
		int i = 0;
		printf("%-10s\t %-10s\t %-10s\t %-20s\t\n", "名字", "年龄", "性别", "电话");
		for (i = 0; i < ps->sign; i++)
		{
			printf("%-10s\t %-10d\t %-10s\t %-20s\t\n",
				ps->con[i].name,
				ps->con[i].age,
				ps->con[i].sex,
				ps->con[i].tel);
		}
		printf("\n");
	}
}

void Del_Contact(struct Peo* ps)
{
	char tmp[Max_name] = { 0 };
	printf("请输入删除人的名字:>");
	scanf("%s", tmp);
	//清除对应位置联系人信息
	int i = Find_Num(ps,tmp);
	//找不到人
	if (i == (ps->sign)&&(i))
	{
		printf("查无此人\n");
	}
	//找到人了
	else
	{
		//删除
		memset(&(ps->con[i]),0,sizeof(ps->con[i]));
		int j = i;
		for (j = i; j < ps->sign; j++)
		{
			ps->con[j] = ps->con[j + 1];
		}
		printf("删除成功\n");
	}
	(ps->sign)--;
}

void Sea_Contact(struct Peo* ps)
{
	char name[Max_name] = { 0 };
	printf("请输入名字:>");
	scanf("%s", name);
	int ret = Find_Num(ps,name);
	if (ret == -1)
	{
		printf("查无此人\n");
	}
	else
	{
		printf("%-10s\t %-10s\t %-10s\t %-20s\t\n", "名字", "年龄", "性别", "电话");
		printf("%-10s\t %-10d\t %-10s\t %-20s\t\n",
			ps->con[ret].name,
			ps->con[ret].age,
			ps->con[ret].sex,
			ps->con[ret].tel);
		printf("\n");
	}
}

void Mov_Contact(struct Peo* ps)
{
	int input = 0;
	char tmp[Max_name] = { 0 };
	printf("请输入修改人的名字:>");
	scanf("%s", tmp);
	int ret = Find_Num(ps,tmp);
	printf("请输入要修改的选项:>\n");
	printf("1.姓名 2.年龄 3.性别 4.电话号码\n");
	scanf("%d", &input);
	do
	{
		switch (input)
		{
		case name:
			printf("请输入姓名:>");
			scanf("%s", ps->con[ret].name);
			break;
		case age:
			printf("请输入年龄:>");
			scanf("%d", &(ps->con[ret].age));
			break;
		case sex:
			printf("请输入性别:>");
			scanf("%s", ps->con[ret].sex);
			break;
		case tel:
			printf("请输入电话:>");
			scanf("%s", ps->con[ret].tel);
			break;
		default:
			break;
		}
		printf("修改成功\n");
		break;
	} while (input);
	
}

void Sor_Contact(struct Peo* ps) 
{
	int input = 0;
	int i = 0;
	printf("请选择排序的方式:>\n");
	printf("1.姓名  2.年龄  3.性别  4.电话\n");
	scanf("%d", &input);
	do
	{
		switch (input)
		{
		case name:
			for (i = 0; i < ps->sign; i++)
			{
				int j = 0;
				for (j = 0; j < ps->sign - i-1; j++)
				{
					if (strcmp(ps->con[j].name,ps->con[j+1].name )>0)
					{
						char tmp[Max_name] = { 0 };
						strcpy(tmp, ps->con[j].name);
						strcpy(ps->con[j].name, ps->con[j + 1].name);
						strcpy(ps->con[j + 1].name, tmp);
					}
				}
			}
			break;
		case age:
			for (i = 0; i < ps->sign; i++)
			{
				int j = 0;
				for (j = 0; j < ps->sign - i-1; j++)
				{
					if (ps->con[j].age>ps->con[j+1].age)
					{
						int tmp = (ps->con[j + 1].age);
						(ps->con[j + 1].age) = (ps->con[j].age);
						(ps->con[j ].age) = tmp;
					}
				}
			}
			break;
		case sex:
			for (i = 0; i < ps->sign; i++)
			{
				int j = 0;
				for (j = 0; j < ps->sign - i - 1; j++)
				{
					if (strcmp(ps->con[j].sex, ps->con[j + 1].sex) > 0)
					{
						char tmp[Max_name] = { 0 };
						strcpy(tmp, ps->con[j].sex);
						strcpy(ps->con[j].sex, ps->con[j + 1].sex);
						strcpy(ps->con[j + 1].sex, tmp);
					}
				}
			}
		
			break;
		case tel:
			for (i = 0; i < ps->sign; i++)
			{
				int j = 0;
				for (j = 0; j < ps->sign - i - 1; j++)
				{
					if (strcmp(ps->con[j].tel, ps->con[j + 1].tel) > 0)
					{
						char tmp[Max_name] = { 0 };
						strcpy(tmp, ps->con[j].tel);
						strcpy(ps->con[j].tel, ps->con[j + 1].tel);
						strcpy(ps->con[j + 1].tel, tmp);
					}
				}
			}
			break;
		default:
			break;
		}
		break;
	} while (input);
	printf("排序成功\n\n");

}

contact.h

#include <stdio.h>
#pragma warning(disable:4996)
#include <string.h>
//#define _CRT_SECURE_NO_WARNINGS 1
#define Max_tel 12//电话最大位
#define Max_sex 5//性别最大位
#define Max_name 8//姓名最大位
#define Max_Peo 100//通讯录最多能存储的人数

struct contact
{
	char name[Max_name];//名字
	int age;//年龄
	char sex[Max_sex];//性别
	char tel[Max_tel];//电话
};

struct Peo//单个人
{
	struct contact con[Max_Peo];
	int sign;
};

enum meun
{
	Add = 1,
	Del = 2,
	Sea = 3,
	Mov = 4,
	Shw = 5,
	Sor = 6
};

enum Mov
{
	name=1,
	age,
	sex,
	tel
};

void Init_Contact(struct Peo* ps);
void Add_Contact(struct Peo* ps);
void Shw_Contact(const struct Peo* ps);
void Del_Contact(struct Peo* ps);
void Sea_Contact(struct Peo* ps);
void Mov_Contact(struct Peo* ps);
void Sor_Contact(struct Peo* ps);

全部评论

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务