做了简单的四个项目,有一个一直困扰我的问题,关于如何用对象?

billfranck 2006-07-27 03:33:19
做了四个小项目,一直用的是BCB,但OOP在我头脑里怎么还是不太清晰,过程化的语言,对我影响太深了,以前一直用C在UNIX下写代码.

比如,用来写一个程序:
在过程化的语言中,经常这样写:
有一个表,结构是这样的:
student
Id int;
studentname char;
sex char;
age int;
add char;
tel int;

过程化的语言中我们经常定义一个结构:
stuct student
{
int id;
char[60] studentname;
char[2] sex;
int age;
int tel;
}STUDENT

那我们在程序中会这样来用:
如:
set_student (STUDENT *oldstudent, STUDENT *newstudent)
{
EXEC SQL BEGIN DECLARE SECTION;
struct oldstudent;
struct newstudent;
EXEC SQL END SECTION;
oldstudent.id = newstudent.id;
......

...
}

我们要用的时候也很好用,

select * into :oldstudent from student;

这样,如果是一条记录的时候我们就将一条全部都给oldstudent这个结构了,多条记录时当然用的就是游标了,可是我不知这样的一个方法怎么向OOP转变?

我就是想有一个这个表结构一样的对象,每一次使用时只要实例化一下,当然如果要进行一个字段的取值,也可以调用成员方法进行设置(过程化编程中调用函数set_student).


可是我不知道这个类怎么个写法!

请高手,有实际编程经验高手指点一下!



...全文
311 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglovec 2006-08-14
  • 打赏
  • 举报
回复
class student
{
protecked:
int id;
char[60] studentname;
char[2] sex;
int age;
int tel;
public:
// 操作函数

}
billfranck 2006-08-14
  • 打赏
  • 举报
回复
呵呵!还有其它意见没有?
jaffy 2006-08-11
  • 打赏
  • 举报
回复
想法挺好,不过实用性体现在哪个地方?
truelove7283159 2006-08-11
  • 打赏
  • 举报
回复
LZ的意思不知道是不是这样的,
不过,我一般会这样写,仅限c++。
这样就可以把以前写的c结构,转换到c++的结构,在进一步到CLASS。

要是以前写的好,可以直接把原来结构的定义修改为类的,原来结构体成员变为类的公开成员。
truelove7283159 2006-08-11
  • 打赏
  • 举报
回复

#include <vector> //*B04*CH15*
using std::vector; //*B04*CH15*


#define MAX_STD_NAME_LENGTH 60
#define MAX_STD_SEX_LENGTH 2

struct TStudent;
struct TStudent
{
int id;
char name[MAX_STD_NAME_LENGTH];
char sex[MAX_STD_SEX_LENGTH];
int age;
int tel;

TStudent(){Init();};
~TStudent(){Release();};
TStudent & operator << (TStudent &);

bool Init();
bool Release();
bool DBopen(void);
bool Execute(void);
bool DBclose(void);
bool set_student (TStudent *oldstudent, TStudent *newstudent);
};

vector<TStudent> AStudentObj;
//========================================================

//AStudentObj.reserve((iNo+1));
//AStudentObj.resize((iNo+1));


bool TStudent::set_student(TStudent *newstudent, TStudent *oldstudent)
{
bool ret;
//EXEC SQL BEGIN DECLARE SECTION;
// struct oldstudent;
// struct newstudent;
//EXEC SQL END SECTION;
newstudent->id = oldstudent->id;
newstudent->age = oldstudent->age;
newstudent->tel = oldstudent->tel;
strcpy(newstudent->name,oldstudent->name);
strcpy(newstudent->sex,oldstudent->sex);

//or
memcpy(newstudent,oldstudent,sizeof(TStudent));

//DBopen();
//Execute();
// DBclose();
return ret;
}

bool TStudent::Execute()
{
bool ret;
//EXEC SQL BEGIN DECLARE SECTION;
// struct oldstudent;
// struct newstudent;
//EXEC SQL END SECTION;
//oldstudent.id = newstudent.id;
return ret;
}
「已注销」 2006-08-03
  • 打赏
  • 举报
回复
路过
billfranck 2006-08-03
  • 打赏
  • 举报
回复
征意思中。。。。。
daydayup234 2006-07-28
  • 打赏
  • 举报
回复
好象楼主要一个Class
这个类实现一个Table到数据struct的封装

想了想,可以
但是得用一个比如TADOTable*
得保证连接,打开正常
还得顾及不要因为类的事例化引起ADOTable的不良影响
就是要考虑事务处理

要考虑充分,难点
既然封装类,类就尽量别有问题
billfranck 2006-07-28
  • 打赏
  • 举报
回复
征意思中。。。。。
billfranck 2006-07-27
  • 打赏
  • 举报
回复
上面的这种办法去取一条记录是不是比较麻烦
billfranck 2006-07-27
  • 打赏
  • 举报
回复
AnsiString str1;

DBGrid1->DataSource = DataModule1->fhzDataSource;//数据源

if ( Key == VK_RETURN)
{
str1 ="select * from fhz where zh =";
str1 += "\'";
str1 += MaskEdit1->Text;
str1 += "\'";
str1 += " and bh = ";
str1 += "\'";
str1 += Edit1->Text;
str1 +="\'";

DataModule1->fhzADOQuery->SQL->Clear();
DataModule1->fhzADOQuery->SQL->Add(str1);
DataModule1->fhzADOQuery->Open();

//判断是否存在这样的一条记录
if ( DataModule1->fhzADOQuery->RecordCount == 0 )
{
MessageBox (NULL,"对不起,没有找到记录,请确定帐号和编号是否正确,还是您忘记对该户作开户交易","无此记录",MB_OK);
MaskEdit1->Text = ' ';
Edit1->Text = ' ';
MaskEdit1->SetFocus();
}
else
{
//fsr =(double)(DataModule1->fhzADOQuery->FieldByName("fsr")->AsDateTime); //最后发生日
ye =(double)(DataModule1->fhzADOQuery->FieldByName("ye")->AsFloat); //余额
dfj =(double)(DataModule1->fhzADOQuery->FieldByName("dfj")->AsFloat);//贷方积数
bz = DataModule1->fhzADOQuery->FieldByName("bz")->AsString; //结息标志
dqr =(double)(DataModule1->fhzADOQuery->FieldByName("dqr")->AsDateTime);//到期日

DateTimePicker1->SetFocus();
}
BlueDeepOcean 2006-07-27
  • 打赏
  • 举报
回复
呵呵,那就是我看错了。
daydayup234 2006-07-27
  • 打赏
  • 举报
回复
就是写个“表”的一条记录进入“结构”的类么?

另外,不必为了OOP而OOP.
jaffy 2006-07-27
  • 打赏
  • 举报
回复
看懂了,还真没见过结构可以这样在SQL中用,没这方面经验,我只知道兰色回答的不对.
楼主问:

select * into :oldstudent from student;
这样,如果是一条记录的时候我们就将一条全部都给oldstudent这个结构了,多条记录时当然用的就是游标了,可是我不知这样的一个方法怎么向OOP转变?



BlueDeepOcean 2006-07-27
  • 打赏
  • 举报
回复
错了,不小心点了按钮,误操作。

可以利用typedef进行定义吧。

typedef stuct student
{
int id;
char[60] studentname;
char[2] sex;
int age;
int tel;
}STUDENT;

引用的时候这样:

STUDENT *st = new STUDENT;
st->...
BlueDeepOcean 2006-07-27
  • 打赏
  • 举报
回复
set_student (STUDENT *oldstudent, STUDENT *newstudent)
{
EXEC SQL BEGIN DECLARE SECTION;
struct oldstudent;
struct newstudent;
EXEC SQL END SECTION;
oldstudent.id = newstudent.id;
......

...
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧