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

📄 report2.c

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 C
📖 第 1 页 / 共 4 页
字号:

	while(1)
	{
		if(type == 3)	n = 64;	//如果是日交易数据则只读取64个字节不读取128个字节的电子签名

		if(type < 4)	//前三项和第七项有效.因为它们都是存放在Serial Flash 中
			SerialFlashRead(CS,Invaddress,n,Redat);//读已存的数据

		else if(type == 4 || type == 5 || type == 6)		//读取申报备份数据
			I2cRead(sBadr,n,Redat);

		if(type == 1)
		{
			Rts = &Redat[29];//<<单卷发票汇总>>开票起始时间的首地址
			Rte = &Redat[33];//<<单卷发票汇总>>开票结束时间的首地址
			if((Rts->dat >= Its->dat) && (Rte->dat <= Ite->dat) && (*adn < Len.dat))
			{
//				RePlan(2);//清进度条变量
				return 1;
			}
		}
		else if(type == 4)
		{
			Rts = Redat;		//申报备份数据的地址
			Rte = &Redat[4];
			if((Rts->dat >= Its->dat) && (Rte->dat <= Ite->dat) && (*adn <  Len.str[0]))
			{
//				RePlan(2);//清进度条变量
				return 1;
			}
		}
		else if(type == 2 || type == 3)
		{
			Rte = Redat;
			if((Rte->dat <= Ite->dat) && (Rte->dat >= Its->dat) && (*adn < Len.dat))
			{
//				RePlan(2);//清进度条变量
				return 1;
			}
		}
		else if(type == 5)//申报数据的起始时间查询
		{
			Rts = Redat;
			if(Rts->dat == Its->dat && (*adn <  Len.str[0]))//读取申报数据的开始时间等于输入的时间
			{
//				RePlan(2);
				return 1;
			}
			else;
		}
		else if(type == 6)//申报数据的终止时间查询
		{
			Rte = &Redat[4];
			if(Rte->dat == Its->dat && (*adn <  Len.str[0]))//读取申报数据的开始时间等于输入的终止时间
			{												//因为是按时间查询不是按时间段查询,所示Its的值实际上是
//				RePlan(2);							//输入的终止日期时间,请仔细分析
				return 1;
			}
		}
				//符合读出的开票起始时间大于或等输入的开始时间且读出其不意开始时间
								//小于输入的结束时间则条件成立.返回标志位

		if(type == 3) n = 192;//如果是日交易数据则要将地址偏移量变为192;
		Invaddress += n;
		*adn += 1;
		if(type == 4)
		{
			if(*adn >= Len.str[0])
//			RePlan(2);
			return 0;
		}
		else
		//if(type != 4)
		{
			if(*adn >= Len.dat)// 原来: *adn 长度
			{
//				RePlan(2);//清进度条变量
				return 0;//已经查找的地址已大于已记录的发票使用地址空间时出错提示.
			}
		}
//		RePlan(0);//进度显示
	}
}

///////////////////////////////////////////////////////////
//									显示提示														//
//////////////////////////////////////////////////////////
void DisHint(uchar *s1,uchar *s2,uchar *s3)
{
	LcdDisplay(0,72,"提  示",3);
	LcdDisplay(16,10,s1,0);
	LcdDisplay(32,10,s2,0);
	LcdDisplay(48,10,s3,0);
	while(KeyScan() != K_HJ);
}

/*-------------------------------------------------------------------------
											指定时间段内的使用汇总
Description:  type = 1 指定时间段内的<<单卷发票使用汇总数据>>
							type = 2 指定时间段内的<<发票打印数据>>
							type = 3 指定时间段内的<<日交易数据>>
							type = 4 指定时间段内的<<申报数据>>
							type = 5 指定时间段内的发票汇总数据
							dis  = 0 只打印不显示
							dis  = 1 只显示不打印
							dis  = 2 只查询有无数据.但不显示与打印

-------------------------------------------------------------------------*/
uchar AppointTimeSectRes(uchar type,uchar dis,uchar *Itime)
{
	uchar ftg=0,Ind=0,i=0,Reval=0,Num=0;//Itime[10];
	uchar Invdat[84];
	ulong adp = 0;
	i = 0;
	Ind = 0;
	Num = 3;
	if(type == 5) return 1;
	while(1)
	{
		ftg = TimeSectData(type,Itime,&adp,Invdat);

		i++;
		if(ftg)//查询到数据
		{
			ftg=0;//清状态标志
			adp += 1;//指向下一个读取地址
			switch(type)
			{
				case 1:
					if(dis == 1)
						Reval = AppointInvdis(Ind,Invdat);//指定时间段内的单卷发票使用汇总显示
					else if(dis == 0)
						AppointInvdis(Num,Invdat);
					else if(dis == 2)
						return 1;
					break;
				case 2:
					if(dis == 1)
						Reval = InvPrintData(Ind,1,Invdat);//指定时间段内的发票打印数据显示
					else if(dis == 0)
						InvPrintData(Num,1,Invdat);//指定时间段内的发票打印数据打印
					else if(dis == 2)
						return 1;
					break;
				case 3:
					if(dis == 1)
						Reval = DayCollDataDisplay(Ind,Invdat);//指定时间段内的日交易数据显示
					else if(dis == 0)
						DayCollDataDisplay(Num,Invdat);//指定时间段内的日交易数据打印
					else	if(dis == 2)
						return 1;
					break;
				case 4:														//指定时间段内的申报备份数据
					if(dis == 1)
						Reval = ReportData(Ind,Invdat);
					else if(dis == 0)
						ReportData(Num,Invdat);
					else if(dis == 2)
						return 1;
						break;
				case 5:
					return 1;										//在上一级菜单进行处理.
				default:break;
			}
			Ind = 0;
			Num = 2;
			if(Reval == K_TC)//按的是退出键
				break;
			else ;
		}
		else
		{
			if(i == 1)//输入的时间格式虽然正确但数据不存在则提示
			{
				DisHint("指定时间段内的","数据不存在.","按[确认]退出...");
				adp = 0;			//偏移量清0
				return 0;
			}
			else
			{
				DisHint("指定时间段内的","数据显示/打印完毕.","按[确认]退出...");
				return 0;
			}
		}
	 }
}

void TaxInfo(uchar tax)
{
		uchar i=0,k=0,TaxIn[50],Initval[3];
		uint addr=0;

		Itarr(Initval);//初始化窗体的有效退出键值

		addr=TaxItemsInfo;
		addr+=tax*47-47;
		I2cRead(addr,47,TaxIn);

		while(1)
		{
			i = ReSelectMode();
			switch(i)
			{
				case 1:
					k = 1;			//显示
					break;
				case 2:
					if(PrintHint())	//打印
						k = 2;
					break;
				default:
					return;
			}
		TaxTax(k,TaxIn);//税种税目信息
		k = 0;
	}
}
/*--------------------------------------------------------------------------
												税种税目信息
--------------------------------------------------------------------------*/
void TaxInfomation()
{
	uchar Hov=1,LnNo=0,InitVal[4];
	uint addr=0;
	addr=TaxItemsInfo;
	while(1)
	{

		ReMenu10();

		Itarr(InitVal);
		LnNo=Windows(Hov,0,InitVal);
		if(*InitVal == K_TC)
			return;//退出
		TaxInfo(LnNo);//税种种目1--6
		Hov=LnNo;
	}
}

/*--------------------------------------------------------------------------
												机械出厂数据查询
--------------------------------------------------------------------------*/
void MachineData()
{
	uchar i=0,k=0,str[48],Num[70];

	//机械出厂数据的地址
	I2cRead(MachineNo,48,str);
	BcdToStr(8,&str[0],&Num[0],0);//将机器编号转换为str
	BcdToStr(4,&str[8],&Num[16],0);//将生产日期转换为str
	for(i=0;i<36;i++)Num[24+i]=str[12+i];//将硬件版本号与软件版本号COPY到NUM中

	while(1)
	{
		i = ReSelectMode();
		switch(i)
		{
			case 1:
				k = 1;
				break;
			case 2:
				if(PrintHint())//按下的确认键则打印否则不打印直接退出
					k = 2;
				break;
			default:return;
		}
		MachineData_LP(k,Num);//机器出厂数据显示
		k = 0;
	}
}

void USE1(uchar *str)
{
	uchar i;
//
//	for(i=0;i<12;i++)
//		WinHint[i][0]=1;
	WindowsSet(12);

	strcpy(&WinHint[0][1],"税控卡编号:");
	BcdToStr(8,&str[0],&WinHint[1][1],0);

	strcpy(&WinHint[2][1],"税控卡使用口令:");
	BcdToStr(8,&str[8],&WinHint[3][1],0);

	strcpy(&WinHint[4][1],"应用启用日期:");
	BcdToStr(4,&str[16],&WinHint[4][14],0);

	strcpy(&WinHint[5][1],"应用有效日期:");
	BcdToStr(4,&str[20],&WinHint[5][14],0);

	strcpy(&WinHint[6][1],"纳税人名称:");
	for(i=0;i<22;i++)WinHint[7][1+i]=str[24+i];
	for(i=0;i<18;i++)WinHint[8][1+i]=str[46+i];
	if(WinHint[8][1]==0)WinHint[8][1]=' ';
	strcpy(&WinHint[9][1],"纳税人编码:");
	BcdToStr(8,&str[64],&WinHint[10][1],0);

	strcpy(&WinHint[11][1],"继续显示其它内容!");

}
void USE2(uchar *str)
{
	uchar i=0;
	gyt4 *xp;

	WindowsSet(11);
	strcpy(&WinHint[0][1],"税号:");
	for(i=0;i<20;i++)
		WinHint[1][1+i]=str[72+i];

	strcpy(&WinHint[2][1],"主管分局代码:");
	xp = &str[92];
	if(xp->dat == 0)
		strcpy(&WinHint[2][14],"0");
	else
		NumToStr(xp->dat,&WinHint[2][14],0);

	strcpy(&WinHint[3][1],"申报方式:");
	NumToStr(str[96],&WinHint[3][10],0);

	strcpy(&WinHint[4][1],"开票截止日期:");
	BcdToStr(4,&str[97],&WinHint[4][14],0);

	strcpy(&WinHint[5][1],"单张发票开票总金额限额:");
	xp=&str[101];
	NumToStr(xp->dat,&WinHint[6][1],5);

	strcpy(&WinHint[7][1],"发票累计金额限额:");
	xp=&str[105];
	NumToStr(xp->dat,&WinHint[8][1],5);

	strcpy(&WinHint[9][1],"退票累计金额限额:");
	xp=&str[109];
	NumToStr(xp->dat,&WinHint[10][1],5);
}

/*------------------------------------------------------------------------
												用户信息
flag = 1: 显示
flag = 2:	打印
------------------------------------------------------------------------*/
void UseInformation(uchar flag)
{
	uchar fg=0;
	uchar i=0,LnNo=0,InitVal[4],str[120],PrintBuf[50],time[10];
	I2cRead(UserInfo,113,str);
	if(flag == 1)//显示
	{
		USE1(str);
		while(1)
		{
			InitVal[0]=K_TC;
			InitVal[1]=K_HJ;//确认键继续显示其它内容
			InitVal[2]=0;
			LnNo=Windows(1,0,InitVal);
			if(*InitVal == K_TC)
				return;
			if(*InitVal == K_HJ)
			{
				fg=~fg;
				if(fg)
					USE2(str);
				else
					USE1(str);
			}
		}
	}
	else if(flag == 2)//打印
	{
		PrintLine("用户信息");
		USE1(str);

		strcpy(PrintBuf,&WinHint[0][1]);
		strcpy(&PrintBuf[11],&WinHint[1][1]);
		PrintStr(PrintBuf);

		strcpy(PrintBuf,&WinHint[2][1]);
		strcpy(&PrintBuf[15],&WinHint[3][1]);
		PrintStr(PrintBuf);

		BcdToStr(4,&str[16],&time[0],0);
		PrintTime("应用启用日期:",&time[0],&PrintBuf[0]);
		PrintStr(PrintBuf);

		BcdToStr(4,&str[20],&time,0);
		PrintTime("应用有效日期:",&time[0],&PrintBuf[0]);
		PrintStr(PrintBuf);

		strcpy(PrintBuf,&WinHint[6][1]);
		for(i=0;i<40;i++) PrintBuf[11+i]=str[24+i];
		PrintBuf[i]=0;
		PrintStr(PrintBuf);

		strcpy(PrintBuf,&WinHint[9][1]);
		strcpy(&PrintBuf[11],&WinHint[10][1]);
		PrintStr(PrintBuf);

		USE2(str);
		strcpy(PrintBuf,&WinHint[0][1]);
		strcpy(&PrintBuf[5],&WinHint[1][1]);
		PrintStr(PrintBuf);

		strcpy(PrintBuf,&WinHint[2][1]);
		strcpy(&PrintBuf[13],&WinHint[2][14]);
		PrintStr(PrintBuf);

		PrintStr(&WinHint[3][1]);

		BcdToStr(4,&str[97],&time[0],0);
		PrintTime("开票截止日期:",&time[0],&PrintBuf[0]);
		PrintStr(PrintBuf);

		strcpy(PrintBuf,&WinHint[5][1]);
		strcpy(&PrintBuf[23],&WinHint[6][1]);
		PrintStr(PrintBuf);
		
		strcpy(PrintBuf,&WinHint[7][1]);
		strcpy(&PrintBuf[17],&WinHint[8][1]);
		PrintStr(PrintBuf);
		
		strcpy(PrintBuf,&WinHint[9][1]);
		strcpy(&PrintBuf[17],&WinHint[10][1]);
		PrintStr(PrintBuf);

		PrintLine("");
		PrintStr("电子存根");
	}
}


/*--------------------------------------------------------------------------
												用户信息的查询与打印选择
--------------------------------------------------------------------------*/
void UserinfoSelect()
{
	uchar i=0,k=0;
	while(1)
	{
		i = ReSelectMode();
		switch(i)
		{
			case 1:
				k = 1;
				break;
			case 2:
				if(PrintHint())
					k = 2;		//按下的确认键
//				else
//					return;//按下的是退出键
				break;
			default:return;
		}
		UseInformation(k);//用户信息显示
		k = 0;
	}
}
/*---------------------------------------------------------------------------
												用户信息查询函数
---------------------------------------------------------------------------*/
void UseInfodemand()
{
	uchar Hov=1,LnNo=0,InitVal[3];
	while(1)
	{
		ReMenu5();

		Itarr(InitVal);

		LnNo=Windows(Hov,0,InitVal);
		if(*InitVal == K_TC)return;//退出
		switch(LnNo)
		{
			case 1:
				MachineData();//机器出厂数据查询
				break;
			case 2:
					UserinfoSelect();//用户信息查询
				break;
			case 3:
				TaxInfomation();//税目税种信息查询
				break;
			default:break;
		}
		Hov=LnNo;
	}
}

/*------------------------输入时间段函数-------------------------------
		type = 类型
		type = 1 :发票使汇总
		tyep = 2 :发票打印数据
		type = 3 :日交易数据
		type = 4 :申报数据查询
		type = 5 :指定时间段内的发票数据汇总

		dp = 0: 打印
		dp = 1: 显示
----------------------------------------------------------------------*/
void InputTimeSegment(uchar type)
{
	uchar i=0,dp=0,time[10];

	for(i=0;i<10;i++)	time[i]=0;

	i = TimeInputDialog(time);
	if(i == K_TC || i == 0)//是退出键则直接退出
		return;

	if(AppointTimeSectRes(type,2,time) == 0)//单卷发票使用汇总数据的显示//单卷发票使用汇总数据的显示
		return ;

//	temp = type;
	while(1)
	{
		if(i)
		{
			i = ReSelectMode();
			switch(i)
			{
				case 1:
//					type = temp;
					dp = 1;
					break;
				case 2:
					if(PrintHint())
					{
//						type = temp;
						dp = 0;
					}
					else
					{
						type = 0;
						return ;
					}
					break;
				default:	return;
			}
			if(type == 5)
			 InvoiceGather(time,dp);
			else AppointTimeSectRes(type,dp,time);//单卷发票使用汇总数据的显示//单卷发票使用汇总数据的显示
		}
	}
}

/*--------------------------------------------------------------------------
											单卷发票使用汇总查询
--------------------------------------------------------------------------*/
void Dandemand()
{
	uchar Hov=1,LnNo=0,InitVal[4];
	gyt2 *cp;
	I2cRead(InvoStatNum,2,InitVal);//判断有没有销售数据
	cp = InitVal;
	#if useinfo
	if(cp->dat == 0)
	{
		ReHint("数据不存在!","请重试!");
		return;
	}
	#endif
	while(1)
	{
		ReMenu7();

		Itarr(InitVal);

		LnNo=Windows(Hov,0,InitVal);
		if(*InitVal == K_TC)
			return;
		switch(LnNo)
		{
			case 1://按发票代码查询
				Invcodedemand();
				break;
			case 2://按发票起始号查询
				InvoBegindemand();
				break;
			case 3://按发票终止号查询
				InvoEnddemand();
				break;
			case 4:
				InputTimeSegment(1);//按时间段查询
				break;
			default:break;
		}
		Hov=LnNo;
	}
}

/*-------------------------------------------------------------------------
											按打印发票号查询
-------------------------------------------------------------------------*/
void PrintInvoNo()
{

⌨️ 快捷键说明

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