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)系人信息
在本次通訊錄的編寫代碼中,涉及到了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("該通訊錄沒有要?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("該通訊錄沒有要?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("該通訊錄沒有您要找的人,查找失敗\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("該通訊錄沒有您要找的人,查找失敗\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;
}
以上均為自己編寫,個(gè)人能力有限,如有錯(cuò)誤,還請(qǐng)各位批評(píng)指正。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C語(yǔ)言實(shí)現(xiàn)電話簿項(xiàng)目
欄 目:C語(yǔ)言
本文標(biāo)題:C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易通訊錄
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/69.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段函數(shù)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排序法函數(shù)
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段函數(shù)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery


