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

📄 mystudentdoc.cpp

📁 自编的一个实用的学生成绩处理管理系统。支持.dbf文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	//-----------------------------------------
	if(m_setdialog.DoModal()==IDOK)
	{
		m_endterm_coef=m_setdialog.m_endterm_coef;	
		m_normal_coef=m_setdialog.m_normal_coef;
		m_midterm_coef=m_setdialog.m_midterm_coef;
		//----------------------------------------
		m_myStudentSet.m_dsn_name=m_setdialog.m_dsn_name;
		m_myStudentSet.m_table_name=m_setdialog.m_table_name;
		//----------------------------------
		if(m_myStudentSet.m_pDatabase==NULL&&
			m_myStudentSet.m_dsn_name==_T(""))
		{
			return;//数据库没有加载
		}
		else if(m_myStudentSet.m_pDatabase!=NULL&&
			m_myStudentSet.m_dsn_name!=_T(""))
		{
			m_myStudentSet.Close();
			m_myStudentSet.m_pDatabase->Close();
			m_myStudentSet.m_pDatabase->Open(m_myStudentSet.GetDefaultConnect());
			m_myStudentSet.Open();//重新打开记录集对象
			m_myStudentSet.MoveFirst();//记录指针定位第一条记录
		}
		else if(m_myStudentSet.m_pDatabase==NULL&&
			m_myStudentSet.m_dsn_name!=_T(""))
		{
			//m_myStudentSet.Close();
			//m_myStudentSet.m_pDatabase->Close();
			m_myStudentSet.m_pDatabase=new CDatabase();
			m_myStudentSet.m_pDatabase->Open(m_myStudentSet.GetDefaultConnect());
			m_myStudentSet.Open();//重新打开记录集对象
		} 
		//-----------------------------
		//调用主视图中初始化函数来更新所有的信息。
		((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_mainview->OnInitialUpdate();
	}
}

void CMyStudentDoc::ResetClassInfo()
{
	m_recordcount=0;				//复位总记录数
	for(int i=0;i<m_classanalysis.GetSize();i++)
	{
		delete m_classanalysis.GetAt(i);
	}
	m_classanalysis.RemoveAll();
}
//====================================================
//----------重新计算最终成绩并更新显示----------------
void CMyStudentDoc::OnEditRecal() 
{
	// TODO: Add your command handler code here
	FigureOutFinal();
	//调用主视图中初始化函数来更新所有的信息。
	((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_mainview->OnInitialUpdate();
}

void CMyStudentDoc::OnFileOpendatabase() 
{
	// TODO: Add your command handler code here
	CFileDialog dlgFile(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		"Visual Foxpro Files(*.dbf)|*.dbf|所有文件(*.*)|*.*||");
	if(dlgFile.DoModal()==IDOK)
	{
		m_database=dlgFile.GetFileTitle();
		m_database_path=dlgFile.GetPathName();
		m_database_path.Replace("\\"+dlgFile.GetFileName(),"");
		SetDataBase(m_database,m_database_path);
		m_myStudentSet.m_dsn_name=m_database;
		m_myStudentSet.m_table_name=m_database;
		OpenDataBaseFile();
		m_strTitle=m_database;//文档名字
		AfxGetMainWnd()->SetWindowText(m_strTitle);
	}	
	//保存当然数据状况
	m_setdialog.m_dsn_name=m_setdialog.m_table_name=m_database;
}

//==================================
//设置ODBC数据源
void CMyStudentDoc::SetDataBase(CString &dsn_name,CString &dsn_path)
{
	CString str,value;
	HKEY hkey;
	CRegistry reg(HKEY_LOCAL_MACHINE);
	hkey=reg.m_hKey;

	str=_T("SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources");
	reg.Open(str);
	reg.Write(dsn_name,"Microsoft Visual FoxPro Driver");
	reg.Close();
	
	str=_T("SOFTWARE\\ODBC\\ODBC.INI\\")+dsn_name;
	reg.m_hKey=hkey;
	reg.CreateKey(str);
	reg.Open(str);
	reg.Write("Driver","C:\\WINDOWS\\System32\\vfpodbc.dll");
	reg.Write("Description",dsn_name);
	reg.Write("SourceDB",dsn_path);
	reg.Write("Description",dsn_name);
	reg.Write("SourceType","DBF");
	reg.Write("BackgroundFetch","Yes");
	reg.Write("Exclusive","No");
	reg.Write("Collate","Machine");
	reg.Write("SetNoCountOn","No");
	reg.Close();
	//===============
	//AfxMessageBox("成功注册系统数据源:"+dsn_name);
}

//============================
void CMyStudentDoc::OpenDataBaseFile()
{
	if(m_myStudentSet.m_pDatabase!=NULL)m_loaded=1;
	if(m_loaded==1)
	{
		//----------------------------------
		m_myStudentSet.Close();
		m_myStudentSet.m_pDatabase->Close();
	}
	if(m_myStudentSet.m_pDatabase==NULL)
		m_myStudentSet.m_pDatabase=new CDatabase();
	m_myStudentSet.m_pDatabase->Open(m_myStudentSet.GetDefaultConnect());
	m_myStudentSet.Open();//重新打开记录集对象
	m_myStudentSet.MoveFirst();//记录指针定位第一条记录
		//-----------------------------
		//调用主视图中初始化函数来更新所有的信息。
		m_loaded=1;
		((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_mainview->OnInitialUpdate();
}

void CMyStudentDoc::Serialize(CArchive& ar) 
{
	if (ar.IsStoring())
	{	// storing code
		if(m_loaded==1)OutputHTML(ar);		
	}
	else
	{	// loading code
	}
}

void CMyStudentDoc::OutputHTML(CArchive& ar)
{
	int i,j;
	char tempstr[15];
	CString field[9]={"序号","学号","姓名","班级","平时","期中","期末","最终","备注"};
	//http header
	ar.WriteString("<html>\r\n");
	ar.WriteString("<head>\r\n");
	ar.WriteString("<title>");
	ar.WriteString(m_database+"->学生成绩表");
	ar.WriteString("</title>\r\n");
	ar.WriteString("</head>\r\n\r\n");
	//http body
	ar.WriteString("<body>\r\n");
	ar.WriteString("<br>\r\n");
	ar.WriteString("<center>");
	ar.WriteString("石油大学(北京)"+m_database+"成绩表");
	ar.WriteString("</center>\r\n");
	ar.WriteString("<br>");
	ar.WriteString("<br>");
	ar.WriteString("<div align='center'>\r\n");
	//begin table_one============================
	ar.WriteString("<table border='1' width='760' cellspacing='0' cellpadding='0'>\r\n");
	ar.WriteString("<tr>\r\n");
	for(i=0;i<9;i++)
	{
		ar.WriteString("<td  align='center'>");
		ar.WriteString(field[i]);
		ar.WriteString("</td>\r\n");
	}
	ar.WriteString("</tr>\r\n");
	m_myStudentSet.MoveFirst();//复位指针
	for(i=0;i<m_recordcount;i++)
	{
		ar.WriteString("<tr>\r\n");
		sprintf(tempstr,"%d",m_myStudentSet.m_idnum);
		field[0]=tempstr;
		field[1]=m_myStudentSet.m_stunum;
		field[2]=m_myStudentSet.m_name;
		field[3]=m_myStudentSet.m_class;
		sprintf(tempstr,"%d",m_myStudentSet.m_normal);
		field[4]=tempstr;
		sprintf(tempstr,"%d",m_myStudentSet.m_midterm);
		field[5]=tempstr;
		sprintf(tempstr,"%d",m_myStudentSet.m_endterm);
		field[6]=tempstr;
		sprintf(tempstr,"%d",m_myStudentSet.m_final);
		field[7]=tempstr;
		field[8]=m_myStudentSet.m_note;
		for(j=0;j<9;j++)
		{
			ar.WriteString("<td align='center'>");
			ar.WriteString(field[j]);	
			ar.WriteString("</td>\r\n");
		}
		m_myStudentSet.MoveNext();
		ar.WriteString("</tr>\r\n");
	}
	m_myStudentSet.MoveFirst();//复位指针
	((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_mainview->OnInitialUpdate();
	ar.WriteString("</table>\r\n");
	ar.WriteString("</div>\r\n");
	//end table_one=============================
	ar.WriteString("<br>\r\n");
	ar.WriteString("<br>\r\n");
	ar.WriteString("<center>\r\n");
	ar.WriteString("石油大学(北京)"+m_database+"成绩分析表");
	ar.WriteString("</center>\r\n");
	ar.WriteString("<br>\r\n");
	CString field_2[10]={"班级名称","有效人数","50分以下","50-59分","60-69分","70-79分","80-89分","90-100分","平均成绩","及格率(>60)"};
	//begin table_two++++++++++++++++++++++++++
	ar.WriteString("<div align='center'>\r\n");
	ar.WriteString("<table border='1' width='760' cellspacing='0' cellpadding='0'>\r\n");
	ar.WriteString("<tr>\r\n");
	for(i=0;i<10;i++)
	{
		ar.WriteString("<td  align='center'>");
		ar.WriteString(field_2[i]);
		ar.WriteString("</td>\r\n");
	}
	CClassAnalysis* currentclass;
	for(i=0;i<m_classanalysis.GetSize();i++)
	{
		ar.WriteString("<tr>\r\n");
		currentclass=(CClassAnalysis*)(m_classanalysis.GetAt(i));
		field_2[0]=currentclass->m_classname;
		sprintf(tempstr,"%d",currentclass->m_classnum);
		field_2[1]=tempstr;
		sprintf(tempstr,"%d",currentclass->m_50);
		field_2[2]=tempstr;
		sprintf(tempstr,"%d",currentclass->m_50_59);
		field_2[3]=tempstr;
		sprintf(tempstr,"%d",currentclass->m_60_69);
		field_2[4]=tempstr;
		sprintf(tempstr,"%d",currentclass->m_70_79);
		field_2[5]=tempstr;
		sprintf(tempstr,"%d",currentclass->m_80_89);
		field_2[6]=tempstr;
		sprintf(tempstr,"%d",currentclass->m_90_100);
		field_2[7]=tempstr;
		sprintf(tempstr,"%7.4f",currentclass->m_average);
		field_2[8]=tempstr;
		sprintf(tempstr,"%7.4f",currentclass->m_passrate);
		field_2[9]=tempstr;
		for(j=0;j<10;j++)
		{
			ar.WriteString("<td align='center'>");
			ar.WriteString(field_2[j]);
			ar.WriteString("</td>\r\n");
		}
		ar.WriteString("</tr>\r\n");
	}
	ar.WriteString("</tr>\r\n");
	ar.WriteString("</table>\r\n");
	ar.WriteString("</div>\r\n");
	//end table_two==============================
	ar.WriteString("\r\n");
	ar.WriteString("\r\n");
	ar.WriteString("</body>\r\n");

	ar.WriteString("</html>\r\n");
	//http  tailor
}

void CMyStudentDoc::OnFileSave() 
{
	if(m_loaded==1)
	{
		CString strFile;
		strFile=m_database_path+"\\"+m_database+".htm";
		CDocument::DoSave(strFile);
		ShellExecute(NULL, NULL, strFile, NULL, NULL, NULL); 
	}
	// TODO: Add your command handler code here
}

⌨️ 快捷键说明

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