#pragma once
#include<string.h>//memset所包含的头文件需要引用才可使用
#include<stdio.h>
#define NAME_MAX 30//定义下方的数值
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 30
#define MAX 1000
struct peoinfo //定义通讯录里人的信息//struct结构体
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];//结构体中被定义的变量
char tele[TELE_MAX];
char addr[ADDR_MAX];
};
struct contact
{//最多可放1000个人
struct peoinfo data[MAX];
int sz;//当前通讯录有效信息
};
//初始化当前通讯录
void Initcontact(struct contact* pc);
//增加联系人
void Addcontact(struct contact* pc);
//显示联系人
void Showcontact(struct contact* pc);
//删除联系人
void Delcontact(struct contact* pc);
//查找指定联系人
void searchContact(const struct contact* pc);
定义的头文件
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>//引头文件stdio.h
#include"contact.h"//自己定义的引用则需要加上“”双引号引用
void menu()//打印一个菜单
{
printf("*******************************************\n");
printf("*****1.增加联系人 2.删除联系人********\n");
printf("*****3.查找联系人 4.修改联系人********\n");
printf("*****5.打印信息 6.排序联系人********\n");
printf("************* 0.退出 ********************\n");
printf("*******************************************\n");
printf("*******************************************\n");
}
enum option
{
EXIT,//退出
ADD,//增加
DEL,//删除
SEARCH,//查找
MODIFY,//修改
SHOW,//打印
SORT//排序
};
int main()//定义主函数
{
int input = 0;
struct contact con;
Initcontact(&con); //初始化init con
do //实现dowile循环
{
menu();
printf("请选择:>");
scanf("%d",&input);
switch (input)//SWITCH循环调用input
{
case ADD://增加
Addcontact(&con);
break;
case DEL://删除
Delcontact(&con);
break;
case SEARCH://查找
searchContact(&con);
break;
case SHOW://打印
Showcontact(&con);
break;
case EXIT://退出
printf("退出\n");
break;
default: //如果上述语句都不成立则default
printf("选择错误从新选择\n");
break;
}
} while (input);//执行结束循环回dowile开头
return 0;//返回0
}
打印菜单
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
#include<stdio.h>
void Initcontact(struct contact* pc)
{
pc->sz = 0;//将sz初始化为0
// memset(pc->data,0,MAX*sizeof(struct peoinfo));
memset(pc->data, 0,sizeof(pc->data));//使用memest将pc指向的date初始化为0,设置为peoinfo大小
}
void Addcontact(struct contact* pc)
{
if(pc->sz==MAX)//当pc->sz满时提示已满
{
printf("通讯录溢出\n");
}
else
{
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);
//
printf("增加成功\n");
pc->sz++;
}
}
void Showcontact(struct contact* pc)
{
int i = 0;
printf("%15s\t5s\t%8s\t%15s\t%30s\n\n",
"name", "age", "sex", "tele", "addr");
for (i = 0; i < pc->sz; i++)
{
printf("%15s\t5d\t%8s\t%15s\t%30s\n",
pc->data[i].name,
pc->data[i].age,
pc->data[i].sex,
pc->data[i].tele,
pc->data[i].addr);
//打印每一个数组
}
}
int FindContactByName(const struct contact* pc,const 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(struct contact* pc)
{
if (pc->sz == 0)
{
printf("通讯录为空\n");
return;
}
char name[NAME_MAX] = {0};
printf("请输入删除的联系人:>\n");
scanf("%s", name);//查找
int pos = FindContactByName(pc, name);
if(pos==-1)
{
printf("指定联系人不存在\n");//如果查找不到则显示不存在
}
else
{
int j = 0;
for (j = pos; j < pc->sz-1; j++)
{
pc->data[j] = pc->data[j + 1];
}
pc->sz--;
printf("删除成功\n"); //删除
}
}
void searchContact(const struct contact* pc)
{
char name[NAME_MAX] = {0};
printf("请输入要查找人的:>");
scanf("%s", name);
int pos = FindContactByName(pc, name);
if (-1 == pos)
{
printf("查无此人\n");
}
else
{
printf("%15s\t5s\t%8s\t%15s\t%30s\n\n",
"name", "age", "sex", "tele", "addr");
printf("%15s\t5d\t%8s\t%15s\t%30s\n",
pc->data[pos].name,
pc->data[pos].age,
pc->data[pos].sex,
pc->data[pos].tele,
pc->data[pos].addr);
}
}
具体实现的代码段功能已注释
如有错误欢迎指出

1871

被折叠的 条评论
为什么被折叠?



