溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

發(fā)布時間:2020-10-18 14:52:32 來源:網(wǎng)絡(luò) 閱讀:513 作者:蕭海霞學(xué)編程 欄目:編程語言

       不是有一句話叫做學(xué)生給學(xué)生當(dāng)老師,學(xué)生最容易聽懂明白嗎?沒錯,我這個菜鳥給你講講這個通訊錄項目的實現(xiàn),讓你更能清楚明白其中的奧秘。

       這個代碼沒有經(jīng)過過多的優(yōu)化,只是為了代碼能夠讓更多的人讀懂,所以也不是最好的代碼,你們可以理解了以后自己去做做優(yōu)化。

      代碼用的知識就是C語言中最基本的操作。

 

項目要求:

 

實現(xiàn)一個通訊錄;

 

通訊錄可以用來存儲1000個人的信息,每個人的信息包括:

 

姓名、性別、年齡、電話、住址


提供方法:

 

1. 添加聯(lián)系人信息

 

2. 刪除指定聯(lián)系人信息

 

3. 查找指定聯(lián)系人信息

 

4. 修改指定聯(lián)系人信息

 

5. 顯示所有聯(lián)系人信息

 

6. 清空所有聯(lián)系人

 

7. 以名字排序所有聯(lián)系人

 


 

代碼實現(xiàn):

AddRess.h

 

#ifndef __ADDRESS_H__
#define __ADDRESS_H__
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define  MAX 10     //這里我為了調(diào)試方便取了一個較小的數(shù)值
enum OP
{
 EXIT = 0,//退出
 ADD,     //增加聯(lián)系人
 DEL,     //刪除聯(lián)系人
 SEEK,    //查找聯(lián)系人
 REVISE,  //修改聯(lián)系人
 SHOW,    //顯示所有聯(lián)系人
 EMPTY,   //清空所有聯(lián)系人
 SORT,    //以名字排序所有聯(lián)系人
};
//姓名、性別、年齡、電話、住址
typedef struct PesonMessage
{
 char name[20];
 char sex[5];
 int age;
 char tel[15];
 char address[20];
}PesonMessage;
//通訊錄成員結(jié)構(gòu)體;
typedef struct Peson
{
 PesonMessage people[MAX];
 int size;
}Peson,*pPeson;
void Print_AddRess();
void Add_AddRess(pPeson peson);
void Show_AddRess(pPeson peson);
void Empty_AddRess(pPeson peson);
void Del_AddRess(pPeson peson);
void Seek_AddRess(pPeson peson);
void Revise_AddRess(pPeson peson);
void Sort_AddRess(pPeson peson);
void Cheak(pPeson peson);
#endif//__ADDRESS_H__

 

 

AddRess.c

 

#define _CRT_SECURE_NO_WARNINGS 1
#include "AddRess.h"
void Print_AddRess()
{
 printf("**************************\n");//輸出的時候要保證屏幕上干凈整齊
 printf("*****0.   退出系統(tǒng)   *****\n");//讓別人有讀下去的興趣
 printf("*****1.添加聯(lián)系人信息*****\n");
 printf("*****2.刪除聯(lián)系人信息*****\n");
 printf("*****3.查找聯(lián)系人信息*****\n");
 printf("*****4.修改聯(lián)系人信息*****\n");
 printf("*****5.顯示聯(lián)系人信息*****\n");
 printf("*****6.清空所有聯(lián)系人*****\n");
 printf("*****7.名字排序聯(lián)系人*****\n");
 printf("**************************\n");
}
void Add_AddRess(pPeson peson)
{
 assert(peson);//斷言指針是否有效
 if(peson->size < MAX)//判斷peson->size是否合法
 {
  //簡單的輸入輸出
  printf("添加聯(lián)系人信息\n");//姓名、性別、年齡、電話、住址
  printf("請輸入聯(lián)系人姓名:\n");
  scanf("%s",&(peson->people[peson->size].name));
  printf("請輸入聯(lián)系人的性別:\n");
  scanf("%s",&(peson->people[peson->size].sex));
  printf("請輸入聯(lián)系人的年齡:\n");
  scanf("%d",&(peson->people[peson->size].age)); 
  printf("請輸入聯(lián)系人的電話:\n");
  scanf("%s",&(peson->people[peson->size].tel));
  printf("請輸入聯(lián)系人的住址:\n");
  scanf("%s",&(peson->people[peson->size].address));
  peson->size++;//每次增加一個聯(lián)系人,有效的size都要+1
 }
 else
 {
  printf("通訊錄已滿\n");//如果peson->size >= MAX
 }
}
void Show_AddRess(pPeson peson)
{
 int i = 0;
 assert(peson);//斷言指針是否有效
 printf("%5s\t","name");//%Xs  的方式使字符串從最右邊開始打印對齊  X可是是隨意的值,這里的取了一個較小的數(shù)字
 printf("%5s\t","sex");
 printf("%5s\t","age");
 printf("%5s\t","tel");
 printf("%5s\t","address");
 printf("\n");
 for (i = 0;i <peson->size;i++)
 {
  printf("%5s\t",peson->people[i].name);
  printf("%5s\t",peson->people[i].sex);
  printf("%5d\t",peson->people[i].age);
  printf("%5s\t",peson->people[i].tel);
  printf("%5s\t",peson->people[i].address);
  printf("\n");
 }
}
void Empty_AddRess(pPeson peson)
{
 assert(peson);//斷言指針是否有效
 peson->size = 0;
}
void Del_AddRess(pPeson peson)
{
 char name[20] = {0};
 int i = 0;
 assert(peson);//斷言指針是否有效
 if (peson->size == 0)
 {
  printf("通訊錄已空\n");
 }
 printf("請輸入需要刪除聯(lián)系人的姓名");
 scanf("%s",&name);
 for (i = 0;i < peson->size; i++)
 {
  if (strcmp(name,peson->people[i].name) == 0)//判斷輸入的姓名和通訊錄的姓名是否一致
  {
   for (;i < peson->size;i++)
   {
    peson->people[i] = peson->people[i + 1];//發(fā)現(xiàn)一致的名字后,從當(dāng)前下標(biāo)的后一個下標(biāo)的所有有效值賦值給前一個
   }                                           //覆蓋掉需要刪除的值,注意這里不能從最后一個有效值開始往前賦值,會丟失數(shù)據(jù)的
   peson->size--;//每次刪除一個數(shù)據(jù),有效size要減掉一個
  } 
 }
 if (i == peson->size)
 {
  printf("對不起,找不到您所要刪除的聯(lián)系人\n");
 }
}
void Seek_AddRess(pPeson peson)
{
 char name[20] = {0};
 int i = 0;
 assert(peson);//斷言指針是否有效
 if (peson->size == 0)
 {
  printf("通訊錄已空\n");
 }
 printf("請輸入需要查找聯(lián)系人的姓名");
 scanf("%s",&name);
 for (i = 0;i < peson->size; i++)
 {
  if (strcmp(name,peson->people[i].name) == 0)
  {
   printf("%5s\t","name");
   printf("%5s\t","sex");
   printf("%5s\t","age");
   printf("%5s\t","tel");
   printf("%5s\t","address");
   printf("\n");
   printf("%5s\t",peson->people[i].name);
   printf("%5s\t",peson->people[i].sex);
   printf("%5d\t",peson->people[i].age);
   printf("%5s\t",peson->people[i].tel);
   printf("%5s\t",peson->people[i].address);
   printf("\n");
  } 
 }
}
void Revise_AddRess(pPeson peson)
{
 char name[20] = {0};
 char Char_Tmp[20] = {0};
 int Int_Tmp = 0;
 int i = 0;
 int num = 0;
 assert(peson);//斷言指針是否有效
 if (peson->size == 0)
 {
  printf("通訊錄已空\n");
 }
 printf("請輸入需要修改的聯(lián)系人的姓名");
 scanf("%s",&name);
 for (i = 0;i < peson->size; i++)
 {
  if (strcmp(name,peson->people[i].name) == 0)
  {
   printf("1.name\n");
   printf("2.sex\n");
   printf("3.age\n");
   printf("4.tel\n");
   printf("5.address\n");
   printf("請輸入需要修改的對應(yīng)序號:\n");
   scanf("%d",&num);
   switch (num)
   {
   case 1:
    printf("請輸入聯(lián)系人姓名\n");
    scanf("%s",&Char_Tmp);
    strcpy(peson->people[i].name,Char_Tmp);
    break;
   case 2:
    printf("請輸入聯(lián)系人性別\n");
    scanf("%s",&Char_Tmp);
    strcpy(peson->people[i].sex,Char_Tmp);
    break;
   case 3:
    printf("請輸入聯(lián)系人年齡\n");
    scanf("%d",&Int_Tmp);
    peson->people[i].age = Int_Tmp;
    break;
   case 4:
    printf("請輸入聯(lián)系人電話\n");
    scanf("%s",&Char_Tmp);
    strcpy(peson->people[i].tel,Char_Tmp);
    break;
   case 5:
    printf("請輸入聯(lián)系人住址\n");
    scanf("%s",&Char_Tmp);
    strcpy(peson->people[i].address,Char_Tmp);
    break;
   default:
    printf("對不起,輸入錯誤\n");
    break;
   }
  } 
 }
}
void Sort_AddRess(pPeson peson)//冒泡排序
{
 char name[20] = {0};
 int i = 0;
 int j = 0;
 PesonMessage tmp;
 assert(peson);//斷言指針是否有效
 if (peson->size == 0)
 {
  printf("通訊錄已空\n");
 }
 for (i = 0; i < peson->size-1; i++)//排序的趟數(shù)
 {
  for (j = 0;j < peson->size - i - 1;j++)//比較的個數(shù)
  {
   if (strcmp(peson->people[j].name,peson->people[j + 1].name) < 0)
   {
    //strcpy(tmp,peson->people[j].name);    //剛開始欠缺考慮只是交換了兩組姓名而已
    //strcpy(peson->people[j].name,peson->people[j + 1].name);
    //strcpy(peson->people[j + 1].name,tmp);
    tmp = peson->people[j];
    peson->people[j] = peson->people[j+1];
    peson->people[j+1] = tmp;
   }
  }
 }
}
void Cheak(pPeson peson)
{
 int index = 0;
 while(1)
 {
  Print_AddRess();
  printf("請選擇:\n");
  scanf("%d",&index);
  switch(index)
  {
  case EXIT:
   exit(0);
   break;
  case ADD:
   Add_AddRess(peson);
   break;
  case DEL:
   Del_AddRess(peson);
   break;
  case SEEK:
   Seek_AddRess(peson);
   break;
  case REVISE:
   Revise_AddRess(peson);
   break;
  case SHOW:
   Show_AddRess(peson);
   break;
  case EMPTY:
   Empty_AddRess(peson);
   break;
  case SORT:
   Sort_AddRess(peson);
   break;
  default:
   printf("輸入有誤\n");
   break;
  }
 }
}

 

 

test.c

 

#define _CRT_SECURE_NO_WARNINGS 1

#include "AddRess.h"

int main()

{

 Peson peson;

 peson.size = 0;

 Cheak(&peson);

 system("pause");

 return 0;

}

 

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

菜鳥如何快速理解實現(xiàn)通訊錄——靜態(tài)方法

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI