城市鏈表 數據庫課程設計_第1頁
城市鏈表 數據庫課程設計_第2頁
城市鏈表 數據庫課程設計_第3頁
城市鏈表 數據庫課程設計_第4頁
城市鏈表 數據庫課程設計_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、目 錄一、 設計要求-3二、 概要設計-3三、 模塊設計-4四、 詳細設計-7五、 測試分析-10六、 源程序清單-13七、 用戶手冊-35八、 總結-361 設計要求1.1 問題描述由若干個城市的信息,存入一個帶頭節點的單鏈表。節點中的城市信息包括城市名,城市坐標,城市面積,城市人口等。要求能夠利用城市名和位置坐標進行有關的查找,插入,刪除,更新等操作。1.2需求分析(1) 輸入數據建立城市鏈表。(2) 能夠根據需求實際需求進行查找(3) 能夠插入新的城市信息(4) 能夠刪除不需要的城市的信息(5) 能夠修改鏈表中每一城市的信息(6) 查看鏈表中所有的城市信息(7) 能夠對用戶輸入的數據進行

2、保存(8) 能夠保留用戶用戶自定義設置2概要設計為了實現上述需求可以從一下幾個方面著手進行設計。2.1 主菜單設計為了實現城市鏈表各功能的管理,設計一個包含有多個菜單的主控菜單,相應選項連接系統的各個子功能。為方便用戶使用,主菜單運行界面如下. 2.2 存儲結構設計本系統主要采用鏈表結構類型來存儲數據,其中節點由四個部分組成:城市名稱,城市坐標,城市人口和城市面積。2.3 系統功能設計本系統共設計了9個主要的子功能,各功能的描敘如下所述:(1) 建立城市鏈表,可以一次性的輸入多條城市的信息,建立城市信息表。該功能用CreateCityInfo ( )函數實現。(2) 瀏覽城市鏈表信息,可以查看

3、鏈表中所有城市的信息。該功能由PrintAll ( )函數來實現。(3) 查找城市中的信息,可以根據您的個性話需求來進行查找,查找設計了一個子菜單,可以選擇查找方式。按名稱查找,按坐標查找和查找的一定范圍內的城市。菜單設計如下通過調用SearchInfo()函數實現。(4) 插入功能。每次可以插入一條城市信息,插入完后可以選擇繼續插入信息來進行多條插入。通過調用InsertInfo( ) 函數來實現。(5) 城市鏈表的刪除,可以按照提示來刪除指定的數據。能夠讓用戶選擇通過何中方式來確定要刪除的文件,提供按名稱和按坐標兩種,刪除成功后會給出“刪除成功的提示”。通過調用DelInfo( )函數來實

4、現(6) 城市鏈表的更新功能。能夠讓用戶選擇通過何中方式來確定要修改的文件,提供按名稱和按坐標兩種方式,定位后用戶可以選擇修改城市的各個信息。通過調用 UpInfo()函數來實現。(7) 文件的載入和保存。用戶可以保存目前建立的城市信息,也可以從以前的文件中載入信息,從而實現數據的長期使用。通過調用FileHandle( ) 函數來實現。(8) 設置。用戶可以通過設置來改變文字大小,文字顏色,和界面背景顏色。通過調用UserSetting( )函數來實現。(9) 返回主菜單。方便用戶隨時查看主菜單,并選擇功能。通過調用SubMainMenu ( ) 函數來實現。3 模塊設計1 模塊設計本程序主

5、要包含兩個模塊:主程序模塊和鏈表操作模塊。其調用關系如下圖:主程序模塊鏈表操作模塊系統初始化模塊文件處理模塊3.2 系統子程序及功能設計本系統共設計了23個子程序,各個函數的函數名及功能說明如下。( 1 ) int MainMenu( int k );/主菜單選擇( 1.1 ) void SubMainMenu();( 1.2 ) void CustomColor(WORD ForeColor,WORD BackColor); /自定義文字顯示前景,背景色( 2 ) pCity CreateCityInfo(pCity Head);/ 城市鏈表建立 ( 3 ) void PrintOne (p

6、City );/打印一條( 3.1 ) void PrintAll (pCity p);/ 打印所有 ( 4 ) void SearchInfo(pCity Head);/查找 ( 4.1 ) pCity SearchUseName(pCity Head); /用名字查找( 4.2 ) pCity SearchUseCo(pCity Head); /用坐標查找( 4.3) pCity SearchInDis(pCity Head); /用距離查找( 5 ) void InsertInfo(pCity Head); /插入( 6 ) void DelInfo(pCity Head); /刪除信息

7、( 6.1 ) void DelUseName(pCity Head); /刪除按姓名( 6.2 ) void DelUseCo(pCity Head); /刪除按坐標( 7 ) void UpInfo(pCity Head); /修改信息( 7.1 ) void UpUseName(pCity Head);/修改用名字( 7.2 ) void UpUseCo(pCity Head);/修改用坐標( 7.3 ) void UpDetail(pCity p);/修改具體每一項 ( 8 ) void InitSetting(); /初始化用戶設置( 9 ) void UserSetting();/

8、用戶設置( 10 ) pCity FileHandle(pCity Head);/文件處理( 11 ) int YNChoice();/專門執行Y/N選擇,選是為Y,不是為N,其它無效 ( 12)int NumberChoice(int Min,int Max); /數字選擇,返回Min到Max之間的一個數 3 函數主要調用關系圖本系統函數主要調用關系圖如下所示,圖中數字是各函數的標編號。Main()11.11.2233.144.14.24.3566.16.277.17.27.310894 詳細設計1 數據類型定義(1)本系統采用鏈式存儲結構存儲城市節點,節點定義如下:struct Coord

9、int x;int y;typedef struct Citychar Name20; Coord Co;int People;int Area; City *Next; *pCity;2 系統主要子程序設計(1) 建立鏈表函數,用來建立城市鏈表pCity CreateCityInfo(pCity Head)/ 城市鏈表建立 pCity DelCity,Tem;if (Head)printf("鏈表已近存在,確定重新建立 (Y/N) ");if(YNChoice()DelCity=Head->Next;while (DelCity) /刪除所有Tem=DelCity-

10、>Next;free(DelCity);DelCity=Tem;Head=NULL;elsereturn Head; Head=(pCity)malloc(LEN);/建立頭結點Head->Next=NULL;char Name20;int Jum;/跳出輸入循環用COORD Co;int People;int Area;int k=1; int i=1; /控制while里的循環printf("請輸入城市的名稱:");fflush(stdin);gets(Name);printf("請輸入 %s 的坐標,形如(X Y):",Name);ff

11、lush(stdin);scanf("%d%d",&Co.X,&Co.Y);printf("請輸入 %s 的人口:",Name);fflush(stdin);scanf("%d",&People);printf("請輸入 %s 的面積:",Name);fflush(stdin);scanf("%d",&Area);Jum=1;while(Jum)pCity Tem=(pCity)malloc(LEN);if(k!=1)printf("請輸入城市的名稱:&

12、quot;);fflush(stdin);gets(Name);printf("請輸入 %s 的坐標,形如(X Y):",Name);fflush(stdin);scanf("%d%d",&Co.X,&Co.Y);printf("請輸入 %s 的人口:",Name);fflush(stdin);scanf("%d",&People);printf("請輸入 %s 的面積:",Name);fflush(stdin);scanf("%d",&Are

13、a);strcpy(Tem->Name,Name);Tem->Co.X=Co.X;Tem->Co.Y=Co.Y;Tem->People=People;Tem->Area=Area;Tem->Next=Head->Next;Head->Next=Tem;/連接了連個結點printf("信息錄入成功,是否繼續添加:(Y/N)");Jum=YNChoice();i=1;k+;return Head;(2) 顯示所有節點的信息,用于查看城市鏈表。void PrintOne(pCity p)printf("tt%-16s( %

14、3d,%-3d)t%-9d%-8dn",p->Name,p->Co.x,p->Co.y,p->People,p->Area);void PrintAll(pCity p)if(p)printf("全部城市信息為 :n");printf("tt城市tt坐標tt人口t面積n");while(p=p->Next)PrintOne(p);elseprintf("鏈表未建立,請先建立鏈表n");5 測試分析系統各運行界面如下,各子功能測試結果如下。5.1 建立城市鏈表在主菜單下(或“主菜單功能選項下

15、”),用戶輸入1并回車,然后按照提示建立城市鏈表,分別輸入每個城市的名稱,坐標,人口和面積,運行結構如下圖:5.2 瀏覽城市鏈表在主菜單下(或“主菜單功能選項下”),用戶輸入2并回車,可以瀏覽鏈表中的全部內容,結構如下5.3城市鏈表的查找在主菜單下(或“主菜單功能選項下”),用戶輸入3并回車,可以進入查找子菜單,如圖:用戶輸入相應選項即可進入相應功能。5.4 城市鏈表的插入在主菜單下(或“主菜單功能選項下”),用戶輸入4并回車,可以進入插入功能,按照提示輸入城市信息,即可插入新的城市信息。界面如下 5.5 城市鏈表的刪除在主菜單下(或“主菜單功能選項下”),用戶輸入5并回車,可以進入刪除子菜單

16、,按照提示輸入要刪除的城市,即可刪除該城市信息。界面如下 5.6 城市鏈表的更新在主菜單下(或“主菜單功能選項下”),用戶輸入6并回車,可以進入刪除子菜單,按照提示輸入要刪除的城市,即可刪除該城市信息。界面如下 5.7 查看給定范圍內的城市在主菜單下(或“主菜單功能選項下”),用戶輸入7并回車,可以進入查看給定范圍內的城市的高級功能,按照提示輸入中心坐標,然后在給定一個范圍,即可查找出在該范圍內的所有城市。界面如下:5.8文件的載入與保存在主菜單下(或“主菜單功能選項下”),用戶輸入8并回車,可以進入文件載入與保存的選擇功能,可以在其中載入文件數據到鏈表,也可以將鏈表中的數據保存到指定位置,子

17、菜單如下 5.9系統設置 在主菜單下(或“主菜單功能選項下”),用戶輸入9并回車,可以進入系統設置功能,可以設置系統顯示的文字顏色和顯示背景色,還可以調整文字的大小,用戶所做的更改將會自動保存,下次使用時不必重新設置,子菜單如下:6 源程序清單6.1公共頭文件“Common.h”#include <string.h>#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <conio.h>#include <windows.h>#define LEN

18、 sizeof(City)typedef struct Citychar Name20; COORD Co;int People;int Area; City *Next; *pCity;int MainMenu(int k);/主菜單選擇void Welcome();void SubMainMenu();void ColorSetting(int Word,int Back);/自定義文字顯示前景,背景色pCity CreateCityInfo(pCity Head);/ 城市鏈表建立 void PrintOne (pCity );/打印一條void PrintAll (pCity p);/

19、 打印所有 void SearchInfo(pCity Head);/查找 pCity SearchUseName(pCity Head); /用名字查找pCity SearchUseCo(pCity Head); /用坐標查找void InsertInfo(pCity Head); /插入pCity SearchInDis(pCity Head);/用距離查找pCity DelInfo(pCity Head);/刪除信息void DelUseName(pCity Head);/刪除按姓名void DelUseCo(pCity Head); /刪除按坐標pCity DelAll(pCity H

20、ead);void UpInfo(pCity Head); /修改信息void UpUseName(pCity Head);/修改用名字void UpUseCo(pCity Head);/修改用坐標void UpDetail(pCity p);/修改具體每一項 int YNChoice();/專門執行Y/N選擇,選是為Y,不是為N,其它無效int NumberChoice(int Min,int Max); /數字選擇,返回Min到Max之間的一個數 void Suspand();void InitSetting(); /初始化用戶設置pCity FileHandle(pCity Head);

21、/文件處理void UserSetting();/用戶設置“File.h”#include <wincon.h>#define _WIN32_WINNT 0x0500extern "C" WINBASEAPI HWND WINAPI GetConsoleWindow ();void SaveFile(char * SaveDirectory,pCity Head);pCity OpenFile(char * OpenDirectory,pCity Head);void Save(HANDLE hFile,char * SaveDirectory,pCity He

22、ad);void LSaveFile(char *SaveDirectory);pCity open(char *OpenDirectory,pCity Head);“Setting.h”struct UserSet /用戶設置int sFontNumber;int sFontColor;int sBackgroundColor;char Director200;struct CONSOLE_FONT /字體設置DWORD index;COORD dim;typedef BOOL (WINAPI *PROCSETCONSOLEFONT)(HANDLE, DWORD);PROCSETCONSOL

23、EFONT SetConsoleFont;WORD BasicColor8=FOREGROUND_RED,FOREGROUND_GREEN,FOREGROUND_BLUE,BACKGROUND_RED,BACKGROUND_GREEN,BACKGROUND_BLUE,FOREGROUND_INTENSITY,BACKGROUND_INTENSITY,;WORD FontColor9=BasicColor0,BasicColor1,BasicColor2,BasicColor0|BasicColor1,BasicColor0|BasicColor2,BasicColor1|BasicColor2

24、,BasicColor0|BasicColor1|BasicColor3,BasicColor0|BasicColor1|BasicColor3|BasicColor6,0 ;WORD BackColor9=BasicColor3,BasicColor4,BasicColor5,BasicColor3|BasicColor4,BasicColor3|BasicColor5,BasicColor4|BasicColor5,BasicColor3|BasicColor4|BasicColor5,BasicColor3|BasicColor4|BasicColor5|BasicColor7,0 ;v

25、oid ColorSetting();void FontSetting();“Welcome.h”typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();PROCGETCONSOLEWINDOW GetConsoleWindow;6.2 各函數文件“Common.cpp”#include "Common.h"int YNChoice() /專門執行Y/N選擇,選是為Y,不是為N,其它無效char Jump,k=1;dofflush(stdin);if (k!=1)printf("選擇有誤,請重新選擇 (Y/N): ")

26、;Jump=getchar();k+;while(!(Jump='Y'|Jump='y'|Jump='N'|Jump='n');if (Jump='Y'|Jump='y')return 1;elsereturn 0; int NumberChoice(int Min,int Max)int k=0;int x;dofflush(stdin);if(k)printf("選擇有誤,請重新選擇:");scanf("%d",&x);k+;while(x<

27、Min|x>Max);return x;void Suspand()fflush(stdin);getchar(); “Creaete.cpp”#include "Common.h"pCity CreateCityInfo(pCity Head)/ 城市鏈表建立 pCity DelCity,Tem;if (Head)printf("鏈表已近存在,確定重新建立 (Y/N) ");if(YNChoice()DelCity=Head->Next;while (DelCity) /刪除所有Tem=DelCity->Next;free(DelCi

28、ty);DelCity=Tem;Head=NULL;elsereturn Head; Head=(pCity)malloc(LEN);/建立頭結點Head->Next=NULL;char Name20;int Jum;/跳出輸入循環用COORD Co;int People;int Area;int k=1; int i=1; /控制while里的循環printf("請輸入城市的名稱:");fflush(stdin);gets(Name);printf("請輸入 %s 的坐標,形如(X Y):",Name);fflush(stdin);scanf(&

29、quot;%d%d",&Co.X,&Co.Y);printf("請輸入 %s 的人口:",Name);fflush(stdin);scanf("%d",&People);printf("請輸入 %s 的面積:",Name);fflush(stdin);scanf("%d",&Area);Jum=1;while(Jum)pCity Tem=(pCity)malloc(LEN);if(k!=1)printf("請輸入城市的名稱:");fflush(stdin

30、);gets(Name);printf("請輸入 %s 的坐標,形如(X Y):",Name);fflush(stdin);scanf("%d%d",&Co.X,&Co.Y);printf("請輸入 %s 的人口:",Name);fflush(stdin);scanf("%d",&People);printf("請輸入 %s 的面積:",Name);fflush(stdin);scanf("%d",&Area);strcpy(Tem->N

31、ame,Name);Tem->Co.X=Co.X;Tem->Co.Y=Co.Y;Tem->People=People;Tem->Area=Area;Tem->Next=Head->Next;Head->Next=Tem;/連接了連個結點printf("信息錄入成功,是否繼續添加:(Y/N)");Jum=YNChoice();i=1;k+;return Head; “Delete.cpp”#include "Common.h"pCity DelInfo(pCity Head)int Choice,k=1;if(!H

32、ead)printf("鏈表未建立,請先建立鏈表n");return Head;system("cls");printf(" *刪除選項*n");printf(" * 1.按名字 *n");printf(" * 2.按坐標 *n");printf(" * 3.刪除全部 *n");printf(" * 0.返回主菜單 *n");printf(" *n");printf("請選擇刪除方式: ");Choice=Numbe

33、rChoice(0,3);switch (Choice)case 1 :DelUseName(Head);break;case 2 :DelUseCo(Head);case 3:Head=DelAll(Head);break;default:break;return Head;void DelUseName(pCity Head) /刪除按姓名pCity p=Head,q=Head->Next,t;char CityName20;printf("請輸入要刪除的城市名稱:");fflush(stdin);gets(CityName);while (q)if (!strc

34、mp(CityName,q->Name)break;p=q;q=q->Next;if (q)t=q;p->Next=q->Next;free(t);printf("刪除成功!n"); elseprintf("沒有找到指定城市,刪除失敗!n");Suspand();void DelUseCo(pCity Head) /刪除按坐標int x , y ;pCity p= Head , q = Head->Next,t;printf("請輸入城市坐標,形如(X Y):n");scanf("%d%d&qu

35、ot;,&x,&y);while (q)if (p->Co.X=x&&p->Co.Y=y)break;p=q;q=q->Next;if (q)t=q;p->Next=q->Next;free(t);printf("刪除成功!n"); elseprintf("沒有找到指定城市,刪除失敗!n");Suspand();pCity DelAll(pCity Head)pCity p= Head->Next , q ;while (p)q=p->Next;free(p);p=q; Head=

36、NULL;printf("刪除成功n");Suspand();return Head; “Insert.cpp”#include "Common.h"void InsertInfo(pCity Head) /插入pCity p=Head;char CityName30='0'char szName30='0'COORD Co;int People;int Area;if(!Head)printf("鏈表未建立,請先建立鏈表n");Suspand();return ;fflush(stdin);print

37、f("請輸入城市的名稱:");gets(CityName);fflush(stdin);printf("請輸入 %s 的坐標,形如(X Y):",CityName);scanf("%d%d",&Co.X,&Co.Y);fflush(stdin);printf("請輸入 %s 的人口:",CityName);scanf("%d",&People);fflush(stdin);printf("請輸入 %s 的面積:",CityName);scanf(&qu

38、ot;%d",&Area);while(p->Next)p=p->Next;pCity Tem=(pCity)malloc(LEN);strcpy(Tem->Name,CityName);Tem->Co.X=Co.X;Tem->Co.Y=Co.Y;Tem->People=People;Tem->Area=Area;Tem->Next=p->Next;p->Next=Tem;printf("插入鏈表成功!n");Suspand(); “Menu.cpp”#include "Common.h

39、"int MainMenu(int k) int Choice,i=1;system("cls");if(!k)printf(" *歡迎使用城市信息系統*n");printf(" * 1. 城市鏈表建立 *n");printf(" * 2. 城市鏈表瀏覽 *n");printf(" * 3. 城市鏈表的查找 *n");printf(" * 4. 城市鏈表插入 *n");printf(" * 5. 城市鏈表刪除 *n");printf("

40、 * 6. 城市鏈表更新 *n");printf(" * 7. 文件載入和保存 *n");printf(" * 8. 設置 *n");printf(" * 9. 顯示主菜單 *n");printf(" * 0. 退出系統 *n");printf(" *n");else SubMainMenu();printf("請選擇功能: ");Choice=NumberChoice(0,9);return Choice;void SubMainMenu()printf(&quo

41、t; *n");printf(" * 1. 城市鏈表建立 *n");printf(" * 2. 城市鏈表瀏覽 *n");printf(" * 3. 城市鏈表的查找 *n");printf(" * 4. 城市鏈表插入 *n");printf(" * 5. 城市鏈表刪除 *n");printf(" * 6. 城市鏈表更新 *n");printf(" * 7. 文件載入和保存 *n");printf(" * 8. 設置 *n");p

42、rintf(" * 9. 顯示主菜單 *n");printf(" * 0. 退出系統 *n");printf(" *n");“Printf.cpp”#include "Common.h"void PrintOne(pCity p)printf("tt%-16s( %3d,%-3d)t%-9d%-8dn",p->Name,p->Co.X,p->Co.Y,p->People,p->Area);void PrintAll(pCity p)if(p)printf("

43、;全部城市信息為 :n");printf("tt城市tt坐標tt人口t面積n");while(p=p->Next)PrintOne(p);elseprintf("鏈表未建立,請先建立鏈表n");Suspand(); “Search.cpp”#include "Common.h"void SearchInfo(pCity Head) /查找int Choice;pCity pResult;system("cls");if(Head)printf(" *查找方式*n");printf

44、(" * 1.按名稱 *n");printf(" * 2.按坐標 *n");printf(" * 3.查找離城市 X 距離 Y 內的城市 *n");printf(" * 0 返回主菜單 *n");printf(" *n");printf("請輸入您的查找方式:");Choice=NumberChoice(0,3);switch (Choice)case 1:if(pResult=SearchUseName(Head)printf("找到了該城市:n");p

45、rintf("tt城市tt坐標tt人口t面積n");PrintOne(pResult);elseprintf("抱歉!沒有找到您要找的城市!n");Suspand();break;case 2:if(pResult=SearchUseCo(Head)printf("找到了該城市:n");printf("tt城市tt坐標tt人口t面積n");PrintOne(pResult);elseprintf("抱歉!沒有找到您要找的城市!n");Suspand();break;case 3:SearchIn

46、Dis(Head);Suspand();break;default:break;elseprintf("鏈表未建立,請先建立鏈表n");Suspand();pCity SearchUseName(pCity Head) /用名字查找char CityName20;pCity p=Head;printf("請輸入城市名:");fflush(stdin);gets(CityName);while (p=p->Next)if (!strcmp(CityName,p->Name)break;return p;pCity SearchUseCo(pCity Head)/用坐標查找int x,y;pCity

溫馨提示

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

評論

0/150

提交評論