C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易通訊錄
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易通訊錄的具體代碼,供大家參考,具體內(nèi)容如下
功能描述:
1、存儲(chǔ)聯(lián)系人的相關(guān)信息,包括姓名、性別、電話號(hào)碼、備注
2、可輸出通訊錄全部信息
3、清空通訊錄的
4、用戶交互界面
5、插入新聯(lián)系人信息
6、查找聯(lián)系人,包括“按姓名查找”和“按電話號(hào)查找”兩種
7、刪除聯(lián)系人,包括“按姓名刪除”和“按電話號(hào)刪除”兩種
8、按性別篩選聯(lián)系人信息
在本次通訊錄的編寫(xiě)代碼中,涉及到了C高級(jí)和數(shù)據(jù)結(jié)構(gòu)的一些知識(shí),包括指針,結(jié)構(gòu)體,數(shù)據(jù)結(jié)構(gòu)(鏈表)等。
代碼:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 20
#define OK 1
#define Error 0
typedef struct Node //定義一個(gè)存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)體
{
char name[SIZE];
char s;
long int number;
char remark[SIZE];
struct Node *next;
}Node;
typedef struct Node *LinkList; //定義了結(jié)構(gòu)體指針
/************創(chuàng)建一個(gè)空的結(jié)點(diǎn),作為頭結(jié)點(diǎn)***************/
LinkList CreateEmptyLinkList()
{
LinkList p;
p=(LinkList)malloc(sizeof(Node)); //手動(dòng)申請(qǐng)一個(gè)堆區(qū)的地址,為結(jié)點(diǎn)提供空間
if(p==NULL)
{
printf("CreateEmptyLinkList Error\n");
exit(0);
}
p->next=NULL;
return p;
}
/************頭插法添加新的聯(lián)系人************************/
int CreateLinkList(LinkList Q)
{
LinkList p;
char name[SIZE],s,remark[SIZE];
long int num;
p=(LinkList)malloc(sizeof(Node));
if(p==NULL)
{
printf("CreateLinkList Error\n");
return Error;
}
printf("請(qǐng)輸入姓名:");
scanf("%s",name);
strcpy(p->name,name);
printf("請(qǐng)輸入性別(m/男,f/女):");
scanf("%s",&s);
while(s!='m'&&s!='f')
{
printf("輸入錯(cuò)誤\n");
printf("請(qǐng)輸入性別(m/男,f/女):");
scanf("%s",&s);
}
printf("請(qǐng)輸入電話號(hào)碼:");
scanf("%ld",&num);
printf("請(qǐng)輸入備注:");
scanf("%s",remark);
p->s=s;
p->number=num;
strcpy(p->remark,remark);
p->next=Q->next;
Q->next=p;
return OK;
}
/*********************制作原始聯(lián)系人信息****************/
int FirstCreateLinkList(LinkList Q)
{
LinkList x,y,z;
x=(LinkList)malloc(sizeof(Node));
if(x==NULL)
{
printf("CreateLinkList Error\n");
return Error;
}
strcpy(x->name,"LiLi");
x->s='f';
x->number=10110;
x->next=Q->next;
strcpy(x->remark,"LiLi");
Q->next=x;
y=(LinkList)malloc(sizeof(Node));
if(y==NULL)
{
printf("CreateLinkList Error\n");
return Error;
}
strcpy(y->name,"NaNa");
y->s='f';
y->number=11100;
strcpy(y->remark,"NaNa");
y->next=Q->next;
Q->next=y;
z=(LinkList)malloc(sizeof(Node));
if(z==NULL)
{
printf("CreateLinkList Error\n");
return Error;
}
strcpy(z->name,"LiuLiu");
z->s='m';
z->number=10000;
strcpy(z->remark,"LiuLiu");
z->next=Q->next;
Q->next=z;
return OK;
}
/*****************按姓名刪除一個(gè)聯(lián)系人****************************/
int DeleteNameLinkList(LinkList L,char name1[SIZE])
{
LinkList p,q;
p=L;
while(p->next && strcmp(p->next->name,name1))
{
p=p->next;
}
if(!p->next)
{
printf("該通訊錄沒(méi)有要?jiǎng)h除的聯(lián)系人,刪除失敗!\n");
return Error;
}
else
{
q=p->next;
printf("已刪除聯(lián)系人:\n");
printf("姓名:%s\n",q->name);
if(q->s=='m')
printf("性別:男\(zhòng)n");
else
printf("性別:女\n");
printf("電話號(hào)碼:%ld\n",q->number);
printf("備注:%s\n",q->remark);
p->next=q->next;
free(q);
return OK;
}
}
/*****************按號(hào)碼刪除一個(gè)聯(lián)系人****************************/
int DeleteNumLinkList(LinkList L,long int j)
{
LinkList p,q;
p=L;
while((p->next->number!=j)&&((p->next)!=NULL))
{
p=p->next;
if((p->next)==NULL)
{
printf("該通訊錄沒(méi)有要?jiǎng)h除的聯(lián)系人,刪除失?。n");
return Error;
}
}
q=p->next;
printf("已刪除聯(lián)系人:\n");
printf("姓名:%s\n",q->name);
if(q->s=='m')
printf("性別:男\(zhòng)n");
else
printf("性別:女\n");
printf("電話號(hào)碼:%ld\n",q->number);
printf("備注:%s\n",q->remark);
p->next=q->next;
free(q);
return OK;
}
/******************按姓名查找一個(gè)聯(lián)系人****************************/
int FindNameLinkList(LinkList L,char name2[SIZE])
{
LinkList p,q;
p=L;
while(strcmp(p->next->name,name2)!=0&&(p->next!=NULL))
{
p=p->next;
if(p->next==NULL)
{
printf("該通訊錄沒(méi)有您要找的人,查找失敗\n");
return Error;
}
}
q=p->next;
printf("找到記錄:\n");
printf("姓名:%s\n",q->name);
if(q->s=='m')
printf("性別:男\(zhòng)n");
else
printf("性別:女\n");
printf("電話號(hào)碼:%ld\n",q->number);
printf("備注:%s\n",q->remark);
printf("*********************************\n");
return OK;
}
/******************按號(hào)碼查找一個(gè)聯(lián)系人****************************/
int FindNumLinkList(LinkList L,long int j)
{
LinkList p,q;
p=L;
while((p->next->number!=j)&&((p->next)!=NULL))
{
p=p->next;
if((p->next)==NULL)
{
printf("該通訊錄沒(méi)有您要找的人,查找失敗\n");
return Error;
}
}
q=p->next;
printf("找到記錄:\n");
printf("姓名:%s\n",q->name);
if(q->s=='m')
printf("性別:男\(zhòng)n");
else
printf("性別:女\n");
printf("電話號(hào)碼:%ld\n",q->number);
printf("備注:%s\n",q->remark);
printf("*********************************\n");
return OK;
}
/******************查找一個(gè)聯(lián)系人****************************/
int FindLinkList(LinkList L)
{
LinkList head = L;
printf("*********************************\n");
printf("請(qǐng)輸入查找聯(lián)系人的方式:\n");
printf("1:按姓名\n");
printf("2:按號(hào)碼\n");
printf("0:返回\n");
printf("*********************************\n");
printf("請(qǐng)選擇:");
int k=3; //確保下面while循環(huán)運(yùn)行
while(k)
{
scanf("%d",&k);
char Delname1[SIZE];
long int N;
if(k>2||k<0)
{
printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");
scanf("%d",&k);
while(getchar()!='\n')
printf("\n");
}
switch(k)
{
case 1:
printf("請(qǐng)輸入姓名:");
scanf("%s",Delname1);
FindNameLinkList(head,Delname1);
k=0;
break;
case 2:
printf("請(qǐng)輸入號(hào)碼:");
scanf("%ld",&N);
FindNumLinkList(head,N);
k=0;
break;
}
}
}
/********************清空聯(lián)系人信息*************************/
int ClearLinkList(LinkList L)
{
LinkList p,q;
p=L->next;
while(p)
{
q=p->next;
free(p);
p=q;
}
L->next=NULL;
printf("清空所有聯(lián)系人成功\n");
return OK;
}
/*********************篩選所有男性聯(lián)系人**********************/
int ScreenMaleLinkList(LinkList L)
{
LinkList p;
p=L->next;
int i=0;
while(p)
{
if(p->s=='m')
{
printf("姓名:%s\n",p->name);
if(p->s=='m')
printf("性別:男\(zhòng)n");
else
printf("性別:女\n");
printf("電話號(hào)碼:%ld\n",p->number);
printf("備注:%s\n",p->remark);
printf("*********************************\n");
}
p=p->next;
i++;
}
if(i==0&&!p)
{
printf("無(wú)男性聯(lián)系人\n");
}
return OK;
}
/*********************篩選所女性聯(lián)系人**********************/
int ScreenFemaleLinkList(LinkList L)
{
LinkList p;
p=L->next;
int i=0;
while(p)
{
if(p->s=='f')
{
printf("姓名:%s\n",p->name);
if(p->s=='m')
printf("性別:男\(zhòng)n");
else
printf("性別:女\n");
printf("電話號(hào)碼:%ld\n",p->number);
printf("備注:%s\n",p->remark);
printf("*********************************\n");
}
p=p->next;
i++;
}
if(i==0&&!p)
{
printf("無(wú)女性聯(lián)系人\n");
}
return OK;
}
/************************通訊錄功能界面*****************/
void FunctionalInterface()
{
system ("clear");
printf("*********************************\n");
printf("歡迎使用Linux通訊錄!\n");
printf("*********************************\n");
printf("1:輸出全部聯(lián)系人信息\n");
printf("2:插入新的聯(lián)系人\n");
printf("3:刪除一個(gè)聯(lián)系人\n");
printf("4:查找某個(gè)聯(lián)系人\n");
printf("5:清空全部聯(lián)系人信息\n");
printf("6:篩選全部男性聯(lián)系人信息\n");
printf("7:篩選全部女性聯(lián)系人信息\n");
printf("0:退出\n");
printf("*********************************\n");
}
/*****************刪除一個(gè)聯(lián)系人****************************/
int DeleteLinkList(LinkList L)
{
LinkList head = L;
printf("*********************************\n");
printf("請(qǐng)輸入刪除聯(lián)系人的方式:\n");
printf("1:按姓名\n");
printf("2:按號(hào)碼\n");
printf("0:返回\n");
printf("*********************************\n");
printf("請(qǐng)選擇:");
int i=3;
while(i)
{
scanf("%d",&i);
char Delname[SIZE];
long int j;
if(i>2||i<0)
{
printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");
scanf("%d",&i);
while(getchar()!='\n')
printf("\n");
}
switch(i)
{
case 1:
printf("請(qǐng)輸入姓名:");
scanf("%s",Delname);
DeleteNameLinkList(head,Delname);
i=0;
break;
case 2:
printf("請(qǐng)輸入號(hào)碼:");
scanf("%ld",&j);
DeleteNumLinkList(head,j);
i=0;
break;
}
}
}
/*******************遍歷打印整個(gè)鏈表**********************/
int PrintfLinkList(LinkList L)
{
LinkList p,q;
q=p=L->next;
int i=0;
while(q)
{
i++;
q=q->next;
if(i==0&&!p)
{
printf("無(wú)聯(lián)系人\n");
}
}
printf("共有%d個(gè)聯(lián)系人\n",i);
while(p)
{
printf("*********************************\n");
printf("姓名:%s\n",p->name);
if(p->s=='m')
printf("性別:男\(zhòng)n");
else
printf("性別:女\n");
printf("電話號(hào)碼:%ld\n",p->number);
printf("備注:%s\n",p->remark);
p=p->next;
}
printf("*********************************\n");
return OK;
}
int main()
{
int a;
LinkList head;
head=CreateEmptyLinkList();
FirstCreateLinkList(head);
FunctionalInterface();
while(a)
{
printf("請(qǐng)輸入您要選擇的功能:");
scanf("%d",&a);
if(a>7||a<0)
{
printf("輸入錯(cuò)誤,請(qǐng)重新輸入:");
scanf("%d",&a);
while(getchar()!='\n')
printf("\n");
}
switch(a)
{
case 1:
PrintfLinkList(head);
break;
case 2:
CreateLinkList(head);
break;
case 3:
DeleteLinkList(head);
break;
case 4:
FindLinkList(head);
break;
case 5:
ClearLinkList(head);
break;
case 6:
ScreenMaleLinkList(head);
break;
case 7:
ScreenFemaleLinkList(head);
break;
}
if(a!=0)
{
printf("請(qǐng)按回車鍵繼續(xù):");
getchar();
if(getchar()=='\n')
FunctionalInterface();
}
}
printf("歡迎再次使用\n");
return 0;
}
以上均為自己編寫(xiě),個(gè)人能力有限,如有錯(cuò)誤,還請(qǐng)各位批評(píng)指正。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
手把手帶你學(xué)習(xí)C++的數(shù)據(jù)類型
這篇文章主要為大家介紹了C++的數(shù)據(jù)類型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助,希望能夠給你帶來(lái)幫助2021-11-11
C++基礎(chǔ)入門教程(九):函數(shù)指針之回調(diào)
這篇文章主要介紹了C++基礎(chǔ)入門教程(九):函數(shù)指針之回調(diào),本文講解了函數(shù)的地址、聲明函數(shù)指針、歷史原因、typedef挽救復(fù)雜的函數(shù)指針等內(nèi)容,需要的朋友可以參考下2014-11-11
C語(yǔ)言 以字符串的形式讀寫(xiě)文件詳解及示例代碼
本文主要介紹 C語(yǔ)言以字符串的形式讀寫(xiě)文件,這里提供了詳細(xì)的資料及簡(jiǎn)單示例代碼以便大家學(xué)習(xí)參考,有學(xué)習(xí)此部分的小伙伴可以參考下2016-08-08
C++各種數(shù)據(jù)類型所占內(nèi)存大小詳解
這篇文章主要介紹了C++各種數(shù)據(jù)類型所占內(nèi)存大小,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹(shù)子結(jié)構(gòu)的詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹(shù)子結(jié)構(gòu)的詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04

