selcourse.cpp
来自「C++ Builder数据库开发经典案例解析 示例程序都是在C++ Build」· C++ 代码 · 共 200 行
CPP
200 行
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "selcourse.h"
#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfmSelCourse *fmSelCourse;
//---------------------------------------------------------------------------
__fastcall TfmSelCourse::TfmSelCourse(TComponent* Owner)
: TForm(Owner)
{
// 清空编辑框信息
edStuNum->Text = "";
edStuName->Text = "";
edStuClass->Text = "";
edCouPY->Text = "";
edCouName->Text = "";
edCouID->Text = "";
edCouSer->Text = "";
this->Height = 480;
}
//---------------------------------------------------------------------------
void __fastcall TfmSelCourse::FormClose(TObject *Sender,
TCloseAction &Action)
{
// 删除窗体并回收空间
Action = caFree;
}
//---------------------------------------------------------------------------
// 选择学生及已选定课程
void __fastcall TfmSelCourse::edStuNumKeyPress(TObject *Sender, char &Key)
{
// 回车,查询学生信息和已选课程
if(Key == 13)
{
if(edStuNum->Text.Length() == 0) // 学号为空,返回
return;
AnsiString szCon, sql;
// 按照编号查询
szCon += "学号='" + edStuNum->Text + "'";
sql = "select 姓名, 班级名称, 学籍编号 from ";
sql += "学生信息 as a, 班级信息 as b ";
sql += "where a.班级编号=b.班级编号 and " + szCon;
queQuery->SQL->Clear();
queQuery->SQL->Add(sql);
queQuery->Open();
if(queQuery->RecordCount <= 0)
{
Application->MessageBox("学号输入错误","提示",MB_OK);
return;
}
if(queQuery->FieldByName("学籍编号")->AsString != "1")
{
Application->MessageBox("不是在籍的学生!","提示",MB_OK);
edStuNum->Text = "";
return;
}
// 更新学生信息
edStuName->Text = queQuery->FieldByName("姓名")->AsString;
edStuClass->Text = queQuery->FieldByName("班级名称")->AsString;
// 更新选择的课程列表
sql = "select c.学号,a.课序号,b.课程名称,b.教师,b.开课系别,";
sql += "a.上课时间天,a.上课时间节,a.上课地点 from 选课表 as c, ";
sql += "课程表 as a, 课程信息 as b where a.课程编号=b.课程编号 ";
sql += "and c.课序号=a.课序号";
sql += " and " + szCon + " order by a.课序号";
queSelected->SQL->Clear();
queSelected->SQL->Add(sql);
queSelected->Open();
// 选择课程的拼音编辑框获取焦点
edCouPY->SetFocus();
}
}
//---------------------------------------------------------------------------
void __fastcall TfmSelCourse::edCouPYKeyPress(TObject *Sender, char &Key)
{
// 回车查询
if(Key==13)
btFindClick(NULL);
}
//---------------------------------------------------------------------------
// 查找课程
void __fastcall TfmSelCourse::btFindClick(TObject *Sender)
{
// 查询选择的课程
AnsiString szCon, sql;
if(edCouPY->Text.Length()>0)
szCon += "拼音码 like '" + edCouPY->Text + "%' and ";
if(edCouName->Text.Length()>0)
szCon += "课程名称 like '" + edCouName->Text + "%' and ";
if(edCouID->Text.Length()>0)
szCon += "a.课程编号 like '" + edCouID->Text + "%' and ";
if(edCouSer->Text.Length()>0)
szCon += "课序号 like '" + edCouSer->Text + "%' and ";
// 去除最后一个and字符
if(szCon.Length()==0)
return;
else
szCon = szCon.SubString(1,szCon.Length()-5);
sql = "select a.课序号,b.课程名称,b.教师,b.开课系别,a.上课时间天,";
sql += "a.上课时间节,a.上课地点, b.课程编号 from ";
sql += "课程表 as a, 课程信息 as b ";
sql += "where a.课程编号=b.课程编号";
sql += " and " + szCon + " order by 课序号";
queCourse->SQL->Clear();
queCourse->SQL->Add(sql);
queCourse->Open();
}
//---------------------------------------------------------------------------
// 选定选择的课程
void __fastcall TfmSelCourse::btSelectClick(TObject *Sender)
{
// 没有选择课程或学号
if(edStuNum->Text.Length() == 0 || DBGrid1->SelectedIndex == -1 )
{
Application->MessageBox("没有选择课程","提示",MB_OK);
return;
}
AnsiString sql;
// 检查该课程是否已经选定
sql = "select * from 选课表 where 学号='" + edStuNum->Text + "' and ";
sql += "课序号 in(select 课序号 from 课程表 where ";
sql += "课程编号='" ;
sql += queCourse->FieldByName("课程编号")->AsString + "')";
queQuery->SQL->Clear();
queQuery->SQL->Add(sql);
queQuery->Open();
// 已经选择相应课程
if(queQuery->RecordCount > 0)
{
Application->MessageBox("该课程已经选择","提示",MB_OK);
return;
}
// 检查时间是否冲突
sql = "select * from 选课表 as a, 课程表 as b where a.课序号=b.课序号";
sql += " and a.学号='" + edStuNum->Text + "' and ";
sql += " 100*b.上课时间天+b.上课时间节 in (select ";
sql += "100*上课时间天+上课时间节 from 课程表 where ";
sql += "课序号='" ;
sql += queCourse->FieldByName("课序号")->AsString + "')";
queQuery->SQL->Clear();
queQuery->SQL->Add(sql);
queQuery->Open();
// 已经选择相应课程
if(queQuery->RecordCount > 0)
{
Application->MessageBox
("该课序号时间和已选择的课程冲突,请选择其他的课序号",
"提示",MB_OK);
return;
}
// 选择条件ok,插入选课表
sql = "insert into 选课表(学号,课序号) values('";
sql += edStuNum->Text + "','";
sql += queCourse->FieldByName("课序号")->AsString + "')";
queQuery->SQL->Clear();
queQuery->SQL->Add(sql);
queQuery->ExecSQL();
queQuery->Close();
// 插入ok,更新已选课程列表
edStuNumKeyPress(NULL,13);
}
//---------------------------------------------------------------------------
// 删除课程
void __fastcall TfmSelCourse::btDeleteClick(TObject *Sender)
{
// 没有选择课程或学号
if(edStuNum->Text.Length() == 0 || DBGrid2->SelectedIndex == -1 )
{
Application->MessageBox("没有选择课程","提示",MB_OK);
return;
}
if(Application->MessageBox("确定要删除指定的已选课程吗?",
"提示",MB_YESNO) == IDNO)
return;
AnsiString sql;
// 删除
sql = "delete from 选课表 where 学号='" + edStuNum->Text + "' and ";
sql += "课序号 = '";
sql += queSelected->FieldByName("课序号")->AsString + "'";
queQuery->SQL->Clear();
queQuery->SQL->Add(sql);
queQuery->ExecSQL();
// 删除ok,更新已选课程列表
edStuNumKeyPress(NULL,13);
}
//---------------------------------------------------------------------------
// 调用主窗体的 课表查询 菜单 显示指定学号的课表
void __fastcall TfmSelCourse::btShowClick(TObject *Sender)
{
((TfmMain*) Application->MainForm)->mnuQueryCourseClick(NULL);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?