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

 更新时间:2020年06月28日 17:12:54   作者:查心妍  
这篇文章主要为大家详细介绍了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;
}

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

相关文章

  • 深入解析Radix Sort基数排序算法思想及C语言实现示例

    深入解析Radix Sort基数排序算法思想及C语言实现示例

    基数排序和桶排序、计数排序共同是三种最常用的线性排序算法,这里我们就来深入解析Radix Sort基数排序算法思想及C语言实现示例,需要的朋友可以参考下
    2016-07-07
  • C语言计算大数相加的方法

    C语言计算大数相加的方法

    这篇文章主要为大家详细介绍了C语言计算大数相加的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • CMake语法及CMakeList.txt简单使用小结

    CMake语法及CMakeList.txt简单使用小结

    Cmake主要用于开发跨平台的C++项目,本文主要介绍了CMake语法及CMakeList.txt简单使用小结,具有一定的参考价值,感兴趣的可以了解一下
    2022-05-05
  • C/C++判断传入的UTC时间是否当天的实现方法

    C/C++判断传入的UTC时间是否当天的实现方法

    在项目中经常会显示一个时间,如果这个时间在今日内就显示为时分秒,否则显示为年月日,有需要的朋友可以参考一下
    2014-01-01
  • C语言实现简单的扫雷小游戏

    C语言实现简单的扫雷小游戏

    这篇文章主要为大家详细介绍了C语言实现简单的扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • C++设计模式中控制反转与依赖注入浅析

    C++设计模式中控制反转与依赖注入浅析

    这篇文章主要介绍了C++设计模式中控制反转与依赖注入,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • C/C++之long int与long long的区别及说明

    C/C++之long int与long long的区别及说明

    这篇文章主要介绍了C/C++之long int与long long的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C++内存管理详解使用方式

    C++内存管理详解使用方式

    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能更大的自由,C++菜鸟的收获则是一遍—遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,要想成为C++高手,内存管理这关是必须过的
    2022-04-04
  • C语言实现飞机票务系统

    C语言实现飞机票务系统

    这篇文章主要为大家详细介绍了C语言实现飞机票务系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C语言用指针函数寻找数组中的最大值与次大值

    C语言用指针函数寻找数组中的最大值与次大值

    这篇文章主要给大家介绍了关于C语言用指针函数寻找数组中的最大值与次大值的相关资料,该代码通过定义一个名为LargestTow的函数来找出数组中的最大值和次大值,并将结果分别存入指针所指向的内存单元中,需要的朋友可以参考下
    2024-11-11

最新评论