比赛评分系统设计
网络评分系统的设计与实现

视听2020.08|一、开发平台的选用和介绍该款评分软件使用Visual Studio 2019平台开发,Microsoft Visual Studio (以下简称为VS )是美国微软公司的开发工具包系列产品。
VS 是一个基本完整的开发工具集,包含了整个软件生命周期所需要的大部分工具。
评分系统使用C#语言为基础开发语言,采用.NET 平台WebAPI 模式开发服务器端,采用Bootstrap 、knockout.js 、WPF 构建跨平台客户端,利用Jquery 的AJAX 方法调用和服务器端进行数据交互实现。
二、系统功能及可行性分析该款评分系统采用B/S 、C/S 架构,在服务器端实现会员注册、会员权限管理、参赛数据收集、评分数据读写等功能;在客户端通过Jqury 的AJAX 方法调用实现和服务器端的数据交互,从而实现评分过程。
之所以采用WebAPI 模式开发服务器端是出于客户端跨平台特性的考虑。
采用WebAPI 模式时,服务器和客户端传输数据可选择JSON 格式。
JSON 格式是一种轻量级通用的数据交换格式,可以轻松将JSON 格式数据转换成JavaScript 对象。
得益于JavaScript 在多种应用中的广泛使用,JSON 可在手机浏览器、电脑浏览器、电脑程序、微信等多类客户端和服务器实现无差别通讯,丰富客户端形式。
以下从服务器端及客户端分析系统可行性。
(一)服务器端完成服务器端会员注册、会员权限管理、参赛数据收集、评分数据读写等基本功能,首先要建立会员模型、权限管理模型、参赛模型和评分模型,然后利用VS 平台的代码优先规则建立从模型到数据库关联,进而实现模型数据读写的基本功能。
相应模型、相关数据库建立以及服务器寄宿方式设置如下。
1.会员及权限模型。
构建该系统的权限管理模型时,该系统对会员身份的需求大致可以分为系统管理员、比赛管理员、评委、参赛者和普通会员五类。
系统登录采用注册登录制,系统管理员具有更改已注册会员身份的权限,采用 的Identity 模块来实现该系统的会员功能。
C语言课程设计之评分系统

华中师范大学传媒学院课程设计课程名称C语言课程设计题目__________________专业__________________ 班级__________________ 学号__________________ 姓名__________________ 成绩__________________ 指导教师_________________________年_______ 月_______日课程设计任务书设计题目:设计比赛评分系统(给分原则:满分为10分;裁判给出分数后,去掉一个最高分和一个最低分后的平均分为选手的最后得分(精确到小数点后两位)。
)设计目的:1. 巩固和加深课堂所学知识;2. 将课本上的理论知识和实际应用有机的结合起来,培养同学们分析和解决实际问题的能力;3. 学会编制结构清晰、风格良好、数据结构选择恰当的C语言程序;设计任务:(在规定的时间内完成下列任务)功能:1、设参赛人数为为裁判人数为(不少于11的奇数)位,2、录入参赛人员的资料和得分情况好,统计最后得分,3、按最后得分结果从高分到低分排序,4、公布一、二、三等奖的得奖选手名单。
5、此系统能够查询选手的得分情况。
具体要求:设计报告按统一撰写格式要求,应包含以下内容:1、题目:2、设计目的:2、设计内容:写出简要的程序功能描述、程序运行条件所需工具软件、输入/输出描述等。
3、程序结构:①函数定义说明;②用到的库函数(宏)的功能说明、调用关系说明、参数传送方式说明等;③主要算法描述等(各模块功能实现)。
13、设计要求:①绘制设计系统的结构层次图,各功能实现的算法、绘制结构化流程图。
②程序流程图、源程序(程序必须有简单注释,源程序若太长,可作为附录)③设计输入、输出界面。
(输出)5、(1)程序结构设计特点;(2)设计、调试程序心得、体会或不足。
附录:①参考文献百度文库C语言设计(第三版)谭浩强清华大学出版社C语言设计试题汇编(第二版)搜搜文献C语言上机指导指导教师签名:2011 年9 月5日教研室主任(或责任教师)签名:2011 年月日。
PowerPoint制作比赛评分系统

PowerPoint制作比赛评分系统最近单位组织了一次英语会话比赛,笔者用PowerPoint内嵌的VBA功能制作了一个即时评分系统,受到老师和同学们的一致好评,现将制作过程与大家分享。
准备工作:在桌面新建一个名为“评分系统”的文件夹,用于存放参赛队的相关信息,其中Name.txt 中保存了各参赛队名称(需事先准备,每个队名占一行)。
启动工作:新建一张空白幻灯片,在“视图”菜单下找到“工具栏”子菜单,选择其中的“控件工具箱”(大家也可根据实际需要改变主界面风格)。
调整相应控件位置,评委照片用的是“图像控件”,下面的分数用的是“文本框”,两个按钮用的是“命令按钮”,放置好控件之后再调整各控件的属性来美化界面,也可根据实际需要插入图片进行修饰。
评分系统主界面中包括8个评委的照片和每个评委给出的分数(如图),功能按钮包括“清空”、“最后得分”。
各评分得分的文本框的名称为TxtS1,T xtS2……TxtS8,“最后得分”按钮的名称为CommandTotal,第二张幻灯片用来显示最后得分的标签名称为LblTotal。
设计工作:打开VBA编辑器编写代码:'指定文件夹用于存放每组得分的统计文件Const Path$ = "C:\windows\desktop\评分系统\"'全局变量,最后总分Dim sum As Single'全局变量,最后平均得分Dim AverageScore As Single'全局变量,记录组次,保存后自动加1 Dim GroupNum As Integer'清空“评委得分”,清空“最后得分”Private Sub CommandButton1_Click() TxtS1.Text = ""TxtS2.Text = ""TxtS3.Text = ""TxtS4.Text = ""TxtS5.Text = ""TxtS6.Text = ""TxtS7.Text = ""TxtS8.Text = ""'清空下一张幻灯片的最后总分Slide2.LblTotal.Caption = ""End Sub'“最后得分”按钮Private Sub CommandTotal_Click() On Error GoTo erDim sum As Single'将8个评委的分数相加得出总分sum sum = sum + CSng(TxtS1.Text)sum = sum + CSng(TxtS2.Text)sum = sum + CSng(TxtS3.Text)sum = sum + CSng(TxtS4.Text)sum = sum + CSng(TxtS5.Text)sum = sum + CSng(TxtS6.Text)sum = sum + CSng(TxtS7.Text)sum = sum + CSng(TxtS8.Text)'计算出最后得分(平均分),精确到小数点后3位AverageScore = Format(sum / 8, "#.###")'第二张幻灯片显示最后得分Slide2.LblTotal.Caption = AverageScore'写入最后得分If GroupNum>=1 AND GroupNum <= 5 ThenOpen Path$ && "InpScore.txt" For Append As #1 Print #1, AverageScoreClose #1。
第3章 数组与算法——竞赛评分系统.

一、项目描述
图 3- 7
选手得分程序界面
二、项目分析
选手得分即各评委总分的平均数, 选手得分即各评委总分的平均数, 应先求出各评委的总分。 应先求出各评委的总分。要求出各评委 的总分,可以利用FOR-NEXT循环结构 的总分,可以利用 循环结构 把各评委评分重复相加, 把各评委评分重复相加,这就是程序设 计中累加求和的问题。 计中累加求和的问题。
三、程序题 1.求S=1+3+5+7+……+99的值。 的值。 . 的值 2.求N!的值,其中 由键盘输入。 由键盘输入。 . !的值,其中N由键盘输入 3.从键盘上输入这些数:10,11,6, , , 7,然后按相反的顺序:7,21,33,15,6,11, ,然后按相反的顺序: , , , , , , 10在窗体上显示。 在窗体上显示。 在窗体上显示 4.设计一个窗体,从键盘上输入 个数,显示其中 个数, .设计一个窗体,从键盘上输入10个数 最大的数,界面如图3-10所示。 所示。 最大的数,界面如图 所示
图 3- 9
选手排行榜程序界面
二、项目分析
本案例主要考虑如何对校园十大歌 手最后得分数据按从大到小( 手最后得分数据按从大到小(或从小到 的顺序进行排列, 大)的顺序进行排列,这就是程序设计 中排序问题。排序思想方法很多, 中排序问题。排序思想方法很多,下面 以选择排序为主进行分析。 以选择排序为主进行分析。
二、选择题 1.下列属于 合法的数组元素是____。 合法的数组元素是____。 .下列属于VB合法的数组元素是 A.a8 B.a[8] C.a(0) D.a{6} 2. 使用语句 声明数组A后 . 使用语句Dim Q(10) As Integer声明数组 后, 声明数组 以下说法正确的是____。 以下说法正确的是____。 A.Q数组中的所有元素值均为 数组中的所有元素值均为0 . 数组中的所有元素值均为 B. Q数组中的所有元素值不确定 数组中的所有元素值不确定 C.Q数组中的所有元素值均为空 . 数组中的所有元素值均为空 D. Q数组中的所有元素值均为 数组中的所有元素值均为10 数组中的所有元素值均为 3.用语句 声明的数组, .用语句Dim B(-3 To 5) As Integer声明的数组,其 声明的数组 元素个数是____。 元素个数是____。 A.6 B.7 C.8 D.9
毕业设计49电视竞赛评分系统——打分模块

目录第1章绪论 (1)1.1 背景 (1)1.2 问题的提出 (2)1.3 设计目标 (2)1.4 小结 (2)第2章开发工具的介绍 (4)2.1 Borland C++ Builder (4)2.1.1 简介 (4)2.1.2 系统创建流程 (4)2.1.3 接口成员 (5)2.1.4 开发环境 (5)2.1.5 环境模式 (6)2.1.6 工程的组成 (6)2.2 Access数据库 (7)2.2.1 简介 (7)2.2.2 数据库系统定义 (7)2.2.3 Access数据库 (8)2.3 Borland C++ Builder访问数据库技术 (9)2.4 小结 (9)第3章竞赛评分系统打分模块 (10)3.1 需求分析 (10)3.1.1 系统需求 (10)3.1.2 功能需求 (10)3.1.3 性能需求 (10)3.2 总体设计 (11)3.2.1 基本设计概念和处理流程 (11)3.2.2 系统层次模块 (11)3.2.3 数据库设计 (12)3.3 小结 (14)第4章详细设计 (15)4.1 分数传送模块的实现 (15)4.1.1 RS-232串行通信 (15)4.1.2 密码键盘指令集 (15)4.1.3 串口程序 (16)4.2 分数计算模块的实现 (18)4.2.1 记分模式选择 (18)4.2.2 MessageBox的介绍 (19)4.2.3 选手最终得分的计算 (19)4.2.4 分数记入数据库 (19)4.3 分数显示模块的实现- (21)4.3.1 界面简介 (21)4.3.2 评委照片显示 (21)4.3.3 分数显示 (22)4.4 排行榜模块的实现 (22)4.4.1 界面设置 (22)4.4.2 排序 (23)4.5 小结 (24)第5章系统测试 (25)5.1 系统测试目的 (25)5.2 系统测试类型 (25)5.3 系统调试 (25)5.4 系统不足 (26)5.4.1 打分模块 (26)5.4.2 排行模块 (26)5.5 小结 (26)第6章成果介绍 (27)6.1 评委打分 (27)6.2 排行榜 (31)6.3 小结 (31)总结 (32)谢辞 (33)参考文献 (34)附录 (35)电视竞赛评分系统——打分模块第1章绪论1.1 背景计算机的发展已经历了四代:电子管计算机、晶体管计算机、集成电路计算机、超大规模集成电路计算机。
才艺大赛评分系统

才艺大赛评分系统一、系统概述才艺大赛评分系统是一款专门为才艺大赛设计的评分工具,旨在为比赛提供一个公平、公正、公开的评分环境。
该系统适用于各种类型的才艺比赛,如歌唱、舞蹈、乐器演奏等。
通过本系统,评委可以方便地对选手的表演进行打分,统计分数,并生成排名。
二、功能模块1. 用户管理用户管理模块负责对评委、选手和观众等用户进行管理。
包括用户的注册、登录、信息修改等功能。
此外,系统还支持对用户权限的设置,以保障系统的安全性和稳定性。
2. 比赛管理比赛管理模块负责对比赛的整体安排和管理工作。
包括比赛信息的发布、选手报名、比赛日程安排等功能。
此外,该模块还支持比赛分组、比赛类型等设置,以满足不同比赛的需求。
3. 评分管理评分管理模块是系统的核心部分,负责对选手的表演进行评分和统计。
评委可以通过该模块对选手进行打分,并且可以查看选手的实时分数。
此外,系统还支持对评分进行审核和修改,以确保评分的准确性。
4. 数据统计与分析数据统计与分析模块负责对比赛数据进行分析和处理,生成各种统计报表,如选手得分榜、排名榜等。
此外,该模块还可以对比赛数据进行深度分析,为比赛组织者提供决策依据。
5. 互动交流互动交流模块为用户提供了一个交流平台,选手、评委和观众可以在此发表评论、留言,分享比赛心得。
此外,系统还支持投票功能,让观众参与到比赛中来,增加比赛的趣味性。
三、使用说明1. 用户注册与登录新用户需在系统中注册,填写基本的个人信息。
已注册用户可直接登录。
2. 比赛报名选手可在比赛报名期间,通过系统进行报名。
报名时需填写个人信息和才艺表演内容。
3. 比赛评分评委在比赛期间,可通过系统对选手的表演进行打分。
每个评委的分数将计入选手的总分。
4. 数据统计与查看比赛结束后,比赛组织者和评委可通过系统查看选手的得分和排名。
5. 互动交流用户可在系统中发表评论、留言,分享比赛心得。
观众还可以参与投票,选出自己心中的最佳选手。
四、系统维护与升级系统将定期进行维护和升级,以优化用户体验和增加新功能。
武术比赛裁判员评分辅助系统的设计与分析

1 现行 武术 比赛裁判员评分方式 的弊端
由于武术 比赛 的项 目特点 , 在武术裁判员评判 过程 中有 三 “ 多” : 动作 多 、 变化多、 要 素 多 J 。武 术
比赛 中的武术 动作 会 因为 运 动 员 不 同有 所 差 异 , 动 作在 连贯 、 变化 上 异 常 复 杂 , 而 每 个 动作 的 表 达 又 包含 很 多要 素 , 这 恰恰 就是 武术 评分 中的难点 。 裁 判 员 评 分 大 都 是 以个 人 经 验 判 断 记 录 为 主 ] , 平 时无 评 分 系统 的 实 际 操 作 练 习 , 相 比较 而
赛 的实 际应用 相 结 合 。重 点 考 虑界 面 的相 关 设计 、
评 分 规则 、 评分 标 准 的有序 组 成 、 评 分 结 构 的架 构 ,
L I Yi n g k u i , XU Yi n g , HE y i ng
摘
要: 通过剖析 当前武 术比赛裁判 员评 分存 在的 问题 , 提 出避免 这 些问题产 生的评 分辅助 系
统 。确 立了武术比赛裁判 员评分辅 助 系统 的设计 原则 、 设计 思路和 整体 架构, 构 建 了具 有数 字
公 正 问题 , 满足 武术 比赛 裁 判 员评 分 的科 学 化 业 务 学 习需 求 , 有效 促进 武术 运动 的长 远发 展 。
习软 件 , 裁 判 员在 比赛 中凭借 主 观经 验 对 运 动 员 的
表 现 进行 评 判 , 难 以客 观 、 准 确 反 映 不 同运 动 员 的
平性。
定 量 分析 的比赛裁 判 员 评 分 辅 助 系 统 , 使 裁 判 员 在
平 时 能促 进业 务 学 习 , 在 武 术 正赛 中获 得 良好 的实
C++实现歌手比赛评分系统

C++实现歌⼿⽐赛评分系统本⽂实例为⼤家分享了C++实现歌⼿⽐赛评分系统的具体代码,供⼤家参考,具体内容如下(⼀)需求和规格说明对⼀次歌⼿⽐赛的成绩进⾏管理,功能要求:1、输⼊每个选⼿的数据包括编号、姓名、⼗个评委的成绩,根据输⼊计算出总成绩和平均成绩(去掉最⾼分,去掉最低分)。
2、显⽰主菜单如下:1)输⼊选⼿数据2)评委打分3)成绩排序(按平均分)4)数据查询5)追加选⼿数据6)写⼊数据⽂件7)退出系统。
(⼆)设计根据上述需求,运⽤链表存储歌⼿的数据,1.数据的⽣成歌⼿⽐赛选⼿⾸先我们需要歌⼿的基本信息,将每⼀位⽤户的编号、姓名输⼊系统中,然后进⾏评委打分,之后我们对数据进⾏处理分析,计算出总分和平均值,并以.txt⽂件的格式储存起来。
2.数据的存储结构考虑到⼀个宿舍的⼈员是有限的,所以可以⽤链表进⾏存储。
宿舍的⼈员设计为结构体变量:struct singer{undefinedlong lNum;char name[20];float fScore[10];float sum1, sum2, max, min, average;struct singer *pNext;};其中包含选⼿编号、姓名、评委打分、总分(去除最⾼分和最低分)、最⾼分数、最低分数和平均分。
然后我们在主函数当中定义⼀个结构指针struct singer *spHead,作为链表的头结点,然后依次创建下⼀个结构体对他们进⾏遍历输⼊存储。
3.功能的设计函数功能的介绍接收选⼿数据:struct singer *CreatLiList(void);评委打分:void score(struct singer *);遍历输出数歌⼿数据:void TraverLiList(struct singer *);追加选⼿数据:int AppendNode(struct singer *,long , char *, float*);删除数据:int DeleteNode(struct singer *,long);搜索数据:int SearchNode(struct singer *,long );退出系统,删除链表数据:struct singer *ReleaseLiList(struct singer *);链表数据根据平均分排序:struct singer* SortList(struct singer* );将数据写⼊⽂件:将数据写⼊⽂件:void input(struct singer *);(1)输⼊选⼿数据⽤户选择功能1之后,我们对输⼊的歌⼿的编号和姓名进⾏统计存储,直到⽤户输⼊-1时,我们默认接受数据完毕,返回主程序功能页⾯。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录摘要 (1)1概述 (2)1.1任务要求 (2)1.2编程环境 (2)2分析 (3)2.1程序功能 (3)2.2设计思路 (3)3程序流程图 (4)3.1主程序流程图 (4)3.2子程序流程图 (5)4程序调试 (8)5心得与体会 (9)参考文献 (11)摘要用汇编语言编写程序能够直接利用硬件系统的特性直接对位、字节或字寄存器、存储单元、I/O端口进行处理,同时也能直接使CPU指令系统和指令系统提供的各种寻址方式编出高质量的程序。
汇编程序是最早也是最成熟的一种系统软件,能够将汇编语言源程序翻译成机器语言程序,可以自动对源程序进行检查给出错误信息等。
本说明书主要介绍了用汇编语言编写程序计算比赛成绩的设计思路和编程流程图,以及调试程序时的心得与体会。
关键词汇编流程比赛评分系统程序设计1概述1.1任务要求①比赛选手人数控制在30以下;②9个评委,每个评委给分范围为0~10分(整数),随机给出分数③9个评委的给分中,去掉一个最高分和一个最低分,余下7位评委的平均分即为参加者的得分(精确到小数点后一位);④将分数在屏幕中间位置处用红色显示出来;⑤将参加比赛的选手的排名顺序显示出来。
1.2编程环境把汇编语言翻译成机器语言的过程称为汇编,为了实现这一过程正确运行汇编语言,系统需具备以下编辑程序:Masm.exeLink.exeDebug.exeMasm为宏汇编程序,负责对源文件进行汇编;link为连接程序,把汇编后产生的目标模块连接在一起,产生可执行文件;debug是调试程序,它是调试汇编语言程序必不可少的工具。
2分析根据设计任务书分析得出程序要求具备的功能,进而写出自己的设计思路。
2.1程序功能根据设计任务要求可以得出所涉及程序必须具有以下功能(1)显示选手序号(2)显示9个评委的评分(3)用红色字体显示每位选手的平均分(4)根据选手平均得分排序(本程序按照分数由高到低排列)2.2设计思路主要采用循环结构和子程序调用的基本结构形式,编写程序产生9个0~10的随机数,找出这9个数中的最大和最小的数,即评委给出的最高分和最低分,分别保存。
再对这9个数求和,减去前面保存的最大数和最小数,所得的值除以7,即为选手的平均分,分别保存整数部分和小数部分。
保存该分数并在屏幕中间用红色显示出来。
以上过程循环30次,然后根据平均分的高低对选手进行排序并调用BIOS功能使平均分为红色显示。
为了使程序方便阅读和修改,减少编程工作量,节省存储空间,并易于实现程序的模块化,在编写程序的时候尽可能的把一些具有特定功能的程序段独立出来编写成可以被其他程序多次调用的子程序,然后在主程序需要的地方调用。
汇编程序中的CALL和RET指令就是完成子程序调用和返回功能的。
有了以上基本的设计思路,便可以着手准备开始编写流程图,然后再查阅相关资料巩固关于汇编语言指令系统以及寻址方式的知识和使用技巧,复习调试程序的方法以及常见问题的解决办法等等。
3程序流程图流程图是算法的图形描述,它以图形的方式把解决问题的先后次序和程序的逻辑结构直观地、形象地描述出来,使得编程的思路清晰,有利于编制、调试程序。
3.1主程序流程图图3-1 主程序流程图为了使程序简洁明了和易于调试查错,因此把流程图分成了几个部分。
主程序的流程图如上图3-1所示,由流程图中可以看出程序的主要设计思路和整体框架。
3.2子程序流程图对于一些具有特殊功能的程序可以编制成子程序,通过调用来实现功能,这样有利于程序的读和写,也易于查错,因此本题将显示指定字符串、显示十进制ASCII码、查找最高分最低分的过程编写成子程序以供调用,方便简洁明了,可以更快地确定编程的方向和目的,找出解决问题的最佳途径。
由于显示指定字符串、显示十进制ASCII码涉及DOS功能调用,指令简单,为汇编者所熟记的知识,可以不用流程图再次赘述。
查找最高分最低分的流程图如图3-2所示,从图中可以看出,找出最高分的方法和查找最低分的方法类似,只需更改其中的个别指令,即可达到目的。
图3-2 查找最高分和最低分程序流程图将各个选手按照所得的平均分排序的程序流程图如图3-3所示。
由于参赛选手的人数不多,采用冒泡法排序可以达到快速、准确的效果。
数据的排序采用冒泡法降序排列,将其两两比较。
前一个数较大,则不改变原位置,否则两数交换,一次将全部数据排序,排序的次数由需要排序的数据个数决定。
这种排序方法是从最低部的元素开始进行比较,较小的元素将会像气泡一样往上冒。
在排序的过程中,外循环遍历要排序的元素,内循环用于挑选出最值。
内循环用于将相邻的两个元素进行比较,将小的元素调到大元素的前头,内循环的循环次数表示相邻元素的交换趟数。
此外,在整个程序中,除了这三个主要环节,还需要编写子程序用于显示字符串,产生随机数等等,这些模块的编程思路比较直观,所以在流程图中没有着重表明。
图3-3 将平均成绩排序的流程图有了编写汇编语言计算比赛成绩的思路和流程图之后,通过查找一些不常见的指令和查阅相关的参考资料,就可以编写出初步的源程序。
4程序调试经过调试程序,得出随机给出选手得分的运行的结果如图4-1所示。
图4-1 随机给出的选手得分最终排名和选手所得的分数如图4-2所示。
图中给出了24位选手的成绩和排名,排名顺序为从高分到低分,最后一列为各个选手所得的平均分,用红色显示。
图4-2 选手排名顺序5心得与体会在本次比赛评分系统程序的设计过程中,本小组各成员积极配合想算法,分工协作写程序,历经百般波折,通过几个昼夜的艰苦奋战,终于在我们几近绝望的最后关头突然跳出来一个窗口,程序运行成功了,大家手舞足蹈、欢欣雀跃,总算努力没有白费,俗话说得好:坚持,就意味着一切。
本次微机原理课程设计感受颇深,受益匪浅。
由于初学汇编语言,再加上平时的习题都很简单而且要求不高,所以在看到题目的时候,一开始有些傻眼不知从何着手,仔细看了看想了想查了查资料后发现把问题分块处理,各个击破,最后再拧成一股绳,问题貌似就变得简单很多,主要是如何拧成一股绳,从何处开始拧,也就是如何把各个子程序在何处调用才能实现功能,这个问题确实需要大动脑筋才能确保最后的结果和设计要求相符。
第一次上机用汇编编写程序,第一次接触用汇编语言程序产生随机数,第一次尝试着编写子程序,也是第一次听说还有BIOS功能调用。
万事开头难,但总要开个头,第一天没着落,就想啊,查资料,通过小组成员讨论后决定各成员分工合作,每人负责一个功能,最后一起合成调试。
然后各自就开始努力的工作了,先是根据要求把可能用到的书中的知识复习巩固了一遍,然后对准问题查阅相关资料,遇到相似的问题就借鉴过来,再根据实际问题需要编写自己的程序,就这样一步步按照流程做了下来,途中遇到了诸多问题,但是问题必须解决才能继续往下写,虽然好些天疲于奔命于图书馆、书店,但是有压力就有动力,逐渐的问题变得越来越少。
编写程序过程中,开始是一塌糊涂,对一些伪指令和DOS功能调用方便掌握不牢固,编写起程序来很不灵活,经过查阅资料和询问同学,在边摸索边实践的过程中,我体会到了编写程序不仅需要广泛深入的知识面,还需要灵活的头脑和严密的逻辑思维,稍有考虑不到的方面,程序就会“没有生成OBJ文件”。
循序渐进的,我终于编写出了我脑子里所想的初步程序,但输入到MF2KP集成开发环境中运行时,一开始的热情瞬间就没了,程序无法编译,不能生成.obj 文件,想了许久,明白了一点:编写程序最主要的其实不是在于如何编写而是成百上千次甚至上万次的不断调试。
于是,我开始了调试程序这复杂而又极其漫长的过程。
最终在小组成员共同的努力下,我们成功了,一股成就感袭上心头,各个都笑了,也松了口气,回头想想,不仅巩固了所学知识,而且锻炼我们理论结合实际的能力和团队合作能力。
同时也发现了些许不足,我敢肯定的是这次发现的问题被牢牢记住了,还起了个加深记忆的作用。
通过本次课设我发现,定义的变量是可以直接用inc、dec的,即对其内容值加1、减1,但是要注意,虽然变量可以看成符号地址,不过此处只是把它们的数据内容加1或减1,而非对其地址,之前我以为不能直接对定义好的变量用inc、dec;使用十六进制数时,若第一个数位值是字母,要在在其前加0,否则会被认为是变量;寄存器、变量之间传递值时,位数要一致;使用push后记得相应地使用pop,还要注意二者应反序,即push ax,push bx,push cx与pop cx,pop bx,pop ax相对应;在子过程中的ret 处之前应放上相应地放上pop语句,而子过程的入口处应相应放上push语句;要养成良好的程序书写习惯,比如标号对齐、参数对齐、注释对齐,这样看起来赏心悦目,也不容易出错,也易于排错修改;标号最好采用有意义的英文,这样比较直观,注释尽量详细准确,便于阅读,而且有利于其它程序中作为子程序模块的调用。
还有要注意典型程序模块的积累,再复杂的程序也是由一个个小程序模块组成的。
这些问题是这次课程设计体会比较深刻的几个方面。
总而言之,通过本次比赛评分系统程序的设计,不仅巩固了所学汇编知识,而且在知识的广面和深面上有了相当程度的拓展。
几个枯燥的字母被我们这一折腾竟然变得有了活力,使我感觉到汇编强大的魔力,编程就像日常生活一样,是个不断探索和发现的过程,途中必然会遇到困难,前面出现坎儿,是因为对面就是平原,编程序要知道:坚持,就意味着一切。
参考文献[1]沈美明,温冬蝉.IBM-PC汇编语言程序设计(第2版).清华大学出版社,2001[2]沈美明,温冬蝉.IBM-PC汇编语言程序设计例题习题集.清华大学出版社,1991[3]陆忠华.汇编语言程序设计.科学出版社,1993[4]迟成文,王保秀.汇编语言程序设计.中国科学技术大学出版社,1993[5]徐建民.汇编语言程序设计.电子工业出版社.2005年[6]彭虎,周培玲,傅忠谦.微机原理与接口技术(第2版).电子工业出版社,2008 附录Code SegmentAssume CS:Code,DS:Code; -------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr; 用法举例:Output PromptStrOutput MACRO Str_Addrpush axlea dx,Str_Addrmov ah,9int 21hpop axEndM; -------------------------------------; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示; 入口:AX=二进制数; 出口:在当前光标位置显示转换后的ASCII码数字Dec_ASCII Proc Nearmov dh,10div dhor ax,3030h ;将两位十进制数转换成ASCII码cmp al,30hja $+4mov al,20h ;若十位数是0,以空格代替push axmov ah,0ehint 10h ;显示十位数pop axxchg ah,almov ah,0ehint 10h ;显示个位数retDec_ASCII EndP; -------------------------------------Commentators equ 9 ;评委人数Contestants equ 23 ;参赛选手人数Press_Key db 0ah,0dh,'The complated. Press any key to exit...$' Start: mov di,64 ;显示缓冲区偏移地址mov ax,0b800h ;显示缓冲区段地址mov es,axmov al,20hmov ah,4 ;字符颜色(红色)mov cx,Contestants ;参赛选手人数cld@@Line: push cxmov cx,3rep stoswadd di,154 ;显示缓冲区下一行同列偏移地址pop cxloop @@Linepush cspop ds ;使数据段与代码段同段push cspop es ;使附加段与代码段同段; -------------------------------------; 评委随机打分cldlea si,Buffer ;数据缓冲区地址(选手成绩链表)mov di,siadd di,Contestants*2 ;选手成绩存放地址mov cx,Contestants ;参赛选手人数mov dl,11 ;除数Grade_0: push cxmov [si],di ;选手成绩地址inc siinc si ;下一个链表节点地址mov ax,Contestants+1sub ax,cx ;选手序号stosb ;保存选手序号xor bx,bx ;BH=,最高分初值,BL=最低分初值xor dh,dh ;选手总分初值mov cx,Commentators ;评委人数Grade_1: xor al,alout 43h,alin al,40hxor ah,ahdiv dlxchg ah,al ;舍弃商数,取余数,作为某评委的打分stosb ;保存一个评委打分add dh,al ;累计评委打分cmp bh,aljae $+4 ;最高分>=此评委打分mov bh,al ;保存新的最高分cmp bl,aljbe $+4 ;最低分<=此评委打分mov bl,al ;保存新的最低分loop Grade_1mov al,dhsub al,bh ;减去一个最高分sub al,bl ;减去一个最低分stosb ;保存最后得分pop cxloop Grade_0; -------------------------------------; 用冒泡排序法对选手最后得分降序排序lea si,Buffer ;选手成绩链表地址mov cx,Contestants ;参赛选手人数dec cx ;外循环次数Sorting: push cx ;入栈保存外循环次数push si ;入栈保存数组地址Compare: push sipop di ;当前数组元素地址赋给目的变址寄存器,以备交换之用lodsw ;将当前数组元素读入累加器mov bx,axmov al,[bx][10] ;将当前最后得分读入累加器ALmov bx,[si] ;相邻的下一个选手信息地址cmp al,[bx][10] ;当前选手最后得分与相邻的下一个选手最后得分相比较jae NextOne ;若大于或等于,不作数据交换,处理下一个数组元素mov ax,[di] ;若小于,读入当前选手信息链表节点xchg ax,[si] ;交换链表元素mov [di],ax ;保存数值较大者节点地址NextOne: loop Compare ;处理下一个数组元素pop si ;数组地址出栈pop cx ;外循环次数出栈loop Sorting ;下一趟比较; -------------------------------------; 按总成绩降序显示所有选手各评委打分、平均得分mov cx,Contestants ;参赛选手人数xor bh,bh ;显示页号0Contestant: push cxpush simov si,[si] ;读入链表节点(某选手成绩地址)lodsb ;读入选手序号xor ah,ahcall Dec_ASCII ;显示参赛选手序号mov ah,0ehmov al,':'int 10hmov al,20hint 10h ;空一格mov cx,Commentators ;评委人数Commentator: xor ah,ahlodsb ;读入选手某评委打分call Dec_ASCII ;显示分数mov ax,0e20hint 10h ;空一格loop Commentatorint 10h ;空一格lodsb ;读入选手最后得分xor ah,ahmov dl,Commentators-2 ;评委人数-2 div dl ;AL=商数,AH=余数mov bl,ahor al,30hmov ah,0ehint 10h ;显示平均得分商数mov ah,0ehmov al,'.'int 10h ;显示小数点mov al,blmov bl,10mul bldiv dlor al,30hmov ah,0ehint 10h ;显示平均得分小数mov ax,0e0dhint 10hmov al,0ahint 10hpop siinc siinc si ;下一个链表节点地址pop cxloop Contestant; -------------------------------------Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序mov ah,1int 21hmov ah,4ch ;结束程序int 21hBuffer: ;数据缓冲区Code ENDSEND Start ;编译到此结束。