ImageVerifierCode 换一换
格式:DOCX , 页数:52 ,大小:213.53KB ,
资源ID:7269651      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7269651.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(学生成绩管理系统的设计与实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

学生成绩管理系统的设计与实现.docx

1、学生成绩管理系统的设计与实现学 号: 0120810680427课 程 设 计题 目学生成绩管理系统的设计与实现学 院计算机科学与技术专 业软件工程班 级0804班姓 名张琦指导教师王云华2011年1月6日课程设计任务书3设计目的与内容4设计环境与工具4算法描述.4程序流程图10程序源代码.11执行结果与分析.41总结.42参考文献43课程设计任务书学生姓名: 张 琦 专业班级:软件工程0804班 指导教师: 王云华 工作单位: 计算机学院 题 目: 学生成绩管理系统程序设计 初始条件:DOS操作系统。编辑,汇编,连接,调试工具:edit、masm、link、debug要求完成的主要任务: 该

2、程序要求具备的功能:清晰且易于操作的用户界面,在文本编辑界面中输入学生成绩。其中“I”表示插入,“L”表示浏览,“Q”表示查询,“E”表示退出,“D”表示删除,“M”表示修改,“c”表示统计各分数段人数,“P”表示打印.以上各功能应该能单独运行和连续运行。课程设计报告书写要求:1. 封面(使用教务处统一格式)2. 报告书目录3. 课程设计任务书4. 设计目的、设计内容、完成时间5. 设计环境与工具6. 程序设计算法说明、框图 7. 运行结果记录8. 设计结果测试、分析9. 参考文献10. 其他11. 评分表12. 封底时间安排:课程设计时间为18周一周。指导教师签名: 2011年 1 月 6日

3、系主任(或责任教师)签名: 2011 年 1月 6日学生成绩管理系统的设计与实现1设计目的与内容建立成绩档案;添加学生成绩记录(包括学号、姓名、语文、数学、英语、综合);每条记录能自动计算并显示总分、平均分;能按学号或姓名进行查询学生各科成绩;能修改学生的单科成绩;能删除某个学生的成绩记录;每条学生成绩记录包含学号、姓名、语文、数学、英语、综合、总分、平均分等信息,所有信息最终用文件保存。为了提高学工处方便的查找信息,突破手工处理方式 的忙乱,跟上现代化的步伐,所以特开发一套对学生进行管理的软件,做到信息的即时化,准确化。整个程序采用主程序调用子程序的方法。主程序完成菜单的显示,子程序完成一个

4、独立功能的实现。最后输入设定的功能键自动返回DOS.2 设计环境与工具DOS、BIOS操作系统,文本编辑器,MASM.EXE,LINK.EXE,DEBUG.EXE,以及汇编IDE开发环境(轻松汇编)。3 算法描述3.1总体结构分析整个程序采用总程序调用子程序的方式。主程序完成菜单的显示,子程序完成一个独立功能的方法实现。各子程序的实现方法简要描述如下:2.1.1设计Insert(录入)子程序时,先打开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子程序接受用户的输入,再把用户的输入写入文件,最后关闭文件返回主程序。2.1.2设计Delete(删除)子程序时,先打开文件,再

5、调用宏GETIN得到要删除的学生的姓名,然后读文件中的记录,直到其记录的名与所输入的名字相同为止,把文件指针后退8个字符(即4门课程所占的空间),写入8个“0”字符,关闭文件返回主程序。(1)设计List(浏览)子程序时,先打开文件,然后读一个记录,并通过调用宏SHOW_ITEM将其显示到屏幕上,若文件指针没有到达文件尾,则继续读记录并显示,当文件指针到达文件尾时,则关闭文件返回主程序。(2)设计Modify(修改)子程序时,先打开文件SCORE.TXT,调用GET_RECZ子程序得到要修改的记录,然后读文件中的记录,并与用户输入的记录作比较(只比较记录中的名字部分),若不同则读下一个记录,若

6、相同则将文件指针后退23个字符(一个记录为23个字符的长度),然后把用户输入的记录写入文件,最后关闭文件返回主程序。(3)设计Count(统计)子程序,先打开文件,然后读记录,比较记录的第16个字符(数学成绩的高位)并统计,直到文件指针到达文件尾,最后关闭文件调用宏SHOW_ITEM显示统计结果,返回主程序。(4)设计Query(查询)子程序时,先打开文件,通过宏GETIN得到要查找学生的姓名,然后读文件记录,并同要查找的学生姓名比较,若相同则输出,若不同则继续读文件记录,最后显示查询结果,关闭文件返回程序。3.2 单元子程序设计:下面详细分析程序中用到的主要的子程序。(1)INSERT子程序

7、INSERT子程序的功能是录入一条记录。 首先保留现场入栈。然后用DOS中断3d号功能打开FNAME指定的文件。然后用宏CLEARI清除屏幕右半部的记录输入区域。在记录的第一项处置光标,用GET_REC子程序获取内容。用DOS中断42h号功能将指针移到文件末尾。 在用DOS中断40h号功能将放在BUFFER缓冲区的23个字节的内容写到文件中,接着关闭文件,重新设置光标置在显示记录位置。 最后弹栈恢复现场。(2)GET_REC子程序的功能是获取新的记录内容。 GET_REC子程序的功能是获取新的记录内容。 首先用宏GETIN获取学生的姓名,放入BUFFER2中,最多15个字符,如果遇到回车键则提

8、前结束。再用循环方式格将BUFFER2中的15个字符送到BUFFER1中。然后用宏SET_PI将光标置于数字成绩输入项后,等待键盘输入。输入的成绩,先放在BUFFER2中,然后加到BUFFER1中的姓名后面。输入为2个字符或遇到回车键时提前结束。接着用同样的方法输入英语成绩、计算机成绩和中文成绩。完成后,这个子程序就得到了一个记录的所以信息。(3)OPENF子程序 OPENF是一个非常简单的子程序。它的作用是打开一个文件并把文件句柄保存在数据段的handle缓冲区中。(4)QUERY子程序QUERY子程序的作用上查询一条记录。首先保留现场(这些操作每个子程序都基本相同,以后不在赘述)。然后分别

9、清除界面右上方和下边的区域。打开FNAME指定的文件并保留文件句柄。将光标置于界面的下半空白部分开始处,用宏GETIN获取最多15个字符的输入(姓名),放在BUFFER1中。显示记录各字段的标题。然后用下面这段程序读出一条记录(23个字节)放在BUFFER2中,然后将BUFFER1中的内容和BUFFER2中进行比较,看是否相同。如果不同,再继续向下从文件中读出23个字节比较,循环向下,直到相同或文件结束为止。如果相同,则显示该条记录,然后关闭文件,恢复现场。B: MOV 3FH MOV CX,23 MOV DX,OFFSET BUFFER2 INT 21H LEA SI,BUFFER2 LEA

10、 DI,BUFFER1 MOV CX,15C: MOV AL,BYTE PTRSI CMP AL,BYTE PTRDI JNZ B INC SI INC DI LOOP C(5)MODIFY子程序 MODIFY子程序的功能是修改记录。 先保护现场,然后清除右上部分的记录输入区域,接着打开文件。 用FET_REC子程序获取输入的记录信息,并存入BUFFER1中。从打开的文件中读取一个记录的内容(23个字节)放在BUFFER2中。 比较记录前面的15个字节(姓名),如果不同,则读取下一个记录;如果相同,则回移一个记录的指针,回到刚才这条记录的位置(因为读取一个记录, 指针已移到下一个记录上)。将放

11、在FUFFER1中的输入的记录内容写到刚才这条记录在文件中的位置上,从而实现此记录的修改。最后关闭程序,恢复现场。(6)DELETE子程序DELETE子程序的功能是删除一条记录。首先保留现场,清除屏幕。然后打开文件,保留文件句柄。用宏GETIN获取15个字节的姓名字符,放在FUFFER1中。读取一条记录(23个字节),将其放在FUFFER2中,然后和FUFFER1中的内容进行比较,如果不同,再读取下一个记录。如果姓名相同,则把指针后移8个字符(4门课程所占空间),写入8个“0字符。关闭文件,恢复现场并退出。(7)LIST子程序LIST子程序 的作用是显示文件中的记录。首先清除记录输入区和显示区

12、域。然后显示记录字段的标题。打开文件,保存文件句柄。读取一个记录的内容放在缓冲区BUFFER1中,并判断是否到了文件末尾,如果不是,则显示这条记录。循环读取直到文件结束。最后关闭程序,恢复现场。(8)PRINT子程序PRINT子程序打开文件。读取一条记录,汇编语言提供了自定义数据结构的结构定义语句,可将不同的数据类型放在同一个数据结构中,便于处理,在本程序中的记录就采用了结构定义语句。这里读取记录也用了结构的方法。接着用DOS中断21H的5号功能,逐字打印存放在FUFFER1中的所有字符。一条记录打完后,打印回车符换行。然后用同样方法继续读取下一个记录并打印,直到文件结束为止。最后关闭文件退出

13、。(9)COT子程序COT子程序的作用是统计各分数段学生的人数,为简化程序,作为示例,本程序只统计记录数学各分数段的人数。首先显示统计结果的标题:maths60708090100。然后打开文件。读取记录,将记录的第16个字符(数学分数的高位)取出比较。统计结果依次放在以BUFFER3开始的内存单元中,如果小于60,则将小于60的记录单元BUFFER3加1;若小于70,则将小于70的记录单元BUFFER3+1,即BUFFER3下一个地址单元内容加1,以此类推。处理完后再读取下一个记录,作同样处理,直到文件结束为止。接着显示放在BUFFER3中的各分数段的人数的统计结果,最后关闭文件结束。从程序中

14、可以看出,统计时程序有个限制,本例每个分数段最多不能超过9个人。3.3 宏的分析:本设计中使用了下列宏,其作用如下:(1) SHOW:用来指定地址的显示字符串,有一个地址参数。(2) SET_P1:设置光标位置,有一个可变参数a,作用是将光标置于坐标(a,36)处,使用了BIOS中断10H的2号功能。(3) SET_P2:将光标置于坐标(12,2)处。(4) SET_P3:将光标置于坐标(1,30)处。(5) CLEAR:清除整个屏幕,用BIOS中断10H的7号功能实现,范围是从坐标(0,0)到(24,79),将整个区域变为空白。(6) CLEAR1:清除右半部分屏幕,清除范围是从坐标(4,3

15、6)到(10,79),结果是擦除此区域的显示内容。(7) CLEAR2:清除下半部分屏幕,清除范围是从坐标(12,0)到(24,79),结果是擦除此区域的显示内容。(8) NEWLINE:回车换行。(9) SHOW_ITEM:显示记录内容。执行后先显示名称,然后依次显示4项功课成绩,各项成绩间空3个空格,最后换行。这个宏包含的语句较多,如果每次都直接用语句实现非常冗长,使用宏后则主程序就很简洁,充分体现了使用宏的优点。GETIN:获取学生的信息。这也是一个使用频繁的宏,其中含有很多的指令。它带有ADDRS和COUNT2两个参数,ADDRS是存放信息的数据段位置,COUNT2是接受的字符数。4、

16、程序流程图 5. 程序源代码4.1 COM_CODE程序:HELPM_F PROC FAR ;初始化主菜单帮助信息 CLRSCRN 0, 56, 24, 78, 01001110B CLRSCRN 1, 57, 23, 77, 11100001B CURSOR 2, 58 PUT MSG_HP1 CURSOR 4, 58 PUT MSG_HP2 CURSOR 5, 60 PUT MSG_HP21 CURSOR 7, 58 PUT MSG_HP3 CURSOR 8, 60 PUT MSG_HP31 CURSOR 10, 58 PUT MSG_HP4 CURSOR 11, 60 PUT MSG_H

17、P41 CURSOR 13, 58 PUT MSG_HP5 CURSOR 14, 60 PUT MSG_HP51 CURSOR 16, 58 PUT MSG_HP6 CURSOR 17, 60 PUT MSG_HP61 CURSOR 18, 60 PUT MSG_HP62 CURSOR 19, 60 PUT MSG_HP63 CURSOR 21, 58 PUT MSG_HP7 CURSOR 22, 60 PUT MSG_HP71 RETHELPM_F ENDPOP_WIN_F PROC FAR ;初始化提示信息窗体 CLRSCRN 0, 62, 24, 79, 01001110B CLRSCR

18、N 1, 63, 23, 78, 11100011B CURSOR 2, 64 PUT MSG_W RETOP_WIN_F ENDPEXCH_ASC PROC FAR ;将成绩转换为二进制保存在AX中 XOR AX, AX ;清零ax寄存器 JCXZ M2 ;测试cx寄存器的内容,cx为十进制字串的长度,cx为0的时候转M2M1: MOV BX, 10 ;设置进制为10 MUL BX ;ax乘以10 MOV BL, SI ;将si指向的字符放入bl寄存器 CMP BL, 0 JB EE CMP BL, 9 JA EE INC SI ;si指向十进制位串的下一个字符 SUB BX, 30H ;将

19、每一位的ASCII码值减去30H,变成十进制值 ADD AX, BX ;加上该位的值 loop M1 ;loop一次cx减少1M2: RETEE: MOV ERROR, 1 CALL FAR PTR ERR_INF RETEXCH_ASC ENDPEXCH_AS PROC FAR ;将SI指向的ascii字符串转换为十进制值,保存在AX中,CX为字符串长度 PUSHREG1 PUSH SI XOR AX, AX ;清零ax寄存器 JCXZ LL2 ;测试cx寄存器的内容,cx为十进制字串的长度,cx为0的时候转M2LL1: MOV BX, 10 ;设置进制为10 MUL BX ;ax乘以10

20、MOV BL, SI ;将si指向的字符放入bl寄存器 INC SI ;si指向十进制位串的下一个字符 SUB BX, 30H ;将每一位的ASCII码值减去30H,变成十进制值 ADD AX, BX ;加上该位的值 loop LL1 ;loop一次cx减少1LL2: POP SI POPREG1 RETEXCH_AS ENDPCHECK_L PROC FAR ;检查输入学号是否合法 JCXZ M22M11: MOV BL, SI ;将si指向的字符放入bl寄存器 CMP BL, 0 JB EEE CMP BL, 9 JA EEE INC SI LOOP M1 M22: RET EEE: MO

21、V ERROR, 1 RETCHECK_L ENDPCHECK_OK PROC FAR ;检查输入成绩是否合法 PUSH BX CALL FAR PTR EXCH_ASC CMP AX, 100 JA INRE POP BX RETINRE: POP BX CALL FAR PTR ERR_INF MOV ERROR, 1 RETCHECK_OK ENDPERR_INF PROC FAR ;输出错误信息一,成绩不合法 PUSH BX CALL FAR PTR OP_WIN_F CURSOR 8, 64 PUT ERR_INFO1 CURSOR 10 64 PUT ERR_INFO2 CURSO

22、R 11 64 PUT ERR_INFO3 CURSOR 12 64 PUT ERR_INFO4 POP BX RETERR_INF ENDPERR_INF2 PROC FAR ;输出错误信息二,输入为空 PUSH BX CALL FAR PTR OP_WIN_F CURSOR 8, 64 PUT ERR_INF21 CURSOR 10 64 PUT ERR_INF22 CURSOR 11 64 PUT ERR_INF23 POP BX RETERR_INF2 ENDPERR_INF3 PROC FAR ;输出错误信息三,学号不合法 PUSH BX CALL FAR PTR OP_WIN_F

23、CURSOR 8, 64 PUT ERR_INF31 CURSOR 10 64 PUT ERR_INF32 CURSOR 12 64 PUT ERR_INF33 POP BX RETERR_INF3 ENDPERR_INF4 PROC FAR ;输出查找失败信息 PUSHREG CURSOR 10, 64 PUT ERR_INF51 POPREG RETERR_INF4 ENDPSHOW PROC FAR ;初始化输出窗口 CALL FAR PTR OP_WIN_F CURSOR 8, 64 PUT MSG31 PUSHREG PUSH SI MOV SI, 0 MOV OP_NSI, 0 P

24、OP SI LEA DI, OP_N + 1 CALL FAR PTR DEC_ASC POPREG CURSOR 8, 74 PUT OP_N CURSOR 9, 64 PUT MSG32 RETSHOW ENDPINI_M PROC FAR ;初始化主窗体 CLRSCRN 0, 0, 30, 4FH, 1FH CURSOR 1, 0 PUT MSG1 CLRSCRN 7, 16, 21, 40, 00011100B PUT HEART CLRSCRN 21, 0, 24, 55, 10000101B CLRSCRN 22, 1, 23, 54 11110000B CURSOR 21, 1

25、PUT MSG2 CALL FAR PTR HELPM_F RETINI_M ENDPINI_E PROC FAR ;初始化编辑窗体 CLRSCRN 0, 0, 30, 4FH, 1FH CURSOR 1, 0 PUT MSG_EDIT CLRSCRN 3, 0, 19, 61, 10100000B PUT C_MAG CALL FAR PTR OP_WIN_F CLRSCRN 21, 0, 24, 61, 10000101B CLRSCRN 22, 1, 23, 60, 11110000B RETINI_E ENDPINI_P PROC FAR CLRSCRN 0, 0, 30, 4FH,

26、1FH CURSOR 1, 0 PUT MSG_PRINT CLRSCRN 3, 0, 19, 61, 10100000B PUT C_MAG CALL FAR PTR SHOW CLRSCRN 21, 0, 24, 61, 10000101B CLRSCRN 22, 1, 23, 60, 11110000B RETINI_P ENDPDEC_ASC PROC FAR MOV BX, 10 MOV AX, CNDE1: CMP AX, 0 JZ DE2 MOV DX, 0 DIV BX OR DL, 30H ;转换为ASCII MOV DI, DL ;送至输出缓冲区OUTPUT中di所指的位置

27、 DEC DI ;di指向下一个位置 JMP DE1 ;循环DE2: RETDEC_ASC ENDPPRINT_F PROC FAR PUSHREG CURSOR LINE_N, 2 PUSH BX ADD BX, 2 PUT BX POP BX CURSOR LINE_N, 14 PUSH BX ADD BX, 15 PUT BX POP BX CURSOR LINE_N, 24 PUSH BX ADD BX, 24 PUT BX POP BX CURSOR LINE_N, 31 PUSH BX ADD BX, 30 PUT BX POP BX CURSOR LINE_N, 38 PUSH

28、BX ADD BX, 36 PUT BX POP BX ADD LINE_N, 2 POPREG RETPRINT_F ENDPSEARCH_F PROC FAR ;查找学号为STU_N的学生 PUSHREG MOV CX, CN CMP CX, 0 JE S_NOT_FOUND LEA BX, STUDENTSNEXT_CMP: MOV SI, BX ;把已存的学生的结构首地址放入SI PUSH CX LEA DI, STU_N ;DI指向要查找的学号 MOV CL, STU_N + 1 ;CH为学号的长度 CMP CL, SI+1 JNZ LAB CLD XOR CH, CH ADD CX, 2 REPE CMPSB JNZ LAB STC POP CX JMP S_FOUNDLAB: CLC POP CX ADD BX, 53 LOOP NEXT_CMPS_NOT_FOUND: CALL FAR PTR ERR_INF4 MOV LINE_N, 21 MOV ROW_M, 1 BRUSH 40, LINE_N, ROW_M, , 10000101B CURSOR 21, 1 PUT MSG2 MOV LINE_N, 23 MOV ROW_M, 1 BRUSH 40, LINE_N, RO

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1