汇编语言程序设计课程设计报告学生成绩管理系统程序设计

上传人:r****d 文档编号:121244470 上传时间:2022-07-18 格式:DOC 页数:38 大小:161.50KB
收藏 版权申诉 举报 下载
汇编语言程序设计课程设计报告学生成绩管理系统程序设计_第1页
第1页 / 共38页
汇编语言程序设计课程设计报告学生成绩管理系统程序设计_第2页
第2页 / 共38页
汇编语言程序设计课程设计报告学生成绩管理系统程序设计_第3页
第3页 / 共38页
资源描述:

《汇编语言程序设计课程设计报告学生成绩管理系统程序设计》由会员分享,可在线阅读,更多相关《汇编语言程序设计课程设计报告学生成绩管理系统程序设计(38页珍藏版)》请在装配图网上搜索。

1、学生成绩管理系统程序设1、需求说明用汇编语言编写一个学生成绩管理系统,实现基本学生成绩管理,功能包括添加学生信息、修改学生信息、删除学生信息、打印学生信息、浏览学生信息存储文件以及粗略的统计学生信息,程序界面友好,有输入界面提示,有菜单功能。2、设计要求设计说明该程序要求具备的功能:清晰且易于操作的用户界面,在文本编辑界面中输入学生成绩。其中“I”表示插入,“L”表示浏览,“Q”表示查询,“E”表示退出,“D”表示删除,“M”表示修改,“c”表示统计各分数段人数,“P”表示打印.以上各功能应该能单独运行和连续运行。开发平台与开发工具该程序使用DOS操作系统32位实模式汇编语言编写,使用的编译器

2、为微软的MASM5.0,调试工具为DOS下的debug.exe程序。数据结构程序采用静态链表的方式来存储学生信息,链表结点描述如下: Student struc m_sName db 6 dup( ) m_sNum db 8 dup( ) m_sScore db 3 dup( ) Student ends 3、 设计思路设计方案及基本流程总体结构分析整个程序采用总程序调用子程序的方式。主程序完成菜单的显示,子程序完成一个独立功能的方法实现。各子程序的实现方法简要描述如下:1、设计Insert(录入)子程序时,先打开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子程序接受用

3、户的输入,再把用户的输入写入文件,最后关闭文件返回主程序。2、设计Delete(删除)子程序时,先打开文件,再调用宏GETIN得到要删除的学生的姓名,然后读文件中的记录,直到其记录的名与所输入的名字相同为止,把文件指针后退8个字符(即4门课程所占的空间),写入8个“0”字符,关闭文件返回主程序。3、设计List(浏览)子程序时,先打开文件,然后读一个记录,并通过调用宏SHOW_ITEM将其显示到屏幕上,若文件指针没有到达文件尾,则继续读记录并显示,当文件指针到达文件尾时,则关闭文件返回主程序。4、设计Modify(修改)子程序时,先打开文件SCORE.TXT,调用GET_RECZ子程序得到要修

4、改的记录,然后读文件中的记录,并与用户输入的记录作比较(只比较记录中的名字部分),若不同则读下一个记录,若相同则将文件指针后退23个字符(一个记录为23个字符的长度),然后把用户输入的记录写入文件,最后关闭文件返回主程序。5、设计Count(统计)子程序,先打开文件,然后读记录,比较记录的第16个字符(数学成绩的高位)并统计,直到文件指针到达文件尾,最后关闭文件调用宏SHOW_ITEM显示统计结果,返回主程序。6、设计Query(查询)子程序时,先打开文件,通过宏GETIN得到要查找学生的姓名,然后读文件记录,并同要查找的学生姓名比较,若相同则输出,若不同则继续读文件记录,最后显示查询结果,关

5、闭文件返回程序。单元子程序设计下面详细分析程序中用到的主要的子程序。(1)INSERT子程序INSERT子程序的功能是录入一条记录。 首先保留现场入栈。然后用DOS中断3d号功能打开FNAME指定的文件。然后用宏CLEARI清除屏幕右半部的记录输入区域。在记录的第一项处置光标,用GET_REC子程序获取内容。用DOS中断42h号功能将指针移到文件末尾。 在用DOS中断40h号功能将放在BUFFER缓冲区的23个字节的内容写到文件中,接着关闭文件,重新设置光标置在显示记录位置。 最后弹栈恢复现场。(2)GET_REC子程序的功能是获取新的记录内容。 GET_REC子程序的功能是获取新的记录内容。

6、 首先用宏GETIN获取学生的姓名,放入BUFFER2中,最多15个字符,如果遇到回车键则提前结束。再用循环方式格将BUFFER2中的15个字符送到BUFFER1中。然后用宏SET_PI将光标置于数字成绩输入项后,等待键盘输入。输入的成绩,先放在BUFFER2中,然后加到BUFFER1中的姓名后面。输入为2个字符或遇到回车键时提前结束。接着用同样的方法输入英语成绩、计算机成绩和中文成绩。完成后,这个子程序就得到了一个记录的所以信息。(3)OPENF子程序 OPENF是一个非常简单的子程序。它的作用是打开一个文件并把文件句柄保存在数据段的handle缓冲区中。(4)QUERY子程序QUERY子程

7、序的作用上查询一条记录。首先保留现场(这些操作每个子程序都基本相同,以后不在赘述)。然后分别清除界面右上方和下边的区域。打开FNAME指定的文件并保留文件句柄。将光标置于界面的下半空白部分开始处,用宏GETIN获取最多15个字符的输入(姓名),放在BUFFER1中。显示记录各字段的标题。然后用下面这段程序读出一条记录(23个字节)放在BUFFER2中,然后将BUFFER1中的内容和BUFFER2中进行比较,看是否相同。如果不同,再继续向下从文件中读出23个字节比较,循环向下,直到相同或文件结束为止。如果相同,则显示该条记录,然后关闭文件,恢复现场。(5)MODIFY子程序 MODIFY子程序的

8、功能是修改记录。 先保护现场,然后清除右上部分的记录输入区域,接着打开文件。 用FET_REC子程序获取输入的记录信息,并存入BUFFER1中。从打开的文件中读取一个记录的内容(23个字节)放在BUFFER2中。 比较记录前面的15个字节(姓名),如果不同,则读取下一个记录;如果相同,则回移一个记录的指针,回到刚才这条记录的位置(因为读取一个记录, 指针已移到下一个记录上)。将放在FUFFER1中的输入的记录内容写到刚才这条记录在文件中的位置上,从而实现此记录的修改。最后关闭程序,恢复现场。(6)DELETE子程序DELETE子程序的功能是删除一条记录。首先保留现场,清除屏幕。然后打开文件,保

9、留文件句柄。用宏GETIN获取15个字节的姓名字符,放在FUFFER1中。读取一条记录(23个字节),将其放在FUFFER2中,然后和FUFFER1中的内容进行比较,如果不同,再读取下一个记录。如果姓名相同,则把指针后移8个字符(4门课程所占空间),写入8个“0字符。关闭文件,恢复现场并退出。(7)LIST子程序LIST子程序 的作用是显示文件中的记录。首先清除记录输入区和显示区域。然后显示记录字段的标题。打开文件,保存文件句柄。读取一个记录的内容放在缓冲区BUFFER1中,并判断是否到了文件末尾,如果不是,则显示这条记录。循环读取直到文件结束。最后关闭程序,恢复现场。(8)PRINT子程序P

10、RINT子程序打开文件。读取一条记录,汇编语言提供了自定义数据结构的结构定义语句,可将不同的数据类型放在同一个数据结构中,便于处理,在本程序中的记录就采用了结构定义语句。这里读取记录也用了结构的方法。接着用DOS中断21H的5号功能,逐字打印存放在FUFFER1中的所有字符。一条记录打完后,打印回车符换行。然后用同样方法继续读取下一个记录并打印,直到文件结束为止。最后关闭文件退出。(9)COT子程序COT子程序的作用是统计各分数段学生的人数,为简化程序,作为示例,本程序只统计记录数学各分数段的人数。首先显示统计结果的标题:maths60708090前项,j-后项 ;注意cmpsb过程中si,d

11、i指针的自动变化! push cx push si push di mov cx,17;t=i,即t=前项 mov si,i lea di,stutemp rep movsb mov cx,17;i=j,si-后项,即前项=后项 mov di,i ; rep movsb mov cx,17;j=t,di-后项,即后项t lea si,stutemp rep movsb mov swapped,1 pop di pop si pop cx endm space macro ;输出空格符 push dx push ax lea dx,gap mov ah,9 int 21h pop ax pop

12、dx endm ;显示提示信息 showmsg macro n push ax push dx mov ah,9 lea dx,msg&n int 21hpop dx pop ax endm movitem macro dst,src push cx push di push si cld mov cx,17 lea di,dst lea si,src rep movsb pop si pop di pop cx endm data segment studentx student 30 dup() stutemp db 17 dup (0),$;临时保存一条item信息 studisp db

13、 19 dup(0),$ ;-定义名字 学号 分数的输入缓冲区-namepar LABEL BYTE;输入缓冲区 maxnlen db 7 namelen db ? namefld db 7 dup(?) numpar label byte maxmlen db 9 numlen db ? numfld db 9 dup(?) scopar label byte maxsco db 4 scolen db ? scofld db 4 dup(?) ;输入文件路径缓冲区 pathpar label byte pathmax db 40 pathlen db ? pathnam db 40 dup

14、(?) ae90 db 0 ae80 db 0 ae70 db 0 ae60 db 0 b60 db 0 msg_b60 db 9,9,Scores=60:$ msg_ae70 db 9,9,Scores=70:$ msg_ae80 db 9,9,Scores=80:$ msg_ae90 db 9,9,Scores=90:$ cur_i dw ? crlf db 13,10,$ titl db Students Management System,0DH,0AH, ,0DH,0AH,0DH,0AH menu1 db I(Insert the data of the students),0dh,

15、0ah ;menu menu2 db L(Browse the data of the students),0dh, 0ah menu3 db Q(Query the data of the students),0dh, 0ahmenu4 db D(Delete the data of the students),0dh, 0ahmenu5 db M(Modify the data of the students),0dh,0ahmenu7 db P(Print the data of the students),0dh, 0ahmenu8 db C(Statistics the data o

16、f the students),0dh, 0ahmenu9 db E(Exit the System),0dh, 0ah,$ msgmenu5_1 db 0DH,0AH,1-Modify name,0DH,0AH msgmenu5_2 db 2-Modify number,0DH,0AH msgmenu5_3 db 3-Modify score,0DH,0AH,$ msgmenu3_1 db 0DH,0AH,1-Search name,0DH,0AH msgmenu3_2 db 2-Search number,0DH,0AH msgmenu3_3 db 3-Search score,0DH,0

17、AH,$ mmenutip db choose a number from the menu above,0DH,0AH,$ msgprinttitle db 0DH,0AH,0DH,0AH, sno sname score ,0DH,0AH,$ gap db $ stu dw ? stustored dw 0;已写至内存中的item数 swapped db 0 sav_cnt dw ? stusaved dw 0;已存盘的item数 saveflag db 1;是否已存盘标志 errcde db 0;文件操作错误标志 endcde db 0;读文件结束标志 endaddr dw ? file

18、handle dw ? msg_titleln db -,13,10,$ msgsepln db -,0DH,0AH,$ msg02 db Please input the new student info.,13,10,$ msg03 db Name:,$ msg04 db ID:,$ msg05 db Score:,$ msg07 db Successly Saved!,13,10,$ msgdeled db Successly Deleted a item!,13,10,$ msgmoded db Successly Modified a item content!,13,10,$ ms

19、ginsed db Successly Inserted item(s)!,13,10,$ msgqforins db Insert this item?(y/n):,13,10,$ msgback db Press any key to back.$ msgexit db Press any key to exit.$ msg09 db students out of 30.,13,10,$ msg20 db There are more than 30 students.,13,10,$ msg21 db Save as:,13,10,$ msg22 db Please input the

20、 file you want to operate:,13,10,$ msg23 db Read successly!,13,10,$ msg27 db There isn,27h,t any student.,13,10,$ msgnoext db There is no such item!,13,10,$ msgnaminfid db Please input a name to find:,13,10,$ msgnuminfid db Please input a number to find:,13,10,$ msgscoinfid db Please input a score t

21、o find:,13,10,$ msgstattit db 9,9,The result of statistics is listed as follow:,13,10,$ msg_nname db Please input a new one:,13,10,$ msg_nnum db Please input a new num.:,$ msg_nsco db Please input a new score.:,$ msgqsave db The ducoment have not saved.Do you want to save it now(y/n)?,$ msg_delnamin

22、 db Please input the name you want to delete:,13,10,$ msg_modname db Please input the name field you want to modify:,13,10,$ msg_modnum db Please input the number field you want to modify:,13,10,$ msg_modsco db Please input the score field you want to modify:,13,10,$ opnmsg db *Error occured while o

23、pening file*,13,10,$ wrtmsg db *Error occured while writing file*,13,10,$ readmsg db *Error occured while reading file*,13,10,$ routemsg db *Path name is invalid*,13,10,$ data ends code segment assume cs:code,ds:data,ss:stsg,es:data main proc far start: mov ax,data mov ds,ax mov es,ax mainmenu: mov

24、AX,0600H mov CX,0000H mov DX,174FH mov BH,07 int 10H mov AH,02 ;set cursor mov BH,0 mov DX,0100H int 10H lea DX,titl ;display menu mov AH,9 int 21H showmsg _titleln lea DX,mmenutip mov AH,9 int 21H case: mov ah,0 int 16h cmp ah,17h;i je addone cmp ah,26h;l je browse cmp ah,19h;p je display cmp ah,10

25、h;q je query cmp ah,20h;d je del_interm cmp ah,2eh;c je statis cmp ah,32h;m je change cmp ah,12h;e je exit display: call display_in anykeyback jmp mainmenu query: call query_in anykeyback jmp mainmenu browse: call browse_in anykeyback jmp mainmenu addone: call insert_in anykeyback jmp mainmenu exit:

26、 call quit statis: call stat_in anykeyback jmp mainmenu del_interm: jmp delete change: call mod_in anykeyback jmp mainmenu delete: call del_in anykeyback jmp mainmenu beep: mov AH,14 mov AL,7 mov BH,0 int 10H jmp mainmenu main endp ;- browse_in proc near call near ptr clear call near ptr cursor call

27、 near ptr readall call name_sort call near ptr print ret browse_in endp ;- del_in proc near call clear call cursor call delete_in ret del_in endp ;- query_in proc near call clear call cursor call bg_search ret query_in endp ;- stat_in proc near call clear call cursor call near ptr stat ret stat_in e

28、ndp ;- insert_in proc near call clear call cursor call near ptr input call name_sort ret insert_in endp ;- display_in proc near call clear call cursor call near ptr print ret display_in endp ;- mod_in proc near call clear call cursor call print call bg_modify call name_sort ret mod_in endp ;- delete

29、_in proc near push ax push dx call print crlfm mov ah,9 lea dx,msg_delnamin int 21h call near ptr inputname call near ptr del cmp ax,-1 je qdel showmsg deled qdel: pop dx pop ax ret delete_in endp ;- bg_search proc near showmsg menu3_1 mov ah,1 int 21h;getch() crlfm cmp al,1 je q1 cmp al,2 je q2 sho

30、wmsg scoinfid lea bx,studentx+14 mov dx,3 jmp bgsear q1: showmsg naminfid call near ptr inputname lea bx,studentx mov dx,1 jmp bgsear q2: showmsg numinfid call near ptr inputnum lea bx,studentx+6 mov dx,2 bgsear: push bxpush dxcall near ptr search;search(studentx,1)cmp ax,-1 je qins showmsg printtit

31、le showmsg sepln push si mov si,ax call near ptr printline pop si jmp qque qins: showmsg qforins mov ah,01 int 21h crlfm cmp al,y jne qque call inputnum call inputsco call stor showmsg insed mov saveflag,0 qque: ret bg_search endp ;- bg_modify proc near push ax push bx push dx showmsg menu5_1;displa

32、y modify submenu mov ah,1 int 21h;getch() crlfm cmp al,1 je t1 cmp al,2 je t2 mov bx,3 call inputsco jmp cin t1: call inputname mov bx,1 jmp cin t2: mov bx,2 call inputnum cin: push bx call near ptr modify cmp ax,-1 je qmodi crlfm showmsg moded qmodi: pop dx pop bx pop ax ret bg_modify endp ;- quit

33、proc near cmp saveflag,0 je qforsav jmp qsys qforsav: call clear call cursor showmsg qsave mov ah,1 int 21h cmp al,y je savit jmp qsys savit: call save mov ah,3eh;close file mov bx,filehandle int 21h qsys: mov ax,4c00h int 21h ret quit endp ;- search proc near push bp mov bp,sp push di push bx push

34、si push cx push dx mov di,bp+6 mov dx,stustored mov bx,bp+4;bx:type mov bp,di cmp bx,1 je snam cmp bx,2 je snum mov cx,3 mov bx,cx lea ax,scofld jmp loop1 snam: mov cx,6 mov bx,cx lea ax,namefld jmp loop1 snum: mov cx,8 mov bx,cx lea ax,numfld loop1: mov si,ax mov cx,bx repe cmpsb ;连续查找匹配名字 je found

35、 ;找到跳转found add bp,17 ;把查找转到下一个名字 mov di,bp dec dh jnz loop1 ;循环查找 mov ax,-1 showmsg noext jmp qsearch found: mov ax,bp mov dx,stustored sub dx,bx mov cur_i,dx qsearch:pop dx pop cx pop si pop bx pop di pop bp ret 4 search endp ;- name_sort proc near push si push di push ax push bx push dx push cx c

36、mp stustored,1 je qsort lea bx,studentx push bx mov ax,stustored sub ax,1 mov bl,17 mul bl pop bx add bx,ax mov dx,stustored sub dx,1 ;dx:i,即循环次数 l1: mov swapped,0 sub bx,17 mov endaddr,bx push bx lea si,studentx;si:j,j=0 l2: mov cx,6 mov di,si add di,17 mov bx,di mov ax,si repe cmpsb jbe s3 exchang

37、e ax,bx s3: mov si,ax add si,17;j+ cmp si,endaddr jbe l2 pop bx cmp swapped,0 je qsort dec dx jnz l1 qsort: pop cx pop dx pop bx pop ax pop di pop si ret name_sort endp ;- del proc near push bx push di push si push cx lea bx,studentx push bx mov bx,1;search(studentx,name) push bx call near ptr searc

38、h cmp ax,-1 je nomatch mov di,ax mov si,di add si,17;si:j,di:i mov cx,stustored sub cx,cur_i movit: movitem di,si mov di,si;si:j+1 ,di:j mov dx,di add dx,17 mov si,dx loop movit mov ax,1 mov saveflag,0 sub stustored,1 nomatch: pop cx pop si pop di pop bx ret del endp ;- insert proc near push si push

39、 di push ax push bx push cx cmp stustored,0 je exi lea si,stutemp lea di,studentx mov ax,stustored mov bl,17 mul bl add di,ax mov cx,17; rep movsb inc stustored exi: pop cx pop bx pop ax pop di pop si ret insert endp ;- stor proc near push ax push bx push dx push di push si push cx cmp namelen,0 je

40、qsto cld mov ax,stustored mov bl,17 mul bl lea dx,studentx mov stu,dx add stu,ax mov di,stu lea si,namefld mov cx,6 rep movsb lea si,numfld mov cx,8 rep movsb mov cx,3 lea si,scofld rep movsb inc stustored qsto: pop cx pop si pop di pop dx pop bx pop ax ret stor endp ;- modify proc near push bp mov bp,sp push bx push dx push di push cx mov bx,bp+4 cmp bx,1 je mdnam cmp bx,2 je mdnum lea dx,studentx+14 jmp find mdnam: lea dx,studentx jmp find mdnum: lea dx,studentx+6 find: push dx push bx call near ptr search cmp ax,-1 je q

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!