【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

相关文章
|
10天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的C语言在线评测系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的C语言在线评测系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
17天前
|
搜索推荐 C语言
C语言冒泡排序(附源码和动态图)
冒泡排序是一种简单的排序算法,其基本思想是通过重复遍历待排序的数列,比较每对相邻元素的值,如果它们的顺序错误(即满足一定的排序条件,如从小到大排序时前一个元素大于后一个元素),就交换它们的位置。这个过程就像水底的气泡一样逐渐向上冒,因此得名“冒泡排序”。
|
25天前
|
C语言
枚举(C语言)
枚举(C语言)
|
13天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的C语言在线评测系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的C语言在线评测系统附带文章源码部署视频讲解等
25 0
|
17天前
|
Linux C语言
【编程小实验】C语言实现:无限循环写入文本文件,支持Ctrl+C中断与数据追加(附完整源码)
在Linux中,文件I/O(输入/输出)是程序与文件进行交互的基本方式,包括读取文件内容和向文件写入数据。这通常通过标准的C库函数来实现,下面是一些基本的文件读写操作和代码示例。
|
20天前
|
存储 SQL 网络协议
什么是PACS系统?一套C语言C/S架构PACS影像归档和通信系统源码
PACS系统是基于C/S架构的医学影像归档和通信系统,遵循IHE和DICOM3.0标准,采用Wintel平台与品牌服务器,配备SQL Server数据库,支持双机热备。它确保图像质量和高效传输,兼容多种医学设备,允许历史胶片扫描存储,并有严格的权限管理与安全机制,包括数据备份和故障恢复功能,旨在实现资源共享和效率提升。系统设计考虑了与医院HIS集成及未来扩展。
17 0
|
24天前
|
编译器 C语言
C语言枚举:深入探索下标默认值、自定义值及部分自定义情况
C语言枚举:深入探索下标默认值、自定义值及部分自定义情况
12 0
|
24天前
|
存储 编译器 C语言
C语言的联合体:一种节省内存的数据结构
C语言的联合体:一种节省内存的数据结构
18 0
|
26天前
|
编译器 C语言 C++
【海贼王编程冒险 - C语言海上篇】自定义类型:结构体,枚举,联合怎样定义?如何使用?
【海贼王编程冒险 - C语言海上篇】自定义类型:结构体,枚举,联合怎样定义?如何使用?
12 0
|
C语言
《C语言及程序设计》实践项目——枚举应用
返回:贺老师课程教学链接 【项目1-对称点】 设计函数,可以按指定的方式,输出一个平面点的对称点 下面给出枚举类型定义和main函数(测试函数),请写出output函数的实现。 #include&lt;stdio.h&gt; enum SymmetricStyle {axisx, axisy, point};//分别表示按x轴, y轴, 原点对称三种方式 void
1078 0