《VC__课程设计报告.doc》由会员分享,可在线阅读,更多相关《VC__课程设计报告.doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Harbin Institute of Technology at Weihai课程设计报告课程名称: VC+课程设计 设计题目: 驾驶员考试题库 院 系: 计算机科学与技术学院 班 级: 设 计 者: 王华星 学 号: 指导教师: 张渺 设计时间:2011年9月10日至2011年9月20日哈尔滨工业大学(威海)哈尔滨工业大学(威海)计算机学院VC+课程设计验收及成绩评定表(项目组)班号项目名称驾驶员考试题库职责学 号姓 名主 要 分 工组长王华星用户分析、编写代码、调试程序、编写文档指导教师张渺设计地点宋健研究院设计开始日期2011年9月10日项目完成日期2011年9月20日文 档 评 审
2、成 绩 (共35分)评审项目评审内容成绩标准评审成绩文档格式文档格式是否规范;文字是否规范;图表是否规范;术语是否准确10分文档质量程序设计思想与整体框架是否清晰20分文档一致性文档与程序是否一致5 分文档总体评价总成绩界 面 友 好 和 美 观 性 评 价 (共 10 分)评审项目评 审 内 容成绩标准评审成绩实现方法图形界面或命令行界面,美观程度5分实现语言面向过程或面向对象5分界面总体评价总成绩程 序 功 能 完 备 性 评 审 成 绩 (共 40 分)评审项目评 审 内 容成绩标准评审成绩程序运行状况程序是否能正常运行;是否出现死锁;是否遇到错误而中止运行10分程序正确性对于给定的输入
3、数据,是否能得到正确的输出结果15分程序与文档的一致性程序与各种文档的内容是否一致5 分程序的代码量程序代码量的大小10分程序总体评价总成绩哈尔滨工业大学(威海)计算机学院VC+课程设计验收及成绩评定表(项目组)实 现 技 术 难 易 程 度 (共 15 分)评审项目评 审 内 容成绩标准评审成绩难易性评价采用的关键技术,实现方法5分实用性评价采用的方法是否适合5分程序实现语言采用何种语言实现5分总体评价总成绩项目综合评价项目组总成绩 评审日期年 月 日评审人签字备注 哈尔滨工业大学(威海)课程设计任务书 姓 名:王华星 学 号:院(系):计算机科学与技术学院 专 业:计算机科学与技术 任务起
4、止日期:2011年9月10日 至 2011年9月20日 课程设计题目:驾驶员考试题库 问题阐述与分析: 驾驶员考试是由公安局车管所举办的资格考试,只有通过驾驶员考试才能取得驾照,才能合法的驾驶机动车辆。驾驶员考试分为科目一:理论考试;科目二:桩考;科目三:路考。只有三科全通过才能取得驾照。科目一的考试内容根据公安部第91号令,从10年4月1日起,采用最新版科目一试题。从试题库中按一定比例随机抽取100道试题进行答题。试题库每年都在更新,试题版本也在更新。本程序用于帮助驾驶员掌握科目一考试的知识点。由于科目一考试分为选择题和填空题部分,故而程序设计上也分别考虑到了这两方面。在本程序中,可以通过新
5、增问题、更改问题和删除问题来实现试题库的更新。在答题程序中,可以根据用户的选择情况进行判断,给出判断的结果。如果答案正确,则显示“回答正确”的提示;如果答案错误,则显示“回答错误”的提示。试题在程序中采用双线链表的形式进行存储,在退出程序后,将双向链表中的内容一次读入到一个文本文件中,实现对数据的长期保存。 工作量:1. 进行用户分析,决定驾驶员考试题库中的功能模块。2. 使用MFC编写程序的界面,实现主框架。3. 选择双向链表数据结构,编写双向链表代码和文件存储代码。4. 调试运行程序。5. 编写文档,完成课程设计报告。 工作计划安排:2011年9月10日2011年9月11日:用户分析201
6、1年9月11日2011年9月15日:实现代码2011年9月15日2011年9月18日:调试程序2011年9月18日2011年9月20日:编写文档 同组设计者及分工:组长兼组员:王华星;主要分工:用户分析、编写代码、调试程序、编写文档VC+课程设计报告 软硬件运行环境Intel Pentium 2及以上处理器,32M内存,4G以上硬盘Microsoft Windows XP操作系统及以上版本800*600或以上的屏幕分辨率 问题及难点所在需要实现试题的向前和向后遍历,因此采用双向链表的数据结构。在双向链表中,应实现数据元素与界面的交互、插入链表结点功能、遍历链表功能、删除链表结点功能。由于涉及到
7、多个界面的数据共享,因而将链表设置为共享的数据,在不同对话框转换时,只要传递头结点指针就可以实现链表的传递。在程序结束是,将双向链表中的数据读入到文件中,从而实现数据的长期保存。 涉及算法的思想双向链表:在双向链表的节点中有两个指针域,其一指向直接后继,另一指向直接前驱。在双向链表中插入和删除操作需要修改双向链表中的两个方向上的指针 系统的流程图总流程图1-1:图表 1-1总流程图建立双向链表流程图1-2:图表 1-2建立双向链表流程图插入结点流程图1-3:图表 1-3插入结点流程图更改删除结点流程图1-4:图表 1-4更改删除流程图 系统的设计与分析双向链表:typedef struct N
8、odeCString cQues;CString cAnsA;CString cAnsB;CString cAnsC;CString cAnsD;CString cAnsR;struct Node *next;struct Node *prier;Node,*Linklist;/定义双向链表typedef struct nodeCString cQue;CString cAns;struct node *next;struct node *prier;node,*linklist;函数说明:void CTravelexamDlg:OnButton1() /弹出添加新选择题窗口void CTra
9、velexamDlg:OnButton2() /弹出更改选择题窗口void CTravelexamDlg:OnButton3() /弹出删除选择题窗口void CTravelexamDlg:OnButton4() /弹出开始回答选择题窗口void CTravelexamDlg:OnButton5() /弹出添加新判断题窗口void CTravelexamDlg:OnButton6() /弹出更改判断题窗口void CTravelexamDlg:OnButton7() /弹出删除判断题窗口void CTravelexamDlg:OnButton8() /弹出开始回答判断题窗口void CTrav
10、elexamDlg:OnButton9() /退出程序void CAdd:OnButton1() /新增选择题void CAdd:OnButton2() /退出新增选择题窗口void CAdd1:OnButton1() /新增判断题void CAdd1:OnButton2() /退出新增判断题窗口void CChange:OnButton1() /查看上一题void CChange:OnButton2() /查看下一题void CChange:OnButton3() /确认更改信息void CChange:OnButton4() /退出更改选择题窗口void CChange1:OnButton
11、1() /查看上一题void CChange1:OnButton2() /查看下一题void CChange1:OnButton3() /确认更改信息void CChange1:OnButton4() /退出更改判断题窗口void CDele:OnButton1() /查看上一题void CDele:OnButton2() /查看下一题void CDele:OnButton3() /确认删除问题void CDele:OnButton4() /退出删除选择题窗口void CDele1:OnButton1() /查看上一题void CDele1:OnButton2() /查看下一题void CDe
12、le1:OnButton3() /确认删除问题void CDele1:OnButton4() /退出删除判断题窗口void CAns:OnButton1() /查看上一题void CAns:OnButton2() /查看下一题void CAns:OnButton3() /选择Avoid CAns:OnButton5() /选择Bvoid CAns:OnButton6() /选择Cvoid CAns:OnButton7() /选择Dvoid CAns:OnButton4() /退出回答选择题窗口void Cans1:OnButton1() /查看上一题void Cans1:OnButton2()
13、 /查看下一题void Cans1:OnButton3() /选择是void Cans1:OnButton5() /选择否void Cans1:OnButton4() /退出回答判断题窗口 运行结果与分析(测试)测试数据:机动车驾驶人、行人违反道路交通安全法律、法规关于道路通行规定的行为,属于()。违章行为违法行为过失行为过错行为B尚未登记的机动车,需要临时上路行驶,应当()。取得临时通行牌证到公安机关备案直接上路行驶在车窗上张贴合格证A在中华人民共和国境内与道路交通活动有关的单位和个人,都必须遵守中华人民共和国道路交通安全法。正确机动车未放置检验合格标志,可以上道路行驶。错误运行结果:图表
14、2-1更改选择题图表 2-2删除选择题图表 2-3回答选择题图表 2-4更改判断题图表 2-5删除判断题图表 2-6回答判断题图表 2-7欢迎界面 总结(收获与体会)由于本次课程设计中编写的程序运用了双向链表,因而对双向链表的使用条件和使用方法更加了解,对于MFC的工作机制也有了一定的认识,能够编写一些基本的窗口应用程序,可以使用MFC提供的类来完成工程。本次课程设计的数据采用了文件的存储方式,读写速度较快,实现了数据的长期存储。设计中对于数据的修改功能体现得比较全面,能够达到按照输入员的要求进行数据的更改工作。本次课程设计中,充分用到了将理论转化为实践的能力,将平时上课时的知识转化为程序,转
15、化为工程,并且实现了预定的功能,有一定的实际应用价值。真正的从理论上升到了实践,对于课本上学到的东西也有了更深层的理解。最后,本次课程设计还让我了解到了毅力和耐心在编程中的重要性。在修改程序问题中,需要耐心的查找错误,并一个一个的更正。在这个过程中,我也学到了一些使用编译器来查找错误的方法,并且充分利用了互联网的资源,收获了不少的新知识。 附:源代码travelexamDlg.cpp文件:BOOL CTravelexamDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABO
16、UTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is
17、not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization here/给链表头尾节点分配空间head=new Node;tail=new Node;head-next=tail;head-prier=NULL;tail-next=NULL;tail-prier=head;Head=new node;Tail=new node;Head-next=Tail;Head-prier=NULL;Tail-next=NUL
18、L;Tail-prier=Head;/读取文件p=head;P=Head;ifstream fin(shitiku.txt);if(fin)CString strtemp;char c;finnum;fin.get(c);for(int i=0;icQues+=strtemp;fin.get(c);fin.get(c);while(c!=n)strtemp.Format(%c,c);pNew-cAnsA+=strtemp;fin.get(c);fin.get(c);while(c!=n)strtemp.Format(%c,c);pNew-cAnsB+=strtemp;fin.get(c);fi
19、n.get(c);while(c!=n)strtemp.Format(%c,c);pNew-cAnsC+=strtemp;fin.get(c);fin.get(c);while(c!=n)strtemp.Format(%c,c);pNew-cAnsD+=strtemp;fin.get(c);fin.get(c);while(c!=n)strtemp.Format(%c,c);pNew-cAnsR+=strtemp;fin.get(c);p-next=pNew;pNew-prier=p;pNew-next=tail;tail-prier=pNew;p=p-next;finnnum;fin.get
20、(c);for(i=0;icQue+=strtemp;fin.get(c);fin.get(c);while(c!=n)strtemp.Format(%c,c);PNew-cAns+=strtemp;fin.get(c);P-next=PNew;PNew-prier=P;PNew-next=Tail;Tail-prier=PNew;P=P-next;fin.close();return TRUE; / return TRUE unless you set the focus to a controlvoid CTravelexamDlg:OnButton1() /弹出添加新问题窗口/ TODO
21、: Add your control notification handler code hereCAdd dlg;dlg.head=head;dlg.tail=tail;dlg.DoModal();head=dlg.head;void CTravelexamDlg:OnButton2() / TODO: Add your control notification handler code hereCChange dlg;dlg.head=head;dlg.tail=tail;dlg.DoModal();void CTravelexamDlg:OnButton3() / TODO: Add y
22、our control notification handler code hereCDele dlg;dlg.head=head;dlg.tail=tail;dlg.DoModal();head=dlg.head;void CTravelexamDlg:OnButton4() / TODO: Add your control notification handler code here/写入文件p=head-next;ofstream fout(shitiku.txt);foutnumn;for(int i=0;inum;i+)foutcQues.GetBuffer(200)ncAnsA.G
23、etBuffer(200)ncAnsB.GetBuffer(200)ncAnsC.GetBuffer(200)ncAnsD.GetBuffer(200)ncAnsR.GetBuffer(200)next;P=Head-next;foutnnumn;for(i=0;innum;i+)foutcQue.GetBuffer(200)ncAns.GetBuffer(200)next;fout.close();/退出程序CDialog:OnOK();void CTravelexamDlg:OnButton5() / TODO: Add your control notification handler
24、code hereCAns dlg;dlg.head=head;dlg.tail=tail;dlg.DoModal();void CTravelexamDlg:OnButton6() / TODO: Add your control notification handler code hereCAdd1 dlg;dlg.Head=Head;dlg.Tail=Tail;dlg.DoModal();Head=dlg.Head;void CTravelexamDlg:OnButton7() / TODO: Add your control notification handler code here
25、CChange1 dlg;dlg.Head=Head;dlg.Tail=Tail;dlg.DoModal();void CTravelexamDlg:OnButton8() / TODO: Add your control notification handler code hereCDele1 dlg;dlg.Head=Head;dlg.Tail=Tail;dlg.DoModal();Head=dlg.Head;void CTravelexamDlg:OnButton9() / TODO: Add your control notification handler code hereCAns
26、1 dlg;dlg.Head=Head;dlg.Tail=Tail;dlg.DoModal();Add.cpp文件void CAdd:OnButton1() / TODO: Add your control notification handler code hereUpdateData(true);(CComboBox*)GetDlgItem(IDC_COMBO1)-GetWindowText(m_str6);/获取正确答案if(!m_str1.IsEmpty()&!m_str2.IsEmpty()&!m_str3.IsEmpty()&!m_str4.IsEmpty()&!m_str5.Is
27、Empty()&!m_str6.IsEmpty()/如果输入内容完全,则插入到链表中/建立新节点pNew=new Node;pNew-cQues=m_str1;pNew-cAnsA=m_str2;pNew-cAnsB=m_str3;pNew-cAnsC=m_str4;pNew-cAnsD=m_str5;pNew-cAnsR=m_str6;/节点插入链表p-next=pNew;pNew-prier=p;pNew-next=tail;tail-prier=pNew;p=p-next;num+;/清空屏幕m_str1.Empty();m_str2.Empty();m_str3.Empty();m_s
28、tr4.Empty();m_str5.Empty();m_str6.Empty();UpdateData(false);elseMessageBox(请输入完整内容!);void CAdd:OnButton2() / TODO: Add your control notification handler code hereCDialog:OnOK();BOOL CAdd:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization herep=tail-prier;return TRUE; / return TRU
29、E unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEAdd1.cpp文件BOOL CAdd1:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereP=Tail-prier;return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages sho
30、uld return FALSEvoid CAdd1:OnButton1() / TODO: Add your control notification handler code hereUpdateData(true);(CComboBox*)GetDlgItem(IDC_COMBO1)-GetWindowText(m_str2);/获取正确答案if(!m_str1.IsEmpty()&!m_str2.IsEmpty()/如果输入内容完全,则插入到链表中/建立新节点PNew=new node;PNew-cQue=m_str1;PNew-cAns=m_str2;/节点插入链表P-next=PN
31、ew;PNew-prier=P;PNew-next=Tail;Tail-prier=PNew;P=P-next;nnum+;/清空屏幕m_str1.Empty();m_str2.Empty();UpdateData(false);elseMessageBox(请输入完整内容!);void CAdd1:OnButton2() / TODO: Add your control notification handler code hereCDialog:OnOK();Change.cpp文件void CChange:OnButton1() / TODO: Add your control notif
32、ication handler code hereif(p-prier!=head)p=p-prier;m_str1=p-cQues;m_str2=p-cAnsA;m_str3=p-cAnsB;m_str4=p-cAnsC;m_str5=p-cAnsD;m_str6=p-cAnsR;UpdateData(false);elseMessageBox(已经是第一个问题!);void CChange:OnButton2() / TODO: Add your control notification handler code hereif(p-next!=tail)p=p-next;m_str1=p-
33、cQues;m_str2=p-cAnsA;m_str3=p-cAnsB;m_str4=p-cAnsC;m_str5=p-cAnsD;m_str6=p-cAnsR;UpdateData(false);elseMessageBox(已经是最后一个问题!);void CChange:OnButton3() / TODO: Add your control notification handler code hereUpdateData(true);(CComboBox*)GetDlgItem(IDC_COMBO1)-GetWindowText(m_str6);/获取正确答案if(!m_str1.Is
34、Empty()&!m_str2.IsEmpty()&!m_str3.IsEmpty()&!m_str4.IsEmpty()&!m_str5.IsEmpty()&!m_str6.IsEmpty()/如果输入内容完全,则插入到链表中p-cQues=m_str1;p-cAnsA=m_str2;p-cAnsB=m_str3;p-cAnsC=m_str4;p-cAnsD=m_str5;p-cAnsR=m_str6;UpdateData(false);elseMessageBox(请输入完整内容!);void CChange:OnButton4() / TODO: Add your control not
35、ification handler code hereCDialog:OnOK();BOOL CChange:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization herep=head-next;if(!p-cQues.IsEmpty()m_str1=p-cQues;m_str2=p-cAnsA;m_str3=p-cAnsB;m_str4=p-cAnsC;m_str5=p-cAnsD;m_str6=p-cAnsR;UpdateData(false);elseMessageBox(没有已知问题!);CDial
36、og:OnOK();return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEChange1.cpp文件BOOL CChange1:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereP=Head-next;if(!P-cQue.IsEmpty()m_str1=P-cQue;m_str2=P-cAns;UpdateData(f
37、alse);elseMessageBox(没有已知问题!);CDialog:OnOK();return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid CChange1:OnButton3() / TODO: Add your control notification handler code hereif(P-prier!=Head)P=P-prier;m_str1=P-cQue;m_str2=P-cAns;Upd
38、ateData(false);elseMessageBox(已经是第一个问题!);void CChange1:OnButton4() / TODO: Add your control notification handler code hereif(P-next!=Tail)P=P-next;m_str1=P-cQue;m_str2=P-cAns;UpdateData(false);elseMessageBox(已经是最后一个问题!);void CChange1:OnButton1() / TODO: Add your control notification handler code hereUpdateData(true);(CComboBox*)GetDlgItem(IDC_COMBO1)-GetWindowText(m_str2);/获取正确答案if(!m_str1.IsEmpty()&!m_str2.IsEmpty()/如果输入内容完全