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

📄 sgl.txt

📁 简单的学生信息管理系统 (汇编语言课程设计程序) 一个简单的学生管理系统
💻 TXT
字号:
简单的学生信息管理系统 (汇编语言课程设计程序)
 
 
;  一个简单的学生管理系统,功能:显示报表, 插入记录,查询, 删除记录和退出。
;  学生信息有姓名,年龄,性别,身高,体重,程序中各字段长度都取为10,使用的是文件控制块(FCB)的磁盘存取方式,程序自动创建名为STUDENT.MAO的磁盘文件。
;  代码只用了300行(除去中间的空行实际只有270-280行),编程时间是一个通宵(23:30到次日5:00)。
 
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:
        SHOW    NAMES             ;Input the information
        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:  MOV     AH,1               ;Select search by which field
        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 + -