设为首页 加入收藏

TOP

C语言实现通讯录(一)
2023-07-23 13:29:06 】 浏览:47
Tags:通讯录

一、通讯录准备

1. 通讯录信息的准备
2. 通讯录功能的框架
3. 文件安排

二、实现通讯录的功能

1. 添加功能
2. 删除功能
3. 展示功能
4. 更改功能
5. 查找功能
6. 排序功能

三、总结

1.在main函数中,采用&的原因
2.在使用scanf函数时,为何某些参数不需要&,而有一些参数需要使用&
3.在添加功能中,传递的参数:ps->data[ps->size].xxxx 中,为什么访问xxxx时使用的是 点操作符,而不是 箭头操作符

一、通讯录的准备

1.通讯录信息的准备

通讯录中要有 人名、年龄、性别、地址、手机号码这些信息,因此我们可以通过结构体进行实现。

我们在实现了通讯录的基本信息后,我们需要对通讯录的各个信息大小进行设置,以及通讯录的长度等,并将功能进行声明。

将以上要求写入头文件(contact.h)中

#include<stdio.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_SEX 4
#define MAX_ADDR 20
#define MAX_TELE 12
#define MAX 1000
struct PeoInfo{
  char name[MAX_NAME];
  int age;
  char sex[MAX_SEX];
  char addr[MAX_ADDR];
  char tele[MAX_TELE];
}
struct Contact{
  struct PeoInfo data[MAX];
  int size;                //通讯录的现有长度
}
//初始化通讯录
void InitContact(struct Contact*ps);
//增加功能
void AddContact(struct Contact*ps);
//删除功能
void DelContact(struct Contact*ps);
//更改功能
void ModifyContact(struct Contact*ps);
//查找功能
void SearchContact(const struct Contact*ps);    //此处使用const,是因为查找并不改变数据,展示也是同理
//展示功能
void ShowContact(const struct Contact*ps);
//排序功能
void SortContact(struct Contact*ps);
2.通讯录功能的大致框架

通讯录的功能中包含增删改查,我们在此基础上,增加了展示功能以及排序功能,以及使用之前需要初始化,其大致框架如下:写入test.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("%d",&input);
    switch(input){
    case ADD:
        AddContact(&con);           //增加功能      与枚举中的ADD对应   1
    case DEL:
        DelContact(&con);           //删除功能      与枚举中的DEL对应   2
    case MODIFY:
        ModifyContact(&con);        //更改功能
    case SEARCH:
        SearchContact(&con);        //搜索功能
    case SHOW:
        ShowContact(&con);          //展示功能
    case SORT:
        SortContact(&con);          //排序功能
    case EXIT:                                  // 与枚举中的EXIT对应  0
        printf("退出\n");
    default:
        printf("请输入0——6范围内的数字\n");
    
  }

    }while(input);

}

上述代码中的switch选项 是通过头文件中的枚举进行实现的,写入contact.h中,代码如下

 enum Option
 {  
   EXIT,              //此处采用枚举进行一个switch的选项,枚举中
   ADD,               //首项默认为0,然后依次加1,最终各项正好与switch()中的选项值相等
   DEL,               //于是当输入0~6时,对应test.c中的功能
   MODIFY,
   SEARCH,
   SHOW,
   SORT
 }            
3.文件安排

我们使用三个文件进行通讯录的实现:
1.test.c
2.contact.h
3.contact.c
我们将main函数放在test.c文件中,而通讯录信息等数据结构,预处理,声明等放在contact.h文件中,而具体功能放置在contact.c文件中

初始化代码如下(写入contact.c中):

void InitContact(struct Contact*ps){
  memset(ps->data,0,sizeof(ps->data));
  ps->size=0;
}

二、通讯录功能的实现

1.添加功能
void AddContact(struct Contact*ps){
      if(ps->size==MAX)
{    printf("已满,无法添加\n");  
}
     else
{
  printf("请输入添加的人名:>");
  scanf("%s",ps->data[ps->size].name);        //data作为数组名时,代表的是指针,当我们要其内部成员时,需要使用箭头操作符
  printf("请输入添加的年龄:>");                 //但当以数组形式时,data[i],这种形式时
  scanf("%d",&(ps->data[ps->size].age));    //此时是一个命名的具体的单个结构体,于是我们用
  printf("请输入添加的性别:>");                //点操作符直接访问其内部成员,而不是箭头操作符
  scanf("%s",ps->data[ps->size].sex);  
  printf("请输入添加的地址:>");
  scanf("%s",ps->data[ps->size].addr);  
  printf("请输入添加的电话:>");
  scanf(
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇分治的理解 下一篇CDay03

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目