C語言基於單鏈表實現通訊錄功能

本文實例為大傢分享瞭C語言基於單鏈表實現通訊錄功能的具體代碼,供大傢參考,具體內容如下

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996);//解決VS報嚴重性代碼錯誤
typedef struct LNode
{
 char name[20];
 double ph_number;
 struct LNode* next;
}LinkNode;

//創建通訊錄 
LNode* CreateList(LNode*& L)
{
 LNode* s, * r;
 int n;
 L = (LNode*)malloc(sizeof(LNode));
 r = L;

 printf("請輸入要創建聯系人的個數:");
 scanf("%d", &n);
 printf("\n");

 for (int i = 0; i < n; i++)
 {
  s = (LNode*)malloc(sizeof(LNode));

  printf("請輸入第%d個聯系人的姓名,電話:\n", i + 1);
  scanf("%s%lf", &s->name, &s->ph_number);
  printf("\n");

  r->next = s;
  r = s;
 }
 r->next = NULL;
 return L;
}

//添加聯系人 
void ListInsert(LNode*& L)
{
 LNode* new_s, * r = L;
 while (r->next != NULL)
 {
  r = r->next;
 }
 new_s = (LNode*)malloc(sizeof(LNode));

 printf("請輸入要添加的聯系人的姓名,電話:\n");
 scanf("%s%lf", &new_s->name, &new_s->ph_number);
 printf("\n");

 r->next = new_s;
 r = new_s;
 r->next = NULL;
}

//查找聯系人 
bool Locate(LNode*& L)
{
 LNode* p = L->next;
 char name_[20];

 printf("請輸入要查找的聯系人的姓名:\n");
 scanf("%s", &name_);
 printf("\n");

 while (p != NULL && strcmp(p->name, name_) != 0)//註意判斷條件
 {
  p = p->next;
 }
 if (p == NULL) return false;
 else return true;
}

//修改聯系人 
bool ModifyList(LNode*& L)
{
 LNode* p = L;
 char name_[20];
 double ph_number_;

 printf("請輸入要修改的聯系人的姓名:\n");
 scanf("%s", name_);
 printf("\n");

 while (p != NULL && strcmp(p->name, name_) != 0)//註意判斷條件
 {
  p = p->next;
 }
 if (p == NULL) return false;
 else {
  printf("請輸入修改後的電話號碼為:\n");
  scanf("%lf", &ph_number_);
  printf("\n");
  p->ph_number = ph_number_;
  return true;
 }
}

//刪除聯系人 
bool ListDelete(LNode*& L)
{
 LNode* p = L->next, * q = L;
 char name_[20];

 printf("請輸入要刪除聯系人的姓名:\n");
 scanf("%s", name_);
 printf("\n");

 while (p != NULL && strcmp(p->name, name_) != 0)//註意判斷條件
 {
  p = p->next;
  q = q->next;
 }
 if (p == NULL)
  return false;
 else {
  q->next = q->next->next;
  free(p);
  return true;
 }
}

//加載通訊錄 
void DispList(LNode* L)
{
 int i = 0;
 LNode* p = L->next;
 while (p != NULL)
 {
  printf("姓名:%s  電話:%.0lf\n", p->name, p->ph_number);
  p = p->next;
  i++;
 }
}

int main()
{
 printf("*****************************************\n");
 printf("*                                       *\n");
 printf("*            1:添加聯系人              *\n");
 printf("*                                       *\n");
 printf("*            2: 查找聯系人              *\n");
 printf("*                                       *\n");
 printf("*            3: 修改聯系人              *\n");
 printf("*                                       *\n");
 printf("*            4: 刪除聯系人              *\n");
 printf("*                                       *\n");
 printf("*            5: 加載通訊錄              *\n");
 printf("*                                       *\n");
 printf("*****************************************\n");
 printf("\n");

 LNode* L = CreateList(L);
 int operand;
 printf("\n");
 for (int i = 0; i < 5; i++)
 {
  printf("請輸入您要執行操作的操作數:\n");
  scanf("%d", &operand);
  switch (operand)
  {
  case 1:
   ListInsert(L);
   break;
  case 2:
   if (Locate(L) == 1) {
    printf("找到該聯系人\n");
    printf("\n");
    break;
   }
   else {
    printf("未找到改聯系人\n");
    printf("\n");
    break;
   }
  case 3:
   if (ModifyList(L) == 1) {
    printf("修改成功\n");
    printf("\n");
    break;
   }
   else {
    printf("修改失敗\n");
    printf("\n");
    break;
   }
  case 4:
   if (ListDelete(L) == 1) {
    printf("刪除成功\n");
    printf("\n");
    break;
   }
   else {
    printf("刪除失敗\n");
    printf("\n");
    break;
   }
  case 5:
   DispList(L);
   break;
  default:
   printf("ERROR!!!\n");
  }
 }
 return 0;
}

運行截圖

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: