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 + -
显示快捷键?