📄 salegrid.bak
字号:
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 + -