学生考试管理系统ADO版
2008-04-19 20:27:52 来源:WEB开发网2.关于考试过程的编码
主要是依靠几个类来实现:
* CExam 考试类 用于考试的信息登记
* CExamClass 考试班级类
* CExamStudent 考试学生类
* CExamSubject 考试科目类
他们都聚合了一个数据集TADOStorage,然后通过数据集完成考试信息的记录,计算:
class CExam : public CObject
{
public:
CExam();
virtual ~CExam();
CString m_No; //考试编号
COleDateTime m_Date; //考试日期
CString m_TermNo; //学期编号
CStringList& GetTerms();
CStringList* GetNos();
protected:
CADOStorage m_Storage;//数据库连接
CString m_TblName; //表名称
private:
CStringList m_TermList;//学期列表
CStringList m_NoList; //编号列表
public:
void ClearTermList(void);
void ClearNoList(void);
void GetExamByNo(CString No);//获取考试信息
bool IsNoExisted(CString No);//编号是否存在
void AddExam();
void DeleteExamByNo(CString No);
};
(1)、在文档类中申明CExam m_Exam.添加记录
void CExamView::OnBnClickedButton2()
{
CEdit* pEdit=(CEdit*) this->GetDlgItem(IDC_EDIT1);
CString ExamNo;
pEdit->GetWindowText(ExamNo);
CExamDoc* pDoc=this->GetDocument();
if(pDoc->m_Exam.IsNoExisted(ExamNo))
{
AfxMessageBox("不能添加重复记录!");
return;
}
else
{
//添加记录
pDoc->m_Exam.m_No=ExamNo;
CDateTimeCtrl* pPicker=
(CDateTimeCtrl*)this->GetDlgItem(IDC_DATETIMEPICKER1);
pPicker->GetTime(pDoc->m_Exam.m_Date);
CComboBox* pComb=(CComboBox*)this->GetDlgItem(IDC_COMBO1);
pComb->GetLBText(pComb->GetCurSel(),pDoc->m_Exam.m_TermNo);
pDoc->m_Exam.AddExam();
}
}
(2)、然后看: pDoc->m_Exam.AddExam();
void CExam::AddExam()
{
CString FldList,ValueList;
FldList="考试编号,考试日期,学期编号";
ValueList="''''"+this->m_No+"'''',''''"+this->m_Date.Format()+"'''',''''"+this->m_TermNo+"''''";
this->m_Storage.ExecInsertSql(this->m_TblName,FldList,ValueList);
}
这是一个与数据库交互的过程。
其它类的处理过程类似,就是对数据库表的操作用类来封装,去执行。当然怎么做可能有一些不妥之处,如一个类包含一个数据集,可能占有存储空间比较大,对象如果进行拷贝复制的话 ,有可能占有系统的存储空间;所以有的人建议把对数据库的操作让一个代理类去实现,当然各有优缺点,这也是对OR Map争论比较多的一个问题,感觉java Bean实体在这方面做的更好一些。我编程的时间也不算太长,考虑上的深度不够和自己的水平有限,当然还有很多不足之处,甚至BUGS,当然,希望大家多提出批评意见。
更多精彩
赞助商链接