c語言 通訊錄(非初級版)

2021-08-16 01:49:00 字數 3913 閱讀 1069

之前說寫乙個改良版的通訊錄,一直沒有時間來寫,下面我就講一下這個要怎麼寫,只要跟著我的思路,相信你讀完一定會有所收穫(大佬請忽視這句話-.-!)

涉及知識:1.c語言_多檔案程式設計

2.資料結構_雙向鍊錶

3.設計模式_測試驅動開發(tdd)

設計思路:我把這個專案抽象為三層來設計。

第一層:應用層,直接面向使用者,一般怎麼用怎麼寫,直接設計這個專案需要的業務流程**,不需要關心所使用函式的具體實現,直接用就行。

第二層:實現層,這一層來具體實現應用層所用到的函式。

第三層:結構底層和工具層,這一層提供實現層的底層所用到的資料結構和工具函式。

由於處理同名同姓這種情況過於複雜,這個版本的通訊錄就先不做這個處理

後面如果有機會,再做乙個有介面的通訊錄,到時候再處理所言情況

下面我一層一層來講解:

#include

#include

#include"head.h"//第二層的標頭檔案

int main()

system("cls");//結束一次操作後清屏

}return

0;}

#pragma once 

#include"listtable.h"//第三層的標頭檔案

//用巨集來定義檔案路徑是乙個技巧,方便以後修改

#define filename "maillist.data"

pnode header;//將頭指標設定為全域性變數

file *fp;

void menu();

void init();

void findhuman();

void changehuman();

void deletehuman();

void addhuman();

void printhuman();

void destroy();

#pragma once

#include

#include

#include

#include"head.h"

#include"tools.h"//第三層的標頭檔案

void menu()

void init()

if (getfilesize(fp))}}

}//每次寫操作後需要更新檔案,將鍊錶內容重新寫回檔案

//否則在程式執行期間進行的更改不會影響檔案的實際內容

void updatafile()

fflush(fp);

}void findhuman()

else

getch();//暫停

}void addhuman()

else

getch();//暫停

}void printhuman()

printf("------------------\n");

for (;str != header;str = str->_next)

getch();//暫停

}void changehuman()

; printf("\n輸入需要修改的聯絡人的姓名:");

fflush(stdin);

fgets(name, 30, stdin);

pnode pos;

if (pos = tablefind(header, name))

else

getch();//暫停

}void deletehuman()

else

getch();//暫停

}void destroy()

updatafile();

printf("銷毀成功!\n");

getch();//暫停

}

#pragma once

#include

#include

//獲取檔案大小(以位元組計)

long getfilesize(file *fp)

#pragma once

typedef

struct humaninfo

humaninfo;

//用雙鏈表來管理底層的空間

typedef

struct node

node,*pnode;

pnode buynewnode(humaninfo data);

void tableinit(pnode *head);

_bool tablepop(pnode head, pnode pos);

_bool tablepushback(pnode head, humaninfo data);

_bool tablepopback(pnode head);

pnode tablefind(pnode head, char* name);

_bool tableisempty(pnode head);

void print(pnode pos);

#include

#include

#include

#include

#include"listtable.h"

//申請節點

pnode buynewnode(humaninfo data)

//鍊錶初始化

void tableinit(pnode *head)

; *head = buynewnode(temp);

(*head)->_pre = *head;

(*head)->_next = *head;

}//在鍊錶的指定位置刪除操作

_bool tablepop(pnode head, pnode pos)

pnode str = head;

while (str->_next != str)

}return0;}

//鍊錶的尾插操作

_bool tablepushback(pnode head, humaninfo data)

else

return1;}

//鍊錶的尾刪操作

_bool tablepopback(pnode head)

pnode temp = head->_pre;

head->_pre = head->_pre->_pre;

head->_pre->_pre->_next = head;

free(temp);

return1;}

//鍊錶的節點查詢操作

pnode tablefind(pnode head, char *name)

if (head == str)

else

}//判斷鍊錶是否為空的操作

_bool tableisempty(pnode head)

//鍊錶的節點資料列印操作

void print(pnode pos)

//執行結果示例

主介面

新增聯絡人

查詢操作

修改操作

C語言通訊錄(初級版)

這裡是乙個簡單的通訊錄,固定為1000容量,不能動態增長,不能寫入檔案。初級版本。define crt secure no warnings 1 include include int count 0 void menu typedef struct teldir dir dir stu 1000 ...

C語言版通訊錄

通訊錄可以用來儲存1000個人的資訊,每個人的資訊包括 姓名 性別 年齡 住址 可以完成 新增聯絡人資訊 刪除指定聯絡人資訊 查詢指定聯絡人資訊 修改指定聯絡人資訊 顯示所有聯絡人資訊 清空所有聯絡人 以名字排序所有聯絡人 儲存聯絡人到檔案 載入聯絡人 define crt secure no wa...

通訊錄簡易版(c語言)

通訊錄簡易版 include include include pragma warning disable 4996 先建立結構體,表示乙個聯絡人 typedef struct personperson define max person 1024 typedef struct addressboo...