📄 sltcourse.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 + -