微机原理:学生成绩统计_第1页
微机原理:学生成绩统计_第2页
微机原理:学生成绩统计_第3页
微机原理:学生成绩统计_第4页
微机原理:学生成绩统计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

课程设计课程名称微机原理课程设计题目名称学生成绩的统计学生学院应用数学学院专业班级11信息安全1班壬学号学生姓名指导教师2013年12月25日目录TOC\o"1-5"\h\z\o"CurrentDocument"一、题目要求 2\o"CurrentDocument"二、程序界面与操作演示 2\o"CurrentDocument"三、设计思路与制作过程 3四、程序代码 8五、程序的特点与优点 12\o"CurrentDocument"六、程序设计过程中的改进 12\o"CurrentDocument"七、总结与体会 13一、题目要求输入十个学生某门课的成绩,统计低于60分,60〜69分,70〜79分,80〜89分,90〜99分和100分的人数,并输出统计结果。要求学生成绩的输入和统计结果的输出使用图形界面二、程序界面与操作演示说明:上图为程序刚打开后的界面,在“输入学生成绩”的区域中,可以输入代号为学生01~学生10的成绩,在下面的“统计结果”区域显示统计结果。其中“统计结果”区域不可编辑。说明:上图为程序的功能实现,输入学生成绩后,点击“开始统计”按钮,在下方的“统计结果”区域会有各分数段的人数显示。三、设计思路与制作过程1、设计思路用VisualC++6.0建立MFC工程设计出程序界面,得到RC文件、.RES文件和相关的头文件,然后从老师给出的例子“Dialog”中提取Var.bat文件、Makefile文件,再自己编写代码写成.asm文件,最后联结各文件生成EXE应用程序。2、详细制作过程由于我电脑上的操作系统是64位的Win8.1,在使用VisualC++6.0和MASM32软件的过程中会出错,所以我使用了VMware9.0虚拟机搭建的XP系统来完成程序设计。的过程中会出错,所以我使用了VMware9.0虚拟机搭建的XP系统来完成程序设计。WlndwriMF -VJdiMBfieWidtctMlgimiE■■亜fJF/ jb二习闵啼i::“伍立1冃e 厲朗ia&iijytisTflfey-|圮|乜乜gI[CIJQXBI'D-鼻仙4$:卜财XF-(1)界面设计在VisualC++6.0里建立MFC工程,设计好程序面板并保存。如下图所示:

lengihongllDIg旁Ahl口liTl囹uwrE=D團|£瞄阱T血lengihongllDIg旁Ahl口liTl囹uwrE=D團|£瞄阱T血nlff噩EB令』EElM-ne-遥也与世砸世!_製11[£色四巴-:jDialog习IDD^CHENGJI-:jIcto□IOR_MAINFnJiWr^ionElVSVERSION舌i-计丸6LE*分研了盼甸-a盼9E^99分J0:n[保存成功后,在保存目录中找到chengjitongji.rc、resource.h和Debug文件夹里的chengjitongji.res以及res文件夹(图标文件)复制到最后所要制作的程序所在的目录中,一共是4个文件,如下图所示:到此,界面设计步骤完毕。(2)使用汇编语言编写代码在编写代码过程中,使用了老师提供的“Dialog”求和程序中的Dialog.asm文件作为编程模板。首先,跟VisualC++6.0设计的界面建立联系,先进行等值定义,把界面各部分控件的ID统一起来,如下图所示:;»»»»»»>>>»»»»»»>>>»»»»»»>>»»>»»»»>>»»»»>;Equ等值定义:»»»»»»>>>»»»»»»>>>»»»»»»>>»»»»»>»>>»>»»»IDR_MAINFRftMEequ128;图标IDDCHENGJITOHGJIDIALOGequ102IDC_EDIT1 —equ伽0IDCEDIT2equIDC_EDIT3equ1002IDC^EDITUequ-1003IDC^EDITSequidcZeditsequ1005IDC_EDIT7equ1006IDC_EDIT8equ1007IDC_EDIT9equ1008IDCEDIT佃equ1009IDCEDIT11equ1010IDCEDIT12equdOHIDC-EDIT13equ1012IDC_EDIT1Uequ■1013IDC^EDITISequ1014idCeditisequ1015各部分控件的ID来自于resource.h文件。如下图所示:resource.h-记爭本文件(F)蝙辑㈢格式Q)查看帮助(H)|//{<NO_DEFENDENCIES}}//MicrosoftDeveloperStudiogeneratedincludefile//Usedbijchengjitongji.rc//ttdefineIDD_CHENGJITONGJI_DIfiLaG102ttdefineIDRJI口INFRAME128ttdefineIDCEDIT11SQQttdefineIDEEDIT21SQ1ttdefineIDEEDIT31SQ2ttdefineIDCEDIUi1BQ3ttdefineIDCEDITS1BQUttdefineIDCEDI"伽5ttdefineIDCEDIT?1006ttdefineIDC_EDIT81007ttdefineIDC_EDIT91008ttdefineIDC_EDIT1fl1009ttdefineIDC_EDIT111010ttdefineIDC_EDIT121011ttdefineIDC_EDIT131012ttdefineIDC_EDIT141013ttdefineIDC_EDIT151014ttdefineIDC_EDIT161015

第二步,进行代码的编写。代码部分会在下面的“四、程序代码”中作详细说明。BresajrcG.h到此,代码编写完毕,保存生成chengjitongji.asm文件。此时,程序目录下共有5BresajrcG.h口Jii'4iF)病辑丘丿査看]J。駆F◎〒苗D:\l\masm32收 ra(T)帮助(H)JSS 丈件丟屢1"3]二亠_一』1fr地址二)/「:J暉一亍蛀件妄曲瞬亍丈件妄打布到粧b &去至比£收.h-.ri-i'.-ri.irtS'-JCT3chBngjtongj.resREST件•15BdhEnQitaia^iiri 29.0K03)生成EXE应用程序从老师提供的例子“Dialog”文件夹中复制Var.bat、Makefile这两个文件到程序目录中,并根据实际情况作进一步修改。因为我的MASM32软件安装在D盘,所以Var.bat文件对应作修改,如下图:F3.jjpVar.bat-诃爭本S| |—|Nj文件㈢漏涓iE;格式Q)莹削门祜助冏□echooff応片i詡^抵Hrm跨临件暫1勺宣装目录修及下面曲hlasnOZDii环境吏昼I'ldhin32[)ir=d;Xlkhii32|setinciuae=^MasmS2Dir^MncLLde;^include^setlib=^Masni32Dir^\litj;%lib%setpath=%Ha5in32Dir%\BLn:^Masm32Dirt:^PfiTH^<^ptMaqmJIPDir=echoon由于我的程序名称是:chengjitongji,所以Makefile文件也需要作修改,如下图:

二 Makefile-记李丰文伴㈢滿辐㈢略式Q)讐阴耕助iH:|bni1IZ-chengjitongji0BJS-^(NAHE).ubjRES=i(NAMt).resLINKFLAG=/subsusten):uindo^sMl_FIfiR=/c/rnff^CHAhll:).esc:$(ODJS)$(RES)Link$(L[H(_rLAG]$(0DJS)$(RES).asm.obj:ml$(MLFLAG)$<.rc.res:re$<clean:del*.ubjdel*.resg]环境配置好后,进入emd,先生成.obj文件,如下图所示:g]有了.obj文件后,再通过代码Link/subsystem:windowschengjitongji.objchengjitongji.res生成EXE应用程序,如下图所示:此时程序已经制作完毕。;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;使用nmake或下列命令进行编译和链接:;ml/c/coffchengjitongji.asm;rcchengjitongji.rc;Link/subsystem:windowschengjitongji.objchengjitongji.res;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.386.modelflat,stdcalloptioncasemap:none;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;Include文件定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>include windows.incinclude user32.incincludelibuser32.libinclude kernel32.incincludelibkernel32.lib;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;Equ等值定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

IDR_MAINFRAMEequ128;图标IDD_CHENGJITONGJIDIALOGequ102IDC_EDIT1equ1000IDC_EDIT2equ1001IDC_EDIT3equ1002IDC_EDIT4equ1003IDC_EDIT5equ1004IDC_EDIT6equ1005IDC_EDIT7equ1006IDC_EDIT8equ1007IDC_EDIT9equ1008IDC_EDIT10equ1009IDC_EDIT11equ1010IDC_EDIT12equ1011IDC_EDIT13equ1012IDC_EDIT14equ1013IDC_EDIT15equ1014IDC_EDIT16equ1015;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;数据段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.data?scoredwordfaildwordsixtydwordseventydwordeightydword0ninetydword0hundreddwordhInstancedd0,0,0,0,0,0,0,0,0,00000;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;代码段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.code;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_ProcDlgMainprocusesebxediesi,hWnd,wMsg,wParam,lParamlocal@szBuffer[2]:bytemoveax,wMsg.ifeax==WM_CLOSEinvokeEndDialog,hWnd,NULL.elseif eax==WM_INITDIALOGinvokeLoadIcon,hInstance,IDR_MAINFRAMEinvokeSendMessage,hWnd,WM_SETICON,ICON_BIG,eax.elseifeax==WM_COMMANDmoveax,wParam.ifax==IDCANCELinvokeEndDialog,hWnd,NULL.elseifax==IDOKmovebx,0movfail,0movsixty,0movseventy,0moveighty,0movninety,0movhundred,0invokeGetDlgItemInt,hWnd,IDC_EDIT1,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxinvokeGetDlgItemInt,hWnd,IDC_EDIT2,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxinvokeGetDlgItemInt,hWnd,IDC_EDIT3,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxinvokeGetDlgItemInt,hWnd,IDC_EDIT4,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxinvokeGetDlgItemInt,hWnd,IDC_EDIT5,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxinvokeGetDlgItemInt,hWnd,IDC_EDIT6,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxinvokeGetDlgItemInt,hWnd,IDC_EDIT7,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxinvokeGetDlgItemInt,hWnd,IDC_EDIT8,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxinvokeGetDlgItemInt,hWnd,IDC_EDIT9,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxinvokeGetDlgItemInt,hWnd,IDC_EDIT10,addr@szBuffer,TRUEmovscore[ebx*(typescore)],eaxincebxmovecx,lengthofscoremoveax,0movebx,eaxagain: .ifscore[ebx*(typescore)]<60inc[fail].elseifscore[ebx*(typescore)]<70inc[sixty].elseifscore[ebx*(typescore)]<80inc[seventy].elseifscore[ebx*(typescore)]<90inc[eighty].elseifscore[ebx*(typescore)]<100inc[ninety].elseifscore[ebx*(typescore)]==100inc[hundred].endifincebxloopagainmovesi,[fail]invokeSetDlgItemInt,hWnd,IDC_EDIT11,esi,TRUEmovesi,[sixty]invokeSetDlgItemInt,hWnd,IDC_EDIT12,esi,TRUEmovesi,[seventy]invokeSetDlgItemInt,hWnd,IDC_EDIT13,esi,TRUEmovesi,[eighty]invokeSetDlgItemInt,hWnd,IDC_EDIT14,esi,TRUEmovesi,[ninety]invokeSetDlgItemInt,hWnd,IDC_EDIT15,esi,TRUEmovesi,[hundred]invokeSetDlgItemInt,hWnd,IDC_EDIT16,esi,TRUEmovedi,eax.endif.elsemoveax,FALSEret.endifmoveax,TRUEret_ProcDlgMainendp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>start:invokeGetModuleHandle,NULLmovhInstance,eaxinvokeDialogBoxParam,hInstance,IDD_CHENGJITONGJI_DIALOG,NULL,offset_ProcDlgMain,NULLinvokeExitProcess,NULL;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>endstart五、程序的优点与不足优点:1、本程序在“输入成绩”区域中,只可输入数字,对于字母、汉字等其他符号是不会识别的。2、本程序在“统计结果”区域中,设置了不可编辑的文本框,可以防止用户意外修改了数字,导致结果有偏差。不足:1、本程序在“输入成绩”区域中,无法输入带小数点的分数。2、对于输入的成绩,没有限定输入范围为0~100分,当输入的数据超过了100分时,则无法识别。因为程序中对于分数的统计分类并没有包括到100分以上的。六、程序设计过程中的改进程序在初稿完成后不久,我就发现了一个问题:连续点击“开始统计”按钮后,“统计结果”区域中显示的结果会在上一次统计的结果中累加。比如说,如果我所有成绩都输入“1”,第一次按“开始统计”按钮,那么统计结果是:“60分以下”为10,其余为0;但当我再按一次“开始统计”按钮的时候,统计结果就变为:“60分以下”为20,其余为0;按第三次统计的时候,“60分以下”又会变成30。所以这是一个很严重的错误。通过重新对代码的思考,我觉得在按下“开始统计”这个按钮的时候应该要对统计结果区域的数据进行一个初始化,于是我添加了以下代码,发现问题就解决了。

ifeax==WM_CLOSEinvokeEndDialog,hWnd,NULLelseifeax=H_INITDIALOGinvokeL□adicon,hlnstance,IDR_MAlNFRAMEinvokeSendMessage,hWnd,WM_SETICON,ICON_BIG,eaxelseifeax=VM.COMMANDmov eax,wParam.if ax==IDCANCELinvokeEndDialog,hWnd,NULL.elseifax==IDOKmovebx,0movfail,0movsixty,0movseventy,0moveighty,0movninety,0movhundred,0invoke(jetUlgltemlnt,hWnd,IDC_EDIT13addr@szEuffmr,TRUEmov

温馨提示

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

评论

0/150

提交评论