一个自动生成类的工具

最近在帮公安那边做系统,那些界面巨恶心,控件满天飞,我当时就惊呆了,在沉思了一个星期后,没办法还得硬着头皮上。后来一看它们的后台代码,我的天也是极其的烦琐,为什么它们就从来没有想过如何简单一点呢,哎。于是就写了这个自动生成类的工具,这是一个同事以前留下来的,可他离开公司了,所以没有这个东东了。只好自己照着它写了一个。花了两天时间。终于完成了。代码太长现列文件如下。

  #ifndef _TABLECRATE_H
#define _TABLECRATE_H
 
#include <stdio.h>
#include <stdarg.h>
#include <tchar.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <string>
#include <vector>
using namespace std;

namespace GovNetERP {

enum EDataType { EString=0,EInt,EFloat,EDouble,EBlob=4 };

class DataType {
    protected:
      
        string field_name;
        int field_type;
        int field_size;
        
        DataType(string name,int type=0,int size=0):field_name(name),field_type(type),field_size(size) {};
        virtual ~DataType() {};
    public:
        string getTypeName()  { return field_name;};
  int    getType() { return field_type; };
        int    getTypeSize() { return field_size;};
  bool   IsInvalidType() { return field_type<EBlob;  };
  
  string getTypeDefaultVale() 
  {
   switch(EDataType(field_type))
   {
       case EInt:
        case EFloat:
       case EDouble:
         return "0";
       case EBlob:
       case EString:
         return "/"/"";
   }
   return "";
  };


};

class CommField {
public:
   CommField(DataType *data_type,const char *name,bool key_f)
   {
     key_flag    = key_f; 
           field_name  = name;
    
        type_name   = data_type->getTypeName();
        type_size   = data_type->getTypeSize();
     type_default_value      = data_type->getTypeDefaultVale();
     switch(data_type->getType() )
     {
          case EInt:
        case EFloat:
       case EDouble:
         type_ext= "";
      break;
       case EBlob:
       case EString:
         type_ext= ".c_str()";
      break;

     }
   };
     virtual ~CommField() {};
public:
        string getFieldName() { return field_name;};   
     string getTypeName()  { return  type_name;};
     string getTypeDefaultVale() { return type_default_value;};
        int    getTypeSize() { return  type_size;};
  bool   isKeyField() { return key_flag; };
  string getTypeExt() { return type_ext;};
private:
        string field_name;
  string type_name;
  string type_ext;
  string type_default_value; 
        int    type_size;
  bool   key_flag;
   
};
//四种数据类型
class StringType : public  DataType {
    public:
      StringType(int size=20):DataType("string",EString,size) {};
      virtual ~StringType() {};
};

class FloatType : public  DataType {
    public:
      FloatType():DataType("float",EFloat,4)  {};
      virtual ~FloatType() {};
};

class DoubleType : public  DataType {
    public:
      DoubleType():DataType("double",EDouble,8) {};
      virtual ~DoubleType() {};
};

class IntType : public  DataType {
    public:
      IntType():DataType("int",EInt,4)  {};
      virtual ~IntType() {};
};

class BlobType : public  DataType {
    public:
      BlobType():DataType("Blob",EBlob,4)  {};
      virtual ~BlobType() {};
};
 

class TableCreate
{
   public:
      void   SetDescription(const char *desc);
   void   PrintFileBody();
   void   AddField( DataType *field_type,const char *field_name,bool key_f=false);
   string getAllFieldName() ;
   string getAllConditionName() ;
   string getAllSetName() ;
   string getAllAddName() ;
   
   public:
      TableCreate(const char *class_name,const char *table_name, const char *conn_class, const char *author="");
      ~TableCreate();
   private:
  inline void WriteLines(FILE *fp,const char *pFormat,...);
     inline void WriteAllFieldsDeclare(FILE *fp,vector<CommField> &FieldList );
  inline void WriteAllFieldsInit(FILE *fp,vector<CommField> &FieldList );

  inline void WritesetConFields(FILE *fp, vector<CommField> &FieldList);
  inline void WritegetSelFields(FILE *fp, vector<CommField> &FieldList);
  inline void WritesetUpdFields(FILE *fp, vector<CommField> &FieldList);
  inline void WritesetAddFields(FILE *fp, vector<CommField> &FieldList);

   
  inline void ToUpperPtr(char *s) ;
   private:
     FILE *fp_body;
  FILE *fp_head;
  char mDescription[1024];
  char mParentClassName[20];
     char mClassName[20];
  char mTableName[50];
  char mConnectionClass[50];
     char mAuthorName[20];
  char mtime[128];
     char mOrigalDate[128];
  vector<CommField> FieldList;
};
}
#endif
 

调用这个类,输入三个参数后,会自动生成类(一个cpp文件和一个.h文件)

如有输入类名item_def,连接名TADOConnection  后,它自动生成一个类如下:

cpp文件如下:

/***************************************************
*Description: 数据库操作类
*File       : Tbl_item_def.cpp
*Author     : wuding
*Origal Date: 2008年04月09日 16:22:32
***************************************************/
#include "Tbl_item_def.h"
Tbl_item_def::Tbl_item_def(TADOConnection *con)
          :dbobj(con)
{
      trans_date=""
      period_id=""
      abst_id=""
      coa_no=""
      acc_flag=""
      comment=""
      apd_ch1=""
      apd_ch2=""
      balance=0
      amount=0
      apd_dbl=0
      ctr_serial_no=0
      seq_no=0
}

Tbl_item_def::~Tbl_item_def()
{
}

string  Tbl_item_def::getTabName()
{
   return "pub.item_def";
}

string  Tbl_item_def::getFields()
{
   return "trans_date,period_id,abst_id,coa_no,acc_flag,comment,apd_ch1,apd_ch2,balance,amount,apd_dbl,ctr_serial_no,seq_no";
}

string  Tbl_item_def::getCondition()
{
   return "trans_date=:c_trans_date and period_id=:c_period_id and abst_id=:c_abst_id and coa_no=:c_coa_no and acc_flag=:c_acc_flag and comment=:c_comment and apd_ch1=:c_apd_ch1 and apd_ch2=:c_apd_ch2 and balance=:c_balance and amount=:c_amount and apd_dbl=:c_apd_dbl and ctr_serial_no=:c_ctr_serial_no and seq_no=:c_seq_no";
}

string  Tbl_item_def::getSetList()
{
   return "trans_date=:trans_date,period_id=:period_id,abst_id=:abst_id,coa_no=:coa_no,acc_flag=:acc_flag,comment=:comment,apd_ch1=:apd_ch1,apd_ch2=:apd_ch2,balance=:balance,amount=:amount,apd_dbl=:apd_dbl,ctr_serial_no=:ctr_serial_no,seq_no=:seq_no";
}

string  Tbl_item_def::getAddList()
{
   return ":trans_date,:period_id,:abst_id,:coa_no,:acc_flag,:comment,:apd_ch1,:apd_ch2,:balance,:amount,:apd_dbl,:ctr_serial_no,:seq_no";
}

string  Tbl_item_def::setConFields()
{
   params->ParamByName("trans_date")->Value =trans_date.c_str();
   params->ParamByName("period_id")->Value =period_id.c_str();
   params->ParamByName("abst_id")->Value =abst_id.c_str();
   params->ParamByName("ctr_serial_no")->Value =ctr_serial_no;
   return ;
}

string  Tbl_item_def::getSelFields()
{
   trans_date =params->ParamByName("trans_date")->Value.c_str();
   period_id =params->ParamByName("period_id")->Value.c_str();
   abst_id =params->ParamByName("abst_id")->Value.c_str();
   coa_no =params->ParamByName("coa_no")->Value.c_str();
   acc_flag =params->ParamByName("acc_flag")->Value.c_str();
   comment =params->ParamByName("comment")->Value.c_str();
   apd_ch1 =params->ParamByName("apd_ch1")->Value.c_str();
   apd_ch2 =params->ParamByName("apd_ch2")->Value.c_str();
   balance =params->ParamByName("balance")->Value;
   amount =params->ParamByName("amount")->Value;
   apd_dbl =params->ParamByName("apd_dbl")->Value;
   ctr_serial_no =params->ParamByName("ctr_serial_no")->Value;
   seq_no =params->ParamByName("seq_no")->Value;
   return ;
}

string  Tbl_item_def::setUpdFields()
{
   params->ParamByName("trans_date")->Value =trans_date.c_str();
   params->ParamByName("period_id")->Value =period_id.c_str();
   params->ParamByName("abst_id")->Value =abst_id.c_str();
   params->ParamByName("coa_no")->Value =coa_no.c_str();
   params->ParamByName("acc_flag")->Value =acc_flag.c_str();
   params->ParamByName("comment")->Value =comment.c_str();
   params->ParamByName("apd_ch1")->Value =apd_ch1.c_str();
   params->ParamByName("apd_ch2")->Value =apd_ch2.c_str();
   params->ParamByName("balance")->Value =balance;
   params->ParamByName("amount")->Value =amount;
   params->ParamByName("apd_dbl")->Value =apd_dbl;
   params->ParamByName("ctr_serial_no")->Value =ctr_serial_no;
   params->ParamByName("seq_no")->Value =seq_no;
   return ;
}

string  Tbl_item_def::setAddFields()
{
   params->ParamByName("trans_date")->Value =trans_date.c_str();
   params->ParamByName("period_id")->Value =period_id.c_str();
   params->ParamByName("abst_id")->Value =abst_id.c_str();
   params->ParamByName("coa_no")->Value =coa_no.c_str();
   params->ParamByName("acc_flag")->Value =acc_flag.c_str();
   params->ParamByName("comment")->Value =comment.c_str();
   params->ParamByName("apd_ch1")->Value =apd_ch1.c_str();
   params->ParamByName("apd_ch2")->Value =apd_ch2.c_str();
   params->ParamByName("balance")->Value =balance;
   params->ParamByName("amount")->Value =amount;
   params->ParamByName("apd_dbl")->Value =apd_dbl;
   params->ParamByName("ctr_serial_no")->Value =ctr_serial_no;
   params->ParamByName("seq_no")->Value =seq_no;
   return ;
}

.h文件如下

/***************************************************
*Description: 数据库操作类
*File       : Tbl_item_def.h
*Author     : wuding
*Origal Date: 2008年04月09日 16:22:32
***************************************************/
#include "Tbl_item_def.h"
#ifndef __TBL_ITEM_DEF_H_
#define __TBL_ITEM_DEF_H_
class Tbl_item_def : public dbobj
{
public:
      string  trans_date
      string  period_id
      string  abst_id
      string  coa_no
      string  acc_flag
      string  comment
      string  apd_ch1
      string  apd_ch2
      double  balance
      double  amount
      double  apd_dbl
      int  ctr_serial_no
      int  seq_no
protected:
      string getTabName();
      string getFields();
      string getCondition();
      string getSetList();
      string getAddList();
      void  getSelFields();
      void  setUpdFields();
      void  setAddFields();
      void  setConFields();
public:
      Tbl_item_def(TADOConnection  *);
      ~Tbl_item_def();
};
#endif


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值