📄 datam.c
字号:
system(Param.QxOpen);
break;
case 2:
if (Param.Gx[0] == '0' || Param.GxInit[0] == '\0')
{
return;
} //禁止固显
system(Param.GxInit);
break;
}
}
double GetRound(double value)
{
char buf[21];
sprintf(buf, "%.2f", value);
return atof(buf);
}
//设置小数位数
void GetDec(char *value, double dec, int ws, int Att)
{
char buf[21], _buf[21];
int k, mark = 1;
if (ws < 0)
{
ws = _xsdws;
}
sprintf(buf, "%%%c.%df", Param.Dyspbm[4], (ws > 3) ? 3 : ws);
sprintf(value, buf, dec);
if (ws >= 4)
{
k = (int) strlen(value) - 1;
value[k + 1] = '\0';
while (k >= 0 && mark && (value[k] == '0' || value[k] == '.'))
{
mark = value[k] != '.';
value[k--] = '\0';
}
}
if (Att)
{
sprintf(buf, "%%%cs", Param.Dyspbm[4]);
sprintf(_buf, buf, value);
strcpy(value, _buf);
uf_strmid(buf, p_Formats[7], 4, 1);
if (buf[0] == '\n')
{
buf[0] = '\0';
}
strcat(value, buf);
}
// printf("%s\n",value);
}
//
void GetJE(char *value, double JE, char ws, char *_c, int Index)
{
int k;
char buf[21], buf2[11];
sprintf(buf, "%s%.2f", _c, JE);
k = ws - 44 + strlen(_c);
sprintf(buf2, "%%%ds", k);
sprintf(value, buf2, buf);
// printf("\n%s",value);
if (Index >= 0)
{
uf_strmid(buf, p_Formats[7], Index, 1);
strcat(value, buf);
}
}
//检查商品是否为联营
int CheckLysp(void)
{
int k;
if (!SPLists->RecordCount)
{
return 0;
}
if (SPLists->RecNo > SPLists->RecordCount)
{
k = SPLists->RecordCount;
}
else
{
k = SPLists->RecNo;
}
switch (Param.Yxxgsj[0])
{
case '3':
if (strcmp(SPLists->SPList[k].jyfs, "10") == 0)
{
return 1;
}
break;
case '4':
if (SPLists->SPList[k].sj == 0)
{
return 1;
}
break;
case '5':
if (strcmp(SPLists->SPList[k].jyfs, "10") == 0 || SPLists->SPList[k].sj == 0)
{
return 1;
}
break;
default:
break;
}
return 0;
}
//初始化商品销售表,全部清为0
void InitCommodity(void)
{
SPLists->RecordCount = 0;
SPLists->RecNo = 0;
SPLists->spje = 0;
SPLists->ysje = 0;
InBuffer(-1, 0x9904, 1, 0); // 产生显示金额的消息
}
//计算合计金额
void CalculateSum(void)
{
int i;
char value[31];
double Result = 0, k = 0, r, q, p, sl = 0;
double tax[4] =
{
0.00, 0.00, 0.00, 0.00
};
for (i = 1; i <= SPLists->RecordCount; i++)
{
Result += SPLists->SPList[i].je;
sl += SPLists->SPList[i].sl;
if (Param.Sswr[0] == '3')
{
sprintf(value, "%.2f", SPLists->SPList[i].sjsj);
SPLists->SPList[i].sjsj = atof(value);
}
if (SPLists->SPList[i].state != 4)
{
r = SPLists->SPList[i].sjsj * SPLists->SPList[i].sl;
}
else
{
r = SPLists->SPList[i].ssje;
}
q = 0;
if (Param.Sswr[0] == '3')
{
p = 10 * r; //求整数部分
q = p - floor(p); //求小数部分
if (q >= 0.5)
{
q = 1.0 - q;
} //增加的付款分
else
{
q = -q;
} //少收的钱
q = q / 10; //转成分
r = r + q;
}
SPLists->SPList[i].sswr = q;
SPLists->SPList[i].ssje = r;
k += SPLists->SPList[i].ssje;
}
SPLists->sl = sl;
SPLists->spje = Result;
//处理四舍五入
if (Param.Sswr[0] == '1' || Param.Sswr[0] == '2')
{
r = floor(10 * k); //求整数部分
q = 10 * k - r; //求小数部分
if (q >= 0.5)
{
q = 1.0 - q;
} //增加的付款分
else
{
q = -q;
} //少收的钱
q = q / 10; //转成分
if (Param.Sswr[0] == '2')
{
SPLists->SPList[1].ssje += q;
} //加到第一笔上
k += q; //实收变化
}
sprintf(value, "%.2f", k);
SPLists->ysje = atof(value);
//商品税额处理
if (Param.bz[0] == '1' || Param.bz[0] == '2') //允许税
{
for (i = 1; i <= SPLists->RecordCount; i++)
{
if (SPLists->SPList[i].spsl == g_sl[0])
{
tax[0] += SPLists->SPList[i].ssje;
}
else if (SPLists->SPList[i].spsl == g_sl[1])
{
tax[1] += SPLists->SPList[i].ssje;
}
else if (SPLists->SPList[i].spsl == g_sl[2])
{
tax[2] += SPLists->SPList[i].ssje;
}
else if (SPLists->SPList[i].spsl == g_sl[3])
{
tax[3] += SPLists->SPList[i].ssje;
}
}
SPLists->sehj = 0;
for (i = 0; i < 4; i++)
{
SPLists->se[i] = tax[i];
SPLists->sehj += tax[i] * (g_sl[i] - 1);
}
}
sprintf(value, "Total %.2f", SPLists->spje);
ShowGuXian(value, 2, 0);
}
//删除一条商品记录
void DeleteRecord(void)
{
int i;
if (Param.Yxscjl[0] == '0')
{
return;
}
if (!SPLists->RecordCount || SPLists->RecNo > SPLists->RecordCount)
{
return;
}
for (i = SPLists->RecNo + 1; i <= SPLists->RecordCount; i++) //记录移动
{
SPLists->SPList[i].RecNo--;
memcpy(&(SPLists->SPList[i - 1]), &(SPLists->SPList[i]), sizeof(_SPStruct));
}
SPLists->RecordCount--; //记录数减一
CalculateSum();//计算合计
InBuffer(-1, 0x9904, 1, 0); //刷新数据显示
}
//
int CheckSpSplb(void)
{
int i, j;
for (i = 0; i < 6; i++)
{
if (_SpSplb[i][0] == '\0')
{
return 0;
}
j = 0;
while (_SpSplb[i][j] && OrigSP.splb[j])
{
if (_SpSplb[i][j] != OrigSP.splb[j])
{
break;
}
j++;
}
if (_SpSplb[i][j] == '\0')
{
return 1;
}
}
return 0;
}
//总是增加在最后
int InsertRecord(void)
{
int oldNo;
char value[41];
if (SPLists->RecordCount >= 100)
{
MsgBoxEx("每次交易最大商品数不能大于100.", 1);
return 0;//失败
}
if (!SPLists->RecNo)
{
SPLists->RecNo = 1;
} //如果无记录时
oldNo = SPLists->RecNo; //保存原来的记录号
OrigSP.RecNo = oldNo;
//检查是否能够修改售价及打折
OrigSP.bz = CheckSpSplb();
if (Param.Yxscjl[0] == '0' || (SPLists->RecNo <= SPLists->RecordCount && (!MsgBoxEx("覆盖当前的商品吗?", 0))))
{
SPLists->RecNo = SPLists->RecordCount + 1; //加在最后一条记录
OrigSP.RecNo = SPLists->RecNo;
InBuffer(-1, 0x9904, 3, SPLists->RecNo); //刷新数据显示
}
memcpy(&(SPLists->SPList[SPLists->RecNo]), &OrigSP, sizeof(_SPStruct));
sprintf(value, "%s %.2f", SPLists->SPList[SPLists->RecNo].spbm, SPLists->SPList[SPLists->RecNo].je);
ShowGuXian(value, 1, 0);
if (SPLists->RecNo > SPLists->RecordCount) //当前位置无数据,增加记录
{
SPLists->RecordCount++;
} //记录数加1
CalculateSum();//计算合计
InBuffer(-1, 0x9904, 3, oldNo);
//如果不是最后时,记录移动到最后
if (SPLists->RecNo < SPLists->RecordCount + 1)
{
SPLists->RecNo = SPLists->RecordCount + 1;
InBuffer(-1, 0x9904, 3, SPLists->RecNo); //刷新数据显示
}
}
//商品处理
int ProcessSP(void)
{
int Result;
char value[41];
Result=sql_tm(&OrigSP,1);
switch (Result)
{
case 1:
case 2:
case 3:
case 4:
break;
case 33:
InsertRecord(); //新商品增加记录
Result = 0;
break;
default:
if (Result > 100)
{
CalculateSum();//计算合计
InBuffer(-1, 0x9904, 3, Result - 100);
sprintf(value, "%s %.2f", SPLists->SPList[Result - 100].spbm, SPLists->SPList[Result - 100].je);
ShowGuXian(value, 1, 0);
InBuffer(-1, 0x9904, 3, SPLists->RecNo);
Result = 0; //已经存在的商品
}
break;
}
return Result;
}
//改变商品数量
void ChangeSPSL(int RecNo, char *sl, int Att)
{
double fsl;
char value[31];
if (RecNo > SPLists->RecordCount)
{
RecNo = SPLists->RecordCount;
}
fsl = atof(sl); //要改变的数量
if (!Att) //改变数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -