📄 mystudentdoc.cpp
字号:
//-----------------------------------------
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 + -