⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sltcourse.cpp

📁 学生选课管理信息系统原码
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "SltCourse.h"
#include "DataUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TSltCourseForm *SltCourseForm;
//---------------------------------------------------------------------------
__fastcall TSltCourseForm::TSltCourseForm(TComponent* Owner)
        : TForm(Owner)
{
  m_nTotalScore = 0 ;
  m_nSelectableCourse = 0 ;
  m_strStudentNo = "" ;
  m_strName = "" ;
  m_sGradeNo = 0 ;            
  m_strTerm = "" ;
}
//---------------------------------------------------------------------------
void __fastcall TSltCourseForm::FormCreate(TObject *Sender)
{
  AllCourseGrid->Cells[0][0] = "课程名称" ;
  AllCourseGrid->Cells[1][0] = "课程学分" ;
}
//---------------------------------------------------------------------------
void __fastcall TSltCourseForm::FormShow(TObject *Sender)
{
  //首先构造查询Course.db数据表中的SQL语句
  AnsiString queryString = "Select * from Course where Term=\"" ;
  queryString += m_strTerm ;
  queryString += "\"" ;
  DataMod->CourseQuery->Active = false ;
  DataMod->CourseQuery->SQL->Clear() ;
  DataMod->CourseQuery->SQL->Add(queryString) ;
  //执行查询
  DataMod->CourseQuery->ExecSQL() ;
  DataMod->CourseQuery->Active = true ;
  for(int i=0;i<DataMod->CourseQuery->RecordCount; i++)
  {
    //得到课程的名称和学分
    AnsiString CourseName =
      DataMod->CourseQuery->FieldValues["CourseName"] ;
    int nScore = DataMod->CourseQuery->FieldValues["Score"] ;
    //然后构造查询成绩表的SQL语句
    AnsiString otherQuery = "Select * from Grade " ;
    otherQuery += " where StudentNo =\"" ;
    otherQuery += m_strStudentNo ;
    otherQuery += "\"" ;
    otherQuery += " and CourseNo= \"" ;
    otherQuery += DataMod->CourseQuery->FieldValues["CourseNo"] ;
    otherQuery += "\" and Term= \"" ;
    otherQuery += m_strTerm ;
    otherQuery += "\"" ;

    try
    {
      //执行查询
      DataMod->GradeQuery->SQL->Clear() ;
      DataMod->GradeQuery->SQL->Add(otherQuery) ;
      DataMod->GradeQuery->ExecSQL() ;
      DataMod->GradeQuery->Active = true ;
    }
    catch(EDBEngineError &E)      
    {
      MessageBox(NULL,"数据还没能创建,请与本系教务联系!","错误",MB_OK) ;
      //将当前指针移动到下一个记录
      DataMod->CourseQuery->Next() ;
      continue ;
    }
    if(DataMod->GradeQuery->RecordCount )
    {
      AnsiString strGrade=DataMod->GradeQuery->FieldByName("Score")->AsString ;
      if(strGrade != "")
      {
        //如果已经有成绩,表示该课程已经修完,将该课程的学分加入到总学分中
        m_nTotalScore += nScore ;
      }
      else
        //如果没有成绩,表示该课程已被选择
        SelectedCourseList->Items->Add(CourseName) ;
    }
    else
    {
      //如果没有在成绩表中找到该学生的记录,则有两种可能
      //一种是该成绩表中相应记录已经有成绩,表示不可选择
      //另一种是表中只有学号,而无成绩,表示该课程可选
      otherQuery = "Select * from Grade where Term=\"" ;
      otherQuery += m_strTerm ;
      otherQuery += "\"" ;
      DataMod->GradeQuery->Active = false ;
      DataMod->GradeQuery->SQL->Clear() ;
      DataMod->GradeQuery->SQL->Add(otherQuery) ;
      DataMod->GradeQuery->ExecSQL() ;
      DataMod->GradeQuery->Active = true ;

      m_nSelectableCourse ++ ;
      if(AllCourseGrid->RowCount < m_nSelectableCourse + 1)
        AllCourseGrid->RowCount = m_nSelectableCourse +1 ;
      //显示可选课程的名称和学分
      AllCourseGrid->Cells[0][m_nSelectableCourse] = CourseName ;
      AllCourseGrid->Cells[1][m_nSelectableCourse] = IntToStr(nScore) ;
    }
    //将当前指针移动到下一个记录
    DataMod->CourseQuery->Next() ;
  }
  //显示学号,姓名与总学分
  StuNoEdt->Text = m_strStudentNo ;
  NameEdt->Text = m_strName ;
  ScoreEdt->Text = IntToStr(m_nTotalScore) ;
}
//---------------------------------------------------------------------------

void __fastcall TSltCourseForm::SelectBtnClick(TObject *Sender)
{
  AnsiString strCourseName = AllCourseGrid->Cells[0][AllCourseGrid->Row] ;
  if(AllCourseGrid->Row >= 1)
  {
    //若AllCourseGrid中有记录,则可以进行选课操作
    for(int i=AllCourseGrid->Row; i<AllCourseGrid->RowCount; i++)
    {
      AllCourseGrid->Cells[0][i] =  AllCourseGrid->Cells[0][i+1] ;
      AllCourseGrid->Cells[1][i] =  AllCourseGrid->Cells[1][i+1] ;
    }
    AllCourseGrid->RowCount -- ;
    SelectedCourseList->Items->Add(strCourseName) ;

    //根据课程名称,查询到相应地课程记录
    AnsiString queryString = "Select * from Course where CourseName=\"" ;
    queryString += strCourseName ;
    queryString += "\"" ;
    DataMod->CourseQuery->Active = false ;
    DataMod->CourseQuery->SQL->Clear() ;
    DataMod->CourseQuery->SQL->Add(queryString) ;
    DataMod->CourseQuery->ExecSQL() ;
    DataMod->CourseQuery->Active = true ;
    AnsiString strCourseNo = DataMod->CourseQuery->FieldValues["CourseNo"] ;
    AnsiString strCourseKind = DataMod->CourseQuery->FieldValues["CourseKind"] ;

    //查询Grade.db表中是否存在数据记录
    AnsiString queryString2 = "Select * from Grade " ;
    DataMod->GradeQuery->Active = false ;
    DataMod->GradeQuery->SQL->Clear() ;
    DataMod->GradeQuery->SQL->Add(queryString2) ;
    DataMod->GradeQuery->ExecSQL() ;
    DataMod->GradeQuery->Active = true ;
    int TableNum2 = DataMod->GradeQuery->RecordCount ;

    if(TableNum2 ==0)
    {
      //若是空的,则把第一条记录的GradeNo赋值为1
      //把相应地选课数据记录插入到Grade表中
      AnsiString otherQuery = "INSERT INTO Grade(GradeNo,StudentNo,CourseNo,";
      otherQuery += "CourseKind,Term,PlanCourse) VALUES (\"1\",\"";
      otherQuery += m_strStudentNo ;
      otherQuery += "\",\"" ;
      otherQuery += strCourseNo ;
      otherQuery += "\",\"" ;
      otherQuery += strCourseKind ;
      otherQuery += "\",\"" ;
      otherQuery += m_strTerm ;
      //默认PlanCourse字段的值为“否”
      otherQuery += "\",\"否\")" ;
      DataMod->GradeQuery->Active = false ;
      DataMod->GradeQuery->SQL->Clear() ;
      DataMod->GradeQuery->SQL->Add(otherQuery) ;
      DataMod->GradeQuery->ExecSQL() ;
    }
    else
    {
      //若不是空的,则做以下操作
      //选出Grade表中GradeNo字段的最大值
      AnsiString queryStringNo = "Select MAX(GradeNo) as MaxGradeNo from Grade " ;
      DataMod->GradeQuery->Active = false ;
      DataMod->GradeQuery->SQL->Clear() ;
      DataMod->GradeQuery->SQL->Add(queryStringNo) ;
      DataMod->GradeQuery->ExecSQL() ;
      DataMod->GradeQuery->Active = true ;
      int strGradeNo = DataMod->GradeQuery->FieldByName("MaxGradeNo")->AsInteger ;

      //把相应地选课数据记录插入到Grade表中
      AnsiString otherQuery = "INSERT INTO Grade(GradeNo,StudentNo,CourseNo,CourseKind,Term,PlanCourse) VALUES (\"";
      //把选出的GradeNo字段的最大值+1,作为下一条记录的记录号
      otherQuery += strGradeNo+1 ;
      otherQuery += "\",\"" ;
      otherQuery += m_strStudentNo ;
      otherQuery += "\",\"" ;
      otherQuery += strCourseNo ;
      otherQuery += "\",\"" ;
      otherQuery += strCourseKind ;
      otherQuery += "\",\"" ;
      otherQuery += m_strTerm ;
      //默认PlanCourse字段的值为“否”
      otherQuery += "\",\"否\")" ;
      DataMod->GradeQuery->Active = false ;
      DataMod->GradeQuery->SQL->Clear() ;
      DataMod->GradeQuery->SQL->Add(otherQuery) ;
      DataMod->GradeQuery->ExecSQL() ;
    }
  }
}
//---------------------------------------------------------------------------

void __fastcall TSltCourseForm::UnSelectBtnClick(TObject *Sender)
{
  int nSelectedIndex = SelectedCourseList->ItemIndex ;
  if(nSelectedIndex < 0)
    //表示没有选择某一课程,因此直接退出
    return ;
  //得到课程名称
  AnsiString strCourseName =
    SelectedCourseList->Items->Strings[nSelectedIndex] ;
  //由课程名称查询Course.db表,得到该课程的学分和课程号
  AnsiString queryString = "Select * from Course where CourseName =\"" ;
  queryString += strCourseName ;
  queryString += "\"" ;
  DataMod->CourseQuery->Active = false ;
  DataMod->CourseQuery->SQL->Clear() ;
  DataMod->CourseQuery->SQL->Add(queryString) ;
  DataMod->CourseQuery->ExecSQL() ;
  DataMod->CourseQuery->Active = true ;
  int nScore = DataMod->CourseQuery->FieldValues["Score"] ;
  AnsiString strCourseNo = DataMod->CourseQuery->FieldValues["CourseNo"] ;
  DataMod->CourseQuery->Close() ;
  //判断所选课程是否为计划课程
  AnsiString otherQueryOK = "Select * from Grade where Term=\"" ;
  otherQueryOK  += m_strTerm ;
  otherQueryOK  += "\" and CourseNo=\"" ;
  otherQueryOK  += strCourseNo ;
  otherQueryOK  += "\" and StudentNo =\"" ;
  otherQueryOK  += m_strStudentNo ;
  otherQueryOK  += "\"" ;
  DataMod->GradeQuery->Active = false ;
  DataMod->GradeQuery->SQL->Clear() ;
  DataMod->GradeQuery->SQL->Add(otherQueryOK) ;
  DataMod->GradeQuery->ExecSQL() ;
  DataMod->GradeQuery->Active = true ;

  if(DataMod->GradeQuery->FieldByName("PlanCourse")->AsString == "是")
    //若是计划课程,则给已警告,结束对此记录的操作
    MessageBox(NULL,"所选课程为计划课程,不能进行退课!","警告",MB_OK) ;
  else
  {
  //若不是计划课程,则对Grade.db表中对应地记录进行删除
  SelectedCourseList->Items->Delete(nSelectedIndex) ;

  AllCourseGrid->RowCount ++ ;
  AllCourseGrid->Cells[0][AllCourseGrid->RowCount-1] = strCourseName ;
  AllCourseGrid->Cells[1][AllCourseGrid->RowCount-1] = IntToStr(nScore) ;

  AnsiString otherQuery = "DELETE FROM Grade WHERE CourseNo =\"" ;
  otherQuery += strCourseNo ;
  otherQuery += "\"" ;
  otherQuery += " and StudentNo = \"" ;
  otherQuery += m_strStudentNo ;
  otherQuery += "\"" ;
  otherQuery += " and Term = \"" ;
  otherQuery += m_strTerm ;
  otherQuery += "\"" ;
  DataMod->GradeQuery->Active = false ;
  DataMod->GradeQuery->SQL->Clear() ;
  DataMod->GradeQuery->SQL->Add(otherQuery) ;
  DataMod->GradeQuery->ExecSQL() ;
  }
}
//---------------------------------------------------------------------------

void __fastcall TSltCourseForm::OKBtnClick(TObject *Sender)
{
  Close() ;        
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -