#include"scenery.h"
int main()
{
COORD size = {SCR_COL, SCR_ROW}; /*窗口缓冲区大小*/
gh_std_out = GetStdHandle(STD_OUTPUT_HANDLE); /* 获取标准输出设备句柄*/
gh_std_in = GetStdHandle(STD_INPUT_HANDLE); /* 获取标准输入设备句柄*/
SetConsoleTitle(gp_sys_name); /*设置窗口标题*/
SetConsoleScreenBufferSize(gh_std_out, size); /*设置窗口缓冲区大小80*25*/
LoadData();
InitInterface(); /*界面初始化*/
RunSys(&gp_head); /*系统功能模块的选择及运行*/
CloseSys(gp_head); /*退出系统*/
return 0;
}
BOOL LoadData(void){
int Re = 0;
Re = CreatList(&gp_head);
printf("\n按任意键继续...\n");
getch();
}
CITY_NODE* CreatList(CITY_NODE **phead){
CITY_NODE *hd=NULL,*pCityNode;
SCEN_AREA_NODE *pScenAreaNode;
SCEN_NODE *pScenNode;
FILE *pFile;
int find;
int re=0;
if((pFile=fopen(gp_city_info_filename,"rb"))==NULL){
printf("城市信息数据文件打开失败!\n");
return re;
}
printf("城市信息数据文件打开成功!\n");
while(!feof(pFile)){
pCityNode=(CITY_NODE*)malloc(sizeof(CITY_NODE));
fread(pCityNode,sizeof(CITY_NODE),1,pFile);
pCityNode->snext=NULL;
pCityNode->next=hd;
hd=pCityNode;
}
fclose(pFile);
if(hd==NULL){
printf("城市信息数据文件加载失败!\n");
return re;
}
printf("城市信息数据文件加载成功!\n");
*phead=hd;
re+=4;
if((pFile=fopen(gp_scen_area_info_filename,"rb"))==NULL){
printf("景区基本信息数据文件打开失败!\n");
return re;
}
printf("景区基本信息数据文件打开成功!\n");
re+=8;
while(!feof(pFile)){
pScenAreaNode=(SCEN_AREA_NODE*)malloc(sizeof(SCEN_AREA_NODE));
fread(pScenAreaNode,sizeof(SCEN_AREA_NODE),1,pFile);
pScenAreaNode->snext=NULL;
pCityNode=hd;
while(pCityNode!=NULL&&strcmp(pCityNode->city_code,pScenAreaNode->city_code)!=0){
pCityNode=pCityNode->next;
}
if(pCityNode!=NULL){
pScenAreaNode->next=pCityNode->snext;
pCityNode->snext=pScenAreaNode;
}
else{
free(pScenAreaNode);
}
}
fclose(pFile);
if((pFile=fopen(gp_scen_info_filename,"rb"))==NULL){
printf("景点信息数据文件打开失败!\n");
return re;
}
printf("景点信息数据文件打开成功!\n");
re+=16;
while(!feof(pFile)){
pScenNode=(SCEN_NODE*)malloc(sizeof(SCEN_NODE));
fread(pScenNode,sizeof(SCEN_NODE),1,pFile);
pCityNode=hd;
find=0;
while(pCityNode!=NULL&&find==0){
pScenAreaNode=pCityNode->snext;
while(pScenAreaNode!=NULL&&find==0){
if(strcmp(pScenAreaNode->scen_area_code,pScenNode->scen_area_code)==0){
find=1;
break;
}
pScenAreaNode=pScenAreaNode->next;
}
pCityNode=pCityNode->next;
}
if(find){
pScenNode->next=pScenAreaNode->snext;
pScenAreaNode->snext=pScenNode;
}
else{
free(pScenNode);
}
}
fclose(pFile);
return hd;
}
/**
* 函数名称: InitInterface
* 函数功能: 初始化界面.
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
*
* 调用说明:
*/
void InitInterface()
{
WORD att = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
| BACKGROUND_BLUE; /*黄色前景和蓝色背景*/
SetConsoleTextAttribute(gh_std_out, att); /*设置控制台屏幕缓冲区字符属性*/
ClearScreen(); /* 清屏*/
/*创建弹出窗口信息堆栈,将初始化后的屏幕窗口当作第一层弹出窗口*/
gp_scr_att = (char *)calloc(SCR_COL * SCR_ROW, sizeof(char));/*屏幕字符属性*/
gp_top_layer = (LAYER_NODE *)malloc(sizeof(LAYER_NODE));
gp_top_layer->LayerNo = 0; /*弹出窗口的层号为0*/
gp_top_layer->rcArea.Left = 0; /*弹出窗口的区域为整个屏幕窗口*/
gp_top_layer->rcArea.Top = 0;
gp_top_layer->rcArea.Right = SCR_COL - 1;
gp_top_layer->rcArea.Bottom = SCR_ROW - 1;
gp_top_layer->pContent = NULL;
gp_top_layer->pScrAtt = gp_scr_att;
gp_top_layer->next = NULL;
ShowMenu(); /*显示菜单栏*/
ShowState(); /*显示状态栏*/
return;
}
/**
* 函数名称: ClearScreen
* 函数功能: 清除屏幕信息.
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
*
* 调用说明:
*/
void ClearScreen(void)
{
CONSOLE_SCREEN_BUFFER_INFO bInfo;
COORD home = {0, 0};
unsigned long size;
GetConsoleScreenBufferInfo( gh_std_out, &bInfo );/*取屏幕缓冲区信息*/
size = bInfo.dwSize.X * bInfo.dwSize.Y; /*计算屏幕缓冲区字符单元数*/
/*将屏幕缓冲区所有单元的字符属性设置为当前屏幕缓冲区字符属性*/
FillConsoleOutputAttribute(gh_std_out, bInfo.wAttributes, size, home, NULL);
/*将屏幕缓冲区所有单元填充为空格字符*/
FillConsoleOutputCharacter(gh_std_out, ' ', size, home, NULL);
return;
}
/**
* 函数名称: ShowMenu
* 函数功能: 在屏幕上显示主菜单, 并设置热区, 在主菜单第一项上置选中标记.
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
*
* 调用说明:
*/
void ShowMenu()
{
CONSOLE_SCREEN_BUFFER_INFO bInfo;
CONSOLE_CURSOR_INFO lpCur;
COORD size;
COORD pos = {0, 0};
int i, j;
int PosA = 2, PosB;
char ch;
GetConsoleScreenBufferInfo( gh_std_out, &bInfo );
size.X = bInfo.dwSize.X;
size.Y = 1;
SetConsoleCursorPosition(gh_std_out, pos);
for (i=0; i < 5; i++) /*在窗口第一行第一列处输出主菜单项*/
{
printf(" %s ", ga_main_menu[i]);
}
GetConsoleCursorInfo(gh_std_out, &lpCur);
lpCur.bVisible = FALSE;
SetConsoleCursorInfo(gh_std_out, &lpCur); /*隐藏光标*/
/*申请动态存储区作为存放菜单条屏幕区字符信息的缓冲区*/
gp_buff_menubar_info = (CHAR_INFO *)malloc(size.X * size.Y * sizeof(CHAR_INFO));
SMALL_RECT rcMenu ={0, 0, size.X-1, 0} ;
/*将窗口第一行的内容读入到存放菜单条屏幕区字符信息的缓冲区中*/
ReadConsoleOutput(gh_std_out, gp_buff_menubar_info, size, pos, &rcMenu);
/*将这一行中英文字母置为红色,其他字符单元置为白底黑字*/
for (i=0; i<size.X; i++)
{
(gp_buff_menubar_info+i)->Attributes = BACKGROUND_BLUE | BACKGROUND_GREEN
| BACKGROUND_RED;
ch = (char)((gp_buff_menubar_info+i)->Char.AsciiChar);
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
{
(gp_buff_menubar_info+i)->Attributes |= FOREGROUND_RED;
}
}
/*修改后的菜单条字符信息回写到窗口的第一行*/
WriteConsoleOutput(gh_std_out, gp_buff_menubar_info, size, pos, &rcMenu);
COORD endPos = {0, 1};
SetConsoleCursorPosition(gh_std_out, endPos); /*将光标位置设置在第2行第1列*/
/*将菜单项置为热区,热区编号为菜单项号,热区类型为0(按钮型)*/
i = 0;
do
{
PosB = PosA + strlen(ga_main_menu[i]); /*定位第i+1号菜单项的起止位置*/
for (j=PosA; j<PosB; j++)
{
gp_scr_att[j] |= (i+1) << 2; /*设置菜单项所在字符单元的属性值*/
}
PosA = PosB + 4;
i++;
} while (i<5);
TagMainMenu(gi_sel_menu); /*在选中主菜单项上做标记,gi_sel_menu初值为1*/
return;
}
/**
* 函数名称: ShowState
* 函数功能: 显示状态条.
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
*
* 调用说明: 状态条字符属性为白底黑字, 初始状态无状态信息.
*/
void ShowState()
{
CONSOLE_SCREEN_BUFFER_INFO bInfo;
COORD size;
COORD pos = {0, 0};
int i;
GetConsoleScreenBufferInfo( gh_std_out, &bInfo );
size.X = bInfo.dwSize.X;
size.Y = 1;
SMALL_RECT rcMenu ={0, bInfo.dwSize.Y-1, size.X-1, bInfo.dwSize.Y-1};
if (gp_buff_stateBar_info == NULL)
{
gp_buff_stateBar_info = (CHAR_INFO *)malloc(size.X * size.Y * sizeof(CHAR_INFO));
ReadConsoleOutput(gh_std_out, gp_buff_stateBar_info, size, pos, &rcMenu);
}
for (i=0; i<size.X; i++)
{
(gp_buff_stateBar_info+i)->Attributes = BACKGROUND_BLUE | BACKGROUND_GREEN
| BACKGROUND_RED;
/*
ch = (char)((gp_buff_stateBar_info+i)->Char.AsciiChar);
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <
c-class-design.rar_楼盘查询系统
版权申诉
30 浏览量
2022-09-14
20:12:27
上传
评论
收藏 12KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/5f02f331e1ea4222a10b21da48ddddbe_weixin_42651748.jpg!1)
JonSco
- 粉丝: 77
- 资源: 1万+
最新资源
- 基于GCN的CORA节点级分类任务python 源码
- 航天器交会的分布式模型预测控制
- Screenshot_20240614_144907_com.microsoft.emmx.png
- TCPIP协议详解+编程+网络知识+技术开发
- visualstudio安装教程详细步骤概要与问题简述总结.docx
- keil5安装教程常见问题安装常见问题叙述与概要知识点总结.docx
- OperationsManagement.cpp
- 数学建模举例与建模流程详细叙述概要知识总结点.docx
- IMG_20240614_143950.jpg
- 完整报告->算法设计与分析大作业、课程设计-优化递归回溯在城市电网铺设的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)