#实现C语言通讯录
简简单单写一个C语言
一:函数的定义
- 通过MAX ,NAME_MAX,SEX_MAX,ADDR_MX ,TETE_MAX 定义结构体成员的数量
- 通过typedef重命名结构体为PeoInfo;
- 在定义结构体struct Contact的PeoInfo data用来存放结构体里面人的信息和通过sz来访问人的信息
#pragma once
//人的信息
#include<stdio.h>
#include<assert.h>
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MX 30
#define TETE_MAX 12
typedef struct PeoInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char addr[ADDR_MX];
char tele[TETE_MAX];
}PeoInfo;
typedef struct Contact
{
PeoInfo data[100];//存放人的信息
int sz;//当前存放的数目
}Contact;
//初始化通讯录
void Initcontact(Contact* pc);
//增加联系人
void AddContact(Contact* pc);
//显示通讯录信息
void ShowContact(const Contact* pc);
//删除通讯录信息
void DelContact(Contact* pc);
//查找指定联系人
void SearchContact(const Contact* pc);
//修改指定联系人
void ModifyContact(Contact* pc);
二:函数的实现
- 通过memset库函数来初始化结构体
- 再通过pc->data[pc->sz]来实现AddContact
- 打印pc->data[i]的信息,通过ShowContact实现
- 通过FindByname来找到名字对应的pc->data[i]里面的i;
- 实现DelContact,SearchContact函数
- DelContact删除函数,但是要记得pc->data[i] = pc->data[i + 1],用后面的元素替代前面的数据,但是要记得sz–去掉一个元素(已经删除了一个元素),找不到的话返回-1,
- ModifyContact和DelContact实现的函数差不多,只是要打印pc->data[pos]的各元素信息
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
void InitContact(Contact* pc) {
pc->sz = 0;
memset(pc->data, 0, sizeof(pc->data));
}
void AddContact(Contact* pc) {
assert(pc != NULL);
if (pc->sz == 100) {
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].addr);
printf("请输入电话:>");
scanf("%s", pc->data[pc->sz].tele);
pc ->sz++;
}
void ShowContact(const Contact* pc) {
int i = 0;
printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "姓名", "年龄", "性别", "地址", "电话");
for (i = 0; i < pc->sz; i++) {
//正数是右边对齐,负数是左边对齐
printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->data[i].name,
pc->data[i].age,
pc->data[i].sex,
pc->data[i].addr,
pc->data[i].tele);
}
}
int FindByname(const 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) {
char name[NAME_MAX] = { 0 };
if (pc->sz == 0) {
printf("通讯录为空,不允许删除");
}
//删除
//要删除人的名字
printf("请输入你要删除人的名字:>");
scanf("%s", name);
int ret = FindByname(pc, name);
if (-1 == ret) {
printf("要删除的人不存在");
return;
}
int i = 0;
for ( i= ret; i < pc->sz-1; i++) {
pc->data[i] = pc->data[i + 1];
}
pc->sz--;
printf("删除成功\n");
}
void SearchContact(const Contact* pc) {
char name[NAME_MAX] = { 0 };
printf("请输入要查找的人的名字:>");
scanf("%s", name);
int pos = FindByname( pc, name);
if (-1 == pos) {
printf("查找的人不存在");
return;
}
printf("%20s\t%4s\t%5s\t%20s\t%12s\n", "姓名", "年龄", "性别", "地址", "电话");
//正数是右边对齐,负数是左边对齐
printf("%20s\t%4d\t%5s\t%20s\t%12s\n", pc->data[pos].name,
pc->data[pos].age,
pc->data[pos].sex,
pc->data[pos].addr,
pc->data[pos].tele);
}
void ModifyContact(Contact* pc) {
char name[NAME_MAX] = { 0 };
printf("请输入要修改人的名字:>");
scanf("%s", name);
int pos = FindByname(pc, name);
if (-1 == pos) {
printf("修改的人不存在");
//return;
}
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].addr);
printf("请输入电话:>");
scanf("%s", pc->data[pos].tele);
printf("修改完成\n");
}
三函数的执行语句
- 创建通讯录Contact con
- 通过选择不同语句执行不同函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"contact.h"
void menu() {
printf("*********************************\n");
printf("*********************************\n");
printf("*********** 0 - exit*************\n");
printf("****** 1 - Add 2 - del**********\n");
printf("****** 3 - Search 4 - Modify*****\n");
printf("*********************************\n");
}
int main() {
int input = 0;
//创建通讯录
Contact con ;
InitContact(&con);
do {
menu();
printf("请选择->");
scanf("%d", &input);
switch (input) {
case 1:
AddContact(&con);
break;
case 2:
DelContact(&con);
break;
case 3:
SearchContact(&con);
break;
case 4:
ModifyContact(&con);
break;
case 5:
//打印出来
ShowContact(&con);
break;
case 0:
printf("退出\n");
break;
default:
printf("选择错误->");
break;
}
} while (input);
}
标签:sz,name,实现,C语言,pc,Contact,通讯录,printf,data
From: https://blog.csdn.net/2301_81134141/article/details/142487230