学生成绩管理系统

时间:2024.4.7



课程设计任务书

学生姓名:      专业班级:      

指导教师:      工作单位:  自动化学院      

题    目:    学生成绩管理系统设计   

初始条件:

掌握8086汇编语言程序设计方法,设计一个学生成绩管理系统,程序运行后通过键盘控制实现各种功能。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1. 程序运行后,键盘输入不同进行不同处理:

(1)‘E’表示退出,‘L’表示浏览;

(2)‘I’表示插入,‘Q’表示查询,‘D’表示删除,‘M’表示修改,‘C’表示统计各分数段人数。

2. 撰写课程设计说明书。内容包括:摘要、目录、正文、参考文献、附录(程序清单)。正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。

时间安排:    

12月26日----- 12月28日    查阅资料及方案设计

12月29日----- 1 月2日         编程

 1月 3 日----- 1 月7日         调试程序

 1月 8 日----- 1 月9日          撰写课程设计报告

指导教师签名:                      年    月    日

系主任(或责任教师)签名:          年    月    日


目 录

摘 要.............................................................................................................................. 1

1 需求说明................................................................................................................... 2

2 设计说明................................................................................................................... 2

2.1 开发平台与开发工具.................................................................................... 2

2.2 基本原理........................................................................................................ 2

2.3 模块说明........................................................................................................ 3

2.3.1 浏览模块.............................................................................................. 3

2.3.2 插入模块.............................................................................................. 4

2.3.3 查询模块.............................................................................................. 4

2.3.4 修改模块.............................................................................................. 4

2.3.5 删除模块.............................................................................................. 4

2.3.6 分数段统计模块.................................................................................. 4

2.3.7 退出模块.............................................................................................. 4

3 算法设计................................................................................................................... 5

4 程序编译与运行....................................................................................................... 6

5 收获、体会与总结................................................................................................... 8

附录 完整程序............................................................................................................ 10

本科生课程设计成绩评定表...................................................................................... 40

 

 

 

 

 


摘 要

   

学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对学校的决策者和管理者来说都是至关重要的。学生管理系统由于具有查询迅速、方便、存储量大、保密性好的功能,因此被广泛采用。

此次学生成绩管理系统通过汇编语言进行编写,利用一些基本的语句和过程化的定义语言完成主程序对子程序的调用,从而实现管理系统的浏览、退出、查询、插入、修改、删除、退出等7个基本功能,并利用emu8086完成系统的仿真设计。

关键词:学生成绩管理系统 汇编 功能 仿真

 

 

 

                                     

学生成绩管理系统设计

1      需求说明

   为了方便查找学生成绩信息,突破传统的手工处理方式,跟上现代化教学的要求,所以特开发一套对学生成绩进行管理的系统,做到信息的即时化,准确化。     本次课设以此为基础,利用课堂所学微机原理知识,用汇编语言编写一个学生成绩管理系统,实现基本的学生成绩管理。功能主要包括建立成绩档案,添加学生成绩记录(包括学号、姓名、性别、成绩)。本成绩管理系统应该具有最基本的退出和浏览功能,并在此基础上能按学号进行插入、查询、删除和修改等部分功能。同时本系统运行的所有信息最终用文件保存。

本系统在完成上述功能的基础上,对管理系统的输入和输出界面进行友好型设计,界面尽量美观,同时进行一些必要的提示。

2      设计说明

2.1     开发平台与开发工具

该程序使用基于DOS、BIOS操作系统的16位实模式汇编语言编写,使用的编译器为emu8086,调试工具为DOS下的debug.exe程序。

2.2    基本原理

本系统的设计是按照主程序调用子程序的方法来实现的。其中主程序完成菜单的实现,子程序完成一个独立功能的实现。

本程序使用了DOS系统功能调用(INT 21H),程序中用到的系统功能调用如下。

表1-1 系统的功能调用

2.3     模块说明

该程序按照要实现的功能一共分为七大模块:分别完成学生成绩的浏览、学生成绩的插入、学生成绩的查询、学生成绩的修改、学生成绩的删除、学生成绩各分数段的人数统计以及管理系统的退出。

2.3.1    浏览模块

设计List(浏览)子程序时,先打开文件,然后读一个记录,并通过过程化语言调用SHOW_STU将其显示到屏幕上,若文件指针没有到达文件尾,则继续读记录并显示,当文件指针到达文件尾时,若没有学生信息,在屏幕上进行提示并关闭文件返回主程序。

2.3.2    插入模块

设计Insert(插入)子程序时,先打开文件SCORE.TXT,并置文件指针到文件尾,然后过程化语言调用子程序接受用户的输入,再把学生的输入写入文件,最后关闭文件返回主程序。

2.3.3    查询模块

子程序时,先打开文件,通过过程化调用,先判断学号是否合法,合法后再查找学生的学号,然后读文件记录,并同要查找的学生学号比较,若相同则输出,若不同则继续读文件记录,最后显示查询结果,关闭文件返回程序。

2.3.4    修改模块

设计Modify(修改)子程序时,先打开文件SCORE.TXT,通过过程化定义语言调用子程序得到要修改的记录,然后读文件中的记录,并与用户输入的记录作比较(只比较记录中的名字部分),若不同则读下一个记录,若相同则将文件指针后退20个字符(一个记录为20个字符的长度),然后把用户输入的记录写入文件,最后关闭文件返回主程序。

2.3.5    删除模块

    设计Delete(删除)子程序时,先打开文件,再过程化定义语言得到要删除的学生的学号,然后读文件中的记录,直到其记录的学号与所输入的学号相同为止,把文件指针后退5个字符,关闭文件返回主程序。

2.3.6     分数段统计模块

设计Count(统计)子程序,先打开文件,然后读记录,比较记录的第16个字符(数学成绩的高位)并统计,直到文件指针到达文件尾,最后关闭文件调用宏SHOW_EXIT显示统计结果,返回主程序。

2.3.7    退出模块

设计Exit(退出)子程序,先清屏,然后通过过程化定义语言调出初始源代码段中编写的人性化退出界面,借助DOS操作系统系统下的退出功能关闭成绩管系统。

3      算法设计

主程序运行时的汇编程序:

START: MOV AH,7        

      INT 21H

      CMP AL,'i'         

      JNZ ML

      CALL INSERT

RETU:  JMP MAIN 

ML:      CMP AL,'l'

      JNZ MQ

      CALL LIST

      JMP MAIN

MQ:      CMP AL,'q'

      JNZ ME

      CALL QUERY

      JMP MAIN 

MC:      CMP AL,'c'

      JNZ MM

      CALL COUNT

      JMP MAIN

MM:     CMP AL,'m'

      JNE MD

      CALL MODIFY

      JMP MAIN

MD:      CMP AL,'d'

      JNZ ME

      CALL DELETE

      JMP MAIN 

ME:      CMP AL,'e'

      CALL EXIT

      JMP MAIN

     

4      程序编译与运行

程序共一个可执行文件,通过emu8086编译运行后在屏幕上显示主菜单,输入不同按键程序执行的结果如下图所示。

图4.1 系统主菜单

图4.2 系统浏览功能

图4.3 系统分数统计功能

图4.4 系统插入功能

图4.5系统修改功能

图4.6 系统删除功能

图4.7 系统退出功能

5      收获、体会与总结

通过这段时间的编程,我增加了对汇编知识的了解,能更加熟练得编写汇编程序了。通过查阅资料和与同学的交流,更加深了我对汇编知识的兴趣,尤其是美化界面那部分编程,让人不自觉的就产生一种自己是伟大的系统开发者,我做的是一个很伟大的任务,尽管我知道自己编出的程序在那些“大牛”看来不值一提,但当数据如我所愿的在屏幕上显示出来时,那种喜悦之情很难用言语表达。

    如果有时间的话这个程序还可以增加很多功能,比如记录学生更多科目的分数并将平均分显示出来,单科成绩的查询和排序,复制粘贴功能,加入网格及声音等,虽然基本功能都实现了但还有许多值得改进地方。

在这次的课程设计中,除了使我对所学知识的了解更加巩固和深入外,我收获更多的是对我思维的考验和动手能力的锻炼。像这种实践性比较强的设计过程都比较复杂,需要时刻保持清晰的思路,否则出错了还得从头找起。与此同时,也是对我动手编程能力的一大考验和提高,我不再停留在死记硬背的阶段,开始通过编写编译程序发现问题来进一步掌握汇编语言,通过debug来了解汇编语言与高级语言的联系、寄存器与操作数的联系等问题。

这次设计我受益匪浅,它让我从传统的被动授学转变为主动求学,使我在与同学老师的交流中、书本网络资源的学习中渐渐积累了终身受益的不菲的收获。

参考文献

[1]     彭虎,周佩玲.微机原理与接口技术.北京:电子工业出版社,2008

[2]     周明德.微机原理与接口技术.北京:人民邮电出版社,2007

[3]     杨立.微机原理与接口技术. 天津:天津大学出版社,2010

[4]     张坤.汇编语言实验教程.北京:清华大学出版社,2008

[5]     佘朝坤.IBM-PC汇编语言程序设计.北京:机械工业出版社,2008

[6]     陈慈发.微型计算机技术.北京:科学出版社,2010

[7]     孙德文.微型计算机技术.北京:高等教育出版社,2010

附录 完整程序

DATA SEGMENT

TIPS0 DB 'Tips:',0DH,0AH,'$'                           ;插入提示信息

TIPS1 DB '          SEX: 1:male   0:female',0DH,0AH,'$'

TIPS3 DB 'Please input ID:$'                          ;查询提示信息

TIPS4 DB '  Please enter "r" to return$'

TIPS5 DB '  Please enter "r" to return,"c" to continue$'

ID    DB '   ID: $'

NAM   DB ' NAME: $'

SEX   DB '  SEX: $'

SCORE DB 'SCORE: $'

FID   DW ?                                 ;文件号

SEXM  DB 'male     $'

SEXF  DB 'female   $'                                    

COUNT_A DB '         9 0 ~ 100: $'          ;统计提示信息

COUNT_B DB '         8 0 ~ 8 9: $'

COUNT_C DB '         7 0 ~ 7 9: $'

COUNT_D DB '         6 0 ~ 6 9: $'

COUNT_E DB '         0 0 ~ 5 9: $'

AB      DB    5 DUP('0')                      ;统计结果

mess1   DB '             *                 The Student Grade Management System              *',0ah,0dh,'$'

mess2   DB '       *      this is main menu                                           *', 0ah,0dh,'$'

mess3   DB '       *      insert  (i)                                                 *',0ah,0dh,'$'

mess4   DB '       *      modify  (m)                                                 *',0ah,0dh,'$'

mess5   DB '       *      delete  (d)                                                 *',0ah,0dh,'$'

mess6   DB '       *      query   (q)                                                 *',0ah,0dh,'$'

mess7   DB '       *      count   (c)                                                 *',0ah,0dh,'$'

mess8   DB '       *      exit    (e)                                                 *',0ah,0dh,'$' 

mess9   DB '        * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * $'

mess10  DB '       *      list    (l)                                                 *',0ah,0dh,'$'

mess11  DB '       *      please chose(l/i/m/d/q/c/e):                              *',0ah,0dh,'$'

ID_LENGTH EQU 4                            ;配置信息

NAM_LENGTH EQU 20

SEX_LENGTH EQU 1                      ;性别请勿更改位数

SCORE_LENGTH EQU 5

STU_LENGTH DW ?                           ;每条学生信息总长度

STU_LENGTH_ADD1 DW ?

NAM_SEX_SCORE_LENGTH DW ?

DEL DB 30 DUP (' ')     ;清空信息用

DEL_DONE DB '   Delete success !$'

ERR   DB '  Data error,Please input again!$'    ;错误提示信息

NOSTU DB '   Sorry,there is no this studnet!$'

ERR_NO  DB '  No student information!$'

ERR_SAME DB '   There is the same ID,please input again!$'

NEWF DB 0DH,0AH,0DH,0AH,'    Warning: this operation will empty all your data!',0DH,0AH,0DH,0AH,'    Will you continue? (y:empty,other key:return):$'

FPATH DB 'c:\score.txt',0                     ;数据库文本

STR   DB 50 DUP ('?')                     ;缓冲区str

STR0  DB 50 DUP ('?')                   ;缓冲区str0

ENTER DB '   $'                              ;空格

TMP DW 0                                     ;是否为空标志信息

SC DB 0                                        ;分数保护处用

BYE DB '                      Thanks for use our program!',0DH,0AH,0DH,0AH,'                               Bye~ Bye~$'

BY0 DB '                    Writer:$'

BY1 DB '                         38 (li  Fei  Xing)$'

BY2 DB '                         31 (Cheng    kang)$'

BY3 DB '                         15 (Chen Chu Ming)$'

DATA ENDS

SET_P1  MACRO                            ;设定光标位置A

        MOV AH,02H

        MOV DH,02

        MOV DL,03

        MOV BH,0

        INT 10H

        ENDM

SET_P3  MACRO

       MOV AH,02H                            ;设定光标的位置B  

       MOV DH,14                               

       MOV DL,43

       MOV BH,0                        ;当前这页

       INT 10H

       ENDM

TAB MACRO                                       ;换行

       MOV AH,2

       MOV DL,0DH

       INT 21H

       MOV DL,0AH

       INT 21H

ENDM

CREATEF MACRO FILE_ID,FILE_PATH         ;创建文件([传入]文件号、[传入]文件路径)

       MOV AH,3CH

       MOV CX,00H                               ;普通文件

       LEA DX,FILE_PATH

       INT 21H

       MOV FILE_ID,AX

ENDM

OPENF   MACRO FILE_ID,FILE_PATH         ;打开文件([传入]文件号、[传入]文件路径)

       MOV AL,2                                   ;读写文式打开

       MOV AH,3DH

       LEA DX,FILE_PATH

       INT 21H

       MOV FILE_ID,AX

ENDM

CLOSEF  MACRO FILE_ID                         ;关闭文件([传入]文件号)

       MOV BX,FILE_ID

       MOV AH,3EH

       INT 21H

ENDM

READF MACRO FILE_ID,TEMP,NUM            ;读文件([传入]文件号、[传入]缓冲区、[传入]字节数)

       MOV BX,FILE_ID

       LEA DX,TEMP

       MOV AX,NUM

       MOV CX,AX

       MOV AH,3FH

       INT 21H

ENDM

WRITEF  MACRO FILE_ID,TEMP,NUM        ;写文件([传入]文件号、[传入]缓冲区、[传入]字节数)

       MOV BX,FILE_ID

       MOV CX,NUM

       LEA DX,TEMP[2]

       MOV AH,40H

       INT 21H

ENDM

MOVEF   MACRO FILE_ID,STYPE,HIGEC,LOWD     ;移动文件指针([传入]文件号、[传入]移动方式、[传入]偏移字节(高位)[传入]偏移字节(低位))

       MOV BX,FILE_ID

       MOV AH,42H

       MOV AL,STYPE                 ;尾+偏移量方式

       MOV CX,HIGEC                 ;偏移字节(高位)

       MOV DX,LOWD                 ;偏移字节(低位)

       INT 21H

ENDM

INPUT   MACRO BUFFER,LENGTH             ;输入字符串([传入]字符串名、[返回]字符串长度)

       MOV AH,10

       LEA DX,BUFFER

       INT 21H

       MOV al,BUFFER[1]

       MOV LENGTH,al

ENDM

SHOW MACRO BUFFER                         ;显示字符串([传入]字符串名)

       MOV AH,9

       LEA DX,BUFFER

       INT 21H

ENDM

STAK SEGMENT STACK

DB 200 DUP ('?')

STAK ENDS

;=========================================

;     代码段

;=========================================

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

SHOW_EXIT PROC NEAR         ;提示按r退出

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX

       TAB

       TAB

       SHOW TIPS4

EXIT_1:  MOV AH,7

       INT 21H

       CMP AL,'r'

       JNZ EXIT_1

       POP DX

       POP CX

       POP BX

       POP AX

       RET

SHOW_EXIT ENDP

SHOW_EC PROC NEAR            ;询问退出还是继续

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX

       TAB

       TAB

       SHOW TIPS5

EXIT_2:  MOV AH,7

       INT 21H

       CMP AL,'r'

       JZ EXIT_4

       CMP AL,'c'

       JNZ EXIT_2

       CALL INSERT

EXIT_4:  POP DX

       POP CX

       POP BX

       POP AX

       RET

SHOW_EC ENDP

SHOW_ERR PROC NEAR          ;显示出错信息子程序

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX

       TAB

       TAB

       SHOW ERR

       TAB

       TAB

       POP DX

       POP CX

       POP BX

       POP AX

       RET

SHOW_ERR ENDP

RE_TMP PROC NEAR         ;用空格初始化缓冲区子程序

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX

       MOV CX,50

       MOV BX,1

RE:  INC BX

       MOV STR[BX],' '

       LOOP RE

       POP DX

       POP CX

       POP BX

       POP AX

       RET

RE_TMP ENDP

CLEAR  PROC NEAR                           ;清屏

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX                     

       MOV AL,0                         ;上滚行数

       MOV CL,0                         ;上滚窗口左上角的列号为0

       MOV CH,0                         ;上滚窗口左上角的行号为0

       MOV DH,24                        ;上滚窗口右上角的行号为24

       MOV DL,79                        ;上滚窗口右上角的列号为79

       MOV BH,14                        ;空白行的属性

       MOV AH,6                         ;入口参数

       INT 10H

       SET_P1

       POP DX

       POP CX

       POP BX

       POP AX

       RET

CLEAR  ENDP  

SHOW_STU PROC NEAR                        ;显示学生信息子程序

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX

      

       SHOW ID                    ;ID

       MOV CX,ID_LENGTH

       MOV BX,-1

SH_ID:   INC BX

       MOV DL,STR0[BX]

       MOV AH,2

       INT 21H

       LOOP SH_ID

      

       SHOW ENTER

       SHOW NAM         ;NAME

       MOV CX,NAM_LENGTH

       MOV BX,ID_LENGTH

       DEC BX

SH_NAME:INC BX

       MOV DL,STR0[BX]

       MOV AH,2

       INT 21H

       LOOP SH_NAME

      

       SHOW ENTER

       SHOW SEX          ;SEX

       MOV BX,ID_LENGTH

       ADD BX,NAM_LENGTH

       MOV DL,STR0[BX]

       CMP DL,'1'                                 ;  1显示male,  0显示female

       JNZ SEX_F

       SHOW SEXM

       JMP NN

SEX_F:   SHOW SEXF

             

NN: SHOW ENTER

       SHOW SCORE             ;SCORE

       MOV CX,SCORE_LENGTH

       MOV BX,ID_LENGTH

       ADD BX,NAM_LENGTH

SH_SCORE:INC BX

       MOV DL,STR0[BX]

       MOV AH,2

       INT 21H

       LOOP SH_SCORE

      

       POP DX

       POP CX

       POP BX

       POP AX

       RET

SHOW_STU ENDP

;====================以下插入(insert)子程序================

INSERT PROC NEAR

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX     

       TAB

        CALL CLEAR                ;清屏     

       SHOW TIPS0                        ;显示提示信息

       SHOW TIPS1

       TAB

       TAB

                                  

       OPENF FID,FPATH                     ;打开文件

             

IN_ID:    SHOW ID                            ; 学号          

       INPUT STR,bl                          ;向缓冲区输入ID

       CMP bl,ID_LENGTH                ;看ID是否合法

       JZ L1

       JNZ ERR_ID

ERR_SA:                                    ;错误处理

       TAB

       TAB

       SHOW ERR_SAME

       TAB

       TAB

       JMP IN_ID

ERR_ID:

       TAB

       TAB

       CALL SHOW_ERR

       TAB

       TAB

       JMP IN_ID

L1:                                              ;ID判断只能为数字

       MOV CX,ID_LENGTH

       LEA SI,STR+2

LN:  MOV AL,BYTE PTR[SI]

          CMP AL,'0'

          JB   ERR_ID

          CMP  AL,'9'

          JA   ERR_ID

          INC SI

          LOOP LN

       MOVEF FID,0,0,0                       ;指针移到文件首

IA: 

       MOVEF FID,1,0,5       

      

IB:   READF FID,STR0,STU_LENGTH      ;读取学生信息

       CMP AX,0                                ;文件是否结束

       JNZ IL1 

       JMP IC                                    ;没有重复学号,可以插入

IL1: LEA SI,STR0

       LEA DI,STR

       INC DI

       DEC SI

       MOV CX,ID_LENGTH

IL2: INC SI

       INC DI

       MOV AL,BYTE PTR [DI]

       CMP AL,BYTE PTR [SI]

       JNZ IA                                ;不符合条件读取下一个同学信息

       LOOPZ IL2          

       JMP ERR_SA                       ;有重复学号

      

IC:   MOVEF FID,2,0,5

       WRITEF FID,STR,ID_LENGTH    ;数据合法则写入数据

       TAB

IN_NAM:       SHOW NAM                ;姓名

       CALL RE_TMP                       ;初始化缓冲区

       INPUT STR,BL

       ADD BL,2                            ;去掉回车

       MOV BH,0           

       MOV SI,BX

       MOV STR[SI],' '

       SUB BL,2

       CMP BL,NAM_LENGTH

       JNA L2

ERR_NAM:

       CALL SHOW_ERR

       JMP IN_NAM

      

L2:  CMP STR[2],' '                       ;姓名第一个字符不为空

       JZ ERR_NAM

       CMP STR[2],'z'

       JA ERR_NAM

       CMP STR[2],'A'

       JB ERR_NAM

       CMP STR[2],'a'

       JNB III

       CMP STR[2],'Z'

       JA ERR_NAM     

       CMP STR[2],'A'

       JB ERR_NAM

      

III:  MOV CX,NAM_LENGTH

       MOV BX,2           

II0:  INC BX

       DEC CX

       CMP STR[BX],'z'

       JA ERR_NAM

       CMP STR[BX],' '

       JB ERR_NAM

       CMP STR[BX],'a'

       JNB II0

       CMP STR[BX],'Z'

       JA ERR_NAM     

       CMP STR[BX],'A'

       JNB II0

       CMP STR[BX],' '

       JNZ ERR_NAM    

       CMP CX,0

       JNZ II0

      

       WRITEF FID,STR,NAM_LENGTH

       TAB

      

IN_SEX: SHOW SEX          ;性别

       CALL RE_TMP

       INPUT STR,BL

       ADD BL,2                 ;去掉回车

       MOV BH,0

       MOV SI,BX

       MOV STR[SI],' '

       SUB BL,2

       CMP BL,SEX_LENGTH

       JNZ ERR_SEX

       MOV BL,STR[2]

       CMP BL,'1'

       JZ L4

        CMP BL,'0'

       JZ L4

ERR_SEX:

       CALL SHOW_ERR

       JMP IN_SEX

      

L4:  WRITEF FID,STR,SEX_LENGTH

       TAB

IN_SCORE:

       SHOW SCORE

       CALL RE_TMP

       INPUT STR,BL

       MOV SC,BL                      ;BL保护

       ADD BL,2                         ;去掉回车

       MOV BH,0

       MOV SI,BX

       MOV STR[SI],' '

       SUB BL,2

       CMP BL,SCORE_LENGTH         ;分数最多4位

       JB L5

ERR_SCORE:

       CALL SHOW_ERR

       JMP IN_SCORE

      

L5:  MOV CX,BX                  ;分数只能是数字和.

       MOV BX,2

L6:  CMP STR[BX],'0'

       JNB L7                            ;>=0

       CMP STR[BX],'.'

       JNZ ERR_SCORE

       JZ L8

L7:  CMP STR[BX],'9'                ;<=9

       JA ERR_SCORE

       INC BX

       LOOP L6

L8:  MOV BL,SC

       CMP BL,4                      ;分数(0~100),支持一位小数

       JNZ L9

       CMP STR[4],'.'

       JNZ ERR_SCORE

       JMP LW

L9:  CMP BL,3

       JNZ L10

       CMP STR[3],'.'

       JZ LW

       CMP STR[2],'1'

       JNZ ERR_SCORE

       CMP STR[3],'0'

       JNZ ERR_SCORE

       CMP STR[4],'0'

       JNZ ERR_SCORE

       JMP LW

L10: CMP BL,2

       JNZ L11

       CMP STR[2],'.'

       JZ ERR_SCORE

       JMP LW

L11: CMP STR[2],'.'

       JZ ERR_SCORE

LW:

       WRITEF FID,STR,SCORE_LENGTH

       TAB

       CLOSEF FID                            ;关闭文件

       CALL SHOW_EC

       POP DX

       POP CX

       POP BX

       POP AX

       RET

INSERT ENDP

;================以下是查询(query)子程序================

QUERY PROC NEAR

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX

        CALL CLEAR

       OPENF FID,FPATH                        ;打开文件

IN_ID1:  SHOW TIPS3                       ;显示提示信息            

       INPUT STR,BL                           ;向缓冲区STR输入ID

       CMP BL,ID_LENGTH                  ;看ID是否合法

       JZ QL1

QERR_ID:                                      ;错误处理

       CALL SHOW_ERR

       JMP IN_ID1

A:    MOVEF FID,1,0,5

      

B:    READF FID,STR0,STU_LENGTH      ;读取学生信息

       CMP AX,0                                ;文件是否结束

       JNZ QL1                     

QL3:       TAB

       TAB                               ;文件结束,没有该学生信息

       SHOW NOSTU

       JMP C

QL1:       LEA SI,STR0

       LEA DI,STR

       INC DI

       DEC SI

       MOV CX,ID_LENGTH

QL2:       INC SI

       INC DI

       MOV AL,BYTE PTR [DI]

       CMP AL,BYTE PTR [SI]

       JNZ A                               ;不符合条件读取下一个同学信息

       LOOPZ QL2

      

       TAB

       TAB                               ;符合条件显示

       CALL SHOW_STU      

       JMP C

      

C:    CLOSEF FID

       TAB

       TAB

       SHOW TIPS5                    ;询问退出还是继续

Q_2:       MOV AH,7

       INT 21H

       CMP AL,'r'

       JZ Q_4

       CMP AL,'c'

       JNZ Q_2

       CALL QUERY

Q_4:       POP DX

       POP CX

       POP BX

       POP AX

       RET

QUERY ENDP

;==============以下是浏览(list)子程序==================

LIST PROC NEAR

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX     

       CALL CLEAR

       MOV AX,0

       MOV TMP,AX                             ;是否为空标志清0      

       OPENF FID,FPATH                        ;打开文件

       TAB

D:    MOVEF FID,1,0,5

E:    READF FID,STR0,STU_LENGTH      ;读取学生信息

       CMP AX,0                                ;是否到文件尾

       JNZ G                                       

       CMP TMP,0                              ;判断有没有信息

       JNZ F

       TAB

       TAB

       TAB

       SHOW ERR_NO

       JMP F

                           

      

G:    MOV CX,ID_LENGTH                ;ID为空不显示

       MOV BX,0

       DEC BX

NULL:    INC BX

       CMP STR0[BX],' '

       JZ D

       LOOP NULL

       CALL SHOW_STU

       INC TMP                             ;有信息为空标志自加

       TAB

       JMP D

F:    CLOSEF FID

       CALL SHOW_EXIT

       POP DX

       POP CX

       POP BX

       POP AX

       RET

      

LIST ENDP   

;===============以下是删除(delete)子程序=====================

DELETE  PROC NEAR

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX

       CALL CLEAR

       OPENF FID,FPATH                       ;打开文件

D0:  SHOW TIPS3                         ;显示提示信息         

       INPUT STR,BL                         ;向缓冲区STR输入ID

       CMP BL,ID_LENGTH                ;看ID是否合法

       JZ D2

       CALL SHOW_ERR

       JMP D0

D2:  MOVEF FID,1,0,5

       READF FID,STR0,STU_LENGTH  ;读取学生信息

       CMP AX,0                               ;文件是否结束

       JNZ D5

       TAB

       TAB                     

       SHOW NOSTU                          ;文件结束,没有该学生信息

       JMP D15

D5:  LEA SI,STR0

       LEA DI,STR

       INC DI

       DEC SI

       MOV CX,ID_LENGTH

D6:  INC SI

       INC DI

       MOV AL,BYTE PTR [DI]

       CMP AL,BYTE PTR [SI]

       JNZ D2                              ;不符合条件读取下一个同学信息

       LOOPZ D6

      

       TAB                                ;显示修改前信息

       TAB

       CALL SHOW_STU

       TAB

       TAB

       TAB

       SHOW DEL_DONE

       MOVEF FID,1,0FFFFH,STU_LENGTH_ADD1

       WRITEF FID,DEL,STU_LENGTH

       TAB

      

D15:       TAB

       TAB

       TAB

       CLOSEF FID

       SHOW TIPS5                          ;询问退出还是继续

D_2:       MOV AH,7

       INT 21H

       CMP AL,'r'

       JZ D_4

       CMP AL,'c'

       JNZ D_2

       CALL DELETE

D_4:       POP DX

       POP CX

       POP BX

       POP AX

       RET

DELETE ENDP

;===============以下是修改(modify)子程序=====================

MODIFY PROC NEAR

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX

       CALL CLEAR

       OPENF FID,FPATH                          ;打开文件

M0: SHOW TIPS3                             ;显示提示信息         

       INPUT STR,BL                             ;向缓冲区STR输入ID

       CMP BL,ID_LENGTH                    ;看ID是否合法

       JZ M2

       CALL SHOW_ERR

       JMP M0

M2: MOVEF FID,1,0,5

       READF FID,STR0,STU_LENGTH      ;读取学生信息

       CMP AX,0                                 ;文件是否结束

       JNZ M5

       TAB

       TAB                     

       SHOW NOSTU                            ;文件结束,没有该学生信息

       JMP M_2

M5: LEA SI,STR0

       LEA DI,STR

       INC DI

       DEC SI

       MOV CX,ID_LENGTH

M6: INC SI

       INC DI

       MOV AL,BYTE PTR [DI]

       CMP AL,BYTE PTR [SI]

       JNZ M2                               ;不符合条件读取下一个同学信息

       LOOPZ M6

      

       TAB                                  ;显示修改前信息

       TAB

       CALL SHOW_STU

       TAB

       TAB

M7: SHOW NAM                        ;开始修改信息

       CALL RE_TMP                       ;初始化缓冲区

       INPUT STR,BL

       ADD BL,2                            ;去掉回车

       MOV BH,0           

       MOV SI,BX

       MOV STR[SI],' '

       SUB BL,2

       CMP BL,NAM_LENGTH

       JNA ML2                               ;开始修改信息

ERR_N0:

       CALL SHOW_ERR                    ;溢出提示

       JMP M7

ML2:     

       CMP STR[2],' '                      ;姓名第一个字符不为空

       JZ ERR_N0

       CMP STR[2],'z'

       JA ERR_N0

       CMP STR[2],'A'

       JB ERR_N0

       CMP STR[2],'a'

       JNB MM0

       CMP STR[2],'Z'

       JA ERR_N0  

       CMP STR[2],'A'

       JB ERR_N0

      

MM0:     MOV CX,NAM_LENGTH    ;名字只能是字母或空格

       MOV BX,2           

MM1:     INC BX

       DEC CX

       CMP STR[BX],'z'

       JA ERR_N0

       CMP STR[BX],' '

       JB ERR_N0

       CMP STR[BX],'a'

       JNB MM1

       CMP STR[BX],'Z'

       JA ERR_N0  

       CMP STR[BX],'A'

       JNB MM1

       CMP STR[BX],' '

       JNZ ERR_N0

       CMP CX,0

       JNZ MM1     

       MOVEF FID,1,0FFFFH,NAM_SEX_SCORE_LENGTH          ;指针移到姓名处

       WRITEF FID,STR,NAM_LENGTH

       TAB

      

M10:       SHOW SEX

       CALL RE_TMP

       INPUT STR,BL

       ADD BL,2                             ;去掉回车

       MOV BH,0

       MOV SI,BX

       MOV STR[SI],' '

       SUB BL,2

       CMP BL,SEX_LENGTH

       JNZ M11

       MOV BL,STR[2]

       CMP BL,'1'

       JZ M12

        CMP BL,'0'

       JZ M12

M11:       CALL SHOW_ERR                        ;错误提示

       JMP M10

M12:       WRITEF FID,STR,SEX_LENGTH

       TAB

M13:

       SHOW SCORE

       CALL RE_TMP

       INPUT STR,BL

       MOV SC,BL  

       ADD BL,2                                  ;去掉回车

       MOV BH,0

       MOV SI,BX

       MOV STR[SI],' '

       SUB BL,2

       CMP BL,SCORE_LENGTH                  ;分数错误判断

       JB M14

MEC:      CALL SHOW_ERR

       JMP M13

M14:       MOV BL,SC

       MOV BH,0

       MOV CX,BX                           ;分数只能是数字和.

       MOV BX,2

M15:       CMP STR[BX],'0'

       JNB M16               ;>=0

       CMP STR[BX],'.'

       JNZ MEC

       JZ M17

M16:       CMP STR[BX],'9'          ;<=9

       JA MEC

       INC BX

       LOOP M15

       JMP M17

M21:       JMP MEC                                    ;中转

M17:       MOV BL,SC

       CMP BL,4                                     ;分数(0~100),支持一位小数

       JNZ M18

       CMP STR[4],'.'

       JNZ M21

       JMP MW

M18:       CMP BL,3

       JNZ M19

       CMP STR[3],'.'

       JZ MW

       CMP STR[2],'1'

       JNZ M21

       CMP STR[3],'0'

       JNZ M21

       CMP STR[4],'0'

       JNZ M21

       JMP MW

M19:       CMP BL,2

       JNZ M20

       CMP STR[2],'.'

       JZ M21

       JMP MW

M20:       CMP STR[2],'.'

       JZ M21

MW:      

       WRITEF FID,STR,SCORE_LENGTH

M_2:       TAB

       TAB

       TAB

       TAB

       CLOSEF FID

       SHOW TIPS5                                   ;询问退出还是继续

       MOV AH,7

       INT 21H

       CMP AL,'r'

       JZ M_4

       CMP AL,'c'

       JNZ M_2

       CALL MODIFY

M_4:       POP DX

       POP CX

       POP BX

       POP AX

       RET

MODIFY ENDP

;===========以下是统计各分数段人数(count)子程序==============

COUNT PROC NEAR

       PUSH AX

       PUSH BX

       PUSH CX

       PUSH DX     

        CALL CLEAR

       TAB

       TAB

       TAB

       OPENF FID,FPATH                          ;打开文件

C_0: MOV BX,FID

       MOV AH,42H

       MOV AL,1                                ;当前+偏移量方式

       MOV CX,0                                ;偏移字节(高位)

       MOV DX,5                               ;偏移字节(低位)

       INT 21H

      

      

C_1: READF FID,STR0,STU_LENGTH      ;读取学生信息

       CMP AX,0                   

       JZ C_8                                     ;到文件尾则结束

       MOV BX,ID_LENGTH

       ADD BX,NAM_LENGTH

       INC BX

       MOV AX,BX

       MOV DL,STR0[BX]                      ;DL里放分数第一位

       CMP DL,'1'                              ;如果是100分直接显示A

       JZ C_2

C_2: INC BX

       MOV DL,STR0[BX]

       CMP DL,'0'

       JZ C_3

C_3: INC BX

       MOV DL,STR0[BX]

       CMP DL,'0'

       JZ C_A

       MOV BX,AX

       MOV DL,STR0[BX]

       MOV CL,'9'

       CMP DL,CL

       JGE C_A

       MOV CL,'8'

       CMP DL,CL

       JGE C_B

       MOV CL,'7'

       CMP DL,CL

       JGE C_C

       MOV CL,'6'

       CMP DL,CL

       JGE C_D

       CMP DL,' '

       JZ C_0

       INC [AB]      

       JMP C_0

C_A:

       INC [AB+4]  

       JMP C_0

C_B:

       INC [AB+3]  

       JMP C_0

      

C_C:

       INC [AB+2]

       JMP C_0

C_D:

       INC [AB+1]  

       JMP C_0

C_8: CLOSEF FID

       SHOW COUNT_A                         ;显示每个阶段分数的人数

        MOV DL,[AB+4]

        CMP  DL,'9'

        JA  LA1    

        MOV AH,02H

        INT 21H

        MOV [AB+4],'0'

        TAB

        JMP  NEXT

LA1:    SUB DL,30H

        MOV AL,DL

        MOV BL,10

        MOV AH,0

        DIV  BL

        MOV DL,AL

        MOV BL,AH

        ADD DL,30H

        MOV AH,02H

        INT 21H

        ADD BL,30H

        MOV DL,BL

        MOV AH,02H

        INT 21H

        MOV [AB+4],'0'

        TAB

NEXT:   SHOW COUNT_B

        MOV DL,[AB+3]

        CMP  DL,'9'

        JA  LB1

        MOV AH,02H

        INT 21H

        MOV [AB+3],'0'

        TAB

        JMP  NEXT1

LB1:    SUB DL,30H

        MOV AL,DL

        MOV BL,10

        MOV AH,0

        DIV  BL

        MOV DL,AL

        MOV BL,AH

        ADD DL,30H

        MOV AH,02H

        INT 21H

        ADD BL,30H

        MOV DL,BL

        MOV AH,02H

        INT 21H

        MOV [AB+3],'0'

        TAB

NEXT1:  SHOW COUNT_C

        MOV DL,[AB+2]

        CMP  DL,'9'

        JA  LC1

        MOV AH,02H

        INT 21H

        MOV [AB+2],'0'

        TAB

         JMP  NEXT2

LC1:    SUB DL,30H

        MOV AL,DL

        MOV BL,10

        MOV AH,0

        DIV  BL

        MOV DL,AL

        MOV BL,AH

        ADD DL,30H

        MOV AH,02H

        INT 21H

        ADD BL,30H

        MOV DL,BL

        MOV AH,02H

        INT 21H

        MOV [AB+2],'0'

        TAB

NEXT2:   SHOW COUNT_D 

        MOV DL,[AB+1]

        CMP  DL,'9'

        JA  LD1       

        MOV AH,02H

        INT 21H

        MOV [AB+1],'0'

        TAB

        JMP  NEXT3

LD1:    SUB DL,30H

        MOV AL,DL

        MOV BL,10

        MOV AH,0

        DIV  BL

        MOV DL,AL

        MOV BL,AH

        ADD DL,30H

        MOV AH,02H

        INT 21H

        ADD BL,30H

        MOV DL,BL

        MOV AH,02H

        INT 21H

        MOV [AB+1],'0'

        TAB

NEXT3:  SHOW COUNT_E     

        MOV DL,[AB]

        CMP  DL,'9'

        JA  LE1    

        MOV AH,02H

        INT 21H

        MOV [AB],'0'

        TAB

        JMP  NEXT4

LE1:    SUB DL,30H

        MOV AL,DL

        MOV BL,10

        MOV AH,0

        DIV  BL

        MOV DL,AL

        MOV BL,AH

        ADD DL,30H

        MOV AH,02H

        INT 21H

        ADD BL,30H

        MOV DL,BL

        MOV AH,02H

        INT 21H

        MOV [AB],'0'

        TAB

       TAB

NEXT4:  CALL SHOW_EXIT  

       POP DX

       POP CX

       POP BX

       POP AX

       RET

COUNT ENDP

;===============以下是退出(exit)子程序=======================

EXIT PROC NEAR

        CALL CLEAR

       TAB

       TAB

       TAB

       SHOW BYE

       TAB

       TAB

       TAB

       TAB

       TAB

       TAB

       TAB

       SHOW BY0

       TAB

       SHOW BY1

       TAB

       SHOW BY2

       TAB

       SHOW BY3

       TAB

       TAB

       TAB

       TAB

       TAB

       MOV BX,0F00FH                            ;信息显示

E0:

       MOV CX,0FFFFH

E1:  LOOP E1

       DEC BX

       JNZ E0

       CALL CLEAR

       MOV AH,4CH

       INT 21H

EXIT ENDP

;================以下是主程序====================

MAIN:    MOV AX,DATA

       MOV DS,AX

        MOV AH,0

        MOV AL,3                          ;80*25的文本方式

        INT 10H

       MOV AL,0                         

          MOV CL,0                       

         MOV CH,0                       

         MOV DH,24                       

         MOV DL,79                      

         MOV BH,0FH                    

         MOV AH,6                         

         INT 10H

       TAB

       TAB

       TAB

          TAB

          SHOW MESS9

          SHOW MESS1

          SHOW MESS2

          SHOW MESS10          

          SHOW MESS3

          SHOW MESS4

       SHOW MESS5

          SHOW MESS6

          SHOW MESS7

           SHOW MESS8

           SHOW MESS11

          SHOW MESS9

          SET_P3

             

       MOV AX,ID_LENGTH

       ADD AX,NAM_LENGTH

       ADD AX,SEX_LENGTH

       ADD AX,SCORE_LENGTH

       MOV STU_LENGTH,AX                 ;计算每个学生信息长度

       INC AX

       NOT AX

       ADD AX,1

       MOV STU_LENGTH_ADD1,AX            ;删除时指针参数

       MOV AX,NAM_LENGTH

       ADD AX,SEX_LENGTH

       ADD AX,SCORE_LENGTH

       NOT AX

       ADD AX,1

       MOV NAM_SEX_SCORE_LENGTH,AX   ;修改时指针参数

       OPENF FID,FPATH                            ;是否新建文本

       CMP AX,2

       JZ NEWFILE

       CLOSEF FID

       JMP START

NEWFILE:

       CREATEF FID,FPATH

      

START:   MOV AH,7                             ;输入选择命令

       INT 21H

       CMP AL,'i'                                  ;判断

       JNZ ML

       CALL INSERT

RETU:    JMP MAIN    

ML: CMP AL,'l'

       JNZ MQ

       CALL LIST

       JMP MAIN

MQ: CMP AL,'q'

       JNZ ME

       CALL QUERY

       JMP MAIN    

ME: CMP AL,'e'

       JNZ MC

       CALL EXIT

       JMP MAIN

MC: CMP AL,'c'

       JNE MM

       CALL COUNT

       JMP MAIN

MM:       CMP AL,'m'

       JNZ MD

       CALL MODIFY

       JMP MAIN    

MD: CMP AL,'d'

       JNZ MNEW

       CALL DELETE

       JMP MAIN

MNEW:  CMP AL,'n'                          ;初始化文本数据库

       JNZ RETU

       CALL CLEAR

       TAB

       TAB

       TAB

       SHOW NEWF

       MOV AH,7

       INT 21H

       CMP AL,'y'

       JNZ RETU

       CREATEF FID,FPATH

       JMP MAIN

      

CODE ENDS

END MAIN

 

本科生课程设计成绩评定表

指导教师签字:               

                                                     年     月   

更多相关推荐:
学生成绩管理系统测试总结报告

软件测试课程设计报告题目学生成绩管理系统院系软件学院专业Java程序设计班级软件一班项目组长朱佳培项目成员朱佳培崔耸李婷婷宋依静李鹏鹤提交日期20xx年6月9日星期四1学生成绩管理系统测试报告正文2学生成绩管理...

学生成绩管理系统测试总结报告

软件测试课程设计报告题目学生成绩管理系统院系计算机科学学院班级软件一班成员田欣1学生成绩管理系统测试报告正文1测试概述11测试目的对学生成绩管理系统项目中所有的软件测试活动中包括测试进度资源问题风险以及测试组和...

1 学生成绩管理系统概述

管理信息系统课程设计报告实践题目学生成绩管理系统专业班级090501名字学号指导教师成绩学生成绩管理系统一学生成绩管理系统概述学生成绩管理系统是整个学校工作系统的重要组成部分其内容对于学校管理者和学生至关重要所...

学生信息管理系统总结

个人总结--------学生信息管理系统小结经过大家的努力,学生管理系统终于做完了,经过这次实习系统设计,自己总结了这个学生信息管理系统的一些问题,不过收获还是颇为丰富的,再有理论知识上结合实践,使我学到了更多…

学生成绩管理系统实训报告

《软件工程》实训报告专业:软件技术班级:软件081姓名:**学号:***指导老师:**实训时间:20XX-20XX年第二学期第20周实训地点:学院信息中心目录一、引言1二、项目可行性分析2⑴引言⑵可行性研究的前…

C语言课程设计学生成绩管理系统个人总结

C语言课程设计——学生成绩管理系统个人心得体会(徐州工程学院14计嵌1班07组张凯)这一周以来的课程设计,不仅让我明白了C语言的确是一门很有用的,但是又是不容易的一门课程。起初刚开始做课程设计时,以为这个课程设…

学生信息管理系统项目开发总结报告

项目开发总结报告1引言11编写目的为了总结报告在工作过程中产生的问题获得的经验并且总结报告设计和制作者过程中的逻辑和想法以便在以后的生产和学习过程中得到进一步提高12背景说明a本项目名称学生信息管理系统b此软件...

学生成绩管理系统

目录第一章系统简介211内容介绍2第二章数据库设计221数据表说明2第三章系统功能设计331模块流程图5第四章核心代码541登录模块代码742主界面模块代码743成绩查询模块代码944成绩录入代码1245成绩修...

学生成绩管理系统实验报告

嘉应学院计算机学院课程名称开课学期班级指导老师项目题目学生姓名学号提交时间实验报告C程序设计课程设计冯斯苑一实验目的1进一步巩固所学程序设计语言主要是CC的基本概念和理论2熟练掌握结构化程序设计和面向对象程序设...

学生成绩管理系统

课程设计报告课程设计名称综合程序课程设计课程设计题目学生成绩管理系统学院名称信息工程学院专业电子信息工程班级学号姓名评分教师2014年3月21日1目录课程设计任务书3摘要4第一章课程设计的需求分析5一实验目的及...

学生成绩管理系统出现问题

出现的错误总结1在选择登陆的时候出现权限失效解决办法在Action中加上学生登录publicStringsdengListlistthisgetIdengServicesdengxuehaopassMapses...

学生成绩管理系统

学生成绩管理系统(学生成绩管理系统说明书)摘要成绩管理是一个教育单位不可缺少的重要组成部分,它的内容对于学校的教务管理人员来说至关重要,随着计算机技术的飞速发展,利用计算机实现管理势在必行。本论文介绍了学生成绩…

学生成绩管理系统总结(31篇)