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

📄 个人档案文件管理系统(汇编课程设计).txt

📁 一个简单的个人档案文件管理系统
💻 TXT
字号:
个人档案文件管理系统(汇编课程设计)


;  一个简单的个人档案文件管理系统,功能:显示报表(L), 插入记录(I),查询(S), 删除记录(D)和退出(Q)。
;  个人档案有姓名,年龄,性别,身高,体重,程序中各字段长度都取为10,使用的是文件控制块(FCB)的磁盘存取方式,程序自动创建名为STUDENT.MAO的磁盘文件。
DATA SEGMENT  
 MYFCB LABEL BYTE                                ;file's FCB           
   FDRIVER     DB 0        
   FNAME       DB 'STUDENTS'       
   FEXT        DB 'MAO'        
   FBLOCK      DW 0        
   RECSIZE     DW 50        
   FSIZE       DW 2 DUP(?)        
   FDATE       DW ?        
   FPATH       DB 10 DUP(?)        
   RECID       DB 0        
   RECBK       DW 2 DUP(?)
   
   SEL         DB 'List  Insert   Search   Delect   Quit >>$'        
   PROMPT      DB 13,10,'Name      Age       SEX       Height    Weight $'        
   NAMES       DB 13,10,'  1. NAME   :$'        
   AGE         DB 13,10,'  2. AGE    :$'        
   SEX         DB 13,10,'  3. SEX    :$'        
   HEIGHT      DB 13,10,'  4. HEIGHT :$'        
   WEIGHT      DB 13,10,'  5. WEIGHT :$'        
   ERRMSG      DB 13,10,' *** ERROR ! ***$'        
   WHICH       DB 13,10,'SELECT A WAY(1--5) :$'        
   STRING      DB 13,10,'INPUT THE VALUE    :$'        
   NOTHIS      DB 13,10,'NO THIS STUDENT !$'        
   DELOK       DB 13,10,'THE RECORD DELET SUCCESS  !$'        
   FLAG        DB 0        
   WAY         DB ?        
   STATE       DB ?        
   VALUE       DB 10 DUP(' ')        
   PRINT       DB 13,10   
  MYDTA LABEL BYTE        
   N           DB 10 DUP(' ')        
   A           DB 10 DUP(' ')        
   S           DB 10 DUP(' ')        
   H           DB 10 DUP(' ')        
   W           DB 10 DUP(' ')                
               DB '$'
DATA ENDS

SHOW MACRO ADDR                                 
              MOV     AH,9        
              LEA     DX,ADDR        
              INT     21H
  ENDM

GETSTR MACRO ADDR  
 LOCAL EXT,CHAR,SPACE        
             MOV     BX,0
SPACE:
               MOV     &ADDR&[BX],0        
             INC     BX        
             CMP     BX,10        
             JL      SPACE        
             MOV     BX,0
CHAR:
               MOV     AH,1        
              INT     21H        
             CMP     AL,13        
             JZ      EXT        
             CMP     AL,10        
             JZ      EXT        
             CMP     BX,9        
             JG      CHAR        
             MOV     &ADDR&[BX],AL        
             INC     BX        
             JMP     CHAR
EXT:
  ENDM

CODE SEGMENT        
  ASSUME  CS:CODE,DS:DATA,ES:DATA
MAIN PROC FAR        
            PUSH    DS        
            SUB     AX,AX        
            PUSH    AX        
            MOV     AX,DATA        
            MOV     DS,AX        
            MOV     ES,AX        
            MOV     AH,1AH        
            LEA     DX,MYDTA        
            INT     21H
              JMP     INIT
MAINLOOP:
              MOV     AH,1        
            INT     21H        
            CMP     AL,' '        
            JNE     MAINLOOP
INIT: 
              MOV     AH,6                        ;Init screen
            MOV     AL,0        
            MOV     CH,0        
            MOV     CL,0        
            MOV     DH,24        
            MOV     DL,79        
            MOV     BH,7        
            INT     10H        
            MOV     AH,2        
             MOV     DH,1        
            MOV     DL,1        
            MOV     BH,0        
             INT     10H  
            SHOW    SEL                         ;Show menu And the select     
INPUT: 
              MOV     AH,0        
            INT     16H        
            CMP     AH,26H                      ;IS 'L'?
            JNZ     NEXT1        
             CALL    LIST        
            JMP     MAINLOOP
NEXT1:
              CMP     AH,17H                      ;IS 'I'?
            JNZ     NEXT2        
            CALL    INSERT        
            JMP     MAINLOOP
NEXT2:
              CMP     AH,1FH                      ;IS 'S'?
            JNZ     NEXT3        
            MOV     STATE,'S'        
            CALL    SEARCH        
            JMP     MAINLOOP
NEXT3: 
              CMP     AH,20H                      ;IS 'D'?
            JNZ     NEXT4        
            MOV     STATE,'D'        
            CALL    SEARCH        
            JMP     MAINLOOP
NEXT4:  
              CMP     AH,10H                      ;IS 'Q'?        
            JNZ     INPUT
              RET
  MAIN ENDP

LIST PROC NEAR                                    ;List the recorder of every student         
            CALL    OPENF        
            MOV     RECID,0        
            CMP     FLAG,0        
            JZ      CONTINUE        
              RET

CONTINUE:     SHOW    PROMPT
LISTLOOP:
              MOV     AH,14H                      ;Read        
            LEA     DX,MYFCB        
            INT     21H        
            CMP     AL,01        
            JNE     N1        
            JMP     FINISH
N1:
              CMP     AL,0        
            JE      N2        
            JMP     FINISH
N2:
              SHOW    PRINT       
             JMP     LISTLOOP
FINISH:
              CALL   CLOSEF        
              RET
  LIST ENDP

INSERT PROC NEAR                                  ;Insert recorder        
            CALL    OPENF        
           MOV     RECID,0        
           CMP     FLAG,0        
           JZ      READL        
              RET
READL:                                            ;Read until at the end        
              MOV     AH,14H        
           LEA     DX,MYFCB        
           INT     21H        
           CMP     AL,01        
           JE      WRITES       
            CMP     AL,0        
            JE      READL
WRITES:                                           ;Input the information 
              SHOW    NAMES                                           
           GETSTR  N        
           SHOW    AGE        
           GETSTR  A        
           SHOW    SEX        
           GETSTR  S        
           SHOW    HEIGHT       
           GETSTR  H        
            SHOW    WEIGHT        
            GETSTR  W        
            MOV     AH,15H                      ;Write in        
            LEA     DX,MYFCB        
            INT     21H        
            CALL    CLOSEF        
              RET
  INSERT ENDP

SEARCH PROC NEAR                          
           PUSH    AX        
           PUSH    BX        
           PUSH    CX        
            PUSH    DX        
           CALL    OPENF        
           MOV     RECID,0       
            CMP     FLAG,0        
            JZ      START        
              RET

START:        
            SHOW    NAMES        
            SHOW    AGE        
            SHOW    SEX        
            SHOW    HEIGHT        
            SHOW    WEIGHT        
            SHOW    WHICH
INWAY:                                            ;Select search by which field
              MOV     AH,1                                              
            INT     21H       
           CMP     AL,'1'        
           JL      INWAY        
           CMP     AL,'5'        
           JG      INWAY        
           SUB     AL,31H        
           MOV     WAY,AL        
            SHOW    STRING        
           GETSTR  VALUE                       ;Input the value to search        
           SHOW    PROMPT
CMPLOOP:                                          ;Search        
           MOV     AH,14H        
           LEA     DX,MYFCB        
           INT     21H        
           CMP     AL,01        
           JNZ     NEXT        
           JMP     EXITS
NEXT:
              CLD        
           MOV     AL,10        
           MUL     WAY        
           LEA     SI,VALUE        
           LEA     DI,N        
           ADD     DI,AX        
            MOV     CX,10        
           REPE    CMPSB        
           JNZ     CMPLOOP       
            SHOW    PRINT        
            MOV     FLAG,1        
            MOV     CL,RECID        
            CMP     STATE,'D'        
            JNE     RETURN
DEL:
              MOV     AH,14H                      ; NOTE: Delete is in the module of Search        
            LEA     DX,MYFCB        
            INT     21H        
            CMP     AL,0        
            JNZ     W_END        
            SUB     RECID,2        
            MOV     AH,15H        
            LEA     DX,MYFCB
            INT     21H       
              INC     RECID
              JMP     DEL
W_END:
              CLD
              LEA     DI,MYDTA
              MOV     CX,50
              MOV     AL,0
              REP     STOSB
              SUB     RECID,1
              MOV     AH,15H
              MOV     MYDTA,1AH
              LEA     DX,MYFCB
              INT     21H
              SHOW    DELOK
RETURN:
              MOV     RECID,CL
              JMP     CMPLOOP
EXITS:  
              CALL    CLOSEF
              CMP     FLAG,0
              JNZ     EXT
              SHOW    NOTHIS
EXT:
              MOV     FLAG,0
              POP     DX
              POP     CX
              POP     BX 
              POP     AX
              RET
  SEARCH ENDP

OPENF PROC NEAR                                   ;Open OR Create (if 'MYFCB' inexistence) 
              MOV     AH,0FH
              LEA     DX,MYFCB
              INT     21H
              OR      AL,AL
              JNZ     CREATE        
              RET
CREATE:
              MOV     AH,16H
              LEA     DX,MYFCB
              INT     21H 
              OR      AL,AL
              JNZ     SETFLAG        
              RET
SETFLAG:
              MOV     FLAG,1
              SHOW    ERRMSG        
              RET
  OPENF ENDP

CLOSEF PROC NEAR
              MOV     AH,10H
              LEA     DX,MYFCB
              INT     21H        
              RET
  CLOSEF ENDP

    CODE ENDS
      END MAIN
 
 

⌨️ 快捷键说明

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