【C语言】一篇搞定自定义类型:结构体、枚举、联合体(共用体)附上简易通讯录项目源码(三)

简介: 【C语言】一篇搞定自定义类型:结构体、枚举、联合体(共用体)附上简易通讯录项目源码(三)

4. 利用自定义类型实现简易通讯录程序

通讯录.c


#include "contact.h"

void menu()

{

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

printf("****  1. 添加      2. 删除  **\n");

printf("****  3. 搜索      4. 修改  **\n");

printf("****  5. 展示全部  6. 排序  **\n");

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

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

}

int main()

{

int input = 0;

//创建一个通讯录

struct Contact con;

//初始化通讯录

InitContact(&con);

do

{

 menu();

 printf("请选择:>");

 scanf_s("%d", &input);

 switch (input)

 {

 case ADD:

  AddContact(&con);

  break;

 case DEL:

  DeletContact(&con);

  break;

 case SHOW:

  ShowContact(&con);

  break;

 case MODIFY:

  ModifyContact(&con);

  break;

 case SEARCH:

  SearchContact(&con);

     break;

 case SORT:

  SortContact(&con);

  break;

 case EXIT:

  printf("退出通讯录\n");

  break;

 default:

  printf("选择错误\n");

  break;

 }

} while (input);

return 0;

}

contact.c

#include "contact.h"

void InitContact(struct Contact* pc)

{

pc->sz = 0;//默认没有信息

//memset(pc->data, 0, MAX*sizeof(struct PeoInfo));

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

}

void AddContact(struct Contact* pc)

{

if (pc->sz == MAX)

{

 printf("通讯录满了\n");

}

else

{

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

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

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

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

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

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

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

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

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

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

 

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

 pc->sz++;

 ShowContact(pc);

}

}

void DeletContact(struct Contact* pc)

{

printf("请输入需要删除的联系人姓名\n");

char name[30]="0";

scanf_s("%s", name, 30);

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

{

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

 {

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

  {

   strcpy_s(pc->data[j].name, 30, pc->data[j + 1].name);

   strcpy_s(pc->data[j].sex, 5, pc->data[j + 1].sex);

   strcpy_s(pc->data[j].tele, 12, pc->data[j + 1].tele);

   strcpy_s(pc->data[j].addr, 30, pc->data[j + 1].addr);

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

  }

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

  (pc->sz)--;

  ShowContact(pc);

 }

}

}

void ModifyContact(struct Contact* pc)

{

printf("请输入需要修改的联系人姓名\n");

char name[30]="0";

scanf_s("%s", name, 30);

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

{

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

 {

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

  scanf_s("%s", pc->data[i].name, 30);

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

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

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

  scanf_s("%s", pc->data[i].sex, 5);

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

  scanf_s("%s", pc->data[i].tele, 12);

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

  scanf_s("%s", pc->data[i].addr, 30);

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

  ShowContact(pc);

 }

}

}


void ShowContact(struct Contact* pc)

{

int i = 0;

printf("序号\t%10s\t%10s\t%8s\t%15s\t%30s\n", "name", "age", "sex", "tele", "addr");

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

{

 //打印每一个数据

 printf("%d\t%10s\t%10d\t%8s\t%15s\t%30s\n",

  i+1,

  pc->data[i].name,

  pc->data[i].age,

  pc->data[i].sex,

  pc->data[i].tele,

  pc->data[i].addr);

}

}

void SearchContact(struct Contact* pc)

{

printf("请输入需要搜索的联系人姓名\n");

char name[30]="0";

scanf_s("%s",name,30);

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

{

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

 {

  printf("序号\t%10s\t%10s\t%8s\t%15s\t%30s\n", "name", "age", "sex", "tele", "addr");

  printf("%d\t%10s\t%10d\t%8s\t%15s\t%30s\n",

   i + 1,

   pc->data[i].name,

   pc->data[i].age,

   pc->data[i].sex,

   pc->data[i].tele,

   pc->data[i].addr);

  return;

 }

}

printf("找不到联系人信息\n");

}

void SortContact(struct Contact* pc)

{

struct PeoInfo temp;

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

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

{

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

 {

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

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

  pc->data[i] = temp;

 }

}

ShowContact(pc);

}


contact.h


#pragma once

#define NAME_MAX 30

#define SEX_MAX 5

#define TELE_MAX 12

#define ADDR_MAX 30

#define MAX 1000

#include <string.h>

#include <stdio.h>

#include <string.h>

//创建枚举变量

enum Option

{

EXIT,

ADD,

DEL,

SEARCH,

MODIFY,

SHOW,

SORT

};

//描述人的信息

struct PeoInfo

{

char name[NAME_MAX];

int age;

char sex[SEX_MAX];

char tele[TELE_MAX];

char addr[ADDR_MAX];

};

//通讯录

struct Contact

{

struct PeoInfo data[MAX];//1000个人的数据存放在data数组中

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

};

//初始化通讯录

void InitContact(struct Contact* pc);

//增加联系人

void AddContact(struct Contact* pc);

//删除联系人

void DeletContact(struct Contact* pc);

//修改联系人信息

void ModifyContact(struct Contact* pc);

//搜索联系人信息

void SearchContact(struct Contact* pc);

//显示所有的联系人

void ShowContact(struct Contact* pc);

//按姓氏排序联系人信息

void SortContact(struct Contact* pc);




版权声明:本文为CSDN博主「敲代码的布莱恩特」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/DerrickWestbrook/article/details/120380553

相关文章
|
29天前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
133 14
|
1月前
|
存储 编译器 C语言
【C语言】结构体详解 -《探索C语言的 “小宇宙” 》
结构体通过`struct`关键字定义。定义结构体时,需要指定结构体的名称以及结构体内部的成员变量。
160 10
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
159 13
|
2月前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
2月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
73 11
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
61 4
|
存储 C语言
【C语言】 条件操作符 -- 逗号表达式 -- []下标访问操作符,()函数调用操作符 -- 常见关键字 -- 指针 -- 结构体
【C语言】 条件操作符 -- 逗号表达式 -- []下标访问操作符,()函数调用操作符 -- 常见关键字 -- 指针 -- 结构体
【C语言】——define和指针与结构体初识
【C语言】——define和指针与结构体初识
|
存储 C语言
C语言初识-关键字-操作符-指针-结构体
C语言初识-关键字-操作符-指针-结构体
66 0
【C语言】指针,结构体,链表
【C语言】指针,结构体,链表