C语言实现简易通讯录功能

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

这两天用C语言编写了一个简易版通讯录(学生信息管理) ,大致功能有添加信息查看信息(自动按姓名排序,printf输出带颜色字体),查找信息(按姓名查找),删除信息(输入姓名删除相关信息),修改信息(输入修改人的名字,可选择修改其任意信息)和退出

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 100
typedef struct student STU;
int person = 0;

struct student
{
  char name[10];
  int num;
  int age;
};

void welcome()
{
  system("clear");
  printf("\n\n\n\n\t\t\t========================================");
  printf("\n\n\t\t\t\t\tWelcome!\n");
  sleep(3);
}

void menu()
{
  system("clear");
  printf("\n\n\t************************************************************************");
  printf("\n\t\t\t\t\t请选择:");
  printf("\n\t\t\t\t\t1.添加信息");
  printf("\n\t\t\t\t\t2.查看信息");
  printf("\n\t\t\t\t\t3.查找信息");
  printf("\n\t\t\t\t\t4.删除信息");
  printf("\n\t\t\t\t\t5.修改信息");
  printf("\n\t\t\t\t\t6.退出");
  printf("\n\t************************************************************************");

}

/*添加信息*/
void AddInfo(STU *s[])
{
  system("clear");
  printf("姓名 学号 年龄\n");
  printf("------------------------\n");
  printf("请输入信息:(bye结束添加)\n");
  while(1)
  {
    s[person] = (STU*)malloc(sizeof(STU));
    if(NULL == s[person])
    {
      printf("malloc failure!\n");
    }
    scanf("%s", s[person]->name);
    if(!strcmp(s[person]->name, "bye"))
    {
      break;
    }
    scanf("%d%d", &s[person]->num, &s[person]->age);
    getchar();
    person++;
  }
}

/*查看信息(按姓名排序)*/
void ShowAll(STU *s[])
{
  system("clear");
  int i, j;
  STU *q[1] = {0};
  q[0] = (STU *)malloc(sizeof(STU));

  printf("information:\n");

  for(i = 0; i < person; i++)
  {
    for(j = 0; j < person - 1 - i; j++)
    {
      if(strcmp(s[j]->name, s[j + 1]->name) > 0)
      {
        q[0] = s[j];
        s[j] = s[j + 1];
        s[j + 1] = q[0];
      }
    }
  }

  for(i = 0; i < person; i++)
  {
    printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", s[i]->name, s[i]->num, s[i]->age);
  }
  sleep(3);
  getchar();
}

/*查找信息*/

void Search_name(char *name, STU *s[])
{
  int i, n = 0;
  for(i = 0; i < person; i++)
  {
    if(strcmp(name, s[i]->name) == 0)
    {
      n++;
      printf("name:%s, num:%d, age:%d\n", s[i]->name, s[i]->num, s[i]->age);
    }
  }

  if(n == 0)
  {
    printf("不存在!\n");
  }
}

void SearchInfo(STU *s[])
{
  system("clear");
  char *name = (char *)malloc(sizeof(char));

  printf("请输入要查找的人的名字:\n");
  scanf("%s", name);

  Search_name(name, s);
}

/*删除信息*/

void DeleteInfo(STU *s[])
{
  system("clear");
  int i, n = 0, j;
  char del_name[10];

  printf("请输入要删除的人的名字:\n");
  scanf("%s", del_name);
  getchar();
  getchar();

  for(i = 0; i < person; i++)
  {
    if(strcmp(del_name, s[i]->name) == 0)
    {
      n++;
      free(s[i]);
      for(j = i; j < person - 1; j++)
      {
        strcpy(s[j]->name, s[j + 1]->name);
        s[j]->num = s[j + 1]->num;
        s[j]->age = s[j + 1]->age;
      }
      person--;
    }
  }

  if(n == 0)
  {
    printf("要删除的人不存在!\n");
  }
  else
  {
    printf("删除成功!\n");
  }
}

/*修改信息*/
void Change_name(char *name, STU *s[])
{
  int i, n = 0, choice;
  char *new_name = (char *)malloc(sizeof(char));
  int new_num, new_age;

  for(i = 0; i < person; i++)
  {
    if(strcmp(name, s[i]->name) == 0)
    {
      n++;
      printf("该学生的信息如下:");
      printf("name:%s, num:%d, age:%d\n", s[i]->name, s[i]->num, s[i]->age);
      printf("----------------------------\n");
      printf("请选择要修改的内容(1.name 2.num 3.age):\n");
      scanf("%d", &choice);
      switch(choice)
      {
        case 1:
          printf("请输入新的名字:\n");
          scanf("%s", new_name);
          strcpy(s[i]->name, new_name);
          break;
        case 2:
          printf("请输入新的学号:\n");
          scanf("%d", &new_num);
          s[i]->num = new_num;
          break;
        case 3:
          printf("请输入新的年龄:\n");
          scanf("%d", &new_age);
          s[i]->age = new_age;
          break;
      }
    }
  }

  if(n == 0)
  {
    printf("不存在!\n");
  }
}

void ChangeInfo(STU *s[])
{
  system("clear");
  char *name = (char *)malloc(sizeof(char));

  printf("请输入要修改的人的名字:\n");
  scanf("%s", name);

  Change_name(name, s);

}

int main()
{
  struct student *s[SIZE] = {0};
  int choice;

  welcome();

  while(1)
  {
    menu();
    printf("\nPlease input choice:");
    scanf("%d", &choice);

    switch(choice)
    {
      case 1:
        AddInfo(s);
        break;
      case 2:
        ShowAll(s);
        break;
      case 3:
        SearchInfo(s);
        break;
      case 4:
        DeleteInfo(s);
        break;
      case 5:
        ChangeInfo(s);
        break;
      case 6:
        exit(0);
        break;
    }
  }

  return 0;
}

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

时间: 2020-06-25

C语言通讯录管理系统课程设计

本文实例为大家分享了C语言通讯录管理系统课程设计,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <windows.h> struct Sign{ char name[8]; char sex[4]; char birthday[12]; char phone[11]; char postcode[7]; char addr[30]; struct Sign *next; }pe; char Ph

C语言实现通讯录

本文实例为大家分享了C语言实现通讯录的具体代码,供大家参考,具体内容如下 实现的功能有: 1.初始化通讯录: 2. 通讯录中增加条目: 3. 删除通讯录中的指定条目: 4. 按指定规则查找通讯录中特定条目: 5. 打印通讯录中的所有信息: 6. 修改通讯录的指定条目: 7. 销毁通讯录: 8. 将通讯录内容保存在文件: 9. 将文件中的内容加载回内存. **Addr_Book.h** #pragma once #include <stddef.h> #include <stdio.h&g

基于C语言实现个人通讯录管理系统

之前利用C语言完成了一个关于个人通讯录管理系统的课题,主要是关于联系人的添加.查找.删除.修改.输出以及文件的写入与读出,还有一个甜点功能-模拟通话,它的实现原理也很容易理解,文章末尾会介绍到. 主框架: 1.函数声明 关于这里的函数声明,主要是为了可以清楚的了解整个系统的功能,这里不做过多介绍.还有结构体链表的创建,贯穿了各个功能代码部分,必不可少. 2.联系人的添加 这部分主要涉及联系人的姓名.地址.电话.QQ号和邮箱(当然需要其他功能可自行添加),考虑到数组操作不便前提下,使用链表的尾插法

C语言基于哈希表实现通讯录

本文为大家分享了C语言基于哈希表实现通讯录的具体代码,供大家参考,具体内容如下 1.需求分析 本演示程序用C语言编写,完成哈希表的生成,电话号码的插入.以及查找等功能. (1)按提示输入相应的联系人的相关资料: (2)以相应的输出形式输出所存储的的联系人的资料: (3)程序可以达到建立.添加.查找.打印的功能: (4)程序可以判断用户输入的非法数据并引导正确的输入. 2.概要设计 存储电话号码的记录时,若在存储位置和其关键字之间建立某种确定的对应关系使得每个关键字和存储结构中一个唯一的存储位置相

C语言实现通讯录功能

本文实例为大家分享了C语言实现通讯录功能的具体代码,供大家参考,具体内容如下 先定义头文件 #ifndef __CONTACT_H__ #define __CONTACT_H__ #define NAME_LEN 10 #define SEX_LEN 6 #define TELE_LEN 12 #define ADDR_LEN 20 #define MAX_PEO 1000 typedef struct PEO { char name[NAME_LEN]; int age; char sex[S

C语言实现个人通讯录管理系统

如何用c语言制作简易的个人通讯录管理系统?想必这是每一位初步学习c语言的同学需要解决的一个大问题.如何将这些数据类型不完全相同的数据元素存储并访问呢?采用结构体便能轻松解决这个问题! #include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h> struct stu //第一部分:声明结构体类型struct stu { char name[100];//姓名为字符串型

C语言实现简易通讯录

本文实例为大家分享了C语言实现简易通讯录的具体代码,供大家参考,具体内容如下 功能描述: 1.存储联系人的相关信息,包括姓名.性别.电话号码.备注 2.可输出通讯录全部信息 3.清空通讯录的 4.用户交互界面 5.插入新联系人信息 6.查找联系人,包括"按姓名查找"和"按电话号查找"两种 7.删除联系人,包括"按姓名删除"和"按电话号删除"两种 8.按性别筛选联系人信息 在本次通讯录的编写代码中,涉及到了C高级和数据结构的一些

C语言通讯录管理系统完整版

C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

利用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]; }; //定义人的信

C语言结构体(struct)常见使用方法(细节问题)

基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 struct stuff{ char job[20]; int age; float height; }; 第二种:附加该结构体类型的"结构体变量"的初始化的结构体定义 //直接带变量名Huqinwei struct stuff{ char job[20]; int age; floa

php读取二进制流(C语言结构体struct数据文件)的深入解析

尽管php是用C语言开发的,不过令我不解的是php没有提供对结构体struct的直接支持.不过php提供了pack和unpack函数,用来进行二进制数据(binary data)和php内部数据的互转: 复制代码 代码如下: string pack ( string $format [, mixed $args [, mixed $...]] )   //Pack given arguments into binary string according to format.  array unp

C语言 结构体(Struct)详解及示例代码

前面的教程中我们讲解了数组(Array),它是一组具有相同类型的数据的集合.但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放. 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{     结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可

Go语言结构体定义和使用方法

本文实例讲述了Go语言结构体定义和使用方法.分享给大家供大家参考.具体分析如下: 一个结构体(struct)就是一个字段的集合. (而 type 定义跟其字面意思相符.) 复制代码 代码如下: package main import "fmt" type Vertex struct {     X int     Y int } func main() {     fmt.Println(Vertex{1, 2}) } 结构体字段使用点号来访问. 复制代码 代码如下: package

C语言 结构体数组详解及示例代码

所谓结构体数组,是指数组中的每个元素都是一个结构体.在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生.一个车间的职工等. 定义结构体数组和定义结构体变量的方式类似,请看下面的例子: struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 }class[5]; 表示一个班级有5个学生. 结构体数组在定义的同时也可以初始化,例如: str

C语言结构体定义的方法汇总

什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问. 结构体与数组的比较 (1) 都由多个元素组成 (2) 各个元素在内存中的存储空间是连续的 (3) 数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同 结

C语言结构体数组同时赋值的另类用法

说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include <stdio.h> struct student { int a; int b ; int c ; }; struct student array1[1000] ; int main(void) { int i ; for(i = 0 ; i < 1000 ; i++) { array[i].a = 1 ; array[i].b = 2 ; array[i].c = 3 ; } fo

详解C语言结构体中的函数指针

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的. 函数指针 函数类型 (*指针变量名)(形参列表):第一个括号一定不能少. "函数类型"说明函数的返回类型,由于"()"的优先级高于"*",所以指针变量名外的括号必不可少.  注意指针函数与函数指针表示

C语言 结构体和指针详解及简单示例

指针也可以指向一个结构体,定义的形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1 = { "Tom", 12, 18, 'A', 136.5 }; //结构体指针struct stu *pstu = &stu1; 也可以在定义结构体的同时定义结构