C语言实战小项目(三)通讯录(1)

if(pos==-1)

{



	printf("要修改的人不存在\n");

	return ;

}

else

{

printf("请输入名字>");

scanf("%s",pc->data[pos].name);

printf("请输入年龄>");

scanf("%d",&(pc->data[pos].age));

printf("请输入性别>");

scanf("%s",pc->data[pos].sex);

printf("请输入电话>");

scanf("%s",pc->data[pos].tele);

printf("请输入地址>");

scanf("%s",pc->data[pos].addr);

printf("修改成功\n");

}

}

static int FindByName(Contact *pc,char name[])//static 让它成为静态函数,不让其它源文件访问

{

int i = 0;

for(i=0;i<pc->sz;i++)

{

	if(strcmp(pc->data[i].name,name)==0)

	{

	

		return i;

	}

	



}

return -1;//找不到

}




* * *



[]( )5.排序联系人的信息

----------------------------------------------------------------------



> 这个也很简单,就是调用qsort()函数对结构体类型中的那字符串name进行排序。就不过多赘述啦,直接看代码~



void Sort_Name(Contact *pc) //以名字排序所有联系人

{

int i = 0;

int j = 0;

int flag = 0;

printf("以名字进行排序(a-->z)\n");

while(1)

{

	flag = 0;

	for (j = 0; j < pc->sz - 1; j++)

	{

		if (strcmp(pc->data[j].name, pc->data[j + 1].name)>0)

		{

			PeoInfo tmp =  pc->data[j];

			pc->data[j] = pc->data[j + 1];

			pc->data[j + 1] = tmp;

			flag = 1;

		}

	}

	if (flag == 0)

		break;

}

}




* * *



[]( )6.展示通讯录联系人信息

------------------------------------------------------------------------



> 这个函数的实现就是先判断通讯录的实际有效信息人数是否为0,如果为0的话,说明通讯录里面没有人,如果不为0,则对联系人类型的data数组进行遍历,一一打印。



void PrintContact(const Contact *pc)

{

int i= 0;

//打印标题

printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n","名字","年龄","性别","电话","地址");

//打印数据

for(i=0;i<pc->sz;i++)

{



	printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n",pc->data[i].name,

												pc->data[i].age,

												pc->data[i].sex,

												pc->data[i].tele,

												pc->data[i].addr);

}

}




[]( )三、整体代码展示

====================================================================



[]( )1.test.c 通讯录主体框架测试文件

--------------------------------------------------------------------------------



\\



#include “contact.h”

void menu()

{

//打印通讯录菜单

//0.退出菜单

//1.添加联系人信息

//2.删除指定名字的联系人信息

//3.修改联系人的信息

//4.查找好友的信息

//5.展示通讯录联系人信息

//6.对通讯录指定信息进行排序



printf("*************************************************\n");

printf("**********  	——欢迎来到通讯录菜单——    ********\n");

printf("**********         0.退出菜单           ********\n");

printf("**********      1.添加联系人信息        *********\n");

printf("*********       2.删除联系人信息        *********\n");

printf("*********       3.查找联系人信息        *********\n");

printf("*********       4.修改联系人信息        *********\n");

printf("*********       5.排序联系人信息        *********\n");

printf("*********       6.打印联系人信息        *********\n");

printf("*************************************************\n");

}

//将菜单的功能一一列举出来,以枚举的类型呈现

enum Option{

EXIT,		//对应0

ADD,		//1

DEL,		//2

SEARCH,

MODIFY,

SORT,

PRINT

};

int main()

{

int input = 0 ;



//创建通讯录

Contact con;//通讯录

//初始化通讯录

InitContact(&con);

do{

	menu();

	printf("请选择>");

	scanf("%d",&input);



	switch(input)

	{



		//增加人的信息

	case ADD:

		//增加人的信息

		AddContact(&con);

		break;



		//删除

	case DEL:

		DelContact(&con);

		break;

	case SEARCH:

		SearchContact(&con);

		break;

	case MODIFY:

		ModifyContact(&con);

		break;

	case SORT:

		Sort_Name(&con);

		break;

	case PRINT:

		PrintContact(&con);

		break;

	case EXIT:

		printf("退出程序\n");

		break;

	default:

		

		printf("选择错误,重新选择\n");

		break;

	}



}while(input);//只要input小于0为假就退出

return 0;

}




[]( )2.contact.c 通讯录函数文件

-------------------------------------------------------------------------------



#include"contact.h"

void InitContact(Contact* pc)

{

pc->sz=0;

//pc->data=0;----err

//memset  内存设置

memset(pc->data,0,sizeof(pc->data));

}

void AddContact(Contact* pc)

{

if(pc->sz==MAX)

{



	printf("通讯录已满,无法添加");

	return ; 

}

//增加一个人的信息

printf("请输入名字>");

scanf("%s",pc->data[pc->sz].name);

printf("请输入年龄>");

scanf("%d",&(pc->data[pc->sz].age));

printf("请输入性别>");

scanf("%s",pc->data[pc->sz].sex);

printf("请输入电话>");

scanf("%s",pc->data[pc->sz].tele);

printf("请输入地址>");

scanf("%s",pc->data[pc->sz].addr);

pc->sz++;

printf("添加成功\n");

}

void PrintContact(const Contact *pc)

{

int i= 0;

//打印标题

printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n","名字","年龄","性别","电话","地址");

//打印数据

for(i=0;i<pc->sz;i++)

{



	printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n",pc->data[i].name,

												pc->data[i].age,

												pc->data[i].sex,

												pc->data[i].tele,

												pc->data[i].addr);

}

}

static int FindByName(Contact *pc,char name[])

{

int i = 0;

for(i=0;i<pc->sz;i++)

{

	if(strcmp(pc->data[i].name,name)==0)

	{

	

		return i;

	}

	



}

return -1;//找不到

}

void DelContact(Contact *pc)

{

int i;

int pos;

char name[MAX_NAME]={0};

if(pc->sz==0)

{

	printf("通讯录为空,无需删除\n");

	return ;

}

printf("请输入要删除人的名字>");

scanf("%s",name);



//1.查找删除的人

//有 没有

pos=FindByName(pc, name);

if(pos==-1)

{



	printf("要删除的人不存在\n");

	return ;

}

//2.删除



for(i=pos;i<pc->sz-1;i++)

{

	pc->data[i]=pc->data[i+1];



}

pc->sz--;

printf("删除成功\n");

}

void SearchContact(Contact *pc)

{

char name[MAX_NAME]={0};

int pos;

printf("请输入要查找人的名字>");

scanf("%s",name);

 pos=FindByName(pc, name);

if(pos==-1)

{



	printf("要查找的人不存在\n");

	return ;

}

else

{

//打印标题

printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n","名字","年龄","性别","电话","地址");

//打印数据

	printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n",pc->data[pos].name,

												pc->data[pos].age,

												pc->data[pos].sex,

												pc->data[pos].tele,

												pc->data[pos].addr);

}

}

void ModifyContact(Contact* pc)

{

char name[MAX_NAME]={0};

int pos;

printf("请输入要修改人的名字>");

scanf("%s",name);

 pos=FindByName(pc, name);

if(pos==-1)

{



	printf("要修改的人不存在\n");

	return ;

}

else

{

printf("请输入名字>");

scanf("%s",pc->data[pos].name);

printf("请输入年龄>");

scanf("%d",&(pc->data[pos].age));

printf("请输入性别>");

scanf("%s",pc->data[pos].sex);

printf("请输入电话>");

scanf("%s",pc->data[pos].tele);

printf("请输入地址>");

scanf("%s",pc->data[pos].addr);

printf("修改成功\n");

}

}

void Sort_Name(Contact *pc) //以名字排序所有联系人

{

int i = 0;

int j = 0;

int flag = 0;

printf("以名字进行排序(a-->z)\n");

while(1)

{

	flag = 0;

	for (j = 0; j < pc->sz - 1; j++)

	{

		if (strcmp(pc->data[j].name, pc->data[j + 1].name)>0)

		{

			PeoInfo tmp =  pc->data[j];

			pc->data[j] = pc->data[j + 1];

			pc->data[j + 1] = tmp;

			flag = 1;

		}

	}

	if (flag == 0)

		break;

}

}




[]( )3.contact.h 宏定义及函数声明文件

----------------------------------------------------------------------------------



#include<stdio.h>

#include<string.h>

//为以后维护 设置预处理命令

#define MAX_NAME 20

#define MAX_SEX 20

#define MAX_TELE 12 //号码为11位,留以为作结束符\0

#define MAX_ADDR 30

#define MAX 1000

//类型的定义

typedef struct PeoInfo

{

char name[MAX_NAME];

char sex[MAX_SEX];

int age;

char tele[MAX_TELE];

char addr[MAX_ADDR];

}PeoInfo;

typedef struct Contact

{

PeoInfo data[MAX];//存放添加进来人的信息

int sz;//记录的是当前通讯录中有效信息的个数

}Contact;

//初始化通讯录

void InitContact(Contact* pc);

//添加通讯录

void AddContact(Contact* pc);

//打印联系人信息

void PrintContact(const Contact *pc);

//删除联系人信息

void DelContact(Contact *pc);

//查找

void SearchContact(Contact *pc);

//修改

void ModifyContact(Contact* pc);

//排序

void Sort_Name(Contact* pc);




[]( )四、一键打包

------------------------------------------------------------------



#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<string.h>

#define MAX_NAME 20

#define MAX_SEX 20

#define MAX_TELE 12

#define MAX_ADDR 30

#define MAX 1000

typedef struct PeoInfo

{

char name[MAX_NAME];

char sex[MAX_SEX];

int age;

char tele[MAX_TELE];

char addr[MAX_ADDR];

}PeoInfo;

typedef struct Contact

{

PeoInfo data[MAX];

int sz;

}Contact;

void InitContact(Contact* pc);

//添加通讯录

void AddContact(Contact* pc);

//打印联系人信息

void PrintContact(const Contact *pc);

//删除联系人信息

void DelContact(Contact *pc);

//查找

void SearchContact(Contact *pc);

//修改

void ModifyContact(Contact* pc);

//排序

void Sort_Name(Contact* pc);

void InitContact(Contact* pc)

{

pc->sz=0;

//pc->data=0;----err

//memset  内存设置

memset(pc->data,0,sizeof(pc->data));

}

void AddContact(Contact* pc)

{

if(pc->sz==MAX)

{



	printf("通讯录已满,无法添加");

	return ; 

}

//增加一个人的信息

printf("请输入名字>");

scanf("%s",pc->data[pc->sz].name);

printf("请输入年龄>");

scanf("%d",&(pc->data[pc->sz].age));

printf("请输入性别>");

scanf("%s",pc->data[pc->sz].sex);

printf("请输入电话>");

scanf("%s",pc->data[pc->sz].tele);

printf("请输入地址>");

scanf("%s",pc->data[pc->sz].addr);

pc->sz++;

printf("添加成功\n");

}

void PrintContact(const Contact *pc)

{

int i= 0;

//打印标题

printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n","名字","年龄","性别","电话","地址");

//打印数据

for(i=0;i<pc->sz;i++)

{



	printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n",pc->data[i].name,

												pc->data[i].age,

												pc->data[i].sex,

												pc->data[i].tele,

												pc->data[i].addr);

}

}

static int FindByName(Contact *pc,char name[])

{

int i = 0;

for(i=0;i<pc->sz;i++)

{

	if(strcmp(pc->data[i].name,name)==0)

	{

	

		return i;

	}

	



}

return -1;//找不到

}

void DelContact(Contact *pc)

{

int i;

int pos;

char name[MAX_NAME]={0};

if(pc->sz==0)

{

	printf("通讯录为空,无需删除\n");

	return ;

}

printf("请输入要删除人的名字>");

scanf("%s",name);



//1.查找删除的人

//有 没有

pos=FindByName(pc, name);

if(pos==-1)

{



	printf("要删除的人不存在\n");

	return ;

}

//2.删除



for(i=pos;i<pc->sz-1;i++)

{

	pc->data[i]=pc->data[i+1];



}

pc->sz--;

printf("删除成功\n");

}

void SearchContact(Contact *pc)

{

char name[MAX_NAME]={0};

int pos;

printf("请输入要查找人的名字>");

scanf("%s",name);

 pos=FindByName(pc, name);

if(pos==-1)

{



	printf("要查找的人不存在\n");

	return ;

}

else

{

//打印标题

printf("%-20s\t%-5s\t%-5s\t%-12s\t%-20s\n","名字","年龄","性别","电话","地址");

//打印数据

	printf("%-20s\t%-5d\t%-5s\t%-12s\t%-20s\n",pc->data[pos].name,

												pc->data[pos].age,

												pc->data[pos].sex,

												pc->data[pos].tele,

												pc->data[pos].addr);

}

}

void ModifyContact(Contact* pc)

{

char name[MAX_NAME]={0};

int pos;

printf("请输入要修改人的名字>");

scanf("%s",name);

 pos=FindByName(pc, name);

if(pos==-1)

{



	printf("要修改的人不存在\n");

	return ;

}

else

{

printf("请输入名字>");

scanf("%s",pc->data[pos].name);

printf("请输入年龄>");

scanf("%d",&(pc->data[pos].age));

printf("请输入性别>");

scanf("%s",pc->data[pos].sex);

printf("请输入电话>");

scanf("%s",pc->data[pos].tele);

printf("请输入地址>");

scanf("%s",pc->data[pos].addr);

printf("修改成功\n");

}

}

void Sort_Name(Contact *pc) //以名字排序所有联系人

{

int i = 0;

int j = 0;

int flag = 0;

printf("以名字进行排序(a-->z)\n");

while(1)

{

	flag = 0;

	for (j = 0; j < pc->sz - 1; j++)

	{

		if (strcmp(pc->data[j].name, pc->data[j + 1].name)>0)

		{

			PeoInfo tmp =  pc->data[j];

			pc->data[j] = pc->data[j + 1];

			pc->data[j + 1] = tmp;

			flag = 1;

		}

	}

	if (flag == 0)

		break;

}

}

void menu()

{

printf("*************************************************\n");

printf("**********  ——欢迎来到通讯录菜单——  *********\n");

printf("**********	0.退出菜单		********\n");

printf("**********      1.添加联系人信息        *********\n");

printf("*********       2.删除联系人信息        *********\n");

printf("*********       3.查找联系人信息        *********\n");

printf("*********       4.修改联系人信息        *********\n");

文末

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。

首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。

前端面试题汇总

JavaScript

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

性能

linux

前端资料汇总

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值