当前位置: 首页 > news >正文

(附源码)springboot助农电商系统 毕业设计 081919

助农电商系统

摘  要

 扶贫助农工作是当前我国全面建成小康社会的重点工作,由于我国农村地域广大,贫困人口多,区域差异大,因此,不同区域的扶贫方法也是不一样的。近年来,随着网络的普及。许多农村地区物产丰富,但由于销售渠道不畅等原因,导致农民处于无法致富的贫困状态,而助农电商系统恰好能解决这个问题,农户能在系统上进行农产品发布,产品销售,用户也可以在系统进行购买,对于解决“三农问题”、扩大内需和促进区域经济发展有着现实而深远的意义。

助农电商系统主要是提供给用户一个可以购买农产品的平台,本文主要是采用Springboot作为开发框架、MySQL数据库、Apache服务器作为开发平台,系统采用B/S结构进行开发,完成一个助农电商系统。

关键词:Springboot技术;助农电商;MySQL数据库

Agricultural e-commerce system

ABSTRACT

Poverty alleviation and agriculture assistance is the key work of building a well-off society in an all-round way. Due to the vast rural area, large number of poor people and large regional differences, the poverty alleviation methods in different regions are also different. In recent years, with the popularization of network. Many rural areas are rich in products, but due to poor sales channels and other reasons, farmers are unable to get rich. The agricultural e-commerce system can just solve this problem. Farmers can publish and sell agricultural products on the system, and users can also buy in the system. For solving the "three rural problems" Expanding domestic demand and promoting regional economic development are of practical and far-reaching significance.

The agricultural e-commerce system mainly provides users with a platform for purchasing agricultural products. This paper mainly uses springboot as the development framework, MySQL database and Apache server as the development platform. The system is developed with B / S structure to complete an agricultural e-commerce system.

Key words: Springboot technology; Agricultural E-commerce; MySQL database

目    录

  

ABSTRACT

第1章 绪论

1.1研究背景

1.2研究意义

1.3系统目标

1.4本文的结构

第2章 关键技术介绍

2.1开发技术说明

2.2spring boot框架介绍

2.3 spring boot框架特点

2.4 MySQL简介

第3章 系统分析

3.1可行性分析

3.1.1操作可行性

3.1.2技术可行性

3.1.3经济可行性

3.2功能需求分析

3.3用例分析

3.4数据流分析

3.5数据字典

第4章 系统设计

4.1结构设计

4.2功能设计

4.3数据库设计

4.3.1概念设计

4.3.2逻辑设计

4.3.3表设计

第5章 系统详细设计

5.1登录模块

5.2注册模块

5.3产品推荐模块

5.4购买产品模块

5.5用户管理模块

5.6产品类别模块

5.7产品信息模块

5.8订单表模块

第6章 系统测试 31

6.1测试目的 31

6.2测试用例 33

第7章 结论 36

参考文献 37

  38

  1.  绪论

1.1研究背景

随着改革开放进程的推进﹐我国经济发展取得了长足的进步,但是由于地区发展的不协调性﹐我国仍然存在数以千万计的乡村贫困人口。我国现有的乡村贫困人口具有分散性强﹐贫困程度深,贫困区域大等特点。随着2020年全面建成小康社会的发展战略目标的临近,以地理区域为界线的乡村助农方法已经不再适合于解决现存的贫困现象。设计一套这对农产品电商销售系统是基于移动终端开发的助农系统,通过因地制宜、因户施策、推动乡村农产品、发布销售,通过系统实现信息化、实时化、数据化效率﹐推动农村助农由大水漫灌的粗放形式的到集约深入根部的精准滴灌,发挥农村助农实际作用。在我国信息技术和电商平台快速发展的过程中,农产品网络销售成为增加农产品营销渠道和数量的主要手段之一,具有非常重要的作用。

1.2研究意义

扶贫助农是消除区域贫困、保持社会稳定,构建社会主义和谐社会的重要举措。在国家新一轮的助农政策下,是为了让农村特别是农民群众,平等参与现代化进程、共同分享改革发展成果。国务院《中国农村扶贫开发纲要(2011-2020年)》、国务院办公厅《关于创新机制扎实推进农村扶贫开发工作的意见》等系列文件指出,金融业要在支持集中连片助农开发中发挥重要作用。近年来,省级政府也明确了商务部门在精准助农工作中的具体责任,让商业服务更好地惠及农村地区。总之,建立一个完善的助农电商系统是很有必要的。

国外没有提出乡扶贫助农这个概念,大多数都是围绕着减贫的具体实施办法研究,不同国家对减贫采取的方式也不同。美国进步时代对低收入贫困人群采用提高养老保险、住房供给的方式来减贫。彼得·戴蒙德在《论社会保障》中阐述“在美国社会,退休后收入由社会保障作为后盾,以防止民众陷入贫困和失去保险机会。社会保障工作主要围绕阻止贫困的制造和保险机会开展”。与之不同,孟加拉国政府至今所采取的措施更多的是以增长为导向,以满足基本需要为目标,并采用了农村发展的途径。所以国外不同国家对于助农方法大有不同。

1.3系统目标

对于典型的数据库系统,尤其是对于像助农电商系统这样的数据流量大的网络系统,必须要满足使用方便、操作灵活等要求。本系统在设计时应该满足以下几个目标

(1)采用人机对话的操作方式,界面美观、友好,信息查询灵活、方便,数据存储准确、安全可靠;

(2)农户可以发表所有农产品,并可展示主要农产品;

(3)便于买家快捷地进行农产品信息查询;

(4)用户可以随时修改自己的基本资料;

(5)代理商可以发布代理信息,代理农户产品;

(6)用户可以在线下单,随时查看自己的农产品订单信息;

(7)对客户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误;

(8)系统最大限度地实现了易维护性和易操作性;

(9)系统运行稳定、安全可靠。

1.4本文的结构

本文具体内容包括:绪论、系统采用的关键技术、系统分析、系统设计、系统实现和系统测试。本文着重描述了系统的组成与结构,阐述了系统的设计方案、实现方法以及所采用的开发工具和相关技术,另外,重点剖析了部分环节的开发过程。本系统在一定的环境下对系统的重要模块进行了模拟测试,证实了系统的可用性、可靠性。

  1.  关键技术介绍

2.1.开发技术说明:

本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于Java的springboot框架进行开发。

前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。

后端部分:采用springboot作为开发框架,同时集成MyBatis、Redis等相关技术。

2.2 spring boot框架介绍:

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。

2.3spring boot框架特点:

SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

SpringBoot所具备的特征有:

1.7.1可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

1.7.2内嵌Tomcat或Jetty等Servlet容器;

1.7.3提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

1.7.4尽可能自动配置Spring容器;

1.7.5提供准备好的特性,如指标、健康检查和外部化配置;

1.7.6绝对没有代码生成,不需要XML配置。

2.4 MySQL简介

MySQL是SUN公司之前开发的中小型数据库服务器,是其公司推出的一个关系型数据库管理系统,同SQL Server一样,它提供商业和企业级的数据管理,具有可扩展性、可伸缩性、集成程度高等有优点,在性能指标等各方面上都能和甲骨文公司的Oracle数据库媲美,它具有Web开发的所有功能,开发人员可以用它来管理数据库文件、开发数据库应用程序和Web程序,它采用了最先进的数据库架构,与Windows下的各种操作系统完美兼容。它可以控制数据操作不管数据存在哪里,即使是移动终端。

  1.  系统分析

3.1可行性分析

本系统操作简单易理解,农产品销售商城与大部分电子商务系统的操作流程类似,避免了用户在使用时候的流程繁杂以及效率低下问题,本次设计基于B/S 模式下,运用Java、JSP技术采用的是MySQL数据库和Myeclipse实现。

3.1.1操作可行性

本系统使用的是现流行的开发语言,即SpringBoot技术。同时所有的信息都是以网页的形式展示,系统中的信息都可以在后台操作数据库达到数据更新的效果。用户只需要会计算机的基本操作或者会上网就可以使用本系统,系统管理员只需要懂得文件上传,处理文本即可操作管理后台。系统布局较简单,功能操作不复杂,完全符合现代市场需求。因此本系统具有操作可行性。

3.1.2技术可行性

本系统在Windows7开发环境下,利用SpringBoot框架,并使用MySQL作为数据库管理系统来实现系统的各种功能。MySQL属于主从式的数据库服务器这也是主从式数据库服务器的特点,服务器本身重在数据的管理,为用户端应用程序提供一致的接口。可以提高系统的性能,降低它的局限性。

3.1.3经济可行性

本系统是一个助农电商系统,用户可以直接在系统上购买农户产品,同时计算机的价格十分低廉,性能却有了长足的进步。而此系统的开发可以有效的提高工作效率,降低管理成本,节省管理费用,为企业的工作效率带来了一个质的飞跃。因此,本系统在经济上是完全具有可行性的。

3.2功能需求分析

通过本系统,可以实现农产品销售,实现农村助农,根据条件需要,系统结构主要由四大用户组成。一是买家组成的买家用户,二是农户,三是代理商,四是系统管理员。

1用户登录及身份要求       

验证买家、管理员等用户的信息

2本系统扶贫农产品销售功能需求(面向买家用户)

允许买家用户在线留言。

允许买家用户评论农产品。

允许买家用户查询农产品的信息。

允许买家用户对购物车的管理。

自动生成订单。

买家用户在线支付订单费用。

买家选择商品,进行购买,填写发货地址、联系电话等信息。

3本系统产品发布功能需求(面向农户)

产品发布,产品信息搜索。

产品信息,产品名称、产品种类、产品价格、规格、图片、生产日期、保质期。

产品销售,订单、总价、佣金、物流进度等。

3.3用例分析

1.管理员主要负责系统管理、农产品信息管理、产品分类、订单管理、产品物流管理、农户信息管理、佣金表、申请托管管理。下图所示描述管理员的用例。

图3-1管理员用例图

2.用户主要使用系统的在线购买业务、搜索产品信息、订单支付、物流跟踪,下图所示为买家用户用例图。

图3-2买家用户用例图

  1. 农户主要使用系统的产品发布、查询订单、托管申请、佣金明细,下图所示为农户用例图。

      图3-3农户用例图

  1. 代理商主要使用系统的信息发布、申请托管、佣金明细,下图所示为代理商用例图。

        图3-4代理商用例图

3.4数据流分析

数据流图的设计主要是由于系统目前功能还没有确定,可以先描述可能要使用到的功能内容,并且向用户了解“系统从外界接受什么数据”和“系统向外界送出什么数据”等信息,根据用户所给的答复进行设计数据流图。

如下为系统的0层数据流图,系统用户分为管理员和普通用户。

    

图3-4系统数据流图(0层)

如下图所示为系统1层数据流图。

图3-5系统数据流图(1层)

助农电商系统第二层数据流图主要详细反应各功能模块对应的操作与数据进行交互的原理。并且更详细的显示出各角色对功能模块操作的数据流向,让开发人员能了解该系统的开发方向,能够更准确的开发出系统模型。

将产品信息维护进行细化得到产品信息管理二层数据流程图,如下图所示。     

图3-6产品信息管理数据流图(2层)

将产品订单信息管理进行细化得到产品订单信息管理二层数据流程图,如下图所示。

图3-7产品订单管理数据流图(2层)

3.5数据字典

1.数据存储描述

下表描述了用户信息的数据流、数据来源、数据去向和数据流组成的词条。

表3-1用户信息描述

数据流

用户信息

数据流来源

MySQL数据库中用户信息表,用户详细信息表

数据去向

系统界面,用户信息管理界面

数据流组成

用户名、用户密码、添加时间、编号

下表描述了产品资助信息的数据流、数据来源、数据去向和数据流组成的词条。

表3-2产品资助信息描述

数据流

农产品资助信息

数据流来源

MySQL数据库中产品资助表,产品资助详细信息表

数据去向

产品资助界面

数据流组成

产品资助ID、用户ID、产品ID、数量

下表描述了订单信息的数据流、数据来源、数据去向和数据流组成的词条。

表3-3订单信息描述

数据流

订单信息

数据流来源

MySQL数据库中订单表,订单详情表

数据去向

用户订单界面,订单管理界面

数据流组成

用户ID、订单ID、物品ID、订单金额

下表描述了物流信息的数据流、数据来源、数据去向和数据流组成的词条。

表3-4物流信息信息描述

数据流

物流信息信息

数据流来源

MySQL数据库中物流信息表、商品详情表

数据去向

商品详情界面、购物车界面、物流信息管理界面

数据流组成

物流公司、订单编号、产品明细、买家信息,物流进度

下表描述了佣金明细管理的数据流、数据来源、数据去向和数据流组成的词条。

表3-5佣金明细信息描述

数据流

佣金明细信息

数据流来源

MySQL数据库中佣金明细表、佣金明细类别表

数据去向

佣金明细查询界面、佣金明细详情界面、佣金明细管理界面

数据流组成

报表日期、平台收取、总收入、实际收入、农户收入、代理商收入

2.数据处理描述

下表描述用户通过输入用户名和密码进行身份验证处理,验证成功后将返回的信息显示在界面上。

表3-6用户身份验证

处理逻辑名称

用户身份验证

简述

检查输入信息的合法性

输入的数据流

用户名+密码

处理过程

根据输入的用户名和密码,检索用户,显示查询信息

输出的数据流

用户信息、商品信息

下表描述用户成功登录系统后通过代理商信息名查询代理商信息信息,根据查询后返回的数据显示在界面上。

表3-7代理商信息信息查询

处理逻辑名称

代理商信息信息查询

简述

检查输入信息的合法性

输入的数据流

代理商信息名或代理商信息编号或代理商信息类别

处理过程

登录成功的用户,通过代理商信息名查询用户所需的代理商信息

输出的数据流

代理商信息

下表描述管理员用户成功登录系统后可以添加产品,添加后,重新查询产品表,返回的产品数据显示在界面上。

表3-8产品信息添加

处理逻辑名称

产品信息添加

简述

检查输入信息的合法性

输入的数据流

产品信息

处理过程

登录成功的管理员用户,往数据库添加一条产品信息数据。

输出的数据流

产品信息,订单信息

下表描述管理员用户成功登录系统后,购买商品,填写订单收货人、收货地址、联系电话等,生成购买订单后,重新查询订单表,返回的订单数据显示在界面上。

表3-9订单生成

处理逻辑名称

订单生成

简述

检查输入信息的合法性

输入的数据流

订单信息

处理过程

登录成功的用户,往数据库添加一条订单信息数据。

输出的数据流

订单信息

下表描述用户成功登录系统后通过申请托管标题查询申请托管信息,根据查询后,返回的申请托管数据显示在界面上。

表3-10申请托管信息查询

处理逻辑名称

申请托管信息查询

简述

检查输入信息的合法性

输入的数据流

申请托管标题

处理过程

登录成功的用户,通过申请托管标题查询用户所需的申请托管信息

输出的数据流

申请托管信息

  1.  系统设计

4.1结构设计

本系统的设计是基于Springboot技术+MySQL数据库的方式设计,以Java为开发工具,并运用Photoshop CS6技术美化网页,辅之以CSS技术。本系统使用的角色主要有系统管理员和普通用户(农户、买家、代理商),系统分为前台和后台,前台主要用于助农产品的展示和购买,产品信息,订单,物流信息等。后台用于产品信息和产品订单信息的管理,佣金报表,申请托管等。首先以普通用户通过账号注册后登录系统前台,可以进行各种信息浏览和搜索,买家用户可以将需要的助农产品进行下单购买,用户可以查询订单是否已经被卖家确认,订单生成后表示买家用户购买成功,前台系统除了可以进行扶贫农产品的下单还可以进行物流跟踪,进行托管申请,同时可以修改个人的信息资料,查看信息记录;以管理员的身份登录系统后台可以进行助农产品信息维护、物流数据维护、佣金管理、系统数据维护。

系统功能结构图如下所示。

图4-1系统功能结构图

4.2功能设计

1.用户登录模块:确保用户注册信息的真实度是提高系统效率和盈利的重要因素。真实的用户才能带来价值,注册是保证真实用户使用系统主要业务的第一步,通过对用户注册信息的审核,可防止机器注册。使用现如今较为流行的管理员进行账号激活的验证方式,对用户注册信息进行过滤,未激活用户信息将不能使用系统主要功能。

如下图所示为用户登录流程图。

图4-2用户登录流程图

2.助农产品浏览模块:没有登录的用户和登录的用户都可以在系统前台进行助农产品浏览,用户可以查看助农产品的详细信息和选择相应的助农产品类别进行该类别下的助农产品查看,用户还可以通过助产品名称的关键字进行搜索。

如下图所示为助农产品浏览流程图。

图4-3助农产品浏览流程图

3.订单管理模块:用户购买农产品后,填写收货地址、收货人、电话等信息,生成订单信息,管理员可以审核订单,删除、修改订单,对订单信息进行相应的农产品发货。 

如下图所示为订单管理流程图。

图4-4订单管理流程图

4.产品管理模块

系统管理员可以对产品信息进行增、删、改、查的操作。

5.用户管理模块

系统管理员可以对用户信息进行增、删、改、查的操作。

6.购买模块

用户对个人添加至购买信息里面的购买物品进行增删改查等操作。

如下图所示为购买模块流程图。

图4-5购买模块流程图

7.物流管理模块

用户在线物流商品,管理员回复物流,管理删除物流。

8.托管申请管理模块

系统管理员可以对托管申请进行增、删、改、查的操作。

4.3数据库设计

4.3.1概念设计

本系统的E-R图表现了系统中各个实体之间的联系,经过分析,系统的实体有助农产品、订单列表、物流信息、佣金报表、申请托管、用户信息等。

农产品实体图如下图所示。

图4-6农产品实体图

用户实体图如下图所示。

图4-7用户实体图

订单列表的实体图如下图所示。

图4-8订单列表实体图

4.3.2数据表设计

数据库表设计:经过前期的需求分析、可执行分析、数据流分析等各个流程分析,结合软件工程的高内聚、低耦合规则,并考虑到以后的程序功能扩展,设计如下几张表

group表:

名称

类型

长度

不是null

主键

注释

group_id

mediumint

8

用户组ID

display

smallint

4

显示顺序

name

varchar

16

名称

description

varchar

255

描述:

source_table

varchar

255

来源表:

source_field

varchar

255

来源字段:

source_id

int

10

来源ID:

register

smallint

1

注册位置:

create_time

timestamp

0

创建时间:

update_time

timestamp

0

更新时间:

planting_information表:

名称

类型

长度

不是null

主键

注释

product_category_id

int

11

产品类别ID

product_category

varchar

64

产品种类

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

product表:

名称

类型

长度

不是null

主键

注释

product_id

int

11

产品ID

product_name

varchar

64

产品名称

product_category

varchar

64

产品种类

date_of_manufacture

date

0

生产日期

guarantee_date_

date

0

保质日期

product_cover

varchar

255

产品封面

peasant_household

int

11

农户

contact_information

varchar

16

联系方式

price

varchar

64

价格

supply

int

11

供应量

specifications

varchar

64

规格

details

text

0

详情

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

peasant_household表:

名称

类型

长度

不是null

主键

注释

peasant_household_id

int

11

农户ID

gender

varchar

64

性别

address

varchar

64

所在地址

id

varchar

255

身份证

full_name

varchar

64

姓名

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

order_form表:

名称

类型

长度

不是null

主键

注释

order_form_id

int

11

订单表ID

product_name

varchar

64

产品名称

peasant_household

int

11

农户

product_category

varchar

64

产品种类

contact_information

varchar

64

联系方式

price

varchar

64

价格

total

varchar

64

总计

number_of_purchases

int

11

购买数

user

int

11

用户

contact_number

varchar

16

联系电话

receiving_address

varchar

64

收货地址

order_number

varchar

64

订单编号

order_status

varchar

64

订单状态

specifications

varchar

64

规格

purchase_date

date

0

购买日期

pay_state

varchar

16

支付状态

pay_type

varchar

16

支付类型

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

logistics_status表:

名称

类型

长度

不是null

主键

注释

logistics_status_id

int

11

物流状态ID

order_number

varchar

64

订单编号

product_name

varchar

64

产品名称

product_category

varchar

64

产品种类

specifications

varchar

64

规格

peasant_household

int

11

农户

number_of_purchases

varchar

64

购买数

user

int

11

用户

contact_number

varchar

64

联系电话

receiving_address

varchar

64

收货地址

logistics_company

varchar

64

物流公司

logistics_status

text

0

物流状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

commission_details表:

名称

类型

长度

不是null

主键

注释

commission_details_id

int

11

佣金明细ID

report_date

date

0

报表日期

peasant_household

int

11

农户

platform_collection

varchar

64

平台收取

total_revenue

int

11

总收入额

real_income

varchar

64

实际收入

peasant_household_income

varchar

64

农户收入

agent_income

varchar

64

代理商收入

agent

int

11

代理商

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

apply_for_custody表:

名称

类型

长度

不是null

主键

注释

apply_for_custody_id

int

11

申请托管ID

peasant_household

int

11

农户

application_object

int

11

申请对象

application_time

date

0

申请时间

reasons_for_application

text

0

申请理由

remarks

varchar

64

备注

examine_state

varchar

16

审核状态

examine_reply

varchar

255

审核回复

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

apply_for_custody表:

名称

类型

长度

不是null

主键

注释

agent_information_id

int

11

代理商信息ID

title

varchar

64

标题

release_type

varchar

64

发布类型

cover_picture

varchar

255

封面图

publish_content

longtext

0

发布内容

publisher

int

11

发布人

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

  1.  系统详细设计

5.1登录模块

本系统主要的用户有系统管理员、用户,一个系统最基本的功能就是登录功能,本系统可以进行系统登录的角色有用户、管理员,买家对应前台登录界面,管理员对应后台登录界面,首先进入登录页,输入用户名和密码,然后提交至服务端进行数据库数据验证,通过Django逻辑代码判断数据库是否存在用户输入的这一个记录,如果存在,则判断用户身份,如果是买家用户,则进入买家前台,如果是管理员用户,则进入系统主页,并把用户对象存放在session中,如果不存在这样一条记录,则返回登录界面。

登录界面如下所示。

图5-1登录界面

登录界面代码:

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}

5.2注册模块

客户在第一次进行注册时,需要填写自己的名字和密码,填写完成后,提交表单,该表单将自动验证你的信息,如果文件格式不正确,则会在窗口提醒你不正确,如果文件格式正确,窗口将会弹出注册成功。

用户注册界面如下所示:

图5-2用户注册界面

用户注册界面代码:

/**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(@RequestBody User user) {

        // 查询用户

        Map<String, String> query = new HashMap<>();

        query.put("username",user.getUsername());

        List list = service.select(query, new HashMap<>()).getResultList();

        if (list.size()>0){

            return error(30000, "用户已存在");

        }

        user.setUserId(null);

        user.setPassword(service.encryption(user.getPassword()));

        service.save(user);

        return success(1);

}

/**

     * 用户ID:[0,8388607]用户获取其他与用户相关的数据

     */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")

    private Integer userId;

    /**

     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

     */

    @Basic

    @Column(name = "state")

    private Integer state;

    /**

     * 所在用户组:[0,32767]决定用户身份和权限

     */

    @Basic

    @Column(name = "user_group")

    private String userGroup;

    /**

     * 上次登录时间:

     */

    @Basic

    @Column(name = "login_time")

    private Timestamp loginTime;

    /**

     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "phone")

    private String phone;

    /**

     * 手机认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "phone_state")

    private Integer phoneState;

    /**

     * 用户名:[0,16]用户登录时所用的账户名称

     */

    @Basic

    @Column(name = "username")

    private String username;

    /**

     * 昵称:[0,16]

     */

    @Basic

    @Column(name = "nickname")

    private String nickname;

    /**

     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

     */

    @Basic

    @Column(name = "password")

    private String password;

    /**

     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "email")

    private String email;

    /**

     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "email_state")

    private Integer emailState;

    /**

     * 头像地址:[0,255]

     */

    @Basic

    @Column(name = "avatar")

    private String avatar;

    /**

     * 创建时间:

     */

    @Basic

    @Column(name = "create_time")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Timestamp createTime;

    @Basic

    @Transient

    private String code;

}

5.3产品推荐模块

系统为用户提供简洁的农产品推荐视图,买家可以自由切换视图,可以以列表的形式排列农产品推荐,也可以以网格状的形式显示农产品推荐,方便用户找到自己需要的农产品推荐。在shangpinxinxilist.jsp实现农产品推荐列表的展示,用户点击某个农产品推荐,通过农产品推荐id传递值,找到数据表的该农产品推荐的信息。

如下图所示为产品推荐界面。

图5-3产品推荐界面

产品推荐代码:

@RequestMapping("/get_obj")

    public Map<String, Object> obj(HttpServletRequest request) {

        Query select = service.select(service.readQuery(request), service.readConfig(request));

        List resultList = select.getResultList();

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

 public Query select(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("select ");

        sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");

        sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));

        if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){

            sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");

        }

        if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){

            sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");

        }

        if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){

            int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;

            int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;

            sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);

        }

        log.info("[{}] - 查询操作,sql: {}",table,sql);

        return runEntitySql(sql.toString());

    }

5.4购买产品模块

用户在浏览产品后,登录系统前台,进行产品购买,可将产品先添加至购买车,然后在购物车里结算,在个人后台可以查看购买车里面的产品,确定产品之后可以生成订单,然后支付。

如下图所示为购买产品的部分界面。

图5-4购买产品界面

购买产品界面代码:

@RequestMapping(value = {"/count_group", "/count"})

    public Map<String, Object> count(HttpServletRequest request) {

        Query count = service.count(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

5.5用户管理模块

用户注册后在数据库生成一条用户户数据,并显示在用户户管理列表中,管理员可对用户数据增删改查,禁用用户账号,让用户无法登录系统。

如下图所示为用户管理的部分界面。

图5-5用户管理界面

用户管理界面代码:

 @PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

5.6产品类别模块

用户在系统前台浏览产品类别,管理员登录系统后,可以对添加、删除、修改产品类别,产品类别管理包括添加产品类别、查询产品类别、修改产品类别,系统前台的产品类别信息时随系统后台变化而变化的,同时能进行详细产品类别的打印和产品类别列表,管理员还可以通过标题等关键字进行产品类别信息的搜索。

产品类别的界面如下图所示。

图5-6产品类别界面

产品类别界面代码:

 @RequestMapping(value = {"/count_group", "/count"})

    public Map<String, Object> count(HttpServletRequest request) {

        Query count = service.count(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

5.7产品信息模块

管理人员可以对资助进行增删查改的操作,这些操作将在产品信息界面进行。

如下图所示为产品信息界面。

图5-7产品信息界面

产品信息界面代码:

 @RequestMapping(value = {"/avg_group", "/avg"})

public Map<String, Object> avg(HttpServletRequest request) {

        Query count = service.avg(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

5.8订单表模块

首先登录系统,进行订单表浏览,管理员登录后台进行用户订单信息维护管理,包括订单中的产品名称,产品种类,买家,订单号,购买数量,价格,支付状态等。

如下图为订单表界面。

图5-8订单表界面

订单表界面代码:

@RequestMapping("/get_list")

    public Map<String, Object> getList(HttpServletRequest request) {

        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));

        return success(map);

}

  1.  系统测试

6.1测试目的

该系统能够完成产品展示,产品销售,物流信息,佣金报表,用户管理等功能,做到所开发的系统操作简单,尽量使系统操作不受用户对电脑知识水平的限制,符合系统可维护性,由于系统涉及的信息比较广,数据库中的数据需定期修改,系统可利用的空间及性能也随之下降,为了使系统更好地运转,系统可以对系统数据及一些简单的功能进行独立的维护及调整;符合系统开放性要求,该系统能够在开放的硬件体系结构中运行,并且能与其他系统顺利连接。

6.2测试用例

1.注册测试

表6-1注册测试用例

字段名称

描述

测试项

首页注册功能测试

输入数据

1、输入正确的邮箱、用户名、密码、确认密码、以及验证码之后点击“注册”按钮

2、输入错误的用户名或密码、邮箱、验证码等,单击“注册”按钮

3、不输入邮箱、用户名、密码、确认密码、以及验证码之后点击“注册”按钮

预计输出数据

1、用户能正确注册账号,成功插入数据库用户的账户资料,提示注册成功。

2、无法注册用户信息,注册失败。

3、无法注册用户信息,注册失败。

使用上述测试用例对前台首页注册界面进行测试,当在输入正确的邮箱、用户名、密码、确认密码、以及验证码之后,系统将弹出注册成功信息提示对话框。

使用上述测试用例对前台首页注册界面进行测试,当在输入错误的用户名或密码、邮箱、验证码之后,系统将提示错误。

使用上述测试用例对前台首页注册界面进行测试,当在不输入用户名、密码、邮箱、验证码之后,点击注册按钮。

2.登录界面进行测试 

表6-2登录测试用例

测试项

首页登录功能测试

输入数据

1、输入正确的用户名和密码,单击“登录”按钮

2、输入错误的用户名和密码,单击“登录”按钮

3、不输入用户名和密码,单击“登录”按钮

预计输出数据

1、数据库中存在的用户能正确登录,。结果弹出主界面。

2、错误的或者无效用户登录,登录系统失败。

3、输入用户名或密码信息为空,登录系统失败。

使用上述测试用例对前台首页登录界面进行测试,当在用户名输入框中输入正确的用户名和密码时候,系统将弹出登录成功信息提示对话框。

使用上述测试用例对前台首页登录界面进行测试,当在用户名输入框中输入错误的或无效的用户名时,系统将弹出错误信息提示对话框。

通过测试可以观察到实现的运行结果与测试用例中预计输出的结果是相符的,所以测试通过。

3.产品管理进行测试 

名称:用户管理测试        目的:测试产品管理界面 

内容:口令的输入,合法性检查,合理性检查,界面的显示控制。 

下表描述了农产品表中目前所存在的记录。

表6-5产品表预存数据

    产品名

产品类别

产品价格

产品状态

产品A

A

59

上架

产品B

B

18

上架

产品C

C

20

上架

添加时应注意事项:

管理员添加产品时必须添加已存在的产品类别,若该产品不属于现有的所有类别,则应该先添加产品类别。

下表描述了添加产品信息进行测试的用例,主要是为了防止添加产品信息时出现异常和存在的漏洞。

表6-6添加产品信息测试用例

输入

输出

产品信息名

产品信息价格

产品信息图片

A123

参数错误

产品信息A

123

Coid.doc

参数错误

产品信息A

59

请选择上传图片

产品信息A

59

a.jpg

添加成功

5.订单生成测试 

名称:订单生成测试        目的:测试提交订单界面

内容:口令的输入,合法性检查,合理性检查,界面的显示控制。 

下表描述了订单生成的测试用例,防止订单生成错误,造成企业和客户的损失。

表6-8订单生成测试用例

输入

输出

订单编号

联系人

地址

电话

11

张三

上海市静安区11号

212312323

订单生成成功

22

张三

123423423

请填写收货地址

33

张三

上海市静安区11号

请填写联系电话

44

上海市静安区11号

123423423

请填写联系人姓名

  1.  结论

经过这几个月的设计和开发,“基于Springboot的助农电商系统”已经完成了,其功能符合设计需求,能够完成用户的注册、用户的在线购买、购物车管理、物流信息管理和管理员的产品信息管理、订单管理、申请托管、用户管理、信息维护等功能。经过最后的使用,证明系统完全具有可行性与可扩充性。

在系统的分析阶段,主要是分析系统的需求,理解系统要完成的基本功能,找出系统的用例(Use Case)和角色(Actor),画出系统的用例模型图,用例模型是此后系统建模的基础。在用例的基础上分析顺序图和协作图,得到系统的所有对象,然后建立对象模型。抽象出系统的类,并将系统中联系紧密的类划分为若干个包,画出包图。有了这些基础,就可以将系统划分为小单元功能模块。

整个过程中,我必须认可UML统一建模语言,它让我很清晰的知道自己想做什么,想实现什么,对系统后面的代码编写起到决定性的帮助,同时经过本次系统的设计与实现,让我积累了很多经验,提高了编写程序的能力,为以后的学习和工作打下了坚实的基础。

由于时间有限,本系统还有待继续完善和改进,因此需要进一步进行分析和修改,以使其更加完善! 

参考文献

  1. 鞠红凤,张瑛,黄琳倩,付慧敏,胡湘.一站式助农电商服务平台的设计[J].电子世界,2022(01):198-199+203.
  2. 马富春. 甘肃青春助农 唱响“甘味”之歌[N]. 中国青年报,2021-12-24(001).
  3. 孟静.基于平台经济视角下直播助农模式探讨[J].黑龙江工业学院学报(综合版),2021,21(11):91-96.
  4. 郭沛,张成鹏,李梦琪.电商助农:运作实践、增收机理、创新绩效和优化路径[J].中共云南省委党校学报,2021,22(05):151-160+2.
  5. Shuhua CAO,Yujun HU,Peijun FU.Present Situation and Problems of Application of New Media in Rural E-commerce: A Case Study of Anhui Province[J].Asian Agricultural Research,2021,13(10):12-17.
  6. 孙晟妤,马悦鸣,党浩轩,黄佳瑶,张丰钰.利用新媒体平台对辽扶贫助农的新路径研究[J].营销界,2021(38):126-128.
  7. 徐涛,陶佳,曾聪,唐江兰.乡村振兴视域下“互联网+”农业互助平台的开发与应用[J].南方农业,2021,15(24):144-145.
  8. 朱悦彤,于雅洁,朱硕闻,马思怡,李佳怡.基于新媒体的助农方法研究[J].营销界,2021(20):32-33.
  9. 孙丹丽,郭月朦.基于“互联网+”的乡村产品品牌价值探索[J].包装工程,2021,42(08):234-240.
  10. 谢倩.电商助农政策有关问题研究[J].农村经济与科技,2021,32(03):143-144.

[11]  焦瑾,陈梦梦,董思颖,侯冰洁,王梦茹.助农专家科技平台的设计和应用[J].南方农机,2020,51(22):74-75.

[12]  戴月,陈俊雅,纪倩倩,周稿,石官平.基于移动社交电商的农产品上行探究[J].湖北开放职业学院学报,2020,33(13):124-126.

[13]  电商平台、网络直播、微信发挥大作用重庆21万志愿者利用农业信息工具助农[J].农业工程技术,2020,40(09):68-69.

[14]  William J.DAVIES,Susan E.WARD,Alan WILSON.Can crop science really help us to produce more betterquality food while reducing the world-wide environmental footprint of agriculture?[J].Frontiers of Agricultural Science and Engineering,2020,7(01):28-44.

[15]  阚丽丽.电商平台“花式”助农 机遇与挑战并存[J].新产经,2020(03):65-67.

[16]  肖佳敏,徐凯丽,张如意,杨明凯,叶丽莎,朱立飞.电商网络平台助力农村经济发展办法研究——基于“绿屏菜园”的平台研究以浙江丽水为例[J].现代营销(信息版),2019(08):239.

[17]  琚书存,程文杰,徐建鹏,王晖,伍琼.打造三大服务平台 做好气象助农扶贫工作[J].中国农村科技,2018(08):25-28.

致 谢

大学的学习生活总是感觉短暂的,总感到知识还没有学够,但大学毕业就在我们面前,即毕业设计即将的结束,意味着我们的大学生涯即将结束。毕业设计是我们在大学所学知识的一次总结,更是对我们过去所学知识的提炼和升华,通过毕业设计,我们认识到大学学习过程中还有那些知识没有掌握,那些知识需要我们进入深入研究。这次毕业设计让我学到了很多新的知识,研究了一些新的以前自己不熟悉的领域,使我处理问题的能力得到了一定的提升,同时也为今后的继续深造或踏入社会大门提供了很好的锻炼机会。

我也曾经沮丧过,失落过,想放弃过,可是因为你们这不厌其烦的鼓励和支持才使得我坚持了下来,这里我要对我的老师和同学们说句“谢谢你们”。因为我们的知识是有限的,所以本文将不可避免的会出现一些错误和不足之处,还请老师指正。

免费领取本源代码,请关注点赞+私信

相关文章:

  • Idea debug 调试运行慢
  • PostgreSQL修炼之道笔记之基础篇(六)
  • Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第12章 Vue3.X新特性解析 12.9 Refs 模板
  • 有序矩阵中第K小元素[优先队列PriorityQueue]
  • 闲谈JVM(一):浅析JVM Heap参数配置
  • 商城小程序系统,商城源码
  • 元宇宙电商-NFG系统带你布局数字藏品领域
  • statsD学习笔记
  • 坠落的蚂蚁(暑假每日一题 40)
  • TV蓝牙无法被搜索问题解决记录:REQUEST_DISCOVERABLE ActivityNotFoundException
  • 【JavaScript 逆向】猿人学 web 第六题:回溯
  • 最牛逼的 Java 日志框架,性能无敌,横扫所有对手
  • CREO:CREO软件之装配设计界面的简介、装配图设计流程、案例应用(图文教程)之详细攻略
  • 【赛码网刷题】动态规划之上台阶
  • Java 的开发效率究竟比 C++ 高在哪里?
  • CSS居中完全指南——构建CSS居中决策树
  • C语言笔记(第一章:C语言编程)
  • Intervention/image 图片处理扩展包的安装和使用
  • JAVA_NIO系列——Channel和Buffer详解
  • Linux CTF 逆向入门
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • React-生命周期杂记
  • vue.js框架原理浅析
  • XML已死 ?
  • 程序员最讨厌的9句话,你可有补充?
  • 限制Java线程池运行线程以及等待线程数量的策略
  • Android开发者必备:推荐一款助力开发的开源APP
  • gunicorn工作原理
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #NOIP 2014#Day.2 T3 解方程
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)c52学习之旅-简单了解单片机
  • (二)linux使用docker容器运行mysql
  • (循环依赖问题)学习spring的第九天
  • (转)http-server应用
  • (转)Sql Server 保留几位小数的两种做法
  • (转)Sublime Text3配置Lua运行环境
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)重识new
  • .net Application的目录
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net程序集学习心得
  • .Net的DataSet直接与SQL2005交互
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .project文件
  • @Mapper作用
  • @TableLogic注解说明,以及对增删改查的影响
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解