【練習】製作簡易通訊錄
通訊錄中可管理多人的聯絡資訊,由於不能預知系統中需要管理多少聯絡人的資訊,因此使用連結串列將是一種好方案。下面實現一個簡易的通訊錄,其包括新增聯絡人、查詢聯絡人、刪除聯絡人和顯示聯絡人四個功能。
- 定義通訊錄結構
在DATA結構中,必須定義一個名為key 的字串,作為查詢的關鍵字,其他欄位可根據需要進行增刪。
仍然使用上述連結串列實現的標頭檔案和函式檔案。
#include <stdio.h>
typedef struct
{
char key[15]; //關鍵字(設定姓名為關鍵字)
char addr[20];
char telephone[15];
char mobile[12];
}DATA; //資料結點型別
- 鏈式線性表
typedef struct Node
{
DATA data;
struct Node *next;
}ChainListType;
ChainListType *ChainListAddFirst(ChainListType *head,DATA data)
{
ChainListType *node,*h;
if(!(node=(ChainListType *)malloc(sizeof(ChainListType))))
{
printf("為儲存結點資料申請記憶體失敗!\n");
return NULL; //分配記憶體失敗
}
node->data=data; //儲存資料
node->next=head; //指向頭指標所指結點
head=node; //頭指標指向新增結點
return head;
}
ChainListType *ChainListFind(ChainListType *head,char *key) //按關鍵字在連結串列中查詢內容
{
ChainListType *h;
h=head; //儲存連結串列頭指標
while(h) //若結點有效,則進行查詢
{
if(strcmp(h->data.key,key)==0) //若結點關鍵字與傳入關鍵字相同
return h; //返回該結點指標
h=h->next; //處理下一結點
}
return NULL; //返回空指標
}
int ChainListDelete(ChainListType *head,char *key)
{
ChainListType *node,*h;
node=head; //node儲存刪除結點的前一結點
h=head; //h為移動指標
while(h)
{
if(strcmp(h->data.key,key)==0) //找到關鍵字,執行刪除操作
{
node->next=h->next; //使前一結點指向當前結點的下一結點
free(h); //釋放記憶體
return 1;
}else{
node=h; //指向當前結點
h=h->next; //指向下一結點
}
}
return 0;//未刪除
}
- 顯示聯絡人資訊
void ChainListAll(ChainListType *head) //遍歷連結串列
{
ChainListType *h;
DATA data;
h=head;
printf("連結串列所有資料如下:\n");
while(h) //迴圈處理連結串列每個結點
{
data=h->data;//獲取結點資料
printf("姓名:%s\n",data.key);
printf("地址:%s\n",data.addr);
printf("電話:%s\n",data.telephone);
printf("手機:%s\n",data.mobile);
h=h->next;//處理下一結點
}
return;
}
- 新增聯絡人
ChainListType *input(ChainListType *head) //向通訊錄中輸入的資訊
{
DATA data;
printf("請輸入聯絡人資訊\n");
printf("姓名:");
scanf("%s",data.key);
printf("地址:");
scanf("%s",data.addr);
printf("電話:");
scanf("%s",data.telephone);
printf("手機:");
scanf("%s",data.mobile);
return ChainListAddFirst(head,data); //呼叫新增函式
}
- 查詢聯絡人
void find(ChainListType *head)
{
ChainListType *h;
DATA data;
char name[15];
printf("請輸入查詢姓名:");
scanf("%s",name);
h=ChainListFind(head,name);
if(h)//查詢結點指標有效
{
data=h->data;//獲取結點資料
printf("姓名:%s\n",data.key);
printf("地址:%s\n",data.addr);
printf("電話:%s\n",data.telephone);
printf("手機:%s\n",data.mobile);
}
}
- 刪除聯絡人
void delete(ChainListType *head)
{
ChainListType *h=head;
char name[15];
printf("請輸入要刪除的姓名:");
scanf("%s",name);
ChainListDelete(head,name);
}
- 主函式
int main()
{
ChainListType *node, *head=NULL;
int select;//選擇選單的序號
do{
printf("\n_____________________\n");
printf("1.新增聯絡人\n");
printf("2.查詢聯絡人\n");
printf("3.刪除聯絡人\n");
printf("4.顯示所有聯絡人\n");
printf("0.退出\n");
printf("_____________________\n");
select=getch();
switch(select)
{
case '1':
printf("\n新增聯絡人\n");
head=input(head);
break;
case '2':
printf("\n查詢聯絡人\n");
find(head);
break;
case '3':
printf("\n刪除聯絡人\n");
delete(head);
break;
case '4':
printf("\n顯示聯絡人\n");
ChainListAll(head);
break;
case '0':
return 0;
}
}while(select != '0');
}
相關文章
- 【練手小專案】簡易通訊錄:單連結串列實現
- video標籤製作簡易版彈幕視訊IDE
- 透過資料結構實現簡易通訊錄資料結構
- java,製作簡易畫圖板Java
- 用kivy學習製作簡易調色畫板appAPP
- 完整版通訊錄(實現簡單具體易上手!!)
- C++ 練習 簡易日曆C++
- 簡易rpm套件的製作(轉)套件
- 簡易遊戲通訊協議框架1.0遊戲協議框架
- html+css 製作簡易導航欄HTMLCSS
- Dreamweaver製作簡易的拼圖遊戲教程遊戲
- 推薦一款快速製作通訊錄的微信小外掛
- 簡單通訊錄的實現
- 前端 javascript 練習題 -簡易年曆及tab切換簡易年曆【千鋒】前端JavaScript
- Go語言實現的簡易TCP通訊框架GoTCP框架
- 一個簡易停車場地圖製作軟體地圖
- html+css+js製作一個簡易計算器HTMLCSSJS
- 直播商城原始碼,vue製作簡易的購物車原始碼Vue
- oracle9i簡易客戶端製作說明Oracle客戶端
- javaScript基礎練習題-下拉框製作(JQuery)JavaScriptjQuery
- 高效簡易開發基於websocket 的通訊應用Web
- 簡易製作貝塞爾曲線動畫(JS+css3+canvas)動畫JSCSSS3Canvas
- CSS樣式表——佈局練習(製作360網頁)CSS網頁
- 簡易訊息迴圈
- QT繪製簡易錶盤QT
- 音訊錄製:三星電腦如何錄製音訊?音訊
- 習題9-5 通訊錄排序 (20分)排序
- 通訊錄AdressDAO
- 錄屏製作gif工具
- Python 作業練習Python
- 隱形通訊錄:全新iOS通訊錄應用概念設計iOS
- 網路通訊2:TCP簡單通訊TCP
- css製作訊息框CSS
- 19作 網路通訊
- 通訊專業作業
- SMS簡訊通API——(3)SMS簡訊通資費標準API
- WPF 使用快捷鍵方式製作簡易的 Word 上的 Latex 輸入法
- 簡易的Mac錄屏軟體Mac