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

📄 tikudlg.cpp

📁 手动生成试题系统,还原SQL数据库名称为TestPaper
💻 CPP
📖 第 1 页 / 共 2 页
字号:

				_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 + -