实现一个通讯录的功能:
创新互联长期为近1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为崇义企业提供专业的做网站、网站设计,崇义网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。分为三部分实现:
contact.h里面的代码如下:
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#define max_name 20
#define max_sex 10
#define max_addr 30
#define max_tele 30
#define max 1000
#define Default 5
#include#include#include//创建结构体,通讯录
typedef struct teleInfo {
char name[max_name];
char sex[max_sex];
int age;
char tele[max_tele];
char addr[max_addr];
}teleInfo;
//创建1000个人的通讯录
//typedef struct contact {
// teleInfo data[max];
// //当前通讯录的个数
// int sz;
//}contact;
//创建动态内存的通讯录
typedef struct contact {
teleInfo *data;
//当前通讯录的个数
int sz;
//大的内存容量
int capacity;
}contact;
//初始化通讯录
void initContact(contact *c);
//检查内存
void checkCapacity(contact* c);
//添加联系人
void addContact(contact *c);
//删除联系人
void delContact(contact* c);
//更新联系人信息
void updateContact(contact* c);
//查询联系人信息
void searchContact(contact* c);
//排序联系人
void sortContact(contact* c);
//打印通讯录
void printContact(contact* c);
//销毁
void destoryContact(contact* c);
contact.c里面的代码如下:
#include "contact.h"
//初始化通讯录
void initContact(contact* c) {
c->data = (teleInfo*)malloc(Default * sizeof(teleInfo));
if (c->data == NULL) {
perror("initContact");
return;
}
c->sz = 0;
c->capacity = Default;
}
//检查内存
void checkCapacity(contact* c) {
if (c->sz == c->capacity) {
teleInfo* ptr = (teleInfo*)realloc(c->data, (c->capacity + Default)*sizeof(teleInfo));
if (ptr != NULL) {
c->data = ptr;
c->capacity += Default;
printf("增容成功\n");
}
else {
perror("checkCapacity");
printf("添加联系人失败\n");
return;
}
}
}
//添加联系人
void addContact(contact* c) {
//判断是否内存足够
checkCapacity(c);
//添加
printf("请输入姓名:");
scanf("%s", c->data[c->sz].name);
printf("请输入性别:");
scanf("%s", c->data[c->sz].sex);
printf("请输入年龄:");
scanf("%d", &(c->data[c->sz].age));
printf("请输入电话号码:");
scanf("%s", c->data[c->sz].tele);
printf("请输入地址:");
scanf("%s", c->data[c->sz].addr);
c->sz++;
printf("添加成功\n");
}
//查找
static int findbyName(contact* c,char name[]) {
int i = 0;
for (i = 0; i< c->sz; i++)
{
if (strcmp(c->data[i].name,name)==0) {
//找到了
return i;
}
}
return -1;
}
//删除联系人
void delContact(contact* c) {
char name[max_name] = {0};
printf("请输入你要删除的联系人的姓名:");
scanf("%s", name);
//根据姓名查找到该联系人
int ret=findbyName(c,name);
if (ret == -1) {
printf("找不到该联系人\n");
return;
}
else {
//找到后删除
int i = 0;
for (i = ret; i< c->sz - 1; i++) {
c->data[i] = c->data[i + 1];
}
c->sz--;
printf("删除成功\n");
}
}
//更新联系人信息
void updateContact(contact* c) {
char name[max_name] = {0};
printf("请输入你要修改的联系人的姓名:");
scanf("%s", name);
//根据姓名查找到该联系人
int ret = findbyName(c, name);
if (ret == -1) {
printf("找不到该联系人\n");
return;
}
else {
printf("请输入姓名:");
scanf("%s", c->data[ret].name);
printf("请输入年龄:");
scanf("%d", &(c->data[ret].age));
printf("请输入性别:");
scanf("%s", c->data[ret].sex);
printf("请输入电话号码:");
scanf("%s", c->data[ret].tele);
printf("请输入地址:");
scanf("%s", c->data[ret].addr);
printf("修改成功");
}
}
//查询联系人信息
void searchContact(contact* c) {
char name[max_name] = { 0 };
printf("请输入你要查询的联系人的姓名:");
scanf("%s", name);
//根据姓名查找到该联系人
int ret = findbyName(c, name);
if (ret == -1) {
printf("该联系人不存在\n");
return;
}
else {
printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n", "姓名", "年龄", "性别", "电话号码", "地址");
printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n", c->data[ret].name, c->data[ret].age, c->data[ret].sex, c->data[ret].tele, c->data[ret].addr);
}
}
//排序联系人(根据年龄来排序)
void sortContact(contact* c) {
}
//打印通讯录
void printContact(contact* c) {
printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t\n", "姓名", "年龄", "性别", "电话号码", "地址");
int i = 0;
if (c->sz == 0) {
printf("通讯录为空\n");
return;
}
else {
for (i = 0; i< c->sz; i++) {
printf("%-10s\t%-10d\t%-10s\t%-10s\t%-10s\t\n", c->data[i].name, c->data[i].age, c->data[i].sex, c->data[i].tele, c->data[i].addr);
}
}
}
//销毁
void destoryContact(contact* c) {
free(c->data);
c->data = NULL;
c->sz = 0;
c->capacity = 0;
}
test.c里面的代码如下:
#include "contact.h"
#include//实现通讯录的添加,删除,修改,查询,排序,退出
void menu() {
printf("--------请选择你要操作的功能:--------\n");
printf("----1.add--------2.del----------------\n");
printf("----3.update-----4.search-------------\n");
printf("----5.sort-------0.exit---------------\n");
printf("----------6.print----------------\n");
}
enum Option
{
EXIT,
ADD,
DEL,
UPDATE,
SEARCH,
SORT,
PRINT
};
int main() {
int input=0;
contact c;
//初始化通讯录
initContact(&c);
do
{
menu();
printf("请选择:》");
scanf("%d", &input);
switch (input)
{
case ADD:
addContact(&c);
break;
case DEL:
delContact(&c);
break;
case UPDATE:
updateContact(&c);
break;
case SEARCH:
searchContact(&c);
break;
case SORT:
sortContact(&c);
break;
case PRINT:
printContact(&c);
break;
case EXIT:
destoryContact(&c);
printf("退出成功\n");
break;
default:
printf("选择失败\n");
break;
}
} while (input);
return 0;
}
里面有排序的功能,还未实现,不过可以根据你的要求来进行排序,比如:年龄,排序有很多种方法,比如:冒泡排序.......
大家可以尝试一下,有任何疑问,可以在评论区留言,看到后会解答。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧