发新话题
打印

本人这几天闭光,写了1.6万行代码。

本人这几天闭光,写了1.6万行代码。

经过yongweisun 老大指点,我采用了重够翻暗.我大大优化了我的代码.
不过本人还是认为结构比较混乱。不过比以前好多了。
各位老大也把你们的代码贴出来我看看
我重写了一个数据操作类.CPutData
#include "LDataRunSQL.h"//基础数据类
class CPutData  
{
public:

CPutData();
virtual ~CPutData();
    CString sql;
    CLDataRunSQL m_DataRun;
long m_lIndex;//引索
CString m_Date;//日期
    CString m_Kinds;//单据类型
    long m_lDWID;//单位ID
bool PutYSYFMoney(double m_dMoney,bool m_bAdd=1);
    bool PutDWBook(long m_lSPID,double m_dNumber ,double m_dPrice, double m_dMoney,bool m_bAdd=1);//单位帐本--库存商品
    bool PutDWBook(CString m_SubjectID,double m_dMoney,bool m_bAdd=1);//单位帐本--现金银行等
    bool PutKC(long m_lCKID,long m_lSPID,double m_dNumber,double m_dmoney,bool m_bAdd=1);//库存
    bool PutKCBook(long m_lCKID, long m_lSPID, double m_dNumber, double m_lPrice,double m_dmoney,bool m_bAdd=1);//库存,库存帐本
    bool PutSubject(CString m_SubjectID,double m_dMoney,bool m_bAdd=1);//科目,科目帐本
    bool PutSubjectBook(CString m_SubjectID,double m_dMoney,bool m_bAdd=1);//录入科目帐本
};

[ 本帖最后由 w1984721 于 2007-12-20 15:57 编辑 ]

TOP

CPutData::CPutData()
{
  sql="";
  m_Date= _T("");//建帐日期
  m_lIndex=0;//引索
  m_Kinds= _T("");//单据类型
}

CPutData::~CPutData()
{

}

bool CPutData:utSubject(CString m_SubjectID,double m_dMoney,bool m_bAdd)
{
     double m_dFSMoney=0;//发生额额
         double m_dLJMoney=0;//累计金额

      sql.Format("select * from 科目 where ID='%s'",m_SubjectID);
      if(m_DataRun.CheckSQLResult1(sql))
          {   
         m_DataRun.get1("本月发生额",m_dFSMoney);
                 m_DataRun.get1("累计金额",m_dLJMoney);
                 if(m_bAdd)//增加
                 {
         m_dFSMoney+=m_dMoney;
         m_dLJMoney+=m_dMoney;
                 }
                 else//减少
                 {
         m_dFSMoney-=m_dMoney;
         m_dLJMoney-=m_dMoney;
                 }
         m_DataRun.put1("本月发生额",m_dFSMoney);
         m_DataRun.put1("累计金额",m_dLJMoney);

          if(!m_DataRun.up1())
                  {
            m_DataRun.RollbackTrans();//回滚事务
            return 0;
                  }
          }
        return 1;
}

bool CPutData:utSubjectBook(CString m_SubjectID,double m_dMoney,bool m_bAdd)//录入科目帐本
{

     if(!PutSubject(m_SubjectID,m_dMoney,m_bAdd))
          return 0;

     double m_dFSMoney=0;//发生额额
         double m_dLJMoney=0;//累计金额

      sql.Format("select * from 科目 where ID='%s'",m_SubjectID);
      if(m_DataRun.CheckSQLResult1(sql))
          {
       m_DataRun.get1("累计金额",m_dLJMoney);
       m_DataRun.add1("科目帐本");
       m_DataRun.put1("引索",m_lIndex);
       m_DataRun.put1("科目编码",m_SubjectID);
       m_DataRun.put1("日期",m_Date);

           if(m_bAdd)//增加
       m_DataRun.put1("增加金额",m_dMoney);
           else//减少
       m_DataRun.put1("减少金额",m_dMoney);

       m_DataRun.put1("余额",m_dLJMoney);
       if(!m_DataRun.up1())
                {
          m_DataRun.RollbackTrans();//回滚事务
          return 0;
                }
          }
        return 1;
}

bool CPutData:utDWBook(long m_lSPID, double m_dNumber,double m_dPrice ,double m_dMoney, bool m_bAdd)
{
   double m_YE=0.0;//余额
   long n=0;//单位性质
   CString m_SubjectID="10101";
   if(!PutYSYFMoney(m_dMoney,m_bAdd))//应收应付
       return 0;

   sql.Format("select * from 单位 where ID=%d",m_lDWID);
   if(m_DataRun.CheckSQLResult1(sql))
    m_DataRun.get1("单位性质",n);

   sql.Format("select * from 应收应付 where 单位ID=%d",m_lDWID);
   if(m_DataRun.CheckSQLResult1(sql))
   {
       if(n==1)//假如为供应商
           m_DataRun.get1("应付款",m_YE);
           else
           m_DataRun.get1("应收款",m_YE);
   }
   else
    m_YE=m_dMoney;//没有记录

    m_DataRun.add1("单位帐本");
    m_DataRun.put1("引索",m_lIndex);
    m_DataRun.put1("日期",m_Date);
    m_DataRun.put1("单位ID",m_lDWID);
    m_DataRun.put1("商品ID",m_lSPID);
    m_DataRun.put1("数量",m_dNumber);
    m_DataRun.put1("单价",m_dPrice);
    m_DataRun.put1("科目ID",m_SubjectID);

        if(m_bAdd)
    m_DataRun.put1("增加",m_dMoney);
    else
    m_DataRun.put1("减少",m_dMoney);
       
    m_DataRun.put1("余额",m_dMoney);

    if(!m_DataRun.up1())
         {
       m_DataRun.RollbackTrans();//回滚事务
       return 0;
         }
      return 1;
}

bool CPutData::PutDWBook(CString m_SubjectID,double m_dMoney,bool m_bAdd)
{
   double m_YE=0.0;
   long n=0;//单位性质

   if(!PutYSYFMoney(m_dMoney,m_bAdd))//应收应付
       return 0;

   sql.Format("select * from 单位 where ID=%d",m_lDWID);
   if(m_DataRun.CheckSQLResult1(sql))
    m_DataRun.get1("单位性质",n);

   sql.Format("select * from 应收应付 where 单位ID=%d",m_lDWID);
   if(m_DataRun.CheckSQLResult1(sql))
   {
       if(n==1)//假如为供应商
           m_DataRun.get1("应付款",m_YE);
           else
           m_DataRun.get1("应收款",m_YE);
   }
   else
   m_YE=m_dMoney;//没有记录
   
    m_DataRun.add1("单位帐本");
    m_DataRun.put1("引索",m_lIndex);
    m_DataRun.put1("日期",m_Date);
    m_DataRun.put1("单位ID",m_lDWID);
    m_DataRun.put1("科目ID",m_SubjectID);

        if(m_bAdd)
    m_DataRun.put1("增加",m_dMoney);
    else
    m_DataRun.put1("减少",m_dMoney);
       
    m_DataRun.put1("余额",m_YE);
       

    if(!m_DataRun.up1())
         {
       m_DataRun.RollbackTrans();//回滚事务
       return 0;
         }
      return 1;
}

bool CPutData::PutYSYFMoney(double m_dMoney, bool m_bAdd)
{
  long n=0;//单位性质
  double m_Money=0.0;
  sql.Format("select * from 单位 where ID=%d",m_lDWID);
   if(m_DataRun.CheckSQLResult1(sql))
    m_DataRun.get1("单位性质",n);

  sql.Format("select * from 应收应付 where 单位ID=%d",m_lDWID);
  if(m_DataRun.CheckSQLResult1(sql))
  {   
      if(n==1)//假如为供应商
          {
           m_DataRun.get1("应付款",m_Money);
           if(m_bAdd)
           m_Money+=m_dMoney;
           else
           m_Money-=m_dMoney;
       m_DataRun.put1("应付款",m_Money);
          }
          else//客户
          {
           m_DataRun.get1("应收款",m_Money);
           if(m_bAdd)
           m_Money+=m_dMoney;
           else
           m_Money-=m_dMoney;
       m_DataRun.put1("应收款",m_Money);
          }
        if(!m_DataRun.up1())
                {
          m_DataRun.RollbackTrans();//回滚事务
          return 0;
                }
  }
else
{
      if(n==1)//假如为供应商
          {
      m_DataRun.add1("应收应付");
      m_DataRun.put1("单位ID",m_lDWID);
      m_DataRun.put1("应付款",m_dMoney);
          }
          else//客户
          {
      m_DataRun.add1("应收应付");
      m_DataRun.put1("单位ID",m_lDWID);
      m_DataRun.put1("应收款",m_dMoney);
          }
        if(!m_DataRun.up1())
                {
          m_DataRun.RollbackTrans();//回滚事务
          return 0;
                }
}
      return 1;
}

bool CPutData::PutKCBook(long m_lCKID, long m_lSPID, double m_dNumber, double m_lPrice,double m_dmoney, bool m_bAdd)
{
       if(!PutKC(m_lCKID,m_lSPID,m_dNumber,m_dmoney,m_bAdd))
       return 0;

           double m_dOldCount=0;//库存余量
       double m_dOldMoney=0;//库存金额
//库存
  sql.Format("select * from 库存 where 商品ID=%d and 仓库ID=%d",m_lSPID,m_lCKID);
    if(m_DataRun.CheckSQLResult1(sql))//判断库存是否有这种商品
         {
                 m_DataRun.get1("数量",m_dOldCount);
         m_DataRun.get1("金额",m_dOldMoney);
          }

       m_DataRun.add1("库存帐本");
       m_DataRun.put1("引索",m_lIndex);
       m_DataRun.put1("单据类型",m_Kinds);
       m_DataRun.put1("商品ID",m_lSPID);
       m_DataRun.put1("仓库ID",m_lCKID);
           m_DataRun.put1("日期",m_Date);

           if(m_bAdd)
       m_DataRun.put1("入库量",m_dNumber);
           else
       m_DataRun.put1("出库量",m_dNumber);

       m_DataRun.put1("价格",m_lPrice);
       m_DataRun.put1("库存余量",m_dOldCount);
       m_DataRun.put1("库存金额",m_dOldMoney);


       if(!m_DataRun.up1())
           {
            m_DataRun.RollbackTrans();//回滚事务
            return 0;
           }

          return 1;
}

bool CPutData::PutKC(long m_lCKID, long m_lSPID, double m_dNumber, double m_dmoney,bool m_bAdd)
{
  double m_dOldCount=0;//库存余量
  double m_dOldMoney=0;//库存金额
  double m_dCBPrice=0;//成本均价

//库存
  sql.Format("select * from 库存 where 商品ID=%d and 仓库ID=%d",m_lSPID,m_lCKID);
    if(m_DataRun.CheckSQLResult1(sql))//判断库存是否有这种商品
          {//如果有就更新记录
//更新--数量,价格,金额(库存总价)
                 m_DataRun.get1("数量",m_dOldCount);
         m_DataRun.get1("金额",m_dOldMoney);
         
                 if(m_bAdd)
                 {
         m_dOldMoney+=m_dmoney;
         m_dOldCount+=m_dNumber;
         m_dCBPrice=m_dOldMoney/m_dOldCount;
         m_DataRun.put1("数量",m_dOldCount);
         m_DataRun.put1("成本均价",m_dCBPrice);
         m_DataRun.put1("金额",m_dOldMoney);
                 }
                 else
                 {
         m_dCBPrice=m_dOldMoney/m_dOldCount;
         m_dOldMoney-=m_dCBPrice*m_dNumber;
         m_dOldCount-=m_dNumber;
         m_DataRun.put1("数量",m_dOldCount);
         m_DataRun.put1("金额",m_dOldMoney);
                 }

         if(!m_DataRun.up1())
                  {
            m_DataRun.RollbackTrans();//回滚事务
            return 0;
                  }

           }
        else//如果没有就插入记录
          {
         m_dOldMoney=m_dmoney;
         m_dOldCount=m_dNumber;
         m_dCBPrice=m_dOldMoney/m_dOldCount;
         m_DataRun.add1("库存");
         m_DataRun.put1("商品ID",m_lSPID);
         m_DataRun.put1("仓库ID",m_lCKID);
         m_DataRun.put1("数量",m_dOldCount);
         m_DataRun.put1("成本均价",m_dCBPrice);
         m_DataRun.put1("金额",m_dOldMoney);
          if(!m_DataRun.up1())
                  {
            m_DataRun.RollbackTrans();//回滚事务
            return 0;
                  }
           }
            return 1;
}

TOP

我的收款单的录入过成如下:

当用户点饥保存按钮时:
发生一下事件:
void CFormSK::OnButtonSave()
{
        // TODO: Add your control notification handler code here
         BeginWaitCursor();
         if(!GetData())//获得数据
                 return;
     if(!CheckData())//验证数据
                 return;

//初始化数据录入
CPutData put;//声明数据操作类
    put.m_Date=m_Date;
    put.m_Kinds=m_Kinds;
    put.m_lIndex=m_lIndex;
    put.m_lDWID=m_lDWID;

     if(!PutData())//保存数据
         {
                 MessageBox("数据录入错误!");
                 return;
         }
     EndWaitCursor();
         MessageBox("添加成功!","提示",MB_ICONINFORMATION);
}

[ 本帖最后由 w1984721 于 2007-12-20 14:07 编辑 ]

TOP

1.6万行?!
马甲1号粉丝会成员::<加入方法>
新会员:【U571-233】 【红山茶】 【Jim.zh】 【leak】【mygod】 【敢刷天下单】 【hooligancex】【hingman】【changhefirst】
老会员:【leny】【cyan】【yxsoft】 【馬甲壹號】【hwjmyz 】【makesoft】【reika】(接收所有马甲、月入万刀、有特殊才艺者....)

TOP

bool CFormSK::GetData()//获得数据
{
         UpdateData(1);
     m_Date=m_OleDate.Format("%Y-%m-%d");//获得日期
     
//获得引索
     m_lIndex=0;
     sql="select max(引索) as 引索 from 单据头";
     if(m_DataRun.CheckSQLResult1(sql))
         {
        m_DataRun.get1("引索",m_lIndex);
        m_lIndex++;
         }
     else
         {
        m_lIndex=1;
         }

    return 1;
}

bool CFormSK::CheckData()//验证数据
{
    if(m_lDWID<1)
        {
                MessageBox("请输入单位名称!");
            return 0;
        }

    if(m_lYGID<1)
        {
                MessageBox("请输入员工名称!");
                   return 0;
        }


            return 1;
}

TOP

bool CFormSK:utData()//录入数据
{
    m_DataRun.BeginTrans();//开始一个事务

    if(!PutDJHeak())//单据头
    return 0;
    if(!PutDJContent())//单据
    return 0;
    if(!put.PutSubjectBook("10105",m_dSumMoney,0))//科目帐本--应付款合计
        return 0;
    m_DataRun.CommitTrans();
    return 1;
}

TOP

逐个函数一成成的张开

bool CFormSK:utDJHeak()//单据头
{
     m_DataRun.add1("单据头");
     m_DataRun.put1("引索",m_lIndex);
     m_DataRun.put1("单据编号",m_DJID);
         m_DataRun.put1("单据类型",m_Kinds);
     m_DataRun.put1("日期",m_Date);
         m_DataRun.put1("摘要",m_ZY);//摘要
     m_DataRun.put1("单位ID",m_lDWID);
     m_DataRun.put1("员工ID",m_lYGID);
     m_DataRun.put1("备注",m_Remark);//备注
     m_DataRun.put1("合计金额",m_dKFMoney);//可分配金额
     m_DataRun.put1("优惠后金额",m_dSumMoney);//合计金额,既用户总的付款额
     if(!m_DataRun.up1())
         {
        m_DataRun.RollbackTrans();//回滚事务
        MessageBox("数据录入出错!","警告",MB_ICONSTOP);
        return 0;
         }
   return 1;
}

bool CFormSK:utDJContent()//单据
{
        if(!PutDJContentAccount())//录入付款帐户--m_list1
                return 0;
    if(!PutDJContentJS())//录入单据的结算--m_list2
                return 0;

             return 1;
}

TOP

bool CFormSK: : PutDJContentAccount()//单据,应收应付,单位帐本,科目,科目帐本
{
    CString m_KMID="";
        double m_dMoney=0.0;
        CString m_Remark="";
    int n=m_list1.GetItemCount();
        for(int i=0;i<n;i++)
        {
      if(m_list1.GetItemText(i,0)!="")//判断次行是否为空--假如为空跳出下面的循环
          {   
                  m_KMID.Format("%d",m_list1.GetItemData(i));
          m_list1.get(i,2,m_dMoney);
          m_list1.get(i,3,m_Remark);
          m_DataRun.add1("单据");
                  m_DataRun.put1("引索",m_lIndex);
          m_DataRun.put1("日期",m_Date);
          m_DataRun.put1("单据编号",m_DJID);
              m_DataRun.put1("单据类型",m_Kinds);
                  m_DataRun.put1("科目编号",m_KMID);
                  m_DataRun.put1("金额",m_dMoney);
                  m_DataRun.put1("备注",m_Remark);

            if(!m_DataRun.up1())
                        {
                m_DataRun.RollbackTrans();//回滚事务
                MessageBox("数据录入出错!","警告",MB_ICONSTOP);
                return 0;
                        }
           if(!put.PutDWBook(m_KMID,m_dMoney,0))//应收应付,单位帐本
                      return 0;
           if(!put.PutSubjectBook(m_KMID,m_dMoney,1))//科目,科目帐本--现金银行
             return 0;
          }
        }
          return 1;
}

bool CFormSK:utDJContentJS()//录入单据的结算
{
     double m_dYE=0.0;//余额
     int n=m_list2.GetItemCount();
     long index=0;//结算引索
     double m_dMoney=0.0;
        for(int i=0;i<n;i++)
        {
      if(m_list2.GetItemData(i)>0)//判断次行是否为空--假如为空跳出下面的循环
          {   
                  index=m_list2.GetItemData(i);
          m_list2.get(i,4,m_dYE);//余额
          m_list2.get(i,5,m_dMoney);//结算金额
                  if(m_dMoney==0)
                         continue;
          m_dYE-=m_dMoney;//结算余额
          m_DataRun.add1("单据");
                  m_DataRun.put1("引索",m_lIndex);
                  m_DataRun.put1("单据编号",m_DJID);
                  m_DataRun.put1("日期",m_Date);
              m_DataRun.put1("单据类型",m_Kinds);
                  m_DataRun.put1("结算引索",index);//结算引索
                  m_DataRun.put1("结算金额",m_dMoney);
                  m_DataRun.put1("结算余额",m_dYE);

            if(!m_DataRun.up1())
                        {
                m_DataRun.RollbackTrans();//回滚事务
                MessageBox("数据录入出错!","警告",MB_ICONSTOP);
                return 0;
                        }

                        sql.Format("select * from 单据头 where 引索=%d",index);
            m_DataRun.RunSQL1(sql);
            m_DataRun.put1("余额",m_dYE);
             if(!m_DataRun.up1())
                         {
                m_DataRun.RollbackTrans();//回滚事务
                MessageBox("数据录入出错!","警告",MB_ICONSTOP);
                return 0;
                         }
          }
        }
     return 1;
}

TOP

超级简单易用的音视频转换控件 2008.09.28 最新版本 2.2 推出,更强大 FFmpeg for Delphi http://www.CCAVC.com
MSN: CodeCoolie#live.com QQ: 25758206 (请填写相关验证信息, 谢谢)
成功上传头像的秘籍

TOP

天下第一不用资源字符串。。。
超级简单易用的音视频转换控件 2008.09.28 最新版本 2.2 推出,更强大 FFmpeg for Delphi http://www.CCAVC.com
MSN: CodeCoolie#live.com QQ: 25758206 (请填写相关验证信息, 谢谢)
成功上传头像的秘籍

TOP

发新话题