⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 openfile.asm

📁 成绩数据库管理系统. 1.能够实现菜单显示、菜单选择、编辑(录入、插入、修改、删除等)、查找、显示、求总成绩、按总成绩排序(高→低)并显示、装入数据文件、数据文件存盘、退出、为数据动态分配存储空间[
💻 ASM
字号:
INCLUDE filefuc.mac
PUBLIC OPENFILES
PUBLIC INPUTSDATA
PUBLIC SEARCH
PUBLIC CLSPS
;成绩记录结构
GRADE STRUC
STUDENTNUMBER   DB 10 ;记录学生成绩学号
               DB ?
               DB 10 DUP(?)
               DB '$'
NAM            DB 6 ;记录学生姓名
               DB ?
               DB 6 DUP(?)
               DB '$'
COURSE1        DB 3 ;记录学生成绩
               DB ?
               DB 3 DUP(?)
               DB '$'
COURSE2        DB 3 ;记录学生成绩
               DB ?
               DB 3 DUP(?)
               DB '$'
COURSE3        DB 3 ;记录学生成绩
               DB ?
               DB 3 DUP(?)
               DB '$'
COURSE4        DB 3 ;记录学生成绩
               DB ?
               DB 3 DUP(?)
               DB '$'
SUM            DB 3 ;记录学生成绩总分
               DB ?
               DB 3 DUP(?)
               DB '$'
LIST           DB 3;记录学生成绩排名
               DB ?
               DB 3 DUP(?)
               DB '$'
GRADE ENDS 
;用于覆盖学生成绩记录的结构
GRADES STRUC
STUDENTNUMBER   DB 10 DUP(' ')
               DB '$'
NAM           DB 6 DUP(' ')
               DB '$'
COURSE1          DB 3 DUP(' ')
               DB '$'
COURSE2        DB 3 DUP(' ')
               DB '$'
COURSE3        DB 3 DUP(' ')
               DB '$'
COURSE4        DB 3 DUP(' ')
               DB '$'
SUM         DB 3 DUP(' ')
               DB '$'
LIST          DB 3 DUP(' ')
               DB '$'

GRADES ENDS                     
STSG SEGMENT STACK 'S'
	DW 32 DUP(?)
STSG ENDS
DATA SEGMENT
HANG DB 34
LIA  DB 3
MM   DW ?
MMS   DW ?
DATAPOS DW ?
NO GRADE<>
NOS GRADES<>	
MSG2 DB 'OPEN FILE ERROR!','$'
MSG  DB 'SOTR ERROR!'
MSG1 DB 'PLEASE INPUT:','$'
MSG3 DB 'THE PAGE IS','$'

FILENAME DB 'F:\first.txt',0
CT  EQU $-BUFFER
FILEHANDLE DW 0
CE DB ?
SAS DB 7 
               DB ?
               DB 7 DUP(?) 
PAGES DW ?
DATA ENDS
CODE SEGMENT
OPENFILES PROC far
    ASSUME CS:CODE,DS:DATA,SS:STSG
 PUSHREG
     push ds
 LOADDS DATA
 PUSH BX
 
  MOV DH,23
     MOV DL,4
   OPENFILE FILENAME,FILEHANDLE;打开文件
     cmp AL,119;判断是否打开文件失败
     JNZ ksb
     MOV DH,23
     MOV DL,4
     PUTS 2,0,MSG2,1EH
     JMP QCK
ksb: MOV AH,48H
     MOV BX,18
   
     JNZ NEX
     MOV DH,23
     MOV DL,2
     PUTS DH,DL,MSG,1EH
     JMP QCK
NEX: MOV DATAPOS,AX
     POP BX
     PUTS 24,67,MSG3,7DH
     MOV PAGES,BX
     ADD BL,49
     PUTC 24,79,BL,7DH
     MOV BX,PAGES
     MOV AX,BX
     MOV BX,340
     MUL BX
     MOV DX,AX
     MOV AH,42H
     MOV BX,FILEHANDLE
     MOV CX,0
     MOV AL,0
      INT 21H;移动文件指针到固定位置
 MOV DI,0
     MOV DH,1
     
OUTS:
     MOV DL,2
     ADD DH,2
     CMP DH,22
     JAE QCK
     READFILE 10,NO.STUDENTNUMBER,FILEHANDLE;读取文件信息
      CMP AL,0;判断是否成功读取文件
     JZ  QCK
     MOV AL,' ' 
     CMP AL,NO.STUDENTNUMBER;判断读取记录学号是否为空
     JZ  QCK
     PUTS DH,DL,NO.STUDENTNUMBER,1EH;显示文件信息
     ADD DL,13
     READFILE 6,NO.NAM ,FILEHANDLE
    
     PUTS DH,DL,NO.NAM ,1EH
     
     ADD DL,10
      READFILE 3,NO.COURSE1,FILEHANDLE
     
     PUTS DH,DL,NO.COURSE1,1EH
     ADD DL,10
      READFILE 3,NO.COURSE2,FILEHANDLE
      
     PUTS DH,DL,NO.COURSE2,1EH
     
     ADD DL,10
     READFILE 3,NO.COURSE3,FILEHANDLE
      
     PUTS DH,DL,NO.COURSE3,1EH
     ADD DL,10
      READFILE 3,NO.COURSE4,FILEHANDLE
      
     PUTS DH,DL,NO.COURSE4,1EH
     ADD DL,10
      READFILE 3,NO.SUM,FILEHANDLE
      
     PUTS DH,DL,NO.SUM,1EH
     ADD DL,10
     READFILE 3,NO.LIST,FILEHANDLE
     
     PUTS DH,DL,NO.LIST,1EH
     MOV AX,DATAPOS
     MOV ES,AX
     LEA SI,NO
     MOV CX,63
     CLD
     REP MOVSB
     ADD DI,63
     JMP OUTS
     
QCK:
     CLOSEFILE FILEHANDLE
       pop ds     
    POPREG
       
        RET
OPENFILES  ENDP
       
CODE ENDS
CODE2 SEGMENT
	  ASSUME CS:CODE2
INPUTSDATA PROC FAR;在当前矩形框输入信息
        PUSHREG
       push DS
      PUSH BX
       LOADDS DATA
       
        CURSORPOS
       MOV MM,0
OPENFILE FILENAME,FILEHANDLE
       MOV AL,DL
       CMP AL,1
       JA PPS
       CMP AL,1
       JNZ PPSS
       ADD MM,7  
       JMP PPSS
PPS:  ADD MM,10  
PPSS: MOV AL,DH

      MUL HANG
       MOV BX,AX
    
       MOV AL,DL
  
       MUL LIA
       MOV DX,AX 
   
       ADD MM,DX
      
       ADD MM,BX
    
       LEA DX,NO
       MOV AH,0AH
       INT 21H
       POP BX
       MOV AX,BX
       MOV BX,340
       MUL BX
       ADD MM,AX
       MOV MMS,CX
       MOV AH,42H
       MOV BX,FILEHANDLE
       MOV CX,0
       MOV DX,MM
       MOV AL,0
       INT 21H
       JNC AA
      
AA:
             
       MOV CL,NO+1
       XOR CH,CH
       WRITEFILE CX,NO+2,FILEHANDLE
       MOV CX,MMS
       MOV DH,CH 
       MOV DL,CL
      
      CURSOR
 CLOSEFILE FILEHANDLE
    
       pop ds
      POPREG
       RET
INPUTSDATA ENDP       
CODE2 ENDS 
CODE3 SEGMENT
	  ASSUME CS:CODE3
SEARCH PROC FAR
        PUSHREG
       PUSH DS
       LOADDS DATA
    MOV PAGES,0
    PUTS 23,0,MSG1,7DH 
     MOV DH,23
    MOV DL,13
    CURSOR  
     LEA DX,SAS
    MOV AH,0AH
    INT 21H
CHONG: MOV BX,PAGES
     ADD BL,49
     PUTC 24,79,BL,7DH
     CALL FAR PTR  CLSPS;刷新当前显示页记录为空格
     OPENFILE FILENAME,FILEHANDLE
     MOV AX,PAGES
     MOV BX,340
     MUL BX
     MOV DX,AX
     MOV AH,42H
     MOV BX,FILEHANDLE
     MOV CX,0
     MOV AL,0
     INT 21H
     MOV DL,2
     MOV DH,1
     
OUTPS:
     MOV DL,2
     ADD DH,2
     CMP DH,22
     JAE QCSK
  JIESHU:   READFILE 10,NO.STUDENTNUMBER,FILEHANDLE
      CMP AL,0
     JZ  QCSK 
    MOV AL,' ' 
     CMP AL,NO.STUDENTNUMBER
     JZ  QCSK
       READFILE 6,NO.NAM ,FILEHANDLE
      READFILE 3,NO.COURSE1,FILEHANDLE
      READFILE 3,NO.COURSE2,FILEHANDLE
       READFILE 3,NO.COURSE3,FILEHANDLE
         READFILE 3,NO.COURSE4,FILEHANDLE
       READFILE 3,NO.SUM,FILEHANDLE
       READFILE 3,NO.LIST,FILEHANDLE
       MOV AL,NO.NAM
       MOV BL,SAS+2
      CMP AL,BL;判断当前记录中姓名的第一个字符与所查询是否相同
      JNZ JIESHU;不相同则读取下一个记录
       MOV AL, NO.NAM+1
       MOV BL,SAS+3
       CMP AL,BL;判断当前记录中姓名的第二个字符与所查询是否相同
      JNZ JIESHU
       MOV AL, NO.NAM+2
       MOV BL,SAS+4
       CMP AL,BL;判断当前记录中姓名的第三个字符与所查询是否相同
      JNZ JIESHU
       MOV AL,NO.NAM+3
       MOV BL,SAS+5
       CMP AL,BL;判断当前记录中姓名的第四个字符与所查询是否相同
      JNZ JIESHU
       MOV AL, NO.NAM+4
       MOV BL,SAS+6
       CMP AL,BL;判断当前记录中姓名的第五个字符与所查询是否相同
      JNZ JIESHU
       MOV AL, NO.NAM+5
       MOV BL,SAS+7
       CMP AL,BL;判断当前记录中姓名的第六个字符与所查询是否相同
      JNZ JIESHU
     PUTS DH,DL,NO.STUDENTNUMBER,1EH
     ADD DL,13
     PUTS DH,DL,NO.NAM ,1EH
    ADD DL,10
      PUTS DH,DL,NO.COURSE1,1EH
    ADD DL,10
     PUTS DH,DL,NO.COURSE2,1EH
    ADD DL,10
      PUTS DH,DL,NO.COURSE3,1EH
    ADD DL,10
     PUTS DH,DL,NO.COURSE4,1EH
   ADD DL,10
      PUTS DH,DL,NO.SUM,1EH
   ADD DL,10
     PUTS DH,DL,NO.LIST,1EH
 JMP OUTPS
QCSK: CLOSEFILE FILEHANDLE
QQ:        MOV AH,0
     INT 16H
    CMP AH, 1
      JZ  FANHUI
     CMP AL,52
      JZ NEXTPAGE
     CMP AL,53
      JZ LASTPAGE
       JMP QQ
NEXTPAGE: CMP PAGES,2
         JZ QQ
 CALL FAR PTR CLSPS
         INC PAGES
         JMP CHONG
LASTPAGE:CMP PAGES,0
  JZ QQ
CALL FAR PTR CLSPS
 DEC PAGES
       JMP CHONG
FANHUI:
        POP DS
      POPREG
       RET 
SEARCH ENDP       
CODE3 ENDS
CODE4 SEGMENT
	  ASSUME CS:CODE3
CLSPS PROC FAR
PUSHREG
     push ds
     LOADDS DATA
     MOV DH,1
OUTMS:;用空格将当前页面记录所在位置用空格覆盖
     MOV DL,2;初始化列号
     ADD DH,2;行号加2
     CMP DH,22;判断是否到最后一行
     JAE QCKS
     PUTS DH,DL,NOS.STUDENTNUMBER,1EH;用空格将当前记录学号所在位置用空格覆盖
     ADD DL,13;列号加
    
     PUTS DH,DL,NOS.NAM ,1EH;用空格将当前记录姓名所在位置用空格覆盖
     
     ADD DL,10;列号加
     
     
     PUTS DH,DL,NOS.COURSE1,1EH;用空格将当前记录成绩所在位置用空格覆盖
     ADD DL,10;列号加
     
      
     PUTS DH,DL,NOS.COURSE2,1EH;用空格将当前记录成绩所在位置用空格覆盖
     
     ADD DL,10;列号加
     
     PUTS DH,DL,NOS.COURSE3,1EH;用空格将当前记录成绩所在位置用空格覆盖
     ADD DL,10;列号加
     
      
     PUTS DH,DL,NOS.COURSE4,1EH;用空格将当前记录成绩所在位置用空格覆盖
     ADD DL,10;列号加
     PUTS DH,DL,NOS.SUM,1EH;用空格将当前记录总分所在位置用空格覆盖
     ADD DL,10;列号加
     PUTS DH,DL,NOS.LIST,1EH;用空格将当前记录排名所在位置用空格覆盖
    JMP OUTMS
QCKS: 
     pop ds     
    POPREG
       RET 
CLSPS ENDP       
CODE4 ENDS	 	  
END OPENFILES












⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -