📄 salegrid.bak
字号:
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include "sysinfo.h"
#include "box.h"
#include "salegrid.h"
#include "find.h"
/******************************************************************************
销售网格的常量.
******************************************************************************/
char CodeData[14];
//网格标题.
char *salegridtitle[8] = { "ID",
" 编 码",
" 商 品 名 称",
" 单 价",
" 数量",
"%",
" 优 惠",
" 小 计"};
//网格列宽度.
int salegridwidth[8] = {3,14,22,9,6,4,9,11};
//网格列数.
int salegridcols = 8;
//网格外边框.
struct RECT salegridrect = {0,106,639,241};
//产生查找CodeNew数据文件的数据对象.
Find Code(".\\data\\code.dat",".\\data\\code.dax");
Find CodeNew(".\\data\\codenew.dat",".\\data\\codenew.dax");
//由于条码电子秤的条码包含价格,因此需要保留原来的条码.
char tempdata1[33];
//打印缓冲。
char prtmp[80];//打印缓冲。
/******************************************************************************/
//构造函数.
SaleGrid::SaleGrid()
: Grid(salegridrect, salegridcols, salegridwidth, salegridtitle)
{
//将当前列设置在编码列上.
Col = 1;
//增加一个空行.
AddNew();
//修改行号.
sprintf(Data[0], "%3d", Row+1);
//写入数据库.
Update();
//重画.
ItemDraw(Row);
//确定为累加模式.
SumMode = L_NO;
//退货标志.
ReturnFlag = L_NO;
//小计.
TNumber = new Edit(CreateRect(Rect.Left + 388, Rect.Top + Rect.Height - 20, 49, 20));
TNumber->SetFrameColor(15);
TNumber->SetBkColor(8);
TNumber->SetColor(15);
TPref = new Edit(CreateRect(Rect.Left + 437, Rect.Top + Rect.Height - 20, 106, 20));
TPref->SetFrameColor(15);
TPref->SetBkColor(8);
TPref->SetColor(15);
TSum = new Edit(CreateRect(Rect.Left + 543, Rect.Top + Rect.Height - 20, 89, 20));
TSum->SetFrameColor(15);
TSum->SetBkColor(8);
TSum->SetColor(15);
Show();
}
//析构函数.
SaleGrid::~SaleGrid()
{
delete TNumber;
delete TPref;
delete TSum;
}
//运行网格。
void
SaleGrid::Run()
{
//定义事件变量.
unsigned int Event;
int lastrow = 0;
for(;;)
{
//记住上一行的位置.
lastrow = Row;
//运行基础网格.
Grid::Run();
//取得返回事件.
GetEvent(Event);
//判断事件.
switch(Event)
{
case EV_QUIT:
//为了避免混乱,当前列如果不是第一列,不允许进行操作.
if(Col != 1)
{
break;
}
PutEvent(Event);
return;
case EV_NEXT:
case EV_PREV:
break;
case KEY_PGUP:
//为了避免混乱,当前列如果不是第一列,不允许进行操作.
if(Col != 1)
{
break;
}
//如果向上翻页无效则产生上一单的事件.
if(lastrow != Row)
{
break;
}
else
{
PutEvent(EV_PREVCHECK);
return;
}
case KEY_PGDWN:
//为了避免混乱,当前列如果不是第一列,不允许进行操作.
if(Col != 1)
{
break;
}
//如果向下翻页无效则产生下一单的事件.
if(lastrow != Row)
{
break;
}
else
{
PutEvent(EV_NEXTCHECK);
return;
}
case KEY_RETURN:
//回车事件.
switch(Col)
{
case 1:
if(ReadOnlyFlag == L_YES) break;
if(Line->ChangeFlag != L_YES && Row < Rows-1)
{
if(AdjPool()==L_YES)
{
DoPool();
}
MoveNext();
}
else
{
DoSearch();//执行查找.
}
ReturnFlag = L_NO;//修改退货标志为销售状态.
break;
case 4:
if(ReadOnlyFlag == L_YES) break;
//修改数量.
ChangeNumber();
//修改当前列.
Col = 1;
break;
case 5:
if(ReadOnlyFlag == L_YES) break;
//修改单笔折扣率.
ChangeDiscount();
Col = 1;
break;
case 6:
if(ReadOnlyFlag == L_YES) break;
ChangePref();//修改单笔优惠.
Col = 1;
break;
}
PutEvent(Event);
//累计金额。
GridSum();
return;
case KEY_F1:
//修改数量键.
if(ReadOnlyFlag == L_YES) break;
//为了避免打印混乱,当前列如果不是第一列,不允许进行修改操作.
if(Col != 1)
{
break;
}
//先打印退货.
PrintEject(prtmp);
PrOut(prtmp);
//修改数量键.
Col = 4;
break;
case KEY_F2:
//修改折扣率.
if(ReadOnlyFlag == L_YES) break;
//为了避免打印混乱,当前列如果不是第一列,不允许进行修改操作.
if(Col != 1)
{
break;
}
//先打印退货.
PrintEject(prtmp);
PrOut(prtmp);
//修改折扣率.
Col = 5;
break;
case KEY_F3:
//修改优惠额.
if(ReadOnlyFlag == L_YES) break;
//为了避免打印混乱,当前列如果不是第一列,不允许进行修改操作.
if(Col != 1)
{
break;
}
//先打印退货.
PrintEject(prtmp);
PrOut(prtmp);
//修改优惠额.
Col = 6;
break;
case KEY_F4:
//退货.
if(ReadOnlyFlag == L_YES) break;
//为了避免打印混乱,当前列如果不是第一列,不允许进行退货操作.
if(Col != 1)
{
break;
}
if(ReturnFlag==L_NO)
{
ReturnFlag = L_YES;
}
else
{
ReturnFlag = L_NO;
}
PutEvent(Event);
return;
case KEY_F9:
if(ReadOnlyFlag == L_YES) break;
//为了避免混乱,当前列如果不是第一列,不允许进行操作.
if(Col != 1)
{
break;
}
//打印退货.
PrintEject(prtmp);
PrOut(prtmp);
//删除当前行.
Delete(Row);
PutEvent(Event);
//累计金额。
GridSum();
return;
case KEY_F10:
if(ReadOnlyFlag == L_YES) break;
//为了避免混乱,当前列如果不是第一列,不允许进行操作.
if(Col != 1)
{
break;
}
//切换累加和不累加模式.
ChangeSumMode();
PutEvent(Event);
//累计金额。
GridSum();
return;
default:
//为了避免混乱,当前列如果不是第一列,不允许进行操作.
if(Col != 1)
{
break;
}
PutEvent(Event);
return;
}
}
}
//执行查找.
void
SaleGrid::DoSearch()
{
//数据不够13位用'*'补齐13位.
Trim(Data[1]);
strcpy(CodeData, Data[1]);
Data[1][9]=0;
//如果是空行.
if(strlen(Data[1])==0)
{
return;
}
while(strlen(Data[1]) < 13)
{
strcat(Data[1],"*");
}
//处理条码秤.
if(AdjBal(Data[1])==L_YES)
{
strcpy(tempdata1, Data[1]);
*(Data[1] + 9) = NULL;
while(strlen(Data[1]) < 13)
{
strcat(Data[1],"*");
}
}
//按Grid数据缓冲中的数据Data[1](编码或条码)在CODENEW中查找.
if(CodeNew.Search(Data[1])==L_OK)//如果查询到匹配项.
{
//将查询结果写到网格字段中.
WriteToGrid(&CodeNew);
return;
}
else
{
//按Grid数据缓冲中的数据Data[1](编码或条码)在CODE中查找.
if(Code.Search(Data[1])==L_OK)//如果查询到匹配项.
{
//将查询结果写到网格字段中.
WriteToGrid(&Code);
return;
}
unsigned int Ev;
char temp[100];
strcpy(temp, "数据库中未发现:");
strcat(temp, Trim(Data[1]));
strcat(temp, " 所对应的商品.");
//产生消息框.
QuestionBox *Msg =new QuestionBox(temp, "等待", "继续");
r:
Msg->Run();//运行消息框.
GetEvent(Ev);//获取返回的事件代码.
switch(Ev)
{
case CMD_YES://如果选择缺省的等待.
goto r;
case CMD_NO://如果选择继续.
break;
case EV_QUIT://如果按ESC选择继续.
break;
}
delete Msg;
}
}
//将查询结果写到网格字段中.
void
SaleGrid::WriteToGrid(Find *DB)
{
//如果不是最后一行.
if(Row < Rows-1)
{
PrintEject(prtmp);
PrOut(prtmp);
}
//行号.
sprintf(Data[0], "%3d", Row+1);
//编码.
char *CodeTemp;
CodeTemp = CodeData + 9;
strcat(DB->Code, CodeTemp);
sprintf(Data[1], "%13s", Trim(DB->Code));
//名称.
sprintf(Data[2], "%22s", DB->Name);
//单价.
strcpy(Data[3], DB->Price);
//数量.
if(ReturnFlag == L_NO)
{
//如果原来数量为0.
if(atof(Data[4]) == 0)
{
sprintf(Data[4], "%6.2f", 1.00);
}
//否则不管.
}
else
{
//如果原来数量为0.
if(atof(Data[4]) == 0)
{
sprintf(Data[4], "%6.2f", -1.00);
}
else//否则.
{
sprintf(Data[4], "%6.2f", -fabs(atof(Data[4])));
}
}
//计算单价.
CalPrice();
//将数据保存到文件.
Write(Row);
//判断柜组信息.
// AdjGroup(); 韩冰6月16日封.
//如果是条码秤则不累加。
if(AdjBal(Data[1])==L_YES)
{
goto jmp;
}
//判断联营方式并处理并且不累加.
if(AdjPool()==L_YES)
{
//刷新重画当前行.
ItemDraw(Row);
//运行联营代码。
DoPool();
goto jmp;
}
//-------------------------------------------------//
//如果允许累加判断数据是否重复,重复则累加。
//条码秤和联营编码将被跳过。
//-------------------------------------------------//
if(SumMode == L_YES)
{
//打印销售数据。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -