MVC项目阶段性总结

2 篇文章 0 订阅
项目名称:东方航空票务系统(研发中)

作者:蔡志斌
本次任务完成时间:2019年02月22日~2019年03月26日
开发工具:Visual Studio 2015 And SQL Server 2014
关键技术:H5 + Bootstrap + JQuery + Css + Layui + MVC
项目备注:参考东方航空系统所自制的航空项目
完成模块功能:设计数据库(已完成)、设计界面(部分完成)、登录管理(已完成)、Main模块(整体布局已完成)、PNR预定(布局已调好,数据未录入)、其他模块未完成

一、功能实现

登录管理:根据职工工号登录。
工号:限制输入长度不可超过32位,不可输入中文或下划线以外的特殊符号
密码:MD5加密,限制输入长度不可超过32位,不可输入中文或下划线以外的特殊符号
验证码:限制输入长度不可超过6位,不可输入中文或特殊符号(字母大小写区分)
登录按钮:判断输入的工号和密码是否与数据库相匹配、验证码是否输入正确
在这里插入图片描述
Main排版:实时时间、导航栏自动生成、访问路径自动生成、开启全屏功能
在这里插入图片描述
PNR预定:PNR预定分为单程、往返和联程(未完成)
单程:根据输入的出发城市、到达城市和出发时间来搜索航班,根据航班所列出的价格订票。
在这里插入图片描述
往返:根据输入的出发城市、到达城市和出发时间来搜索航班根据航班所列出的价格订票,与单程不同的是往返票要输入返回时间,多一趟回程。
在这里插入图片描述
联程:联程最少必须要有三段航班,最高五段航班(暂定),输入各段所需要到达的城市与出发日期进行智能安排航班。
在这里插入图片描述

二、经典代码

JQuery获取实时时间(年、月、日、时、分、秒)

    <script type="text/javascript">
        function getNow(Mytime) { return Mytime < 10 ? '0' + Mytime : Mytime; }
        function CurrentTime() {
            var myDate = new Date();
            //获取当前年份
            var year = myDate.getFullYear();
            //获取当前月份
            var month = myDate.getMonth() + 1;
            //获取当前日期
            var date = myDate.getDate();
            //获取当前小时数(0-23)
            var h = myDate.getHours();
            //获取当前分钟数(0-59)
            var m = myDate.getMinutes();
            var s = myDate.getSeconds();
            var now = year + '-' + getNow(month) + "-" + getNow(date) + " " + getNow(h) + ':' + getNow(m) + ":" + getNow(s);
            $("#time1").text(now);
        }
        //间隔一秒执行一次获取当前时间的方法
        setInterval(function () { CurrentTime() }, 1000);
    </script>

根据后端数据在前端生成导航栏(递归)

		//查询树形结构数据
        function QueryTreeStructureData() {
            //定义树形第一层数组集合
            var mapArr = [];
            //定义树形第二层数组集合
            var mapArrchildTwo = [];
            //异步同步
            $.ajaxSettings.async = false;
            //获取父级ID为0的第一层树形
            $.post("/OrientAirwaysMain/QueryTreeData?FatherId=" + 0, function (dataOne) {
                //判断传过来的参数是否为空
                if (dataOne.length > 0) {
                    //循环树形第一层数据
                    for (var i = 0; i < dataOne.length; i++) {
                        //定义树形第一层对象
                        var treeobjOne = {};
                        treeobjOne["ModularName"] = dataOne[i].ModularName;
                        treeobjOne["ModularPrefix"] = dataOne[i].ModularPrefix;
                        treeobjOne["ModularRemarks"] = dataOne[i].ModularRemarks;
                        treeobjOne["ModularSuffix"] = dataOne[i].ModularSuffix;
                        treeobjOne["ModularLink"] = dataOne[i].ModularLink;
                        //树形第二层起始参数为1
                        var y = i + 1;
                        $.ajaxSettings.async = false;//异步同步
                        //获取父级ID为 y 的第二层树形
                        $.post("/OrientAirwaysMain/QueryTreeData?FatherId=" + y, function (dataTwo) {
                            //判断传过来的参数是否为空
                            if (dataTwo.length > 0) {
                                //循环树形第而层数据
                                for (var x = 0; x < dataTwo.length; x++) {
                                    //定义树形第二层对象
                                    var treeobjTwo = {};
                                    treeobjTwo["ModularName"] = dataTwo[x].ModularName;
                                    treeobjTwo["ModularPrefix"] = dataTwo[x].ModularPrefix;
                                    treeobjTwo["ModularRemarks"] = dataTwo[x].ModularRemarks;
                                    treeobjTwo["ModularSuffix"] = dataTwo[x].ModularSuffix;
                                    treeobjTwo["ModularLink"] = dataTwo[x].ModularLink;
                                    //把树形第二层的数据放进mapArrchildTwo里形成数组
                                    mapArrchildTwo.push(treeobjTwo);
                                }
                            }
                            //定义一个child对象把数组mapArrchildTwo放进里面
                            treeobjOne["child"] = mapArrchildTwo;
                            //第二层数组mapArrchildTwo清空
                            mapArrchildTwo = [];
                        });
                        //把树形第一层所有对象放进定义的第一层数组里
                        mapArr.push(treeobjOne);
                    }
                }
            });
            //控制台输出树形结构数据
            console.log(mapArr);
            //绑定树形结构数据
            BindingTreeStructureData(mapArr);
        }
三、开发过程中遇到的问题与总结

        原本寒假打算重温一下MVC,但因为某种特殊原因,拖到现在才做这么一小部分。下面来总结一下这段时间自己之前未深入理解的MVC技术点。刚刚做的时候以为应该会很简单,以为自己可以一个月不到就把项目做好,然而事实并非如此。
        经过这段时间的学习发现自己的C#基础还是很差。之前的一些代码写的都很随便,一点都不规范,十行可以解决的事情偏偏要几十行甚至几百行才能解决(大量重复代码)。发现对C#一些基础的东西理解也很片面,只知道有这么一个东西,知道怎么用;但不理解它是为什么要这样用,它的原理是什么。之前觉得自己对C#的很多东西都理解了,重温之后才发现学习这东西真的是活到老学到老,当前以为懂了的东西多年以后回头看,你又会发现其实当时理解的只是它的一部分而已。
        比如对抽象类abstract 理解。我的第一反应是:”抽象类抽象类抽象类??????什么鬼~就知道有这么一个东西而已”。而重温后你就会找到之前不懂的重点理解;abstract是抽象的类,它存在的主要目的是被继承重写,当我们发现很多类里有相似的方法,我们可以把它抽取出来放到abstract的类里面,然后让其他的类来继承使用。
        再比如数据库的事务。我:”事务??增删改要用到???” 到现在才知道事务是用来保证操作的平稳性和可预测性。例如网上购物支付,正常购物支付流程下来就支付成功了。但要是支付过程中因为余而不足或是一些特殊原因导致支付中断,数据库的数据也不会因此而更改,回滚到没更改前。
        (现在的理解可能多年以后看也很片面,但这只是现阶段自己对所学知识的一个小总结)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值