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

📄 report1.c

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
* Copyright (c) 2004,成都港顺科技发展有限公司
* All rights reserved.
*
* 编 译 器:Keil:C Compiler:7.20;Assembler:7.10
* 工程名称:POS-Test.UV2
* 文件名称:ReportPrint1.C
* 摘    要:表报打印
*
* 单 片 机:uPSD3254
* 当前版本:0.4
* 作    者:雍继兵
* 完成日期:2004-12-7 14:45
*/

#include "Main.h"
#include "Report.h"

#define Invofenfa 0		//发票分发测试 在实际应用中将此改为0


/*-------------------------------------------------------------------
										报表主菜单初始化
-------------------------------------------------------------------*/
void ReMenu1()
{
	WindowsSet(6);
	strcpy(&WinHint[0][1],"1.用户信息查询");
	strcpy(&WinHint[1][1],"2.已销售发票信息查询");
	strcpy(&WinHint[2][1],"3.已分发和录入发票查询");
	strcpy(&WinHint[3][1],"4.监控管理数据查询");
	strcpy(&WinHint[4][1],"5.申报备份数据查询");
	strcpy(&WinHint[5][1],"6.营业员销售额查询");
//	strcpy(&WinHint[6][1],"7.税控信息安全报表");
}

//void Menu4()
//{
//	uchar i=0;
//	strcpy(&WinHint[0][1]," 1.单卷发票使用汇总查询");
//	strcpy(&WinHint[1][1]," 2.发票打印数据查询");
//	strcpy(&WinHint[2][1]," 3.日交易数据查询");
//}

void ReMenu5()
{
	WindowsSet(3);
	strcpy(&WinHint[0][1],"1.机器出厂数据查询");
	strcpy(&WinHint[1][1],"2.用户信息查询");
	strcpy(&WinHint[2][1],"3.税种税目信息查询");
}
void ReMenu6()
{
	WindowsSet(3);
	strcpy(&WinHint[0][1],"1.单卷发票使用汇总查询");
	strcpy(&WinHint[1][1],"2.发票打印数据查询");
	strcpy(&WinHint[2][1],"3.日交易数据查询");

}
void ReMenu7()
{
	WindowsSet(4);
	strcpy(&WinHint[0][1],"1.按发票代码查询");
	strcpy(&WinHint[1][1],"2.按发票起始号查询");
	strcpy(&WinHint[2][1],"3.按发票终止号查询");
	strcpy(&WinHint[3][1],"4.按时间段查询");

}
void ReMenu8()
{
	WindowsSet(4);
	strcpy(&WinHint[0][1],"1.按开票日期查询");
	strcpy(&WinHint[1][1],"2.按发票号查询");
	strcpy(&WinHint[2][1],"3.按时间段查询");
	strcpy(&WinHint[3][1],"4.按时间段查询汇总数据");

}

void ReMenu10()
{

	WindowsSet(6);
	strcpy(&WinHint[0][1],"1.税种一");
	strcpy(&WinHint[1][1],"2.税种二");
	strcpy(&WinHint[2][1],"3.税种三");
	strcpy(&WinHint[3][1],"4.税种四");
	strcpy(&WinHint[4][1],"5.税种五");
	strcpy(&WinHint[5][1],"6.税种六");

}
void ReMenu11()
{

	WindowsSet(2);
	strcpy(&WinHint[0][1],"1.已分发发票查询");
	strcpy(&WinHint[1][1],"2.已录入发票查询");

}
void ReMenu12()
{
	WindowsSet(3);

	strcpy(&WinHint[0][1],"1.根据起始日期查询");
	strcpy(&WinHint[1][1],"2.根据终止日期查询");
	strcpy(&WinHint[2][1],"3.根据时间段查询");

}

void ReMenu13()
{
	WindowsSet(4);

	strcpy(&WinHint[0][1],"1.单个营业员X报表");
	strcpy(&WinHint[1][1],"2.单个营业员Z报表");
	strcpy(&WinHint[2][1],"3.所有营业员X报表");
	strcpy(&WinHint[3][1],"4.所有营业员Z报表");
}

void ReMenu14()
{
	WindowsSet(2);
	strcpy(&WinHint[0][1],"1.按当前日期查询");
	strcpy(&WinHint[1][1],"2.按时间段查询");
}

/*-------------------------------------------------------------------
										发票代码初始化菜单
-------------------------------------------------------------------*/
void ReMenu2()
{
	//LCD显示初始化

	WindowsSet(2);

	strcpy(&WinHint[0][1],"1.显示方式");
	strcpy(&WinHint[1][1],"2.打印方式");

}
/*---------------------------------------------------------------------------
								时间段输入函数
---------------------------------------------------------------------------*/
uchar TimeInputDialog(uchar *TimeVal)
{
	uchar i=0,ReVal=0,Itfg1=0,Itfg2=0,temp[2];
	gyt4 *Itime1,*Itime2;
	LcdDisplay(0,0,"开始日期:(年/月/日)",3);

//	for(i=0;i<4;i+=3)
//		DisplayFullRec(i,i,63-i,191-i,1);

	LcdDisplay(32,0,"结束日期:(年/月/日)",0);
	temp[0]=0;
	temp[1]=0;
	ReVal=GetBcd(16,0,TimeVal,8,temp);//输入的时间放在TimeVal
	if(ReVal != K_HJ)//如果不是确认键则返回功能的按键值
		return ReVal;
	else
	{
		for(i=0;i<4;i++)
			TimeVal[4+i]=0;
		temp[0]=0;
		ReVal=GetBcd(48,0,&TimeVal[4],8,temp);//从第四个位置开始存放结束日期
	}
	if(ReVal != K_HJ)//如果不是确认键则返回功能的按键值
		return ReVal;
	else 						//如果两次都是按确认键则进入
	{
		Itime1 = TimeVal;
		Itfg1 = Verdict(TimeVal);//时间的合法性检查

		Itime2 = &TimeVal[4];
		Itfg2 = Verdict(&TimeVal[4]);//时间的合法性检查

		if(Itime2->dat > Itime1->dat && Itfg1 && Itfg2)//如果输入的结束时间大于开始时间
			return 1;										//且输入的开始时间与结束时间格式正确后方可返回1
		else
		{
			ReHint("时间格式错误!","请重新输入...");
			return 0;
		}
	}
}
/*----------------------------------------------------------------------------
								BCD码输入对话框
----------------------------------------------------------------------------*/
uchar Dialog(uchar *Clew1,uchar *Clew2,uchar *Clew4,uchar Len,uchar *BCD_Val)
{
	uchar temp[2],i = 0,ReValue=0;
	LcdDisplay(0,0,Clew1,3);
	LcdDisplay(16,0,Clew2,0);
	LcdDisplay(48,0,Clew4,0);
	temp[0]=0;BCD_Val[0]=0;
	ReValue=GetBcd(32,0,BCD_Val,Len,temp);//ReVal为GetBCD返回的键值
	return ReValue;
}
/*---------------------------------------------------------------------------
								Hex码输入对话框
----------------------------------------------------------------------------*/
ulong HexlongDialog(uchar *Clew1,uchar *Clew2,uchar *Clew4,uchar *Len,ulong Init)
{
	ulong Re_Val=0;
	uchar i=0,k=0,tp[2];

	k = Len[0];
	LcdDisplay(0,0,Clew1,3);

//	for(i=0;i<4;i+=3)
//		DisplayFullRec(i,i,63-i,191-i,1);

	LcdDisplay(16,0,Clew2,0);
	LcdDisplay(48,0,Clew4,0);
	tp[0]=0;
	Re_Val=GetInt(32,0,Init,k,0,tp);//当输入返回时得到的LEN为按键值
	*Len = tp[0];//得到所需要的返回值
	return Re_Val;
}

/*-----------------------------------------------------------
							营业员编号对话框
//-----------------------------------------------------------*/
//uchar BusinessNumber(uchar *Clew1,uchar *Clew2,uchar *Clew3,uchar *Clew4,uchar *Len)
//{
//	uchar Reval=0;
//	uchar i,tp[2];
//	i=*Len;
//	tp[0]=0;
//	LcdDisplay(0,56,Clew1,3);
//	LcdDisplay(16,0,Clew2,0);
//	LcdDisplay(32,0,Clew3,0);
//	LcdDisplay(48,0,Clew4,0);
//	Reval = GetInt(16,90,0,i,0,tp);
//	*Len = tp[0];		//得到所需的返回按键值=功能键
//	return Reval;
//}

/*------------------------------------------------------------------------------
											发票代码查询
------------------------------------------------------------------------------*/
uchar Res_InvCode(uchar *InInvCode,uchar *ReadInvCode)
{
	uchar i,j=0;
	uint x=0;
	gyt2 tp;
	ulong InvCode_address=0;
	InvCode_address=InvoStatBegin;//单卷发票存放的开始地址

	I2cRead(InvoStatNum,2,tp.str);

	if(tp.dat == 0)//如果数量为0则直接返回 0 说明没有数据
		return 0;

//	RePlan(1);

	while(1)
	{
		SerialFlashRead(FlashDat,InvCode_address,37,ReadInvCode);//读已存的发票代码
		for(i=0;i<10;i++)
		{
			if(ReadInvCode[i] != InInvCode[i])//输入的发票号与读出的发票号不一样
			{
				j=0;
				break;
			}
			if(ReadInvCode[i] == InInvCode[i])
			{
				j++;
				if(j==10)
				{
//					RePlan(2);//清进度条变量
					return 1;//如果输入的发票代码存在
				}
			}
		}
		InvCode_address+=37;
		x++;
		if(x >= tp.dat)
		{
//			RePlan(2);//清进度条变量
			return 0;
		}
//		RePlan(0);
	}
}

/*--------------------------------------------------------------------------
											按发票号查询		sn=0发票起始号  sn=1发票终止号
--------------------------------------------------------------------------*/
uchar InvNumberdemand(uchar SN,ulong InputNumber,uchar *ReadNumber)
{
	gyt4 *xp;
	gyt2 tp;
	uint x=0;
	ulong address;
	address=InvoStatBegin;//单卷发票存放的开始地址

	I2cRead(InvoStatNum,2,tp.str);

	if(tp.dat == 0)
		return 0;		//说明没有数据.

//	RePlan(1);

	while(1)
	{
		SerialFlashRead(FlashDat,address,37,ReadNumber);//读已存的发票代码


		if(SN)													//按发票起始号查询
			xp=&ReadNumber[10];//copy发票起始号
		else														//按发票终止号查询
			xp=&ReadNumber[14];//copy发票终止号
//将发票起始号转换为ulong型
		if(xp->dat == InputNumber)//输入的发票号与读出的发票起始号相同
		{
//			RePlan(2);//清进度条变量
			return 1;
		}
		else
		{
			address+=37;
			x++;
			if(x >= tp.dat)
			{
//				RePlan(2);//清进度条变量
				return 0;
			}
//			RePlan(0);
		}
	}
}
/*-------------------------------------------------------------------------
											按开票日期查询
flag=1 按开票日期查询
flag=0 按发票号查询
-------------------------------------------------------------------------*/
uchar OpenInvDatdemand(uchar flag,uchar *InputData,uchar *ReadOpenData)
{
	uint x=0;
	ulong InvStartAddress;
	gyt4 *xp,*inp1,*inp2;
	gyt2 tp;

	InvStartAddress=InvoListLimit1;//发票打印数据存放的开始地址

	I2cRead(InvoPrintNum,2,tp.str);

	if(tp.dat == 0)
		return 0;			//返回 数量为0 说明没有数据

//	RePlan(1);

	inp1 =	InputData;

	while(1)
	{
		SerialFlashRead(FlashInvo,InvStartAddress,27,ReadOpenData);

		inp2 = ReadOpenData;

		if(flag==0)//按发票号查询
			xp = &ReadOpenData[4];

		if((inp1->dat == inp2->dat) && flag==1)//按开票日期查询标志
		{
//			RePlan(2);//清进度条变量
			return 1;//如果存在则返回1
		}
		if((inp1->dat == xp->dat) && flag==0)//	标志.说明是发票号查询标志
		{
//			RePlan(2);//清进度条变量
			return 1;//输入的发票号存在返回1
		}
		else
		{
			InvStartAddress+=27;
			x++;
			if(x >= tp.dat)
			{
//				RePlan(2);//清进度条变量
				return 0;
			}
//			RePlan(0);
		}
	}
}


/*--------------------------------------------------------------------------
											日交易数据查询
--------------------------------------------------------------------------*/
uchar DayCollData(uchar *InputData,uchar *ReadDayCollData)
{
	uchar i=0;
	uint x=0;
	gyt2 tp;
	gyt4 *inp1,*inp2;
	ulong DayCollDataAddress,InDat=0,ReadDat=0;

	I2cRead(DailyDatNum,2,tp.str);

	if(tp.dat == 0)
		return 0;		//数据为0说明没有数据

//	RePlan(1);

	DayCollDataAddress=DailyTradeBegin;//发票打印数据存放的开始地址

	inp1 = InputData;

	while(1)
	{
		SerialFlashRead(FlashDat,DayCollDataAddress,64,ReadDayCollData);	//读出的发票打印数据放在ReadDayCollData中

		inp2 = ReadDayCollData;

		if(inp1->dat < inp2->dat)//输入的时间小于读取的时间
		{
//			RePlan(2);//清进度条变量
			return 0;
		}

		if(inp1->dat == inp2->dat)
		{
//			RePlan(2);//清进度条变量
			return 1;//如果存在则返回1
		}
		else
		{
			DayCollDataAddress+=192;
			x++;
			if(x >= tp.dat)
			{
//				RePlan(2);//清进度条变量
				return 0;
			}
//			RePlan(0);
		}
	}
}

/*--------------------------------------------------------------------------
										flag=1	营业员金额在LCD上显示
										flag=0  营业员金额在打印机上打印
flag = 0 : 营业员销售金额打印
flag = 1 : 营业员销售金额显示
DatJine  : 营业员销售数据
xzReport = 'X' 报表
xzReport = 'Z' 报表
--------------------------------------------------------------------------*/
void OnLcdYingYiYuangJie(uchar flag,uchar *DatJine,uchar xzReport,uchar *bh)
{
	uchar i=0,ClearZero[6];
	gyt4 *xp;

	strcpy(&WinHint[0][0],"编  号:");//不使用窗体函数则可以从WinHint[][0]位置开始存放
	NumToStr(bh[0],&WinHint[0][7],0);

	xp=DatJine;
	strcpy(&WinHint[1][0],"销售额:");
	if(xp->dat == 0)
		strcpy(&WinHint[1][7],"0.00");
	else
		NumToStr(xp->dat,&WinHint[1][7],5);

	if(flag)
	{
		LcdDisplay(0,16,"  营业员销售额查询",3);
		LcdDisplay(16,0,WinHint[0],0);
		LcdDisplay(32,0,WinHint[1],0);
		LcdDisplay(48,Hj,"[退出]",0);
		while(1)
			if(KeyScan()==K_TC)break;
	}
	else
	{
		PrintLine("营业员销售额");
		PrintStr(WinHint[0]);
		PrintStr(WinHint[1]);
		PrintStr("电子存根");
		PrintLine("");

⌨️ 快捷键说明

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