城市链表 数据库课程设计.docx
《城市链表 数据库课程设计.docx》由会员分享,可在线阅读,更多相关《城市链表 数据库课程设计.docx(43页珍藏版)》请在冰豆网上搜索。
![城市链表 数据库课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/21/df1c4620-8c52-4719-8801-19bd26251bd9/df1c4620-8c52-4719-8801-19bd26251bd91.gif)
城市链表数据库课程设计
一、设计要求----------------------------------------------------------3
二、概要设计----------------------------------------------------------3
三、模块设计----------------------------------------------------------4
四、详细设计----------------------------------------------------------7
五、测试分析----------------------------------------------------------10
六、源程序清单------------------------------------------------------13
七、用户手册---------------------------------------------------------35
八、总结---------------------------------------------------------------36
1设计要求
1.1问题描述
由若干个城市的信息,存入一个带头节点的单链表。
节点中的城市信息包括城市名,城市坐标,城市面积,城市人口等。
要求能够利用城市名和位置坐标进行有关的查找,插入,删除,更新等操作。
1.2需求分析
(1)输入数据建立城市链表。
(2)能够根据需求实际需求进行查找
(3)能够插入新的城市信息
(4)能够删除不需要的城市的信息
(5)能够修改链表中每一城市的信息
(6)查看链表中所有的城市信息
(7)能够对用户输入的数据进行保存
(8)能够保留用户用户自定义设置
2概要设计
为了实现上述需求可以从一下几个方面着手进行设计。
2.1主菜单设计
为了实现城市链表各功能的管理,设计一个包含有多个菜单的主控菜单,相应选项连接系统的各个子功能。
为方便用户使用,主菜单运行界面如下.
2.2存储结构设计
本系统主要采用链表结构类型来存储数据,其中节点由四个部分组成:
城市名称,城市坐标,城市人口和城市面积。
2.3系统功能设计
本系统共设计了9个主要的子功能,各功能的描叙如下所述:
(1)建立城市链表,可以一次性的输入多条城市的信息,建立城市信息表。
该功能用CreateCityInfo()函数实现。
(2)浏览城市链表信息,可以查看链表中所有城市的信息。
该功能由PrintAll()函数来实现。
(3)查找城市中的信息,可以根据您的个性话需求来进行查找,查找设计了一个子菜单,可以选择查找方式。
按名称查找,按坐标查找和查找的一定范围内的城市。
菜单设计如下通过调用SearchInfo()函数实现。
(4)插入功能。
每次可以插入一条城市信息,插入完后可以选择继续插入信息来进行多条插入。
通过调用InsertInfo()函数来实现。
(5)城市链表的删除,可以按照提示来删除指定的数据。
能够让用户选择通过何中方式来确定要删除的文件,提供按名称和按坐标两种,删除成功后会给出“删除成功的提示”。
通过调用DelInfo()函数来实现
(6)城市链表的更新功能。
能够让用户选择通过何中方式来确定要修改的文件,提供按名称和按坐标两种方式,定位后用户可以选择修改城市的各个信息。
通过调用UpInfo()函数来实现。
(7)文件的载入和保存。
用户可以保存目前建立的城市信息,也可以从以前的文件中载入信息,从而实现数据的长期使用。
通过调用FileHandle()函数来实现。
(8)设置。
用户可以通过设置来改变文字大小,文字颜色,和界面背景颜色。
通过调用UserSetting()函数来实现。
(9)返回主菜单。
方便用户随时查看主菜单,并选择功能。
通过调用SubMainMenu()函数来实现。
3模块设计
1模块设计
本程序主要包含两个模块:
主程序模块和链表操作模块。
其调用关系如下图:
3.2系统子程序及功能设计
本系统共设计了23个子程序,各个函数的函数名及功能说明如下。
(1)intMainMenu(intk);//主菜单选择
(1.1)voidSubMainMenu();
(1.2)voidCustomColor(WORDForeColor,WORDBackColor);
//自定义文字显示前景,背景色
(2)pCityCreateCityInfo(pCityHead);//城市链表建立
(3)voidPrintOne(pCity);//打印一条
(3.1)voidPrintAll(pCityp);//打印所有
(4)voidSearchInfo(pCityHead);//查找
(4.1)pCitySearchUseName(pCityHead);//用名字查找
(4.2)pCitySearchUseCo(pCityHead);//用坐标查找
(4.3)pCitySearchInDis(pCityHead);//用距离查找
(5)voidInsertInfo(pCityHead);//插入
(6)voidDelInfo(pCityHead);//删除信息
(6.1)voidDelUseName(pCityHead);//删除按姓名
(6.2)voidDelUseCo(pCityHead);//删除按坐标
(7)voidUpInfo(pCityHead);//修改信息
(7.1)voidUpUseName(pCityHead);//修改用名字
(7.2)voidUpUseCo(pCityHead);//修改用坐标
(7.3)voidUpDetail(pCityp);//修改具体每一项
(8)voidInitSetting();//初始化用户设置
(9)voidUserSetting();//用户设置
(10)pCityFileHandle(pCityHead);//文件处理
(11)intYNChoice();//专门执行Y/N选择,选是为Y,不是为N,其它无效
(12)intNumberChoice(intMin,intMax);//数字选择,返回Min到Max之间的一个数
3函数主要调用关系图
本系统函数主要调用关系图如下所示,图中数字是各函数的标编号。
4详细设计
1数据类型定义
(1)本系统采用链式存储结构存储城市节点,节点定义如下:
structCoord
{
intx;
inty;
};
typedefstructCity
{
charName[20];
CoordCo;
intPeople;
intArea;
City*Next;
}*pCity;
2系统主要子程序设计
(1)建立链表函数,用来建立城市链表
pCityCreateCityInfo(pCityHead)//城市链表建立
{
pCityDelCity,Tem;
if(Head)
{
printf("链表已近存在,确定重新建立(Y/N)");
if(YNChoice())
{
DelCity=Head->Next;
while(DelCity)//删除所有
{
Tem=DelCity->Next;
free(DelCity);
DelCity=Tem;
}
Head=NULL;
}
else
returnHead;
}
Head=(pCity)malloc(LEN);//建立头结点
Head->Next=NULL;
charName[20];
intJum;//跳出输入循环用
COORDCo;
intPeople;
intArea;
intk=1;
inti=1;//控制while里的循环
printf("请输入城市的名称:
");
fflush(stdin);
gets(Name);
printf("请输入%s的坐标,形如(XY):
",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);
Jum=1;
while(Jum)
{
pCityTem=(pCity)malloc(LEN);
if(k!
=1)
{
printf("请输入城市的名称:
");
fflush(stdin);
gets(Name);
printf("请输入%s的坐标,形如(XY):
",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->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++;
}
returnHead;
}
(2)显示所有节点的信息,用于查看城市链表。
voidPrintOne(pCityp)
{
printf("\t\t%-16s(%3d,%-3d)\t%-9d%-8d\n",p->Name,p->Co.x,p->Co.y,p->People,p->Area);
}
voidPrintAll(pCityp)
{
if(p)
{
printf("全部城市信息为:
\n");
printf("\t\t城市\t\t坐标\t\t人口\t面积\n");
while(p=p->Next)
{
PrintOne(p);
}
}
else
{
printf("链表未建立,请先建立链表\n");
}
}
5测试分析
系统各运行界面如下,各子功能测试结果如下。
5.1建立城市链表
在主菜单下(或“主菜单功能选项下”),用户输入1并回车,然后按照提示建立城市链表,分别输入每个城市的名称,坐标,人口和面积,运行结构如下图:
5.2浏览城市链表
在主菜单下(或“主菜单功能选项下”),用户输入2并回车,可以浏览链表中的全部内容,结构如下
5.3城市链表的查找
在主菜单下(或“主菜单功能选项下”),用户输入3并回车,可以进入查找子菜单,如图:
用户输入相应选项即可进入相应功能。
5.4城市链表的插入
在主菜单下(或“主菜单功能选项下”),用户输入4并回车,可以进入插入功能,按照提示输入城市信息,即可插入新的城市信息。
界面如下
5.5城市链表的删除
在主菜单下(或“主菜单功能选项下”),用户输入5并回车,可以进入删除子菜单,按照提示输入要删除的城市,即可删除该城市信息。
界面如下
5.6城市链表的更新
在主菜单下(或“主菜单功能选项下”),用户输入6并回车,可以进入删除子菜单,按照提示输入要删除的城市,即可删除该城市信息。
界面如下
5.7查看给定范围内的城市
在主菜单下(或“主菜单功能选项下”),用户输入7并回车,可以进入查看给定范围内的城市的高级功能,按照提示输入中心坐标,然后在给定一个范围,即可查找出在该范围内的所有城市。
界面如下:
5.8文件的载入与保存
在主菜单下(或“主菜单功能选项下”),用户输入8并回车,可以进入文件载入与保存的选择功能,可以在其中载入文件数据到链表,也可以将链表中的数据保存到指定位置,子菜单如下
5.9系统设置
在主菜单下(或“主菜单功能选项下”),用户输入9并回车,可以进入系统设置功能,可以设置系统显示的文字颜色和显示背景色,还可以调整文字的大小,用户所做的更改将会自动保存,下次使用时不必重新设置,子菜单如下:
6源程序清单
6.1公共头文件
“Common.h”
#include
#include
#include
#include
#include
#include
#defineLENsizeof(City)
typedefstructCity
{
charName[20];
COORDCo;
intPeople;
intArea;
City*Next;
}*pCity;
intMainMenu(intk);//主菜单选择
voidWelcome();
voidSubMainMenu();
voidColorSetting(intWord,intBack);//自定义文字显示前景,背景色
pCityCreateCityInfo(pCityHead);//城市链表建立
voidPrintOne(pCity);//打印一条
voidPrintAll(pCityp);//打印所有
voidSearchInfo(pCityHead);//查找
pCitySearchUseName(pCityHead);//用名字查找
pCitySearchUseCo(pCityHead);//用坐标查找
voidInsertInfo(pCityHead);//插入
pCitySearchInDis(pCityHead);//用距离查找
pCityDelInfo(pCityHead);//删除信息
voidDelUseName(pCityHead);//删除按姓名
voidDelUseCo(pCityHead);//删除按坐标
pCityDelAll(pCityHead);
voidUpInfo(pCityHead);//修改信息
voidUpUseName(pCityHead);//修改用名字
voidUpUseCo(pCityHead);//修改用坐标
voidUpDetail(pCityp);//修改具体每一项
intYNChoice();//专门执行Y/N选择,选是为Y,不是为N,其它无效
intNumberChoice(intMin,intMax);//数字选择,返回Min到Max之间的一个数
voidSuspand();
voidInitSetting();//初始化用户设置
pCityFileHandle(pCityHead);//文件处理
voidUserSetting();//用户设置
“File.h”
#include
#define_WIN32_WINNT0x0500
extern"C"WINBASEAPIHWNDWINAPIGetConsoleWindow();
voidSaveFile(char*SaveDirectory,pCityHead);
pCityOpenFile(char*OpenDirectory,pCityHead);
voidSave(HANDLEhFile,char*SaveDirectory,pCityHead);
voidLSaveFile(char*SaveDirectory);
pCityopen(char*OpenDirectory,pCityHead);
“Setting.h”
structUserSet//用户设置
{
intsFontNumber;
intsFontColor;
intsBackgroundColor;
charDirector[200];
};
structCONSOLE_FONT//字体设置
{
DWORDindex;
COORDdim;
};
typedefBOOL(WINAPI*PROCSETCONSOLEFONT)(HANDLE,DWORD);
PROCSETCONSOLEFONTSetConsoleFont;
WORDBasicColor[8]={FOREGROUND_RED,
FOREGROUND_GREEN,
FOREGROUND_BLUE,
BACKGROUND_RED,
BACKGROUND_GREEN,
BACKGROUND_BLUE,
FOREGROUND_INTENSITY,
BACKGROUND_INTENSITY,
};
WORDFontColor[9]={BasicColor[0],
BasicColor[1],
BasicColor[2],
BasicColor[0]|BasicColor[1],
BasicColor[0]|BasicColor[2],
BasicColor[1]|BasicColor[2],
BasicColor[0]|BasicColor[1]|BasicColor[3],
BasicColor[0]|BasicColor[1]|BasicColor[3]|BasicColor[6],
0
};
WORDBackColor[9]={
BasicColor[3],
BasicColor[4],
BasicColor[5],
BasicColor[3]|BasicColor[4],
BasicColor[3]|BasicColor[5],
BasicColor[4]|BasicColor[5],
BasicColor[3]|BasicColor[4]|BasicColor[5],
BasicColor[3]|BasicColor[4]|BasicColor[5]|BasicColor[7],
0
};
voidColorSetting();
voidFontSetting();
“Welcome.h”
typedefHWND(WINAPI*PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOWGetConsoleWindow;
6.2各函数文件
“Common.cpp”
#include"Common.h"
intYNChoice()//专门执行Y/N选择,选是为Y,不是为N,其它无效
{
charJump,k=1;
do
{
fflush(stdin);
if(k!
=1)
{
printf("选择有误,请重新选择(Y/N):
");
}
Jump=getchar();
k++;
}while(!
(Jump=='Y'||Jump=='y'||Jump=='N'||Jump=='n'));
if(Jump=='Y'||Jump=='y')
{
return1;
}
else
return0;
}
intNumberChoice(intMin,intMax)
{
intk=0;intx;
do{
fflush(stdin);
if(k)
printf("选择有误,请重新选择:
");
scanf("%d",&x);
k++;
}while(xMax);
returnx;
}
voidSuspand()
{
fflush(stdin);
getchar();
}
“Creaete.cpp”
#include"Common.h"
pCityCreateCityInfo(pCityHead)//城市链表建立
{
pCityDelCity,Tem;
if(Head)
{
printf("链表已近存在,确定重新建立(Y/N)");
if(YNChoice())
{
DelCity=Head->Next;
while(DelCity)//删除所有
{
Tem=DelCity->Next;
free(DelCity);
DelCity=Tem;
}
Head=NULL;
}
else
returnHead;
}
Head=(pCity)malloc(LEN);//建立头结点
Head->Next=NULL;
charName[20];
intJum;//跳出输入循环用
COORDCo;
intPeople;
intArea;
intk=1;
inti=1;//控制while里的循环
printf("请输入城市的名称:
");
fflush(stdin);
gets(Name);
printf("请输入%s的坐标,形如(XY):
",Name);
fflush(stdin);
scanf("%d%d",&Co.X,&Co.Y);
printf("请输入%s的人口:
",Name);
fflush(stdin);
scanf("%d",&People