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

📄 salegrid.bak

📁 C++写的POS前台程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:
		PrintSale(prtmp);
		if(AdjRepeat(Data[1], Data[4]) == L_YES)
		{
			//删除当前行.
			Delete(Row);
		}
		else
		{
			//继续按原来的办法处理。
			goto jmp;
		}
		PrOut(prtmp);
		return;
	}

jmp:

	if(AdjBal(Data[1])==L_YES)
	{
		//如果是条码秤则重新计算单价.
		char *temp1;
		temp1 = tempdata1;
		temp1 = temp1 + 7;
		temp1[5] = NULL;
		sprintf(Data[3], "%9.2f", atof(temp1)/100.0);
		CalPrice();
		Write(Row);
	}
	//刷新重画当前行.
	ItemDraw(Row);
	//向顾客显示屏幕输出.
	char cttemp[25], cttemp1[25];
	Ct_Clear();
	strcpy(cttemp, "Name:");
	Ct_Out(cttemp);
	strcpy(cttemp, Data[1]);
	Trim(cttemp);
	sprintf(cttemp1, "%11s", cttemp);
	strcat(cttemp1, "\r\n");
	Ct_Out(cttemp1);
	strcpy(cttemp, "Price:");
	Ct_Out(cttemp);
	sprintf(cttemp, "%10.2f", atof(Data[3]));
	strcat(cttemp, "\r\n");
	Ct_Out(cttemp);

	//打印销售数据,此处仅生成数据,打印在函数结束时,这样打印视觉效果快。
	PrintSale(prtmp);
	if(Row == Rows - 1)
	{
		//增加新行.
		AddNew();
		//修改行号.
		sprintf(Data[0], "%3d", Row+1);
		//更新.
		Update();
	}
	else
	{
		//移到下一行.
		MoveNext();
	}
	PrOut(prtmp);
}

//计算数量.
void
SaleGrid::ChangeNumber()
{
	//格式化数量.
	float Num = atof(Data[4]);
	//数量最多999.99.
	if(Num > 1000)
	{
		sprintf(Data[4], "%6.2f", 999.0);
	}
	else
	{
		sprintf(Data[4], "%6.2f", Num);
	}
	//如果存在商品数据.刷新价格.
	if(strlen(Data[1])>0)
	{
		CalPrice();
	}
	//将数据保存.
	Update();
	if(Row < Rows - 1)
	{
		//打印重新销售信息.
		PrintSale(prtmp);
		PrOut(prtmp);
	}
	//移动到下一行.
	MoveNext();
}

void
SaleGrid::ChangeDiscount()
{
	//格式化折扣率.
	int Num = atoi(Data[5]);
	//折扣率最多99.99.
	if(Num >= 100)
	{
		sprintf(Data[5], "%4d", 99);
	}
	else
	{
		//如果折扣率为零则不显示.
		if(Num == 0)
		{
			strcpy(Data[5], "");
		}
		else
		{
			sprintf(Data[5], "%4d", Num);
		}
	}
	//如果存在商品数据.刷新价格.
	if(strlen(Data[1])>0)
	{
		CalPrice();
	}
	//将数据保存.
	//重画当前行.
	Update();
	if(Row < Rows - 1)
	{
		//打印重新销售信息.
		PrintSale(prtmp);
		PrOut(prtmp);
	}
	//移动到下一行.
	MoveNext();
}

void
SaleGrid::ChangePref()
{
	//格式化优惠额.
	float Num = atof(Data[6]);
	//优惠额不能大于小计额.
	if(Num > atof(Data[7]))
	{
		sprintf(Data[6], "%9.2f", atof(Data[7]));
	}
	//格式化优惠额.
	Num = atof(Data[6]);
	if(Num <= atof(Data[7]))
	{
		//如果优惠额为0则不显示.
		if(Num == 0)
		{
			strcpy(Data[6], "");
		}
		else
		{
			sprintf(Data[6], "%9.2f", Num);
		}
	}
	//计算价格.
	CalPrice();
	//将数据保存.
	//重画当前行.
	Update();
	if(Row < Rows - 1)
	{
		//打印重新销售信息.
		PrintSale(prtmp);
		PrOut(prtmp);
	}
	//移动到下一行.
	MoveNext();
}

//删除指定行。
void
SaleGrid::Delete(int ID)
{
	//最后一行不能删除.
	if(Row == Rows - 1)
	{
		for(int c=1; c<Cols; c++)
		{
			strcpy(Data[c], "");
		}
		Update();
		//改变退货标志.
		ReturnFlag = L_NO;
		return;
	}
	//如果多于一行.
	if(Rows > 1)
	{
		for(int i=ID; i<Rows - 1; i++)
		{
			//读下一行数据.
			Read(i + 1);
			//修改行号.
			sprintf(Data[0], "%3d", i + 1);
			//写入这一行.
			Write(i);
		}
		if(Row == Rows - 1)
		{
			MovePrev();
		}
		Rows--;
		Draw();
	}
	//改变退货标志.
	ReturnFlag = L_NO;
}

//判断数据是否重复,若重复则改之。
int
SaleGrid::AdjRepeat(char *Code, char *Number)
{
	char code[33], number[20];
	int temp;
	//复制数据。
	strcpy(code, Code);
	strcpy(number, Number);
	//保存当前位置。
	temp = Row;
	//从第一行开始判断是否重复。
	for(int i=0; i<Rows; i++)
	{
		Read(i);
		//如果编码相同并且不是被比较行而且不是退货,那么累加起来。
		if(strcmp(Data[1],code)==0 && temp != i && atof(Data[4]) > 0)
		{
			//如果数量超过1000,不进行累加。
			if(atof(Data[4])+atof(number)>=1000)
			{
				continue;
			}
			//更新数量。
			sprintf(Data[4], "%6.2f", atof(Data[4])+atof(number));
			//计算新价格。
			CalPrice();
			//将数据写入扩展文件。
			Write(i);
			//重画更新单元格。
			ItemDraw(i);
			//跳到原来所在行。
			Row = temp;
			//读取该行数据。
			Read(Row);
			return L_YES;
		}
	}
	//恢复原来行数据。
	Row = temp;
	Read(Row);
	return L_NO;
}

//改变累计模式.
void
SaleGrid::ChangeSumMode()
{
	if(SumMode == L_YES)
	{
		SumMode = L_NO;
	}
	else
	{
		//不允许刷新.
		IsFreeze();
		SumMode = L_YES;
		int i;
		for(i=1; i<Rows;)
		{
			Row = i;
			Read(Row);
			//如果是条码秤数据则不进行累加。
			if(AdjBal(Data[1]) == L_YES)
			{
				i++;
				continue;
			}
			//如果是联营方式也不进行累加。
			if(AdjPool() == L_YES)
			{
				i++;
				continue;
			}
			//判断是否重复.
			if(AdjRepeat(Data[1], Data[4]) == L_YES)
			{
				//删除当前行.
				Delete(Row);
			}
			else
			{
				 i++;
			}
		}
		//跳到最后行.
		Row = Rows - 1;
		//计算页首行位置.
		FirstRow = VisibleRow * ((int)(Rows / VisibleRow));
		if(FirstRow - Rows == 0) FirstRow = Rows - 1;
		Read(Row);
		//允许刷新.
		IsRefresh();
	}
}

//计算小计金额.
void
SaleGrid::CalPrice()
{
	//更新计算小计。
	//这是一个虚拟函数,参见派生类SaleWin.
}

//累计网格数据.
void
SaleGrid::GridSum()
{
	char temp[33];
	//总优惠,当前网格中的总金额.
	double SumNum = 0, SumPref = 0, SumMoney = 0;
	//累加.
	for(int i=0; i<Rows; i++)
	{
		//读取数据.
		Read(i);
		//累加数量.
		SumNum = SumNum + atof(Data[4]);
		//累加折扣.
		SumPref = SumPref + atof(Data[3])*atof(Data[4]) - atof(Data[7]);
		//小计累加.
		SumMoney = SumMoney + atof(Data[7]);
	}
	//在下面显示累加数据。
	sprintf(temp, "%6.2lf", SumNum);
	TNumber->SetText(temp);
	sprintf(temp, "%13.2lf", SumPref);
	TPref->SetText(temp);
	sprintf(temp, "%11.2lf", SumMoney);
	TSum->SetText(temp);
}

//重画
void
SaleGrid::Draw()
{
	//网格重画
	Grid::Draw();
	if(Refable == L_YES)
	{
		TNumber->Show();
		TPref->Show();
		TSum->Show();
	}
}

//判断柜组信息.
void
SaleGrid::AdjGroup()
{
	//这是虚函数,查看SaleWin类。
}

//判断是不是联营方式。
int
SaleGrid::AdjPool()
{
	char temp[33];
	strcpy(temp, Data[1]);
	Trim(temp);
	temp[2] = NULL;
	if(strcmp(temp, sys->PoolCode)==0)
	{
		return L_YES;
	}
	return L_NO;
}

//当是联营方式时如何处理。
void
SaleGrid::DoPool()
{
	unsigned int Event;
	Col = 3;
run:
	Grid::Run();
	GetEvent(Event);
	switch(Event)
	{
		case KEY_RETURN:
		case EV_NEXT:
		case EV_PREV:
			//如果金额小于或者等于0则认为错误而取原来的金额.
			if(atof(Data[3])<=0)
			{
				Col = 1;
				return ;
			}
			sprintf(Data[3], "%9.2f", atof(Data[3]));
			CalPrice();
			Update();
			Col = 1;
			return ;
		default:
			goto run;
	}
}

//条码秤.
int
SaleGrid::AdjBal(char *data)
{
	char temp[33];
	strcpy(temp, data);
	Trim(temp);
	temp[2] = NULL;
	if(strcmp(temp, sys->BarBalMark)==0)
	{
		return L_YES;
	}
	return L_NO;
}

⌨️ 快捷键说明

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