汇编语言学生成绩管理系统程序
学生成绩管理系统VB程序汇编
登陆登陆Private Sub cmdLogin_Click()If txtUser.Text = "" ThenMsgBox ("请输入用户名!")txtUser.SetFocusElseCall openconnsql = "select * from login where username='" & Trim(txtUser.Text) & "' and password='" & Trim(txtPwd.Text) & "'"rs.Open sql, conn, adOpenDynamic, adLockOptimisticIf rs.EOF ThenMsgBox "用户不存在!"ElseUnload MefrmMain.ShowEnd IfEnd IfEnd Sub退出Private Sub cmdRegister_Click()Unload MeEnd Sub功能选择选课管理Private Sub cmdChoice_Click()frmChoice.ShowUnload MeEnd Sub退出Private Sub cmdExit_Click()EndEnd Sub查询Private Sub cmdFind_Click()frmFind.ShowUnload MeEnd Sub成绩管理Private Sub cmdGrade_Click()frmGrade.ShowUnload MeEnd Sub学生管理Private Sub cmdStu_Click()frmStu.ShowUnload MeEnd Sub学生管理添加Private Sub cmdAdd_Click()frmAddStu.ShowUnload MeEnd Sub删除Private Sub cmdDel_Click()rs.DeleteMsgBox ("删除成功!!")End Sub编辑Private Sub cmdEdit_Click()frmEditStu.ShowUnload MeEnd Sub查找Private Sub cmdFind_Click() '查询功能If cboFind.Text = "学号" ThenIf txtInput.Text = "" ThenMsgBox ("学号输入不能为空!")txtInput.SetFocusElseDim sql1 As StringSet rs1 = New ADODB.Recordsetsql1 = "select * from stuInfo where ID='" & txtInput.Text & "'"rs1.CursorLocation = adUseClientrs1.Open sql1, conn, adOpenDynamic, adLockOptimistic, adCmdTextIf rs.EOF ThenMsgBox ("查不到相关信息")txtInput.SetFocusElseSet DataGrid1.DataSource = rs1DataGrid1.RefreshEnd IfEnd IfElseIf txtInput.Text = "" ThenMsgBox ("姓名输入不能为空!")txtInput.SetFocusElseDim sql2 As StringSet rs2 = New ADODB.Recordsetsql2 = "select * from stuInfo where name='" & txtInput.Text & "'"rs2.CursorLocation = adUseClientrs2.Open sql2, conn, adOpenDynamic, adLockOptimistic, adCmdTextIf rs.EOF ThenMsgBox ("查不到相关信息")txtInput.SetFocusElseSet DataGrid1.DataSource = rs2DataGrid1.RefreshEnd IfEnd IfEnd IfEnd Sub返回Private Sub cmdReturn_Click()frmMain.ShowUnload MeEnd Sub输出窗口Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) ' txtInput.Text = DataGrid1.Columns.Item(4) ''获取选中行的第5列数据End Sub窗体Private Sub Form_Load()Dim sql As StringSet conn = New ADODB.ConnectionSet rs = New ADODB.RecordsetCall openconnsql = "select * from stuInfo"rs.CursorLocation = adUseClientrs.Open sql, conn, adOpenDynamic, adLockOptimistic, adCmdTextSet DataGrid1.DataSource = rs 'datagrid绑定数据源End Sub成绩查询返回Private Sub cmdReturn_Click()frmMain.ShowUnload MeEnd Sub确定Private Sub Command1_Click()lblGrade.Caption = Trim(cboCourse.Text) + "课程成绩"Dim sql1 As StringSet rs1 = New ADODB.Recordsetsql1 = "select score.ID,score.Num,score.score from score, course where name='" & cboCourse.Text & "' and score.Num=course.Num"'sql1 = "select * from course"rs1.CursorLocation = adUseClientrs1.Open sql1, conn, adOpenDynamic, adLockOptimistic, adCmdTextSet DataGrid1.DataSource = rs1End Sub窗体Private Sub Form_Load()Dim sql As StringSet conn = New ADODB.ConnectionSet rs = New ADODB.RecordsetCall openconnsql = "select * from course"rs.Open sql, conn, adOpenDynamic, adLockOptimisticDo Until rs.EOFcboCourse.AddItem rs("name")rs.MoveNextLoopEnd Sub选课管理返回Private Sub cmdReturn_Click()frmMain.ShowUnload MeEnd Sub提交Private Sub cmdSubmit_Click()If txtID = "" ThenMsgBox ("请输入学号!!")txtID.SetFocusElseIf lstCourse.Text = "" ThenMsgBox ("请选择课程!!")ElseDim sql1 As StringDim sql2, name As StringSet rs2 = New ADODB.RecordsetSet rs1 = New ADODB.Recordsetsql1 = "select score.ID, score.Num from score , course where ID='" & txtID.Text & "' and name='" & lstCourse.Text & "' and score.Num=course.Num"name = lstCourse.Textsql2 = "select Num from course where name='" & name & " '"rs1.Open sql1, conn, adOpenDynamic, adLockOptimisticrs2.Open sql2, conn, adOpenDynamic, adLockOptimisticIf rs1.EOF Thenrs1.AddNewrs1("ID") = txtID.Textrs1("Num") = rs2("Num")rs1.UpdateMsgBox ("选课成功!!")rs1.CloseElseMsgBox ("已选过该课!!")End IfEnd IfEnd Sub窗体Private Sub Form_Load()Dim sql As StringSet conn = New ADODB.ConnectionSet rs = New ADODB.Recordsetsql = "select * from course"Call openconnrs.Open sql, conn, adOpenDynamic, adLockOptimisticDo Until rs.EOF 'listbox控件利用循环读取课程表中的课程名lstCourse.AddItem rs("name")rs.MoveNextLoopEnd Sub查询确定Private Sub cmdOK_Click()If txtID = "" ThenMsgBox ("学号不能为空!!")txtID.SetFocusElseDim sql As StringDim sum1, sum2 As SingleDim n As IntegerSet conn = New ADODB.ConnectionSet rs = New ADODB.RecordsetCall openconnsql = "select , score.score , course.credit from score , course where score.ID='" & txtID.Text & "' and score.Num=course.Num"rs.CursorLocation = adUseClientrs.Open sql, conn, adOpenDynamic, adLockOptimistic, adCmdTextSet DataGrid1.DataSource = rssum1 = 0sum2 = 0n = 0Do While Not rs.EOFsum1 = sum1 + Val(rs("score"))sum2 = sum2 + Val(rs("credit"))n = n + 1rs.MoveNextLooplblAvg.Caption = Format(sum1 / n, "0.0")lblCredit.Caption = sum2End IfEnd Sub返回Private Sub cmdReturn_Click()frmMain.ShowUnload MeEnd Sub修改学生信息返回Private Sub cmdReturn_Click()frmStu.ShowUnload MeEnd Sub提交Private Sub cmdSubmit_Click()If txtID.Text = "" ThenMsgBox ("学号不能为空!")txtID.SetFocusElseIf txtName.Text = "" ThenMsgBox ("姓名不能为空!")txtName.SetFocusElseIf txtSex.Text = "" ThenMsgBox ("学分不能为空!")txtSex.SetFocusElseIf txtAge.Text = "" ThenMsgBox ("年龄不能为空!")txtAge.SetFocusElseDim sql As StringSet conn = New ADODB.ConnectionSet rs = New ADODB.RecordsetCall openconnsql = "select * from stuInfo where ID='" & txtID.Text & "'"rs.Open sql, conn, adOpenDynamic, adLockOptimisticIf Not rs.EOF Then '判断学号是否存在rs("name") = txtName.Textrs("sex") = txtSex.Textrs("age") = txtAge.Textrs("pro") = cboPro.Textrs.UpdateMsgBox ("修改成功!!")ElseMsgBox ("学号不存在!")End IfEnd IfEnd Sub窗体Private Sub Form_Load()txtID = rs("ID")txtName = rs("name")txtSex = rs("sex")txtAge = rs("age")cboPro.Text = rs("pro")End Sub添加学生返回Private Sub cmdReset_Click()frmStu.ShowUnload MeEnd Sub提交Private Sub cmdSubmit_Click()If txtID.Text = "" ThenMsgBox ("学号不能为空!")txtID.SetFocusElseIf txtName.Text = "" ThenMsgBox ("请输入姓名!")txtName.SetFocusElseIf txtSex.Text = "" ThenMsgBox ("请输入性别!")txtSex.SetFocusElseIf txtAge.Text = "" ThenMsgBox ("年龄不能为空!")txtAge.SetFocusElseDim sql As StringSet conn = New ADODB.ConnectionSet rs = New ADODB.RecordsetCall openconnsql = "select * from stuInfo where ID='" & txtID.Text & "'"rs.Open sql, conn, adOpenDynamic, adLockOptimisticIf rs.EOF Then '判断学号是否存在rs.AddNewrs("ID") = txtID.Textrs("name") = txtName.Textrs("sex") = txtSex.Textrs("age") = txtAge.Textrs("pro") = cboPro.Textrs.UpdateMsgBox ("添加成功!!")frmStu.ShowUnload MeElseMsgBox ("学号已存在!")End IfEnd IfEnd Sub。
最新-汇编语言程序设计课程设计报告-学生成绩管理系统程序设计 精品
学生成绩管理系统程序设1、需求说明用汇编语言编写一个学生成绩管理系统,实现基本学生成绩管理,功能包括添加学生信息、修改学生信息、删除学生信息、打印学生信息、浏览学生信息存储文件以及粗略的统计学生信息,程序界面友好,有输入界面提示,有菜单功能。
2、设计要求2.1设计说明该程序要求具备的功能:清晰且易于操作的用户界面,在文本编辑界面中输入学生成绩。
其中“I”表示插入,“L”表示浏览,“Q”表示查询,“E”表示退出,“D”表示删除,“M”表示修改,“c”表示统计各分数段人数,“P”表示打印.以上各功能应该能单独运行和连续运行。
2.2开发平台与开发工具该程序使用DOS操作系统32位实模式汇编语言编写,使用的编译器为微软的MASM5.0,调试工具为DOS下的debug.exe程序。
2.3数据结构程序采用静态链表的方式来存储学生信息,链表结点描述如下:Student strucm_sName db 6 dup(' ')m_sNum db 8 dup(' ')m_sScore db 3 dup(' ')Student ends3、设计思路3.1设计方案及基本流程3.11总体结构分析整个程序采用总程序调用子程序的方式。
主程序完成菜单的显示,子程序完成一个独立功能的方法实现。
各子程序的实现方法简要描述如下:1、设计Insert(录入)子程序时,先打开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子程序接受用户的输入,再把用户的输入写入文件,最后关闭文件返回主程序。
2、设计Delete(删除)子程序时,先打开文件,再调用宏GETIN得到要删除的学生的姓名,然后读文件中的记录,直到其记录的名与所输入的名字相同为止,把文件指针后退8个字符(即4门课程所占的空间),写入8个“0”字符,关闭文件返回主程序。
3、设计List(浏览)子程序时,先打开文件,然后读一个记录,并通过调用宏SHOW_ITEM 将其显示到屏幕上,若文件指针没有到达文件尾,则继续读记录并显示,当文件指针到达文件尾时,则关闭文件返回主程序。
学生成绩管理系统设计实验(汇编语言)
实验六学生成绩管理系统设计实验一、实验目的1、熟悉汇编语言程序结构;2、熟悉INT 21H的文件操作功能调用;3、熟悉INT 21H的1、9号功能和INT 10H常用功能的使用方法;4、掌握多子程序复杂问题程序设计方法;5、掌握利用汇编语言实现字符串的输入输出程序设计方法;6、了解多模块程序设计方法。
二、实验原理我们把可以多次调用、具有通用性、能完成特定功能的程序段编写成的独立程序模块称为子程序。
子程序是把一个程序划分成若干模块所用的主要手段,它便于独立设计、测试程序和编制程序文件。
三、实验内容1、实验要求设计一个学生成绩管理系统,要求完成文件建立、学生成绩录入、显示指定学号的学生记录、删除一个学生的记录、修改学生记录、返回等工作。
学生成绩包括学号(XH)、姓名(XM)、数学(SX)、语文(YW)、外语(WY)字段。
至少包括30名学生信息,每名学生学号字段为4个字符,姓名字段为15个字符(最大),每门成绩字段为3个字符(最大)。
程序设计步骤如下:1、编写主程序main.asm;2、编写文件创建子程序create,实现在指定盘指定文件夹“d:\chengji\2009\”下建立一个指定名称的文件2009doc.dat;3、编写成绩录入子程序append,实现在指定文件尾部插入一个学生的成绩记录;4、编写显示子程序display,实现按指定学号显示一个学生的记录;5、编写修改子程序modify,实现按指定学号修改一个学生的记录字段(不需修改直接回车);6、编写删除子程序,实现按指定学号、姓名删除一个学生的记录;7、编译、链接、调试,产生可执行文件main.exe。
2、程序流程图3、程序代码程序代码如下:DATAS SEGMENTMSG1 DB '1. Append a record$'MSG2 DB '2. Display a record$'MSG3 DB '3. Modify a record$'MSG4 DB '4. Delete a record$'MSG5 DB '5. Create file$'MSG6 DB '6. Return DOS$'MSGC DB 'Please input 1--6:$'MSGE DB 'Error!$'MSGC1 DB 'Please input filename:$'MAXLEN DB 25ACTLEN DB ?STRING DB 25 DUP(?)MAXLEN1 DB 25ACTLEN1 DB ?STRING1 DB 25 DUP(?)PATHNM DB 'D:\chengji\2009\\',23 DUP(?)PATH DB 'D:\chengji\2009\2009doc.dat',00MSGA1 DB 'Please input XH:$'MSGA2 DB 'Please input XM:$'MSGA3 DB 'Please input SX:$'MSGA4 DB 'Please input YW:$'MSGA5 DB 'Please input WY:$'HANDLE DW ?MSGXH DB 'Xuehao: $'MSGXM DB 'Xingming: $'MSGSX DB 'Shuxue:$'MSGYW DB 'Yuwen: $'MSGWY DB 'Waiyu: $'BUFFER DB 2048 DUP(' ')MSGRT DB 'Press any key to return!$'DELSTR DB 33 DUP(' ') DATAS ENDSSTACKS SEGMENT STACKDB 256 DUP(?)STACKS ENDS CODES SEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;******************************** ;主程序MAIN PROC FARS:;清屏CALL CLS ;逐行输出提示信息MOV AH,02HMOV DH,9MOV DL,30INT 10HMOV AH,9LEA DX,MSG1INT 21HMOV AH,02HMOV DH,10MOV DL,30INT 10HMOV AH,9LEA DX,MSG2INT 21HMOV AH,02HMOV DH,11MOV DL,30INT 10HMOV AH,9LEA DX,MSG3INT 21HMOV AH,02HMOV DH,12MOV DL,30INT 10HMOV AH,9LEA DX,MSG4INT 21HMOV AH,02HMOV DH,13MOV DL,30INT 10HMOV AH,9LEA DX,MSG5INT 21HMOV AH,02HMOV DH,14MOV DL,30INT 10HMOV AH,9LEA DX,MSG6INT 21H;提示输入MOV AH,02HMOV DH,15MOV DL,30INT 10HMOV AH,9LEA DX,MSGCINT 21H;从键盘读入一个数字MOV AH,02HMOV DH,15MOV DL,48INT 10HMOV AH,1INT 21H;按数字对应子程序CMP AL,31HJZ CAPPENDCMP AL,32HJZ CDISPLAYCMP AL,33HJZ CMODIFYCMP AL,34HJZ CDELETECMP AL,35HJZ CCREATECMP AL,36HJZ E;若输入不是1-6数字,则提示错误MOV AH,02HMOV DH,16MOV DL,30INT 10HMOV AH,9LEA DX,MSGEINT 21HCCREATE:CALL CREATEJMP SCDELETE:CALL DELETEJMP SCMODIFY:CALL MODIFYJMP SCDISPLAY:CALL DISPLAYJMP SCAPPEND:CALL APPENDJMP SE:MOV AH,4CHINT 21HMAIN ENDP;******************************** ;CREATE程序CREATE PROC NEARPUSH AXPUSH CXPUSH DXPUSH SIPUSH DI;清屏CALL CLS;提示输入文件名MOV AH,2MOV DH,12MOV DL,20INT 10HMOV AH,9LEA DX,MSGC1INT 21H;从键盘读入文件名字符串MOV AH,0AHLEA DX,MAXLENINT 21H;将文件名字符串加到ASCIZ字符串末尾MOV CX,0MOV CL,ACTLENLEA SI,STRINGLEA DI,PATHNMADD DI,16LCREATE:MOV AL,BYTE PTR [SI]MOV [DI],ALINC DIINC SILOOP LCREATE;在ASCIZ字符串末尾加00MOV BYTE PTR [DI],0;按ASCIZ字符串创建文件MOV AH,3CHLEA DX,PATHNMMOV CX,0INT 21HPOP DIPOP SIPOP DXPOP CXPOP AXRETCREATE ENDP;******************************** ;APPEND程序APPEND PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DI;清屏CALL CLS;打开文件(只写)MOV AH,3DHMOV AL,01HLEA DX,PATHINT 21HMOV HANDLE,AX;提示输入学号MOV AH,02HMOV DH,10MOV DL,30INT 10HMOV AH,9LEA DX,MSGA1INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,4CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入姓名MOV AH,02HMOV DH,11MOV DL,30INT 10HMOV AH,9LEA DX,MSGA2INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,15CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入语文成绩MOV AH,02HMOV DH,12MOV DL,30INT 10HMOV AH,9LEA DX,MSGA3INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,3CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入数学成绩MOV AH,02HMOV DH,13MOV DL,30INT 10HMOV AH,9LEA DX,MSGA4INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,3CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入外语成绩MOV AH,02HMOV DH,14MOV DL,30INT 10HMOV AH,9LEA DX,MSGA5INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,3CALL FILL;在字符串末尾加回车、换行INC SIMOV BYTE PTR [BX+SI],0DHINC SIMOV BYTE PTR [BX+SI],0AHADD ACTLEN,2;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETAPPEND ENDP;******************************** DISPLAY PROC NEARPUSH AXPUSH DX;清屏CALL CLS;提示输入学号MOV AH,02HMOV DH,10MOV DL,28INT 10HMOV AH,9LEA DX,MSGXHINT 21H;从键盘读入学号字符串MOV AH,0AHLEA DX,MAXLENINT 21H;打开文件(只读)MOV AH,3DHMOV AL,00HLEA DX,PATHINT 21HMOV HANDLE,AX;将文件指针定位至文件开头MOV AH,42HMOV AL,0MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;将文件载入缓存MOV AH,3FHMOV BX,HANDLEMOV CX,2048LEA DX,BUFFERINT 21H;在缓存中找到对应记录LEA SI,BUFFERLEA DI,STRINGMOV CX,AXCALL SEARCHCMP DX,0JZ OUTPUT;若未找到,则提示错误MOV AH,9LEA DX,MSGEINT 21HJMP DEND;显示对应信息OUTPUT:MOV AH,02HMOV DH,11MOV DL,28INT 10HMOV AH,9LEA DX,MSGXMINT 21HADD SI,5MOV AH,9MOV DX,SIINT 21HMOV AH,02H MOV DH,12 MOV DL,28INT 10HMOV AH,9LEA DX,MSGYW INT 21HADD SI,16MOV AH,9MOV DX,SIINT 21HMOV AH,02H MOV DH,13 MOV DL,28INT 10HMOV AH,9LEA DX,MSGSX INT 21HADD SI,4MOV AH,9MOV DX,SIINT 21HMOV AH,02H MOV DH,14 MOV DL,28INT 10HMOV AH,9LEA DX,MSGWY INT 21HADD SI,4MOV AH,9MOV DX,SIINT 21HMOV AH,2MOV DH,15MOV DL,28INT 10HMOV AH,9LEA DX,MSGRTINT 21HMOV AH,1INT 21HDEND: ;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DXPOP AXRETDISPLAY ENDP;******************************** MODIFY PROC NEARPUSH AXPUSH DX;清屏CALL CLS;提示输入学号MOV AH,02HMOV DH,10MOV DL,28INT 10HMOV AH,9LEA DX,MSGXHINT 21H;从键盘读入学号字符串MOV AH,0AHLEA DX,MAXLENINT 21H;打开文件(读写)MOV AH,3DHMOV AL,10LEA DX,PATHINT 21HMOV HANDLE,AX;将文件指针定位至文件开头MOV AH,42HMOV AL,0MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;将文件载入缓存MOV AH,3FHMOV BX,HANDLEMOV CX,2048LEA DX,BUFFERINT 21H;在缓存中找到对应记录LEA SI,BUFFERLEA DI,STRINGMOV CX,AXCALL SEARCHCMP DX,0JZ REVISEXM;若未找到,则提示错误MOV AH,9LEA DX,MSGEINT 21HJMP MEND;修改姓名REVISEXM:MOV AH,02HMOV DH,11MOV DL,28INT 10HMOV AH,9LEA DX,MSGXMINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DH ;若为回车,则将指针指向下一字段JNZ XMCONTADD SI,5JMP REVISEYWXMCONT:PUSH SIMOV DX,15CALL FILLPOP SIADD SI,5LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;修改语文成绩REVISEYW:MOV AH,02HMOV DH,12MOV DL,28INT 10HMOV AH,9LEA DX,MSGYWINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DHJNZ YWCONTADD SI,16JMP REVISESXYWCONT:PUSH SIMOV DX,3CALL FILLPOP SIADD SI,16LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;修改数学成绩REVISESX:MOV AH,02HMOV DH,13MOV DL,28INT 10HMOV AH,9LEA DX,MSGSXINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DHJNZ SXCONTADD SI,4JMP REVISEWYSXCONT:PUSH SIMOV DX,3CALL FILLPOP SIADD SI,4LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;修改外语成绩REVISEWY:MOV AH,02HMOV DH,14MOV DL,28INT 10HMOV AH,9LEA DX,MSGWYINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DHJZ MENDPUSH SIMOV DX,3CALL FILLPOP SIADD SI,4LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21HMEND: ;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DXPOP AXRETMODIFY ENDP;******************************** ******************************** **************DELETE PROC NEARPUSH AXPUSH DX;清屏CALL CLS;提示输入姓名MOV AH,02HMOV DH,11MOV DL,28INT 10HMOV AH,9LEA DX,MSGA2INT 21H;读入姓名字符串MOV AH,0AHLEA DX,MAXLEN1INT 21H;提示输入学号MOV AH,02HMOV DH,12MOV DL,28INT 10HMOV AH,9LEA DX,MSGA1INT 21H;读入学号字符串MOV AH,0AHLEA DX,MAXLENINT 21H;打开文件(读写)MOV AH,3DHMOV AL,10LEA DX,PATHINT 21HMOV HANDLE,AX;将文件指针指向开头MOV AH,42HMOV AL,0MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;载入文件MOV AH,3FHMOV BX,HANDLEMOV CX,2048LEA DX,BUFFERINT 21H;在缓存中搜索学号对应记录LEA SI,BUFFERLEA DI,STRINGMOV CX,AXCALL SEARCHCMP DX,0JNZ DELEND;比较该记录对应姓名是否与输入的相同PUSH SIADD SI,5LEA DI,STRING1MOV CX,0MOV CL,ACTLEN1MOV DX,0LCHECK:MOV AL,[SI]MOV AH,[DI]CMP AL,AHJZ LCONTIMOV DX,1JMP DELERRLCONTI:INC SIINC DILOOP LCHECKPOP SICMP DX,0JZ DEL;姓名不对应则提示错误DELERR:MOV AH,9LEA DX,MSGEINT 21HJMP DELENDDEL:;将文件指针定位至该记录开始处LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21H;将该记录覆盖为空格MOV AH,40HMOV BX,HANDLEMOV CX,33LEA DX,DELSTRINT 21HDELEND: ;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DXPOP AXRETDELETE ENDP;******************************** ;清屏程序CLS PROC NEARPUSH AXPUSH BXPUSH CXPUSH DX;屏幕初始化MOV AH,6MOV AL,0MOV BH,7MOV CX,0MOV DX,2479HINT 10H;重定位光标MOV DX,0MOV AH,2INT 10HPOP DXPOP CXPOP BXPOP AXRETCLS ENDP;******************************** ;搜索程序;若找到对应记录,则将DX赋为0,并将SI指向该记录首地址;否则DX 赋为1。
c语言学生成绩信息管理系统源代码
C语言学生成绩信息管理系统源代码一、概述在学校教学管理工作中,学生成绩信息管理是一个至关重要的环节。
为了方便高效地进行学生成绩信息的录入、查询和管理,我们可以利用C语言编写一个学生成绩信息管理系统。
本文将介绍该系统的源代码,并对其进行详细的解释和讲解。
二、系统功能需求1. 录入学生成绩信息2. 查询学生成绩信息3. 修改学生成绩信息4. 删除学生成绩信息5. 显示所有学生成绩信息三、系统源代码实现```c#include <stdio.h>#include <stdlib.h>#include <string.h>// 定义学生结构体typedef struct student {int id; // 学号char name[20]; // 尊称float score; // 成绩} Student;// 全局变量int count = 0; // 记录学生数量Student students[100]; // 学生数组// 录入学生成绩信息void inputStudentInfo() {printf("请输入学生学号:");scanf("d", students[count].id);printf("请输入学生尊称:");scanf("s", students[count].name); printf("请输入学生成绩:");scanf("f", students[count].score); count++;}// 查询学生成绩信息void queryStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {printf("学生信息如下:\n");printf("学号:d\n", students[i].id);printf("尊称:s\n", students[i].name);printf("成绩:.2f\n", students[i].score);return;}}printf("未找到该学生信息!\n");}// 修改学生成绩信息void modifyStudentInfo(int id, char *name, float score) { for (int i = 0; i < count; i++) {if (students[i].id == id) {strcpy(students[i].name, name);students[i].score = score;printf("修改成功!\n");return;}}printf("未找到该学生信息!\n");}// 删除学生成绩信息void deleteStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {for (int j = i; j < count - 1; j++) { students[j] = students[j + 1]; }count--;printf("删除成功!\n");return;}}printf("未找到该学生信息!\n");}// 显示所有学生成绩信息void displayAllStudentInfo() {if (count == 0) {printf("暂无学生信息!\n");return;}printf("学生成绩信息如下:\n");for (int i = 0; i < count; i++) {printf("学号:d,尊称:s,成绩:.2f\n", students[i].id, students[i].name, students[i].score);}}int m本人n() {int choice, id;char name[20];float score;while (1) {printf("欢迎使用学生成绩信息管理系统!\n");printf("1. 录入学生成绩信息\n");printf("2. 查询学生成绩信息\n");printf("3. 修改学生成绩信息\n");printf("4. 删除学生成绩信息\n");printf("5. 显示所有学生成绩信息\n");printf("6. 退出系统\n");printf("请选择操作:");scanf("d", choice);switch (choice) {case 1: // 录入学生成绩信息inputStudentInfo();break;case 2: // 查询学生成绩信息printf("请输入要查询的学生学号:"); scanf("d", id);queryStudentInfo(id);break;case 3: // 修改学生成绩信息printf("请输入要修改的学生学号:"); scanf("d", id);printf("请输入修改后的尊称:");scanf("s", name);printf("请输入修改后的成绩:");scanf("f", score);modifyStudentInfo(id, name, score); break;case 4: // 删除学生成绩信息printf("请输入要删除的学生学号:"); scanf("d", id);deleteStudentInfo(id);break;case 5: // 显示所有学生成绩信息displayAllStudentInfo();break;case 6: // 退出系统printf("感谢使用学生成绩信息管理系统!\n");exit(0);default:printf("请输入正确的操作!\n");}}return 0;}```四、系统运行效果1. 运行系统后,会出现一个菜单,根据需求选择相应的操作。
汇编语言——学生分数管理程序
;编写程序,从键盘输入学生百分制的分数按<60,60~69,70~79,80~89,90~99和100共六档进行分类,统计出每档的个数及总数。
;分类后的结果需要转换成ASCⅡ码并在屏幕上显示,将ASCⅡ码的转换程序写成子程序供调用。
DATA SEGMENTMES1 DB 'SCORE[<60] :$'MES2 DB 'SCORE[<60-69] :$'MES3 DB 'SCORE[<70-79] :$'MES4 DB 'SCORE[<80-89] :$'MES5 DB 'SCORE[<90-99] :$'MES6 DB 'SCORE[=100] :$'MES7 DB 'TOTAL NUMBER :$'END_SIGN DB 0TOTAL DB 0S1 DB 0S2 DB 0S3 DB 0S4 DB 0S5 DB 0S6 DB 0DATA ENDSSTACK1 SEGMENT stackDB 50 DUP(0)STACK1 ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,SS:STACK1MOV AX,DATAMOV DS,AXMOV AX,STACK1MOV SS,AXRP:CALL INPUTCMP END_SIGN,'#' ;结束本次输入后,根据end_sign是否为#结束输入JZ QUITCALL CLASSIFYJMP RPQUIT:CALL PRINTMAIN ENDP;***********************************************************;出口参数为bxPUSH CXPUSH DXMOV BX,0NEWCHAR:MOV AH,01HINT 21HMOV END_SIGN,ALSUB AL,30HJL EXITCMP AL,09DJG EXITCBWXCHG AX,BXMOV CX,10DMUL CXXCHG AX,BXADD BX,AXJMP NEWCHAREXIT:POP DXPOP CXPOP AXRETINPUT ENDP;************************************************************* CLASSIFY PROC NEARPUSH AXCMP BL, 60JL FIVE ;<60转FIVE入口处理CMP BL, 70JL SIX ;<70转SIX入口处理CMP BL, 80JL SEVEN ;<80转ESVEN入口处理CMP BL, 90JL EIGHT ;<90转EIGHT入口处理CMP BL, 100JL NINE ;<100转NINE入口处理CMP BL, 100JE TEN ;=100转TEN入口处理JMP NEXTFIVE: MOV AL, [S1]ADD AL,01 ;S5存入<60的个数DAAMOV [S1], ALADD AL,01 ;S6存入60-69的个数DAAMOV [S2], ALJMP NEXTSEVEN: MOV AL, [S3]ADD AL,01 ;S7存入70-79的个数DAAMOV [S3], ALJMP NEXTEIGHT: MOV AL, [S4]ADD AL,01 ;S8存入80-89的个数DAAMOV [S4],ALJMP NEXTNINE: MOV AL,[S5]ADD AL,01 ;S9存入90-99的个数DAAMOV [S5],ALJMP NEXTTEN: MOV AL,[S6]ADD AL,01 ;S10存入=100的个数DAAMOV [S6],ALNEXT:MOV AL,[TOTAL]ADD AL,01DAAMOV [TOTAL],AL ;TOTAL保存分类数据的个数POP AXRETCLASSIFY ENDP;************************************************************** PRINT PROC NEARCALL CRLFMOV DX,OFFSET MES1 ;显示分类的结果MOV AH, 09HINT 21HMOV AL,[S1]CALL DISPCALL CRLFMOV DX, OFFSET MES2MOV AH,09HINT 21HMOV AL,[S2]MOV DX,OFFSET MES3MOV AH,09HINT 21HMOV AL,[S3]CALL DISPCALL CRLFMOV DX,OFFSET MES4MOV AH,09HINT 21HMOV AL,[S4]CALL DISPCALL CRLFMOV DX,OFFSET MES5MOV AH,09HINT 21HMOV AL,[S5]CALL DISPCALL CRLFMOV DX,OFFSET MES6MOV AH,09HINT 21HMOV AL,[S6]CALL DISPCALL CRLFMOV DX,OFFSET MES7MOV AH,09HINT 21HMOV AL,[TOTAL]CALL DISPMOV AH,4CHINT 21HRETPRINT ENDP;****************************************************DISP PROC NEAR ;入口参数为ax,假定人数不大,处理alPUSH BXPUSH CXPUSH DXMOV CL,4DMOV BL,ALMOV AL,BLSHR AL,CLAND AL,0FHMOV AH,02HINT 21HMOV AL,BLAND A L,0FHADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP DXPOP CXPOP BXRETDISP ENDP;********************************************************* CRLF PROC NEARPUSH AXPUSH DXMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HPOP DXPOP AXRETCRLF ENDP;******************************************************* CODE ENDSEND MAIN。
汇编语言课程设计---学生成绩管理程序
郑重声明:本篇文档为从百度文库中下载的经过原文修改后的!目录第一章设计课题概述 (2)1.1 课程设计目的 (2)1.2设计内容及要求 (2)第二章总体设计 (3)2.1总体设计思路 (3)2.2 各版块功能描述 (3)第三章详细设计 (5)3.1 程序功能设计 (5)3.2各模块程序详细流程 (5)3.3 源代码及注释 (8)第四章调试过程及结果 (32)4.1 显示所有成绩 (32)4.2 插入成绩 (32)4.3 查询学生成绩 (33)4.4 删除学生成绩 (34)4.5 修改学生成绩 (35)4.6输出数学成绩 (36)第五章总结 (37)参考资料 (38)第一章设计课题概述1.1 课程设计目的当今社会是一个信息时代的社会,计算机的使用也是越来越普遍了,各行业在管理职员都采用了一些管理软件,不管是银行、学校,大大小小的各种企业,都是使用的相应的管理软件管理企业的各种信息,我选择的这个汇编语言课程设计题就是一个简单学生信息管理程序,虽然只能处理一些简单操作,但是其意义却是非凡,同过此课程设计,让我了解了一些简单的管理软件的基本原理,更深刻的理解了汇编语言的特点,对汇编语言有了一个跟深层次的理解。
利用汇编程序编写一个小型学生成绩管理程序,实现学生信息成绩的插入、修改、显示所有学生的各科成绩,并且可根据输入学生姓名插询该生的各科成绩,可统计所有成绩个各分数段的人数。
1.2设计内容及要求设计一个学生管理程序,主要实现以下功能(1)各科成绩的录入、修改、和删除。
(2)按姓名查询每个学生哥们成绩。
(3)显示查询结果(4)统计各分数段的成绩的人数个分数段的人数。
程序运行时,在出现的主菜单中,按l键,将浏览学生的各科成绩;按i键后,将执行插入功能,可以插入新的学生成绩,按m键,键输入需要修改的学生成绩,也包括不修改的科目;按d键输入要删除的学生姓名,将使其成绩全部变成0;按q键输入查询的学生的姓名,将其各科成绩显示出来;按下c键将按数学成绩分段结果。
学生成绩管理系统C语言版
1、2、编一程序,能计算每个学生的总分和平均分。
3、编一程序,能按输入要求打印各门课程的最高分和最低分的同学。
4、编一程序,能将五个学生的成绩按总分进行降序排序。
5、编一程序,能删除一个学生的记录;6、编一程序,能增加一个学生的记录;建立一个菜单模式的学生信息管理系统,完成功能如下:一、建立主菜单*****学生信息管理系统*****1、输入学生信息2、输出学生信息3、计算每个同学成绩的总分与平均分4、对学生成绩进行排序5、输出每门功课最高分的同学信息6、输出每门功课最低分的同学信息7、退出系统主菜单界面:二、将综合练习一中的程序改写为子程序并能通过主菜单进行调用。
先上图开发环境windows 7,vc 6.0 开始贴代码:/*************** 张海山* 10软件2班* 安庆职业技术学院* QQ:136533295******************/#include"stdio.h"#include"stdlib.h"#include"malloc.h"#include"string.h"typedef struct lode{int id;char name[20];char sex[10];int score[4];struct lode *next;}lode,*linklist;linklist input(linklist head)//输入学生信息{char cmd='y';int t,i,l;char name[10];char sex[2];int score[3]={0};//int sum;linklist p;while(cmd=='y'||cmd=='Y'){p=(linklist)malloc(sizeof(lode));printf("请输入学生的编号\n");fflush(stdin);scanf("%d",&t);p->id=t;printf("请输入学生的姓名:\n");fflush(stdin);scanf("%s",p->name);/* l=strlen(p->name);p->sex[l]='\0';/* for(i=0;i<l;i++){p->name[i]=name[i];}*/printf("请输入学生的性别:\n");fflush(stdin);scanf("%s",p->sex);/* l=strlen(p->sex);p->sex[l]='\0';/* for(i=0;i<l;i++){p->sex[i]=sex[i];}*/fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&score[0]);p->score[0]=score[0];fflush(stdin);scanf("%d",&score[1]);p->score[1]=score[1];fflush(stdin);scanf("%d",&score[2]);p->score[2]=score[2];fflush(stdin);p->next=head->next;head->next=p;printf("是否继续(y)&返回主菜单(n) y&n\n");fflush(stdin);scanf("%c",&cmd);}return head;}linklist print(linklist head){linklist p;int i=1;p=head->next;printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");while(p!=NULL){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);p=p->next;/*if(p==NULL)break;printf("%d\n",i);*/}//printf("%d\n",i);//printf("i=%d\n",i);return 0;}void avg(linklist head){int sum=0;double avg=0;linklist p;p=head->next;while(p!=NULL){sum=0;sum=p->score[1]+p->score[2]+p->score[0];avg=sum/3;printf("%s的总分为:%d\t平均分为:%.2lf\n",p->name,sum,avg);p=p->next;}}void maxmin(linklist head){linklist p;intmax1=0,max1index,min1=head->next->score[0],min1index,max2=0,max2index,min2=head->nex t->score[1],min2index,max3=0,max3index,min3=head->next->score[2],min3index;p=head->next;while(p!=NULL){if(max1<(p->score[0])){max1=p->score[0];max1index=p->id;}if(min1>=(p->score[0])){min1=p->score[0];min1index=p->id;}if(max2<(p->score[1])){max2=p->score[1];max2index=p->id;}if(min2>=(p->score[1])){min2=p->score[1];min2index=p->id;}if(max3<(p->score[2])){max3=p->score[2];max3index=p->id;}if(min3>=(p->score[2])){min3=p->score[2];min3index=p->id;}p=p->next;}printf("英语:\n");p=head->next;while(p!=NULL){if((p->id)==max1index)printf("英语最高分为:%d\t姓名为:%s\n",p->score[0],p->name);if((p->id)==min1index)printf("英语最低分为:%d\t姓名为:%s\n",p->score[0],p->name);p=p->next;}printf("数学:\n");p=head->next;while(p!=NULL){if((p->id)==max2index)printf("数学最高分为:%d\t姓名为:%s\n",p->score[1],p->name);if((p->id)==min2index)printf("数学最低分为:%d\t姓名为:%s\n",p->score[1],p->name);p=p->next;}printf("语文:\n");p=head->next;while(p!=NULL){if((p->id)==max3index)printf("语文最高分为:%d\t姓名为:%s\n",p->score[2],p->name);if((p->id)==min3index)printf("语文最低分为:%d\t姓名为:%s\n",p->score[2],p->name);p=p->next;}}void rank(linklist head){linklist p;int i=0,j,k,n=0;int sum[100];p=head->next;while(p!=NULL){n++;sum[i]=p->score[1]+p->score[2]+p->score[0];i++;p=p->next;}printf("n=%d\n",n);for(i=1;i<6;i++){for(j=0;j<6-i;j++)if(sum[j]<sum[j+1]){k=sum[j];sum[j]=sum[j+1];sum[j+1]=k;}}printf("\t序号\t姓名\t性别\t英语\t数学\t语文\n");for(i=0;i<n;i++){p=head->next;while(p!=NULL){if(sum[i]==(p->score[1]+p->score[2]+p->score[0])){printf("\t%d\t%s\t%s\t%d\t%d\t%d\n",p->id,p->name,p->sex,p->score[0],p->score[1],p->sco re[2]);break;}p=p->next;}}}void add(linklist head){linklist p,q;p=head;q=(linklist)malloc(sizeof(lode));printf("请输入要插入学生的序号:\n");fflush(stdin);scanf("%d",&q->id);fflush(stdin);printf("请输入学生的姓名:\n");scanf("%s",q->name);fflush(stdin);printf("请输入学生性别:\n");scanf("%s",q->sex);fflush(stdin);printf("请依次输入学生的三门课成绩:\n");scanf("%d",&q->score[0]);fflush(stdin);scanf("%d",&q->score[1]);fflush(stdin);scanf("%d",&q->score[2]);fflush(stdin);q->next=NULL;while(p->next!=NULL){p=p->next;}p->next=q;//p->next=NULL;}void del(linklist head){linklist p,temp;int j;p=head->next;temp=head;printf("请输入要删除学生记录的序号:\n");scanf("%d",&j);while(p!=NULL){if(p->id!=j){p=p->next;temp=temp->next;}else{temp->next=p->next;free(p);break;}}}void main(){int cmd;linklist head;head=(linklist)malloc(sizeof(lode));head->next=NULL;do{printf("\n\n |***************学生成绩管理程序***************|\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 主菜单|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");printf(" | |\n");printf(" | 请输入选择项目:|\n");printf(" | |\n");printf(" | 1、输入学生成绩|\n");printf(" | |\n");printf(" | 2、输出学生成绩|\n");printf(" | |\n");printf(" | 3、计算总成绩、平均成绩|\n");printf(" | |\n");printf(" | 4、求最高分、最低分|\n");printf(" | |\n");printf(" | 5、排序|\n");printf(" | |\n");printf(" | 6、增加记录|\n");printf(" | |\n");printf(" | 7、删除记录|\n");printf(" | |\n");printf(" | 0、退出系统|\n");printf(" | |\n");printf(" |----------------------------------------------|\n");scanf("%d",&cmd);switch(cmd){case 0:break; //退出系统case 1: input(head);break; //输入学生信息case 2: print(head);break; //输出学生信息case 3: avg(head);break; //求总成绩、平均数case 4: maxmin(head);break; //最高分case 5: rank(head);break; //排序case 6: add(head);break; //增加记录case 7: del(head);break; //删除记录default :printf("您输入错误!\n");}}while(cmd!=0);}因为是C语言版的要严格按照样子输入哦要不然就会出现不可预料的结果。
汇编学生成绩程序设计报告
《汇编语言程序设计》综合程序设计实验报告题目:学生成绩管理系统一、项目简介此学生成绩管理系统实现了对学生成绩的基本管理功能,可以完成学生的显示,分数段人数统计,成绩排名以及插入查找等基本功能,并且成功实现了将学生信息写入文件以及从文件中读取的功能。
该项目运用了多个主程序的分支以及多个子程序,还有宏的定义和使用,基本涵盖了本学期所学知识,还应用了很多课外拓展的知识。
此项目是我们小组三人共同努力的结晶。
二、小组成员具体分工闫立新完成部分:主要完成程序的显示所有学生,文件的写入、读出和代码段定义部分。
王伟光完成部分:主要完成程序的所有学生排名,学生的查找、添加和代码段定义部分。
宋景超完成部分:主要完成程序的分数段统计,屏幕清屏、子程序和代码段定义部分。
三、需求分析与设计学生成绩管理系统,最基本的功能是实现最学生的显示和以及成绩的排名,和分数段的统计,以便分析教学效果。
我们的系统可以说完全达到了这个要求。
在这个系统的第一个功能就实现了所有学生的显示和他们对应的成绩。
此分支采用了内存存储单元中读取数据的方法,通过地址的不断增加来实现对学生姓名和成绩存储和输出。
统计学生分数段人数部分采用了多个跳转指令来实现,符合条件则使相应的分数段人数加1,不符合该分数段人数则跳转到相应的分数段并使该分数段人数加1。
对学生的排名,我们则选择了经典的冒泡排序来实现。
运用三条循环指令,lopi,lopj,lopk。
对学生的添加,我们设置了一个全局变量n来记录多少个数据,增加几个数据n就加几,然后输入姓名到新的内存中,输入成绩时因为成绩初始化时是以ASICC保存的,而输入的是字符,所以使用0FH现将其变成真正的数字然后通过*10等运算将其转化为ASICC即可对学生的查找,我们通过使用字符串比较来进行查找,使用bp来进行地址的改变,同时使用n5进行判断是否已经完成了查找已经是否找到了数据,找到数据则输出,找不到则输出错误文件的写入部分首先用dos指令3CH来创建一个文件,然后用dos指令40H 写入内容,在BX中装入文件代号,要写入的字节数放在CX中,输入缓冲区的地址放在DX中。
汇编语言学生成绩管理系统程序
;此版本解决输入分数时输入错不能更改的bug;解决了冒泡排序时用内存当变量问题;可以清屏;使用help宏,使程序看起来更简洁;若分数输错,仅保留前两位;实现了界面化;实现了delete、modify功能nextline macropush axmov ah,0ehmov al,0dhint 10h ;调用bios输出换行符mov al,0ahint 10h ;调用bios输出回车符pop axendmhelp macro address ;打印提示信息mov ah,09hlea dx,addressint 21hendmchoice macro ;界面help mess1help mess2help mess3help mess4help mess5help mess6help mess7help mess8help mess9nextlinehelp mess10nextlineendm;学生信息的结构man strucxnum db 10,?,10 dup(0) ;学生的学号xname db 20,?,20 dup(0) ;学生的名字xclass db 10,?,10 dup(0) ;学生的班级xscore dw 0 ;学生的成绩man endsdata segmentmess1 db ' ***************************************************',0ah,0dh,'$'mess2 db ' * Student Grade Magement System *',0ah,0dh,'$'mess3 db ' * Made By XXXXXXXXXXXXX *',0ah,0dh,'$'mess4 db ' * *',0ah,0dh,'$'mess5 db ' * List(l) Insert(i) *',0ah,0dh,'$'mess6 db ' * Statistic(s) Delete(d) *',0ah,0dh,'$'mess7 db ' * Order(o) Modify(m) *',0ah,0dh,'$'mess8 db ' * Exit(e) Continue(c) *',0ah,0dh,'$'mess9 db ' ***************************************************',0ah,0dh,'$'mess10 db 'Make a choice:$'mess11 db 'Faild$'mess12 db 'Succesfully$'welcome db ' Hello! Welcome$'p_info db ' The info of the students $'input1 db 'Input the num of student:$'input2 db 'Input the name of student:$'input3 db 'Input the class of student:$'input4 db 'Input the score of student:$'output1 db 'num =$'output2 db 'name =$'output3 db 'class=$'output4 db 'score=$'output5 db ' The statistics of the students $'s_num0 db 'The total num of students=$'s_num1 db 'score(0 -60)=$'s_num2 db 'score(60-70)=$'s_num3 db 'score(70-80)=$'s_num4 db 'score(80-90)=$'s_num5 db 'score(90-100)=$'s_num6 db 'The average score of students=$'is db 0temp1 db 5,?,5 dup(0) ;为了使输入的分数也能输入错误的情况下修改而用的temp2 db 10,?,10 dup(0) ;删除时存储学号用的sum_h dw 0 ;总分数的高位sum_l dw 0 ;总分数的低位total dw 0 ;学生的人数average dw 0 ;平均成绩s_59 dw 0 ;小于60s_60 dw 0 ;60到70s_70 dw 0 ;70到80s_80 dw 0 ;80到90s_90 dw 0 ;90到99con db 48 ;结构字段的大小,为常数stu man 100 dup(<>) ;学生信息data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axcall make_c;*************************************************make_c procfirst:call clearcall cursornextlinechoicemov ah,1 ;1号系统调用int 21hmov bh,alch_i: ;插入cmp bh,'i'jne ch_lcall clearcall cursorch_i_1:mov [temp1+2],0 ;消除上一次get输入数据的影响mov [temp1+3],0mov [temp1+4],0mov [temp1+5],0mov [temp1+6],0call getmov ah,1int 21hcmp al,'c'nextlineje ch_i_1jmp firstch_l: ;显示学生成绩cmp bh,'l' ;显示jne ch_ocall clearcall cursorch_l_1:call printmov ah,1int 21hcmp al,'c'nextlineje ch_l_1jmp firstch_o: ;进行排序cmp bh,'o'jne ch_scall clearcall cursorch_o_1:call sortcall printmov ah,1int 21hcmp al,'c'nextlineje ch_o_1jmp firstch_s: ;进行统计信息cmp bh,'s'jne ch_dcall clearcall cursorch_s_1:call statistic_print;打印统计信息mov ah,1int 21hcmp al,'c'nextlineje ch_s_1jmp firstch_d: ;进行删除cmp bh,'d'jne ch_mcall clearcall cursorch_d_1:call deletemov ah,1int 21hcmp al,'c'nextlineje ch_d_1jmp firstch_m: ;进行修改cmp bh,'m'jne ch_ecall clearcall cursorch_m_1:call deletenextlinecmp is,0je ch_m_2call getch_m_2:mov ah,1int 21hcmp al,'c'nextlineje ch_m_1jmp firstch_e: ;退出cmp bh,'e'je ch_jmp firstch_: mov ah,4chint 21hmake_c endp;*************************************************;清屏函数,使用10H中断的06功能将屏幕右下角位置18H行,4FH列(DX)移动到左上角00H,00H;BIOS中断类型10H;功能号06H 屏幕上卷;辅助调用寄存器AL=上卷行数BH=上卷行属性CH=左上Y CL=左上X DH=右下Y DL=右下X;如果AL=0,则整屏空白;普通文本模式下IBM PC屏幕被划分为80行25列(从00开始)clear proc ;清屏push cxmov ax,0600Hmov bh,07mov cx,0000mov dx,184fHint 10Hpop cxretclear endp;光标定位函数,使用10H中断的02功能将光标定位;BIOS中断类型10H;功能号02H 设置光标位置;辅助调用寄存器BH=页号DH=行DL=列cursor procmov ah,02mov bh,00mov dl,0mov dh,1int 10Hretcursor endp;*************************************************get proc ;得到学生的信息push axpush cxpush bxpush sipush dimov si,offset stu ;学生的入口地址mov al,con ;把一个数据块的大小放入almov ah,0 ;把al扩展到axmul total ;乘以人数add si,ax ;相对于人数的偏移位置;得到信息;input1help input1mov dx,simov ah,0ah ;输入学号字符串int 21hmov al,[si+1]add al,2mov ah,0add si,axmov [si],byte ptr '$'sub si,axnextline;input2help input2add si,12mov dx,simov ah,0ah ;输入姓名字符串int 21hmov al,[si+1]add al,2mov ah,0add si,axmov [si],byte ptr '$'sub si,axnextline;input3help input3add si,22mov dx,simov ah,0ah ;输入班级字符串int 21hmov al,[si+1]add al,2mov ah,0add si,axmov [si],byte ptr '$'sub si,axnextline;input4help input4call d_b ; 从键盘读入分数add si,12mov [si],bxnextlineinc total ;学生总人数加1nextline;求总分数add sum_l,bxadc sum_h,0;判断属于哪个分数段cmp bx,0258hjae con_60 ;大于等于60inc s_59jmp pp1con_60:cmp bx,02bch ;大于等于70jae con_70inc s_60jmp pp1con_70:cmp bx,0320h ;大于等于80jae con_80inc s_70jmp pp1con_80:cmp bx,0384h ;大于等于90jae con_90inc s_80jmp pp1con_90:inc s_90pp1:pop dipop sipop bxpop cxpop axget endp;*****************************************print procpush axpush cxpush bxpush sipush di;输出打印信息help p_infonextlinemov si,offset stu ;学生的入口地址mov cx,total ;学生总数作为打印的循环次数cmp cx,0je kkjmp L7kk:jmp kkkL7:;打印学号help output1add si,2mov dx,simov ah,9int 21hadd si,12 ;si内存的是姓名串的首地址nextline;打印姓名help output2mov dx,simov ah,9int 21hadd si,22 ;si内存的是班级串的首地址nextline;打印班级help output3mov dx,simov ah,9int 21hadd si,10nextlinehelp output4mov bx,[si]call near ptr b_dnextlineadd si,2nextlinedec cxcmp cx,0jz kkk ; 注意,开始时用loop L7会超过距离显示; jump out of by 8 bytes,所以此处改成这样了jmp L7kkk:pop dipop sipop bxpop cxpop axretprint endp;***********************************************delete proc ;删除模块push axpush cxpush bxpush sipush dimov cx,totalcmp cx,0jne delete_1help mess11mov is,0jmp delete_0delete_1:help input1mov dx,offset temp2mov ah,0ah ;输入学号字符串int 21hnextlineinc dxmov di,dxmov bl,[di]mov si,offset stu ;学生信息入口add si,1delete_2:cmp [si],bl ;比较字符串长度jne delete_6push cx ;字符串长度相等则一个一个比较字符mov di,dxadd di,1add si,1mov bh,0mov cx,bxdelete_4:mov bh,[di]cmp bh,[si]je delete_3 ;相等的情况delete_5:add si,cx ;不相等的情况下mov bh,0sub si,bxadd di,cxsub di,bxsub si,1pop cxdelete_6:dec cxcmp cx,0jne delete_8help mess11mov is,0jmp delete_0delete_8:add si,48jmp delete_2 ;delete_3:dec cxadd si,1add di,1cmp cx,0jne delete_4 ;继续把此串比较完pop cxmov bh,0sub si,bxadd si,44cmp [si],0258hjae dd_60 ;大于等于60dec s_59jmp delete_7dd_60:cmp [si],02bch ;大于等于70jae dd_70dec s_60jmp delete_7dd_70:cmp [si],0320h ;大于等于80jae dd_80dec s_70jmp delete_7dd_80:cmp [si],0384h ;大于等于90jae dd_90dec s_80jmp delete_7dd_90:dec s_90delete_7:mov dx,[si]sub sum_l,dxsbb sum_h,0mov dx,0mov [si],dx ;分数置为0再排序call sortdec totalhelp mess12mov is,1delete_0:pop dipop sipop bxpop cxpop axdelete endp;************************************************ statistic_print procpush axpush cxpush sipush dinextlinehelp output5nextlinehelp s_num0 ;学生的总人数mov bx,totalcall sta_childnextlinecmp bx,0je failhelp s_num6 ;平均分mov dx,sum_h ;总分的高字mov ax,sum_l ;总分的低字div totalmov average,axmov bx,axcall b_dnextlinefail:help s_num1 ;不及格的mov bx,s_59call sta_childnextlinehelp s_num2 ;60-70mov bx,s_60call sta_childnextlinehelp s_num3 ;70-80mov bx,s_70call sta_childnextlinehelp s_num4 ;80-90mov bx,s_80call sta_childnextlinehelp s_num5 ;90-100mov bx,s_90nextlinepop dipop sipop cxpop axretstatistic_print endp;****************************************sta_child procmov ax,bxcmp ax,0jbe p1mov bl,100 ;除以100div bltest al,0ffh ;人数小于100的jz p2mov ch,alcall print_dp2:mov al,ahmov ah,0mov bl,10div bltest al,0ffh ;人数小于10的jz p3mov ch,alcall print_dp3:mov ch,ahcall print_djmp p4p1:mov ch,0call print_dp4:retsta_child endp;********************************************* d_b proc ;10进制转化成2进制,返回参数为bx push cxpush axpush simov bx,0mov si,offset temp1 ;temp1的地址传到dx mov dx,simov ah,0ah ;输入分数int 21hmov cx,3add si,1nc:inc simov al,[si]cmp al,'.'je L1cmp cx,1je L1sub al,'0' ;减去0jb exit ;小于0跳到exitcmp al,09h ;和9比较ja exit ;大于9跳到exitcbw ;将al进行符号扩展到axadd ax,bx ;将ax和bx相加shl ax,1 ;(ax)×2mov bx,axshl ax,1 ;(ax)×4shl ax,1 ;(ax)×8add bx,ax ;(ax)的10倍loop ncL1:inc simov al,[si]sub al,'0' ;减去0jb exit ;小于0跳到exitcmp al,09h ;和9比较ja exit ;大于9跳到exitcbw ;将al进行符号扩展到axadd bx,ax ;将ax和bx相加exit:pop dipop sipop axpop cxretd_b endp;******************************************b_d proc ;把二进制转化成十进制的函数,入口参数为bx push axpush cxpush dxmov ax,bx ;2进制数传给axmov cl,alcmp ax,10 ;和10比较jb L2 ;跳到打印0的位置mov bl,10div bl ;除以10mov cl,ah ;余数放到cl中cbwcmp ax,10 ;和10比较jb L3 ;跳到分数小于10的情况mov bl,10 ;分数大于10的情况div blmov ch,alcall print_d ;打印百位mov ch,ahcall print_d ;打印十位jmp pointL2:mov ch,0call print_djmp pointL3: mov ch,alcall print_d ;分数小于10的情况point:call print_p ;打印小数点mov ch,clcall print_d ;打印第一位小数pop dxpop cxpop axretb_d endp;******************************************print_d proc ;显示一位数字的函数push axpush bxpush dxmov dl,chmov ah,02hadd dl,'0'int 21hpop dxpop bxpop axretprint_d endp;******************************************print_p proc ;显示小数点push axpush bxpush dxxor dx,dxmov ah,02hadd dl,'.'int 21hpop dxpop bxpop axretprint_p endp;*******************************************sort proc;冒泡算法排序push axpush cxpush dxpush sipush dimov ax,dsmov es,axmov ax,total ;外层循环的次数push ax ;解决了冒泡排序时用内存当变量问题sort1:pop axdec axcmp ax,0 ;外层循环若为0,则已比较完毕jbe sort3mov bx,ax ;bx存内层循环mov si,offset stuadd si,46 ;到分数的地址mov di,siadd di,48push axsort2:mov ax,[si]mov dx,[di]cmp ax,dxjae sort4sub si,46sub di,46mov cx,48 ;循环48次,交换两个数据块sort5:xchg al,[si] ;交换两个数据xchg al,[di]xchg al,[si]add si,1add di,1loop sort5sub si,2sub di,2sort4:dec bx ;内层循环减一cmp bx,0je sort1 ;若为0,跳到外层循环add si,48add di,48jmp sort2sort3:pop dipop sipop dxpop cxpop axretsort endp;****************************************** code endsend start。
汇编-学生成绩管理
这是一个学生成绩管理系统,其中“I”表示插入,“L”表示浏览,“Q”表示查询,“E”表示退出,“D”表示删除,“M”表示修改,"c"表示统计各分数段人数,"p"表示打印. 本程序实现了:(1)单独运行以上各功能,即在进入主菜单以后,点一功能键后关闭,再进入主菜单点别的功能键。
如运行"cjgl"文件后,在出现的主界面中点“I”,可插入数据,插入完以后,关闭;在出现的主界面中点“M”,可修改数据,修改完以后关闭,用同样的方法可运行其它的功能。
(2)连续运行部分的功能。
应将文件"score.txt"放在相应的路径下.如在本程序中,需将该文件放在"c:\masm\score.txt"下. 注:该文件的路径可从汇编源文件的"fname db "c:\masm\score.txt"""中查找.Score.txt内容:shang 33363622yang 33232366shang ee333333yang 00002222yang 33966545yang 00010221liyang 66666666liy 33030020liu 23323333yan 32322300源程序内容data segmentmess1 db ' student grade management system',0ah,0dh,'$'mess2 db ' this is main menu',0ah,0dh,'$'mess3 db ' insert (i) please input:',0ah,0dh,'$'mess4 db ' modify (m) name :',0ah,0dh,'$'mess5 db ' delete (d) maths :',0ah,0dh,'$'mess6 db ' query (q) english :',0ah,0dh,'$'mess7 db ' count (c) computer:',0ah,0dh,'$'mess8 db ' print (p) chinese :',0ah,0dh,'$'mess9 db ' exit (e)',0ah,0dh,'$'mess10 db '**********************************************************$'mess11 db 'name Ma En Co Ch',0ah,0dh,'$'mess13 db ' list (l)',0ah,0dh,'$'mess12 db 'maths <60 <70 <80 <90 <100',0ah,0dh,'$'err1 db ' there is not this student$'err2 db ' file close wrong$'fname db "e:\hbyy\score.txt"buffer1 db 23 dup(?)buffeer db 0ah,0dh,'$'buffer2 db 30 dup(?)buffer3 db 8 dup('0')count db 5handle dw ?del db 8 dup('0')x db ?data endsscore strucnames db 15 dup(' ')maths db 0,0english db 0,0computer db 0,0chinese db 0,0score endsshow macro addrslea dx,addrsmov ah,9int 21hendmset_p1 macro amov ah,2mov dh,amov dl,36mov bh,0int 10hendmset_p2 macromov ah,2mov dh,12mov dl,2mov bh,0int 10hendmset_p3 macromov ah,2mov dh,1mov dl,30mov bh,0int 10hendmclear macro ;all screen mov al,0mov cl,0mov ch,0mov dh,24mov dl,79mov bh,7mov ah,6int 21hendmclear1 macro ;lefe screenmov al,0mov bh,7mov ch,4mov cl,36mov dh,10mov dl,79mov ah,6int 10hendmclear2 macro ;down screen mov al,0mov bh,7mov ch,12mov cl,0mov dh,24mov dl,79int 10hendmnewline macropush axpush dxmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hpop dxpop axendmshow_item macro addrslocal iloop,w10push bxpush cxmov bx,0iloop: mov dl,addrs[bx] ;display char mov ah,2int 21hinc bxcmp bx,15jl iloopmov cx,4w10: mov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hmov dl,addrs[bx]mov ah,2int 21hinc bxmov dl,addrs[bx]mov ah,2int 21hinc bxloop w10newlinepop cxpop bxendmgetin macro addrs,count2local zeroit,lp,input_end,exitpush bxpush axmov bx,0zeroit: mov addrs[bx],' 'inc bxcmp bx,15jl zeroitmov bx,0lp: mov ah,1int 21hcmp al,0ahjz input_endcmp al,0dhjz input_endmov addrs[bx],alinc bxcmp bx,count2jl lpinput_end: cmp al,0dhjz exitcmp al,0ahjz exitmov ah,7int 21hjmp input_endexit:pop axpop bxendmcode segmentmain proc farassume cs:code,ds:data,es:datastart:mov ax,datamov ds,axmov ah,0mov al,3int 10hclearshow mess1show mess2show mess13show mess3show mess4show mess5show mess6show mess7show mess8show mess9newlineshow mess10set_p3w: mov ah,7int 21hcmp al,'i'jnz n1call insertjmp wn1: cmp al,'m'jnz n2call modifyjmp wn2: cmp al,'d'jnz n3call deletejmp wn3: cmp al,'q'jnz n4call queryjmp wn4: cmp al,'c'jnz n5call cotjmp wn5: cmp al,'p'jnz n6call printjmp wn6: cmp al,'l'jnz n7call listjmp wn7: cmp al,'e'jz exitfjmp w exitf:mov ah,4chint 21hretmain endpinsert proc nearpush axpush bxpush cxpush dxmov dx,offset fnamemov al,2mov ah,3dhint 21hmov bx,axclear1set_p1 4call get_recmov cx,0 ;move file pointer to endmov dx,0mov al,2mov ah,42hint 21hmov cx,23 ;write filemov dx,offset buffer1mov ah,40hint 21hmov ah,3ehint 21hset_p3pop dxpop cxpop bxpop axretinsert endpget_rec proc nearpush axpush bxgetin buffer2,15mov bx,0mov cx,15continue: mov al,buffer2[bx]mov buffer1[bx],alinc bxloop continueset_p1 5getin buffer2,2mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxset_p1 6getin buffer2,2mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxset_p1 7getin buffer2,2mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxset_p1 8getin buffer2,2mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxpop bxpop axretget_rec endpopenf proc nearmov dx,offset fnamemov al,02mov ah,3dhint 21hmov handle,axopenf endpquery proc nearpush axpush bxpush cxpush dxclear1clear2mov dx,offset fnamemov al,2mov ah,3dhint 21hmov bx,axset_p2getin buffer1,15lea dx,mess11mov ah,9int 21hb:mov ah,3fhmov cx,23mov dx,offset buffer2int 21hlea si,buffer2lea di,buffer1mov cx,15c:mov al,byte ptr[si]cmp al,byte ptr[di]jnz binc siinc diloop cmov [buffer2+23],'$'show_item buffer2mov ah,3ehint 21hpop dxpop cxpop bxpop axretmodify proc nearpush axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dhint 21hmov bx,axmov handle,axcall get_rec ; contact is in buffer1 read:mov dx,offset buffer2mov cx,23mov ah,3fhint 21hlea si,buffer2lea di,buffer1mov cx,15c5:mov dl,byte ptr[si]cmp dl,byte ptr[di]jnz readinc siinc diloop c5mov bx,handlemov ah,42hmov al,1mov cx,0ffffhmov dx,-23int 21hmov cx,23mov dx,offset buffer1mov ah,40hint 21hmov ah,3ehint 21hjmp exit2exit1:set_p2show err1exit2:set_p3pop dxpop cxpop bxpop axretmodify endpdelete proc nearpush axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dhint 21hmov bx,axmov handle,axgetin buffer1,15 ; contact is in buffer1 read5:mov dx,offset buffer2mov cx,23mov ah,3fhint 21hlea si,buffer2lea di,buffer1mov cx,15c6:mov dl,byte ptr[si]cmp dl,byte ptr[di]jnz read5inc siinc diloop c6mov bx,handlemov ah,42hmov al,1mov cx,0ffffhmov dx,-8int 21hmov cx,8mov dx,offset delmov ah,40hint 21hmov ah,3ehint 21hjmp exit6exit5:set_p2show err1exit6:set_p3pop dxpop cxpop bxpop axretdelete endplist proc nearpush axpush bxpush cxpush dxclear1clear2set_p2show mess11mov dx,offset fnamemov al,2mov ah,3dhint 21hmov bx,axagain:mov dx,offset buffer1mov cx,23mov ah,3fhint 21hcmp ax,0show_item buffer1jmp againp:mov ah,3ehint 21hset_p3pop dxpop cxpop bxpop axretlist endpprint proc nearpush axcall openfmov cl,countmov ch,0read2:mov dx,offset buffer1mov cx,type scoremov ah,3fhint 21hmov cx,23hmov bx,0next: mov ah,5mov dl,byte ptr buffer1[bx]int 21hinc bxloop nextmov ah,5mov dl,0dhint 21hdec xcmp x,0jnz read2mov bx,handlemov ah,3ehint 21hpop axretprint endppush axclear2set_p2show mess12mov dx,offset fnamemov ah,3dhint 21hmov bx,axmov handle,ax read0: mov dx,offset buffer2mov cx,23mov ah,3fhint 21hmov dl,[buffer2+15]cmp dl,'6'jl fivecmp dl,'7'jl sixcmp dl,'8'jl sevencmp dl,'9'jl eightinc [buffer3+4]jmp quiteight:inc [buffer3+3]jmp quitseven: inc [buffer3+2]jmp quitsix: inc [buffer3+1]jmp quitfive: inc [buffer3]quit: cmp ax,0jnz read0mov cx,10a: mov dl,' 'mov ah,2int 21hloop amov bx,0a0: mov dl,[buffer3+bx]mov ah,2int 21hmov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hcmp bx,5jnz a0mov bx,handlemov ah,3ehint 21hset_p3pop axretcot endpcode endsend start。
学生成绩管理系统程序汇编
#include<stdio.h>#include<string.h>#include<process.h>#include<conio.h>#include<stdlib.h>#define N 30#define M 3typedef struct student{ char number[10];char name[20];float score[M];float aver;float total;}STU;STU stu[N];int n;void inputscore(void);void savescore(void);void avergescore(void);void total(void);void modifyscore(void);void lookscore(void);void searchscore(void);void statistic(void);void add(void);void modify(void);void delscore(void);void menu(void);void main(){ short int flag=0;menu();do{ flag=1;switch(getch()){ case'1':inputscore();break; /*输入成绩*/case'2':lookscore();break; /*查看成绩*/case'3':searchscore();break; /*查找成绩*/case'4':statistic();break; /*成绩统计*/case'5':modify();break; /*修改成绩*/case'6':add();break; /*添加成绩*/case'7':delscore();break; /*删除成绩*/case'8':savescore();break; /*保存成绩*/case'9':exit(0); /*退出程序*/default:printf("输入有误\n");}printf("按任意键继续\n");getch();menu();}while (flag==1);}void menu(void){system("cls");printf("\n");printf("**********欢迎进入学生成绩管理系统**********\n");printf(" 菜单\n");printf("输入成绩-------------1\n");printf("查看成绩及成绩排序--------2\n");printf("查询学生成绩------------3\n");printf("成绩统计-----------------4\n");printf("修改成绩-------------5\n");printf("添加成绩-------------6\n");printf("删除成绩-------------7\n");printf("保存成绩-------------8\n");printf("推出系统-------------9\n");printf("********************************\n");printf("请输入您的选择\n");}/********输入各个同学的学生信息(王超)**********/void inputscore(void){ int i,j;system("cls");printf("请输入学生总数: \n");scanf("%d",&n);printf("提示:*输入学号时请输入由1位大写字母和8位数字组成的学号,如P0********\n"); /*因二维表上下需要对正故有此要求*/for(i=0;i<n;i++){ printf("请输入学生%d的学号姓名:\n",i+1);scanf("%s%s",stu[i].number,stu[i].name);printf("高数\t物理\tC语言\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);}printf("成功输入\n");}/***********计算各个同学的总分(孙友)**************/void total(void){ int i,j;for(i=0;i<n;i++){ stu[i].total=0;for(j=0;j<M;j++){stu[i].total+=stu[i].score[j];}}}/***********计算各个同学的平均分**********/void avergescore(void){ int i,j;for(i=0;i<n;i++){ stu[i].aver=0;for(j=0;j<M;j++){stu[i].aver+=stu[i].score[j];}stu[i].aver=stu[i].aver/M;}}/*******查看学生成绩及平均分对学生进行排序*********/void lookscore(void){int i,j,k;STU t;total();avergescore();system("cls");for(i=0;i<n-1;i++){for(k=i,j=i+1;j<n;j++)if(stu[i].aver<stu[j].aver){t=stu[j];stu[j]=stu[i];stu[i]=t;}}printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");for(i=0;i<n;i++){printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f\t",stu[i].aver);printf("\n");}}/********通过输入学号查找学生成绩**********/void searchscore(void){char a[10];int i,j;system("cls");printf("请输入需要查询的学生学号\n");scanf("%s",a);for(i=0;i<n;i++){if(strcmp(a,stu[i].number)==0){printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f\t",stu[i].aver);printf("\n");break; /*找到该学生的成绩信息后跳出for循环*/ }else if (i<n-1)continue;elseprintf("未找到该学生信息\n");}}/******统计学生成绩信息,平均分及格率,优秀率*********/void statistic(void){STU *p=stu;int i,j;float count=0.0,sum=0.0;system("cls");for(i=0;i<n;i++){sum+=(p=i)->aver;}printf("该班级平均分为%4.2f\n",sum/n); /*平均分计算*/for(i=0;i<n;i++){if((p+1)->aver>=60)count++;}printf("该班级及格率为%4.2f%%\n",count/n*100); /*及格率计算*/ count=0.0;for(i=0;i<n;i++){if((p+1)->aver>=90)count++;}printf("该班级优秀率为%4.2f%%\n",count/n*100); /*优秀率计算*/ printf("平均分低于60的学生名单\n");for(i=0;i<n;i++){if(stu[i].aver<60)printf("%s\n",stu[i].name);} /*统计不及格学生的名单*/}/************修改学生成绩********/void modify(void){char a[10];int i,j;system("cls");printf("请输入需要修改成绩的学生学号\n");scanf("%s",a);for(i=0;i<n;i++){if(strcmp(a,stu[i].number)==0){printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f\t",stu[i].aver);printf("\n");printf("请重新输入该学生的学号姓名:\n");scanf("%s%s",stu[i].number,stu[i].name);printf("请重新输入学生成绩:\n");printf("高数\t物理\tC语言\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]); /*找到该学生成绩后进行修改,跳出for循环*/printf("修改成功\n");break;}else if (i<n-1)continue;elseprintf("请确认该学生是否喂本班级学生!\n");}}/**********添加学生成绩**********/void add(void){int a,i,j;system("cls");printf("请输入新增加的学生人数:\n");scanf("%d",&a);n=n+a;for(i=n-a;i<n;i++){printf("请输入学生%d的学号姓名:\n",i+1);scanf("%s%s",stu[i].number,stu[i].name);printf("请输入学生成绩:\n");printf("高数\t物理\tC语言\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);printf("添加成功\n");}}/******************删除学生成绩***********************/void delscore(void){int i,j,c;char m,a[10];system("cls");printf("请输入学生学号\n");scanf("%s",a);for(i=0;i<n;i++){if(strcmp(a,stu[i].number)==0){printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");c=i;break;}elseprintf("未找到该学生信息\n");}printf("是否删除该学生成绩(y\n)\n");scanf("%s",&m);if(m=='y'){for(i=c;i<n-1;i++)stu[i]=stu[i+1]; /*结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置*/n=n-1; /*删除该学生信息后学生总数减一*/printf("删除成绩成功\n");}elseprintf("删除成绩失败\n");}/*****************保存学生成绩************************/ void savescore(void){FILE*fp;int i,flag=1;char m;system("cls");puts("是否保存学生成绩(y/n)");scanf("%s",&m);if(m=='y'){if((fp=fopen("score.dat","wb"))==NULL){printf("文件打开失败\n");return;}for(i=0;i<n;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1){printf("保存失败\n");flag=0;}if(flag==1)printf("保存成功!\n");fclose(fp);}elsereturn 0;}。
学生成绩管理系统-C++连接ODBC与ACCESS汇编
目录1 设计要求 (1)2 数据库设计 (1)2.1 概念设计 (1)2.2 逻辑设计与物理结构的设计 (2)2.3 数据库的输入 (2)3 程序设计 (4)3.1 学生信息操作 (5)3.2 学生成绩操作 (13)4 调试报告 (26)5 心得体会 (26)6 参考文献 (26)学生成绩管理系统1 设计要求管理信息系统MIS(Management Information System),在强调管理, 强调信息的现代社会中越来越得到普及, 如: 人事管理、学生管理系统、工资管理系统等。
常用的MIS系统都是基于数据库操作, 实现信息的查询、增加、删除、修改等。
学生成绩管理系统是用AECESS数据库进行数据库的设计和添加数据, 在设置数据源(ODBC)建立数据库与程序的连接后, 利用VC开发可视化界面完成基于数据库的操作, 实现学生信息的查询、增加、删除、修改和成绩信息的查询、增加、删除、修改、排序、统计等功能, 从而实现学生成绩信息的多方位显示, 方便管理者对学生成绩的管理。
2 数据库设计2.1 概念设计根据设计要求, 要对学生信息和成绩进行操作, 所以系统实体包括学生基本信息表和课程基本信息表。
学生成绩管理系统中它们的联系是一个学生可以选修多门课程, 一门课程可以被多个学生选修, 学生和课程之间是多对多的关系, 。
由以上分析可以得该系统的E-R关系图:2.2 逻辑设计与物理结构的设计根据概念设计中的E-R图, 可设计三个表, 其关系模型如下: 学生基本信息表: 学号, 姓名, 性别, 年龄, 系别课程基本信息表: 课程号, 课程名, 课时成绩表:学号, 课程号, 成绩在ACCESS中定义三个表的物理结构如下:图2 学生信息表物理结构图3 课程信息表物理结构图4 成绩表物理结构2.3 数据库的输入在ACCESS中定义好物理结构后就可以输入数据, 同时根据系统的要求, 用ACCESS做了两个查询, 分别是成绩查询和平均分查询, 为以后写程序的方便, 对平均分查询进行了按平均分从高到低排序操作。
汇编语言学生成绩管理系统报告
0 ;修改时用的,判定是否找到相应学号 5,?,5 dup(0) ;为了使输入的分数也能输入错误的情况下回
退光标进行修改而用的 10,?,10 dup(0) ;删除时存储学号用的 0 ;总分数的高位 0 ;总分数的低位 0 ;学生的人数 0 ;平均成绩 0 ;小于 60 0 ;60 到 70 0 ;70 到 80 0 ;80 到 90 0 ;90 到 99
<7>
con
db 48 ;结构字段的大小,为常数
stu man 100 dup(<>) ;学生信息
(2) make_c proc 流程图:
<8>
make_c子程序
系统显示界面
1号系统调用 接收选择字符
是否为i
N
是否为l
N
是否为o
N
是否为s
N
是否为d
N
是否为m
Y
Y
Y 清屏,进入 插入界面
N 接收字符 并判断是否为c
<4>
3. 程序最终效果
主界面: 自己运行程序截图去吧
Insert(i)插入学生信息: 自己运行程序截图去吧
<5>
List(l)显示学生成绩: 自己运行程序截图去吧
Order(o)以分数进行从高到底排序: 自己运行程序截图去吧
Statistic(s)统计学生成绩分布: 自己运行程序截图去吧
Delete(d)删除学生信息(成功:Succesfully,失败:Failed): 自己运行程序截图去吧
输入姓名字符串并 保存
输入班级字符串 并保存
Call d_b 10转2进制子程序
返回到bx中
总分数低字加bx 高字加CF位
学生成绩管理系统-vs汇编
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<dos.h>#include<string.h>#define LEN sizeof(struct student)#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"#define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum float Ielec,Iexpe,Irequ;float Felec,Fexpe,Frequ;struct student/*定义学生成绩结构体*/{int num;/*学号*/char name[15];/*姓名*/double elec;/*选修课*/double expe;/*实验课*/double requ;/*必修课*/double sum;/*总分*/};struct student stu[50];/*定义结构体数组*/void input();/*录入学生成绩信息*/void show();/*显示学生信息*/void sort();/*按总分排序*/void del();/*删除学生成绩信息*/void modify();/*修改学生成绩信息*/void menu();/*主菜单*/void insert();/*插入学生信息*/void total();/*计算总人数*/void search();/*查找学生信息*/main(){int n;menu();scanf("%d",&n);while(n){switch(n){case 1: input();break;case 2: search();break;case 3: del(); break;case 4: modify();break;case 5: insert();break;case 6: sort();break;case 7: total();break;default: break;}menu();scanf("%d",&n);}}void show(){FILE *fp;int i,m=0;fp=fopen("d:\\data.txt","ab+");while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;}fclose(fp);printf("number name elective experiment required sum\t\n");for(i=0;i<m;i++){printf(FORMAT,DATA);/*将信息按指定格式打印*/}}void menu(){system("cls");printf("\n");printf("\n");printf("\t|--------------------Student management system--------------------|\n");printf("\t| |\n");printf("\t| 0. exit |\n");printf("\t| |\n");printf("\t| 1. input record |\n");printf("\t| |\n");printf("\t| 2. search record |\n");printf("\t| |\n");printf("\t| 3. delete record |\n");printf("\t| |\n");printf("\t| 4. modify record |\n");printf("\t| |\n");printf("\t| 5. insert record |\n");printf("\t| |\n");printf("\t| 6. order |\n");printf("\t| |\n");printf("\t| 7. number |\n");printf("\t| |\n");printf("\t|-----------------------------------------------------------------|\n"); printf("\n");printf("\n");printf(" choose( 0 ~ 7 ):");}void input(){int i,m=0;char ch[2];FILE *fp;if((fp=fopen("d:\\data.txt","ab+"))==NULL) /*打开指定文件*/{printf("can not open\n");return; /*返回主函数*/}while(!feof(fp)) /*feof()函数是用来判断指针是否已经到达文件尾部的,若指针指向文件末尾,则返回值为“真”,返回。
汇编语言编写学生成绩管理系统.
hh MACRO ;回车换行宏定义 PUSH DX PUSH AX MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H POP AX POP DX ENDM clear MACRO ;清屏宏定义 PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,2 MOV DH,0 MOV DL,0 INT 10H MOV AH,6 MOV AL,0 MOV BH,7 MOV CH,0 MOV CL,0 MOV DH,24 MOV DL,79 INT 10H ENDM DATAS SEGMENT cj DB 100 DUP(-1 pm DB 100 DUP(0 mz DB 100 DUP(14 DUP(' ','$' strm1 DB '1.insert student score$' strm2 DB '2.delete student score$' strm3 DB '3.show student score and rank$' strm4 DB'ESC.exit$' stri1 DB 'input the student number:$' stri2 DB 'input this student score:$' stri3 DB 'insert success,press any key!$' stri4 DB 'input this student name:$' strd1 DB 'delete the student number:$' strd2 DB 'delete success,press any key!$' strr1 DB'===================score and rank===================$' strr2 DB 'number name score rank $' strr3 DB 'show success,press any key!$' stre DB 'error,please try again$' strq DB 'thanks for using$' DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX main: LEA DX,strm1 MOV AH,9 INT 21H hh LEA DX,strm2 ;获取STRM2的偏移地址 MOV AH,9 INT 21H hh LEA DX,strm3 ;获取STRM3的偏移地址 MOV AH,9 INT 21H hh LEA DX,strm4 MOV AH,9 INT 21H hh main1: MOV AH,1 INT 21H CMP AL,31H ;插入学生成绩 JE insert ;等于则转移INSERT CMP AL,32H ;删除 JE delete CMP AL,33H ;显示 JE rank CMP AL,1BH ;退出 JE quit JMP main1 ;跳转到MAIN1 insert: clear ;调用清屏宏 LEA DX,stri1 MOV AH,9 INT 21H hh CALL shuru MOV BX,AX hh LEA DX,stri4 MOV AH,9 INT 21H hh PUSH BX PUSH DX MOV AX,BX MOV CL,15 MUL CL MOV BX,AX LEADX,mz[BX] ;把名字存到mz中 MOV AH,10 INT 21H POP DX POP BX hh LEA DX,stri2 MOV AH,9 INT 21H hh CALL shuru MOV cj[BX],AL ;把成绩存到cj hh LEA DX,stri3 MOV AH,9 INT 21H MOV AH,1 INT 21H hh clear JMP main delete: clear LEA DX,strd1 MOV AH,9 INT 21H hh CALL shuru MOV BX,AX MOV cj[BX],-1 ;把输入学号的成绩删除 hh LEA DX,strd2 MOV AH,9 INT 21H hh MOV AH,1 INT 21H hh clear JMP main rank: MOV CX,100 MOV DH,1 rank0: MOV DL,DH DEC CXCMP CX,-1H JE rank5 MOV BX,1 rank1: CMP cj[BX],CL JE rank3 rank2: INC BX CMP BX,100 JE rank0 JMP rank1 rank3: MOV pm[BX],DL;把名次存到pm INC DH JMP rank2 rank5: clear LEA DX,strr1 MOV AH,9 INT 21H hh LEA DX,strr2 MOV AH,9 INT 21H hh MOV BX,0 MOV DH,1 rank10: INC BX CMP BX,100 JE rank11 CMP cj[BX],-1 JE rank10 INC DH MOV DL,10 MOV AH,2 INT 10H PUSH BX PUSH DX MOV AX,BX MOV CL,15 MUL CL MOVBX,AX ADD BX,2 LEA DX,mz[BX] MOV AH,9 INT 21H POP DX POP BX MOV DL,1 MOV AH,2 INT 10H MOV AX,BX CALL shuchu MOV DL,30 MOV AH,2 INT 10H MOV AL,cj[BX] CALL shuchu MOV DL,45 MOV AH,2 INT 10H MOV AH,0 MOV AL,pm[BX] CALL shuchu hh JMP rank10 rank11: LEA DX,strr3 MOV AH,9 INT 21H MOV AH,1 INT 21H clear JMP main quit: clear MOV BH,0 MOV AH,2 MOV DH,5 MOV DL,20 INT 10H LEA DX,strq MOV AH,9 INT 21H MOV AH,4CH INT21H shuru PROC NEAR PUSH BX return: MOV AH,1 INT 21H CMP AL,30H JL cuowu CMP AL,39H JG cuowu SUB AL,30H MOV AH,0 MOV BL,10 MUL BL MOV BX,AX MOV AH,1 INT 21H CMP AL,30H JL cuowu CMP AL,39H JG cuowu MOV AH,0 SUB AL,30H ADD AX,BX POP BX RET cuowu: hh LEA DX,stre MOV AH,9 INT 21H hh JMP return shuru ENDP shuchu PROC NEAR PUSH CX PUSH DX MOV CL,10 CBW ;字节扩展为字 IDIV CL MOV DH,AH MOV DL,AL ADD DL,30H MOV AH,2 INT 21H MOV DL,DH ADD DL,30H MOV AH,2 INT 21H POP DX POP CX RET shuchu ENDP CODES ENDS END START。
基于汇编语言学生成绩管理系统方案
mess5 db ' delete (d) maths :',0ah,0dh,'$'
mess6 db ' query (q) english :',0ah,0dh,'$'
mess7 db ' count (c) computer:',0ah,0dh,'$'
设计要求
学习如何用汇编语言进行数据处理。
设计分析
1.总体结构
整个程序采用主程序调用子程序的方法。主程序完成菜单的显示,子程序完成一个独立功能方法的实现。各子程序的实现方法简要描述如下:
1)设计INSERT(录入)子程序,先打开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子程序接受用户的输入,再把用户的输入写入文件,最后关闭文件返回主程序。
JNZ B ;不同则转B
INC SI
INC D
LOOP C
(5) MODIFY子程序
MODIFY子程序的功能是修改记录。
先保护现场,然后清除右上部分的记录输入区域,接着打开文件。
用GET_REC子程序获取输入的记录信息,并存入BUFFER1中。从打开的文件中读取一个记录的容(23个字节)放在BUFFER2中。
(7)LIST子程序
LIST子程序的作用是显示文件中的记录。
首先清除记录输入区和显示区域。然后显示记录字段的标题。打开文件,保留文件句柄。读取一条记录的容放在BUFFER1中,并判断是否到了文件末尾,如果不是,则显示这条记录。循环读取直到文件结束。最后关闭程序,恢复现场。
学生成绩管理系统汇编语言
摘要管理信息系统正在向着网络化、智能化和集成化等趋势发展。
学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。
它对于一个学校是不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要。
学生成绩管理管理系统为用户提供充足的信息和快捷的查询手段,实现学生基本信息、成绩的录入,删除,查询,维护以及成绩的统计分析等几方面的功能,是现实问题的迫切要求。
本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化。
达到提高学生成绩管理效率的目的。
与传统管理方法相比有明显的优点:查找方便,可靠性高,保密性好,成本低。
彻底改变了以前繁杂的管理模式,实现全面的、相对集中的、职能化的信息综合管理。
计算机被用到信息管理系统的环境正是适应了当今时代飞速发展的信息时代。
人们深刻的认识到了计算机功能的强大,对于复杂的信息管理,计算机充分发挥着它的优越性。
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低,这些优点极大地减轻了学院教学人员的工作量,缩小开支,提高了学生档案管理的效率和准确性,能够合理的安排时间,学生能够尽快的知道自己的考试成绩。
同时,学生管理系统的应用也为今天的教育在未来市场的竞争力有所提高。
关键字:学生成绩管理,插入,查找,删除,退出,修改;目录1. 系统分析 (3)1.1系统开发背景 (3)1.2初步调查与可行性分析 (3)1.3系统目标 (3)1.4系统流程图 (4)2. 系统总体设计 (5)2.1总体结构图分析 (5)2.2总体结构图 (6)2.3总体数据结构 (6)3、详细设计 (7)3.1 程序功能设计 (7)3.2 设计思路 (7)4、系统测试 (9)4.1测试方案 (9)4.2测试用例及测试结果 (9)4.3软件可靠性 (11)5、软件使用说明书 (12)6、设计总结 (13)参考文献 (14)致谢 (15)附录(源代码) (16)1. 系统分析1.1系统开发背景学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。