首页 > 编程资源分享区 > C/C++测试题 > C++ Builder 编程练习
2006
07-20

C++ Builder 编程练习

1.用Database Desktop在你的目录下建库,用BDEAdmin建一个
指向你的目录的数据集别名.这一步我已做,数据集别名为wsc
2.打开C++ Builder,打开你的工程,用file/new form在你的
工程中加一个单元,改窗口标题为学生基本档案,窗口名为
fxsda,设置窗口字体,设Showhint为true,放一个工具条,在
工具条上放两个按钮:返回SpeedButton1,打印SpeedButton2,
将单元存为uxsda
    打开头文件uxsda.h,添加数据成员AnsiString stj;
3.放二个Table元件Table1和tb,将DatabaseName属性设为(1.)
中的别名wsc,将Table1的TableName属性设为(1.)中的库名xs.db,
放一个DataSource1元件,将其DatSet属性设为Table1,放一个
DBNavigator1元件于工具条上,将其DataSource属性设为DataSource1,
4.放一个多页控件PageControl1,将其Align属性设为alBotton,
放一个Panel2将其Align属性设为alBotton,放一个DBGrid1元件
于窗口,将其Align属性设为alClient,将其DataSource属性设为(3.)
中的DataSource1,放一个打开图形文件对话框OpenPictureDialog1
5.双击Table1,调出字段编辑器,右击之,添加所有字段.
双击DBGrid1调出列编辑器,添加所有字段的列,删除简历爱好和
照片两列.选择所有列,设Alignment属性为taCenter,点开Title,
设列标题的Alignment属性为taCenter,并设其字体.在DBGrid1中
调节各列的宽度及宽度,使所有列可见,并留出滚动条的位置.设
性别列的PickList属性(点其…可调出编辑器)为男,女两行,设
年级列的PickList属性为1996,1997,1998,1999,2000,2001六行,
设班列的PickList属性为1,2,本,专四行
6.在Panel2上放DBImage1,DBMemo1,设DataSource属性为(3.)中的
DataSource1,设DataField为照片,简历爱好,设Align属性为
alRight,alClient.设DBImage1的Hint为双击此处可取得照片文件
7.右击PageControl1用New Page菜单生成两页,Caption为查询,索引.
    在查询页上放四个标笺: lcx1逻辑运算 lcx2字段名
lcx3关系运算 lcx4字段值,在前三个标笺下放三个复选框
(ComboBox): cbox1 cbox2 cbox3,在lcx4下放一个文本输
入框edb,放一个很长的文本输入框etj用来显示输入修改条件
,放六个快速按钮: sbcx1添加条件 sbcx2清除条件
sbcx5全部浏览 sbcx3按条件查(Filter) sbcx4按字段查(Locate)
sbcx6打开查询,除sbcx6外,所有的Visible为false.
设cbox1的Items为not and or三行,
设cbox3的Items为= > < >= <= <>六行
    在索引页上放两个标笺: lsy1索引字段 lsy2非索引字段,
在标笺下放两个复选框(ComboBox): cbsy1 cbsy2,放四个快速按钮:
sbsy2添加索引 sbsy1删除索引 sbsy3主索引 SpeedButton2打开索引,
除SpeedButton2外,所有的Visible为false
    所有控件应在Hint中设置简要说明


       以上为元件的放置和属性的设置


8.响应窗口的OnCreate事件,加入如下代码:
Top=(Screen->Height-Height)/2;
Left=(Screen->Width-Width)/2;//窗口居中
tb->Close();tb->TableName=”xi.db”;
tb->Open();tb->First();
DBGrid1->Columns->Items[3]->PickList->Clear();
while (!tb->Eof)
{DBGrid1->Columns->Items[3]->PickList->
  Add(tb->FieldByName(“系名称”)->Value);tb->Next();}
tb->Close();tb->TableName=”zy.db”;
tb->Open();tb->First();
DBGrid1->Columns->Items[6]->PickList->Clear();
while (!tb->Eof)
{DBGrid1->Columns->Items[6]->PickList->
  Add(tb->FieldByName(“专业名称”)->Value);tb->Next();}
//以上代码设系和专业两列的PickList
响应窗口的OnShow事件,加入如下代码:
Table1->Open();
响应窗口的OnClose事件,加入如下代码:
Table1->Close();
响应返回按钮的OnClick事件,加入如下代码:
Close();
响应DBImage1的OnDblClick事件的代码:
if (OpenPictureDialog1->Execute()) {Table1->Edit();
  DBImage1->Picture->LoadFromFile(OpenPictureDialog1-&gt ;FileName);}
在fmain窗口中加一个菜单:学生档案,在单元文件umain.cpp中加一行:
#include “uxsda.h”
响应菜单学生档案OnClick事件代码:
fxsda->Show();
   以上代码加入后,数据库的输入修改功能便已有了.


9.查询代码


//  sbcx6打开查询代码:
if (sbcx6->Caption==”关闭查询”)
{lcx1->Visible=false;lcx2->Visible=false;
  lcx3->Visible=false;lcx4->Visible=false;
  sbcx1->Visible=false;sbcx2->Visible=false;
  sbcx3->Visible=false;sbcx4->Visible=false;
  sbcx5->Visible=false;cbox1->Visible=false;
  cbox2->Visible=false;cbox3->Visible=false;
  edb->Visible=false;etj->Visible=false;//关闭所有控件
  Table1->Filtered=false;Table1->Filter=”";
  cbox1->Text=”";cbox2->Text=”";cbox3->Text=”";
  edb->Text=”";etj->Text=”";//清除条件和过滤
  sbcx6->Caption=”打开查询”;}
else
{lcx1->Visible=true;lcx2->Visible=true;
  lcx3->Visible=true;lcx4->Visible=true;
  sbcx1->Visible=true;sbcx2->Visible=true;
  sbcx3->Visible=true;sbcx4->Visible=true;
  sbcx5->Visible=true;cbox1->Visible=true;
  cbox2->Visible=true;cbox3->Visible=true;
  edb->Visible=true;etj->Visible=true;//打开所有控件
  Table1->Filtered=true;Table1->Filter=”";
  cbox1->Text=”";cbox2->Text=”";cbox3->Text=”";
  edb->Text=”";etj->Text=”";
  cbox2->Items->Clear();stj=”";//打开过滤和清除条件
  Table1->GetFieldNames(cbox2->Items);//取字段名
  sbcx6->Caption=”关闭查询”;}


//  sbcx1添加条件代码:
AnsiString ss;
if (cbox2->Text==”"||cbox3->Text==”"
  ||edb->Text==”") return;
TFieldType ftype=Table1->FieldByName(cbox2->Text)->DataType;
if (ftype==ftString) ss=”‘”+edb->Text+”‘”;
else ss=edb->Text;//只有文本属性的字段值需加单引号
stj=stj+” “+cbox1->Text+” “+
  cbox2->Text+cbox3->Text+ss;
etj->Text=stj;


//  sbcx2清除条件代码:
cbox1->Text=”";
cbox2->Text=”";
cbox3->Text=”";
edb->Text=”";
stj=”";etj->Text=”";


//  sbcx5全部浏览代码:
Table1->Close();
Table1->Filtered=false;//取消过滤
Table1->Open();


//  sbcx3过滤查询代码:
if (stj==”") return;
Table1->Close();
Table1->Filtered=true;
Table1->Filter=stj;Table1->Open();


//  sbcx4按字段定位代码(注意Locate函数的第二个参数为字段值,类型要匹配):
TLocateOptions opt;
  opt.Clear();opt << loPartialKey;
if (cbox2->Text==”"||edb->Text==”") return;
TFieldType ftype=Table1->FieldByName(cbox2->Text)->DataType;
if (ftype==ftString)
  Table1->Locate(cbox2->Text,edb->Text,opt);
else if (ftype==ftSmallint||
  ftype==ftInteger||ftype==ftWord)
  Table1->Locate(cbox2->Text,StrToInt(edb->Text),opt) ;
else if (ftype==ftDate||
  ftype==ftTime||ftype==ftDateTime)
  Table1->Locate(cbox2->Text,StrToDateTime(edb->Text) ,opt);


//  响应条件显示输入框etj的OnChange代码:
stj=etj->Text;


10.排序代码:


//  SpeedButton2进入退出排序功能代码:
int i,j;
if (SpeedButton2->Caption==”开始排序”)
{sbsy1->Visible=true;sbsy2->Visible=true;
  sbsy3->Visible=true;lsy1->Visible=true;
  lsy2->Visible=true;cbsy1->Visible=true;
  cbsy2->Visible=true;//打开所有控件
  cbsy1->Items->Clear();
  cbsy2->Items->Clear();
  Table1->Open();
  Table1->GetFieldNames(cbsy2->Items);//取字段名
  Table1->IndexDefs->Update();//更新索引字段
  if (Table1->IndexDefs->Count==0)
   MessageBox(fxsda->Handle,”此数据库无索引”,
    “警告”,MB_OK||MB_ICONWARNING);
  //以下功能取出索引字段和非索引字段
  else {for (i=0;iIndexDefs->Count;i++)
   cbsy1->Items->Add(Table1->IndexDefs->Items->Fields);
   for (i=0;iItems->Count;i++)
   for (j=0;jItems->Count;j++)
   if (cbsy2->Items->Strings[j]==cbsy1->Items->Strings)
   {cbsy2->Items->Delete(j);break;}}
  SpeedButton2->Caption=”结束排序”;}
else
{sbsy1->Visible=false;sbsy2->Visible=false;
  sbsy3->Visible=false;lsy1->Visible=false;
  lsy2->Visible=false;cbsy1->Visible=false;
  cbsy2->Visible=false;//关闭所有控件
  cbsy1->Items->Clear();cbsy2->Items->Clear();
  SpeedButton2->Caption=”开始排序”;}


//  响应cbsy1的OnChange事件代码:
int i;
i=cbsy1->Items->IndexOf(cbsy1->Text);
if (i==-1) return;
Table1->IndexName=
Table1->IndexDefs->Items->Name;//排序即设置IndexName


//  sbsy1删除索引代码:
int i;
i=cbsy1->Items->IndexOf(cbsy1->Text);
if (i==-1) return;
Table1->Close();
try {Table1->IndexName=”";
  Table1->DeleteIndex(cbsy1->Text);
  cbsy1->Items->Delete(i);
  cbsy1->Text=”";}
catch(…) {;}//请注意处理错误的形式
Table1->Open();Table1->IndexDefs->Update();


//  sbsy3(添加)主索引代码:
if (Table1->TableType!=ttParadox)
{MessageBox(fxsda->Handle,”非Paradox库无主索引”,
  “提醒”,MB_OK||MB_ICONWARNING);return;}
if (cbsy2->Text==”")
{MessageBox(fxsda->Handle,”请选择字段名”,
  “提醒”,MB_OK||MB_ICONWARNING);return;}
int i=cbsy2->Items->IndexOf(cbsy2->Text);
if (i>0||i==-1) {MessageBox(fxsda->Handle,
  “主索引必需为第一个字段”,
  “提醒”,MB_OK||MB_ICONWARNING);return;}
Table1->Close();
TIndexOptions opt;opt.Clear();//注意主索引的opt
opt<AddIndex(cbsy2->Text,
  cbsy2->Text,opt);}//添加索引即调用AddIndex函数
catch(…) {;}
  Table1->Open();
  Table1->IndexDefs->Update();
  if (Table1->IndexDefs->Count>0)
  {cbsy1->Items->Clear();
   for (i=0;iIndexDefs->Count;i++)
   cbsy1->Items->Add(Table1->IndexDefs->
   Items->Fields);}//重新取索引字段


//  sbsy2添加索引代码:
int i;TIndexOptions opt;
i=cbsy2->Items->IndexOf(cbsy2->Text);
if (i==-1) return;
Table1->Close();opt.Clear();//注意一般索引的opt
try {if (Table1->TableType==ttFoxPro)
   opt<AddIndex(cbsy2->Text,
  cbsy2->Text,opt);}
catch(…) {;}
  Table1->Open();
  Table1->IndexDefs->Update();
  cbsy1->Items->Clear();
  for (i=0;iIndexDefs->Count;i++)
  cbsy1->Items->Add(Table1->IndexDefs->
  Items->Fields);//重新取得索引字段


留下一个回复