STDREG.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:11k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // stdreg.cpp : Defines the class behaviors for the application.
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12. #include "stdafx.h"
  13. #include "stdreg.h"
  14. #include "typeinfo.h"
  15. #include "dialog.h"
  16. #include "columdlg.h"
  17. #include "coursset.h"
  18. #include "stdset.h"
  19. #include "instrset.h"
  20. #include "sectset.h"
  21. #include "dsectset.h"
  22. #include "enrolset.h"
  23. #include "initdata.h"
  24. #ifdef _DEBUG
  25. #undef THIS_FILE
  26. static char BASED_CODE THIS_FILE[] = __FILE__;
  27. #endif
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CStdRegSetupApp
  30. BEGIN_MESSAGE_MAP(CStdRegSetupApp, CWinApp)
  31. //{{AFX_MSG_MAP(CStdRegSetupApp)
  32. //}}AFX_MSG
  33. ON_COMMAND(ID_HELP, CWinApp::OnHelp)
  34. END_MESSAGE_MAP()
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CStdRegSetupApp construction
  37. CStdRegSetupApp::CStdRegSetupApp()
  38. {
  39. }
  40. CStdRegSetupApp::~CStdRegSetupApp()
  41. {
  42. }
  43. /////////////////////////////////////////////////////////////////////////////
  44. // The one and only CStdRegSetupApp object
  45. CStdRegSetupApp theApp;
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CStdRegSetupApp initialization
  48. BOOL CStdRegSetupApp::InitInstance()
  49. {
  50. #ifdef _AFXDLL
  51. Enable3dControls();         // Call this when using MFC in a shared DLL
  52. #else
  53. Enable3dControlsStatic();   // Call this when linking to MFC statically
  54. #endif
  55. LoadStdProfileSettings();
  56. m_mapSQLTypeToSyntax[SQL_VARCHAR] = "varchar(50)";
  57. m_mapSQLTypeToSyntax[SQL_INTEGER] = "int";
  58. m_mapSQLTypeToSyntax[SQL_SMALLINT] = "smallint";
  59. CStdRegSetupDlg dlg;
  60. m_pMainWnd = &dlg;
  61. int nResponse = dlg.DoModal();
  62. if (nResponse == IDOK)
  63. {
  64. }
  65. else if (nResponse == IDCANCEL)
  66. {
  67. }
  68. return FALSE;
  69. }
  70. void CStdRegSetupApp::AddDataSource()
  71. {
  72. if (AfxMessageBox(IDS_CONFIRM_DB_ADDED_ALREADY, MB_YESNO) != IDYES)
  73. return;
  74. CString strDSN;
  75. strDSN.LoadString(IDS_DEFAULT_DATA_SOURCE_NAME);
  76. if (SQLCreateDataSource(m_pMainWnd->m_hWnd, strDSN))
  77. AfxMessageBox(IDS_DATA_SOURCE_ADDED);
  78. else
  79. AfxMessageBox(IDS_DATA_SOURCE_NOT_ADDED);
  80. }
  81. BOOL CStdRegSetupApp::GetColumnSyntax()
  82. {
  83. CColSyntaxDlg dlgColSyntax;
  84. dlgColSyntax.m_pMapSQLTypeToSyntax = &m_mapSQLTypeToSyntax;
  85. if (dlgColSyntax.DoModal() != IDOK)
  86. return FALSE;
  87. return TRUE;
  88. }
  89. void CStdRegSetupApp::InitializeData()
  90. {
  91. CString strDSN;
  92. strDSN.LoadString(IDS_DEFAULT_DATA_SOURCE_NAME);
  93. if (!m_db.Open(strDSN))
  94. {
  95. AfxMessageBox(IDS_CANNOT_OPEN_DATA_SOURCE);
  96. return;
  97. }
  98. if (!GetColumnSyntax())
  99. return;
  100. BeginWaitCursor();
  101. if (AddCourseTable()
  102. && AddStudentTable()
  103. && AddInstructorTable()
  104. && AddSectionTable()
  105. && AddDynabindSectionTable()
  106. && AddEnrollmentTable())
  107. {
  108. AfxMessageBox(IDS_INITIALIZATION_COMPLETE);
  109. }
  110. else
  111. {
  112. AfxMessageBox(IDS_DATA_SOURCE_NOT_INITIALIZED);
  113. }
  114. ShowProgress(0);
  115. m_db.Close();
  116. EndWaitCursor();
  117. }
  118. void CStdRegSetupApp::ShowProgress(int nTablesDone)
  119. {
  120. CStdRegSetupDlg* pDlg = (CStdRegSetupDlg*)m_pMainWnd;
  121. CString strProgress;
  122. if (nTablesDone > 0)
  123. {
  124. CString strProgressFormat;
  125. strProgressFormat.LoadString(IDS_PROGRESS);
  126. strProgress.Format(strProgressFormat, nTablesDone, 6);
  127. }
  128. pDlg->m_ctlProgress.SetWindowText(strProgress);
  129. }
  130. BOOL CStdRegSetupApp::ExecuteSQLAndReportFailure(const CString& strSQL)
  131. {
  132. TRY
  133. {
  134. m_db.ExecuteSQL(strSQL);
  135. }
  136. CATCH(CDBException, e)
  137. {
  138. CString strMsg;
  139. strMsg.LoadString(IDS_EXECUTE_SQL_FAILED);
  140. strMsg += strSQL;
  141. return FALSE;
  142. }
  143. END_CATCH
  144. return TRUE;
  145. }
  146. BOOL CStdRegSetupApp::DropThenAddTable(const CString& strTableName, const CString& strColumns)
  147. {
  148. CString strSQL;
  149. TRY
  150. {
  151. strSQL = "DROP TABLE ";
  152. strSQL += strTableName;
  153. m_db.ExecuteSQL(strSQL);  // failure is ok, for example, if table doesn't already exist
  154. }
  155. CATCH(CDBException,e)
  156. {
  157. // It is ok if table does not already exist.
  158. }
  159. END_CATCH
  160. strSQL = "CREATE TABLE ";
  161. strSQL += strTableName;
  162. strSQL += '(';
  163. strSQL += strColumns;
  164. strSQL += ')';
  165. return ExecuteSQLAndReportFailure(strSQL);
  166. }
  167. void CStdRegSetupApp::AddColumn(CString& strColumns, LPCSTR lpszColumnName, SWORD fSqlType,
  168. LPCSTR lpszColLength)
  169. {
  170. if (!strColumns.IsEmpty())
  171. strColumns += ',';
  172. strColumns += lpszColumnName;
  173. CString strDataType;
  174. VERIFY(m_mapSQLTypeToSyntax.Lookup(fSqlType,strDataType));
  175. if (fSqlType == SQL_VARCHAR)
  176. {
  177. // The Column Syntax dialog instructed the user to specify
  178. // the syntax for a varchar with a maximum length of 50.
  179. // Replace the "50" with the column-specific length.
  180. BOOL b50Found = FALSE;
  181. ASSERT(lpszColLength != NULL);
  182. CString strDataTypeWith50Replaced;
  183. for (int nPos = 0; nPos < strDataType.GetLength(); nPos++)
  184. {
  185. if (strDataType[nPos] == '5' && strDataType[nPos+1] == '0')
  186. {
  187. strDataTypeWith50Replaced += lpszColLength;
  188. nPos += 1;
  189. b50Found = TRUE;
  190. }
  191. else
  192. {
  193. strDataTypeWith50Replaced += strDataType[nPos];
  194. }
  195. }
  196. if (b50Found)
  197. strDataType = strDataTypeWith50Replaced;
  198. }
  199. strColumns += ' ';
  200. strColumns += strDataType;
  201. }
  202. BOOL CStdRegSetupApp::AddCourseTable()
  203. {
  204. ShowProgress(1);
  205. CString strTableName = "COURSE";
  206. CString strColumns;
  207. AddColumn(strColumns, "CourseID", SQL_VARCHAR, "8");
  208. AddColumn(strColumns, "CourseTitle", SQL_VARCHAR, "50");
  209. AddColumn(strColumns, "Hours", SQL_SMALLINT);
  210. if (!DropThenAddTable(strTableName, strColumns))
  211. return FALSE;
  212. CCourseSet setCourse(&m_db);
  213. setCourse.Open();
  214. for (int nIndex = 0; nIndex < sizeof(courseData)/sizeof(CCourseData); nIndex++)
  215. {
  216. setCourse.AddNew();
  217. setCourse.m_CourseID    = courseData[nIndex].m_CourseID;
  218. setCourse.m_CourseTitle = courseData[nIndex].m_CourseTitle;
  219. setCourse.m_Hours       = courseData[nIndex].m_Hours;
  220. setCourse.Update();
  221. }
  222. setCourse.Close();
  223. return TRUE;
  224. }
  225. BOOL CStdRegSetupApp::AddStudentTable()
  226. {
  227. ShowProgress(2);
  228. CString strTableName = "STUDENT";
  229. CString strColumns;
  230. AddColumn(strColumns, "StudentID", SQL_INTEGER);
  231. AddColumn(strColumns, "Name", SQL_VARCHAR, "40");
  232. AddColumn(strColumns, "GradYear", SQL_SMALLINT);
  233. if (!DropThenAddTable(strTableName, strColumns))
  234. return FALSE;
  235. CStudentSet setStudent(&m_db);
  236. setStudent.Open();
  237. for (int nIndex = 0; nIndex < sizeof(studentData)/sizeof(CStudentData); nIndex++)
  238. {
  239. setStudent.AddNew();
  240. setStudent.m_StudentID   = studentData[nIndex].m_StudentID;
  241. setStudent.m_Name        = studentData[nIndex].m_Name;
  242. setStudent.m_GradYear    = studentData[nIndex].m_GradYear;
  243. setStudent.Update();
  244. }
  245. setStudent.Close();
  246. return TRUE;
  247. }
  248. BOOL CStdRegSetupApp::AddInstructorTable()
  249. {
  250. ShowProgress(3);
  251. CString strTableName = "INSTRUCTOR";
  252. CString strColumns;
  253. AddColumn(strColumns, "InstructorID", SQL_VARCHAR, "8");
  254. AddColumn(strColumns, "Name", SQL_VARCHAR, "40");
  255. AddColumn(strColumns, "RoomNo", SQL_VARCHAR, "10");
  256. if (!DropThenAddTable(strTableName, strColumns))
  257. return FALSE;
  258. CInstructorSet setInstructor(&m_db);
  259. setInstructor.Open();
  260. for (int nIndex = 0; nIndex < sizeof(instructorData)/sizeof(CInstructorData); nIndex++)
  261. {
  262. setInstructor.AddNew();
  263. setInstructor.m_InstructorID = instructorData[nIndex].m_InstructorID;
  264. setInstructor.m_Name         = instructorData[nIndex].m_Name;
  265. setInstructor.m_RoomNo       = instructorData[nIndex].m_RoomNo;
  266. setInstructor.Update();
  267. }
  268. setInstructor.Close();
  269. return TRUE;
  270. }
  271. BOOL CStdRegSetupApp::AddSectionTable()
  272. {
  273. ShowProgress(4);
  274. CString strTableName = "SECTION";
  275. CString strColumns;
  276. AddColumn(strColumns, "CourseID", SQL_VARCHAR, "8");
  277. AddColumn(strColumns, "SectionNo", SQL_VARCHAR, "4");
  278. AddColumn(strColumns, "InstructorID", SQL_VARCHAR, "8");
  279. AddColumn(strColumns, "RoomNo", SQL_VARCHAR, "10");
  280. AddColumn(strColumns, "Schedule", SQL_VARCHAR, "24");
  281. AddColumn(strColumns, "Capacity", SQL_SMALLINT);
  282. if (!DropThenAddTable(strTableName, strColumns))
  283. return FALSE;
  284. CSectionSet setSection(&m_db);
  285. setSection.Open();
  286. for (int nIndex = 0; nIndex < sizeof(sectionData)/sizeof(CSectionData); nIndex++)
  287. {
  288. setSection.AddNew();
  289. setSection.m_CourseID       =sectionData[nIndex].m_CourseID;
  290. setSection.m_SectionNo      =sectionData[nIndex].m_SectionNo;
  291. setSection.m_InstructorID   =sectionData[nIndex].m_InstructorID;
  292. setSection.m_RoomNo         =sectionData[nIndex].m_RoomNo;
  293. setSection.m_Schedule       =sectionData[nIndex].m_Schedule;
  294. setSection.m_Capacity       =sectionData[nIndex].m_Capacity;
  295. setSection.Update();
  296. }
  297. setSection.Close();
  298. return TRUE;
  299. }
  300. BOOL CStdRegSetupApp::AddDynabindSectionTable()
  301. {
  302. ShowProgress(5);
  303. CString strTableName = "DYNABIND_SECTION";
  304. CString strColumns;
  305. AddColumn(strColumns, "CourseID", SQL_VARCHAR, "8");
  306. AddColumn(strColumns, "SectionNo", SQL_VARCHAR, "4");
  307. AddColumn(strColumns, "InstructorID", SQL_VARCHAR, "8");
  308. AddColumn(strColumns, "RoomNo", SQL_VARCHAR, "10");
  309. AddColumn(strColumns, "Schedule", SQL_VARCHAR, "24");
  310. AddColumn(strColumns, "Capacity", SQL_SMALLINT);
  311. AddColumn(strColumns, "LabRoomNo", SQL_VARCHAR, "10");
  312. AddColumn(strColumns, "LabSchedule", SQL_VARCHAR, "24");
  313. if (!DropThenAddTable(strTableName,strColumns))
  314. return FALSE;
  315. CDynabindSectionSet setDynabindSection(&m_db);
  316. setDynabindSection.Open();
  317. for (int nIndex = 0; nIndex < sizeof(dynabindSectionData)/sizeof(CDynabindSectionData); nIndex++)
  318. {
  319. setDynabindSection.AddNew();
  320. setDynabindSection.m_CourseID     = dynabindSectionData[nIndex].m_CourseID;
  321. setDynabindSection.m_SectionNo    = dynabindSectionData[nIndex].m_SectionNo;
  322. setDynabindSection.m_InstructorID = dynabindSectionData[nIndex].m_InstructorID;
  323. setDynabindSection.m_RoomNo       = dynabindSectionData[nIndex].m_RoomNo;
  324. setDynabindSection.m_Schedule     = dynabindSectionData[nIndex].m_Schedule;
  325. setDynabindSection.m_Capacity     = dynabindSectionData[nIndex].m_Capacity;
  326. setDynabindSection.m_LabRoomNo    = dynabindSectionData[nIndex].m_LabRoomNo;
  327. setDynabindSection.m_LabSchedule  = dynabindSectionData[nIndex].m_LabSchedule;
  328. setDynabindSection.Update();
  329. }
  330. setDynabindSection.Close();
  331. return TRUE;
  332. }
  333. BOOL CStdRegSetupApp::AddEnrollmentTable()
  334. {
  335. ShowProgress(6);
  336. CString strTableName = "ENROLLMENT";
  337. CString strColumns;
  338. AddColumn(strColumns, "StudentID", SQL_INTEGER);
  339. AddColumn(strColumns, "CourseID", SQL_VARCHAR, "8");
  340. AddColumn(strColumns, "SectionNo", SQL_VARCHAR, "4");
  341. AddColumn(strColumns, "Grade", SQL_VARCHAR, "1");
  342. if (!DropThenAddTable(strTableName,strColumns))
  343. return FALSE;
  344. CEnrollmentSet setEnrollment(&m_db);
  345. setEnrollment.Open();
  346. for (int nIndex = 0; nIndex < sizeof(enrollmentData)/sizeof(CEnrollmentData); nIndex++)
  347. {
  348. setEnrollment.AddNew();
  349. setEnrollment.m_StudentID      = enrollmentData[nIndex].m_StudentID;
  350. setEnrollment.m_CourseID       = enrollmentData[nIndex].m_CourseID;
  351. setEnrollment.m_SectionNo      = enrollmentData[nIndex].m_SectionNo;
  352. setEnrollment.m_Grade          = enrollmentData[nIndex].m_Grade;
  353. setEnrollment.Update();
  354. }
  355. setEnrollment.Close();
  356. return TRUE;
  357. }