学生成绩管理系统 汇编语言
更新时间:2023-11-09 22:00:01 阅读量: 教育文库 文档下载
- 学生成绩管理系统推荐度:
- 相关推荐
;==学生成绩管理系统==
;******************************************************************************* ;EQU STATEMENTS GO HERE StructNode equ 32 ;表达式赋值微操作equ page133 Node_name equ 0 ;类似define Node_num equ 12 Node_maths equ 18 Node_english equ 20 Node_chinese equ 22 Node_others equ 24 Node_total equ 26 Node_avg equ 28 Node_next equ 30
max_record equ 100 max_menu_index equ 9
;*******************************************************************************
;******************************************************************************* data_seg segment ;define data segment ;DATA GOES HERE buf1 DB 30 buf1_slen DB ? buf1_data DB 30 dup(?) bufname DB 20 bufname_slen DB ? bufname_data DB 20 dup(?) bufgetint DB 32 bufgetint_slen DB ? bufgetint_data DB 32 dup(?) str_menu DB 0dH, 0aH, '=====Student marks system=====', 0dH, 0aH, 0dH, 0aH DB ' 1)Add Record', 0dH, 0aH, 0dH, 0aH DB ' 2)Print All', 0dH, 0aH, 0dH, 0aH DB ' 3)Save', 0dH, 0aH, 0dH, 0aH DB ' 4)Open', 0dH, 0aH, 0dH, 0aH, 0dH, 0aH DB ' 5)Find', 0dH, 0aH, 0dH, 0aH, 0dH, 0aH DB ' 6)Delete', 0dH, 0aH, 0dH, 0aH, 0dH, 0aH DB ' 0)Exit', 0dH, 0aH DB 'Choice:$' ;Error Strings
str_error_1 DB 'Error input!', 0dH, 0aH, '$' jump_tb DW case_0 DW case_1 DW case_2 DW case_3 DW case_4 DW case_5 DW case_6 head DW ? ;表头指针 info_0 db 'input num:', '$' info_1 db 'input math:', '$' info_2 db 'input english:', '$' info_3 db 'input chinese:', '$' info_4 db 'input others:', '$' info_5 db 'input name:', '$' str_tb_head db 'Num', 9,'Name', 9, 'Maths', 9, 'English', 9, 'Chinese', 9,'Others', 9, 'Total', 9, 'Avg', 0dH, 0aH db '=================================================================', 0dH, 0aH,'$' str_tab db 9, '$' rdata db (StructNode * (max_record+1)) dup(?) ;全部结点*(100+1) rdata_p dw rdata ;下一个可用结点 rcount dw 00H ;当前已分配的结点数 newnode dw ? pnode dw ? file_name db 'c:\\student.txt', 00H file_error1 db 'Failed create file...', 0DH, 0AH, '$' file_error2 db 'Failed write file...', 0DH, 0AH, '$' file_error3 db 'Failed open the file...', 0DH, 0AH, '$' file_error4 db 'Failed read file...', 0DH, 0AH, '$' file_info_1 db 'saving the file...', 0DH, 0AH, '$' file_info_2 db 'Write to file successfully!', 0DH, 0AH, '$' file_info_3 db 'opening the file...', 0DH, 0AH, '$' file_info_4 db 'read the file successfully!', 0DH, 0AH, '$' fp1 dw ? ;文件指针 data_seg ends
;*******************************************************************************
;******************************************************************************* extdata_seg segment ;define extra data segment ;EXTRA DATA GOES HERE
extdata_seg ends
;*******************************************************************************
;******************************************************************************* stack_seg segment stack ;define extra data segment ;STACK DATA GOES HERE DB 100H dup(?) stack_seg ends
;*******************************************************************************
;******************************************************************************* program segment ;define code segment
;******************************************************************************* main proc far ;main part of program
assume cs:program, ds:data_seg, es:extdata_seg, ss:stack_seg start:
;set up stack for return push ds sub ax, ax push ax
;set DS register to current data segment mov ax, data_seg ;data_seg segment addr mov ds, ax ;into DS register mov ax, extdata_seg ;extdata_seg segment addr mov es, ax ;into ES register mov ax, stack_seg ;stack_seg segment addr mov ss, ax ;into SS register
;MAIN PART OF PROGRAM GOES HERE ;分配链表头结点 mov ax, rdata_p
mov head, ax ;当前头指针就是rdata_p add rdata_p, StructNode mov bx, head mov word ptr [bx+Node_next], 00H
lb_print_menu: ;打印菜单 lea dx, str_menu mov ah, 09H int 21H call far ptr getint cmp dx, max_menu_index ja lb_print_menu mov di, dx shl di, 1 jmp jump_tb[di] jmp lb_print_menu
case_0: ;Exit ret case_1: ;添加记录 call far ptr addrecord jmp lb_print_menu
case_2: ;打印所有记录 call far ptr print_record jmp lb_print_menu
case_3: ;保存到文件 call far ptr save_record jmp lb_print_menu
case_4: ;从文件中读取 call far ptr read_record jmp lb_print_menu
case_5: ;查找 call far ptr find_record jmp lb_print_menu
case_6: ;删除 call far ptr delete_record
jmp lb_print_menu ret ;return to DOS main endp ;end of main part of program
;*******************************************************************************
;******************************************************************************* sub1 proc near ;define subprocedure push ax push bx push cx push dx ;main port of sub procedure ;exit sub procedure pop dx pop cx pop bx pop ax ret sub1 endp ;end of subprocedure
;*******************************************************************************
;******************************************************************************* ;print CRLF crlf proc far push dx push ax mov dl, 0dH mov ah, 02H int 21H mov dl, 0aH mov ah, 02H int 21h pop ax pop dx ret crlf endp
;*******************************************************************************
;******************************************************************************* ;从键盘输入一个整数,结果保存到dx中 getint proc far ;define subprocedure push ax push bx push cx ;main port of sub procedure mov dx, offset bufgetint ;offset 偏移地址 mov ah, 0aH int 21H call far ptr crlf mov ax, offset bufgetint_data push ax ;字符串首地址 mov al, bufgetint_slen cbw ;字节转字 push ax ;字符串长度 push ax ;返回值 call far ptr decibin pop dx pop ax pop ax ;exit sub procedure pop cx pop bx pop ax ret
getint endp ;end of subprocedure
;*******************************************************************************
;******************************************************************************* ;把以十制进数形式存储在字符串中的数转成整数 ;栈中的参数:
;0 字符串首地址 ;1 字符串长度 ;2 存放结果
decibin_para_len equ 3 decibin_str1 equ word ptr[bp+4+(decibin_para_len-0)*2] decibin_str1len equ word ptr[bp+4+(decibin_para_len-1)*2] decibin_retsult equ word ptr[bp+4+(decibin_para_len-2)*2] decibin proc far
;save registers push bp mov bp, sp push ax push bx push cx push dx push si push di mov bx, 00H mov cx, decibin_str1len mov di, decibin_str1 decibin_loop1: mov al, byte ptr [di] ; di为偏移量以字节为单位 把地址送入al and al, 0fH cbw xchg bx, ax mov si, 10 mul si add bx, ax inc di loop decibin_loop1 mov decibin_retsult, bx exit_decibin: ;恢复寄存器 pop di pop si pop dx pop cx pop bx pop ax pop bp ret
decibin endp
;*******************************************************************************
;******************************************************************************* ;把bx中的数以十进制形式输出 ;输入:数据存放在bx中 binidec proc far push ax push bx push cx push dx push si mov si, 01H mov cx,10000d ;各位依次输出 call dec_div mov cx,1000d
call dec_div mov cx,100d call dec_div mov cx,10d call dec_div mov cx,1d mov si, 00H call dec_div pop si pop dx pop cx pop bx pop ax ret
binidec endp
dec_div proc near mov ax,bx mov dx,0 div cx mov bx,dx ;保留余数 mov dl,al ;商送入dl cmp si, 00H ;输出这一位 je lb1_dec_div cmp dl, 00H ;处理完毕 je exit_dec_div mov si, 00H lb1_dec_div: add dl,30h mov ah, 02H int 21H
exit_dec_div: ret
dec_div endp
;*******************************************************************************
;******************************************************************************* addrecord proc far ;define subprocedure push ax push bx push cx push dx push si push di push es ;main port of sub procedure mov ax, rdata_p ;当前指针移入ax mov newnode, ax ;再移入newnode存储单元中
add rdata_p, StructNode ;相当于指针加一 add rcount, 1 ;计数器加一
mov bx, ax ;当前指针(newnode所指)移入bx mov cx, 00H ;计算总分
mov word ptr [bx+Node_next], 00H ;Node_next置 lea dx, info_0 mov ah, 09H int 21H
call far ptr getint call crlf
mov word ptr [bx+Node_num], dx lea dx, info_1 mov ah, 09H int 21H
call far ptr getint call crlf add cx, dx
mov word ptr [bx+Node_maths], dx lea dx, info_2 mov ah, 09H int 21H
call far ptr getint call crlf add cx, dx
mov word ptr [bx+Node_english], dx lea dx, info_3 mov ah, 09H int 21H
call far ptr getint call crlf add cx, dx
mov word ptr [bx+Node_chinese], dx lea dx, info_4 mov ah, 09H int 21H
call far ptr getint call crlf add cx, dx
mov word ptr [bx+Node_others], dx
mov word ptr [bx+Node_total], cx ;计算平均成绩 mov ax, cx cwd
mov cx, 4 div cx
mov word ptr [bx+Node_avg], ax
lea dx, info_5 mov ah, 09H int 21H ;输入姓名 lea dx, bufname mov ah, 0aH int 21H call far ptr crlf mov ax, ds mov es, ax mov al, bufname_slen cbw mov bx, ax mov byte ptr bufname_data[bx], '$' lea si, bufname_data mov di, newnode mov cx, bx inc cx cld rep movsb ;add the new node to the list mov di, newnode ;newnode现在存放的是当前项的地址 mov si, head ;head存放的是头指针 mov ax, word ptr [si+Node_next] mov word ptr [di+Node_next], ax ;当前加入项指向上次项(head指向的送当前项指针Node_next) mov word ptr [si+Node_next], di ;头指针指向当前加入项(当前项的地址送head) ;exit sub procedure pop es pop di pop si pop dx pop cx pop bx pop ax ret
addrecord endp ;end of subprocedure
;*******************************************************************************
;******************************************************************************* print_record proc far ;define subprocedure push ax push bx push cx push dx
pop cx loop loop1_read_record
read_record_ok: lea dx, file_info_4 mov ah, 09H int 21H jmp read_record_close_file
read_record_error1: lea dx, file_error3 mov ah, 09H int 21H jmp exit_read_record
read_record_error2: lea dx, file_error4 mov ah, 09H int 21H jmp exit_read_record
read_record_close_file: mov ah, 3eH mov bx, fp1 int 21H
exit_read_record: ;exit sub procedure pop di pop si pop dx pop cx pop bx pop ax ret
read_record endp ;end of subprocedure
;******************************************************************************* find_record proc far push ax push bx push cx push dx push si push di lea dx, info_0 mov ah, 09H int 21H call far ptr getint call crlf mov si, head mov di, head
find_again: mov di,word ptr [di+Node_next] cmp dx ,word ptr [di+Node_num] ;第n个结点的学号 je modify_record jmp find_again modify_record: mov bx, di ;当前指针(newnode所指)移入bx mov cx, 00H ;计算总分 lea dx, info_0 mov ah, 09H int 21H call far ptr getint call crlf mov word ptr [bx+Node_num], dx lea dx, info_1 mov ah, 09H int 21H call far ptr getint call crlf add cx, dx mov word ptr [bx+Node_maths], dx lea dx, info_2 mov ah, 09H int 21H call far ptr getint call crlf add cx, dx mov word ptr [bx+Node_english], dx lea dx, info_3 mov ah, 09H int 21H call far ptr getint call crlf add cx, dx mov word ptr [bx+Node_chinese], dx lea dx, info_4 mov ah, 09H int 21H call far ptr getint call crlf add cx, dx mov word ptr [bx+Node_others], dx mov word ptr [bx+Node_total], cx ;计算平均成绩 mov ax, cx cwd mov cx, 4 div cx mov word ptr [bx+Node_avg], ax
pop di pop si pop dx pop cx pop bx pop ax ret
find_record endp
;******************************************************************************* delete_record proc far push ax push bx push cx push dx push si push di lea dx, info_0 mov ah, 09H int 21H call far ptr getint call crlf mov si, head mov di, head
go_again: mov di,word ptr [di+Node_next] cmp dx ,word ptr [di+Node_num] ; je de_record jmp go_again
de_record: mov si, word ptr[si+Node_next] mov ax,word ptr[si+Node_num] mov word ptr[di+Node_num],ax mov ax,word ptr[si+Node_name] mov word ptr[di+Node_name],ax mov ax,word ptr[si+Node_name+2] mov word ptr[di+Node_name+2],ax mov ax,word ptr[si+Node_name+4] mov word ptr[di+Node_name+4],ax mov ax,word ptr[si+Node_name+6] mov word ptr[di+Node_name+6],ax mov ax,word ptr[si+Node_name+8] mov word ptr[di+Node_name+8],ax mov ax,word ptr[si+Node_name+10] mov word ptr[di+Node_name+10],ax mov ax,word ptr[si+Node_maths] mov word ptr[di+Node_maths],ax mov ax,word ptr[si+Node_english] mov word ptr[di+Node_english],ax mov ax,word ptr[si+Node_chinese]
第n个结点的学号 mov word ptr[di+Node_chinese],ax mov ax,word ptr[si+Node_others] mov word ptr[di+Node_others],ax mov ax,word ptr[si+Node_total] mov word ptr[di+Node_total],ax mov ax,word ptr[si+Node_avg] mov word ptr[di+Node_avg],ax mov si,head mov di,head mov di,word ptr [di+Node_next] mov ax,word ptr [di+Node_next] mov word ptr[si+Node_next],ax sub rcount, 1 pop di pop si pop dx pop cx pop bx pop ax ret
delete_record endp
;*******************************************************************************
program ends ;end of code segment
;******************************************************************************* end start ;end of assembly






正在阅读:
学生成绩管理系统 汇编语言11-09
策划书:旅游商品开发赛的策划方案04-14
痛经的中医护理常规04-23
高一英语知识点梳理M2U2(1)08-24
从那天开始作文600字02-04
湘江水资源问题的现状和保护 - 图文06-12
妈妈的酸辣汤作文500字07-16
2017-2022年中国切割机市场专项调研报告 (目录)08-28
苏教版二年级数学上册第五、六单元测试题08-19
领航房地产开发有限公司章程01-30
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 汇编语言
- 管理系统
- 成绩
- 学生
- 医药行业 制度 市场部管理制度
- 接待手册(已排版)
- 2010年度企业博士集聚计划资助名单 - 23-05
- 人力资源和社会保障业务知识测试题
- 2012-2013大学物理B1半期考试卷(西南科技大学)
- 30米箱梁运输方案
- 实验小学预学单
- 有机化学习题及答案
- 最新北师大版小学语文六年级上册公开课教学设计穷人
- 《天下有道,丘不与易也》(教师版导学案)
- 郑州大学药用植物学试题答案
- 汉译英作业
- 分析化学习题集
- 古今绝美绝配的对偶佳句精选
- 2017届广东省湛江一中高三第一次综合检测英语试题及答案
- 2014年春七年级英语下册导学案Unit 8(原创)
- 2015增值税练习题 附答案
- 2019年一年级数学上册导学案第3单元 1~5的认识和加减法第11课时 0的减法
- 全国建设工程招标评标办法
- 综合自然地理实习报告 - 图文