數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告城市鏈表學(xué)生通訊錄管理系統(tǒng)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告城市鏈表學(xué)生通訊錄管理系統(tǒng)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告城市鏈表學(xué)生通訊錄管理系統(tǒng)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告城市鏈表學(xué)生通訊錄管理系統(tǒng)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告城市鏈表學(xué)生通訊錄管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告(2012——2013年度第一學(xué)期)課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目一:2.2學(xué)生通訊錄管理系統(tǒng)題目二:城市鏈表院系:計(jì)算機(jī)科學(xué)系班級(jí):10級(jí)軟件本(一)姓名:學(xué)號(hào):指導(dǎo)教師:成績(jī):2012年代日1數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告成績(jī)?cè)u(píng)定一、指導(dǎo)教師考語(yǔ)二、成績(jī)成績(jī)備注指導(dǎo)教師:日期:年代日2數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目<一>:2.2學(xué)生通訊錄管理系統(tǒng)一、設(shè)計(jì)要求1.問題描述紙質(zhì)的通訊錄系統(tǒng)已經(jīng)不能夠滿足大家的要求,簡(jiǎn)單扔掉、查找困難等問題是紙質(zhì)通訊錄所不能夠戰(zhàn)勝的缺點(diǎn)。“學(xué)生通訊管理系統(tǒng)”是為了幫助老師、同學(xué),也許其他一些需要使用通訊錄的人員進(jìn)行管理和解析的一種應(yīng)用程序。2.需求解析輸入數(shù)據(jù)建立通訊錄盤問通訊錄系統(tǒng)中滿足要求的信息插入新的通訊錄信息刪除不需要的通訊錄信息查察所有通訊錄信息二、大綱設(shè)計(jì)為了實(shí)現(xiàn)需求解析的功能,能夠從三個(gè)方面著手設(shè)計(jì)。1.主界面設(shè)計(jì)為了實(shí)現(xiàn)學(xué)生通訊錄管理系統(tǒng)各功能的管理,設(shè)計(jì)一個(gè)含有多個(gè)菜單項(xiàng)的主控菜單據(jù)程序以鏈接系統(tǒng)的各項(xiàng)子功能,方便用戶使用本系統(tǒng)。本系統(tǒng)主控菜單運(yùn)行界面如圖2-3所示。圖2-3“學(xué)生通訊錄管理系統(tǒng)”主菜單2.儲(chǔ)藏結(jié)構(gòu)設(shè)計(jì)本系統(tǒng)主要采用鏈表結(jié)構(gòu)種類來表示儲(chǔ)藏在“學(xué)生通訊錄管理系統(tǒng)”中的信息。其中,鏈表結(jié)點(diǎn)由四個(gè)重量構(gòu)成:通訊錄成員學(xué)號(hào)、通訊錄成員姓名、通訊錄成員電話號(hào)碼、指向該結(jié)構(gòu)體的指針。其他,本系統(tǒng)還設(shè)置了一個(gè)全局變量seat,表示通訊錄中成員的序號(hào)。3數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告3.系統(tǒng)功能設(shè)計(jì)本系統(tǒng)設(shè)置了5個(gè)子功能菜單,5個(gè)子功能的設(shè)計(jì)描述以下。(1)建立通訊錄系統(tǒng)。能夠一次輸入多個(gè)成員通訊錄的信息,建立通訊錄。該功能由creatIncreLink()函數(shù)實(shí)現(xiàn)。2)插入通訊記錄。每次能夠插入一個(gè)成員通訊錄的信息。若是要連續(xù)插入多個(gè)成員通訊錄信息必定多次選擇該功能。該功能有insertYouXu()函數(shù)實(shí)現(xiàn)。3)盤問通訊記錄。能夠按兩種方式盤問所需要的通訊錄成員記錄,一是按學(xué)號(hào)盤問,二是按姓名盤問。分別由seartNum()和seartName()函數(shù)實(shí)現(xiàn)。4)刪除通訊記錄。能夠?qū)νㄓ嶄浿胁辉傩枰男畔⑦M(jìn)行刪除。有三種刪除方式:挨次號(hào)進(jìn)行刪除,按學(xué)號(hào)進(jìn)行刪除和按姓名進(jìn)行刪除。分別由deleteElem()函數(shù),delNum()函數(shù)和delName()函數(shù)實(shí)現(xiàn)。(5)顯示通訊錄系統(tǒng)。能夠查察通訊錄中所有的通訊錄成員記錄。該功能由printList()函數(shù)實(shí)現(xiàn)。三、模塊設(shè)計(jì)1.模塊設(shè)計(jì)本程序包括兩個(gè)模塊:主程序模塊和鏈表操作模塊。其調(diào)用關(guān)系如圖2-4所示。主程序模塊鏈表操作模塊圖2-4模塊調(diào)用表示圖2.系統(tǒng)子程序及功能設(shè)計(jì)本系統(tǒng)共設(shè)置10個(gè)子程序,各程序的函數(shù)名及功能說明以下,其中大部分函數(shù)都是鏈表的基本操作函數(shù)。(1)LinkListcreatIncreLink()//鏈表的創(chuàng)辦(2)deleteElem(LinkListL,inti)//從通訊錄中挨次號(hào)刪除第i個(gè)元素(3)delName(LinkListL,charn[])//按姓名刪除通訊錄記錄(4)delNum(LinkListL,intn)//按學(xué)號(hào)刪除通訊錄記錄(5)voidinsertYouXu(LinkListL,LinkListElem)//插入一條通訊錄(6)printList(LinkListL)//打印指針地址為L(zhǎng)的通訊錄(7)prior(LinkListL,LinkListp)//查找位于當(dāng)前地址元素的前一元素的地址4數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告(8)searchName(LinkListL,intn)//按姓名查找通訊錄記錄(9)intsearchNum(LinkListL,intn)//按學(xué)號(hào)查找查找通訊錄記錄(10)voidmain()//主函數(shù)。設(shè)定界面的顏色和大小,調(diào)用鏈表操作模塊3.函數(shù)主要調(diào)用關(guān)系圖本系統(tǒng)10個(gè)子程序之間的主要調(diào)用關(guān)系如圖2-5所示。圖中數(shù)字是各函數(shù)的編號(hào)。圖2-5系統(tǒng)函數(shù)調(diào)用關(guān)系圖以下所示:四、詳細(xì)設(shè)計(jì)1.?dāng)?shù)據(jù)種類定義本系統(tǒng)采用鏈?zhǔn)浇Y(jié)構(gòu)儲(chǔ)藏通訊錄結(jié)點(diǎn)。結(jié)點(diǎn)定義以下:typedefstructLNode{intnumber;doubletelenum;charname[20];structLNode*next;}LNode,*Linklist;2.系統(tǒng)主要子程序詳細(xì)設(shè)計(jì)(1)建立鏈表的函數(shù),主要用來建立通訊錄。LinklistcreateIncreLink(){//創(chuàng)辦一個(gè)存放通訊錄成員的非遞減有序表,返回頭結(jié)點(diǎn)地址LinklistL=(Linklist)malloc(LEN);L->next=NULL;5數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告Linklistp;intnum=1,number;doubletelenum;charname[20];printf("請(qǐng)輸入學(xué)生學(xué)號(hào)、姓名和電話號(hào)碼,建立通訊錄,以'-1'為輸入結(jié)束標(biāo)志\n");printf("請(qǐng)輸入學(xué)號(hào)%d:",num);scanf("%d",&number);printf("請(qǐng)輸入姓名%d:",num);chartemp=getchar();gets(name);printf("請(qǐng)輸入電話號(hào)碼%d:",num);scanf("%1f",&telenum);while(number>=0){p=(Linklist)malloc(LEN);p->number=number;p->telenum=telenum;strcpy(p->name,name);insertYouXu(L,P);num++;printf("請(qǐng)輸入學(xué)號(hào)%d:",num);scanf("%d",&number);printf("請(qǐng)輸入姓名%d:",num);temp=getchar();gets(name);printf("請(qǐng)輸入電話號(hào)碼%d:",num);scanf("%1f",&telenum);}return(L);}(2)顯示鏈表中所有結(jié)點(diǎn)的信息,用查察通訊錄所有的記錄。6數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告voidprintList(LinkListL){//打印頭結(jié)點(diǎn)地址為L(zhǎng)的通訊錄printf("\n----------------\n");printf("學(xué)號(hào)姓名電話號(hào)碼\n");printf("----------------\n");LinkListp=L;intn=1;if(L==NULL||L->next==NULL)printf("該通訊錄中沒有元素\n");//判斷通訊錄可否為空elsewhile(p->next!=NULL){printf("%2d%-9d",n,p->next->number);printf("%-5s%.0f\n",p->next->name,p->next->telenum);p=p->next;n++;}printf("--------------------\n");return;}五、測(cè)試解析系統(tǒng)運(yùn)行主界面如圖2-3所示。各子功能測(cè)試運(yùn)行結(jié)果以下。通訊錄的建立在主菜單下,用戶輸入1并回車,爾后依照提示建立通訊錄,分別輸入通訊錄成員的學(xué)號(hào),姓名,電話號(hào)碼,運(yùn)行結(jié)果如圖2-6所示。7數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖2-6通訊錄的建立插入通訊錄記錄在主菜單下,用戶輸入2并回車,能夠插入一個(gè)新的通訊錄成員的信息,依次輸入學(xué)號(hào),姓名和電話號(hào)碼,運(yùn)行結(jié)果如圖2-7所示。圖2-7插入通訊錄3.盤問通訊錄記錄在主菜單下,用戶輸入3并回車,能夠依照兩種方式盤問通訊錄。一種是按學(xué)號(hào)盤問,另一種方式是按姓名盤問。可依照提示操作,運(yùn)行結(jié)果如圖2-8所示。8數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖2-8盤問通訊記錄刪除通訊錄記錄在主菜單下,用戶輸入4并回車,進(jìn)行通訊錄記錄的刪除。能夠按三種方式進(jìn)行刪除操作:挨次號(hào)、按學(xué)號(hào)和按姓名。圖2-9是按學(xué)號(hào)刪除的運(yùn)行結(jié)果。圖2-9刪除通訊記錄顯示通訊錄信息在主菜單下,用戶輸入5并回車,能夠查察通訊錄中的所有成員信息。運(yùn)行結(jié)果如圖2-10所示。9數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖2-10顯示通訊錄信息六、用戶手冊(cè)1)本程序執(zhí)行文件為“學(xué)生通訊錄管理系統(tǒng).exe”。2)進(jìn)入本系統(tǒng)此后,隨即顯示系統(tǒng)主菜單界面,用戶可在該界面下輸入各子菜單前對(duì)應(yīng)的數(shù)字并按回車鍵,執(zhí)行相應(yīng)子菜單命令。3)本系統(tǒng)沒有供應(yīng)直接更正通訊錄信息的功能,可經(jīng)過刪除和插入操作完成更正功能。七、調(diào)試報(bào)告調(diào)試過程中insertYouXucreateIncreLink未聲明變量。此后把對(duì)函數(shù)定義提到程序初始定義。發(fā)現(xiàn)直接將數(shù)值在調(diào)用的函數(shù)里定義、輸入、輸出,防備在主函數(shù)里傳輸數(shù)據(jù),其這樣就不易出現(xiàn)錯(cuò)誤。查找算法,運(yùn)行結(jié)果由于字母出錯(cuò)出現(xiàn)死循環(huán)。經(jīng)過此次課程設(shè)計(jì)使自己深刻認(rèn)識(shí)到自己的不足。對(duì)線性表的插入、刪除、查找等算法的實(shí)現(xiàn)有了更深一步的理解,受益多多。八、程序清單#include<stdio.h>#include<stdlib.h>#include<string.h>#defineNULL0#defineLENsizeof(LNode)intseat;//通訊錄成員的序號(hào)typedefstructLNode{//用于通訊錄結(jié)點(diǎn)intnumber;doubletelenum;charname[20];10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告structLNode*next;}LNode,*LinkList;//1.創(chuàng)辦鏈表voidinsertYouXu(LNode*pn,LinkListp);LinkListcreateIncreLink(){//創(chuàng)辦一個(gè)存放通訊錄成員的非遞減有序表,返回頭結(jié)點(diǎn)地址LinkListL=(LinkList)malloc(LEN);//頭結(jié)點(diǎn)L->next=NULL;LinkListp;intnum=1,number;doubletelenum;charname[20];printf("請(qǐng)輸入學(xué)生學(xué)號(hào)、姓名和電話號(hào)碼,建立通訊錄,以'-1'為輸入結(jié)束標(biāo)志\n");printf("請(qǐng)輸入學(xué)號(hào)%d:",num);scanf("%d",&number);printf("請(qǐng)輸入姓名%d:",num);chartemp=getchar();gets(name);printf("請(qǐng)輸入電話號(hào)碼%d:",num);scanf("%1f",&telenum);while(number>=0){p=(LinkList)malloc(LEN);//新結(jié)點(diǎn)p->number=number;p->telenum=telenum;strcpy(p->name,name);insertYouXu(L,p);//有序地插入新結(jié)點(diǎn)num++;printf("請(qǐng)輸入學(xué)號(hào)%d:",num);scanf("%d",&number);printf("請(qǐng)輸入姓名%d:",num);11數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告temp=getchar();gets(name);printf("請(qǐng)輸入電話號(hào)碼%d:",num);scanf("%1f",&telenum);}return(L);}//2.從通訊錄中刪除第i個(gè)元素voiddeleteElem(LinkListL,inti){LinkListp=L;intj=0;while(p->next&&j<i-1){p=p->next;j++;}if(!(p->next))//判斷i可否合法,i不能夠大于元素的個(gè)數(shù),也不能夠小于等于0{printf("第%d個(gè)元素刪除失敗\n",i);return;}LinkListq=p->next;p->next=q->next;free(q);//釋放刪除的結(jié)點(diǎn)}//3.按姓名刪除通訊者intdelName(LinkListL,charn[]){intflag=0;//判斷要?jiǎng)h除的通訊者和通訊錄中的姓名可否般配LinkListp=L->next;seat=1;if(L->next==NULL)printf("該鏈表中沒有元素,查找失敗\n");12數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告else{while(p!=NULL){if(!strcmp(p->name,n))//比較輸入的姓名和通訊錄中的姓名{flag=1;//輸入姓名般配printf("%s",p->name);p=p->next;deleteElem(L,seat);}else{p=p->next;seat++;}//輸入姓名不般配,指針移到下一個(gè)通訊者}if(flag)printf("被刪除\n");}returnflag;}//4.按學(xué)號(hào)刪除通訊錄intdelNum(LinkListL,intn){intflag=0;//判斷要?jiǎng)h除的通訊者LinkListp=L->next;seat=1;if(L->next==NULL)printf("該鏈表中沒有元素,刪除失敗\n");else{while(p!=NULL){if(p->number<=n){13數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告if(p->number==n){flag=1;//輸入學(xué)號(hào)般配printf("%d",p->number);p=p->next;deleteElem(L,seat);}}else{p=p->next;seat++;}}printf("被刪除\n");}returnflag;}//6.打印頭結(jié)點(diǎn)地址為L(zhǎng)的通訊錄voidprintList(LinkListL){//打印頭結(jié)點(diǎn)地址為L(zhǎng)的通訊錄printf("\n----------------\n");printf("學(xué)號(hào)姓名電話號(hào)碼\n");printf("----------------\n");LinkListp=L;intn=1;if(L==NULL||L->next==NULL)printf("該通訊錄中沒有元素\n");//判斷通訊錄可否為空elsewhile(p->next!=NULL){printf("%2d%-9d",n,p->next->number);printf("%-5s%.0f\n",p->next->name,p->next->telenum);p=p->next;n++;14數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告}printf("--------------------\n");return;}//7.找到位于當(dāng)前地址元素的前一個(gè)元素的地址LinkListprior(LinkListL,LinkListp){if(L->next==NULL)return(L);LinkListp_prior=L;while(p_prior->next!=p)p_prior=p_prior->next;return(p_prior);}//8.按姓名查找通訊者intsearchName(LinkListL,charn[]){intflag=0;//標(biāo)志要查找的通訊者和通訊錄中的姓名可否般配LinkListp=L->next;seat=1;if(L->next==NULL||L==NULL)printf("該通訊錄中沒有元素,查找失敗\n");else{while(p!=NULL){if(!strcmp(p->name,n))//比較要查找的姓名可否和當(dāng)前通訊錄所指姓名般配{flag=1;//輸入姓名般配printf("要查找的是第%d位通訊者:\n",seat);printf("Number:%dName:%sTeleNo.:%.of\n",p->number,15數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告p->name,p->telenum);}p=p->next;seat++;//!!!!!}}returnflag;}//9.按學(xué)號(hào)查找通訊者intsearchNum(LinkListL,intn){intflag=0;//標(biāo)志要查找的通訊者和通訊錄中的學(xué)號(hào)可否匹配LinkListp=L->next;seat=1;if(L->next==NULL)printf("該鏈表中沒有元素,查找失敗\n");else{while(p!=NULL){if(p->number<=n)if(p->number==n){flag=1;//輸入學(xué)號(hào)般配printf("要查找的是第%d位通訊者:\n",seat);printf("學(xué)號(hào):%d姓名:%s電話號(hào)碼.:%.of\n",p->number,p->name,p->telenum);}p=p->next;seat++;}}returnflag;16數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告}//10.主函數(shù)。設(shè)定界面的顏色大小,調(diào)用工作區(qū)模塊函數(shù)voidmain(){system("color1f");//設(shè)置界面顏色LinkListL=NULL;printf("\n*****************^@^歡迎使用通訊錄系統(tǒng)***********\n");printf("*1通訊錄的建立*\n");printf("*2插入通訊記錄*\n");printf("*3盤問通訊記錄*\n");printf("*4刪除通訊記錄*\n");printf("*5顯示通訊記錄信息*\n");printf("*0退出管理系統(tǒng)*\n");printf("\n*****************^@^歡迎使用通訊錄系統(tǒng)***********\n");intflag=0;//通訊錄可否建立intmenu;//菜單項(xiàng)選擇項(xiàng)printf("請(qǐng)選擇0-5:");printf("%d",&menu);while(menu!=0){switch(menu)//用于調(diào)用菜單的語(yǔ)句{case1:{L=creatIncreLink();//調(diào)用函數(shù)實(shí)現(xiàn)通訊錄的建立printf("建立通訊錄:");printList(L);flag=1;break;}case2:{17數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告if(flag==1){intnumber,telenum;charname[20];printf("請(qǐng)輸入通訊者的學(xué)號(hào)和姓名:\n");printf("請(qǐng)輸入學(xué)號(hào):");scanf("%d,&number");printf("請(qǐng)輸入姓名:");chartemp=getchar();gets(name);printf("請(qǐng)輸入電話號(hào)碼:");scanf("%d",&telenum);LinkListp=(LinkList)malloc(LEN);//新結(jié)點(diǎn)p->number=number;strcpy(p->name,name);p->telenum=telenum;insertYouXu(L,p);//有序的插入新結(jié)點(diǎn)printf("插入后:");printfList(L);}elseprintf("\nERROR:通訊錄還沒有建立,請(qǐng)先建立通訊錄\n");break;}case3:{intway,n,s;//查找方式charna[20];if(L!=NULL){if(flag)//通訊錄已建立{18數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告printf("選擇查找方式:\n");printf("1.按學(xué)號(hào)2.按姓名");scanf("%d",&way);if(way==1){printf("\n請(qǐng)輸入學(xué)號(hào):");scanf("%d",&n);s=searchNum(L,n);//查找通訊錄成員if(s==0)printf("無(wú)此通訊者,查找失??!\n");}elseif(way==2){printf("\n請(qǐng)輸入姓名:");chartemp=getchar();gets(na);s=searchName(L,na);if(s==0)printf("無(wú)此通訊者,查找失??!\n");}elseprintf("通訊錄中無(wú)記錄!\n");}break;}elseprintf("通訊錄中無(wú)記錄!\n");break;}case4:{intway;//刪除方式printf("請(qǐng)選擇刪除方式:1.挨次號(hào)2.按學(xué)號(hào)3.按姓名\n");scanf("%d",&way);if(way==1)19數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告{intn;printf("請(qǐng)輸入通訊錄序號(hào):");scanf("%d",&n);printf("刪除后:\n");deleteElem(L,n);//挨次號(hào)刪除printfList(L);}elseif(way==2){intn,f;printf("請(qǐng)輸入學(xué)號(hào):");scanf("%d",&n);f=delNum(L,n);if(f!=0){printf("刪除后:\n");printfList(L);}elseprintf("無(wú)該學(xué)號(hào),刪除失敗!\n");}elseif(way==3);{charna[20];intf;printf("請(qǐng)輸入姓名:");chartemp=getchar();f=delName(L,na);if(f!=0){printf("刪除后:\n");printfList(L);}elseprintf("無(wú)該學(xué)號(hào),刪除失敗!\n");}elseprintf("ERROR?。n");20數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告break;}case5:{printf("當(dāng)前通訊錄記錄內(nèi)容以下:\n");printfList(L);break;}case0:exit(0);default:printf("\n沒有此功能,重新輸入\n");}printf("選擇功能:");scanf("%d",&menu);}}21數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目<二>:城市鏈表一、設(shè)計(jì)要求1.問題描述將各個(gè)城市的信息存入一個(gè)帶頭結(jié)點(diǎn)的單鏈表。結(jié)點(diǎn)中的城市信息包括城市名、地址坐標(biāo)。要求能夠利用城市名和地址坐標(biāo)進(jìn)行有關(guān)查找、插入、刪除更新等操作。2.需求解析1)輸入城市信息,建立城市鏈表2)依照城市名也許地址對(duì)城市進(jìn)行查找3)向城市鏈表中加入新的城市4)依照城市名或地址刪除城市鏈表中的城市5)更新城市鏈表中城市的信息6)找尋離某點(diǎn)距離為d的城市,并輸出它的信息7)查察城市鏈表中所以城市的信息二、大綱設(shè)計(jì)1.主界面設(shè)計(jì)為了實(shí)現(xiàn)城市鏈表的各種功能,為了方便用戶使用本系統(tǒng)。本系統(tǒng)主控菜單運(yùn)行界面如圖2-1所示。22數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖2-1“城市鏈表”主菜單2.儲(chǔ)藏結(jié)構(gòu)設(shè)計(jì)本系統(tǒng)采用帶頭節(jié)點(diǎn)的鏈表結(jié)構(gòu)來儲(chǔ)蓄“城市鏈表”中的信息。鏈表節(jié)點(diǎn)有4個(gè)成員:城市名、城市的橫坐標(biāo)、城市的縱坐標(biāo),指向該結(jié)構(gòu)體的指針。3.系統(tǒng)功能設(shè)計(jì)本系統(tǒng)設(shè)置了9個(gè)子功能菜單,9個(gè)子功能的設(shè)計(jì)描述以下。(1)建立城市鏈表。由函數(shù)creatLink()實(shí)現(xiàn),該功能實(shí)現(xiàn)城市結(jié)點(diǎn)的輸入以及連接。能夠初始化鏈表,輸入城市名“end”時(shí)表示建立結(jié)束。(3)插入鏈表記錄。由函數(shù)insert()實(shí)現(xiàn)。該功能實(shí)現(xiàn)按坐標(biāo)由小到大的序次將結(jié)點(diǎn)插入到鏈表中。(4)盤問鏈表記錄。由searchName()函數(shù)和searchPos()函數(shù)實(shí)現(xiàn)。其中searchName()實(shí)現(xiàn)依照城市名盤問的操作,searchPos()實(shí)現(xiàn)依照城市坐標(biāo)盤問的操作。(5)刪除鏈表記錄。由delName()函數(shù)和delPos()函數(shù)實(shí)現(xiàn)。其中delName的操作。(6)顯示鏈表記錄。由printList()函數(shù)實(shí)現(xiàn)。該功能實(shí)現(xiàn)格式化的鏈表23數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告輸出操作,能夠顯示更正后的鏈表狀態(tài)。(7)更新鏈表信息。由update()函數(shù)實(shí)現(xiàn)。該功能實(shí)現(xiàn)依照城市名更新城市的坐標(biāo)信息。(8)輸出鏈表。由函數(shù)PrintLn()來實(shí)現(xiàn)。輸出鏈表里所有城市的信息。(9)城市找尋。由函數(shù)Search()來實(shí)現(xiàn)。給定一個(gè)地址,找尋距離它d的城市,并輸出他們的信息。三、模塊設(shè)計(jì)1.模塊設(shè)計(jì)本程序包括兩個(gè)模塊:主程序模塊和鏈表操作模塊。調(diào)用關(guān)系如圖(2)所示。主程序模塊鏈表操作模塊圖2-2模塊調(diào)用表示圖2.系統(tǒng)子程序及功能設(shè)計(jì)本系統(tǒng)共設(shè)置3個(gè)子程序,各程序的函數(shù)名及功能說明以下:(1)LinklistcreatLink()//創(chuàng)辦一個(gè)城市鏈表,返回頭結(jié)點(diǎn)地址(2)printList(LinklistL)//打印頭結(jié)點(diǎn)地址為L(zhǎng)的城市鏈表(3)intsearchName(LinklistL,charname[])//以城市名查找(4)intsearchPos(LinklistL,intpx,intpy)//以城市坐標(biāo)查找(5)intinsert(LinklistL,Linklistcity)//插入(6)intdelName(LinklistL,charname[])//利用城市名稱刪除(7)intdelPos(LinklistL,intpx,intpy)//利用坐標(biāo)刪除(8)intupdate(LinklistL,charname[])//更新(9)intgetPos(LinklistL,charname[])//給定一個(gè)城市名,返回城市坐標(biāo)(10)intgetCity(LinklistL,intpx,intpy,intd)//給定一個(gè)城市坐標(biāo)P,返回距離小于等于d的城市(11)voidmain()//主函數(shù),實(shí)現(xiàn)鏈表各項(xiàng)操作的選擇3.函數(shù)主要調(diào)用關(guān)系圖本系統(tǒng)3個(gè)子程序之間的主要調(diào)用關(guān)系如圖2-3所示。圖中數(shù)字是各函數(shù)的編號(hào)。24數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告11main()1234567891022222四、詳細(xì)設(shè)計(jì)1.?dāng)?shù)據(jù)種類定義(1)數(shù)據(jù)種類定義typedefstructLNode{//城市結(jié)點(diǎn)charname[20];intposx;//橫坐標(biāo)intposy;//縱坐標(biāo)structLNode*next;}LNode,*Linklist;2.系統(tǒng)主要子程序詳細(xì)設(shè)計(jì)(1)建立城市鏈表LinklistcreatLink()//創(chuàng)辦一個(gè)城市鏈表,返回頭結(jié)點(diǎn)地址{LinklistL=(Linklist)malloc(LEN);//頭結(jié)點(diǎn)L->next=NULL;Linklistp;charname[20];intpx;intpy;25數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告charend[4]="end";printf("請(qǐng)輸入城市名稱、橫坐標(biāo)和縱坐標(biāo),建立城市鏈表,以'end'為輸入結(jié)束標(biāo)志\n");printf("請(qǐng)輸入城市名稱:");scanf("%s",name);while(strcmp(name,end)){printf("請(qǐng)輸入橫坐標(biāo)x:");scanf("%d",&px);printf("請(qǐng)輸入縱坐標(biāo)y:");scanf("%d",&py);p=(Linklist)malloc(LEN);//新結(jié)點(diǎn)strcpy(p->name,name);p->posx=px;p->posy=py;insert(L,p);//插入新結(jié)點(diǎn)printf("請(qǐng)輸入城市名稱:");scanf("%s",name);}return(L);}(2)插入鏈表記錄intinsert(LinklistL,Linklistcity){//插入Linklistp=L->next;Linklistp_prior=L;while(p!=NULL&&city->posx>=p->posx){if(p->posx==city->posx&&p->posy==city->posy){printf("重復(fù)輸入!\n");return0;}26數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告p=p->next;}//確定city插入的地址while(p_prior->next!=p){p_prior=p_prior->next;}if(p==NULL){p=p_prior;city->next=NULL;p->next=city;}else//若為空表,插到頭結(jié)點(diǎn)此后{p=p_prior;city->next=p->next;p->next=city;}return1;}按名稱刪鏈表記錄intdelName(LinklistL,charname[20]){//利用城市名稱刪除intflag=0;intseat=1;Linklistp=L;if(p->next==NULL)printf("該鏈表中沒有元素,刪除失敗\n");else{while(p->next!=NULL){27數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告if(!strcmp(p->next->name,name)){flag=1;printf("城市%s被刪除\n",name);Linklistq=p->next;p->next=q->next;free(q);}else{p=p->next;}}}returnflag;}五、測(cè)試解析系統(tǒng)運(yùn)行主界面如圖2-1所示。各子功能測(cè)試運(yùn)行結(jié)果以下。城市鏈表建立主菜單下輸入1并回車,依照提示輸入鏈表信息,輸入“end”結(jié)束建立。運(yùn)行結(jié)果如圖2-3所示。28數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖2-3城市鏈表的建立插入鏈表主菜單下輸入2并回車,能夠進(jìn)行鏈表插入,運(yùn)行結(jié)果如圖2-4所示。圖2-4插入鏈表29數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告查找鏈表主菜單下輸入3并回車能夠查找鏈表,再依照提示選擇按城市名查找還是城市地址坐標(biāo)查找。運(yùn)行結(jié)果如圖2-5所示。圖2-5查找鏈表刪除鏈表主菜單下輸入4并回車能夠刪除鏈表。運(yùn)行結(jié)果如圖2-6所示30數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖2-6刪除鏈表顯示當(dāng)前鏈表記錄主菜單下輸入5并回車能夠顯示當(dāng)前鏈表。運(yùn)行結(jié)果如圖2-7所示。圖2-7當(dāng)前鏈表顯示更新鏈表記錄主菜單下輸入6并回車能夠更新鏈表記錄。運(yùn)行結(jié)果如圖2-8所示圖2-8鏈表更新記錄返回城市坐標(biāo)志錄主菜單下輸入7并回車能夠顯示當(dāng)前鏈表。運(yùn)行結(jié)果如圖2-9所示31數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖2-9返回鏈表記錄8.查察當(dāng)前坐標(biāo)p小于等于d的城市主菜單下輸入8并回車能夠查察坐標(biāo)p小于等于d的城市。運(yùn)行結(jié)果如圖2-10所示六、用戶手冊(cè)1)本程序執(zhí)行文件為“城市鏈表.exe”。2)進(jìn)入本系統(tǒng)后,能夠選擇菜單功能項(xiàng),第一選擇功能1建立城市鏈表的基本數(shù)據(jù)后方可進(jìn)行2-8的功能。3)在盤問和刪除鏈表記錄中,均能夠依照需要依照兩種方式執(zhí)行鏈表操作,一種是依照城市的名稱,一種則是依照城市的坐標(biāo)實(shí)現(xiàn)。七、調(diào)試報(bào)告while后多出分號(hào)以致查找鏈表時(shí)出現(xiàn)死循環(huán),經(jīng)過此次的編寫調(diào)試,認(rèn)真和耐心是最最重要的,而對(duì)于線性表的每一個(gè)功能都需屢次測(cè)試。由于自己能力不夠,對(duì)從前所學(xué)的數(shù)據(jù)結(jié)構(gòu)與算法有所忘掉,在編寫程序中對(duì)算法的理解有點(diǎn)費(fèi)力,最后重新預(yù)習(xí)下課本,最后完成該鏈表,對(duì)鏈表的插入、刪除,查找等算法的操作有了更深的認(rèn)識(shí)與理解。受益匪淺。若是有n個(gè)城市結(jié)點(diǎn),時(shí)間復(fù)雜度為0(n)。八、程序清單#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#defineLENsizeof(LNode)typedefstructLNode{charname[20];intposx;//橫坐標(biāo)32數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告intposy;//縱坐標(biāo)structLNode*next;}LNode,*Linklist;用于城市結(jié)點(diǎn)intinsert(LinklistL,Linklistcity);LinklistcreatLink()//創(chuàng)辦一個(gè)城市鏈表,返回頭結(jié)點(diǎn)地址{LinklistL=(Linklist)malloc(LEN);//頭結(jié)點(diǎn)L->next=NULL;Linklistp;charname[20];intpx;intpy;charend[4]="end";printf("請(qǐng)輸入城市名稱、橫坐標(biāo)和縱坐標(biāo),建立城市鏈表,以'end'為輸入結(jié)束標(biāo)志\n");printf("請(qǐng)輸入城市名稱:");scanf("%s",name);while(strcmp(name,end)){printf("請(qǐng)輸入橫坐標(biāo)x:");scanf("%d",&px);printf("請(qǐng)輸入縱坐標(biāo)y:");scanf("%d",&py);p=(Linklist)malloc(LEN);//新結(jié)點(diǎn)strcpy(p->name,name);p->posx=px;p->posy=py;insert(L,p);//插入新結(jié)點(diǎn)printf("請(qǐng)輸入城市名稱:");scanf("%s",name);33數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告}return(L);}voidprintList(LinklistL){//打印頭結(jié)點(diǎn)地址為L(zhǎng)的城市鏈表printf("\n------------------------\n");printf("城市\(zhòng)t坐標(biāo)\n");printf("-------------------------\n");Linklistp=L->next;intn=1;if(L->next==NULL)printf("該鏈表中沒有元素\n");elsewhile(p!=NULL){printf("%s",p->name);printf("\t(%d,%d)\n",p->posx,p->posy);p=p->next;}printf("-------------------------\n");return;}intsearchName(LinklistL,charname[20]){//以城市名查找intflag=0;Linklistp=L->next;if(L->next==NULL)printf("該鏈表中沒有元素,查找失敗\n");else{while(p!=NULL){if(!strcmp(p->name,name)){flag=1;34數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告printf("您要查找的是%s城市\(zhòng)n",p->name);printf("該城市坐標(biāo)為(%d,%d)\n",p->posx,p->posy);}p=p->next;}}returnflag;}intsearchPos(LinklistL,intpx,intpy){//以城市坐標(biāo)查找intflag=0;Linklistp=L->next;if(L->next==NULL)printf("該鏈表中沒有元素,查找失敗\n");else{while(p!=NULL){if(p->posx==px&&p->posy==py){flag=1;printf("您要查找城市坐標(biāo)為(%d,%d)\n",p->posx,p->posy);printf("該城市是%s\n",p->name);}p=p->next;}}returnflag;}intinsert(LinklistL,Linklistcity){//插入Linklistp=L->next;Linklistp_prior=L;35數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告while(p!=NULL&&city->posx>=p->posx){if(p->posx==city->posx&&p->posy==city->posy){printf("重復(fù)輸入!\n");return0;}p=p->next;}//確定city插入的地址while(p_prior->next!=p){p_prior=p_prior->next;}if(p==NULL){p=p_prior;city->next=NULL;p->next=city;}else//若為空表,插到頭結(jié)點(diǎn)此后{p=p_prior;city->next=p->next;p->next=city;}return1;}intdelName(LinklistL,charname[20]){//利用城市名稱刪除intflag=0;intseat=1;Linklistp=L;36數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告if(p->next==NULL)printf("該鏈表中沒有元素,刪除失敗\n");else{while(p->next!=NULL){if(!strcmp(p->next->name,name)){flag=1;printf("城市%s被刪除\n",name);Linklistq=p->next;p->next=q->next;free(q);}else{p=p->next;}}}returnflag;}intdelPos(LinklistL,intpx,intpy){//利用坐標(biāo)刪除intflag=0;Linklistp=L;if(p->next==NULL)printf("該鏈表中沒有元素,刪除失敗\n");else{while(p->next!=NULL){if(p->next->posx==px&&p->next->posy==py){37數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告Linklistq=p->next;p->next=q->next;free(q);flag=1;printf("坐標(biāo)為(%d,%d)的城市被刪除\n",px,py);}else{p=p->next;}}}returnflag;}intupdate(LinklistL,charname[20]){//更新intflag=0;Linklistp=L->next;if(L->next==NULL||L==NULL)printf("該鏈表中沒有元素,更新失敗\n");else{while(p!=NULL){if(!strcmp(p->name,name)){flag=1;printf("您要更新的是%s城市\(zhòng)n",p->name);printf("請(qǐng)輸入橫坐標(biāo)x:");scanf("%d",&p->posx);printf("請(qǐng)輸入縱坐標(biāo)y:");scanf("%d",&p->posy);}p=p->next;}}38數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告returnflag;}intgetPos(LinklistL,charname[20]){//給定一個(gè)城市名,返回城市坐標(biāo)intflag=0;Linklistp=L->next;if(L->next==NULL||L==NULL)printf("該鏈表中沒有元素,返回坐標(biāo)失敗\n");else{while(p!=NULL){if(!strcmp(p->name,name)){flag=1;printf("您要查察的是%s城市\(zhòng)n",p->name);printf("該城市坐標(biāo)為:(%d,%d)\n",p->posx,p->posy);}p=p->next;}}returnflag;}intgetCity(LinklistL,intpx,intpy,intd){//給定一個(gè)城市坐標(biāo)P,返回距離小于等于d的城市intflag=0;doubledistance;Linklistp=L->next;if(L->next==NULL||L==NULL)printf("該鏈表中沒有元素,返回坐標(biāo)失敗\n");else{while(p!=NULL){39數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告distance=sqrt((p->posx-px)^2+(p->posy-py)^2);if(distance<=d){flag=1;printf("該城市為:%s",p->name);}p=p->next;}}printf("\n");returnflag;}voidmain(){LinklistL=NULL;printf("\n**************歡迎使用城市鏈表系統(tǒng)***************\n");printf("*1建立城市鏈表*\n");printf("*2插入鏈表記錄*\n");printf("*3盤問鏈表記錄*\n");printf("*4刪除鏈表記錄*\n");printf("*5顯示鏈表記錄*\n");printf("*6更新鏈表信息*\n");printf("*7返回城市坐標(biāo)*\n");printf("*8查察與坐標(biāo)P距離小于等于D的城市*\n");printf("*9退出鏈表系統(tǒng)*\n");printf("*************歡迎使用城市鏈表系統(tǒng)****************\n");intmain_flag=0;intflag;40數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告intmenu;printf("請(qǐng)選擇1-9:");scanf("%d",&menu);while(menu){switch(menu){case1://建立城市鏈表{L=creatLink();printf("建立城市鏈表:");printList(L);main_flag=1;break;}case2://插入鏈表記錄{if(main_flag==1){charname[20];intpx,py;printf("請(qǐng)輸入城市名稱:");scanf("%s",name);printf("請(qǐng)輸入橫坐標(biāo)x:");scanf("%d",&px);printf("請(qǐng)輸入縱坐標(biāo)y:");scanf("%d",&py);Linkl

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論