通讯录项目

首先我们的 通讯录包括4条用户信息
  1. ID
  2. 姓名
  3. 电话
  4. 地址

我们的对 通讯录的操作包括
  1. 增加一条用户信息
  2. 删除一条用户信息
  3. 查找用户信息(模糊匹配)
  4. 修改一条用户信息:输入姓名修改地址和电话
  5. 打印通讯录的全部用户信息
  6. 退出通讯录系统


我们用以 保存用户信息的就是我们的链表

接下来我们先来看一下头文件
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
typedef struct Node
{
  char id[20];//编号
  char name[50];//姓名
  char addres[50];//地址
  char number[50];//电话号码
  struct Node *next;
}Node;


void show();//打印主界面
void list_print(Node *node);//打印所有的链表里的用户信息
void list_init(Node *node);//链表的初始化
int add_list(Node*node);//增加一个用户信息
int search_list(Node *node,int *flag);//查找用户信息
int change_list(Node *node,int *flag);//修改用户信息
int delect_node(Node *node);//删除一条用户信息



然后我们再来看一下主函数了解一下我们整个项目的结构
int main()
{
  Node node;
  list_init(&node);
  show();
  while(1)
  {
    int n;
    Print();
    printf("输入您的选择:");
    scanf("%d",&n);
    switch(n)
    {
      case 1:
        {
          int ret = add_node(&node);
          if(ret == 1)
          {
            //清屏
            system("clear");
            printf("*********************************添加成功!******************************\n");
            printf("******************************3秒后返回主界面****************************\n");
            sleep(3);
          }
          system("clear");
        }
        break;
      case 2:
        {
          list_print(&node);
          system("clear");
          break;
        }
      case 3:
        {
          int flag;
          //char enter[10];
          int ret = search_list(&node,&flag);
          if(ret == 0)
          {
            printf("*************************查无此人     查找失败*************************\n");
          }
          system("clear");
          break;
        }
      case 4:
        {
          int flag;
          int ret = change_list(&node,&flag);
          if(ret == 1)
          {
            printf("*****************************修改成功************************************\n");
          }
          else
          {
            printf("******************************查无此人***********************************\n");
          }
          printf("*************************3秒后返回退出系统*******************************\n");
          sleep(3);
          system("clear");
          break;
        }
      case 5:
        {
          int ret = delect_node(&node);
          if(ret == 1)
          {
            printf("*****************************删除成功************************************\n");
          }
          else
          {
            printf("*****************************查无此人************************************\n");
          }
          printf("****************************3秒后返回主界面********************************\n");
          sleep(3);
          break;
        }

      case 6:
        {
          printf("****************************3秒后退出系统**********************************\n");
          sleep(3);
          exit(0);
        }
      default:
        printf("输入错误,请重新输入!\n");
        break;
    }
  }
  return 0;
}

整个的项目构造是通过switch的选择来实现的,接下来就是针对链表的增删查改还有打印链表,然后就加一个界面即可





接下来是我们的各个具体的函数,函数其实都很简答,就是整体的建构的自己梳理梳理
#include"addres.h"
void show()
{
  char enter[10];
  system("clear");
  printf("**************************************欢迎进入通讯录*******************************\n");
  printf("*************************************按Enter键进入菜单*****************************\n");
  fgets(enter,2,stdin);
  if(enter[0] == '\n')
  {
    system("clear");
  }
}

void Print()
{
  printf("********************1.添加用户信息     2.列出用户信息**********************\n");
  printf("********************3.查找用户信息     4.修改用户信息**********************\n");
  printf("********************5.删除用户信息     6.退出系统**************************\n");
}
void list_init(Node *node)
{
  if(node == NULL)
  {
    return;
  }
  node->next = NULL;
}
int add_node(Node *node)
{
  Node *new_node = (Node *)malloc(sizeof(Node));
  Node *cur = node->next;
  

  printf("请输入用户id:");
  scanf("%s",new_node->id);
  getchar();
  
  while(cur != NULL)
  {
    if(strcmp(cur->id,new_node->id) == 0)
    {
      printf("用户id重复,请重新输入:");
      scanf("%s",new_node->id);
      getchar();
      continue;
    }
    cur = cur->next;
  }
  printf("录入id成功!\n");


  printf("请输入用户姓名:");
  scanf("%s",new_node->name);
  getchar();
  cur = node->next;
  while(cur != NULL)
  {
    if(strcmp(cur->name ,new_node->name) == 0)
    {
      printf("用户姓名重复,请重新输入:");
      scanf("%s",new_node->name);
      getchar();
      continue;
    }
    cur = cur->next;
  }
  printf("录入姓名成功!\n");


  printf("请输入用户电话号码:");
  scanf("%s",new_node->number);
  getchar();
  if(strlen(new_node->number) != 11)
  {
    printf("输入电话格式错误,请重新输入:");
    scanf("%s",new_node->number);
    getchar();
  }
  cur = node->next;
  while(cur != NULL)
  {
    if(strcmp(cur->number,new_node->number) == 0)
    {
      printf("电话号码重复,请重新输入:");
      scanf("%s",new_node->number);
      getchar();
    }
    cur = cur->next;
  }

  printf("请输入用户地址:");
  scanf("%s",new_node->addres);
  getchar();

  if(node->next == NULL)
  {
    node->next = new_node;
    new_node->next = NULL;
  }

  cur = node->next;
  while(cur->next != NULL)
  {
    cur = cur->next;
  }
  cur->next = new_node;
  new_node->next = NULL;

  return 1;
}
void list_print(Node *node)
{
  system("clear");
  char enter[10];
  Node *cur = node->next;
  printf("*************************************************************************************\n");
  printf("id                        姓名                     电话号码                     地址 \n");
  while(cur != NULL)
  {
    printf("%s                     %s                          %s                         %s\n",
          cur->id,cur->name,cur->number,cur->addres);
    cur = cur->next;
  }
  printf("请输入q返回主界面:");
  fgets(enter,2,stdin);
  if(enter[0] == 'q')
  {
    system("clear");
  }
}

//查找用户
int search_list(Node *node,int *flag)
{
  while(1)
  {
    system("clear");
    printf("***********************************1.按id查找************************************\n");
    printf("***********************************2.按姓名查找**********************************\n");
    printf("***********************************3.按电话号码查找******************************\n");

    int n;
    Node *cur = node->next;
    scanf("%d",&n);
    getchar();

    switch(n)
    {
      case 1:
        {
          printf("请输入要查找用户的id:");
          char enter[10];
          scanf("%s",enter);
          getchar();
          while(cur != NULL)
          {
            if(strstr(cur->id,enter) != NULL)
            {
              printf("%s                     %s                          %s                     %s                          \n",cur->id,cur->name,cur->number,cur->addres);
              *flag = 1;
            }
            cur = cur->next;
          }

          printf("输入q返回主界面:");
          char a[2];
          fgets(a,2,stdin);
          if(a[0] == 'q')
          {
            if(*flag == 1)
            {
              return 1;
            }
            return 0;
          }
        
        }
      case 2:
        {
          printf("请输入要查找用户的姓名:");
          char enter2[10];
          cur = node->next;
          scanf("%s",enter2);
          getchar();
          while(cur != NULL)
          {
            if(strstr(cur->name,enter2) != NULL)
            {
             printf("%s                     %s                          %s                     %s                          \n",cur->id,cur->name,cur->number,cur->addres);
              *flag = 1;
            }
            cur = cur->next;
          }
          printf("输入q返回主界面:");
          char a[2];
          fgets(a,2,stdin);
          if(a[0] == 'q')
          {
            if(*flag == 1)
            {
              return 1;
            }
            return 0;
          }
        }
       
      case 3:
        {
          printf("请输入要查找用户的电话号码:");
          char enter3[10];
          cur = node->next;
          scanf("%s",enter3);
          getchar();
          while(cur != NULL)
          {
            if(strstr(cur->number,enter3) != NULL)
            {
              printf("%s                     %s                          %s                      %s                          \n",cur->id,cur->name,cur->number,cur->addres);
              *flag = 1;
            }
            cur = cur->next;
          }
          printf("输入q返回主界面:");
          char a[2];
          fgets(a,2,stdin);
          if(a[0] == 'q')
          {
            if(*flag == 1)
            {
              return 1;
            }
            return 0;
          }
        }
       
      default:
        printf("输入错误请重新输入:");
        system("clear");
        continue;
    }
  }
  if(*flag == 1)
  {
    return 1;
  }
  return 0;
}
int change_list(Node *node,int *flag)
{
  char enter[10];
  int n;
  Node *cur = node->next;
  printf("*******************************1.修改电话号码*********************************\n");
  printf("*******************************2.修改地址*************************************\n");
  printf("请选择:");
  scanf("%d",&n);
  getchar();

  printf("请输入你要修改的用户姓名:");
  scanf("%s",enter);
  getchar();


  while(cur != NULL)
  {
    if(strcmp(cur->name,enter) == 0)
    {
      *flag = 1;

      switch(n)
      {
        case 1:
          {
            printf("请输入新的电话号码:");
            scanf("%s",cur->number);
            getchar();
            printf("*******************************修改成功*********************************\n");

            break;
          }
        case 2:
          {
            printf("请输入新的地址:");
            scanf("%s",cur->addres);
            getchar();
            printf("*******************************修改成功*********************************\n");

            break;
          }
        default:
          break;
      }
    }
    cur = cur->next;
  }//endofwhile

  if(*flag == 1)
  {
    return 1;
  }
  return 0;

}

int delect_node(Node *node)
{
  system("clear");
  char enter[10];
  int flag;
  Node *cur = node->next;
  printf("请输入要删除用户的姓名:");
  scanf("%s",enter);
  getchar();

  while(cur != NULL)
  {
    if(strcmp(cur->name,enter) == 0)
    {
      Node *to_delect = cur;
      Node *to_delect_next = cur->next;

      cur = to_delect_next;
      free(to_delect);

      flag = 1;
    }
    cur = cur->next;
  }

  if(flag == 1)
  {
    return 1;
  }

  return 0;
}

这是程序运行的几张截图



代码已提交到码云 https://gitee.com/zmmya/addres

猜你喜欢

转载自blog.csdn.net/qq_36767247/article/details/80643002