久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

軟件工程 通訊錄查詢系統

時間:2019-05-14 03:38:36下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《軟件工程 通訊錄查詢系統》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《軟件工程 通訊錄查詢系統》。

第一篇:軟件工程 通訊錄查詢系統

《數據結構》課程設計報告

計算機學院 軟件工程專業

題目: 通信錄查詢系統(查找應用)

班級:軟件102班 第11組

組長:

姓名:李偉

學號:1006550222 組員:

姓名:李呢

學號:1006550219 姓名:李強

學號:1006550221

指導老師:xxx

日期:2011 年 12月 30日

程序設計書目錄

一、程序設計目標

二、問題描述

三、需求分析(說明課程設計的任務)

四、概要設計(說明課程設計中用到的抽象數據類型的定義、主程序的流程以及各程序模塊之間的調用關系等)

五、詳細設計(實現程序模塊的具體算法)

六、軟件說明書(給出軟件應如何使用,使用時的注意事項)

七、源程序清單(要求400行以上,要有注釋說明)

八、測試報告(調試過程中遇到的問題及解決方法,并列出測試結果,包括輸入和輸出)

九、課程設計總結

一、程序設計目標

通過本次課設進一步的了解哈希表函數及哈希表等有關概念,2 掌握哈希表查找的過程及方法。復習鞏固大一時期學過的c語言知識。進一步加深對c語言、數據結構、離散數學等基礎技能的理解和掌握。

讓我們有一個既動手又動腦,獨立實踐的機會,可以讓我們將課本上的理論知識和實際郵寄的結合起來,鍛煉我們的分析解決實際問題的能力。提高我們實踐編程能力。

通過本項課程設計,掌握工程軟件設計的基本方法,強化上機動手編程能力,闖過理論與實踐相 結合的難關!更加了解了c語言的好處和其可用性!同時增加了同學之間的團隊合作精神!更加也體會到以后在工作中團隊合作的重要性和必要性!通過C語言課程設計,使學生了解高級程序設計語言的結構,掌握基本的程序設計過程和技巧,掌握基本的分析問題和利用計算機求解問題的能力,具備初步的高級語言程序設計能力。為后續各門計算機課程的學習和畢業設計打下堅實基礎。

二、問題描述

設計散列表實現通訊錄查找系統。

(1)設每個記錄有下列數據項:電話號碼、用戶名、地址;

(2)從鍵盤輸入各記錄,分別以電話號碼為關鍵字建立散列表;

(3)采用二次探測再散列法解決沖突;(4)查找并顯示給定電話號碼的記錄;(5)通訊錄信息文件保存;

(6)要求人機界面友好,使用圖形化界面;

三、需求分析

一.查詢:用戶有一個電話號碼,但不知道此電話號碼是誰的,則需要輸入號碼來查詢該號碼是不是此通訊錄中已記錄的人的 號碼,若是即顯示該號碼及姓名、所在地,若不是則顯示“無記錄”。

進入主菜單界面,輸入4,進入通訊錄查詢模塊。輸入你想要搜索通訊人的電話號碼。屏幕輸出所搜通訊人的先關信息。二.通訊錄信息添加:

若要向通訊錄中添加新號碼,也分兩種情況:1若該通訊錄是新的,既沒有任何通訊記錄的,則直接往里添加,需先輸入姓名,隨即輸入號碼和所在地,用于存儲。2若通訊錄不是空的,再添加新號碼時則需在最后一個號碼后面進行添加(輸入姓名、電話號碼及所在地),以此類推。

進入主菜單,輸入1,進入通訊錄信息添加模塊。按照要求依次輸入姓名、電話號碼、住址。三.通訊錄信息刪除:

若要對通訊錄中的內容進行刪除: 然后輸入所要刪除的號碼進行刪除

刪除成功。出現提示信息。按任意鍵回到主菜單。

四、概要設計

對功能鍵相對應的函數分別對各個函數在程序中進行定義如下:

void Menu()void Create()void Append()void CreateHash()void Find()void Delete()void Alter()void List()void Save()

void Load()

然后根據各功能鍵的選擇主函數分別調用功能鍵相對應 4 的函數來實現通訊錄的查詢系統。

五、詳細設計

1、定義結構體變量

typedef struct people //記錄 { NA name;NA tel;//關鍵字

NA add;}Record;//查找表中記錄類型

typedef struct //建立哈希表 { Record *elem[HASHSIZE];//數據元素存儲基址 int count;//當前數據元素個數 int size;//當前容量 }HashTable;

2、定義顯示函數 void Menu()

3、定義建立時間的函數 void benGetTime()

4、定義創建新的通訊錄并添加信息的函數

void Create(Record* a)

5、定義關鍵字比較函數

Status eq(NA x,NA y)

6、定義添加信息函數

void Append(Record* a)

7、定義顯示通訊錄中所有信息函數

void List(Record* a)

8、定義哈希函數

int Hash(NA str)

9、定義沖突處理函數

Status collision(int p,int &c)

10、定義建立散列表的函數

void CreateHash(HashTable* H,Record* a)

11、定義通訊錄查找的函數

void Find(HashTable* H,int &c)

12、定義修改信息的函數

void Alter(HashTable* H,int &c)

13、定義刪除信息的函數

void Delete(HashTable* H,int &c)

14、定義保存信息到指定文件的函數

void Save(HashTable* H)

15、定義從指定文件中讀取信息的函數

void Load()

16、定義主函數

int main(int argc, char* argv[]){ system(“color FO”);system(“CLS”);int c,flag=1;HashTable *H;H=(HashTable*)malloc(LEN);for(int i=0;ielem[i]=NULL;H->size=HASHSIZE;H->count=0;Record a[MAXSIZE];donghua();while(1){ face();printf(“請輸入一個任務選項>>>”);printf(“n”);int num;scanf(“%d”,&num);getchar();switch(num){ case 1:Create(a);break;case 2:Append(a);break;case 3:CreateHash(H,a);break;case 4:c=0;Find(H,c);break;case 5:c=0;Delete(H,c);break;case 6:c=0;Alter(H,c);break;case 7:List(a);break;case 8:Save(H);break;case 9:Load();break;

case 0:Quit();return 0;break;case 10:;;break;default: printf(“你輸錯了,請重新輸入!”);printf(“n”);}

system(“CLS”);} return 0;}

六、軟件說明書

雙擊程序,程序運行后,進入通信錄查詢系統菜單的操作界面,然后采用鍵盤進行操作。各功能鍵的選擇如下:

1、創建新的通訊錄并寫入新的信息

2、添加某人的信息

3、以電話號碼建立散列表

4、查找并顯示給定電話號碼的記錄

5、刪除某人的信息

6、修改某人的信息

7、顯示通訊錄中所有記錄

8、保存通訊錄所有記錄到指定文件

9、從指定文件中讀取通訊錄中的記錄 0、退出選單

選擇1,建立新的通訊錄,通訊錄創建成功,按Enter鍵進入添加信息界面,界面會出現

根據系統提示進行相應的添寫,添加成功之后,按Enter鍵返回主菜單。

選擇2,在通訊錄的末尾寫入新的信息,與上訴添加信息操作相同。同樣按Enter鍵返回主菜單。

選擇3,會立即調用沖突處理函數以及建立散列表,界面上會顯示沖突次數,哈希表容量和當前儲存記錄的個數,按Enter鍵返回主菜單。3功能鍵必須在4、5、6功能鍵之前選擇,才能使4、5、6功能鍵派上用場。

選擇4,查找某人信息,寫入查找的電話號碼,如果通訊錄中有則會出現查找成功否則出現此人不存在,查找不成功。按Enter鍵返回主菜單。

選擇5,刪除某人信息,寫入刪除的電話號碼,如果通訊錄中有則會出現刪除成功否則出現此人不存在,刪除不成功。按Enter鍵返回主菜單。

選擇6,修改某人信息,寫入修改的電話號碼,通過查找函數找到要修改的信息,在對找的的信息進行修改,如果通訊錄中 有則會出現原信息讓用戶輸入修改后的信息,根據系統的提示輸入修改后的信息,按Enter鍵會出現修改成功,否則出現此人不存在,修改不成功。按Enter鍵返回主菜單。

選擇7,界面會輸出全部成員的信息。按Enter鍵返回主菜單。選擇8,利用存盤函數保存數據到指定文件,界面會出現保存成功,按Enter鍵返回主菜單。

選擇9,載入存儲過的電話、姓名、地址,界面會出現指定文件所存儲的所有信息。按Enter鍵返回主菜單。選擇0,顯示再見,按Enter鍵退出系統。

七、源程序清單

#include #include #include #include #include #include using namespace std;#define MAXSIZE 20 //電話薄記錄數量 #define MAX_SIZE 20 //人名的最大長度 #define HASHSIZE 60 //定義表長 #define SUCCESS 1 #define UNSUCCESS-1 #define LEN sizeof(HashTable)//為建立的對象定義長度 typedef int Status;//為現有類型添加一個同義字 typedef char NA[MAX_SIZE];// typedef 掩飾數組類型 static int m=0;

typedef struct people //記錄 { NA name;NA tel;//關鍵字 NA add;}Record;//查找表中記錄類型

typedef struct //建立哈希表

{ Record *elem[HASHSIZE];//數據元素存儲基址 int count;//當前數據元素個數 int size;//當前容量 }HashTable;int i;void Menu(){ printf(“

n”);printf(“ ## ttt ―――――― ttt ##n”);printf(“

# ttt

1.創建

丨 # n”);printf(“

# ttt

―――――― #n”);printf(“

# ttt

2.寫入

丨 #n”);printf(“

# ttt

―――――― #n”);printf(“

# ttt

3.建表

丨 #n”);printf(“

# ttt

―――――― #n”);printf(“

# ttt

4.查找

丨 #n”);printf(“

# ttt

―――――― #n”);printf(“

# ttt

5.刪除

丨 #n”);printf(“

# ttt

―――――― #n”);printf(“

# ttt

6.修改

丨 #n”);printf(“

# ttt

―――――― #n”);printf(“

# ttt

7.查看

丨 #n”);printf(“

# ttt

―――――― #n”);printf(“

# ttt

8.保存

#n”);printf(“

# ttt

―――――― #n”);printf(“

# ttt

9.讀取

丨 #n”);printf(“

# ttt

―――――― #n”);printf(“

# ttt

0.退出

丨 #n”);printf(“

## ttt

―――――― ##n”);printf(“

n”);}

void benGetTime()//建立時間函數 { SYSTEMTIME sys;GetLocalTime(&sys);printf(“%4d/%02d/%02d %02d:%02d:%02d.%03d n”,sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds);}

Status NUM_BER;//記錄的個數 Status NUM_BER1;

void Create(Record* a)//創建新的通訊錄 { system(“CLS”);//調用DOS命令CLS能夠清屏

FILE *fp1,*fp2;if((fp1=fopen(“record.txt”,“r”))!=NULL)//打開文件

{ fclose(fp1);//關閉文件

} else {

fp2=fopen(“record.txt”,“w”);//如果不存在record.txt就創建一個

fclose(fp2);11 }

printf(“n”);

printf(“

#####n”);printf(“==================== → 創建成功 ← ===================n”);

printf(“

#####n”);

printf(“n”);printf(“◇◆請按ENTER進入添加通訊信息菜單◇◆n”);getchar();system(“CLS”);system(“CLS”);//調用DOS命令CLS能夠清屏

printf(“

#####n”);printf(“==================== → 用戶信息記錄表 ← ===================n”);

printf(“

#####n”);printf(“輸入要添加的個數:n”);scanf(“%d”,&NUM_BER);for(i=0;i

{ printf(“請輸入第%d個記錄的用戶名:n”,i+1);scanf(“%s”,a[i].name);printf(“請輸入%d個記錄的電話號碼:n”,i+1);scanf(“%s”,a[i].tel);printf(“請輸入第%d個記錄的地址:n”,i+1);scanf(“%s”,a[i].add);

} getchar();

printf(“

#n”);

printf(“添加成功!!n”);

benGetTime();printf(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“◇◆請按ENTER返回功能操作菜單◇◆n”);printf(“

#n”);12 getchar();}

Status eq(NA x,NA y)//關鍵字比較,相等返回SUCCESS;否則返回UNSUCCESS { if(strcmp(x,y)==0){ return SUCCESS;} else return UNSUCCESS;}

void Append(Record* a)//鍵盤輸入各人的信息 { system(“CLS”);//調用DOS命令CLS能夠清屏

printf(“

#####n”);printf(“==================== → 用戶信息記錄表 ← ===================n”);

printf(“

#####n”);printf(“輸入要添加的個數:n”);scanf(“%d”,&NUM_BER1);int j=i;for(i;i

printf(“

#n”);

printf(“添加成功!!n”);

benGetTime();13 printf(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“◇◆請按ENTER返回功能操作菜單◇◆n”);printf(“

#n”);getchar();}

void List(Record* a)//顯示通訊錄中所有記錄 { Record *p;p=a;int i;system(“CLS”);//調用DOS命令CLS能夠清屏

printf(“

#####n”);printf(“==================== → 用戶信息記錄表 ← ===================n”);

printf(“

#####n”);if(a!=NULL){

printf(“nn姓名t電話號tt地址n”);

printf(“_____________________________________________________n”);for(i=0;i

{

printf(“%st%stt%sn”,a[i].name,a[i].tel,a[i].add);

printf(“_____________________________________________________n”);

} } else { printf(“對不起!沒有任何聯系人記錄!nn”);

printf(“===============n”);} benGetTime();printf(“

#####n”);14 printf(“◇◆請按ENTER返回功能操作菜單◇◆n”);printf(“

#####n”);getchar();}

int Hash(NA str)//哈希函數 { system(“CLS”);//調用DOS命令CLS能夠清屏 long n;int m;n = atoi(str);//整型數.m=n%HASHSIZE;//造哈希函數

return m;//}

Status collision(int p,int &c)//用二次探測再散列法解決沖突 { int i,q;i=c/2+1;while(i=0)

{

return q;

} else

{

i=c/2+1;

} } else { q=(p-i*i)%HASHSIZE;把字符串轉換成用除留余數法構并返回模值 沖突處理函數,采15 c++;if(q>=0)

{

return q;

} else

{ i=c/2+1;

} } } return UNSUCCESS;}

void CreateHash(HashTable* H,Record* a)//建表,以電話號碼為關鍵字,建立相應的散列表 { system(“CLS”);//調用DOS命令CLS能夠清屏

int i,p=-1,c,pp;for(i=0;ielem[pp]!=NULL)

{ pp=collision(p,c);//若哈希地址沖突,進行沖突處理 if(pp<0)

{

printf(“

#####n”);printf(“==================== → 用戶信息記錄表 ← ===================n”);

printf(“

#####n”);printf(“第%d記錄無法解決沖突”,i+1);//需要顯示沖突次數時輸出

continue;

} //無法解決沖突,跳入下一循環

} H->elem[pp]=&(a[i]);//求得哈希地址,將信息存入 H->count++;

printf(“

#####n”);printf(“==================== → 用戶信息記錄表 ← ===================n”);

printf(“

#####n”);printf(“第%d個記錄沖突次數為%d。n”,i+1,c);//需要顯示沖突次數時輸出

} printf(“n建表完成!n此哈希表容量為%d,當前表內存儲的記錄個數為%d.n”,HASHSIZE,H->count);benGetTime();printf(“

#####n”);printf(“◇◆請按ENTER返回功能操作菜單◇◆n”);printf(“

#####n”);getchar();}

void Find(HashTable* H,int &c)//在通訊錄里查找電話號碼關鍵字,若查找成功,顯示信息 { system(“CLS”);//調用DOS命令CLS能夠清屏

printf(“

#####n”);printf(“==================== → 用戶信息記錄表 ← ===================n”);

printf(“

#####n”);benGetTime();17 NA tele;printf(“n請輸入要查找記錄的電話號碼:n”);scanf(“%s”,tele);int p,pp;p=Hash(tele);pp=p;while((H->elem[pp]!=NULL)&&(eq(tele,H->elem[pp]->tel)==-1))pp=collision(p,c);if(H->elem[pp]!=NULL&&eq(tele,H->elem[pp]->tel)==1){

printf(“

#####n”);printf(“==================== → 用戶信息記錄表 ← ===================n”);

printf(“

#####n”);printf(“n查找成功!n查找過程沖突次數為%d.以下是您需要要查找的信息:nn”,c);// printf(“姓

名:%sn電話號碼:%sn聯系地址:%sn”,H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add);

printf(“nn姓名t電話號tt地址n”);

printf(“_____________________________________________________n”);

printf(“%st%stt%sn”,H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add);

printf(“_____________________________________________________n”);} else

printf(“n此人不存在,查找不成功!n”);benGetTime();getchar();printf(“

#####n”);printf(“◇◆請按ENTER返回功能操作菜單◇◆n”);printf(“

#####n”);getchar();}

void Alter(HashTable* H,int &c)//在通訊錄里修改某人信息 { system(“CLS”);//調用DOS命令CLS能夠清屏

printf(“

#####n”);printf(“==================== → 用戶信息記錄表 ← ===================n”);

printf(“

#####n”);benGetTime();NA tele;printf(“n請輸入要修改記錄的電話號碼:n”);scanf(“%s”,tele);int p,pp;p=Hash(tele);pp=p;while((H->elem[pp]!=NULL)&&(eq(tele,H->elem[pp]->tel)==-1))pp=collision(p,c);if(H->elem[pp]!=NULL&&eq(tele,H->elem[pp]->tel)==1){

printf(“

#####n”);printf(“==================== → 用戶信息記錄表 ← ===================n”);

printf(“

#####n”);

printf(“n以下是您需要修改的信息:”);

printf(“n”);

printf(“nn姓名t電話號tt地址n”);

printf(“_____________________________________________________n”);

printf(“%st%stt%sn”,H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add);

printf(“_____________________________________________________n”);

(H->elem)[pp]->tel[0]='

主站蜘蛛池模板: 国产下药迷倒白嫩美女网站| 日本a级特黄特黄刺激大片| 一本丁香综合久久久久不卡网站| 亚洲日韩一区二区一无码| 88久久精品无码一区二区毛片| 国产无遮挡又黄又爽无vip| 无码人妻一区二区三区精品视频| 亚洲一区二区三区香蕉| 国产免费爽爽视频在线观看| 性色av一区二区三区夜夜嗨| 十八禁视频在线观看免费无码无遮挡骂过| 亚洲欧美乱日韩乱国产| 国产v亚洲v天堂无码久久久| 久久綾合久久鬼色88| 久久777国产线看观看精品| 粗大黑人巨精大战欧美成人| 欧美性猛交xxxx黑人猛交| 亚洲一区二区色一琪琪| 国产未成女一区二区| 丝袜足控一区二区三区| 国产熟女内射oooo| 久久影院午夜理论片无码| 天天爽夜夜爱| 无码人妻一区二区三区精品视频| 无码爆乳超乳中文字幕在线| 国产精品一区二区在线蜜芽tv| 天天拍天天看天天做| 人人婷婷人人澡人人爽| 男人猛吃奶女人爽视频| 青青青在线香蕉国产精品| 无码人妻精品中文字幕不卡| 久天啪天天久久99久孕妇| 国产欧美va天堂在线观看视频| 亚洲色无码专区在线观看精品| 欧美精品日韩精品一卡| 国产亚洲欧美一区二区三区在线播放| 国产成人精品日本亚洲11| 国产精品综合av一区二区国产馆| 黑巨茎大战俄罗斯美女| 久久精品国产久精国产果冻传媒| 日韩欧美亚洲中文乱码|