基于Jsp和MySql实现的农场信息管理系统
第一章 绪论
1.1 “互联网+”农业
“互联网+”是利用信息通信技术以及互联网平台,让互联网与传统行业进行深度融合,创造新的发展生态。它代表一种新的社会形态,即充分发挥互联网在社会资源配置中的优化和集成作用,将互联网的创新成果深度融合于经济、社会各域之中,提升全社会的创新力和生产力,形成更广泛的以互联网为基础设施和实现工具的经济发展新形态。互联网农业是指将互联网技术与农业生产、加工、销售等产业链环节结合,实现农业发展科技化、智能化、信息化的农业发展方式。“互联网+农业”就是依托互联网的信息技术和通信平台,使农业摆脱传统行业中,消息闭塞、流通受限制,农民分散经营,服务体系滞后等难点,使现代农业坐上互联网的快车,实现中国农业集体经济规模经营。
“互联网+农业”是一种生产方式、产业模式与经营手段的创新,通过便利化、实时化、物联化、智能化等手段,对农业的生产、经营、管理、服务等农业产业链环节产生了深远影响,为农业现代化发展提供了新动力。以“互联网+农业”为驱动,有助于发展智慧农业、精细农业、高效农业、绿色农业,提高农业质量效益和竞争力,实现由传统农业向现代农业转型。
“互联网+农业”的优势有 :
-
通过物联网实时监测,应用大数据进行分析和预测,实现精准农业,降低单位成本,提高单位产量
-
互联网技术推动农场的信息化管理,实现工厂化的流程式运作,进一步提升经营效率,更有助于先进模式的推广复制
-
“互联网+农业”不仅能够催生巨大数据搜集、信息平台建设等技术服务需求,同时也生产打开了更大的农资产品销售空间
“互联网+农业”的实际意义 :
-
提高效率 :降低风险,数据可视化市场可视化,使生产产量可控
-
打破传统 :重新构建了农产品流通模式,突破了传统农产品生产模式,建立新的信息来源模式
-
安全感 :向国外可追溯农业看齐,加强食品安全监管
-
链条化 :纵向拉长产业结构
-
信息共享 :了解更多最新最全信息
“互联网+”对农业的影响 :
“互联网+”开创了大众参与的“众筹”模式,对于我国农业现代化影响深远。一方面,“互联网+”促进专业化分工、提高组织化程度、降低交易成本、优化资源配置、提高劳动生产率等,正成为打破小农经济制约我国农业农村现代化枷锁的利器;另一方面,“互联网+”通过便利化、实时化、感知化、物联化、智能化等手段,为农地确权、农技推广、农村金融、农村管理等提供精确、动态、科学的全方位信息服务,正成为现代农业跨越式发展的新引擎。“互联网+农业”是一种革命性的产业模式创新,必将开启我国小农经济千年未有之大变局。
“互联网+”助力智能农业和农村信息服务大提升。智能农业实现农业生产全过程的信息感知、智能决策、自动控制和精准管理,农业生产要素的配置更加合理化、农业从业者的服务更有针对性、农业生产经营的管理更加科学化,是今后现代农业发展的重要特征和基本方向。“互联网+”集成智能农业技术体系与农村信息服务体系,助力智能农业和农村信息服务大提升。
“互联网+”助力国内外两个市场与两种资源大统筹。“互联网+”基于开放数据、开放接口和开放平台,构建了一种“生态协同式”的产业创新,对于消除我国农产品市场流通所面临的国内外双重压力,统筹我国农产品国内外两大市场、两种资源,提高农业竞争力,提供了一整套创造性的解决方案。
“互联网+”助力农业农村“六次产业”大融合。“互联网+”以农村一二三产业之间的融合渗透和交叉重组为路径,加速推动农业产业链延伸、农业多功能开发、农业门类范围拓展、农业发展方式转变,为打造城乡一二三产业融合的“六次产业”新业态,提供信息网络支撑环境。
“互联网+”助力农业科技大众创业、万众创新的新局面。以“互联网+”为代表新一代信息技术为确保国家粮食安全、确保农民增收、突破资源环境瓶颈的农业科技发展提供新环境,使农业科技日益成为加快农业现代化的决定力量。基于“互联网+”的“生态协同式”农业科技推广服务平台,将农业科研人才、技术推广人员、新型农业经营主体等有机结合起来,助力“大众创业、万众创新”。
“互联网+”助力城乡统筹和新农村建设大发展。“互联网+”具有打破信息不对称、优化资源配置、降低公共服务成本等优势,“互联网+农业”能够低成本地把城市公共服务辐射到广大农村地区,能够提供跨城乡区域的创新服务,为实现文化、教育、卫生等公共稀缺资源的城乡均等化构筑新平台。
第二章 互联网软件开发技术
2.1 Spring框架
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
-
轻量 :从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类
-
控制反转 :Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它
-
面向切面 :Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持
-
容器 :Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用
-
框架 :Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
Spring框架由七个定义明确的模块组成。分别是核心容器(Spring Core),应用上下文(Spring Context),Spring AOP,Spring DAO,对象映射模块(Spring ORM),Spring Web和Spring MVC框架。
Spring框架图
如果作为一个整体,这些模块为你提供了开发企业应用所需的一切。但你不必将应用完全基于Spring框架。你可以自由地挑选适合你的应用的模块而忽略其余的模块。
就像你所看到的,所有的Spring模块都是在核心容器之上构建的。容器定义了Bean是如何创建、配置和管理的——更多的Spring细节。当你配置你的应用时,你会潜在地使用这些类。但是作为一名开发者,你最可能对影响容器所提供的服务的其它模块感兴趣。这些模块将会为你提供用于构建应用服务的框架,例如AOP和持久性。
核心容器(Spring Core)
这是Spring框架最基础的部分,它提供了依赖注入(DependencyInjection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IoC将应用配置和依赖说明从实际的应用代码中分离出来。
应用上下文模块(Spring Context)
核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。
另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。
Spring的AOP模块
Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在Spring应用中实现切面编程的基础。为了确保Spring与其它AOP框架的互用性,Spring的AOP支持基于AOP联盟定义的API。AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性。通过访问他们的站点,你可以找到关于AOP联盟的更多内容。
Spring的AOP模块也将元数据编程引入了Spring。使用Spring的元数据支持,你可以为你的源代码增加注释,指示Spring在何处以及如何应用切面函数。
JDBC抽象和DAO模块
使用JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。Spring的JDBC和DAO模块抽取了这些重复代码,因此你可以保持你的数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。
这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使你不用再试图破译神秘的私有的SQL错误消息!
另外,这个模块还使用了Spring的AOP模块为Spring应用中的对象提供了事务管理服务。
对象/关系映射集成模块(Spring ORM)
对那些更喜欢使用对象/关系映射工具而不是直接使用JDBC的人,Spring提供了ORM模块。Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射。Spring的事务管理支持这些ORM框架中的每一个也包括JDBC。
Spring的Web模块
Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。
Spring的MVC框架
Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。
它也允许你声明性地将请求参数绑定到你的业务对象中,此外,Spring的MVC框架还可以利用Spring的任何其它服务,例如国际化信息与验证。
2.2 Spring MVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2等。
通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫开发者只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。
Spring MVC由模型(M)、视图(V)、控制器(C)构成:
-
模型 :模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用像EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性
-
视图 :视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和像XHTML,XML/XSL,WML等一些标识语言和Web services. 如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式
-
控制器 :控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户
Spring MVC框架
2.3 MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis [2] 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或 file:// 开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
框架架构 :
-
加载配置 :配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中
-
SQL解析 :当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数
-
SQL执行 :将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果
-
结果映射 :将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回
Mybatis框架流程
2.4 MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
由于其社区版的性能卓越,搭配 PHP和 Apache 可组成良好的开发环境。
MYSQL结构
2.5 Maven
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVSMaven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期 (Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件 (plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。
2.6 Bootstrap
Bootstrap是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的,它简洁灵活,使得 Web 开发更加快捷。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。国内一些移动开发者较为熟悉的框架,如WeX5前端开源框架等,也是基于Bootstrap源码进行性能优化而来。
Bootstrap包的内容:
-
基本结构 :Bootstrap 提供了一个带有网格系统、链接样式、背景的基本结构。这将在 Bootstrap 基本结构 部分详细讲解
-
CSS :Bootstrap 自带以下特性:全局的 CSS 设置、定义基本的 HTML 元素样式、可扩展的 class,以及一个先进的网格系统。这将在 Bootstrap CSS 部分详细讲解
-
组件 :Bootstrap 包含了十几个可重用的组件,用于创建图像、下拉菜单、导航、警告框、弹出框等等。这将在 布局组件 部分详细讲解
-
JavaScript 插件 :Bootstrap 包含了十几个自定义的 jQuery 插件。您可以直接包含所有的插件,也可以逐个包含这些插件。这将在 Bootstrap 插件 部分详细讲解
-
定制 :你可以定制 Bootstrap 的组件、LESS 变量和 jQuery 插件来得到你自己的版本
第三章 互联网软件开发环境搭建
本节主要介绍互联网软件开发环境的配置,并搭建软件开发的基础框架。下面我们主要从基本开发环境配置,建立Maven项目,MyBatis与Spring整合,Spring MVC配置,web.xml 配置5个方面对项目开发环境进行搭建。
3.1 基本开发环境配置
根据上述要求,结合项目开发实际需要,我们将项目所需基本开发环境清单列出如下所示。
-
操作系统 :Microsoft Window10
-
编程语言 :Java
-
编程IDE :JetBrains-Intellij Idea Ultimate
-
服务器 :Apache-Tomcat-9.0.6
-
数据库 :MySQL 5.7.21 Community Server
由于这些环境的搭建过程简单、繁琐,我们特意将安装过程参照的文档和相关教程列出如下清单。
-
Java :http://www.runoob.com/java/java-environment-setup.html
-
IDEA :https://blog.csdn.net/haishu_zheng/article/details/50265371
-
Tomcat :http://blog.csdn.net/qq_32519693/article/details/71330930
-
MySQL :http://www.runoob.com/mysql/mysql-install.html
3.2 建立Maven项目
配置好环境后,接下来开始建立Maven项目。在IDEA中选择File→New→Maven Project,找到Maven,选择SDK,找到maven-archetype-webapp,如图3-2-1所示。
之后点击Next填入Group Id和Archetype Id后点击Next,接下来,选择我们配置好的Maven,如图3-2-2所示。
点击Next,至此Maven项目创建完成。
接下来我们通过Maven引入第三方Jar包。此处通过新建项目文件下的pom.xml文件对Jar包进行管理,在dependencies标签下添加dependency标签即可实现对Jar包的添加。
对于不同的项目,Jar包的需求也有所不同,dependency标签的具体内容可以通过http://mvnrepository.com/ 进行查找,在每个不同的Jar包下repository将把该Jar包的dependency标签内容给出,例如MyBatis 3.4.5的Jar包标签如图3-2-2所示。
3.3 MyBatis与Spring整合
由于MyBatis的初始化都是通过Spring的Bean进行注入初始化,因此可以把MyBatis与Spring的初始化放在一起进行说明。
首先介绍MyBatis与Spring框架所需要的Jar包,具体在pom.xml的配置如图3-3-1和图3-3-2所示。
MyBatis相关jar包配置
Spring相关jar包配置
这里值得注意的是,由于Spring需要对版本号进行统一,因此在pom.xml中添加了properties标签来对spring的版本号进行统一规范,如图3-3-3所示。
那么为了方便项目与数据库之间的连接,我们可以选择建立JDBC属性文件专门记录项目与数据库的连接属性。在项目的/src/main/resources下建立database.properties文件,按照如图3-3-4的方式存放数据库的连接属性。
jdbc.properties文件内容
接下来同样在/src/main/resources下建立spring-dao.xml文件,将spring和mybatis进行整合。该xml文件的主要目的是利用spring自动扫描,自动注入,配置数据库的功能。那么database.properties的内容也会通过spring扫描注入该xml文件中。spring-dao.xml部分配置如图3-3-5所示。
值得注意的是,这里的数据库连接池使用了阿里的druid连接池读取数据库信息,因此在pom.xml中需要引入druid相关的Jar包,具体dependency标签如图3-3-6所示。
3.4 Spring MVC配置
与MyBatis相类似,MVC框架也需要与Spring深度整合,因此同MyBatis一样,MVC也可以使用Spring的Bean注入进行初始化,由于Spring所需Jar包在Spring和MyBatis整合部分已经给出,参考图3-3-2 Spring相关jar包配置。
同样地,/src/main/resources下建立spring-web.xml文件对Spring MVC进行初始化。对于MVC框架的初始化主要是对控制器包进行扫描,启动Spring MVC注释,视图配置等操作。spring-web.xml的部分配置如图3-4-1所示
3.5 web.xml配置
这是框架搭建的最后一步,将通过Spring整合之后的MyBatis与Spring MVC再次进行整合。此时打开项目的/src/main/webapp/WEB-INF/web.xml文件,此处主要对查找spring-dao.xml,统一编码格式,增加Spring监听,防止内存溢出以及Spring MVC下Servlet进行配置。web.xml的部分配置项如图3-5-1所示。
以上便是整个SSM(Spring + Spring MVC + MyBatis)框架搭建的基本流程。对于上述环境搭建过程具体每个xml的设置过程以及整个系统的测试过程可以参考以下教程继续学习:详述IntelliJ IDEA创建Maven项目及设置Java源目录的方法—CSDN博客。
第四章 “互联网+农业“案例介绍
在搭建好开发环境后,我们通过软件工程的需求分析、概要设计、详细设计以及列举几个核心功能的实现流程来对整个开发流程进行详细介绍,最后对整个系统进行详细测试来保证系统的稳定性。
4.1 系统需求分析
4.1.1 业务描述
该系统结构集农业生产、销售、服务、管理于一身,针对农业信息化的需求进行功能设计。并且系统结构应具有一定扩展性,在新增其他服务功能的同时不修改原有系统功能。
系统需要实现的目标主要是实现“互联网+农业”的新融合发展模式下搭建管理维护平台,主要包括农场管理、系统管理两个模块。通过这两个模块对该企业的生产、销售、管理、服务等流程进行全方位管理和系统自身的运行维护,系统主要面向的对象是农场管理人员。
4.1.2 系统功能架构图
根据上述对系统业务功能的描述,设计出系统的业务架构图如图4-1-1所示,系统被分为农场管理、系统管理两个主要功能模块。
4.1.3 系统技术规格
系统从总体架构设计、业务设计和技术架构设计上可以被分为三个部分:一是Web平台,Web平台具有很强的开放性,外部用户也可以通过浏览器访问;平台向用户提供系统交互接口,为用户提供方便、快捷、高效的系统管理界面的同时,可以提高农场信息化管理效率;而且对于系统的开发、维护和升级比较便利;二是计算处理层,保证用户的数据请求能够准确、高效、及时的执行,能够快速进行响应,为系统用户提供精确的农业信息和种植推荐。该层级在架构上应当相互独立、在业务上相互关联的各个模块组成,这些模块共同处理用户服务请求,进行相应计算,实现相应功能;三是数据存储层,该层位于整个系统的最底层,一方面负责保存和整合用户的相关数据信息和系统的管理信息,实现数据整合、存储的环节,另一方面负责向系统上层提供计算所需的数据信息,保证各个功能模块所需数据输入。
Web平台将采用B/S架构模式,需要实现农场、商城管理、系统管理等。其中商城主要涉及企业所管理商家的操作,包括新增商家、修改商家信息等。农场管理是该系统的主要部分,既包含农场本身的生产、供应、销售信息进行查看、管理,如菜地管理、菜品管理,又包含农场客户的相关管理,如对农场客户信息的管理。系统管理主要对系统使用用户进行用户管理以及面向管理员的操作日志管理。
计算机处理层采用模块化的设计思想,分模块实现各个系统模块,保证系统的容错性以及可扩展性。整个处理层将采用请求-响应的模式,利用不同的模块中的不同方法对用户的请求提出不同的响应。
数据存储层采用主流的MySQL关系数据库对系统产生的所有数据进行存储,实现数据高效、安全存储,以便后续处理与维护。
客户端与服务器端技术选择 :
在Web平台的选择上主要注重用户体验、用户交互、跨平台以及便于使用的特性,因此使用了HTML、CSS和JavaScript,并且使用了技术成熟的Bootstrap前端框架,有效的提升了系统的开发效率。
服务端采用Spring、Spring MVC、MyBatis框架进行开发。主要是因为Spring、Spring MVC、MyBatis框架都具有极高扩展性和伸缩性而且他们的技术已经成熟。利用Spring的IoC机制能够将程序之间的关系的控制权交给容器,从而减少了程序的耦合;利用MyBatis作为数据持久化框架,在提升项目数据层可移植性的同时也提高项目的开发效率;Spring MVC将整个业务流程更加清晰,使业务流程变得组件化,最终使得程序更易于开发。
4.2 系统概要设计
4.2.1 项目总体框架
总体设计原则
整体建模,模型驱动:项目的设计和开发基于模型驱动(MDA)理论,所有的功能模块都应该建立对象模型,并以模型为指导,驱动软件的开发。模型既能指导本项目的开发过程,同时也是本项目的重要输出产物。
高扩展性原则:系统结构应该具有高度可扩展性,能够通过扩展的方式对管理系统的应用功能进行扩展,而不用修改原有系统功能。
可靠性原则:系统模块丰富,必定涉及故障问题,系统应该在软件运行阶段具有避免可能发生故障的能力。
安全性原则:本系统能在外网内网应用,因此必须确保内网环境的安全。
总体技术路线
总体技术路线如表4-2-1所示。
分类 | 所选路线 |
---|---|
技术选型 | 界面展现技术:基于HTML4.0+JQuery+Bootstrap技术;服务器开发技术:选择JavaEE技术规范 |
开发平台 | 基于J2EE平台,采用Spring MVC框架 |
中间件 | Tomcat-9.0.6 |
数据库 | Mysql5.7.22 Community Server |
开源软件 | Mysql,Tomcat,JDK,Maven等 |
4.2.2 业务能力视图
根据上述4.1节描述,该系统涉及商城、农场管理、系统管理和消息推送四个模块功能,四个功能模块下分别有多个功能子模块,各功能模块之间最大程度实现了“高内聚,低耦合”的设计原则,最大程度保证了后期编码工作的开发效率。
系统的功能模块图如图4-2-1所示,具体功能清单如表4-2-2所示。
功能点名称 | 功能点内容描述 | 前置条件 |
---|---|---|
农场管理 | 用户可通过农场管理来管理菜地信息、种植方案推荐、菜品、客户、商家、订单等相关信息 | 已注册认证的系统管理员用户 |
系统管理 | 用户可通过系统管理来管理系统使用用户、操作日志与系统运维 | 已注册认证的系统管理员用户 |
接下来对每个模块下的每个功能点进行列清单分项说明。
农场管理:该模块主要涉及与终端用户相关的农场数据管理功能,包括菜地管理、农作物管理、种植管理、客户信息管理、任务管理、商品管理、订单管理等。功能点清单如表4-2-4所示:
功能点名称 | 功能点内容描述(业务步骤/业务规则) | 前置条件 |
---|---|---|
菜地信息管理 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2) 登录后,可查看所有的菜地信息,并进行增删改查等相关操作 | 已注册认证的系统管理员用户 |
农作物信息管理 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2) 登录后,可查看所有的农作物信息,并进行增删改查等相关操作 | 已注册认证的系统管理员用户 |
种植信息管理 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2) 登录后,可以指定菜地编号和农作物进行作物种植操作和增删改查等相关操作 | 已注册认证的系统管理员用户 |
客户信息管理 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2) 登录后,可查看所有的客户信息,并进行增删改查等相关操作 | 已注册认证的系统管理员用户 |
商家信息管理 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2) 登录后,可查看所有的商家信息,并进行增删改查等相关操作 | 已注册认证的系统管理员用户 |
任务信息管理 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2) 登录后,可查看所有的任务信息,并进行增删改查等相关操作 | 已注册认证的系统管理员用户 |
商品信息管理 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2) 登录后,可查看所有的商品信息,并进行增删改查等相关操作 | 已注册认证的系统管理员用户 |
订单信息管理 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2) 登录后,可查看所有的订单信息,并进行增删改查等相关操作 | 已注册认证的系统管理员用户 |
系统管理:该模块主要涉及一些系统数据的管理功能,包括用户信息管理、操作日志等。系统管理的功能点清单如表4-2-5所示:
功能点名称 | 功能点内容描述(业务步骤/业务规则) | 前置条件 |
---|---|---|
用户信息管理 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2) 登录后,可查看所有系统用户信息,对用户进行禁用/启用操作,或者删除用户。 | 已注册认证的系统管理员用户 |
操作日志 | 1) 未登录用户先通过输入登录帐号或者登录密码进行登录。登录后可进行操作。2)在用户登录后可查看系统所有操作日志,可以执行删除操作 | 已注册认证的系统管理员用户 |
4.2.3 系统数据视图
系统逻辑数据模型如图4-2-2所示。
4.2.4 系统组件视图
系统逻辑分层
从逻辑上,系统总体被分为三层,分别为页面展示层、请求处理层以及数据存储层。
逻辑层说明表
逻辑层次 | 职责描述 | 技术实现 | 逻辑层次依赖 | 层间通信 |
---|---|---|---|---|
页面展示层 | 接受用户输入,呈现数据 | 使用Javascript技术实现动态图表;使用Bootstrap技术,并结合JS实现动态更新 | 依赖请求处理层 | 采用消息在展现层与处理层通信 |
请求处理层 | 实现业务逻辑 | 使用SpringMVC、MyBatis框架 | 依赖数据存储层 | 采用消息在处理层与数据层通信 |
数据存储层 | 根据用户输入数据实现数据库服务的增删改查 | 使用SQL 等技术 | 依赖请求处理层 | 采用消息在数据层与处理层通信 |
接下来对每层进行详细说明。
页面展示层
页面展示层主要功能是为用户提供与农场信息管理系统进行交互的接口,向下为数据管理服务、文件操作服务提供可调用接口并通过实现集中展现平台,为用户提供便捷、高效的管理系统界面,提高整个系统交互效率。同时通过对四个功能模块的功能集中提取,封装了数据列表组件、数据展示组件、图表显示组件和数据交换组件四个公共组件从而提高了代码的复用率。由于本系统采用B/S架构,本层主要采用HTML、JavaScript、CSS以及Ajax等客户端技术。
请求处理层
请求处理层主要功能是页面展示层与数据存储层的中间件,它向下从数据存储层请求存储数据,向上反馈页面展示层的请求。因此请求处理层起到了连接上下层的作用,在请求处理层还可以对来自页面层或来自数据存储层的数据进行规范化处理或整理,再向上或向下提交数据。本层主要采用了Spring MVC MyBatis等架构实现了请求模块化设计,增加系统的开发效率。
数据存储层
本系统采用了MySQL 5.7数据库系统用于存储本系统产生的所有数据,并对数据进行统一管理。此外,本系统还拥有文件操作功能。系统将把文件放在文件专用服务器上,并通过配置只允许指定的业务服务器对文件服务器进行连接,从而保证文件安全性。
4.3 系统详细设计
4.3.1 数据库设计
数据库设计依据
管理系统项目对IT基础设施、业务系统业务数据的要求主要包括三个方面:一致性、规范性、安全性。
-
一致性 :各模块的数据之间都存在关联,必需保持业务数据的连贯性及一致性。所以不同业务之间的数据必须进行集成,保证各种业务数据的一致性,保证数出一门
-
规范性 :要求各业务系统的业务数据在规范上必须保持一致,而要保证数据的规范一致,必须对制定数据规范标准,对部分的数据进行集中的规范管理
-
安全性 :系统数据大部分涉及到公司内部核心业务,不仅要保证数据的机密性,还要保证不给各业务系统带来额外的负担,保证业务系统运行正常
数据库选型及特点
本系统采用MySQL 5.7 数据库,由于本系统原形为农场内部的信息管理系统,数据总量和并发量不是很大,而MySQL数据库体积小、速度快、总体拥有成本低,尤其是开放源代码的特点,在保证系统功能顺利运行的前提下,使系统成本降到最低。
物理数据模型
数据库设计一览表
表名 | 功能说明 |
---|---|
Field | 菜地信息表 |
Crops | 农作物信息表 |
Plant | 种植信息表 |
consumerinfo | 客户信息表 |
Sellerinfo | 商家信息表 |
assignment | 任务信息表 |
Items | 商品信息表 |
Ordertable | 订单信息表 |
Usertable | 用户信息表 |
Log | 操作日志信息表 |
表说明:该表描述了本系统所有模块,即农场管理模块、系统管理模块涉及的数据库表名的中文说明。
功能模块-数据库对应表
数据库表 | 内容 |
---|---|
field | 菜地信息记录 |
crops | 农作物信息记录 |
plant | 种植信息记录 |
consumerinfo | 客户信息记录 |
sellerinfo | 商家信息记录 |
assignment | 任务信息记录 |
items | 商品信息记录 |
ordertable | 订单信息记录 |
usertable | 用户信息记录 |
log | 操作日志信息记录 |
表说明:该表描述了本系统所有模块,即商城、农场管理、系统管理、消息推送模块各自对应的数据库表及具体的功能信息。
接下来对数据库的每一张表格的表项,类型以及表项备注进行表格格式说明,如表4-3-3到表4-3-18所示。
菜地信息表
Key | Value_类型 | 备注 |
---|---|---|
id | int | 菜地ID(自动生成)、主键、自增 |
area | float | 菜地面积 |
username | varchar | 用户名 |
start_time | datetime | 起始时间,默认CURRENT_TIMESTAMP |
time | int | 种植时长,默认12个月 |
status | tinyint | 状态,默认为1(正常) |
total | float | 菜地总收益,由种植信息计算得到 |
农作物信息表
Key | Value_类型 | 备注 |
---|---|---|
id | int | 农作物ID(自动生成)、主键、自增 |
cropsName | varchar | 作物名称 |
area | float | 每棵所需面积 |
profit | float | 每棵的净收益 |
cropsTime | int | 种植时间(月) |
种植信息表
Key | Value_类型 | 备注 |
---|---|---|
id | int | 种植信息记录号(自动生成)、主键、自增 |
fid | int | 菜地ID(菜地表获取,下拉列表选择) |
cname | varchar | 农作物名(农作物表获取,下拉列表选择) |
cprofit | float | 农作物单株利润(农作物表获取,随选择的农作物自动更新填入表格) |
quantity | int | 种植数量 |
total | float | 合计利润(由单株利润*种植数量计算得到) |
status | tinyint | 状态,默认为1(正常) |
客户信息表
Key | Value_类型 | 备注 |
---|---|---|
id | int | 客户ID(自动生成)、主键、自增 |
con_phone | varchar | 手机号 |
con_name | varchar | 客户名 |
status | tinyint | 状态,默认为1(正常) |
商家信息表
Key | Value_类型 | 备注 |
---|---|---|
id | int | 商家ID(自动生成)、主键、自增 |
seller_phone | varchar | 电话 |
seller_name | varchar | 商家名 |
seller_company_name | varchar | 公司名 |
seller_add | varchar | 地址 |
seller_state | tinyint | 状态,默认为1(正常) |
seller_alipaynum | varchar | 支付宝 |
任务信息表
Key | Value_类型 | 备注 |
---|---|---|
id | int | 任务ID(自动生成)、主键、自增 |
assi_state | tinyint | 任务状态,默认为1(正常) |
assi_type | varchar | 任务类型,通过下拉列表选择 |
assi_data | varchar | 任务数据 |
assi_nickname | varchar | 用户名(客户信息表获取,下拉列表选择) |
assi_createtime | datetime | 创建时间,默认为CURRENT_TIMESTAMP |
商品信息表
Key | Value_类型 | 备注 |
---|---|---|
id | varchar | 商品ID(自动生成)、主键、自增 |
name | varchar | 商品名称 |
quantity | int | 商品数量 |
productivity | int | 预计产量 |
status | tinyiny | 商品状态,默认为1(正常) |
订单信息表
Key | Value_类型 | 备注 |
---|---|---|
id | int | 订单ID(自动生成)、主键、自增 |
user_name | varchar | 客户名(客户表获取,下拉列表选择) |
item_name | varchar | 商品名(商品表获取,下拉列表选择) |
quantity | int | 数量 |
total | float | 合计(由商品单价*数量计算得出) |
create_time | datetime | 创建时间,默认为CURRENT_TIMESTAMP |
status | tinyint | 订单状态,默认为0(未支付) |
用户信息表
Key | Value_类型 | 备注 |
---|---|---|
id | int | 用户ID(自动生成)、主键、自增 |
user_name | varchar | 用户名 |
user_pass | varchar | 用户密码 |
user_email | varchar | 用户邮箱 |
register_time | datetime | 注册时间,默认为CURRENT_TIMESTAMP,用户注册时自动记录 |
status | tinyint | 账户状态,默认为1(正常),可以将其置为0(禁用) |
4.3.2 系统组件设计
接下来将分模块对整个系统的请求处理层组件设计进行说明,组件划分可参见概要设计的组件清单列表。
各组件类关系图
4.3.3 系统功能模块设计
接下来将分各模块对整个系统的界面设计和界面功能进行说明,具体功能模块划分可参见概要设计的功能框图以及组件清单列表。
系统首页界面
系统注册界面
系统登录界面
注册UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
用户名 | String | user_name | 是 | 无 |
邮箱 | String | user_email | 是 | 无 |
密码 | String | user_pass | 是 | 无 |
确认密码 | String | 无 | 是 | 与密码一致 |
验证码 | String | 无 | 是 | 无 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
注册 | 提交表单信息,发送请求注册 |
登录 | 跳转至登录页面 |
换一个 | 更换一个随机验证码 |
登录UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
用户名 | String | user_name | 是 | 无 |
密码 | String | user_pass | 是 | 无 |
验证码 | String | 无 | 是 | 无 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
注册 | 跳转至注册页面 |
登录 | 提交表单信息,发送请求登录 |
换一个 | 更换一个随机验证码 |
管理系统主页面界面
菜地信息管理界面
菜地信息UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
ID | Integer | id | 是 | 主键、自增 |
面积/平方米 | Float | area | 是 | 无 |
客户名 | String | username | 是 | 与客户表一致 |
起始时间 | Date | start_time | 是 | 系统自动生成 |
时长 | Integer | time | 是 | 默认12 |
状态 | boolean | status | 否 | 默认为1 |
收益 | Float | total | 否 | 默认0,由种植信息计算得出 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
添加 | 添加一项菜地信息 |
删除 | 删除一个或多个菜地信息 |
推荐 | 显示菜地的推荐种植方案模态框 |
编辑 | 显示菜地信息并提供更新功能 |
农作物信息管理界面
农作物信息UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
ID | Integer | id | 是 | 主键、自增 |
作物名 | String | cropsName | 是 | 无 |
面积 | Float | area | 是 | 无 |
利润 | Float | profit | 是 | 无 |
时长 | Integer | cropsTime | 是 | 无 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
添加 | 添加一项农作物信息 |
删除 | 删除一个或多个农作物信息 |
编辑 | 显示农作物信息并提供更新功能 |
种植信息管理界面
种植信息UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
记录号 | Integer | id | 是 | 主键、自增 |
菜地ID | Integer | fid | 是 | 与菜地表一致 |
种植作物名 | String | cname | 是 | 与农作物表一致 |
单株利润 | Float | cprofit | 否 | 与农作物表一致 |
种植数量 | Integer | quantity | 是 | 无 |
合计 | Float | total | 否 | 由单株利润*种植数量计算出 |
时长 | Integer | time | 否 | 与农作物表一致 |
状态 | boolean | status | 否 | 默认为1 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
添加 | 添加一项种植信息 |
删除 | 删除一个或多个种植信息 |
编辑 | 显示种植信息并提供更新功能 |
客户信息管理界面
客户信息UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
ID | Integer | id | 是 | 主键、自增 |
客户名 | String | con_name | 是 | 无 |
手机号 | String | con_phone | 是 | 无 |
状态 | boolean | con_state | 否 | 默认为1 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
添加 | 添加一项客户信息 |
删除 | 删除一个或多个客户信息 |
编辑 | 显示客户信息并提供更新功能 |
商家信息管理界面
商家信息UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
ID | Integer | id | 是 | 主键、自增 |
Name | String | seller_name | 是 | 无 |
电话 | String | seller_phone | 是 | 无 |
公司名 | String | seller_company_name | 是 | 无 |
地址 | String | seller_add | 是 | 无 |
支付宝 | String | seller_alipaynum | 是 | 无 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
添加 | 添加一项商家信息 |
删除 | 删除一个或多个商家信息 |
编辑 | 显示商家信息并提供更新功能 |
任务信息管理界面
任务信息UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
ID | Integer | id | 是 | 主键、自增 |
任务状态 | boolean | assi_state | 否 | 默认为1 |
任务类型 | String | assi_type | 是 | 下拉列表选择 |
任务数据 | String | assi_data | 是 | 无 |
用户名 | String | assi_nickname | 是 | 无 |
创建时间 | Date | assi_createtime | 是 | 系统自动生成 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
添加 | 添加一项任务信息 |
删除 | 删除一个或多个任务信息 |
编辑 | 显示任务信息并提供更新功能 |
订单信息管理界面
订单信息UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
ID | Integer | id | 是 | 主键、自增 |
客户名 | String | user_name | 是 | 与客户表一致 |
商品名 | String | item_name | 是 | 与商品表一致 |
数量 | Integer | quantity | 是 | 无 |
支付金额 | Float | total | 否 | 由数量*单价计算出 |
创建时间 | Date | create_time | 否 | 系统自动生成 |
状态 | boolean | status | 否 | 默认为0 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
添加 | 添加一项订单信息 |
删除 | 删除一个或多个订单信息 |
编辑 | 显示订单信息并提供更新功能 |
用户信息管理界面
用户信息UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
ID | Integer | id | 是 | 主键、自增 |
用户名 | String | user_name | 是 | 无 |
密码 | String | user_pass | 是 | 无 |
邮箱 | String | user_email | 是 | 无 |
注册时间 | Date | register_time | 否 | 系统自动生成 |
状态 | boolean | status | 否 | 默认为1 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
删除 | 删除一个或多个用户信息 |
禁/启用 | 修改用户账号状态,被禁用的用户将无法正常登录 |
操作日志信息管理界面
操作日志信息UI清单
UI项目名称 | 表示类型 | 所对应的DB项目 | 必填项 | 数据校验约束规则 |
---|---|---|---|---|
ID | Integer | id | 是 | 主键、自增 |
类名 | String | classname | 是 | 由系统记录写入 |
方法 | String | method | 是 | 由系统记录写入 |
状态码 | Integer | status_code | 是 | 0为正常,-1为异常 |
异常信息 | String | error_msg | 是 | 由系统记录写入 |
时间 | Date | timestamp | 是 | 系统自动生成 |
UI组件清单
UI项目名称 | 业务功能说明 |
---|---|
删除 | 删除一个或多个操作日志信息 |
4.4 系统核心功能实现
由于整个系统中,有大量的业务逻辑重叠,且每个业务逻辑又相互独立。整个系统以数据为核心在底层数据库和顶层前端页面之间相互流转。因此整个系统的实现逻辑较为简单。由于每个页面的功能点较多,这里选取了部分页面功能点为例,讲解系统核心功能实现,描述整个系统的运行机制和数据的流转。
4.4.1 CRUD(增删改查)
从系统整体设计的介绍可以看出,在整个系统每一个模块中都有数据库增删改查的功能。以其中部分页面为例:
查询
页面加载完成以后,发送ajax请求,请求得到数据
对应的Controller接收并调用相应方法处理请求
![](/upload/image/78/68a346ef3b757763b82c
参考文献
- 基于SSH框架的农业服务系统的设计与实现(西安电子科技大学·孟娇)
- 特色农产品电子交易平台设计实现(南昌大学·宋光正)
- 基于J2EE的农产品网上交易系统的设计与实现(电子科技大学·武晋军)
- 基于JSP和Hadoop的农业电子商务系统设计与实现(山西农业大学·石瑞金)
- 基于SSH框架的农业服务系统的设计与实现(西安电子科技大学·孟娇)
- 基于Web的河南省粮食作物信息管理系统的设计与实现(河南农业大学·钱诚)
- 基于Java的农产品电子商城设计与实现(武汉轻工大学·郑宇彤)
- 基于JSP的实验室项目管理系统的设计与实现(武汉理工大学·吕勇)
- 基于MVC模式的物流信息管理系统设计与开发(电子科技大学·程泳)
- 基于区块链的农业土地流转管理系统的设计与实现(华东师范大学·樊芷含)
- 基于MVC模式的物流信息管理系统设计与开发(电子科技大学·程泳)
- 基于Java的农产品电子商城设计与实现(武汉轻工大学·郑宇彤)
- 民和县农业园区信息管理系统的设计与实现(北京工业大学·张源俊)
- 基于区块链的农业土地流转管理系统的设计与实现(华东师范大学·樊芷含)
- 学生管理系统的设计与实现(电子科技大学·贾林蓉)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设货栈 ,原文地址:https://m.bishedaima.com/yuanma/35384.html