新需求下的排球计分程序

暑假针对不同的需求对学期末的排球计分程序进行了重构。记录如下:

当然在做这个程序的时候,也一定会用到我们平时所学的其他技术:

1.C#语言

2.ASP.NET  MVC

3.关系数据库基础知识

4.软件工程基础知识

5.PetaPoco技术

6.JQuery,Ajax

7.UiIKit  H5框架。

8.T4模板。

需求:

作为一名教练员,我希望知道详细得分信息,以便于了队员的状态。

设计文档

在参考我们平时使用的比赛网站做出如下设计文档:

首先我们进入首页,首页我们选择业务项目,之后进入具体的业务页面,使用活动图表示如下:

比分变化关系按照《2015-2016赛季中国排球联赛竞赛规程》,计分规则如下:

1、目前的排球比赛采用五局三胜制。前四局每局25分,每局比赛完成后交换场地,达到24分时,必须比赛的双方相差2分才能分出胜负;决胜局为15分,比赛的双方任何一方先达到8分时,交换场地继续比赛,当双方同时达到14分时候,也是必须相差两分才能决出胜负。
排球计分的发展历程:1917年规定每局为15分。1918年规定上场运动员每队为6人。1922年规定每方必须在3次以内将球击过网。比赛方法以前采用发球得分制,1998年10月28日国际排联决定改为每球得分制,仍为五局三胜,前四局每局先得25分者为胜,第五局先得15分者为胜,若出现24平或14平时,要继续比赛至某队领先2分才能取胜。

2、每点击一次按钮,分数列表就增加一行。

3、己方失误时。对方增加一分。

以下为数据表设计

Athlete为运动员信息表:

Id为队员ID

AthleteName为运动员员姓名

TeamId为运动员所属队伍ID

Stature为运动员身高

Weight为运动员体重

Place为运动员号码

Arae为运动员所属地区

Team为队伍表:

Id为队伍ID

TeamName为队伍名字

Game为比赛表

Id为比赛ID

RaceNumber为比赛编号

HomeTeamId为主队队伍ID

HomeTeamSco为主队比分

GuestTeamId为客队队伍ID

GuestTeamSco为客队队伍比分

Section为小节表:

Id为小节ID(标识)

GameId为小节所属比赛ID

SectionNum为小节数

HomeTeamId为主队队伍ID

HomeSecSco为主队小节得分

GuestTeamId为客队队伍ID

GuestSecSco为客队小节得分

Bout为回合表

Id为小节Id(标识)

GameId为回合所属比赛ID

SectionNum为回合所属小节数

HomeTeamId为主队队伍ID

HomeSco为主队回合得分

HomeScoDetails为主队得分详情

GuestTeamId为客队队伍ID

GuestSecSco为客队小节得分

GuestScoDetails为客队队得分详情

控制器设计

Index包含比赛管理和新闻展示。

Main为计分台部分。

Management为队伍管理,运动员管理。

数据库操作方面由PetaPoco插件和T4模板所生成(Database First)

具体步骤参照了yan_xiaodi的博客。

以下为具体编码:


本次采用布局页_Layout.cshtml

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8" />
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <title>@ViewBag.Title</title>
 7     <script src="~/Content/js/jquery-3.2.1.js"></script>
 8     @*<script src="~/Content/js/jquery.js"></script>*@
 9     <script src="~/Content/js/jquery.validate.min.js"></script>
10     <script src="~/Content/js/jquery.validate.unobtrusive.min.js"></script>
11     <script src="~/Content/js/jquery.unobtrusive-ajax.min.js"></script>
12     <link href="~/Content/Css/uikit.css" rel="stylesheet" />
13 </head>
14 <body>
15     <div>
16         <nav class="uk-navbar">
17             <ul class="uk-navbar-nav">
18                 <li><a href="~/Index/Index">首页</a></li>
19                 <li><a href="~/Main/Index">计分台</a></li>
20                 <li class="uk-parent">
21                     <a href="">管理</a>
22                     <div class="uk-dropdown uk-dropdown-navbar">
23                         <ul class="uk-nav uk-nav-navbar">
24                             <li><a href="">队伍</a></li>
25                             <li><a href="">队员</a></li>
26                             <li><a href="">比赛</a></li>
27                         </ul>
28                     </div>
29                 </li>
30             </ul>
31         </nav>
32     </div>
33
34         @RenderBody()
35 </body>
36 </html>

Index主页

@model List<Game>

    <div class="uk-slidenav-position" data-uk-slideshow>
        <ul class="uk-slideshow">
            <li><img src="~/Content/images/20741-106.jpg" width="200" height="90" alt=""></li>
            <li><img src="~/Content/images/278346-106.jpg" width="200" height="90" alt=""></li>
            <li><img src="~/Content/images/310745-106.jpg" width="200" height="90" alt=""></li>
        </ul>
        <ul class="uk-dotnav uk-dotnav-contrast uk-position-bottom uk-flex-center">
            <li data-uk-slideshow-item="0"><a href="#">Item 1</a></li>
            <li data-uk-slideshow-item="1"><a href="#">Item 2</a></li>
            <li data-uk-slideshow-item="2"><a href="#">Item 3</a></li>
        </ul>
    </div>

<table id="PageList" class="uk-table">
    <tbody>
        <tr>
            <th>比赛编号</th>
            <th>主队</th>
            <th>比分</th>
            <th>客队</th>
            <th>操作</th>
        </tr>
        @{
            foreach (var item in Model)
            {

                <tr>
                    <td>@item.RaceNumber</td>
                    <td>
                    @{
                        string homeName = Team.Fetch("select * from Team where Id ="+item.HomeTeamId+"").FirstOrDefault().TeamName;
                        @Html.Raw(homeName);

                    }
                    </td>
                    <td>@item.HomeTeamSco : @item.GuestTeamSco</td>
                    <td>
                        @{
                            string guestName = Team.Fetch("select * from Team where Id =" + item.GuestTeamId + "").FirstOrDefault().TeamName;
                           @Html.Raw(guestName);
                        }
                    </td>
                    <td>查看</td>
                </tr>
            }
        }
    </tbody>
</table>

Mian下选择队伍页:

 1 @using (Ajax.BeginForm(new AjaxOptions {
 2     Url= "/Teams/AddTeam",
 3     HttpMethod = "Post",
 4     OnSuccess = "success",
 5     OnBegin = ""
 6 }))
 7 {
 8     <div class="layui-form" style="width:100%;height:300px;">
 9         <div style="margin-left:35%; margin-bottom:30px;margin-top:10px;" ><img class="layui-anim layui-anim-fadein layui-anim-rotate " src="~/Content/Image/rabbit.gif"/></div>
10         <div class="layui-form-item">
11             <label class="layui-form-label">队名</label>
12             <div class="layui-input-block">
13                 <input type="text" name="teamName" id="teamName" placeholder="请输入队名" autocomplete="off" class="layui-input">
14             </div>
15         </div>
16         <div class="layui-form-item">
17             <div class="layui-input-block" style="text-align:center;">
18                 <input type="submit" class="layui-btn" id="btn" value="立即提交" />
19             </div>
20         </div>
21     </div>
22 }
23 <script>
24     function success(data) {
25         if (data == "添加成功") {
26             layer.msg(data, { icon: 1 });
27             setTimeout("window.location = ‘/Teams/GetTeams‘", 2000);
28         }
29         else {
30             layer.msg(data, { icon: 2 });
31         }
32     }
33 </script>

Mian下计分台

<div class="uk-grid" style="width:80%; text-align:center; margin-left:9%;margin-top:10px;">
@using (Ajax.BeginForm(new AjaxOptions
{
    Url = "/Scoreing/ScoreTwo",
    HttpMethod = "Post",
    OnSuccess = "success",
    OnBegin = ""
    //Confirm= "isOK"
}))
{ <fieldset class="layui-elem-field ">
        <legend>计分板</legend>
        <div class="layui-field-box">
            <div class="layui-form">
                <div class="layui-form-item">
                    <input type="hidden" value="@ViewBag.Id" id="CompetitionId" name="CompetitionId" />
                    <input type="hidden" value="@ViewBag.HomeTeamId" id="HomeTeamId" name="HomeTeamId" />
                    <input type="hidden" value="@ViewBag.GuestTeamId" id="GuestTeamId" name="GuestTeamId" />
                    <input type="hidden" value="1" id="Innings" name="Innings" />
                    <input type="hidden" name="HomeTeamDetailScore" id="InputHomeTeamDetailScore" value="0">
                    <input type="hidden" name="GuestTeamDetailScore"  id="InputGuestTeamDetailScore" value="0">
                    <label class="layui-form-label" style="margin-left:42%;font-size:24px; color:#FF5722;" id="inningsStr">第1局</label>
                </div>
                <div class="layui-form-item" style="width:300px;height:100px;margin-left:23%;font-size:18px; color:#FF5722;">
                    <label class="layui-form-label" id="HomeTeamName">@ViewBag.HomeTeamName</label>
                    <label class="layui-form-label" id="HomeTeamDetailScore">0</label>

                </div>

                <div class="layui-form-item" style="width:300px;height:100px;float:right;margin-top:-115px; margin-right:25%;font-size:18px; color:#FF5722;">

                    <label class="layui-form-label" id="GuestTeamDetailScore">0</label>
                    <label class="layui-form-label" id="GuestTeamName">@ViewBag.GuestTeamName</label>

                </div>
                <div class="layui-form-item">
                    <div class="layui-input-block">
                        <input type="button" class="layui-btn" id="homeTeamScorebtn" style="margin-left:30%;" value="主队得分" />
                        <input type="button" class="layui-btn" id="guestTeamScorebtn" style="margin-left:10%;" value="客队得分" />
                    </div>
                </div>

                @*//-----------------------------------------------------------------------主队得分选择队员面板*@

                <div class="layui-form" id="homeTeamScorediv" style="margin-top:30px;margin-left:36%;">
                    <div class="layui-form-item">
                        <label class="layui-form-label">得分队员</label>
                        <div class="layui-input-inline">
                            <select name="HomeTeamMemberId" id="HomeTeamMemberId">
                                <option value="0" selected>请选择队员</option>
                                @{
                                    List<TeamMember> homeMemberList = ViewBag.HomeMemberList as List<TeamMember>;
                                    foreach (var item in homeMemberList)
                                    {
                                    <option value="@item.Id">@item.MembersName</option>
                                    }
                                }
                            </select>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">得分详情</label>
                        <div class="layui-input-inline">
                            <input type="text" name="HomeTeamDetail" id="HomeTeamDetail" placeholder="请输入得分详情" autocomplete="off" class="layui-input">
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <div class="layui-input-block">
                            <input type="submit" class="layui-btn" value="确定"  id="HomeSubmit" />
                        </div>
                    </div>

                </div>
                @*//----------------------------------------------------------------------客队得分选择队员面板-*@
                <div class="layui-form" id="guestTeamScorediv" style="margin-top:30px;margin-left:36%;">
                    <div class="layui-form-item">
                        <label class="layui-form-label">得分队员</label>
                        <div class="layui-input-inline" id="guestTeamMemberDiv">
                            <select name="GuestTeamMemberId" id="GuestTeamMemberId">
                                <option value="0" selected>请选择队员</option>
                                @{
                                    List<TeamMember> guestMemberList = ViewBag.GuestMemberList as List<TeamMember>;
                                    foreach (var item in guestMemberList)
                                    {
                                    <option value="@item.Id">@item.MembersName</option>
                                    }
                                }
                            </select>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">得分详情</label>
                        <div class="layui-input-inline">
                            <input type="text" name="GuestTeamDetail" id="GuestTeamDetail" placeholder="请输入得分详情" autocomplete="off" class="layui-input">
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <div class="layui-input-block">
                            <input type="submit" class="layui-btn" value="确定"  id="GuestSubmit"/>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </fieldset>}

<script>
    layui.use(‘form‘, function () {
        var form = layui.form;
    });
    $("#homeTeamScorediv").hide();
    $("#guestTeamScorediv").hide();
    $("#homeTeamScorebtn").click(function () {
        $("#guestTeamScorediv").fadeOut();
        $("#homeTeamScorediv").show();
        var homeScore = $("#InputHomeTeamDetailScore").val();
        homeScore++;
        $("#HomeTeamDetailScore").html(homeScore);

    });
    $("#guestTeamScorebtn").click(function () {
        $("#homeTeamScorediv").fadeOut();
        $("#guestTeamScorediv").show();
        var guestScore = $("#InputGuestTeamDetailScore").val();
        guestScore++;
        $("#GuestTeamDetailScore").html(guestScore);
    });
    $("#HomeSubmit").click(function () {
        $("#homeTeamScorediv").fadeOut();
        var homeScore = $("#InputHomeTeamDetailScore").val();
        homeScore++;
        var guestScore = $("#InputGuestTeamDetailScore").val();
        $("#InputHomeTeamDetailScore").val(homeScore);
        $("#GuestTeamMemberId").val(0);
        $("#GuestTeamDetail").val("");
        victory(homeScore, guestScore);
    });
    $("#GuestSubmit").click(function () {
        $("#guestTeamScorediv").fadeOut();
        var guestScore = $("#InputGuestTeamDetailScore").val();
        guestScore++;
        var homeScore = $("#InputHomeTeamDetailScore").val();
        $("#InputGuestTeamDetailScore").val(guestScore);
        $("#HomeTeamMemberId").val(0);
        $("#HomeTeamDetail").val("");
        victory(homeScore, guestScore);
    });
    function success(data) {
        //if (data == "添加成功") {
        //    layer.msg(data, { icon: 1 });
        //    setTimeout("window.location = ‘/Teams/GetTeams‘", 2000);
        //}
        //else {
        //    layer.msg(data, { icon: 2 });
        //}
    }
    function victory( homeScore, guestScore)
    {

        var Innings = $("#Innings").val();
        var HomeTeamId = $("#HomeTeamId").val();
        var GuestTeamId = $("#GuestTeamId").val();
        var CompetitionId = $("#CompetitionId").val();
        if (Innings < 5) {
            if ((parseInt(homeScore) >= 24 || parseInt(guestScore)>=24) && (Math.abs(homeScore - guestScore) >= 2))
            {
                layer.msg("第" + Innings + "局结束", { icon: 1 });
                $.post("/Scoreing/HuiHeScore/",
                    {
                        CompetitionId: CompetitionId,
                        Innings: Innings,
                        HomeTeamId: HomeTeamId,
                        GuestTeamId: GuestTeamId,
                        HomeTeamScore: homeScore,
                        GuestTeamScore: guestScore

                    }, function (data)
                    {
                        if (data != "ok") {
                            layer.msg("比赛结束", { icon: 1 });
                            setTimeout("window.location = ‘"+data+"‘", 2000);
                        }
                        else
                        {
                            Innings++;
                            $("#Innings").val(Innings);
                            $("#inningsStr").html("第" + Innings + "局");
                            $("#InputHomeTeamDetailScore").val(0);
                            $("#InputGuestTeamDetailScore").val(0);
                            $("#GuestTeamDetailScore").html(0);
                            $("#HomeTeamDetailScore").html(0);

                        }
                    });

            }
        }
        else if (Innings == 5)
        {
            if ((parseInt(homeScore) >= 15 || parseInt(guestScore) >= 15) && (Math.abs(homeScore - guestScore) >= 2))
            {
                layer.msg("第" + Innings + "局结束", { icon: 1 });
                $.post("/Scoreing/HuiHeScore/",
                    {
                        CompetitionId: CompetitionId,
                        Innings: Innings,
                        HomeTeamId: HomeTeamId,
                        GuestTeamId: GuestTeamId,
                        HomeTeamScore: homeScore,
                        GuestTeamScore: guestScore

                    }, function (data) {
                        if (data != "ok") {
                            layer.msg("比赛结束", { icon: 1 });
                            setTimeout("window.location = ‘" + data + "‘", 2000);
                        }
                    });
            }

        }

    }
</script>

以下为UI的表现,主要使用UIKit

主页

选择队伍

计分台

测试只是简单的进行了流程测试和功能测试。

经过这次迭代。虽然比起上次有些进步。但是比起预期的设想。还差的很远。文中用到的好多东西还是不太熟练。表单提交和Ajax理解不够全面。希望在以后的迭代中将这些技术融会贯通。

时间: 2024-11-07 21:02:22

新需求下的排球计分程序的相关文章

ASP.NET MVC 排球计分程序 (三)需求分析与数据库设计

需求分析: 软件名称:排球计分程序 1.  需要键入比赛人员的的姓名,需要根据场上的比赛结果及时做出操作,记分员可以在记错的情况下撤销上一部操作.比赛结束,记分员应能查询到每个队伍的进球情况,以及拦网.击球等的最高分.全场MVP. 2.系统界面:两队比赛,每次有队伍得分,由记分员向系统内输入数据,将该队的分数通过单击按钮的方式加分,每次加分,将分数写入数据库.也应有减分的按钮,每次减分,写入数据库. 系统内:自动计算每队的得分情况是否达到该局胜利,如果胜利及时显示该局胜利的消息. 最后输出:每单

总结/PSP初体验—排球计分程序1.0

要做一个排球计分程序,墨迹了很长时间才做出个的东西,过程很不爽: 功能:这个软件有两个页面,可以实现窗体A的部分变化控制窗体B的部分变化.A是操作人员使用看到的,B是投放给观众的,完全由A操控: 学到啥:对dataGridView控件纯代码添加数据有了了解: 有啥不爽: 1.感觉真的事倍功半,解决一个小问题花老长时间,一个if/else的流程对着电脑看半天也进入不了思考的状态,有个快速清晰的思路,感觉自己脑子太生锈了,不想运转: 2.还是感觉时间花太多了,好不值: 运行效果截图: 这个可以实现添

ASP.NET MVC 排球计分程序 (四)实体类和SqlHelper类的设计

整体解决方案的图如下: . 在Model里添加一个叫PersonA的类 public class PersonA { public int id { get; set; } public string name { get; set; } } 添加一个叫PersonB的类 public class PersonB { public int id { get; set; } public string name { get; set; } } 添加一个叫ScoreA的类 public class

排球计分程序重构(一)

前言: 上学期制作的排球计分程序,本次重构主要进行了一些功能性的完善,能够查询队伍比分,以及计分精确到队员. 已经将网站发布到我的服务器上面可以浏览 http://www.colorfulhy520.top:82/Home/Index 进入正题: 初步计划将文章系列分为以下几篇: 1.综述 2.数据库设计 3.Controller和View设计 4.代码讲解 5.总结 运用到的技术 1.Petapoco PetaPoco是一款适用于.NET应用程序的轻型对象关系映射器(ORM, Object R

排球计分程序——简单显示比分界面

作业:作为一个观众,我希望了解某一场比赛的比分,以便了解赛况.(满意条件:精确到每一局的结果比分)排球计分程序之--用户故事. 根据我当前的能力和老师要求,我想的页面效果大概是这样: 数据库的表: 运行效果如下: 选择第三局: 已胜局数还没写出来,比赛最终结果还没写出来: 部分代码如下: public class PartResult { public int partNum { get; set; } public int resultA { get; set; } public int re

ASP.NET MVC 排球计分程序 (一)综述

---恢复内容开始--- 本篇博客主要是为了用MVC来做出一个排球的计分程序,该计分程序主要实现的功能有,将两队队员的姓名和其对应的球衣号插入数据库,根据在场上的表现,由记分员记录两队的发球,扣球,拦网等得分情况,在比赛过程中可以实现自动判断是否到达获胜比分,是否获得本场比赛的胜利.当比赛胜时.可以查询出本场的MVP,以及最佳得分员,最佳发球员等数据. 初步计划将这个文章系列分为以下几篇: 1.综述 2. 一些排球计分的基本实现方 3.需求分析与数据库设计 4.实体类和SQLHelper类的设计

ASP.NET MVC 排球计分程序 (二)一些排球计分的基本实现方式

一.连接数据库 新建一个MVC应用程序(基本) 建一个HomeController 为Index添加视图 @{ ViewBag.Title = "Index"; } <h2>Index</h2> @using(Html.BeginForm("Indexa","Home")) { <b>id:</b> @Html.TextBox("id",1); <b>name:<

ASP.NET MVC 排球计分程序 (七)视图代码和一些解释

Index 视图 @{ ViewBag.Title = "Index"; } <html> <head> <title>输入姓名</title> </head> <body> @using(Html.BeginForm("AddPerson","Home")) { <table border="1"> <tr> <th>

排球计分程序(九)——总结

本程序主要使用MVC以及EF框架完成.MVC是一种程序开发设计模式, 它实现了显示模块与功能模块的分离.提高了程序的可维护性.可移植性. 可扩展性与可重用性,降低了程序的开发难度.它主要分模型.视图.控制器三层. 使用MVC有诸多好处: 1:耦合性低 视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码, 同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可.因为 模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则. 2:重用性高 随着技术