Visual C++ 实验报告.doc_第1页
Visual C++ 实验报告.doc_第2页
Visual C++ 实验报告.doc_第3页
Visual C++ 实验报告.doc_第4页
Visual C++ 实验报告.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VC+程序设计与应用实验报告(黄克辉) 本队组长: 5133133 冯翎瑜 本队组员: 5133110 蒋子辉 5133115 黄克辉 5133123 李芳芳 摘要:为编写一个类似考试系统的应用程序,我们以VC +6.0及Access为基本实验软件,利用MFC程序框架,将数据库连接到所编程序中,并添加适当的代码,逐步完善考试系统界面所需的工具栏,并按选项、完成时间等给出排序。而且在传统的手动选择“下一题”的基础上创建了“自动进入下一题”方法,使考试界面更加友善。1、实验题目: 给出一组题目,让学生选择ABCD。对结果可以按题目,按选项,按完成时间,按错误率各种排序。2、实验需要的软件: 主要应用:开发工具VC+6.0及Access数据库 操作系统:Windows 98/XP/Win 73、 实验分工:全组成员共同通过查到的资料和所学知识讨论程序代码以及发现错误后的调试、纠错等。组长冯翎瑜主要负责协调组内成员、建立数据库,并把自定义题目及答案输入到Access数据库中;组员黄克辉主要通过上网或查阅相关参考书籍搜集一些资料及相关程序源代码;组员蒋子辉主要负责将小组讨论后的结果即一些具体代码添加到相应函数中,并编译、运行程序,发现程序的漏洞;组员李芳芳主要负责对实验的总结以及实验报告的撰写。 4、 实验思路:首先建立好数据库文件“KS.mdb”,并在其中设置好题目和答案,最后两栏为错误次数和总的做题次数;然后使用VC+6.0创建一个基本对话框并进行相关设置;进入Classview、Resourceview、Fileview中编写代码,运行调试。其中,四种排序的函数为主要函数,它们分别为:CResultDlg类的OnSortByIndex()函数、OnSortByAnswer()函数、OnSortByTimeCost()函数、OnSortByWrongRate()函数。 5、 概要设计介绍: (1)、 CSortTable类 numeEL_STRING=1,EL_PASSWORD,EL_BOOL,EL_INT;class CSortTable : public CListCtrl/ 构造public:void SortItems(int col, BOOL asc);static int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);void SetInt(int row, int column, int data);int GetSelRows(CArray&selIndex);int GetInt(int row, int column);void ClearSelect();CSortTable();int GetColType(int col);CString GetString(int row, int column);void SetString(int row, int column, LPCTSTR str);virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );void SelectItem(int index);void SelectAll();void ReverseSelect();int AppendColumn(LPCTSTR lpszColumnHeader, int colType=EL_STRING, BOOL editable=FALSE, BOOL isLastCol=FALSE);int AddNew(LPCTSTR data=_T(), int nImage=-1);void Init(BOOL bSingleSel);void SetRowHeight(int height);templatestatic void Swap(T&a, T&b);/ 属性public:int m_sortCol;BOOL m_desc;BOOL m_isLastRowSortable;int m_rowHeight;CArraym_colTypeArray,m_colEditableArray;/ 操作运算public:/ 重写/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CSortTable)public:protected:virtual BOOL PreCreateWindow(CREATESTRUCT& cs);/AFX_VIRTUAL/ 执行public:int GetFirstSel();CImageList* SetImageList( CImageList* pImageList);void SetImageIndex(int rowIndex, int nImage);int GetImageIndex(int rowIndex);virtual CSortTable();/ Generated message map functionsprotected:/AFX_MSG(CSortTable)afx_msg void MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct );/AFX_MSGDECLARE_MESSAGE_MAP();(2)、CResultSet类#pragma warning(disable:4786)using namespace ADODB;class CResultSet;class CDBConnpublic:static CString Escape(LPCTSTR orgData);CString GetLastError();BOOL IsConnected();void Close();static _RecordsetPtr QuerySql(_ConnectionPtr m_pConn, LPCTSTR sql);BOOL ConnectDB(LPCTSTR connStr);BOOL GetSqlServConnected(LPCTSTR dbName, LPCTSTR password = _T(), LPCTSTR userName = _T(sa), LPCTSTR serverName = _T(.);int ExecuteSql(LPCTSTR sql);_RecordsetPtr QuerySql(LPCTSTR sql, BOOL openDynamic=TRUE);static int ExecuteSql(CDBConn& conn, LPCTSTR sql);BOOL GetConnected(LPCTSTR filePath, LPCTSTR password = _T(), LPCTSTR userName = _T();CDBConn();virtual CDBConn();_ConnectionPtr m_pConn;private:BOOL Init();CStringArray m_tableNames;CString m_errInfo;CString m_getIncreaseIDSql;class CResultSet public:int GetRecordCount();long GetState();void MoveNext()m_pRS-MoveNext();void MoveFirst();void SetDate(LPCTSTR colName, DATE value, BOOL update = TRUE);void SetDate(int colIndex, DATE value, BOOL update = TRUE);DATE GetDate(int colIndex);DATE GetDate(LPCTSTR colName);_RecordsetPtr operator =(_RecordsetPtr pRS);_RecordsetPtr operator -()return m_pRS;CResultSet(_RecordsetPtr pRS);int Close();char GetChar(LPCTSTR colName);byte GetByte(LPCTSTR colName);void SetBool(LPCTSTR colName, BOOL value, BOOL update = TRUE);void SetBool(int colIndex, BOOL value, BOOL update = TRUE);void SetInt(int colIndex, int value, BOOL update = TRUE);void SetInt(LPCTSTR colName, int value, BOOL update = TRUE);void SetDouble(int colIndex, double value, BOOL update = TRUE);void SetDouble(LPCTSTR colName, double value, BOOL update = TRUE);void SetStr(int colIndex, LPCTSTR value, BOOL update = TRUE);void SetStr(LPCTSTR colName, LPCTSTR value, BOOL update = TRUE);BOOL GetBool(int colIndex);BOOL GetBool(LPCTSTR colName);int GetInt(int colIndex);int GetInt(LPCTSTR colName);double GetDouble(int colIndex);double GetDouble(LPCTSTR colName);CString GetStr(int colIndex);CString GetStr(LPCTSTR colName);CResultSet();virtual CResultSet();public:BOOL IsEOF();_RecordsetPtr m_pRS;_CommandPtr m_cmd;void* m_outputArgsMapPtr;private:CStringArray m_ColNames;6、主要代码及解释: 按选项排序就是对学生答题的结果进行简单统计,将学生答案是“A”、“B”、“C”、“D”选项的题目一一列出,可清晰明了的看到学生所做的答案。我负责的“按选项排序”通过VC+知识还有网上搜索,综合整理并解释得出结果如下:void CSortTable:SortItems(int col, BOOL asc)DWORD param=(DWORD)this,col, asc;int itemCount = this-GetItemCount();if(itemCount2)return;int i = 0;DWORD *orgData=new DWORDitemCount;for ( i = 0; i itemCount ; i+)orgDatai=GetItemData(i);SetItemData(i,i);CListCtrl:SortItems(CSortTable:CompareFunc,(DWORD)param);for ( i = 0; i itemCount ; i+)SetItemData(i,orgDataGetItemData(i);deleteorgData;void CResultDlg:OnSortByAnswer() / TODO: Add your control notification handler code herem_resultList.SortItems(COL_ANSWER_CHOOSE, TRUE);考虑到学生实际的答题速度和机器的运行速率,记录答题时间时我们选择以毫秒(ms)为单位,这样可使结果更加精确以及排序效果更为明显。而且,学生每答完一题,相对于下一题来说当前时间已经发生变化,前者记录的开始时间变为无效。所以,我们应该在每次答完题后都要更新开始时间,保证算法的正确无误。7、程序运行效果图:8、小结: 本次结课作业难度颇大,与传统的考试结课不同,老师选择了让我们小组团结努力完成,小组四人分配工作任务,合作探究。在大家的共同努力下,本次结课作业圆满完成。在此次结课作业的合作中,我体会最深的一点是:把握时机,体验“合作”、评价激励,延伸“

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论