⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.cpp

📁 金融pos机前台源码
💻 CPP
字号:
/*******************************************************************************
	模  块:	菜单.
	功  能:	包括菜单条和子菜单.
	程序员:	雷中南.
	版  本:	v1.1
	时  间:	1999-05-10
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "menu.h"
#include "getcase.h"
#include "def.h"
#include "box.h"
#include "process.h"
#include "sysinfo.h"

//定义子菜单项.
char *sname0[2]={"柜组名细","柜组汇总"};
int eid0[2]={100,101};
char *sname1[2]={"收款员名细","收款员汇总"};
int eid1[2]={110,111};
char *sname2[2]={"营业员名细","营业员汇总"};
int eid2[2]={120,121};
char *sname3[2]={"货品名细","货品汇总"};
int eid3[2]={130,131};
char *sname4[3]={"下载全部数据", "下载更新数据", "上传数据"};
int eid4[3]={140,141,142};
char cmdtemp[50];
MsgBox *err;
Object *KeepAll;
FILE	*fp;
GetCase *Item;

//构造函数.
Menu::Menu(char *submenu[],int number)
{
	//菜单条.
	Mb = new MenuBar(submenu,number);
}

//析构函数.
Menu::~Menu()
{
	delete Mb;
}

//运行菜单.
void
Menu::Run()
{
	//定义事件变量.
	unsigned int TmpEv;
	unsigned int Event;
	//显示菜单条.
	Mb->Show();
	for(;;)
	{
		//运行菜单条.
		Mb->Run();
		//从队列中取事件.
		GetEvent(Event);
		switch (Event)
		{
			//如果是打开子菜单的事件.
			case	MN_SUBCALL:
jmp:
				SubCall();//打开子菜单.
				GetEvent(TmpEv);//获取子菜单返回的事件.
				switch(TmpEv)
				{
					//如果是请求前一个子菜单的事件:
					case MN_PREVSUBMENU:
						//将菜单条的当前焦点左移.
						Mb->PrevItem();
						goto jmp;
					//如果是请求下一个子菜单的事件:
					case MN_NEXTSUBMENU:
						//将菜单条的当前焦点右移.
						Mb->NextItem();
						goto jmp;
					default:
						//如果不属于上面两种事件,那么将取出的事件返回事件队列.
						PutEvent(TmpEv);
						break;
				}
				//处理菜单请求.
				DoMenu();
				break;
			//如果是退出.
			case	EV_QUIT:
				return;
		}
	}
}

//处理菜单事件.
//在此处添加菜单处理程序.
void
Menu::DoMenu()
{
	unsigned int Event;

	//从队列中获取事件.
	GetEvent(Event);
	switch(Event)
	{
		case 100:
			//柜组名细.
			Item = new GetCase();
			Item->GetSales(0);
			delete Item;
			break;
		case 110:
			//收款员名细.
			Item = new GetCase();
			Item->GetSales(1);
			delete Item;
			break;
		case 120:
			//营业员名细.
			Item = new GetCase();
			Item->GetSales(2);
			delete Item;
			break;
		case 130:
			//货品名细.
			Item = new GetCase();
			Item->GetSales(3);
			delete Item;
			break;
		case 101:
			//柜组汇总.
			Item = new GetCase();
			Item->GetTotal(0);
			delete Item;
			break;
		case 111:
			//收款员汇总.
			Item = new GetCase();
			Item->GetTotal(1);
			delete Item;
			break;
		case 121:
			//营业员汇总.
			Item = new GetCase();
			Item->GetTotal(2);
			delete Item;
			break;
		case 131:
			//货品汇总.
			Item = new GetCase();
			Item->GetSales(4);
			delete Item;
			break;
		case 140:
			//数据全部下载.
			KeepAll = new Object(CreateRect(0,0,639,479));
			CloseGraph();
			system("cls");
			sprintf(cmdtemp, "txzm COM%d B%ld T1 P%s S%s > NULL",
						sys->Port, sys->Baud, sys->TelNum, sys->SelfID);
			system(cmdtemp);
			startGraphics();
			delete KeepAll;
			fp = fopen(".\\flag.txt", "rt");
			fread(cmdtemp, 1, 1, fp);
			fclose(fp);
			if(atoi(cmdtemp) == 0)
				err=new MsgBox("成功完成所有主档的下载.");
			else if(atoi(cmdtemp) == 1)
				err=new MsgBox("建立通讯连接失败.");
			else
				err=new MsgBox("数据通讯失败.");
			err->Run();
			delete err;
			break;
		case 141:
			//下载更新数据.
			KeepAll = new Object(CreateRect(0,0,639,479));
			CloseGraph();
			sprintf(cmdtemp, "txzm COM%d B%ld T2 P%s S%s > NULL",
						sys->Port, sys->Baud, sys->TelNum, sys->SelfID);
			system(cmdtemp);
			startGraphics();
			delete KeepAll;
			fp = fopen(".\\flag.txt", "rt");
			fread(cmdtemp, 1, 1, fp);
			fclose(fp);
			if(atoi(cmdtemp) == 0)
				err=new MsgBox("成功完成立即主档的下载.");
			else if(atoi(cmdtemp) == 1)
				err=new MsgBox("建立通讯连接失败.");
			else
				err=new MsgBox("数据通讯失败.");
			err->Run();
			delete err;
			break;
		case 142:
			//数据上传.
			KeepAll = new Object(CreateRect(0,0,639,479));
			CloseGraph();
			sprintf(cmdtemp, "txzm COM%d B%ld T3 P%s S%s > NULL",
						sys->Port, sys->Baud, sys->TelNum, sys->SelfID);
			system(cmdtemp);
			startGraphics();
			delete KeepAll;
			fp = fopen(".\\flag.txt", "rt");
			fread(cmdtemp, 1, 1, fp);
			fclose(fp);
			if(atoi(cmdtemp) == 0)
				err=new MsgBox("成功完成销售数据的上传.");
			else if(atoi(cmdtemp) == 1)
				err=new MsgBox("建立通讯连接失败.");
			else
				err=new MsgBox("数据通讯失败.");
			err->Run();
			delete err;
			break;
		default:
			break;
	}
}

void
Menu::SubCall()
{

	//判断当前焦点.
	switch (Mb->SubMenuFocus)
	{
		case 0://如果是菜单条的第一项.
			rect = Mb->CalRect(sname0,2);//计算子菜单的位置.
			smenu = new SubMenu(sname0, eid0, rect, 2);//产生子菜单.
			smenu->Run();//运行子菜单.
			delete smenu;//删除子菜单.
			break;
		case 1://如果是菜单条的第二项.
			rect = Mb->CalRect(sname1, 2);//计算子菜单的位置.
			smenu= new SubMenu(sname1, eid1, rect, 2);//产生子菜单.
			smenu->Run();//运行子菜单.
			delete smenu;//删除子菜单.
			break;
		case 2://如果是菜单条的第三项.
			rect = Mb->CalRect(sname2, 2);//计算子菜单的位置.
			smenu= new SubMenu(sname2, eid2, rect, 2);//产生子菜单.
			smenu->Run();//运行子菜单.
			delete smenu;//删除子菜单.
			break;
		case 3://如果是菜单条的第四项.
			rect = Mb->CalRect(sname3, 2);//计算子菜单的位置.
			smenu= new SubMenu(sname3, eid3, rect, 2);//产生子菜单.
			smenu->Run();//运行子菜单.
			delete smenu;//删除子菜单.
			break;
		case 4://如果是菜单条的第四项.
			rect = Mb->CalRect(sname4, 3);//计算子菜单的位置.
			smenu= new SubMenu(sname4, eid4, rect, 3);//产生子菜单.
			smenu->Run();//运行子菜单.
			delete smenu;//删除子菜单.
			break;
		default:
			break;
	};
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -