C语言使用结构体实现简单通讯录

作者:玩的就是沧桑 时间:2023-05-30 02:27:27 

C语言用结构体实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括:

姓名、性别、年龄、电话、住址

提供方法:

1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人

代码实现:

头文件:


#ifndef __HEAD_H__     ////防止头文件被多次调用
#define __HEAD_H__          

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define PEOPLE_MAX 1000
#define NAME_LENTH 20
#define SEX_LENTH 5
#define AGE_LENTH 10
#define TEL_LENTH 15
#define ADDR_LENTH 50 //宏定义各个数据所需的大小,后续引用直接可以使用名称,或需修改时只用修改这里就可以了

struct People
{
 char name[NAME_LENTH];
 char sex[SEX_LENTH];
 int age;
 char tel[TEL_LENTH ];
 char addr[ADDR_LENTH];
};     //定义人的信息结构体(包含各种信息)

struct Contact
{
 struct People person[PEOPLE_MAX];
 int user_count;
};   //定义通讯录结构体(包含人的信息的结构体和用户个数)

typedef struct Contact * pContact;

int add_contact(pContact pcon); //pContact是一个结构体指针类型,pcon是一个指向struct Contact的一个指针
int dele_contact(pContact pcon); //例如:typedef int * int 即 int *p ==> int p
int find_contact(pContact pcon);
int modify_contact(pContact pcon);
int show_contact(pContact pcon);
int clear_contact(pContact pcon);
void menu();    //函数的声明

#endif

各种函数实现:


#include"head.h"    

int add_contact(pContact pcon)
{
 if(pcon->user_count >= PEOPLE_MAX)
 {
   printf("contact is full!\n");
   return -1;
 }
 else
 {
   printf("input name,please!\n");
   scanf("%s",pcon->person[pcon->user_count].name);
   printf("input sex,please!\n");
   scanf("%s",pcon->person[pcon->user_count].sex);
   printf("input age,please!\n");
   scanf("%d",&pcon->person[pcon->user_count].age); //这里用%d输出int
   printf("input tel,please!\n");
   scanf("%s",pcon->person[pcon->user_count].tel);
   printf("input addr,please!\n");
   scanf("%s",pcon->person[pcon->user_count].addr);
   (pcon->user_count)++;
 }
 return 0;
}           //添加信息的实现

int dele_contact(pContact pcon)
{
 int ret = find_contact(pcon);  //调用查找函数并保存其值
 if(ret != -1)
 {
   int i = 0;
   i = ret;  //这里要用另一个变量来保存输入的姓名
   for(i = 0;i < pcon->user_count-1;i++)
   {
     pcon->person[i] = pcon->person[i+1]; //用后一个覆盖前边的,如果要删除的是最后一个不进行此步骤

}
   pcon->user_count --; //直接减去最后一个即count--
 }
 return 0;  
}

int find_contact(pContact pcon)
{
 int i = 0;
 char ret[NAME_LENTH]; //用另一个数组来保存name
 printf("input name,please!\n");
 scanf("%s",ret);
 while(i <= pcon->user_count)
 {
   if(strcmp(ret,pcon->person[i].name)== 0) //比较输入的姓名和通讯录中已有的姓名
   {
     printf("name\tsex\tage\ttel\taddr\t\n");
     printf("%s\t",pcon->person[i].name);
     printf("%s\t",pcon->person[i].sex);
     printf("%d\t",pcon->person[i].age);
     printf("%s\t",pcon->person[i].tel);
     printf("%s\t\n",pcon->person[i].addr);  
     return i;
   }
   i++;
 }
 printf("sorry,the name you find is not exist!\n");
 return -1;
}

int modify_contact(pContact pcon)  //修改函数,首先找到如要修改的姓名,然后重新输入
{
 int ret = find_contact(pcon);
 if(ret != -1)
 {
   printf("input name,please!\n");
   scanf("%s",pcon->person[ret].name);
   printf("input sex,please!\n");
   scanf("%s",pcon->person[ret].sex);
   printf("input age,please!\n");
   scanf("%d",&(pcon->person[ret].age));
   printf("input tel,please!\n");
   scanf("%s",pcon->person[ret].tel);
   printf("input addr,please!\n");
   scanf("%s",pcon->person[ret].addr);
 }
 else
 {
   printf("sorry,the name you find is not exist!\n");
 }
 return 0;
}

int show_contact(pContact pcon)
{
 int i = 0;
 printf("name\tsex\tage\ttel\t\taddr\t\n"); //制表符来制作表头
 for(i = 0;i < pcon->user_count;i++)
 {
   printf("%s\t",pcon->person[i].name);
   printf("%s\t",pcon->person[i].sex);
   printf("%d\t",pcon->person[i].age);
   printf("%s\t",pcon->person[i].tel);
   printf("%s\t\n",pcon->person[i].addr);
 }
 printf("\n");
 return 0;
}

int clear_contact(pContact pcon)
{
 pcon->user_count = 0 ;
 return 0;
}      //清除所有人,直接让成员个数变为0即可

void menu()
{
 printf("-------contact---------\n");
 printf(" 1.添加联系人信息   \n");
 printf(" 2.删除指定联系人信息 \n");
 printf(" 3.查找指定联系人信息 \n");
 printf(" 4.修改指定联系人信息 \n");
 printf(" 5.显示所有联系人信息 \n");
 printf(" 6.清空所有联系人   \n");
 printf(" 0.谢谢使用      \n");
 printf("-------contact---------\n");
}

主函数:


#include"head.h"

int main()
{  
 int n=1;
 struct Contact people;   //调用通讯录结构体
 people.user_count = 0;   //初始化user_count
 while(n)
 {
   menu();
   printf("please input\n");
   scanf("%d",&n);
   switch(n)
   {
     case 1:
     {
       add_contact(&people);
       break;
     }
     case 2:
     {
       dele_contact(&people);
       break;
     }
     case 3:
     {
       find_contact(&people);
       break;
     }  
     case 4:
     {
       modify_contact(&people);
       break;
     }
     case 5:
     {
       show_contact(&people);
       break;
     }
     case 6:
     {
       clear_contact(&people);
       break;
     }
     default:
     {
       return 0;
       break;
     } //switch case语句分支选择不同函数实现不同作用
   }
 }
 return 0;
}

结果实现:

C语言使用结构体实现简单通讯录C语言使用结构体实现简单通讯录C语言使用结构体实现简单通讯录C语言使用结构体实现简单通讯录C语言使用结构体实现简单通讯录C语言使用结构体实现简单通讯录C语言使用结构体实现简单通讯录

来源:http://blog.csdn.net/ret_skd/article/details/44923195

标签:C语言,通讯录
0
投稿

猜你喜欢

  • SPRING IOC注入方式过程解析

    2023-10-11 12:59:13
  • 浅析12306售票算法(java版)

    2023-11-16 10:27:12
  • Android中Shape的用法详解

    2023-12-21 14:05:44
  • C#使用Process类调用外部程序分解

    2022-01-07 16:34:11
  • Java 并发编程学习笔记之Synchronized简介

    2023-09-01 03:24:05
  • 浅谈Java与C#的一些细微差别

    2022-09-25 06:33:36
  • C#延时函数的使用说明

    2023-10-11 19:58:34
  • 基于Spring p标签和c标签注入方式

    2023-11-25 22:26:36
  • SpringBoot整合XxlJob分布式任务调度平台

    2022-07-09 09:47:37
  • Java调用shell命令涉及管道、重定向时不生效问题及解决

    2021-07-18 17:02:25
  • 在VSCode里使用Jupyter Notebook调试Java代码的详细过程

    2022-03-25 07:14:12
  • SpringMVC请求参数的使用总结

    2022-11-30 22:23:18
  • Java CAS原子操作详解

    2023-05-06 15:37:15
  • JavaWeb利用struts实现文件下载时改变文件名称

    2023-10-24 11:26:53
  • SpringBoot之logback-spring.xml不生效的解决方法

    2023-12-05 12:58:11
  • 快速搭建Spring Boot+MyBatis的项目IDEA(附源码下载)

    2023-10-24 18:29:53
  • springboot配置https访问的方法

    2022-12-11 16:17:37
  • android service实现循环定时提醒功能

    2023-02-27 06:03:45
  • c#解压文件的实例方法

    2022-04-25 09:49:40
  • C#直线的最小二乘法线性回归运算实例

    2022-05-03 11:19:33
  • asp之家 软件编程 m.aspxhome.com