微机原理成绩统计类课程设计_第1页
微机原理成绩统计类课程设计_第2页
微机原理成绩统计类课程设计_第3页
微机原理成绩统计类课程设计_第4页
微机原理成绩统计类课程设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

课程设计课程名称微机原理课程设计题目名称学生成绩的统计学生学院应用数学学院专业班级12信息安全2班学号学生姓名指导教师2015年1月2日TOC\o"1-4"\h\u7337一、实验内容 357501.实验任务 3314052.构思猜想 312765二、实验设计 358241.实验工具:MASM32、ResEd 3263532.实验过程 4243832.1.图形设计 4192992.2.应用程序代码 563302.3.程序资源的准备 922091)修改Var.bat的地址 9188432)修改MakeFile 10192833)生成RC文件 10215444)生成OBJ文件 11153275)生成EXE程序 12147213.实验结果 1312277三、实验完整代码 145502四、实验心得体会 181380(1)本实验程序缺点 188864(2)本实验程序优点 1822739(3)开发心得体会 18一、实验内容1.实验任务输入十个学生某门课的成绩,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出统计结果。要求学生成绩的输入和统计结果的输出使用图形界面。2.构思猜想成绩统计是用于统计学生成绩的的简单的应用程序,所以正常的成绩统计程序,不能局限于统计一个固定人数(或不可变的),因为如果固定人数的话,当我们要用于不同的班级或专业时,对于不同的人数我们要做更多重复的操作,而造成无谓了人员或者资源的浪费。因此一个成绩统计软件必须要能应用于不同人数,而且能将统计结果呈现出来的。实验设计实验工具:MASM32、ResEd(1)MASM32:MASM32并非是指Microsoft的MASM宏汇编器。MASM32是一个由个人开发的包含了不同版本工具组建的汇编开发工具包。它的汇编编译器是MASM6.0以上版本中的Ml.exe,资源编译器是MicrosoftVisualStudio中的Rc.exe,32位链接器是MicrosoftVisualStudio中的Link.exe,同时包含有其他的一些如Lib.exe和DumpPe.exe等工具。本实验主要通过MASM开发环境,使我们的代码生成EXE。(2)ResEd:ResEd是一个图形界面编辑工具,它不但可以用来编写程序所图形界面(如修改图标、菜单、鼠标。版本信息等),还支持了对exe、dll等执行文件内的资源(图标、菜单、鼠标指针、位图、版本信息)等进行修改、替换。本程序不适用VC++的MFC设计程序的图形界面,因为VC++是被其开发者封装过的开发工具,里面的工作空间与开发工具本身的内部指令有关,因此,若用MFC生成的图形界面然后再取其生成RC文件,里面则会混淆许多我们不知的且对我们应用无用的代码段。使用ResEd,其本身是一个只用来设计图形界面的软件,负责的只是一个界面设计块,不用考虑该图形界面是否能成为应用或者被开发者如何使用,其生成的RC文件,只包含必要的控件的代码和设定,这让我们开发的时候能够更加的清晰且避免许多不必要的错误。实验过程2.1.图形设计使用ResEd设计我们需要的图形图一:图二:然后按“Ctrl+S”对我们的图形界面进行保存操作,然后就能生成(我取名为Rengar,名字又用户自行定义)Rengar.rc,我们右键文件“编辑”打开文件,这能清晰的看到我们的rc文件,并且在文件最顶端加上一句“#include<resource.h>”,如图示2.2.应用程序代码这里我使用的是老师给出的代码作为模板,添加修改自己的代码进去,完整代码在下面会给出,这里我们只对部分关键代码进行解析我们将刚刚生成的RC文件打开后,将我们控件的ID放进模板中控件ID部分:放入模板的Equ定义中:本程序录入成绩与导出成绩结果是在两个不同的对话框上,因此我们要对两个对话框进行设定结果对话框代码:_ProcDlgMainl proc usesebxediesi,hWnd,wMsg,wParam,lParamlocal@szBuffer[5]:byte mov eax,wMsg .if eax==WM_CLOSE invoke EndDialog,hWnd,NULL .elseif eax==WM_INITDIALOG movesi,[fail] invokeSetDlgItemInt,hWnd,IDC_EDT2,esi,TRUE movesi,[sixty] invokeSetDlgItemInt,hWnd,IDC_EDT3,esi,TRUE movesi,[seventy] invokeSetDlgItemInt,hWnd,IDC_EDT4,esi,TRUE movesi,[eighty] invokeSetDlgItemInt,hWnd,IDC_EDT5,esi,TRUE movesi,[ninety] invokeSetDlgItemInt,hWnd,IDC_EDT6,esi,TRUE movesi,[hundred] invokeSetDlgItemInt,hWnd,IDC_EDT7,esi,TRUE .elseif eax==WM_COMMAND .if ax==IDCANCEL invoke EndDialog,hWnd,NULL .endif .else mov eax,FALSE ret .endif mov eax,TRUE ret_ProcDlgMainl endp》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》主界面对话框代码:_ProcDlgMain proc usesebxediesi,hWnd,wMsg,wParam,lParamlocal@szBuffer[2]:byte mov eax,wMsg .if eax==WM_CLOSE invoke EndDialog,hWnd,NULL .elseif eax==WM_INITDIALOG invoke LoadIcon,hInstance,ICO_MAIN invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax .elseif eax==WM_COMMAND mov eax,wParam .if ax==IDCANCEL invoke EndDialog,hWnd,NULL.elseifax==IDC_BTN1;invokeGetDlgItemInt,hWnd,IDC_EDT1,@szBuffer,TRUEmovebx,indexmovscore[ebx*(typescore)],eax incindex incebx movindex,ebx movecx,lengthofscore moveax,0 .elseifax==IDOK movfail,0 movsixty,0 movseventy,0 moveighty,0 movninety,0 movhundred,0 movecx,10 again: .ifscore[ebx*(typescore)]<60 inc[fail] .elseifscore[ebx*(typescore)]<70 inc[sixty] .elseifscore[ebx*(typescore)]<80 inc[seventy] .elseifscore[ebx*(typescore)]<90 inc[eighty] .elseifscore[ebx*(typescore)]<100 inc[ninety] .elseifscore[ebx*(typescore)]==100 inc[hundred] .endif incebx ;.ifebx<10 loopagain ;.endif ;.endif InvokeDialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset_ProcDlgMainl,NULL//这句的作用是我们调出第二个对话框(结果对话框) .endif .else mov eax,FALSE ret .endif mov eax,TRUE ret_ProcDlgMain endp主界面代码中,我的again函数里面我采用了ecx寄存器计数,这是我实现对应不同人数情况统计的关键方法,ecx寄存的立即数就是我们要统计的人数的范围。2.3.程序资源的准备把我们制作的.asm和RC文件、var.bat、MakeFile放在同一个文件夹内,然后在放进MASM32目录里修改Var.bat的地址我的MASM安装在C盘,因此第三行修改为“C:\Masm32”修改MakeFile打开MakeFile,将里面的“NAME=”加上你的程序的名字生成RC文件打开CMD控制台,输入“cd(scr)”再按回车键进入文件夹,其中“(scr)”为你的rc所在文件夹地址,如图然后在按图内操作,生成res文件生成OBJ文件操作如图:然后则生成我的的OBJ文件:生成EXE程序我们需要用Link指令将OBJ和RES文件连接起来生成一个带图形界面的EXE文件,指令是“subsystem:windowsOBJRES”操作如图:我们的成绩统计程序就出来了:实验结果主界面:结果界面每统计一次,左上角的值则会少一次,该值则为ecx的值。实验完整代码 .386 .modelflat,stdcall optioncasemap:none;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;Include文件定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>include windows.incinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.lib;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;Equ等值定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>IDD_MFC2_DIALOGequ1100IDC_BTN1equ1001IDC_EDT1equ1002IDOKequ1IDCANCELequ2IDD_DIALOG1equ1000IDC_EDT2equ1001IDC_EDT3equ1002IDC_EDT4equ1003IDC_EDT5equ1004IDC_EDT6equ1005IDC_EDT7equ1006 ICO_MAINequ1;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;数据段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .data? hInstance dd ? .data score dword 0,0,0,0,0,0,0,0,0,0 fail dword 0 sixty dword 0 seventy dword 0 eighty dword 0 ninety dword 0 hundred dword 0 index dword 0;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;代码段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .code;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_ProcDlgMainl proc usesebxediesi,hWnd,wMsg,wParam,lParamlocal@szBuffer[5]:byte mov eax,wMsg .if eax==WM_CLOSE invoke EndDialog,hWnd,NULL .elseif eax==WM_INITDIALOG movesi,[fail] invokeSetDlgItemInt,hWnd,IDC_EDT2,esi,TRUE movesi,[sixty] invokeSetDlgItemInt,hWnd,IDC_EDT3,esi,TRUE movesi,[seventy] invokeSetDlgItemInt,hWnd,IDC_EDT4,esi,TRUE movesi,[eighty] invokeSetDlgItemInt,hWnd,IDC_EDT5,esi,TRUE movesi,[ninety] invokeSetDlgItemInt,hWnd,IDC_EDT6,esi,TRUE movesi,[hundred] invokeSetDlgItemInt,hWnd,IDC_EDT7,esi,TRUE .elseif eax==WM_COMMAND .if ax==IDCANCEL invoke EndDialog,hWnd,NULL .endif .else mov eax,FALSE ret .endif mov eax,TRUE ret_ProcDlgMainl endp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_ProcDlgMain proc usesebxediesi,hWnd,wMsg,wParam,lParamlocal@szBuffer[2]:byte mov eax,wMsg .if eax==WM_CLOSE invoke EndDialog,hWnd,NULL .elseif eax==WM_INITDIALOG invoke LoadIcon,hInstance,ICO_MAIN invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax .elseif eax==WM_COMMAND mov eax,wParam .if ax==IDCANCEL invoke EndDialog,hWnd,NULL.elseifax==IDC_BTN1;invokeGetDlgItemInt,hWnd,IDC_EDT1,@szBuffer,TRUEmovebx,indexmovscore[ebx*(typescore)],eax incindex incebx movindex,ebx movecx,lengthofscore moveax,0 .elseifax==IDOK movfail,0 movsixty,0 movseventy,0 moveighty,0 movninety,0 movhundred,0 movecx,10 again: .ifscore[ebx*(typescore)]<60 inc[fail] .elseifscore[ebx*(typescore)]<70 inc[sixty] .elseifscore[ebx*(typescore)]<80 inc[seventy] .elseifscore[ebx*(typescore)]<90 inc[eighty] .elseifscore[ebx*(typescore)]<100 inc[ninety] .elseifscore[ebx*(typescore)]==100 inc[hundred] .endif incebx loopagain invokeDialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset_ProcDlgMainl,NULL .endif .else mov eax,FALSE ret .endif mov eax,TRUE ret_ProcDlgMai

温馨提示

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

评论

0/150

提交评论