電話號碼查詢系統實驗報告


一、 問題描述及分析

寫清楚你要實現的是個什么系統,完成的都是什么功能?

實現一個電話號碼查詢系統,能夠完成通訊鏈表的建立、通訊者的插入、通訊者的查詢、顯示所有通訊者的信息以及保存通訊錄、退出程序等功能。

二、 功能模塊及數據結構描述

系統划分成幾個模塊,幾個模塊之間是什么調用關系?畫出系統結構圖

共六個模塊:1.增加信息2.顯示信息3.查找號碼4.清除信息5.保存信息6.退出系統

模塊均被主程序調用,除主函數外其他是並列關系。

 

一、 主要算法流程描述及部分核心算法

 

主要模塊的算法介紹,畫出其流程圖

 

void getin(Record* a)

 

{

 

    //鍵盤輸入各人的信息

 

    printf("輸入要添加的個數:\n");

 

    scanf("%d",&NUM_BER);

 

    int i;

 

    for(i=0; i<NUM_BER; 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);

 

    }

 

}

 

void CreateHash1(HashTable* H,Record* a)

 

{//建表,以人的姓名為關鍵字,建立相應的散列表,並解決相應的沖突

 

    int i,p=-1,c,pp;

 

    for(i=0; i<NUM_BER; i++)

 

    {

 

        c=0;

 

        p=Hash1(a[i].name);

 

        pp=p;

 

        while(H->elem[pp]!=NULL)

 

        {

 

            pp=collision(p,c);

 

            if(pp<0)

 

            {

 

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

 

                continue;

 

            }                                   //無法解決沖突,跳入下一循環(+1)

 

        }

 

        H->elem[pp]=&(a[i]);                      //求得散列地址,將信息存入

 

        H->count++;

 

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

 

    }

 

    printf("\n建表完成!\n此散列表容量為%d,當前表內存儲的記錄個數為%d.\n",HASHSIZE,H->count);

 

}

 

 

 

void SearchHash1(HashTable* H,int &c)

 

{//在通訊錄里查找姓名關鍵字,若查找成功,顯示信息//c用來顯示沖突次數

 

    NA str;

 

    printf("\n請輸入要查找記錄的姓名:\n");

 

    scanf("%s",str);

 

    int p,pp;

 

    p=Hash1(str);

 

    pp=p;

 

    while((H->elem[pp]!=NULL)&&(eq(str,H->elem[pp]->name)==-1))

 

        pp=collision(p,c);

 

    if(H->elem[pp]!=NULL&&eq(str,H->elem[pp]->name)==1)

 

    {

 

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

 

        printf("姓  名:%s\n電話號碼:%s\n聯系地址:%s\n",H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add);

 

    }

 

    else printf("\n此人不存在,查找不成功!\n");

 

}

 

 

 

void CreateHash2(HashTable* H,Record* a)

 

{//建表,以電話號碼為關鍵字,建立相應的散列表,並解決相應的沖突

 

    int i,p=-1,c,pp;

 

    for(i=0; i<NUM_BER; i++)

 

    {

 

        c=0;

 

        p=Hash2(a[i].tel);

 

        pp=p;

 

        while(H->elem[pp]!=NULL)

 

        {

 

            pp=collision(p,c);

 

            if(pp<0)

 

            {

 

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

 

                continue;

 

            }                                      //無法解決沖突,跳入下一循環(+1)

 

        }

 

        H->elem[pp]=&(a[i]);                      //求得散列地址,將信息存入

 

        H->count++;

 

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

 

    }

 

    printf("\n建表完成!\n此散列表容量為%d,當前表內存儲的記錄個數為%d.\n",HASHSIZE,H->count);

 

}

 

 

 

void SearchHash2(HashTable* H,int &c)

 

{//在通訊錄里查找電話號碼關鍵字,若查找成功,顯示信息//c用來記錄沖突次數,查找成功時顯示沖突次數

 

    NA tele;

 

    printf("\n請輸入要查找記錄的電話號碼:\n");

 

    scanf("%s",tele);

 

    int p,pp;

 

    p=Hash2(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查找成功!\n查找過程沖突次數為%d.以下是您需要要查找的信息:\n",c);

 

        printf("姓  名:%s\n電話號碼:%s\n聯系地址:%s\n",H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add);

 

    }

 

    else printf("\n此人不存在,查找不成功!\n");

 

}

 

 

 

void Save()

 

{//保存數據函數

 

    FILE *fp;

 

    if((fp=fopen("c:\test.txt", "w"))==NULL)

 

    {

 

        printf("\nERROR opening customet file");

 

    }

 

    fclose(fp);

 

}

 

int main(int argc, char* argv[])

 

{

 

    int c,flag=1;

 

    HashTable *H;

 

    H=(HashTable*)malloc(LEN);

 

    for(int i=0; i<HASHSIZE; i++)

 

        H->elem[i]=NULL;

 

    H->size=HASHSIZE;

 

    H->count=0;

 

    Record a[MAXSIZE];

 

    printf("                歡迎使用電話號碼查找系統             ");

 

    printf("\n             1.  添加用戶信息                         ");

 

    printf("\n             2.  讀取所有用戶信息                     ");

 

    printf("\n             3.  以姓名建表                           ");

 

    printf("\n             4.  以電話號碼建表                       ");

 

    printf("\n             5.  查找並顯示給定用戶名的記錄           ");

 

    printf("\n             6.  查找並顯示給定電話號碼的記錄         ");

 

    printf("\n             7.  清空                                 ");

 

    printf("\n             8.  保存                                 ");

 

    printf("\n             9.  退出程序                             ");

 

    printf("\n       注意:                                         ");

 

    printf("\n             .進行5操作前 請先輸出3               ");

 

    printf("\n             .進行6操作前 請先輸出4               ");

 

    printf("\n");

 

    printf("請輸入你想要的操作:");

 

    printf("\n");

 

    while(1)

 

    {

 

 

 

        int num;

 

        scanf("%d",&num);

 

        switch(num)

 

        {

 

        case 1:

 

            getin(a);

 

            break;

 

        case 2:

 

            ShowInformation(a);

 

            break;

 

        case 3:

 

            CreateHash1(H,a);   // 以姓名建立散列表

 

            break;

 

        case 4:

 

            CreateHash2(H,a);   // 以電話號碼建立散列表

 

            break;

 

        case 5:

 

            c=0;

 

            SearchHash1(H,c);   //以姓名查找數據

 

            break;

 

        case 6:

 

            c=0;

 

            SearchHash2(H,c);   //以電話號碼查找數據

 

            break;

 

        case 7:

 

            Cls(a);

 

            break;

 

        case 8:

 

            Save();

 

            break;

 

        case 9:

 

            return 0;

 

            break;

 

        default:

 

            printf("輸入錯誤,請重新輸入!");

 

            printf("\n");

 

        }

 

    }

 

    system("pause");

 

    return 0;

 

}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM