📄 tikudlg.cpp
字号:
_RecordsetPtr m_pRecordset=DM->GetRecordset(query);
if(!m_pRecordset->adoEOF)
{
txtKeMu.SetWindowText(bstr_t(m_pRecordset->GetCollect(_variant_t((long)1))));
txtZhangJie.SetWindowText(bstr_t(m_pRecordset->GetCollect(_variant_t((long)2))));
txtTiXing.SetWindowText(bstr_t(m_pRecordset->GetCollect(_variant_t((long)3))));
txtNanDu.SetWindowText(bstr_t(m_pRecordset->GetCollect(_variant_t((long)4))));
txtShiTi.SetWindowText(bstr_t(m_pRecordset->GetCollect(_variant_t((long)5))));
txtDaAn.SetWindowText(bstr_t(m_pRecordset->GetCollect(_variant_t((long)6))));
txtFenZhi.SetWindowText(bstr_t(m_pRecordset->GetCollect(_variant_t((long)7))));
}
DM->CloseConnection();
}
else
{
MessageBox("连接出错!");
}
}
}
*pResult = 0;
}
void CTIKUDlg::OnClickTreeCtrl(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
// 如果用户单击当前选择的节点时,不会触发节点改变事件,若窗体上的试题信息与所选节点的试题信息不一致,则必须在此调用OnClickTreeCtrl事件以刷新窗体上的试题信息
CTIKUDlg::OnSelchangedTreeCtrl(pNMHDR, pResult);
//*pResult = 0;
}
void CTIKUDlg::OnbtnUp()
{
// TODO: Add your control notification handler code here
HTREEITEM hParent=treeCtrl.GetRootItem(); // 获得根节点
HTREEITEM hItem=treeCtrl.GetSelectedItem(); // 获得当前选择的节点
// 以下代码判断当前选择的节点是否试题节点,否则不能移动
if(hItem!=hParent) // 判断当前选择的节点是否根节点
{
if(treeCtrl.GetParentItem(hItem)!=hParent) // 判断当前选择的节点是否题型节点(根据其父节点是否根结点来判断)
{
HTREEITEM hPItem;
if(hPItem=treeCtrl.GetPrevSiblingItem(hItem)) // 获得当前选择节点的上一个兄弟节点,如果其存在
{
// 以下代码交换两个节点的文本值,以达到移动节点的效果
CString ss=treeCtrl.GetItemText(hItem);
treeCtrl.SetItemText(hItem,treeCtrl.GetItemText(hPItem));
treeCtrl.SetItemText(hPItem,ss);
treeCtrl.SelectItem(hPItem);
}
}
}
}
void CTIKUDlg::OnbtnDown()
{
// TODO: Add your control notification handler code here
HTREEITEM hParent=treeCtrl.GetRootItem(); // 获得根节点
HTREEITEM hItem=treeCtrl.GetSelectedItem(); // 获得当前选择的节点
// 以下代码判断当前选择的节点是否试题节点,否则不能移动
if(hItem!=hParent) // 判断当前选择的节点是否根节点
{
if(treeCtrl.GetParentItem(hItem)!=hParent) // 判断当前选择的节点是否题型节点(根据其父节点是否根结点来判断)
{
HTREEITEM hNItem;
if(hNItem=treeCtrl.GetNextSiblingItem(hItem)) // 获得当前选择节点的下一个兄弟节点,如果其存在
{
// 以下代码交换两个节点的文本值,以达到移动节点的效果
CString ss=treeCtrl.GetItemText(hItem);
treeCtrl.SetItemText(hItem,treeCtrl.GetItemText(hNItem));
treeCtrl.SetItemText(hNItem,ss);
treeCtrl.SelectItem(hNItem);
}
}
}
}
void CTIKUDlg::OnbtnMake()
{
CString ss="";
txtName.GetWindowText(ss);
if(ss=="")
{
MessageBox("请输入试卷名称!");
return;
}
txtTitle.GetWindowText(ss);
if(ss=="")
{
MessageBox("请输入试卷标题!");
return;
}
if(!CTIKUDlg::CheckHaveShiTi())
{
MessageBox("请选择试题!");
return;
}
DataModel *DM=new DataModel();
if(DM->OpenConnection())
{
if(m_ShiJuanID!="0")
{
DM->ExecuteSql("Delete From PaperMaster Where ID='"+m_ShiJuanID+"' Delete From PaperDetail Where PaperID='"+m_ShiJuanID+"'");
}
txtName.GetWindowText(ss);
_RecordsetPtr m_pRecordset=DM->GetRecordset("Select ID,Name,Title,XueQi,YongTu,Rem From PaperMaster Where Name='"+ss+"'");
if(!m_pRecordset->adoEOF)
{
MessageBox("该试题名称已经存在!");
return;
}
CString title="",xueqi="",yongtu="",rem="";
txtTitle.GetWindowText(title);
cbXueQi.GetWindowText(xueqi);
cbYongTu.GetWindowText(yongtu);
txtRem.GetWindowText(rem);
DM->ExecuteSql("Insert Into PaperMaster Values('"+ss+"','"+title+"','"+xueqi+"','"+yongtu+"','"+rem+"')");
CString ID=DM->GetReturnString("Select ID From PaperMaster Where Name='"+ss+"'");
HTREEITEM hParent=treeCtrl.GetRootItem(); // 获得根节点
HTREEITEM hItem=treeCtrl.GetChildItem(hParent); // 根结点的第一个子节点
HTREEITEM hChild;
int i=1;
CString s1="";
do
{
i=1;
hChild=treeCtrl.GetChildItem(hItem);
if(hChild)
{
do
{
s1.Format("%d",i++);
DM->ExecuteSql("Insert Into PaperDetail Values('"+ID+"','"+treeCtrl.GetItemText(hItem)+"','"+treeCtrl.GetItemText(hChild)+"','"+s1+"')");
}while(hChild=treeCtrl.GetNextSiblingItem(hChild));
}
}while(hItem=treeCtrl.GetNextSiblingItem(hItem));
DM->FillComboBox(&cbShiJuan,"select name from PaperMaster order by id","新试卷");
cbShiJuan.SetCurSel(cbShiJuan.GetCount()-1);
m_ShiJuanID=DM->GetReturnString("Select ID From PaperMaster Where Name='"+ss+"'");
DM->CloseConnection();
MessageBox("试卷保存成功!");
}
else
{
MessageBox("连接出错!");
}
}
void CTIKUDlg::OnPreviewQ()
{
if(!CTIKUDlg::CheckHaveShiTi())
{
MessageBox("请选择试题!");
return;
}
char* CHNum[16]={"一、","二、","三、","四、","五、","六、","七、","八、","九、","十、","十一、","十二、","十三、","十四、","十五、","十六、"};
CString ss="";
WordOffice wd;
wd.CreateDocuments();
wd.CreateDocument();
txtName.GetWindowText(ss);
wd.WriteText(ss); //名称
txtTitle.GetWindowText(ss);
wd.WriteNewLineText(ss);//标题
cbXueQi.GetWindowText(ss);
wd.WriteNewLineText(ss);//学期
cbYongTu.GetWindowText(ss);
wd.WriteText(" "+ss);//用途
txtRem.GetWindowText(ss);
wd.WriteNewLineText("说明:"+ss);//说明
HTREEITEM hParent=treeCtrl.GetRootItem(); // 获得根节点
HTREEITEM hItem=treeCtrl.GetChildItem(hParent); // 获得根节点的第一个子节点
HTREEITEM hChild;
int ii=0;
int jj=1;
DataModel *DM=new DataModel();
CString s2;
CString tablename;
CString query;
if(DM->OpenConnection())
{
do
{
if(hChild=treeCtrl.GetChildItem(hItem))
{
s2=treeCtrl.GetItemText(hItem);
tablename=DM->GetReturnString("select cast(tablename as nvarchar(100)) from tixing where cast([name] as nvarchar(100))='"+s2+"'");
wd.WriteNewLineText(bstr_t(CHNum[ii++])+s2);//题号
jj=1;
if(tablename=="choose")
{
do
{
query="select isnull(cast(content as nvarchar(2000)),''),'[ A ] '+isnull(cast(option1 as nvarchar(500)),''),'[ B ] '+isnull(cast(option2 as nvarchar(500)),''),'[ C ] '+isnull(cast(option3 as nvarchar(500)),''),'[ D ] '+isnull(cast(option4 as nvarchar(500)),''),isnull(score,0) from "+tablename+" where id='"+treeCtrl.GetItemText(hChild)+"'";
_RecordsetPtr m_pRecordset=DM->GetRecordset(query);
if(!m_pRecordset->adoEOF)
{
ss.Format("%d. ",jj++);
wd.WriteNewLineText(ss+(BSTR)bstr_t(m_pRecordset->GetCollect(_variant_t((long)0))));
wd.WriteNewLineText((BSTR)bstr_t(m_pRecordset->GetCollect(_variant_t((long)1))));
wd.WriteNewLineText((BSTR)bstr_t(m_pRecordset->GetCollect(_variant_t((long)2))));
wd.WriteNewLineText((BSTR)bstr_t(m_pRecordset->GetCollect(_variant_t((long)3))));
wd.WriteNewLineText((BSTR)bstr_t(m_pRecordset->GetCollect(_variant_t((long)4))));
}
}while(hChild=treeCtrl.GetNextSiblingItem(hChild));
}
else
{
do
{
query="select isnull(cast(content as nvarchar(2000)),''),isnull(score,0) from "+tablename+" where id='"+treeCtrl.GetItemText(hChild)+"'";
_RecordsetPtr m_pRecordset=DM->GetRecordset(query);
if(!m_pRecordset->adoEOF)
{
ss.Format("%d. ",jj++);
wd.WriteNewLineText(ss+(BSTR)bstr_t(m_pRecordset->GetCollect(_variant_t((long)0))));
}
}while(hChild=treeCtrl.GetNextSiblingItem(hChild));
}
}
}while(hItem=treeCtrl.GetNextSiblingItem(hItem));
DM->CloseConnection();
}
else
{
MessageBox("连接出错!");
}
wd.ShowApp(); //显示word
}
void CTIKUDlg::OnPreviewA()
{
if(!CTIKUDlg::CheckHaveShiTi())
{
MessageBox("请选择试题!");
return;
}
char* CHNum[16]={"一、","二、","三、","四、","五、","六、","七、","八、","九、","十、","十一、","十二、","十三、","十四、","十五、","十六、"};
CString ss="";
WordOffice wd;
wd.CreateDocuments();
wd.CreateDocument();
txtName.GetWindowText(ss);
wd.WriteText(ss+" -- 【 答 案 】"); //名称
txtTitle.GetWindowText(ss);
wd.WriteNewLineText(ss);//标题
cbXueQi.GetWindowText(ss);
wd.WriteNewLineText(ss);//学期
cbYongTu.GetWindowText(ss);
wd.WriteText(" "+ss);//用途
txtRem.GetWindowText(ss);
wd.WriteNewLineText("说明:"+ss);//说明
HTREEITEM hParent=treeCtrl.GetRootItem(); // 获得根节点
HTREEITEM hItem=treeCtrl.GetChildItem(hParent); // 获得根节点的第一个子节点
HTREEITEM hChild;
int ii=0;
int jj=1;
DataModel *DM=new DataModel();
CString s2;
CString tablename;
CString query;
if(DM->OpenConnection())
{
do
{
if(hChild=treeCtrl.GetChildItem(hItem))
{
s2=treeCtrl.GetItemText(hItem);
tablename=DM->GetReturnString("select cast(tablename as nvarchar(100)) from tixing where cast([name] as nvarchar(100))='"+s2+"'");
wd.WriteNewLineText(bstr_t(CHNum[ii++])+s2);//题号
jj=1;
do
{
query="select isnull(cast(answer as nvarchar(2000)),''),isnull(score,0) from "+tablename+" where id='"+treeCtrl.GetItemText(hChild)+"'";
_RecordsetPtr m_pRecordset=DM->GetRecordset(query);
if(!m_pRecordset->adoEOF)
{
ss.Format("%d. ",jj++);
wd.WriteNewLineText(ss+(BSTR)bstr_t(m_pRecordset->GetCollect(_variant_t((long)0))));
}
}while(hChild=treeCtrl.GetNextSiblingItem(hChild));
}
}while(hItem=treeCtrl.GetNextSiblingItem(hItem));
DM->CloseConnection();
}
else
{
MessageBox("连接出错!");
}
wd.ShowApp(); //显示word
}
bool CTIKUDlg::CheckHaveShiTi()
{
HTREEITEM hParent=treeCtrl.GetRootItem(); // 获得根节点
HTREEITEM hItem=treeCtrl.GetChildItem(hParent); // 根结点的第一个子节点
do
{
if(treeCtrl.GetChildItem(hItem))
{
return true;
}
}while(hItem=treeCtrl.GetNextSiblingItem(hItem));
return false;
}
void CTIKUDlg::OnSelchangecbShiJuan()
{
// TODO: Add your control notification handler code here
CTIKUDlg::InitTree();
CString ss="";
cbShiJuan.GetWindowText(ss);
if(ss=="新试卷")
{
m_ShiJuanID="0";
btnMake.SetWindowText("生成试卷");
btnDeleteShiJuan.EnableWindow(false);
txtName.SetWindowText("XXX考试");
txtTitle.SetWindowText("系别__________ 班级__________ 姓名__________ 学号__________ 科目__________");
cbXueQi.SetCurSel(0);
cbYongTu.SetCurSel(0);
txtRem.SetWindowText("山东科技大学内部使用");
return;
}
btnMake.SetWindowText("保存试卷");
btnDeleteShiJuan.EnableWindow(true);
DataModel *DM=new DataModel();
if(DM->OpenConnection())
{
m_ShiJuanID=DM->GetReturnString("Select ID From PaperMaster Where Name='"+ss+"'");
txtName.SetWindowText(ss);
txtTitle.SetWindowText(DM->GetReturnString("Select Title From PaperMaster Where Name='"+ss+"'"));
cbXueQi.SetWindowText(DM->GetReturnString("Select XueQi From PaperMaster Where Name='"+ss+"'"));
cbYongTu.SetWindowText(DM->GetReturnString("Select YongTu From PaperMaster Where Name='"+ss+"'"));
txtRem.SetWindowText(DM->GetReturnString("Select Rem From PaperMaster Where Name='"+ss+"'"));
_RecordsetPtr m_pRecordset;
CString sj="",tx="";
HTREEITEM hParent=treeCtrl.GetRootItem(); // 获得根节点
HTREEITEM hItem=treeCtrl.GetChildItem(hParent); // 根结点的第一个子节点
do
{
cbShiJuan.GetWindowText(sj);
tx=treeCtrl.GetItemText(hItem);
m_pRecordset=DM->GetRecordset("Select TiHao From PaperMaster a inner join PaperDetail b On a.ID=b.PaperID Where Name='"+sj+"' and TiXing='"+tx+"' order by XH");
while(!m_pRecordset->adoEOF)//遍历数据集中的行
{
treeCtrl.InsertItem(bstr_t(m_pRecordset->GetCollect(_variant_t((long)0))),hItem);
m_pRecordset->MoveNext();//下一行
}
}while(hItem=treeCtrl.GetNextSiblingItem(hItem));
DM->CloseConnection();
}
else
{
MessageBox("连接出错!");
}
}
void CTIKUDlg::InitTree()
{
treeCtrl.DeleteAllItems();
DWORD dwStyles=GetWindowLong(treeCtrl.m_hWnd,GWL_STYLE);//获取树控制原风格
dwStyles|=TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;
SetWindowLong(treeCtrl.m_hWnd,GWL_STYLE,dwStyles);//设置风格
HTREEITEM hRoot,hCur;//树控制项目句柄
TV_INSERTSTRUCT TCItem;//插入数据项数据结构
TCItem.hParent=TVI_ROOT;//增加根项
TCItem.hInsertAfter=TVI_LAST;//在最后项之后
TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//设屏蔽
TCItem.item.pszText="已选试题";
TCItem.item.lParam=0;//序号
hRoot=treeCtrl.InsertItem(&TCItem);//返回根项句柄
// 根据题型下拉列表框中的内容向树中添加题型节点
CString ss="";
for(int i=0;i<cbTiXing.GetCount();i++)
{
TCItem.hParent=hRoot;
cbTiXing.GetLBText(i,ss);
TCItem.item.pszText=ss.GetBuffer(ss.GetLength()+1);
TCItem.item.lParam=i+1;//子项序号
hCur=treeCtrl.InsertItem(&TCItem);
treeCtrl.Expand(hCur,TVE_EXPAND);//展开树
}
treeCtrl.Expand(hRoot,TVE_EXPAND);//展开上一级树
CTIKUDlg::ReSetCurTreeItem();
}
void CTIKUDlg::ReSetCurTreeItem()
{
// 以下代码用以确定当前所选的题型节点(树),以便在点击“添加试题”是向此题型节点中添加试题节点
HTREEITEM hParent=treeCtrl.GetRootItem();
HTREEITEM hItem=treeCtrl.GetChildItem(hParent);
CString ss="";
cbTiXing.GetWindowText(ss);
do
{
if(treeCtrl.GetItemText(hItem)==ss) // 若名称相同退出循环
{
treeCtrl.SelectItem(hItem);
m_curTreeItem=hItem; // m_curTreeItem是当前的题型节点
break;
}
}while(hItem=treeCtrl.GetNextSiblingItem(hItem)); // 判断是否还有下一个节点
}
void CTIKUDlg::OnbtnDeleteShiJuan()
{
// TODO: Add your control notification handler code here
if(MessageBox("您是否要删除此试卷?","询问框", MB_ICONQUESTION|MB_YESNO)==IDYES)
{
DataModel *DM=new DataModel();
if(DM->OpenConnection())
{
if(m_ShiJuanID!="0")
{
DM->ExecuteSql("Delete From PaperMaster Where ID='"+m_ShiJuanID+"' Delete From PaperDetail Where PaperID='"+m_ShiJuanID+"'");
}
DM->FillComboBox(&cbShiJuan,"select name from PaperMaster order by id","新试卷");
cbShiJuan.SetCurSel(0);
CTIKUDlg::OnSelchangecbShiJuan();
DM->CloseConnection();
}
else
{
MessageBox("连接出错!");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -