生活随笔
收集整理的這篇文章主要介紹了
通讯录系统设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通訊錄管理系統
1、問題分析
2、系統設計
3、系統實現
4、測試
5、總結及展望
6、附錄:完整代碼
編制一個通訊錄管理程序,要求提交一個文檔,該文檔應包括但不限于以下內容:
注:文檔完成情況作為數據結構的期末成績;代碼完成情況作為數據結構課程設計的期末成績。
代碼要求:書寫規范、邏輯清晰、代碼可運行、加上必要的注釋
代碼評分標準:可讀性、正確性、有效性、創造性
1、問題分析
為了解決記錄保存查找刪除用戶的個人信息資料,設計一款通訊錄管理系統,同時方便用戶進行相應的實際操作。通訊錄管理系統是-一個小型的實用管理系統,它主要用于儲存用戶的聯系方式以及一些簡單的個人信息。
通訊錄管理系統可以實現對客戶、朋友、同事等個人信息的存儲和快速查詢的功能,有效地減少查找的時間,提高查找效率。
基本功能:
添加聯系人信息,查詢打印出目標聯系人的信息,修改聯系人信息,刪除目標聯系人信息,打印通訊錄所有人信息。
2、系統設計
通訊錄管理系統主要功能分為用戶查詢、添加記錄、修改記錄、刪除記錄。
該系統應該分為兩部分:用戶部分和管理部分,用戶可以進行查詢信息的操作,而管理者是對數據的錄入,插入修改,對用戶信息的維護。
-邏輯設計: 從用戶查詢,添加記錄,修改記錄,刪除記錄,打印信息五個順序邏輯完成通訊錄系統的設計
數據結構:
通訊錄系統
進入主菜單功能選擇
線性表結構,鏈式存儲結構
系統模塊:
ADT:
(1)定義結構體保存通訊錄中用戶各種信息
(2)主菜單對通訊錄功能選擇的管理:添加用戶,查詢,修改,刪除,退出。
基本操作:
定義結構體保存通訊錄中用戶各種信息:
typedef struct TXL
{ }character
; *pcharacter
, **ppcharacter
;
信息錄入:
void getPeople(pcharacter
);
添加聯系人信息:
void addPeople(ppcharacter
);
查找相應聯系人:
pcharacter
searchPeople(pcharacter
,char query
[]);
修改指定聯系人的信息:
pcharacter
updatePeople(pcharacter
,char query
[]);
刪除指定聯系人信息:
void delPeople(ppcharacter
,char query
[]);
遍歷鏈表打印通訊錄信息:
void displayCharacter(pcharacter
);
查詢打印單結點聯系人信息:
void displaySingle(pcharacter
);
-詳細設計
: 偽代碼
通訊錄界面設計:代碼:
printf("\t\t|-----------通訊錄菜單----------- |\n");printf("\t\t| 1. addPeople |\n");printf("\t\t| 2. searchPeople |\n");printf("\t\t| 3. updatePeople |\n");printf("\t\t| 4. delPeople |\n");printf("\t\t| 5. displayCharacter |\n");printf("\t\t| 6. END |\n");printf("\t\t|---------------------------------|\n\n");printf("\t\t\t功能選擇(1-6):");
信息錄入:
void getPeople(pcharacter
)
{
printf("請輸入聯系人姓名:\t");scanf("%s", txl
-> Name
);printf("請輸入聯系人年齡:\t");scanf("%s", txl
-> Year
);printf("請輸入聯系人性別:\t");scanf("%s", txl
-> Sex
);
}
添加聯系人信息:
void addPeople(ppcharacter
)
{new
=(pcharacter
)malloc(sizeof(character
));if(new
==NULL)
{printf("內存分配失敗");exit(1);}if(*txl
==NULL)
{*txl
=new
;new
->next
=NULL;}
}查找相應聯系人:
pcharacter
searchPeople(pcharacter
,char query
[])
{
{if(strcmp(copy
->Name
,query
))
{copy
=copy
->next
;}else
{printf("找到了聯系人\n");
}
修改指定聯系人的信息:
pcharacter
updatePeople(pcharacter
,char query
[])
{
if(strcmp(copy
->Name
,query
)){copy
=copy
->next
;}else
{printf("您確定要修改%s的信息嗎? (Y/N)\n",query
);
}
刪除指定聯系人信息:
void delPeople(ppcharacter
,char query
[])
{while(middle
!=NULL&&strcmp(middle
->Name
,query
))
{big
=middle
;middle
=middle
->next
;}if(middle
==NULL)
{printf("沒有聯系人\n");}
}
遍歷鏈表打印通訊錄信息:
void displayCharacter(pcharacter
)
{
pcharacter person
;person
=txl
;while(person
!=NULL)
{printf("----------------------------------------------\n");printf("姓名\t年齡\t性別\t手機號碼\t住址信息\n");printf("%s\t",person
->Name
);printf("%s\t",person
->Year
);printf("%s\t",person
->Sex
);printf("%s\t\t",person
->Tel
);printf("%s\n",person
->Address
);printf("----------------------------------------------\n");putchar('\n');person
=person
->next
;}
}
查詢打印單結點聯系人信息:
void displaySingle(pcharacter
)
{if(txl
==NULL)
{printf("聯系人不存在\n");}else
{printf("----------------------------------------------\n");printf("姓名\t年齡\t性別\t手機號碼\t住址信息\n");printf("%s\t",txl
->Name
);printf("%s\t",txl
->Year
);printf("%s\t",txl
->Sex
);printf("%s\t\t",txl
->Tel
);printf("%s\n",txl
->Address
);printf("----------------------------------------------\n");}
主函數:
用
switch語句進行功能選擇的相應操作:
switch(num
)
{
case 1:
{char ch
;while(1)
{
do{ch
=getchar(); }
if(ch
=='Y')
{addPeople(&txl
);
}
else
{break;
}}
break;
}
case 2:
{displaySingle(result
);break;
}
case 3:
{displayCharacter
(txl
);break;
}
case 4:
{delPeople(&txl
, query
);break;
}
case 5:
{displayCharacter(txl
);break;
}
case 6:
{goto END
;
}
}
}
END
:
printf("退出程序\n");
3、系統實現
-遇到的問題及解決方法
一開始我是使用的用數組結構體指針進行代碼操作,操作結束后發現了錄入和打印函數可以運行,而查詢修改刪除有小問題,得到的不是自己想要的結果,很是納悶,覺得strcmp()函數沒有問題,思路是正確的,百度也沒查出來了,就換了課本的鏈式儲存,大概敲了兩個下午才完整敲完代碼,中間思考設計界面,函數邏輯設計,剛開始是邊寫邊調試,運行了一下發現錄入函數有問題,找了好久才發現開頭定義少了一個字母,很不仔細,耽誤了好久時間去查找調試去解決這個問題。后面的調試過程中一些標點括號啥的慢慢排除修改,最后就可以運行出來結果,程序總體上沒有太大的錯誤,最終花時間設計打印的格式思考了下格數啥的完成了代碼的敲寫,編譯,運行。
-算法復雜度分析
添加聯系人:O(1);
查詢聯系人:O(n);
刪除聯系人:O(n);
修改聯系人:O(n);
遍歷聯系人:O(n);
4、測試
-測試方法:
將代碼敲完在VC6.0里進行編譯,發現沒有錯誤,運行調試對應的功能,檢查是否成功。
-測試用例:
運行界面:
添加聯系人信息:
遍歷一下:
查找相應聯系人:
修改指定聯系人并且遍歷查看:
刪除指定聯系人:
退出程序:
-測試結論
5、總結及展望
本學習在網課中學習了數據結構這門算法課,期間學習了線性表,棧與隊列,樹與二叉樹,圖等知識點,在學習的過程中是枯燥的,可是自己反復敲代碼把題目寫出來,心里很開心,即使花費了大量時間在一個錯誤上糾結,但是最后可以通過自己的查詢,思考解決了困難,對自己代碼的學習很有幫助,增加了經驗的積累,學習算法后,對解決問題擴展了思維,邏輯上有很大的提升。這次期末作業設計一個通訊錄系統,明白程序的開發必須有自己的思路并且有強大的算法知識基礎才能開發的出,本次實驗中也遇到很多困難,翻開課本查找知識消化后可以邏輯思路以及基本的代碼框架。言而總之,學習代碼是一直不停的過程,同時思考問題解決問題也是很重要的,敲代碼速度也必須平時多練加快自己的速度,未來的道路加強敲代碼和做題的練習。
6、附錄:完整代碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct TXL
{ char Name
[10];char Year
[4];char Sex
[5];char Tel
[12];char Address
[30];struct TXL
*next
;
}character
, *pcharacter
, **ppcharacter
;
int count
=0;
pcharacter list
=NULL;
static pcharacter book
;
void getPeople(pcharacter
);
void addPeople(ppcharacter
);
pcharacter
searchPeople(pcharacter
,char query
[]);
pcharacter
updatePeople(pcharacter
,char query
[]);
void delPeople(ppcharacter
,char query
[]);
void displayCharacter(pcharacter
);
void displaySingle(pcharacter
);
void getPeople(pcharacter txl
)
{printf("請輸入聯系人姓名:\t");scanf("%s", txl
-> Name
);printf("請輸入聯系人年齡:\t");scanf("%s", txl
-> Year
);printf("請輸入聯系人性別:\t");scanf("%s", txl
-> Sex
);printf("請輸入聯系人電話:\t");scanf("%s", txl
-> Tel
);printf("請輸入聯系人住址:\t");scanf("%s", txl
-> Address
);
}
void addPeople(ppcharacter txl
)
{pcharacter new
;if(list
!=NULL)
{new
=list
;list
=list
->next
;count
--;}else
{new
=(pcharacter
)malloc(sizeof(character
));if(new
==NULL)
{printf("內存分配失敗");exit(1);}}getPeople(new
);if(*txl
==NULL)
{*txl
=new
;new
->next
=NULL;}else
{book
->next
=new
;new
->next
=NULL;}book
= new
;
}
pcharacter
searchPeople(pcharacter txl
,char query
[])
{pcharacter copy
;copy
=txl
;while(copy
!=NULL)
{if(strcmp(copy
->Name
,query
))
{copy
=copy
->next
;}else
{printf("找到了聯系人\n");return copy
;}}return NULL;
}
pcharacter
updatePeople(pcharacter txl
,char query
[])
{char ch
;pcharacter copy
;copy
=txl
;while(copy
!=NULL)
{if(strcmp(copy
->Name
,query
))
{copy
=copy
->next
;}else
{printf("您確定要修改%s的信息嗎? (Y/N)\n",query
);
do{ch
=getchar();}
while(ch
!='Y');
if(ch
=='Y')
{printf("請輸入新的內容:\n");printf("請輸入聯系人姓名:\t");scanf("%s", copy
-> Name
);printf("請輸入聯系人年齡:\t");scanf("%s", copy
-> Year
);printf("請輸入聯系人性別:\t");scanf("%s", copy
-> Sex
);printf("請輸入聯系人電話:\t");scanf("%s", copy
-> Tel
);printf("請輸入聯系人住址:\t");scanf("%s", copy
-> Address
);return copy
;
}}}if(copy
==NULL){return NULL;}
}
void delPeople(ppcharacter txl
,char query
[])
{pcharacter big
,middle
;big
=NULL;middle
=*txl
;while(middle
!=NULL&&strcmp(middle
->Name
,query
))
{big
=middle
;middle
=middle
->next
;}if(middle
==NULL)
{printf("沒有聯系人\n");}else
{if(big
==NULL)
{*txl
=middle
->next
;}else
{big
->next
=middle
->next
;}printf("刪除成功\n");}
}
void displayCharacter(pcharacter txl
)
{pcharacter person
;person
=txl
;while(person
!=NULL)
{printf("----------------------------------------------\n");printf("姓名\t年齡\t性別\t手機號碼\t住址信息\n");printf("%s\t",person
->Name
);printf("%s\t",person
->Year
);printf("%s\t",person
->Sex
);printf("%s\t\t",person
->Tel
);printf("%s\n",person
->Address
);printf("----------------------------------------------\n");putchar('\n');person
=person
->next
;}
}
void displaySingle(pcharacter txl
)
{if(txl
==NULL)
{printf("聯系人不存在\n");}else
{printf("----------------------------------------------\n");printf("姓名\t年齡\t性別\t手機號碼\t住址信息\n");printf("%s\t",txl
->Name
);printf("%s\t",txl
->Year
);printf("%s\t",txl
->Sex
);printf("%s\t\t",txl
->Tel
);printf("%s\n",txl
->Address
);printf("----------------------------------------------\n");}
}
int main()
{int num
;pcharacter txl
=NULL;printf("\t\t|-----------通訊錄菜單----------- |\n");printf("\t\t| 1. addPeople |\n");printf("\t\t| 2. searchPeople |\n");printf("\t\t| 3. updatePeople |\n");printf("\t\t| 4. delPeople |\n");printf("\t\t| 5. displayCharacter |\n");printf("\t\t| 6. END |\n");printf("\t\t|---------------------------------|\n\n");printf("\t\t\t功能選擇(1-6):"); printf("\n");while(1)
{printf("輸入選擇的功能:\n");scanf("%d",&num
);
switch(num
)
{
case 1:
{char ch
;while(1)
{printf("是否要添加信息(Y/N)\n");
do{ch
=getchar(); }
while(ch
!='Y'&&ch
!='N');
if(ch
=='Y')
{addPeople(&txl
);
}
else
{break;
}}
break;
}
case 2:
{char query
[20];pcharacter result
;printf("請輸入查詢信息姓名:\n\n");scanf("%s", query
);result
= searchPeople(txl
, query
);displaySingle(result
);break;
}
case 3:
{char query
[20];pcharacter result
;printf("請輸入修改信息姓名:\n\n");scanf("%s",query
);result
=updatePeople(txl
,query
);displayCharacter(txl
);break;
}
case 4:
{char query
[20];printf("請輸入刪除信息姓名:\n\n");scanf("%s", query
);delPeople(&txl
, query
);break;
}
case 5:
{printf("打印通訊錄信息如下:\n\n");displayCharacter(txl
);break;
}
case 6:
{goto END
;
}
}
}
END
:
printf("退出程序\n");
}
總結
以上是生活随笔為你收集整理的通讯录系统设计的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。