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