資料結構課程設計之通訊錄管理系統

2021-03-04 07:05:29 字數 3288 閱讀 7613

資料結構課程設計**

題目: 1.通訊錄管理系統**

7 .建立二叉樹,層序、先序遍歷

14. 拓撲排序

姓名: 李東東

學號: 201110510212

班級: 11 計科(2)班

指導教師: 李娟徐星

2023年 6 月 24日

1.通訊錄管理系統

開發目的

資料結構旨在使讀者學會分析研究資料物件的特性,學會資料的組織方法,以便選擇合適的資料邏輯結構和儲存結構,以及相應的運算,把現實世界中的問題轉化為計算機內部的表示和處理。

設計目的

進一步理解和掌握課堂上所學各種基本抽象資料型別的邏輯結構、儲存結構和操作實現演算法,以及它們在程式中的使用方法;掌握軟體設計的基本內容和設計方法,並培養規範化軟體設計的能力;將理論知識和實際結合起來,鍛鍊分析解決實際問題的能力。

設計要求

實現通訊錄的建立和輸出、通訊者的插入、刪除和查詢等幾種操作功能。

用單鏈表作儲存結構;用選單作為應用程式的主要介面,主介面的主控選單如下:

通訊錄鍊錶

1.通訊錄鍊錶的建立

2.通訊錄結點的插入

3.通訊錄結點的查詢

4.通訊錄結點的刪除

5.通訊錄鍊錶的輸出

1.退出通訊錄管理系統

請選擇選單號<0~5>:

*:使用數字0~5來選擇選單項,其他輸入無效,並給出錯誤提示。

設計功能

程式執行後的功能有:

(1)選單選擇介面

(2)建立通訊錄記錄

(3)插入聯絡人記錄

(4)查詢聯絡人記錄(名稱和編號查詢)

(6)刪除聯絡人記錄

(7)輸出所有聯絡人記錄

(8)退出程式

演算法設計

系統流程圖如圖所示:

主函式設計

由於主函式設計的是選單選擇項,所以在程式未退出的的情況下要實現迴圈執行,並且要考慮到未建立通訊錄鍊錶的情況下其他功能無法實現的情況。故在實現迴圈執行的功能時定義乙個變數j=1,在選擇退出後再將j賦值為0,要考慮判定是否建表的情況定義了乙個全域性變數flag1=0,建煉表後flag1賦值為1。

為了達到選擇各功能,採用switch判定選擇項並跳轉入相應功能函式。

判定是否建表語句:

if(flag1!=1)

printf("請先建立表!");

getchar();

system("cls");}

功能程式設計

為了達到程式各項功能的實現,以及滿足選單選擇項的功能,對每個功能的實現分別用了不同函式,並且有用到函式的巢狀以減少**的重複。

建立通訊鍊錶設計

要建立鍊錶,首先要生成結點,因此,尾插法建立鍊錶演算法描述如下:

(1)使鍊錶的頭尾指標head、rear指向新生成的頭結點(也就是尾結點);

(2)置結束標誌為0(假);

(3)while(結束標誌不為真)

{p指向新生成的結點;

讀入乙個通訊者資料至新結點的資料域;

將新結點鏈到尾結點之後;

主函式設計

主函式設計

主函式設計

實現迴圈執行的功能時定義乙個變數j=1,在選擇退出後再將j賦值為0,要考慮判定是否建表的情況定義了乙個全域性變數flag1=0,建煉表後flag1賦值為1。

為了達到選擇各功能,採用switch判定選擇項並跳轉入相應功能函式。

判定是否建表語句:

if(flag1!=1)

printf("請先建立表!");

getchar();

system("cls");}

建立通訊鍊錶設計

要建立鍊錶,首先要生成結點,因此,尾插法建立鍊錶演算法描述如下:

(1)使鍊錶的頭尾指標head、rear指向新生成的頭結點(也就是尾結點);

(2)置結束標誌為0(假);

(3)while(結束標誌不為真)

{p指向新生成的結點;

讀入乙個通訊者資料至新結點的資料域;

將新結點鏈到尾結點之後;

使尾指標指向新結點;

提示是否繼續建表,讀入乙個結束的標誌;

}(4)尾結點的指標域置空置null。

具體演算法實現如下:

/*******尾插法建立帶頭結點的通訊錄鍊錶演算法*******/

linklist createlist(void)

rear->next=null終端結點指標置空*/

return head返回煉表頭指標*/

}通訊者結點資訊的插入

鍊錶結點的插入,要求將乙個通訊者記錄的資料結點按其編號的次序插入有序通訊表相應位置,以保持通訊錄的有序性。插入的基本思想是:使用兩個指標變數p1和p2分別指向當前訪問過的結點和下乙個結點,迴圈順序查詢鍊錶。

尋找插入結點的位置,其中p1指向待插入位置的前乙個結點。具體實現演算法如下:

(1)用p1指向原煉表頭結點,p2指向鍊錶的第乙個結點;

(2)while(p2!=null && strcmp(p2->data.num,p->data.num)<0)

(3)插入新結點。具體演算法如下:

在通訊錄鍊錶head中插入結點

void insertnode(linklist head,listnode *p)

p1->next=p; /*插入p所指向的結點*/

p->next=p2; /*連線表中剩餘的結點*/

}通訊者結點資訊的查詢

通訊錄結點查詢的基本思想是:首先輸入要查詢的通訊者編號或姓名,從表頭順序訪問表中結點。如果查詢成功,則返回乙個指向查詢道德通訊者資訊;若查詢失敗,則返回乙個空的指標null。

具體實現如下:

有序通訊錄鍊錶的查詢

listnode *listfind(linklist head)

else

if (pp=='b'||pp=='b')

return p;

}通訊者結點資訊的刪除

通訊錄結點的刪除,先呼叫查詢函式,查詢到要刪除的結點,刪除即可。其實現演算法如下:

/********通訊錄鍊錶上的結點刪除

void delnode(linklist head)

else if(p!=null)

{printf("真的要刪除該結點嗎?(y/n)");

scanf("%s",&cho);

if (cho=='y'||cho=='y')

{q=head;

while ((q!=null)&&(q->next!=p)) q=q->next;

q->next=p->next; /*刪除結點*/

free(p釋放被刪結點空間*/

通訊錄管理系統資料結構課程設計C語言

湖南工程學院 課程設計報告 通訊錄管理系統 姓名 李任 學院 計算機與通訊學院 專業 電腦科學與技術 班級 計算機0803班 學號 200803010326 指導教師 劉長松 完成日期 2010 9 13 目錄1 第一章 前言2 2 第二章 概述3 3 第三章 演算法分析5 4 第四章 主要流程圖1...

C通訊錄課程設計

一 設計任務分析 實現以下功能 1 通訊錄編輯 新增 刪除 2 按不同的項進行查詢 3 對已存在的通訊錄按不同的項排序 4 將通訊錄寫入檔案 5 從檔案讀入通訊錄。二 模組設計 本次程式設計主要設計了六個模組 主要是 函式用於通訊錄中的資訊進行新增,主要流程如下 函式用於通訊錄中的資訊進行刪除,主要...

C課程設計通訊錄管理系統

鄭州科技學院 c 課程設計設計 課題 通訊錄管理系統 姓名 劉闖 學號 201015056 班級 10計科2班 導師 王玉萍 課程設計日期 2013年5月31日 目錄 摘要 3 一 整體設計 4 1 1設計構思 4 1 2系統資料流圖 5 1 3開發及執行環境 5 2 1 資料庫需求分析 6 2 2...