ScoreClassStatDlg.cpp
上传用户:rs600066
上传日期:2017-10-16
资源大小:4788k
文件大小:6k
源码类别:

数据库系统

开发平台:

Visual C++

  1. // ScoreClassStatDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "school.h"
  5. #include "ScoreClassStatDlg.h"
  6. #include "classset.h"
  7. #include "examtimeset.h"
  8. #include "examtypeset.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CScoreClassStatDlg dialog
  16. CScoreClassStatDlg::CScoreClassStatDlg(CWnd* pParent /*=NULL*/)
  17. : CDialog(CScoreClassStatDlg::IDD, pParent)
  18. {
  19. //{{AFX_DATA_INIT(CScoreClassStatDlg)
  20. m_strClass = _T("");
  21. m_strTime = _T("");
  22. m_strType = _T("");
  23. //}}AFX_DATA_INIT
  24. }
  25. void CScoreClassStatDlg::DoDataExchange(CDataExchange* pDX)
  26. {
  27. CDialog::DoDataExchange(pDX);
  28. //{{AFX_DATA_MAP(CScoreClassStatDlg)
  29. DDX_Control(pDX, IDC_LIST2, m_ctrList);
  30. DDX_Control(pDX, IDC_COMBO_TYPE, m_ctrType);
  31. DDX_Control(pDX, IDC_COMBO_TIME, m_ctrTime);
  32. DDX_Control(pDX, IDC_COMBO_CLASS, m_ctrClass);
  33. DDX_CBString(pDX, IDC_COMBO_CLASS, m_strClass);
  34. DDX_CBString(pDX, IDC_COMBO_TIME, m_strTime);
  35. DDX_CBString(pDX, IDC_COMBO_TYPE, m_strType);
  36. //}}AFX_DATA_MAP
  37. }
  38. BEGIN_MESSAGE_MAP(CScoreClassStatDlg, CDialog)
  39. //{{AFX_MSG_MAP(CScoreClassStatDlg)
  40. ON_BN_CLICKED(IDC_BUTTON_STAT, OnButtonStat)
  41. //}}AFX_MSG_MAP
  42. END_MESSAGE_MAP()
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CScoreClassStatDlg message handlers
  45. BOOL CScoreClassStatDlg::OnInitDialog() 
  46. {
  47. CDialog::OnInitDialog();
  48. CString strSQL;
  49. //初始化班级
  50. CClassSet ClassSet ;
  51. strSQL="select * from class";
  52. if(!ClassSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
  53. {
  54. AfxMessageBox("打开数据库失败!");
  55. }
  56. while(!ClassSet.IsEOF())
  57. {
  58. m_ctrClass.AddString(ClassSet.m_code);
  59. ClassSet.MoveNext();
  60. }
  61. ClassSet.Close();
  62. //初始化时间段
  63. CExamtimeSet TimeSet ;
  64. strSQL="select * from examtime";
  65. if(!TimeSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
  66. {
  67. AfxMessageBox("打开数据库失败!");
  68. }
  69. while(!TimeSet.IsEOF())
  70. {
  71. m_ctrTime.AddString(TimeSet.m_time);
  72. TimeSet.MoveNext();
  73. }
  74. TimeSet.Close();
  75. //初始化考试类型
  76. CExamtypeSet TypeSet ;
  77. strSQL="select * from examtype";
  78. if(!TypeSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
  79. {
  80. AfxMessageBox("打开数据库失败!");
  81. }
  82. while(!TypeSet.IsEOF())
  83. {
  84. m_ctrType.AddString(TypeSet.m_name);
  85. TypeSet.MoveNext();
  86. }
  87. TypeSet.Close();
  88. //初始化成绩列表
  89. m_ctrList.InsertColumn(0,"科目");
  90. m_ctrList.InsertColumn(1,"参考人数");
  91. m_ctrList.InsertColumn(2,"缺考人数");
  92. m_ctrList.InsertColumn(3,"平均成绩");
  93. m_ctrList.InsertColumn(4,"不及格人数");
  94. m_ctrList.InsertColumn(5,"及格率");
  95. m_ctrList.InsertColumn(6,"优秀人数");
  96. m_ctrList.InsertColumn(7,"优秀率");
  97. m_ctrList.SetColumnWidth(0,100);
  98. m_ctrList.SetColumnWidth(1,60);
  99. m_ctrList.SetColumnWidth(2,60);
  100. m_ctrList.SetColumnWidth(3,60);
  101. m_ctrList.SetColumnWidth(4,80);
  102. m_ctrList.SetColumnWidth(5,60);
  103. m_ctrList.SetColumnWidth(6,60);
  104. m_ctrList.SetColumnWidth(7,60);
  105. m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
  106. return TRUE;  // return TRUE unless you set the focus to a control
  107.               // EXCEPTION: OCX Property Pages should return FALSE
  108. }
  109. void CScoreClassStatDlg::OnButtonStat() 
  110. {
  111. UpdateData();
  112. if(m_strClass.IsEmpty())
  113. {
  114. AfxMessageBox("请选择班级");
  115. return;
  116. }
  117. if(m_strTime.IsEmpty())
  118. {
  119. AfxMessageBox("请选择考试时间段");
  120. return;
  121. }
  122. if(m_strType.IsEmpty())
  123. {
  124. AfxMessageBox("请选择考试类型");
  125. return;
  126. }
  127. m_ctrList.DeleteAllItems();
  128. m_ctrList.SetRedraw(FALSE);
  129. CString strSQL;
  130. CString strValue="0";
  131. CDatabase db;
  132. db.Open(_T("school"));
  133. CRecordset rs1(&db);
  134. CRecordset rs2(&db);
  135. CRecordset rs3(&db);
  136. CRecordset rs4(&db);
  137. strSQL.Format("select subject, 
  138. count(ID) as student ,
  139. sum(score) as total from score 
  140. where class = '%s' and time = '%s' 
  141. and type = '%s' group by subject"
  142. ,m_strClass,m_strTime,m_strType);
  143. if(!rs1.Open(CRecordset::forwardOnly,strSQL))
  144. {
  145. MessageBox("打开数据库失败!","数据库错误",MB_OK);
  146. return ;
  147. }
  148. int i=0;
  149. int nStudent =0,nPass=0,nTotal=0,nSuper;
  150. CString strSubject="";
  151. char buffer[20];
  152. while(!rs1.IsEOF())
  153. {
  154. //科目
  155. rs1.GetFieldValue("subject",strValue);
  156. m_ctrList.InsertItem(i,strValue);
  157. strSubject = strValue;
  158. //参考人数
  159. rs1.GetFieldValue("student",strValue);
  160. nStudent=atoi(strValue);
  161. m_ctrList.SetItemText(i,1,strValue);
  162. //缺考人数
  163. strSQL.Format("select count(ID) as nAbsent from score 
  164. where class = '%s' and time = '%s' 
  165. and type = '%s' and absent = '是' 
  166. and subject = '%s' "
  167. ,m_strClass,m_strTime,m_strType,strSubject);
  168. if(!rs2.Open(CRecordset::forwardOnly,strSQL))
  169. {
  170. rs1.Close();
  171. MessageBox("打开数据库失败!","数据库错误",MB_OK);
  172. return ;
  173. }
  174. rs2.GetFieldValue("nAbsent",strValue);
  175. m_ctrList.SetItemText(i,2,strValue);
  176. rs2.Close();
  177. //平均成绩
  178. rs1.GetFieldValue("total",strValue);
  179. nTotal=atoi(strValue);
  180. _itoa(nTotal/nStudent,buffer,10);
  181. m_ctrList.SetItemText(i,3,buffer);
  182. //不及格人数
  183. strSQL.Format("select count(ID) as nPass from score 
  184. where class = '%s' and time = '%s' 
  185. and type = '%s' and score < 60 
  186. and subject = '%s' "
  187. ,m_strClass,m_strTime,m_strType,strSubject);
  188. if(!rs3.Open(CRecordset::forwardOnly,strSQL))
  189. {
  190. rs1.Close();
  191. MessageBox("打开数据库失败!","数据库错误",MB_OK);
  192. return ;
  193. }
  194. rs3.GetFieldValue("nPass",strValue);
  195. m_ctrList.SetItemText(i,4,strValue);
  196. rs3.Close();
  197. //及格率
  198. nPass = nStudent - atoi(strValue);
  199. itoa( (int)(nPass*100/nStudent), buffer,10 );
  200. m_ctrList.SetItemText(i,5,buffer);
  201. //优秀率
  202. strSQL.Format("select count(ID) as nSuper from score 
  203. where class = '%s' and time = '%s' 
  204. and type = '%s' and score >= 60 
  205. and subject = '%s' "
  206. ,m_strClass,m_strTime,m_strType,strSubject);
  207. if(!rs4.Open(CRecordset::forwardOnly,strSQL))
  208. {
  209. rs1.Close();
  210. MessageBox("打开数据库失败!","数据库错误",MB_OK);
  211. return ;
  212. }
  213. rs4.GetFieldValue("nSuper",strValue);
  214. m_ctrList.SetItemText(i,6,strValue);
  215. rs4.Close();
  216. //优秀率
  217. nSuper = atoi(strValue);
  218. itoa( (int)(nSuper*100/nStudent), buffer,10 );
  219. m_ctrList.SetItemText(i,7,buffer);
  220. i++;
  221. rs1.MoveNext();
  222. }
  223. rs1.Close();
  224. m_ctrList.SetRedraw(TRUE);
  225. }