利用C语言结构体实现通讯录

本文实例为大家分享了C语言结构体实现通讯录的具体代码,供大家参考,具体内容如下

用来存储1000个人的信息的通讯录,每个人的信息包括:

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

程序如下:

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

struct People
{
  char name[20];
  char sex[5];
  int age;
  char tel[15];
  char addr[50];
};             //定义人的信息结构体(包含各种信息) 

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

typedef struct Contact * p; 

void menu();
int add(p q);   //p是一个结构体指针类型,q是一个指向struct Contact的一个指针
int delete(p q);  //例如:typedef int * int 即 int *p ==> int p
int find(p q);
int modify(p q);
int show(p q);
int clear(p q);  //函数的声明 

void menu()          //目录格式
{
  printf("====================欢迎来到苏嵌154通讯录==================\n");
  printf("----------------------1.添加联系人信息---------------------\n");
  printf("----------------------2.删除指定联系人信息-----------------\n");
  printf("----------------------3.查找指定联系人信息-----------------\n");
  printf("----------------------4.修改指定联系人信息-----------------\n");
  printf("----------------------5.显示所有联系人信息-----------------\n");
  printf("----------------------6.清空所有联系人---------------------\n");
  printf("----------------------0.谢谢使用---------------------------\n");
  printf("====================欢迎来到苏嵌154通讯录==================\n");
} 

int add(p q)  //添加联系人
{
  if((*q).n >= 1000)
  {
    printf("contact is full!\n");
    return -1;
  }
  else
  {
    printf("输入姓名:\n");
    scanf("%s",(*q).person[(*q).n].name);
    printf("输入性别:\n");
    scanf("%s",(*q).person[(*q).n].sex);
    printf("输入年龄:\n");
    scanf("%d",&(*q).person[(*q).n].age);
    printf("输入电话:\n");
    scanf("%s",(*q).person[(*q).n].tel);
    printf("输入地址:\n");
    scanf("%s",(*q).person[(*q).n].addr);
    ((*q).n)++;
  }
  return 0;
}                          

int delete(p q)  //删除联系人
{
  int ret = find(q);          //调用查找函数并保存其值
  if(ret != -1)
  {
    int i = 0;
    i = ret;            //这里要用另一个变量来保存输入的姓名
    for(i = 0;i < (*q).n-1;i++)
    {
      (*q).person[i] = (*q).person[i+1];     //用后一个覆盖前边的,如果要删除的是最后一个不进行此步骤 

    }
    (*q).n --;          //直接减去最后一个即count--
  }
  return 0;
} 

int find(p q)  //查找联系人
{
  int i = 0;
  char ret[20];            //用另一个数组来保存姓名
  printf("输入姓名:\n");
  scanf("%s",ret);
  while(i <= (*q).n)
  {
    if(strcmp(ret,(*q).person[i].name)== 0)     //比较输入的姓名和通讯录中已有的姓名
    {
      printf("姓名\t性别\t年龄\t电话\t地址\4t\n");   //制表符来制作表头
      printf("%s\t",(*q).person[i].name);
      printf("%s\t",(*q).person[i].sex);
      printf("%d\t",(*q).person[i].age);
      printf("%s\t",(*q).person[i].tel);
      printf("%s\4t\n",(*q).person[i].addr);
      return i;
    }
    i++;
  }
  printf("你丫的我班没这个人\n");
  return -1;
} 

int modify(p q)          //修改函数,首先找到如要修改的姓名,然后重新输入
{
  int ret = find(q);
  if(ret != -1)
  {
    printf("输入修改的姓名:\n");
    scanf("%s",(*q).person[ret].name);
    printf("输入修改的性别:\n");
    scanf("%s",(*q).person[ret].sex);
    printf("输入修改的年龄:\n");
    scanf("%d",&((*q).person[ret].age));
    printf("输入修改的电话:\n");
    scanf("%s",(*q).person[ret].tel);
    printf("输入修改的地址:\n");
    scanf("%s",(*q).person[ret].addr);
  }
  else
  {
    printf("你丫的我班没这个人\n");
  }
  return 0;
} 

int show(p q)  //显示全部联系人
{
  int i = 0;
  printf("姓名\t性别\t年龄\t电话\t地址\4t\n");
  for(i = 0;i < (*q).n;i++)
  {
    printf("%s\t",(*q).person[i].name);
    printf("%s\t",(*q).person[i].sex);
    printf("%d\t",(*q).person[i].age);
    printf("%s\t",(*q).person[i].tel);
    printf("%s\4t\n",(*q).person[i].addr);
  }
  printf("\n");
  return 0;
} 

int clear(p q)  //清除所有人,直接让成员个数变为0
{
  (*q).n = 0 ;
  return 0;
}                

int main()
{
  int n=1;
  struct Contact people;   //调用通讯录结构体
  people.n = 0;     //初始化n
  while(n)
  {
    menu();
    printf("请选择你的骚操作:\n");
    scanf("%d",&n);
    switch(n)    //switch case语句分支选择不同函数实现不同作用
    {
      case 1:
      {
        add(&people);
        break;
      }
      case 2:
      {
        delete(&people);
        break;
      }
      case 3:
      {
        find(&people);
        break;
      }
      case 4:
      {
        modify(&people);
        break;
      }
      case 5:
      {
        show(&people);
        break;
      }
      case 6:
      {
        clear(&people);
        break;
      }
      default:
      {
        return 0;
        break;
      }
    }
  }
  return 0;
} 

这样就实现了一个简单的通讯录。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现餐饮点餐管理系统

    本文实例为大家分享了C语言实现餐饮点餐管理系统的具体代码,供大家参考,具体内容如下 具体代码如下 /* 项目名称:南航餐饮管理系统 组员:梁文新,刘青林,刘艺,施瑞文(组长) */ //当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员 //头文件 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<windows.h&g

  • C语言测试n的阶乘和x的n次方

    题目描述 输入一个正数x和一个正整数n,求下列算式的值.要求定义两个调用函数:fact(n)计算n的阶乘:mypow(x,n)计算x的n次幂(即xn),两个函数的返回值类型是double. ×输出保留4位小数. 输入 x n 输出 数列和 样例输入 2.0 3 样例输出 1.3333 答案 /************************************************************************* > File Name: 2.c > Author: &

  • 如何写出优美的C语言代码

    面向对象的语言更接近人的思维方式,而且在很大程度上降低了代码的复杂性,同时提高了代码的可读性和可维护性,传统的 C 代码同样可以设计出比较易读,易维护,复杂度较低的优美代码,本文将通过一个实际的例子来说明这一点. 基础知识 结构体 除了提供基本数据类型外,C 语言还提供给用户自己定制数据类型的能力,那就是结构体,在 C 语言中,你可以用结构体来表示任何实体.结构体正是面向对象语言中的类的概念的雏形,比如: typedef struct{ float x; float y; }Point; 定义了

  • C语言数组a和&a的区别讲解

    面试经典题目 #include "stdio.h" int main() { int a[5] = { 1,2,3,4,5 }; int *ptr = (int *)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); /*getchar是用VS编写方便查看输出*/ getchar(); return 0; } 请思考一下上面的输出结果,如果你非常自信了,可以不用往下看 题目剖析 这个题目主要考察&a 和 

  • C语言数组栈实现模板

    本文实例为大家分享了C语言数组栈实现模板的具体代码,供大家参考,具体内容如下 SeqStack.h #pragma once #define MAX_SIZE 1024 typedef struct SEQSTACK { void* data[MAX_SIZE]; int size; }SeqStack; SeqStack* Init_SeqStack(); // 初始化栈 void Push_SeqStack(SeqStack* stack, void* data); // 入栈 void*

  • C语言 实现N阶乘的程序代码

    代码如下所示: 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#define N 10 //算N的阶乘int main(){       //数组   1位 1!    int ary[N] = {1, 1};    int i, j;    for (i = 2; i <= N; i++)    {        //各个下标的阶乘,第0位下标是位数,所以从第1位开始        for (j = 1; j <= a

  • C语言实现翻译功能

    本文实例为大家分享了C语言实现翻译功能的具体代码,供大家参考,具体内容如下 #include<stdio.h> #define number 100 struct date { char chinese[30]; char English[30]; }a[number]; void copy(char *str1, char *str2, int counst)//将值赋给trans { int i = 0; if (str2 == ' ' || str2 == '\0') { return;

  • C语言实现病例管理系统

    本文实例为大家分享了C语言实现病例管理系统的具体代码,供大家参考,具体内容如下 通过十字交叉链表实现一个病例管理系统,可以查找.删除.更新信息. #include"stdio.h" #include"stdlib.h" #include"string.h" typedef struct hospital_info{ char dise_num[10]; /*病历编号*/ char ke[10]; /*门诊科别*/ char date[11]; /

  • C语言简单实现快速排序

    快速排序是一种不稳定排序,它的时间复杂度为O(n·lgn),最坏情况为O(n2):空间复杂度为O(n·lgn). 这种排序方式是对于冒泡排序的一种改进,它采用分治模式,将一趟排序的数据分割成独立的两部分,其中一组数据的每个值都小于另一组.每一趟在进行分类的同时实现排序. 其中每一趟的模式通过设置key当基准元素,key的选择可以是数据的第一个,也可以是数据的最后一个.这里以每次选取数据的第一个为例: 具体代码实现: #include<stdio.h> #define N 6 int fun(i

  • C语言实现简单翻译功能

    本文实例为大家分享了C语言实现翻译功能的具体代码,供大家参考,具体内容如下 题目描述:编写一个程序,依次输入英文与汉语拼音,输入两个" * "表示输入结束,再输入一段英语句子,打印出其对应汉语拼音. 要求:不得使用<string.h>头文件 题目中要求不得使用<string.h>提醒我们使用其中的函数来编写代码,不过函数的实现需要自己来思考,根据自己的需要可以调整原函数的功能.思路大致是:输入完毕后拿原结构体记录的英文内容与 a 中的单词逐个相比,若相同,则输出

  • C语言实现词法分析器

    问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法是忽略该字符(或单词)重新开始扫描. 相关词法规则 <标识符>::=<字母> <标识符>::=<标识符><字母> <标识符>::=<标识符><数字> <常量>::=<无符号整数> <无

随机推荐