【数据结构】03.顺序表的应用——通讯录

news/2024/10/5 7:59:25/

本篇文章我们将使用顺序表来实现通讯录的增删查改功能。
代码如下:

//Contact.h#pragma once#define NAME_MAX 30
#define GENDER_MAX 10
#define ADDRESS_MAX 100
#define TEL_MAX 12enum{Exit,Add,Del,Seek,Change,Show};//枚举类型,便于理解数字含义//通讯录结构体
typedef struct PeopleInfo
{char name[NAME_MAX];int age;char gender[GENDER_MAX];char address[ADDRESS_MAX];char tel[TEL_MAX];
}Info;struct SL;
typedef struct SL Contact;void ContactInit(Contact* con);//通讯录初始化
void ContactDestroy(Contact* con);//通讯录销毁
void ContactAdd(Contact* con);//添加联系人
void ContactDel(Contact* con);//删除联系人
void ContactSeek(Contact* con);//查找联系人
void ContactChange(Contact* con);//修改联系人
void ContactShow(Contact* con);//展示通讯录
//Contact.c
#include "order_table.h"void ContactInit(Contact* con)//通讯录初始化
{init(con);
}
void ContactDestroy(Contact* con)//通讯录销毁
{SLDestory(con);
}void ContactAdd(Contact* con)//通讯录添加
{Info s;printf("请输入姓名:\n");scanf("%s", s.name);printf("请输入年龄:\n");scanf("%d", &s.age);printf("请输入性别:\n");scanf("%s", s.gender);printf("请输入地址:\n");scanf("%s", s.address);printf("请输入电话号码:\n");scanf("%s", s.tel);Insert(con, 0, s);//调用顺序表printf("添加成功!\n");
}int FindInName(Contact* con,char* name)//自定义的按名字查找函数
{for (int i = 0; i < con->size; i++){if (strcmp(name, con->a[i].name) == 0){return i;}}return -1;
}void ContactDel(Contact* con)//删除联系人
{char name[30];printf("请输入你要删除的人的姓名:\n");scanf("%s", name);int pos = FindInName(con,name);if (pos == -1){printf("未找到该联系人,删除失败\n");return;}Erase(con, pos);//调用顺序表printf("删除成功!\n");
}void ContactSeek(Contact* con)
{char name[30] = { 0 };printf("请输入你要查找的人的姓名:\n");scanf("%s", name);int ret = FindInName(con,name);if (ret == -1){printf("没找到该联系人!\n");return;}printf("找到了,该联系人编号为%d\n", ret);
}void ContactChange(Contact* con)
{char name[30] = { 0 };printf("请输入你要修改的人的姓名:\n");scanf("%s", name);int pos = FindInName(con,name);if (pos == -1){printf("未找到该联系人,修改失败!\n");return;}printf("请输入姓名:\n");scanf("%s", con->a[pos].name);printf("请输入年龄:\n");scanf("%d", &con->a[pos].age);printf("请输入性别:\n");scanf("%s", con->a[pos].gender);printf("请输入地址:\n");scanf("%s", con->a[pos].address);printf("请输入电话号码:\n");scanf("%s", con->a[pos].tel);printf("修改成功!\n");
}
void ContactShow(Contact* con)
{printf("姓名\t年龄\t性别\t地址\t电话号码\n");for (int i = 0; i < con->size; i++){printf("%s\t%d\t%s\t%s\t%s\n", con->a[i].name,con->a[i].age, con->a[i].gender,con->a[i].address,con->a[i].tel);}
}
//test.c
#include"order_table.h"void menu(void)
{printf("*****************通讯录****************\n");printf("*****1.添加联系人     2.删除联系人*****\n");printf("*****3.查找联系人     4.修改联系人*****\n");printf("*****5.展示通讯录     0.退出通讯录*****\n");printf("***************************************\n");
}int main()
{Contact con;ContactInit(&con);int input = 0;do{menu();printf("请输入你要进行的操作:");scanf("%d", &input);switch (input){case Exit:printf("退出通讯录中……\n");break;case Add:ContactAdd(&con);break;case Del:ContactDel(&con);break;case Seek:ContactSeek(&con);break;case Change:ContactChange(&con);break;case Show:ContactShow(&con);break;default:printf("输入错误,请重新输入!\n");break;}} while (input);ContactDestroy(&con);return 0;
}

http://www.ppmy.cn/news/1473592.html

相关文章

线程同步66666

1. 概述 当有多个线程访问同一个共享资源&#xff08;临界资源&#xff09;时&#xff0c;且不允许同时访问&#xff0c;那么就需要线程同步。常见的线程同步方式&#xff1a;互斥锁、读写锁、条件变量、信号量。 2. 互斥锁 互斥锁的方式可以简单概括为&#xff1a;锁定操作…

Jenkins教程-13-参数化任务构建

上一小节我们学习了发送html邮件测试报告的方法&#xff0c;本小节我们讲解一下Jenkins参数化任务构建的方法。 很多时候我们需要根据不同的条件去执行构建&#xff0c;如自动化测试中执行test、stg、prod环境的构建&#xff0c;Jenkins是支持参数化构建的。 以下是Jenkins官…

常用 各国语言简写

zh-CN 华 -中国 zh-TW 华 -台湾 zh-CHS 华 (单一化) zh-SG 华 -新加坡 zh-CHT 华 (传统的) zh-HK 华 - 香港的 SAR zh-MO 华 - 澳门的 SAR en 英国 en-US 英国 - 美国 en-AU 英国 -澳洲 en-BZ 英国 -伯利兹 en-CA 英…

VUE2拖拽组件:vue-draggable-resizable-gorkys

vue-draggable-resizable-gorkys组件基于vue-draggable-resizable进行二次开发, 用于可调整大小和可拖动元素的组件并支持冲突检测、元素吸附、元素对齐、辅助线 安装: npm install --save vue-draggable-resizable-gorkys 全局引用: import Vue from vue import vdr fro…

推荐Bulk Image Downloader插件下载网页中图片链接很好用

推荐&#xff1a;Bulk Image Downloader chome浏览器插件下载图片链接&#xff0c;很好用。 有个网页&#xff0c;上面放了数千的gif的电路图&#xff0c;手工下载会累瘫了不可。想找一个工具分析它的静态链接并下载&#xff0c;找了很多推荐的下载工具&#xff0c;都是不能分…

Ubuntu20.04更新GLIBC到2.35版本

目录 1 背景2 增加源2.1 标准源2.2 镜像源 3 更新 1 背景 Ubuntu20.04默认GLIBC库版本是2.31.今天碰到一个软件需要2.35版本的GLIBC。 升级GLIBC库有两种方式&#xff1a; 下载高版本库源码&#xff0c;编译后替换系统中低版本库。由于GLIBC库是Linux系统中最基础库&#xff…

方法引用详解

什么是方法引用&#xff1f;&#xff1a;针对于函数式接口中的抽象方法 为什么用方法引用&#xff1f;&#xff1a;避免代码的重复&#xff0c;简便书写&#xff0c;提高效率 在使用Lambda表达式的时候&#xff0c;我们实际上传递进去的代码就是一种解决方案&#xff1a;拿参数…

2.Python学习:数据类型和变量

1.标识符命名规则 只能由数字、字母、下划线组成不能以数字开头不能是关键字&#xff08;如class等python内部已经使用的标识符&#xff09;区分大小写 查看关键字&#xff1a; print(keyword.kwlist)2.数据类型 2.1常见数据类型 2.1.1Number数值型&#xff1a; 整数int&a…