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

📄 datam.c

📁 dos下pos机程序 连接sybase数据库 使用Microsoft c7 编译
💻 C
📖 第 1 页 / 共 2 页
字号:
        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 + -