毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)

目  录

论文总页数:25页

1 引言... 1

1.1 项目背景... 1

1.2 本项目的应用价值... 1

1.3 本项目的相关开发技术... 1

2 SVG技术... 1

2.1 XML介绍... 1

2.2 SVG介绍... 2

2.3 SVG的特点... 2

2.4 SVG规范... 2

3 雨量分析系统的需求分析... 4

3.1 系统需求... 4

3.2 功能分析... 4

3.3 用例分析... 5

4 雨量分析系统的设计... 6

4.1 系统模块结构... 6

4.2 数据库的设计... 7

4.2.1 总体设计... 7

4.2.2 数据库表字段说明... 8

4.3 开发技术及过程... 10

4.3.1 三层架构... 10

4.3.2 SVG文档的表示... 14

5 系统实现... 15

5.1 雨量数据管理的实现... 15

5.2 雨量数据分析与SVG图像的生成... 16

5.3 使用Web Service方式提供开放的外部接口... 20

5.3.1 Web Service介绍... 20

5.3.2 使用Web Service的意义... 20

5.3.3 Web Service接口的实现... 21

6 系统测试... 21

结    论... 22

参考文献... 22

致    谢... 24

声    明... 25

1 引言

1.1 项目背景

雨量监测对于工农业生产以及人民生活中的灾害预防、有效利用水资源具有重要意义,建立完整高效的雨量监测系统显得非常有必要。雨量分析系统是应用于防汛、水文等部门的,用于辅助分析自动气象站雨量监测的数据。雨量分析系统通常都会生成一些图表,但由于这些图表是二进制格式的,其可重用性不高,而且这些系统通常都缺乏开放性,大量的数据无法提供给外部研究人员使用,造成资源浪费。

该自动站雨量分析系统在雨量分析领域中作了新的尝试,它采用了基于XML(eXtensible Markup Language,可扩展标记语言)的开放的SVG(Scalable Vector Graphics,可伸缩矢量图形)作为图形格式,在引入先进技术的同时,提高了系统的可重用性,而且该系统与Web服务的结合也使系统的开放性大大地提高。作为示例,该系统要实现对四川省部分市县的城市及雨量数据进行管理与分析,能查询各市县的历史雨量数据并以SVG格式的曲线图显示出来,实现简单地统计分析功能。作为一个完整的系统,还要实现对系统内各个模块以及用户权限的管理。

1.2 本项目的应用价值

本套系统是基于SVG的雨量分析系统,实现的主要功能是对各地收集的雨量数据加以分析,并以SVG矢量图形方式进行显示,使用户能够更加直观地了解某一区域的历史雨量。雨量分析系统主要应用于防汛、水文等部门,通过对各地雨量数据的统计与分析,来预防可能会造成的洪水灾害并有效的调配和利用水资源。

1.3 本项目的相关开发技术

该项目采用.NET开发,开发环境采用Visual Studio 2003,数据库采用MSSQLServer,并使用.NET的三层架构技术,使业务逻辑与数据表示隔离开来,提高系统的模块化程序;在图像显示上使用了基于XML的矢量图形语言SVG,并使用.NET XML DOM(Document Object Model,文档对象模型)来生成和操作SVG图形;并使用Web服务来提供外部接口,以提高系统的开放性。

2 SVG技术

2.1 XML介绍

XML是可扩展标记语言的简称,它定义了结构化表示数据的标准格式。XML是W3C(World Wide Web Consortium,万维网联盟)为适应互联网的发展而推出的新型Web语言,是国际标准化组织所制订的SGML(Standard Generalized Markup Language,标准通用标记语言)的子集。它是用于定义其他标识语言的一种元语言。它具有可扩展性、平台独立性、数据与表现分离以及结构化数据等特点,非常适合网络环境下的数据传输和表达。XML通过其可扩展性提供了一种通用的数据格式,不同的软件系统之间可以通过这种新的数据描述方式进行通信,从而实现完全的交互操作,这源于XML将结构化的数据表示为一个纯文本的特性。可以通过XML对信息加以规范化定义和描述,并且在互联网上进行数据的传输。SVG就是XML在图形图像领域的一个应用。

2.2 SVG介绍

SVG是一种基于XML的开放的标准文本式矢量图形描述语言,即它是用XML元语言定义的语言。SVG图像是与XML1.0兼容的文档,SVG元素是指示如何绘制图像的一些指令,阅读器解释这些指令,把SVG图像在指定设备上显示出来。使用SVG可以在网页上显示出各种各样的高质量的矢量图形,包括许多图像处理中常见的功能,如图形、文字、动画、颜色、滤镜效果等。最关键的是SVG完全用普通文本来描述,也就是说,这是一种专门为网络而设计的基于文本的图像格式。由于SVG是基于XML的,所以可扩展性很强,能够描述任何复杂的图像,甚至动态交互式图像。

2.3 SVG的特点

虽然SVG的“矢量描述”并不是一个全新的概念,但它综合了矢量图形、点阵图像和纯文字的优点,以一种标准将其统一起来描述。它由计算机根据矢量数据计算后绘制而成,相较于位图图像矢量图像有以下特点:(1)文件的大小与图形的复杂程度有关,而与图形的具体尺寸无关;(2)图形的显示尺寸可以无限缩放,变化后不影响图形的质量。正是由于矢量图像的这些特征,使得它尤其适合于网上传播。图片和交互在以前是两个独立的概念,而在SVG中,文字与图形并非封装于SVG内,而是可以借助DOM和脚本语言等手段与外界交互,使得在图片内进行交互成为可能,这是以往的图像所不能做到的。统一的标准和开放性是SVG的强大生命力所在。标准统一可增强网络的交流,结束目前业界各种格式并存的混乱局面;开放性则有利于日后的各种新的元素加入其中扩充其功能。SVG使用时,客户端的软件负责解释SVG文本并将其转化成实际的矢量图像,文字仍是文字,线条仍是线条,可在客户端即时修改,这也是SVG的一大特色。

2.4 SVG规范

SVG规范定义了6种类型的对象,包括矢量图形、图像、渐变填充、滤镜、可重用单元和文本。图形对象可以进行组合、添加样式、几何变换等操作。根据功能不同,这些主要对象可归结为基本要素对象和页面描述功能对象两大类,具体请见图1和图2所示。

毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第1张图片

图1 SVG基本要素

毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第2张图片

图2 SVG页面描述功能

框架元素,就是组成一个完整SVG文档的基本元素,主要包括元素和元素等等。<svg>元素是文档元素,必不可少的,它相当于指定一块画布,内部的所有图形元素都将显示在这块画布指定的区域中。因此它有一些标记位置的属性像x,y,width,height。<desc>和<title>元素是用来描述图像的注释性元素。还有一些表示基本图形的标记,如rect,circle等等,SVG图形就是通过组合这些基本的元素和组件,来生成复杂的图形的。</p> <h2 style="margin-left:0;text-align:left;">3 雨量分析系统的需求分析</h2> <h3 style="margin-left:0;text-align:justify;">3.1 系统需求</h3> <p style="margin-left:.0001pt;text-align:justify;">需求分析是一种软件工程活动,它在系统需求工程和软件设计间起到桥梁的作用,主要任务是将用户的需求变为软件的功能和性能描述。基于SVG的自动站雨量分析系统要实现对四川省部分市县及其雨量数据进行管理与分析,能够以各种时间方式查询各市县的历史雨量数据并以SVG格式的曲线图显示出来,要求实现简单地统计分析功能,例如统计同一时间段内两个不同地区的雨量数据,对其进行分析,并生成SVG图形以辅助工作人员判断某一时间数据点过高的城市是否有发生灾害的可能性。作为一个完整的系统,还要能够管理系统内各个模块及设置不同用户的权限。由于会涉及到大量数据,因此要有对数据库的管理,实现数据备份功能,以保障数据的安全性。</p> <p style="margin-left:.0001pt;text-align:justify;">系统功能模块主要包括以下几个方面:</p> <p style="margin-left:.0001pt;text-align:justify;">1、系统管理;</p> <p style="margin-left:.0001pt;text-align:justify;">2、雨量数据管理;</p> <p style="margin-left:.0001pt;text-align:justify;">3、城市信息管理;</p> <p style="margin-left:.0001pt;text-align:justify;">4、前台管理;</p> <p style="margin-left:.0001pt;text-align:justify;">5、数据备份。</p> <h3 style="margin-left:0;text-align:justify;">3.2 功能分析</h3> <p style="margin-left:.0001pt;text-align:justify;">以下按照不同的模块进行功能描述:</p> <p style="margin-left:.0001pt;text-align:justify;">1、系统管理实现以下四个功能:</p> <p style="margin-left:.0001pt;text-align:justify;">(1)模块管理:管理系统中所有模块,对模块进行添加、更新及删除;</p> <p style="margin-left:.0001pt;text-align:justify;">(2)用户管理:添加系统用户,选择对应的角色,对系统中已有用户进行更新(包括登陆密码及角色)、删除;</p> <p style="margin-left:.0001pt;text-align:justify;">(3)角色管理:新增、更新、删除系统角色,分配角色权限;</p> <p style="margin-left:.0001pt;text-align:justify;">(4)日志管理:能根据选择条件对已有日志进行查询、删除和下载。</p> <p style="margin-left:.0001pt;text-align:justify;">2、雨量数据管理页面管理后台的所有雨量数据,有如下功能:</p> <p style="margin-left:.0001pt;text-align:justify;">(1)数据查看:可根据选择条件(包括日期和城市选择)显示雨量数据,也可根据选择的显示方式,以SVG图形方式查看雨量数据;</p> <p style="margin-left:.0001pt;text-align:justify;">(2)数据录入:选择某一城市后,可以选择任意一天进行雨量数据输入;</p> <p style="margin-left:.0001pt;text-align:justify;">(3)数据更新:在选定城市某一天的雨量数据后,点击更新可以修改雨量数据。</p> <p style="margin-left:.0001pt;text-align:justify;">3、城市信息管理页面管理地图页面中出现的所有城市的雨量数据,通过输入城市名及选择上级城市新增城市数据,也可以对已有城市数据进行更新(修改名称或上级城市)、删除操作。</p> <p style="margin-left:.0001pt;text-align:justify;">4、前台管理页面放置了将前台查询页面,这一模块是整个系统的重点部分,包括地图管理、选择显示方式、选择查询方式并生成图形显示页面。区别于其它系统,本套系统对于数据图形使用了SVG这种文本式矢量图形描述语言。</p> <p style="margin-left:.0001pt;text-align:justify;">用户查询数据,并生成SVG曲线图的操作流程如图3所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/bc3fbc8b58a74353970b09a126eafe81.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第3张图片" height="364" src="http://img.e-com-net.com/image/info8/bc3fbc8b58a74353970b09a126eafe81.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图3 SVG页面描述功能</p> <p style="margin-left:.0001pt;text-align:justify;">5、系统的数据备份操作能够实现将数据库文件备份到本机上的指定目录下,需要时再进行数据恢复,以保证数据的安全性。备份管理有如下功能:</p> <p style="margin-left:.0001pt;text-align:justify;">(1)数据备份:利用SQLServer的备份操作backup database进行数据备份;</p> <p style="margin-left:.0001pt;text-align:justify;">(2)数据恢复:利用SQLServer的恢复操作restore database进行数据恢复。</p> <h3 style="margin-left:0;text-align:justify;">3.3 用例分析</h3> <p style="margin-left:.0001pt;text-align:justify;">系统全局管理员用例图如图4所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/124a9e7f08c44ab0933680708290893d.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第4张图片" height="364" src="http://img.e-com-net.com/image/info8/124a9e7f08c44ab0933680708290893d.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图4 系统全局管理员用例图</p> <h2 style="margin-left:0;text-align:left;">4 雨量分析系统的设计</h2> <h3 style="margin-left:0;text-align:justify;">4.1 系统模块结构</h3> <p style="margin-left:.0001pt;text-align:justify;">系统主要分为系统管理、雨量数据管理、城市信息管理、前台管理等几大模块,其结构关系如图5所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/e4d4110fbce64f5fb882242b248371ac.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第5张图片" height="364" src="http://img.e-com-net.com/image/info8/e4d4110fbce64f5fb882242b248371ac.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图5 系统模块结构</p> <h3 style="margin-left:0;text-align:justify;">4.2 数据库的设计</h3> <h4 style="margin-left:0;text-align:justify;">4.2.1 总体设计</h4> <p style="margin-left:.0001pt;text-align:justify;">数据库的E-R模型图如图6所示。图6中,用户在具有某些角色之后,才有权限使用系统功能,而不能直接使用,因此设计中将角色与系统功能关联起来,并将用户与系统功能隔离开来;日志的生成是在用户使用系统功能的过程中自动生成的,其中需要保存当前用户的ID和对应的系统功能的ID。</p> <p style="margin-left:.0001pt;text-align:center;"></p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/c7d1721c4ab24d53a0a3a5629d604a76.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第6张图片" height="364" src="http://img.e-com-net.com/image/info8/c7d1721c4ab24d53a0a3a5629d604a76.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图6 数据库E-R图</p> <h4 style="margin-left:0;text-align:justify;">4.2.2 数据库表字段说明</h4> <p style="margin-left:.0001pt;text-align:justify;">1、城市数据表(City)存储的是地图上所有城市的相关信息,具体见表1所示。</p> <p style="margin-left:.0001pt;text-align:center;">表1 城市数据表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">CityId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">城市号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">CityName</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">100</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">城市名称</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FatherCityId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">上级城市号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OrderId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">bigint</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">排序号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">CityDes</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">500</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">城市描述</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">2、每小时降雨量表(RainPerHour)存储的是城市中具体一天24小时的雨量数据,Hour01表示0~1时的雨量数据,依此类推,中间省略部分行,具体见表2所示。</p> <p style="margin-left:.0001pt;text-align:center;">表2 雨量数据表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RecordID</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">记录号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">CityID</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">城市号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Year</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">年</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Month</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">月</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Day</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">日</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">6</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour01</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">0~1小时</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">7</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour12</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">1~2小时</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour23</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">2~3小时</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">9</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">……</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;"></p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour2223</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">22~23小时</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">11</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour2324</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">23~24小时</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">3、模块表(Func)存储的是系统中所有模块的信息,具体见表3所示。</p> <p style="margin-left:.0001pt;text-align:center;">表3 模块信息表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FuncId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">110</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">模块号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FuncName</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">50</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">模块名称</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FatherFunc</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">上级模块号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PagePath</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">100</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">页面路径</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OrderId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">bigint</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">排序号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">6</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Des</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">200</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">描述</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">7</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">SystemId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;"></p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">4、日志表(Log)中存储管理员对某一模块进行添加、修改等操作的记录,无论成功与否,系统都会自动记录相应的信息,具体见表4所示。</p> <p style="margin-left:.0001pt;text-align:center;">表4 日志信息表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">LogId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">日志号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptTime</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">datetime</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作时间</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptDes</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">100</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作描述</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptResult</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作结构</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptType</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作类型</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">6</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">用户号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">7</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FuncId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">110</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">模块号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptIP</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作者IP</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">5、用户表(User)中存储用户登陆系统的ID号、名称和密码等信息,具体见表5所示。</p> <p style="margin-left:.0001pt;text-align:center;">表5 用户表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">用户号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserName</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">datetime</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">50</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">用户名</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserPwd</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">50</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">密码</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">6、用户角色关系表(UserRoleRel)存储用户在系统中属于哪一角色的信息,具体见表6所示。</p> <p style="margin-left:.0001pt;text-align:center;">表6 用户角色关系表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">用户号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RoleId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">角色号</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">7、角色表(Role)存储每一个角色的角色名及对它权限的描述,具体见表7所示。</p> <p style="margin-left:.0001pt;text-align:center;">表7 角色表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RoleId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">角色号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RoleName</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">50</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">角色名</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Des</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">200</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">权限描述</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">8、角色权限关系表(RoleFuncRel)存储角色对于某一模块是否具有读取、增加、更新、删除等操作的权限,具体见表8所示。</p> <p style="margin-left:.0001pt;text-align:center;">表8 角色权限关系表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FuncId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">110</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">模块号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RoleId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">角色号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PRead</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">读取</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PAdd</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">增加</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PUpdate</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">更新</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">6</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PDelete</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">删除</p> </td> </tr> </tbody> </table> <h3 style="margin-left:0;text-align:justify;">4.3 开发技术及过程</h3> <h4 style="margin-left:0;text-align:justify;">4.3.1 三层架构</h4> <p style="margin-left:.0001pt;text-align:justify;">三层架构也称三层体系结构,即表现层、业务逻辑层和数据访问层。表现层主要指用户界面,它要求尽可能的简单,使最终用户不需要进行任何培训就能方便地访问信息;第二层就是业务逻辑层,也就是常说的中间件,所有的应用系统、应用逻辑、控制都在这一层,系统的复杂性也主要体现在业务逻辑层;最后的数据访问层存储大量的数据信息和数据逻辑,所有与数据有关的安全、完整性控制、数据的一致性、并发操作等都是在第三层完成。三层架构的层次关系见图7所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/4ee3617c440145748facfa014a037c62.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第7张图片" height="364" src="http://img.e-com-net.com/image/info8/4ee3617c440145748facfa014a037c62.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图7 三层架构示意图</p> <p style="margin-left:.0001pt;text-align:justify;">这些层相互之间独立性好,可以单独开发,单独测试。三层架构另一个优点是它的安全性,客户端只能通过上一层来访问下一层的服务,减少了入口点,把很多危险的系统功能都屏蔽了。</p> <p style="margin-left:.0001pt;text-align:justify;">表现层位于最上层,离用户最近,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。通过表现层,用户输入数据、获取数据。表现层同时也提供一定的安全性,确保用户没有机会看到机密的信息。中间的业务逻辑层是表现层和数据访问层的桥梁,它响应表现层的用户请求,负责处理用户输入的信息,或者是将这些信息发送给数据访问层进行保存,或者是调用数据访问层中的函数再次读出这些数据。业务逻辑层也可以包括一些对“商业逻辑”描述的代码在里面。数据访问层定义和维护数据的完整性、安全性,它响应业务逻辑层的请求来访问数据,仅实现对数据的保存和读取操作。访问的数据可以是数据库系统、二进制文件、文本文档或是XML文档等等。</p> <p style="margin-left:.0001pt;text-align:justify;">本项目中.NET三层架构中各个包之间的关系结构如图8所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/c726d98153ec482483beb17f92b8ce1d.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第8张图片" height="364" src="http://img.e-com-net.com/image/info8/c726d98153ec482483beb17f92b8ce1d.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图8 三层架构名称空间关系图</p> <p style="margin-left:.0001pt;text-align:justify;">其中,Model命名空间中的类对应于数据库中的表,为整个架构提供方便的数据表示形式;IDAL和SQLServerDAL对应于数据访问层,IDAL命名空间中定义了一整套用于操作数据库的接口,具体的数据访问操作在SQLServerDAL命名空间中实现;DALFactory命名空间中定义了获取数据访问操作的方法,在BLL命名空间中,就使用这些方法来获取符合IDAL中定义的接口的对象,再用它来对数据库进行操作,显然它们属于业务逻辑层;而表现层对应于前台页面代码,包括获取用户响应和请求,再通过BLL来获取数据并返回给用户。</p> <p style="margin-left:.0001pt;text-align:justify;">下面给出具体例子说明数据和指令是如何在各层之间流动和传递的。</p> <p style="margin-left:.0001pt;text-align:justify;">首先,表现层中的某一对象调用业务逻辑层BLL中的Add函数,来向数据库中添加数据:</p> <p style="margin-left:.0001pt;text-align:justify;">BLL.SVGRAS_City.Add(city);</p> <p style="margin-left:.0001pt;text-align:justify;">其中city是Model.City类型的参数,BLL.SVGRAS_City.Add为被调用方法的完整路径。</p> <p style="margin-left:.0001pt;text-align:justify;">此时,数据流向业务逻辑层,指令执行到业务层,如下:</p> <p style="margin-left:.0001pt;text-align:justify;">public static string Add(SVGRAS.Model.SVGRAS_City model)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       ISVGRAS_City dal=SVGRAS.DALFactory.SVGRAS_City.Create();</p> <p style="margin-left:.0001pt;text-align:justify;">       return dal.Add(model);</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">业务层接收到表现层传入的参数model,首先进行业务逻辑处理(比如数据完整性,合法性以及其他一些业务处理),然后调用工厂中相应的方法来创建相应的SQLServerDAL对象,以获得访问数据访问层的对象。</p> <p style="margin-left:.0001pt;text-align:justify;">工厂类中对应方法如下:</p> <p style="margin-left:.0001pt;text-align:justify;">public static SVGRAS.IDAL.ISVGRAS_City Create()</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       SQLServerDAL.SVGRAS_City obj=new SQLServerDAL.SVGRAS_City();</p> <p style="margin-left:.0001pt;text-align:justify;">       return obj;</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">此时,数据流向数据访问层,指令执行到数据访问层:</p> <p style="margin-left:.0001pt;text-align:justify;">public string Add(SVGRAS.Model.SVGRAS_City model)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       model.CityID=Common.GetNextIdByTable("SVGRAS_City","CityID","SingleLayer",null,10);</p> <p style="margin-left:.0001pt;text-align:justify;">       model.OrderID=model.CityID;</p> <p style="margin-left:.0001pt;text-align:justify;">       StringBuilder strSql=new StringBuilder();</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("insert into SVGRAS_City(CityID,FatherCityID,OrderID, CityName,CityDes) values (");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("'"+model.CityID+"',");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("'"+model.FatherCityID+"',");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append(""+model.OrderID+",");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("'"+model.CityName+"',");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("'"+model.CityDes+"')");</p> <p style="margin-left:.0001pt;text-align:justify;">       DbHelperSQL.ExecuteSql(strSql.ToString());</p> <p style="margin-left:.0001pt;text-align:justify;">       return model.CityID;</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">在数据访问层,通过调用存储过程的方式,将数据传递到数据库,并执行相应的操作。DbHelperSQL.ExecuteSql()表示封装好的方法,strSql.ToString()放置添加语句。此时,调用DbHelperSQL.ExecuteSql(),执行SQL语句。</p> <p style="margin-left:.0001pt;text-align:justify;">public static int ExecuteSql(string SQLString)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       using (SqlConnection connection = new SqlConnection(connectionString))</p> <p style="margin-left:.0001pt;text-align:justify;">       {</p> <p style="margin-left:.0001pt;text-align:justify;">              using (SqlCommand cmd = new SqlCommand(SQLString,connection))</p> <p style="margin-left:.0001pt;text-align:justify;">              {</p> <p style="margin-left:.0001pt;text-align:justify;">                     try</p> <p style="margin-left:.0001pt;text-align:justify;">                     {</p> <p style="margin-left:.0001pt;text-align:justify;">                            connection.Open();</p> <p style="margin-left:.0001pt;text-align:justify;">                            int rows=cmd.ExecuteNonQuery();</p> <p style="margin-left:.0001pt;text-align:justify;">                            return rows;</p> <p style="margin-left:.0001pt;text-align:justify;">                     }</p> <p style="margin-left:.0001pt;text-align:justify;">                     catch(System.Data.SqlClient.SqlException E)</p> <p style="margin-left:.0001pt;text-align:justify;">                     {</p> <p style="margin-left:.0001pt;text-align:justify;">                            connection.Close();</p> <p style="margin-left:.0001pt;text-align:justify;">                            throw new Exception(E.Message);</p> <p style="margin-left:.0001pt;text-align:justify;">                     }</p> <p style="margin-left:.0001pt;text-align:justify;">              }</p> <p style="margin-left:.0001pt;text-align:justify;">       }</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">到此,完成了一条城市数据的添加操作。</p> <h4 style="margin-left:0;text-align:justify;">4.3.2 SVG文档的表示</h4> <p style="margin-left:.0001pt;text-align:justify;">SVG文档的生成使用了.NET XML程序集,它提供了一整套封装了XML操作的类,可以很方便的创建和处理XML文档,它的整体结构符合文档对象模型的定义。将SVG文档用DOM表示,其结构见图9所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/dd58696a29944ba397579615370e51ae.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第9张图片" height="364" src="http://img.e-com-net.com/image/info8/dd58696a29944ba397579615370e51ae.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图9 SVG文档的DOM对象结构</p> <p style="margin-left:.0001pt;text-align:justify;">图9对应的XML文档部分代码如下:</p> <pre style="margin-left:.0001pt;"><?xml version="1.0" standalone="yes"?></pre> <pre style="margin-left:.0001pt;"><svg viewBox="0 0 500 600"></pre> <pre style="margin-left:.0001pt;">  <text x="10" y="20" stroke="red"></pre> <pre style="margin-left:.0001pt;">    成都信息工程学院</pre> <pre style="margin-left:.0001pt;">  </text></pre> <pre style="margin-left:.0001pt;"></svg></pre> <h2 style="margin-left:0;text-align:left;">5 系统实现</h2> <h3 style="margin-left:0;text-align:justify;">5.1 雨量数据管理的实现</h3> <p style="margin-left:.0001pt;text-align:justify;">在雨量数据管理页面中进行雨量数据录入时,必须先选中要添加雨量数据的城市及日期,点击“确定”后系统首先查看是否有该城市这一天的数据,有的话就直接显示,没有的话会创建一条新的雨量数据记录,自动生成随机数作为这一天24小时的雨量数据,并将数据写入数据库中。这里创建新雨量数据记录是基于三层架构来做的,首先创建Model.SVGRAS_RainPerHour对象,然后将数据保存到其成员变量中,再调用BLL.SVGRAS_RainPerHour.Add方法来将此对象包含的数据写入到数据库中。其相关代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">DataTable table1=null;</p> <p style="margin-left:.0001pt;text-align:justify;">if(this.RecordID!=null)//如果是修改的话,则返回的有RecordID则显示被修改的雨量数据</p> <p style="margin-left:.0001pt;text-align:justify;">       table1=BLL.SVGRAS_RainPerHour.GetList("RecordID="+this.RecordID).Tables[0]; //获取已有条件的雨量数据</p> <p style="margin-left:.0001pt;text-align:justify;">else if(this.RecordID==null || this.RecordID=="")</p> <p style="margin-left:.0001pt;text-align:justify;">       table1=BLL.SVGRAS_RainPerHour.GetList("CityID="+this.SelectedCity+" and Year="+this.Year+" and Month= "+this.Month+" and Day="+this.Day).Tables[0];</p> <p style="margin-left:.0001pt;text-align:justify;">if (table1.Rows.Count>0)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       this.dgData.DataSource=table1;</p> <p style="margin-left:.0001pt;text-align:justify;">       this.dgData.DataBind();</p> <p style="margin-left:.0001pt;text-align:justify;">       this.RecordID=table1.Rows[0]["RecordID"].ToString();</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">else if (table1.Rows.Count<1)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       //string temp="0";</p> <p style="margin-left:.0001pt;text-align:justify;">       Random rand = new Random();</p> <p style="margin-left:.0001pt;text-align:justify;">       SVGRAS.Model.SVGRAS_RainPerHour model=new SVGRAS.Model.SVGRAS_RainPerHour();</p> <p style="margin-left:.0001pt;text-align:justify;">       model.CityID=this.SelectedCity;</p> <p style="margin-left:.0001pt;text-align:justify;">       model.Year=this.Year;</p> <p style="margin-left:.0001pt;text-align:justify;">       model.Month=this.Month;</p> <p style="margin-left:.0001pt;text-align:justify;">       model.Day=this.Day;</p> <p style="margin-left:.0001pt;text-align:justify;">       model.hour01=rand.Next(0,200).ToString ();</p> <p style="margin-left:.0001pt;text-align:justify;">       model.hour12=rand.Next(0,200).ToString ();</p> <p style="margin-left:.0001pt;text-align:justify;">       //model.hournn=…;        </p> <p style="margin-left:.0001pt;text-align:justify;">       SVGRAS.BLL.SVGRAS_RainPerHour.Add(model);</p> <p style="margin-left:.0001pt;text-align:justify;">       DataTable table2=BLL.SVGRAS_RainPerHour.GetList( "CityID="+this.SelectedCity+" and Year="+this.Year+" and Month= "+this.Month+" and Day="+this.Day).Tables[0];</p> <p style="margin-left:.0001pt;text-align:justify;">       this.dgData.DataSource=table2;</p> <p style="margin-left:.0001pt;text-align:justify;">       this.dgData.DataBind();</p> <p style="margin-left:.0001pt;text-align:justify;">       this.RecordID=table2.Rows[0]["RecordID"].ToString();</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">页面效果如图10所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/4a1db9ea682345a09a72537f6379738b.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第10张图片" height="364" src="http://img.e-com-net.com/image/info8/4a1db9ea682345a09a72537f6379738b.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图10 雨量数据录入界面</p> <p style="margin-left:.0001pt;text-align:justify;">在实际应用中,这里生成的数据全部为0,而具体的数据需要通过数据更新功能来输入。这里采用自动生成数据方式,是为了方便系统的测试与演示。用户要填入新的雨量数据,需要点击更新按钮进入数据更新页面,在其中填入新数据后点击提交按钮完成更新。</p> <h3 style="margin-left:0;text-align:justify;">5.2 雨量数据分析与SVG图像的生成</h3> <p style="margin-left:.0001pt;text-align:justify;">1、获取用户设置的查询参数</p> <p style="margin-left:.0001pt;text-align:justify;">用户在查询页面中设置相应的查询参数,如查询方式、查询日期等等,并点击确定按钮(即选择某一城市)后,程序首先会验证用户的参数设置是否正确,若不正确,则弹出错误提示;若通过验证,再按照用户设置的查询参数传到后续程序中。</p> <p style="margin-left:.0001pt;text-align:justify;">这里的验证分为两部分,一部分是在浏览器端进行的,使用javascript代码,在向服务器发送数据前完成验证,这里的验证是测试用户输入的数据是否合法,如日期格式是否正确,参数是否设置完整等等,如果用户设置的是按多日查询,却只设置了起始日期,那么就不会通过验证。只有通过验证才会将参数数据发送到服务器端,这样可以在一定程度上减轻服务器端的压力。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/6f676e2f4979422796614c43a90c00cd.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第11张图片" height="364" src="http://img.e-com-net.com/image/info8/6f676e2f4979422796614c43a90c00cd.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图11 前台界面</p> <p style="margin-left:.0001pt;text-align:justify;">另一部分验证是在服务器端进行的,它主要验证用户是否拥有操作权限,以及数据库中是否存在数据。只有通过验证后,才能在数据库中查询相应的雨量数据。</p> <p style="margin-left:.0001pt;text-align:justify;">2、从数据库中查询数据</p> <p style="margin-left:.0001pt;text-align:justify;">按照用户设置的查询模式,转到相应模式的查询代码中。然后再根据查询参数,从数据库中获取相应的数据。如:用户设置的查询模式为按天查询,查询城市为成都,日期为2007-5-27,然后调用strWhere()方法来生成查询参数,再传入三层架构中的业务逻辑层中的getList()方法,就得到了查询的结果,代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">DataTable table1=BLL.SVGRAS_RainPerHour.GetList(strWhere("days")).Tables[0];</p> <p style="margin-left:.0001pt;text-align:justify;">3、对数据进行分析处理,并组织为适合显示的形式</p> <p style="margin-left:.0001pt;text-align:justify;">前面查询得到的是一个DataTable表,里面的数据是与数据库中对应起来的,但这样的数据却不便于生成图像,因此要对它进行重组,转换为雨量数据和相关文字信息。在这里定义了一个类RainfallData来辅助,这个类包含了城市信息、时间信息、相应的雨量信息等等,具体代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">public class RainfallData</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       public string cityId;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string cityName;</p> <p style="margin-left:.0001pt;text-align:justify;">       public int max = 0;</p> <p style="margin-left:.0001pt;text-align:justify;">       public int min = 1000000;</p> <p style="margin-left:.0001pt;text-align:justify;">       public double average;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string startY;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string startM;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string startD;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string endY;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string endM;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string endD;</p> <p style="margin-left:.0001pt;text-align:justify;">       //计算出最大最小值</p> <p style="margin-left:.0001pt;text-align:justify;">       public void calMaxMin ()</p> <p style="margin-left:.0001pt;text-align:justify;">       {</p> <p style="margin-left:.0001pt;text-align:justify;">              double tmp = 0;</p> <p style="margin-left:.0001pt;text-align:justify;">              for (int i=0; i < data.Length; ++i)</p> <p style="margin-left:.0001pt;text-align:justify;">              {</p> <p style="margin-left:.0001pt;text-align:justify;">                     if ( data[i] > max )</p> <p style="margin-left:.0001pt;text-align:justify;">                            max = data[i];</p> <p style="margin-left:.0001pt;text-align:justify;">                     else if ( data[i] < min )</p> <p style="margin-left:.0001pt;text-align:justify;">                            min = data[i];</p> <p style="margin-left:.0001pt;text-align:justify;">                     tmp += data[i];</p> <p style="margin-left:.0001pt;text-align:justify;">              }</p> <p style="margin-left:.0001pt;text-align:justify;">       average =  (tmp / data.Length);</p> <p style="margin-left:.0001pt;text-align:justify;">       }</p> <p style="margin-left:.0001pt;text-align:justify;">       public int[] data;</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">然后将每一组雨量数据都存到该类的对象中,并将这些对象传给SVG显示模块。</p> <p style="margin-left:.0001pt;text-align:justify;">此外,若查询模式是多日查询或多月查询,还需要将数据按日或月累加起来。</p> <p style="margin-left:.0001pt;text-align:justify;">4、使用XML对象来生成SVG文档</p> <p style="margin-left:.0001pt;text-align:justify;">项目中定义了一个SVG文档类SVGDocument,它继承自XMLDocument,在它内部封装了加载SVG文档元素的操作,以后创建好文档中的元素后就直接插入到该文档中即可。另外定义了一个辅助类SVGHelper,里面定义了一些向某个结点添加基本SVG元素的操作,以方便向文档中添加SVG图形。现在,创建一个SVG文档,并且添加一条线、一个圆、一个矩形和一行文本的代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">SVGDocument document = new SVGDocument(800,700);</p> <p style="margin-left:.0001pt;text-align:justify;">SVGHelper.InsertLine (document.DocumentElement, 1,1,300,350, Color.BlueViolet, 5);</p> <p style="margin-left:.0001pt;text-align:justify;">SVGHelper.InsertCircle (document.DocumentElement,100,100,50,Color.Red,Color.Gold,2.5);</p> <p style="margin-left:.0001pt;text-align:justify;">SVGHelper.InsertRect (document.DocumentElement,300,400,80,70,Color.Gray,Color.Honeydew,3);</p> <p style="margin-left:.0001pt;text-align:justify;">SVGHelper.InsertText (document.DocumentElement,"网络工程",10,100,15,"楷体",Color.Blue);</p> <p style="margin-left:.0001pt;text-align:justify;">5、向SVG文档中添加坐标系</p> <p style="margin-left:.0001pt;text-align:justify;">为了方便坐标系的创建,定义了坐标系类CoordinateFrame,在它里面封装了坐标系的细节,并提供创建坐标系、向坐标系中添加点、添加线等接口操作,相应的也定义了坐标类Coordinate,来对坐标信息进行封装。现在,向SVG文档中添加坐标系,并向坐标系中添加一系列点和线的代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">CoordinateFrame frame = new CoordinateFrame (10,10,600,500,5,9,document.DocumentElement);</p> <p style="margin-left:.0001pt;text-align:justify;">Coordinate point = new Coordinate(50,40);</p> <p style="margin-left:.0001pt;text-align:justify;">frame.InsertPoint(point);</p> <p style="margin-left:.0001pt;text-align:justify;">Coordinate []points = new Coordinate [5];</p> <p style="margin-left:.0001pt;text-align:justify;">//... 在此获取坐标数据 ...</p> <p style="margin-left:.0001pt;text-align:justify;">frame.InsertLine (points,"成都",Color.Chocolate);</p> <p style="margin-left:.0001pt;text-align:justify;">6、将数据转换为坐标点的数组</p> <p style="margin-left:.0001pt;text-align:justify;">处理按照用户参数查询获得的数据,并将其转换为对应于坐标系中的坐标点的数组。这里需要求出所有雨量数据的最大值和最小值,并计算出合理的纵坐标的坐标点数,然后将每一个雨量数据除以一个纵坐标点代表的雨量数据,以转换为坐标位置。然后将坐标点添加到坐标系上,并连成曲线。</p> <p style="margin-left:.0001pt;text-align:justify;">7、添加相应的文字标签及均值线</p> <p style="margin-left:.0001pt;text-align:justify;">在点上以及线上面,加上说明文字。不同的线会用不同的颜色显示,并标注相应的说明文字。同时,将求出的每组数据的均值以均值线的方式画到坐标系上。</p> <p style="margin-left:.0001pt;text-align:justify;">8、修改响应类型为SVG文档类型(image/svg+xml)</p> <p style="margin-left:.0001pt;text-align:justify;">将要返回的响应类型改为image/svg+xml,这样浏览器才会将页面作为SVG图形来解析。然后将SVG文档(以XML对象表示)的内容发送到客户端。具体代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">Response.ContentType="image/svg+xml";</p> <p style="margin-left:.0001pt;text-align:justify;">document.Save( Response.OutputStream );</p> <p style="margin-left:.0001pt;text-align:justify;">Response.Flush();</p> <p style="margin-left:.0001pt;text-align:justify;">Response.End();</p> <p style="margin-left:.0001pt;text-align:justify;">现在客户端就可以看到如图12所示的SVG格式的图形了。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/abb3caa8f5c444989b5fff637d54cd1a.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第12张图片" height="364" src="http://img.e-com-net.com/image/info8/abb3caa8f5c444989b5fff637d54cd1a.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图12 SVG图形生成界面</p> <h3 style="margin-left:0;text-align:justify;">5.3 使用Web Service方式提供开放的外部接口</h3> <h4 style="margin-left:0;text-align:justify;">5.3.1 Web Service介绍</h4> <p style="margin-left:.0001pt;text-align:justify;">Web Service是建立在HTTP协议、SOAP协议和UDDI等标准以及XML等技术之上的,其主要目标就是在现有的各种异构平台的基础上构建一个通用的,与平台和语言无关的接口层,各种不同平台之上的应用通过这个接口层来集成已有的服务。</p> <p style="margin-left:.0001pt;text-align:justify;">Web Service具有以下一些特征:</p> <p style="margin-left:.0001pt;text-align:justify;">1、完好的封装性:Web Service既然是一种部署在Web上的对象,自然具备对象的良好封装性。对使用者而言,只能看到该对象提供的功能列表。</p> <p style="margin-left:.0001pt;text-align:justify;">2、松散耦合:当一个Web Service的实现发生变化时,调用者完全不会感觉到。对调用者来说,只要调用的接口不变,其内部实现的任何变化对用户来说都是透明的。</p> <p style="margin-left:.0001pt;text-align:justify;">3、高度可集成能力:由于Web Service采用简单的、易于理解的XML作为接口描述,完全屏蔽了不同平台和系统的差异性,因此,任何符合协议的应用都可以集成已有的Web Service。</p> <h4 style="margin-left:0;text-align:justify;">5.3.2 使用Web Service的意义</h4> <p style="margin-left:.0001pt;text-align:justify;">使用Web Service可以引入很高的开放性,使得系统可以方便的集成到其它应用中,同时,也为系统的二次开发预留了很好的接口。此外,作为雨量数据分析系统,必然会涉及到大量的雨量数据,而这些雨量数据是从全国各地的设备终端采集汇总而来的,一旦有了这一开放的接口,所有的数据都可以通过它来写入到数据库中。另外,这些雨量数据的采集是相当不容易的,一般的科研机构和学校是不可能获取如此大量的真实数据的,例如本套系统就无法获得到这些真实数据,只能通过随机数来生成假的数据。这样就限制了这些数据的科研作用。然而,通过Web Service来提供开放的接口后,所有的用户都可以通过它来很容易的获取这些雨量数据,还可以通过接口使用系统中已经做好的各种功能,避免了重复开发的浪费。因此,使用Web Service来提供开放的接口是有很大的积极意义的。</p> <h4 style="margin-left:0;text-align:justify;">5.3.3 Web Service接口的实现</h4> <p style="margin-left:.0001pt;text-align:justify;">在系统中只提供简单功能的实现,主要接口有:</p> <p style="margin-left:.0001pt;text-align:justify;">1、获取城市ID</p> <p style="margin-left:.0001pt;text-align:justify;">通过该接口可以查询指定城市在系统中分配的ID值,其参数为城市名称。在查询城市数据前,首先要通过此接口获得城市的ID值。</p> <p style="margin-left:.0001pt;text-align:justify;">2、获取雨量数据</p> <p style="margin-left:.0001pt;text-align:justify;">通过输入查询条件,来获得雨量数据。这里的查询条件就是SQL查询语句中的where子句,用户可以指定某一天、某几天或某几个月的等条件。例如最简单的查询“江油”的所有雨量数据的参数为“CityId = ‘0000000013’”。</p> <p style="margin-left:.0001pt;text-align:justify;">接口实现代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">[WebMethod]</p> <p style="margin-left:.0001pt;text-align:justify;">public string getCityId (string city)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       return SVGRAS.BLL.SVGRAS_City.GetList ("CityName='" + city + "'").Tables[0].Rows[0]["CityId"].ToString ();</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">[WebMethod]</p> <p style="margin-left:.0001pt;text-align:justify;">public DataSet getRainData (string sql)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       return SVGRAS.BLL.SVGRAS_RainPerHour.GetList (sql);</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <h2 style="margin-left:0;text-align:left;">6 系统测试</h2> <p style="margin-left:.0001pt;text-align:justify;">在前台页面中,对每种查询方式都进行了测试,所有数据查询、分析以及图像生成功能都能正确工作。例如,选择同一城市不同时间段比较模式,并设置起止日期和时间,这里的日期跨越两个月,即4月30日到5月1日,设置显示均值线方式;点击城市名称就可以选择城市,并将其加边框标注出来,再次点击即可取消相应城市的选择,并去掉相应边框;点击确定按钮后,就会打开新的窗口显示查询结果。</p> <p style="margin-left:.0001pt;text-align:justify;">用户管理界面列出了系统当前的所有用户,点击“选择”选中一个用户后,可修改用户名、密码,并为用户指定系统角色。系统当前共有三种角色,角色的权限由管理员指定,例如要为系统管理员指定系统管理这一模块的权限,选中这一角色,在权限分配区选中相应的模块权限即可。角色的选择可以是一个或多个,默认角色选择为空,若没有为用户指定系统角色,则用户登陆系统后不会出现系统树型菜单,用户也就不能进行任何操作。</p> <p style="margin-left:.0001pt;text-align:justify;">日志是根据用户操作自动生成的,在后台管理中可以根据选择条件进行日志的查询、删除和下载,若选择条件为空则默认为选择所有日志。</p> <p style="margin-left:.0001pt;text-align:justify;">系统中的城市分为两级,每一个城市都有其上级城市。通过输入城市名称并选择上级城市后可新增一个城市,若要更新或删除城市,则先要点击对应的选择按钮来选中一个城市,然后可对选中的城市信息进行更新或删除等操作。</p> <h2 style="margin-left:0;text-align:center;">结    论</h2> <p style="margin-left:.0001pt;text-align:justify;">雨量分析系统实现了对四川省部分市县及其雨量数据的管理与分析功能,能够以各种方式(例如相同城市不同时间或相同时间不同城市)查询各市县的历史雨量数据,并以SVG格式的图形显示出来。此外还实现了管理系统内各个模块及设置不同用户权限的功能,以及数据库备份和还原功能。通过本项目的开发,对C#语言有了更多的体会,也更多地了解了B/S架构系统的开发。在开发过程中,学会了SVG这门新型的可伸缩矢量图形语言,在使用时体会到了这门语言的实用性及它带来的乐趣。</p> <p style="margin-left:.0001pt;text-align:justify;">在项目实现过程中也遇到过不少问题和困难,同时由于缺乏编程经验,在编写代码的过程中,碰到了很多难以解决的问题和障碍,在老师的指导和同学的帮助下,查找各种资料,这些问题得以解决,并积累了一定的开发经验。例如刚开始不太了解雨量数据如何转换为SVG图形来显示,便从网上找了一个现有的将数据显示为SVG格式的图形的库来使用。在查看各种相关资料,了解了SVG并进行深入学习后,反复尝试各种生成SVG图形的方法。由于SVG本身就是XML文档,因此选择了用生成XML文档的方式来生成SVG,并封装了SVG的基本图形元素,最终完成了一个较方便的创建SVG图形的工具类。</p> <p style="margin-left:.0001pt;text-align:justify;">当然,该雨量分析系统还是有很多不完善的地方。地图信息本来应该用SVG来组织和表示,这样可以将其中的各种数据元素分离出来,实现按选择条件在地图上显示城市及相应雨量数据的功能;而且SVG的交互效果没有体现出来,对雨量数据的分析也不够充分。但由于实现难度及时间限制,以上功能没能实现。</p> <h2 style="margin-left:0;text-align:center;">参考文献</h2> <p style="margin-left:.0001pt;text-align:justify;">[1] Joseph Bustos, Karli Watson[美]..NET Web服务入门经典——C#编程篇[M].侯彧译.北京:清华大学出版社,2003。</p> <p style="margin-left:.0001pt;text-align:justify;">[2] Dinar Dalvi, Joe Gray[美]..NET XML高级编程[M].英宇,林琪译.北京:清华大学出版社,2002。</p> <p style="margin-left:.0001pt;text-align:justify;">[3] Jesse Liberty, Dan Hurwitz[美].Programming ASP.NET[M].南京:东南大学出版社,2006。</p> <p style="margin-left:.0001pt;text-align:justify;">[4] 石磊,但正刚.ASP.NET数据库编程详解C#版[M].北京:高等教育出版社,2004。</p> <p style="margin-left:.0001pt;text-align:justify;">[5] 徐谡.ASP.NET应用与开发案例教程[M].北京:清华大学出版社,2005。</p> <p style="margin-left:.0001pt;text-align:justify;">[6] 李安渝.Web Services技术与实现[M].北京:国防工业出版社,2003。</p> <p style="margin-left:.0001pt;text-align:justify;">[7] 蔡月茹,柳面玲.Web Service基础教程[M].北京:清华大学出版社,2005。</p> <p style="margin-left:.0001pt;text-align:justify;">[8] Seely[美].SOAP XML跨平台Web Service开发技术[M].杨涛,杨晓云,王建桥译.北京:机械工业出版社,2002。</p> <p style="margin-left:.0001pt;text-align:justify;">[9] Bill Trippe,Kate Binder[美].SVG设计在下一代Web站点中使用可缩放矢量图形[M].高伟,英宇译.北京:机械工业出版社,2003。</p> <p style="margin-left:.0001pt;text-align:justify;"></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1743593490442371072"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(课程设计,asp.net,数据库)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1943985463522029568.htm" title="Android 开源组件和第三方库汇总" target="_blank">Android 开源组件和第三方库汇总</a> <span class="text-muted">gyyzzr</span> <a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E6%A1%86%E6%9E%B6/1.htm">开源框架</a> <div>转载1、github排名https://github.com/trending,github搜索:https://github.com/search2、https://github.com/wasabeef/awesome-android-ui目录UIUI卫星菜单节选器下拉刷新模糊效果HUD与Toast进度条UI其它动画网络相关响应式编程地图数据库图像浏览及处理视频音频处理测试及调试动态更新热更新</div> </li> <li><a href="/article/1943976258685693952.htm" title="CentOS7环境卸载MySQL5.7" target="_blank">CentOS7环境卸载MySQL5.7</a> <span class="text-muted">Hadoop_Liang</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>备份重要数据切记,卸载之前先备份mysql重要的数据。备份一个数据库例如:备份名为mydatabase的数据库到backup.sql的文件中mysqldump-uroot-ppassword123mydatabase>backup.sql备份所有数据库mysqldump-uroot-ppassword123--all-databases>all_databases_backup.sql注意:-p后</div> </li> <li><a href="/article/1943975880120397824.htm" title="php SPOF" target="_blank">php SPOF</a> <span class="text-muted">贵哥的编程之路(热爱分享 为后来者)</span> <a class="tag" taget="_blank" href="/search/PHP%E8%AF%AD%E8%A8%80%E7%BB%8F%E5%85%B8%E7%A8%8B%E5%BA%8F100%E9%A2%98/1.htm">PHP语言经典程序100题</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1.什么是单点故障(SPOF)?单点故障指的是系统中某个组件一旦失效,整个系统或服务就会不可用。常见的单点有:数据库、缓存、Web服务器、负载均衡、网络设备等。2.常见单点故障场景只有一台数据库服务器,宕机后所有业务不可用只有一台Redis缓存,挂掉后缓存全部失效只有一台Web服务器,挂掉后网站无法访问只有一个负载均衡节点,挂掉后流量无法分发只有一条网络链路,断开后所有服务失联3.消除单点故障的主</div> </li> <li><a href="/article/1943975626671190016.htm" title="centos7安装 mysql5.7(安装包)" target="_blank">centos7安装 mysql5.7(安装包)</a> <span class="text-muted">heiPony</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/mariadb/1.htm">mariadb</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>一.卸载centos7自带数据库查看系统自带的Mariadbrpm-qa|grepmariadbmariadb-libs-5.5.44-2.el7.centos.x86_64卸载rpm-e--nodepsmariadb-libs-5.5.44-2.el7.centos.x86_64删除etc目录下的my.cnfrm/etc/my.cnf二.检查mysql是否存在(有就卸载,删除相关文件)rpm-q</div> </li> <li><a href="/article/1943973357707915264.htm" title="MySQL Explain 详解:从入门到精通,让你的 SQL 飞起来" target="_blank">MySQL Explain 详解:从入门到精通,让你的 SQL 飞起来</a> <span class="text-muted"></span> <div>引言:为什么Explain是SQL优化的“照妖镜”?在Java开发中,我们常常会遇到数据库性能瓶颈的问题。一条看似简单的SQL语句,在数据量增长到一定规模后,可能会从毫秒级响应变成秒级甚至分钟级响应,直接拖慢整个应用的性能。此时,你是否曾困惑于:为什么这条SQL突然变慢了?索引明明建了,为什么没生效?到底是哪里出了问题?答案就藏在MySQL的EXPLAIN命令里。EXPLAIN就像一面“照妖镜”,</div> </li> <li><a href="/article/1943968187112550400.htm" title="OpenWebUI(12)源码学习-后端constants.py常量定义文件" target="_blank">OpenWebUI(12)源码学习-后端constants.py常量定义文件</a> <span class="text-muted">青苔猿猿</span> <a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">AI大模型</a><a class="tag" taget="_blank" href="/search/openwebui/1.htm">openwebui</a><a class="tag" taget="_blank" href="/search/constants%E5%B8%B8%E9%87%8F%E5%AE%9A%E4%B9%89/1.htm">constants常量定义</a> <div>目录文件名:`constants.py`功能概述:主要功能点详解1.**MESSAGES枚举类**2.**WEBHOOK_MESSAGES枚举类**3.**ERROR_MESSAGES枚举类**✅默认错误模板✅认证与用户相关错误✅资源冲突与重复错误✅验证失败类错误✅权限限制类错误✅文件上传与格式错误✅模型与API错误✅请求频率与安全限制✅数据库与配置错误4.**TASKS枚举类**✅总结实际应用场</div> </li> <li><a href="/article/1943943987777826816.htm" title="自动化运维工程师面试题解析【真题】" target="_blank">自动化运维工程师面试题解析【真题】</a> <span class="text-muted"></span> <div>ZabbixAgent默认监听的端口是A.10050。以下是关键分析:选项排除:C.80是HTTP默认端口,与ZabbixAgent无关。D.5432是PostgreSQL数据库的默认端口,不涉及ZabbixAgent。B.10051是ZabbixServer的默认监听端口,用于接收Agent发送的数据,而非Agent自身的监听端口。ZabbixAgent的配置:根据官方文档,ZabbixAgen</div> </li> <li><a href="/article/1943943483026894848.htm" title="什么是OA系统?使用OA系统对企业有哪些好处?" target="_blank">什么是OA系统?使用OA系统对企业有哪些好处?</a> <span class="text-muted"></span> <div>OA系统(OfficeAutomationSystem),即办公自动化系统,是将现代化办公和计算机网络功能结合起来的一种新型的办公方式。是现代企业管理中一种重要的信息化工具,它通过计算机技术、网络技术和数据库技术等手段,实现企业内部办公流程的自动化和信息化管理。使企业的信息交流更加顺畅,办公流程更加高效,从而提高企业的运营效率和管理水平。一、主要功能1.文档管理文档存储与检索:OA系统可以集中存储</div> </li> <li><a href="/article/1943940204628865024.htm" title="LangChain中的向量数据库接口-Weaviate" target="_blank">LangChain中的向量数据库接口-Weaviate</a> <span class="text-muted">洪城叮当</span> <a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E4%BA%A4%E4%BA%92/1.htm">交互</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1/1.htm">知识图谱</a> <div>文章目录前言一、原型定义二、代码解析1、add_texts方法1.1、应用样例2、from_texts方法2.1、应用样例3、similarity_search方法3.1、应用样例三、项目应用1、安装依赖2、引入依赖3、创建对象4、添加数据5、查询数据总结前言  Weaviate是一个开源的向量数据库,支持存储来自各类机器学习模型的数据对象和向量嵌入,并能无缝扩展至数十亿数据对象。它提供存储文档嵌</div> </li> <li><a href="/article/1943933782121836544.htm" title="Flutter——数据库Drift开发详细教程(七)" target="_blank">Flutter——数据库Drift开发详细教程(七)</a> <span class="text-muted">怀君</span> <a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>目录入门设置漂移文件入门变量数组定义表支持的列类型漂移特有的功能导入嵌套结果LIST子查询Dart互操作SQL中的Dart组件类型转换器现有的行类Dart文档注释结果类名称支持的语句自定义SQL类型定义类型使用自定义类型在Dart中在SQL中方言意识支持的SQLite扩展json1fts5地缘垄断自定义查询带有生成的api的语句自定义选择语句自定义更新语句入门Drift提供了一个dart_api来</div> </li> <li><a href="/article/1943931889924501504.htm" title="android中百度定位、城市选择列表,右侧字母展示" target="_blank">android中百度定位、城市选择列表,右侧字母展示</a> <span class="text-muted"></span> <div>好久好久没光顾过自己空空的博客了,做项目的时候都是逛着别人的博客急着把功能实现,近来闲下来了总结总结。这个城市选择功能也是当时做项目急着实现从哪找来的框架不记得了,然后改改用到项目中来的。非常感谢提供最初源码的博主,主要的区别是添加了搜索功能、定位功能,把以前的操作本地数据库sqlite的部分,改为操作对assest文件的操作,封装的有百度地图定位方法、可删除的edittext。百度地图的key需</div> </li> <li><a href="/article/1943926592141062144.htm" title="Flutter——数据库Drift开发详细教程之迁移(九)" target="_blank">Flutter——数据库Drift开发详细教程之迁移(九)</a> <span class="text-muted">怀君</span> <a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>迁移入门引导式迁移配置用法例子切换到make-migrations开发过程中手动迁移迁移后回调导出模式导出架构下一步是什么?调试导出架构的问题修复这个问题架构迁移助手自定义分步迁移转向逐步迁移手动生成测试迁移编写测试验证数据完整性在运行时验证数据库模式迁移器API一般提示迁移视图、触发器和索引复杂的迁移更改列的类型更改列约束删除列重命名列合并列添加新列入门Drift通过严格的架构确保查询类型安全。</div> </li> <li><a href="/article/1943897978339127296.htm" title="《Python星球日记》第35天:全栈开发(综合项目)" target="_blank">《Python星球日记》第35天:全栈开发(综合项目)</a> <span class="text-muted">Code_流苏</span> <a class="tag" taget="_blank" href="/search/Python%E6%98%9F%E7%90%83%E6%97%A5%E8%AE%B0/1.htm">Python星球日记</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/1.htm">编程项目实战</a><a class="tag" taget="_blank" href="/search/Python%E5%85%A8%E6%A0%88%E5%BC%80%E5%8F%91/1.htm">Python全栈开发</a><a class="tag" taget="_blank" href="/search/Django/1.htm">Django</a><a class="tag" taget="_blank" href="/search/Flask/1.htm">Flask</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91/1.htm">后端开发</a><a class="tag" taget="_blank" href="/search/%E5%8D%9A%E5%AE%A2%E7%B3%BB%E7%BB%9F/1.htm">博客系统</a> <div>名人说:路漫漫其修远兮,吾将上下而求索。——屈原《离骚》创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)专栏:《Python星球日记》,限时特价订阅中ing目录一、全栈开发概述1.全栈开发的优势2.全栈开发技能组合二、博客系统项目需求分析1.功能需求2.技术栈选择3.项目结构规划三、数据库设计1.实体关系分析2.Django模型设计四、后端开发1.Django项目创建2.视图</div> </li> <li><a href="/article/1943894069293936640.htm" title="Spring 声明式事务:从原理到实现的完整解析" target="_blank">Spring 声明式事务:从原理到实现的完整解析</a> <span class="text-muted">Code季风</span> <a class="tag" taget="_blank" href="/search/Spring%E8%AF%A6%E8%A7%A3/1.htm">Spring详解</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a> <div>在后端开发中,事务管理是保证数据一致性的核心机制。尤其是在复杂业务场景下,一个操作可能涉及多步数据库操作,任何一步失败都需要回滚到初始状态。Spring的声明式事务通过AOP思想,将事务管理从业务逻辑中剥离,让开发者更专注于核心业务。本文将结合实际实现,详解声明式事务的核心机制和设计思路。一、为什么需要声明式事务?在讨论实现之前,我们先明确一个问题:为什么要用声明式事务,而不是手动编写事务代码?假</div> </li> <li><a href="/article/1943890540311408640.htm" title="【Android】安卓四大组件之内容提供者(ContentProvider):从基础到进阶" target="_blank">【Android】安卓四大组件之内容提供者(ContentProvider):从基础到进阶</a> <span class="text-muted">m0_59734531</span> <a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/ContentProvider/1.htm">ContentProvider</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%8D%93%E5%9B%9B%E5%A4%A7%E7%BB%84%E4%BB%B6/1.htm">安卓四大组件</a> <div>你手机里的通讯录,存储了所有联系人的信息。如果你想把这些联系人信息分享给其他App,就可以通过ContentProvider来实现。。一、什么是ContentProvider‌ContentProvider‌是Android四大组件之一,负责实现‌跨应用程序的数据共享与访问‌,通过统一接口封装数据存储细节,提供标准化操作方式。其中主要功能包括:数据抽象层:将应用内部的数据(如SQLite数据库、文</div> </li> <li><a href="/article/1943889405425020928.htm" title="400多个免费在线编程与计算机科学课程" target="_blank">400多个免费在线编程与计算机科学课程</a> <span class="text-muted">zhufafa</span> <a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E7%90%86%E8%AE%BA/1.htm">基础理论</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B/1.htm">课程</a><a class="tag" taget="_blank" href="/search/%E7%90%86%E8%AE%BA/1.htm">理论</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/1.htm">计算机基础</a><a class="tag" taget="_blank" href="/search/%E5%85%8D%E8%B4%B9/1.htm">免费</a> <div>来源:medium作者:DhawalShah五年前,麻省理工学院和斯坦福大学等学校首先向公众开放免费的在线课程。如今,全球有700多所学校创造了数以千计的免费在线课程。从入门到精通系列,是作者通过ClassCentral的课程数据库整理的400多个免费在线课程的简介和链接(来源于ClassCentral,一个在线课程搜索引擎),根据课程难度分为入门、进阶和高阶三大类,每门课程还有星级评分(统计自C</div> </li> <li><a href="/article/1943880325276954624.htm" title="AnythingLLM教程系列之 12 AnythingLLM 上的 Ollama 与 MySQL+PostgreSQL" target="_blank">AnythingLLM教程系列之 12 AnythingLLM 上的 Ollama 与 MySQL+PostgreSQL</a> <span class="text-muted">知识大胖</span> <a class="tag" taget="_blank" href="/search/NVIDIA/1.htm">NVIDIA</a><a class="tag" taget="_blank" href="/search/GPU%E5%92%8C%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B/1.htm">GPU和大语言模型开发教程</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/postgresql/1.htm">postgresql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/anythingllm/1.htm">anythingllm</a><a class="tag" taget="_blank" href="/search/ollama/1.htm">ollama</a> <div>简介一款全栈应用程序,可让您将任何文档、资源或内容转换为上下文,任何LLM都可以在聊天期间将其用作参考。此应用程序允许您选择要使用的LLM或矢量数据库,并支持多用户管理和权限。本文将介绍如何在AnythingLLM上将Ollama与MySQL+PostgreSQL连接起来。系列文章如何安装《无需任何代码构建自己的大模型知识库:AnythingLLM最易于使用的一体化AI应用程序,可以执行RAG、A</div> </li> <li><a href="/article/1943879947378552832.htm" title="AnythingLLM教程系列之 09 AnythingLLM 支持自定义音频转录提供程序" target="_blank">AnythingLLM教程系列之 09 AnythingLLM 支持自定义音频转录提供程序</a> <span class="text-muted">知识大胖</span> <a class="tag" taget="_blank" href="/search/NVIDIA/1.htm">NVIDIA</a><a class="tag" taget="_blank" href="/search/GPU%E5%92%8C%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B/1.htm">GPU和大语言模型开发教程</a><a class="tag" taget="_blank" href="/search/llama3/1.htm">llama3</a><a class="tag" taget="_blank" href="/search/anythingllm/1.htm">anythingllm</a><a class="tag" taget="_blank" href="/search/llm/1.htm">llm</a> <div>什么是AnythingLLM?AnythingLLM是最易于使用的一体化AI应用程序,可以执行RAG、AI代理等操作,且无需任何代码或基础设施难题。您需要为您的企业或组织提供一款完全可定制、私有且一体化的AI应用程序,该应用程序基本上是一个具有许可的完整ChatGPT,但具有任何LLM、嵌入模型或矢量数据库。如何安装《无需任何代码构建自己的大模型知识库:AnythingLLM最易于使用的一体化AI</div> </li> <li><a href="/article/1943879820974813184.htm" title="AnythingLLM教程系列之 04 AnythingLLM 允许您以正确的格式导出聊天日志,以构建 GPT-3.5 和 OpenAI 上其他可用模型的微调模型(教程含安装步骤)" target="_blank">AnythingLLM教程系列之 04 AnythingLLM 允许您以正确的格式导出聊天日志,以构建 GPT-3.5 和 OpenAI 上其他可用模型的微调模型(教程含安装步骤)</a> <span class="text-muted">知识大胖</span> <a class="tag" taget="_blank" href="/search/NVIDIA/1.htm">NVIDIA</a><a class="tag" taget="_blank" href="/search/GPU%E5%92%8C%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B/1.htm">GPU和大语言模型开发教程</a><a class="tag" taget="_blank" href="/search/llama3/1.htm">llama3</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a><a class="tag" taget="_blank" href="/search/anythinllm/1.htm">anythinllm</a><a class="tag" taget="_blank" href="/search/llama/1.htm">llama</a> <div>什么是AnythingLLM?AnythingLLM是最易于使用的一体化AI应用程序,可以执行RAG、AI代理等操作,且无需任何代码或基础设施难题。您需要为您的企业或组织提供一款完全可定制、私有且一体化的AI应用程序,该应用程序基本上是一个具有许可的完整ChatGPT,但具有任何LLM、嵌入模型或矢量数据库。如何安装《无需任何代码构建自己的大模型知识库:AnythingLLM最易于使用的一体化AI</div> </li> <li><a href="/article/1943875911363391488.htm" title="Java实习模拟面试之安徽九德 —— 面向对象编程、Spring框架与数据库技术详解" target="_blank">Java实习模拟面试之安徽九德 —— 面向对象编程、Spring框架与数据库技术详解</a> <span class="text-muted">培风图南以星河揽胜</span> <a class="tag" taget="_blank" href="/search/java%E9%9D%A2%E8%AF%95/1.htm">java面试</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>关键词:Java实习生、模拟面试、安徽九德、SpringBoot、MySQL、Redis、面向对象编程、团队协作一、前言作为一名计算机相关专业的学生,想要顺利进入一家互联网公司或软件开发企业实习,技术面试是必须面对的一道门槛。本文将带你走进一场真实的Java实习生模拟面试场景,以“安徽九德”公司为背景,围绕其发布的招聘岗位要求,进行一次全方位的技术面试演练。本次模拟面试涵盖以下核心知识点:Java</div> </li> <li><a href="/article/1943862671954735104.htm" title="Spring Boot基础" target="_blank">Spring Boot基础</a> <span class="text-muted">小李是个程序</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>5.SpringBoot配置解析5.1.基础服务端口:server.port=8080(应用启动后监听8080端口)应用名称:spring.application.name=Chat64(注册到服务发现等场景时的标识)5.2.数据库连接(MySQL)URL:jdbc:mysql://localhost:3306/ai-chat(连接本地3306端口的ai-chat数据库,含时区、编码等参数)驱动:</div> </li> <li><a href="/article/1943860905200644096.htm" title="Docker初识:mysql8主从复制(单向)- 主从搭建扩展知识" target="_blank">Docker初识:mysql8主从复制(单向)- 主从搭建扩展知识</a> <span class="text-muted">滴水可藏海</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>主从服务(master-slave)新学习到的知识。1、全库同步与部分同步上回书说到Docker初识:mysql8主从复制(单向)的配置都是针对全库配置的。但是实际上并不需要针对全库做备份,只需要对一些特别重要的库或者表来进行同步。例如information_schema等。可以通过配置文件中的一些属性指定需要针对哪些库或者哪些表记录binlog。Master配置:#需要同步的二进制数据库名bin</div> </li> <li><a href="/article/1943855106910908416.htm" title="在拉卡拉分账功能中实现实时更新,需结合异步回调通知和数据库事务来确保数据一致性。以下是具体实现方案" target="_blank">在拉卡拉分账功能中实现实时更新,需结合异步回调通知和数据库事务来确保数据一致性。以下是具体实现方案</a> <span class="text-muted">肥仔全栈开发</span> <a class="tag" taget="_blank" href="/search/%E6%8B%89%E5%8D%A1%E6%8B%89%E6%94%AF%E4%BB%98/1.htm">拉卡拉支付</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E6%8B%89%E5%8D%A1%E6%8B%89%E6%94%AF%E4%BB%98/1.htm">拉卡拉支付</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E6%96%B9%E6%94%AF%E4%BB%98/1.htm">三方支付</a> <div>一、实时更新的核心逻辑依赖拉卡拉分账回调拉卡拉分账完成后会主动推送回调通知(类似支付回调),需监听该回调并更新订单分账状态。数据库事务保障分账金额更新、状态变更等操作需放在事务中,避免部分失败导致数据不一致。二、代码实现1.分账回调处理接口(监听拉卡拉分账结果推送,实时更新数据库)//文件:application/api/controller/Notify.phppublicfunctionlak</div> </li> <li><a href="/article/1943853592725221376.htm" title="GPT实操——利用GPT创建一个应用" target="_blank">GPT实操——利用GPT创建一个应用</a> <span class="text-muted">狗木马</span> <a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/gpt-3/1.htm">gpt-3</a><a class="tag" taget="_blank" href="/search/gpt/1.htm">gpt</a> <div>功能描述信息查询:用户可以询问各种问题,如天气、新闻、股票等,机器人会返回相关信息。任务执行:用户可以要求机器人执行一些简单的任务,如设置提醒、发送邮件等。情感支持:机器人可以与用户进行情感交流,提供安慰和支持。个性化设置:用户可以自定义机器人的回复风格和偏好。技术栈前端:React.js后端:Node.js+Express数据库:MongoDB自然语言处理:OpenAIGPT-3API其他工具:</div> </li> <li><a href="/article/1943852963118247936.htm" title="Android开发中RxJava的使用与原理" target="_blank">Android开发中RxJava的使用与原理</a> <span class="text-muted">你过来啊你</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/rxjava/1.htm">rxjava</a> <div>RxJava是ReactiveExtensions在JVM上的实现,专为处理异步事件流和基于观察者模式的编程而设计。在Android开发中,它极大地简化了异步操作(如网络请求、数据库访问、UI事件处理)的管理、组合和线程调度,有效解决了回调地狱问题。一、RxJava核心概念Observable(可观察者):数据源或事件源。它负责发出数据项(onNext)或事件(成功完成onComplete/发生错</div> </li> <li><a href="/article/1943851449469431808.htm" title="MySQL数据库访问(C/C++)" target="_blank">MySQL数据库访问(C/C++)</a> <span class="text-muted">敲上瘾</span> <a class="tag" taget="_blank" href="/search/MySQL%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">MySQL数据库</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BC%80%E5%8F%91/1.htm">数据库开发</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9E%B6%E6%9E%84/1.htm">数据库架构</a> <div>访问数据库的方式:命令行:使用命令行输入SQL指令直接访问。需记忆命令和SQL语法,对新手不友好。正因如此推荐新手使用该方式访问,能倒逼学习者对SQL语法的记忆,并对MySQL更深入理解。图形化界面访问:使用图形化界面工具,如:DBeaver、DataGrip、Navicat、HeidiSQL(MySQL)、MySQLWorkbench。特点:有语法提示,可以直接对数据手动增删改。编程接口:在编写</div> </li> <li><a href="/article/1943851197303681024.htm" title="MySQL多表关系详解" target="_blank">MySQL多表关系详解</a> <span class="text-muted">六七_Shmily</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>MySQL中的多表关系是关系型数据库设计的核心,它描述了不同表之间数据如何相互关联。合理设计表关系是构建高效、无冗余、易于维护的数据库模式的关键。MySQL主要支持三种基本的多表关系:1.一对一关系(One-to-OneRelationship)概念:表A中的一条记录最多只与表B中的一条记录相关联,反之亦然。实现方式:共享主键:表B的主键同时也是指向表A主键的外键。这是最严格的实现,确保绝对的一对</div> </li> <li><a href="/article/1943843754888720384.htm" title="什么是ORM?它如何简化后端开发?" target="_blank">什么是ORM?它如何简化后端开发?</a> <span class="text-muted">破碎的天堂鸟</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%95%99%E7%A8%8B/1.htm">学习教程</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>什么是ORM?ORM(对象关系映射,Object-RelationalMapping)是一种编程技术,用于解决面向对象编程语言与关系型数据库之间的数据转换问题。其核心是将数据库中的表结构映射为程序中的类和对象,使开发者能够以操作对象的方式操作数据库,而非直接编写SQL语句。具体而言:映射机制:数据库表→编程语言中的类(如User类对应users表)表字段→类的属性(如username字段对应Use</div> </li> <li><a href="/article/1943841484293861376.htm" title="Elasticsearch搜索引擎存储:从原理到实践的全景解析" target="_blank">Elasticsearch搜索引擎存储:从原理到实践的全景解析</a> <span class="text-muted">Python×CATIA工业智造</span> <a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>引言在大数据时代,数据规模呈指数级增长,传统数据库的模糊查询、实时分析能力逐渐成为瓶颈。Elasticsearch(简称ES)凭借其分布式架构、实时搜索和灵活的数据分析能力,成为企业级搜索与存储的核心引擎。截至2025年,ES在全球日志分析、电商搜索、实时监控等场景的市场占有率超过60%。本文将从存储架构、核心技术、应用场景及优化策略四个维度,深入解析Elasticsearch的设计哲学与实践价值</div> </li> <li><a href="/article/1943837705418895360.htm" title="ARM64+KylinOS环境下MySQL数据库的图文版安装步骤和故障排查" target="_blank">ARM64+KylinOS环境下MySQL数据库的图文版安装步骤和故障排查</a> <span class="text-muted">weixin_47690215</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>前言随着信息技术应用创新产业的快速发展,ARM64架构处理器与麒麟操作系统(KylinOS)已成为我国关键信息基础设施建设的核心组合。MySQL作为全球最流行的开源关系型数据库,在金融、政务等关键领域的国产化替代进程中发挥着重要作用。本文档针对ARM64架构与KylinOSV10SP2/SP3的深度适配需求,提供完整的MySQL8.0部署方案及故障排查体系。背景意义技术自主可控:基于华为鲲鹏、飞腾</div> </li> <li><a href="/article/81.htm" title="java短路运算符和逻辑运算符的区别" target="_blank">java短路运算符和逻辑运算符的区别</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a> <div> /* * 逻辑运算符——不论是什么条件都要执行左右两边代码 * 短路运算符——我认为在底层就是利用物理电路的“并联”和“串联”实现的 * 原理很简单,并联电路代表短路或(||),串联电路代表短路与(&&)。 * * 并联电路两个开关只要有一个开关闭合,电路就会通。 * 类似于短路或(||),只要有其中一个为true(开关闭合)是</div> </li> <li><a href="/article/208.htm" title="Java异常那些不得不说的事" target="_blank">Java异常那些不得不说的事</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a> <div>一、在finally块中做数据回收操作 比如数据库连接都是很宝贵的,所以最好在finally中关闭连接。 JDBCAgent jdbc = new JDBCAgent(); try{ jdbc.excute("select * from ctp_log"); }catch(SQLException e){ ... }finally{ jdbc.close(); </div> </li> <li><a href="/article/335.htm" title="utf-8与utf-8(无BOM)的区别" target="_blank">utf-8与utf-8(无BOM)的区别</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a> <div>BOM——Byte Order Mark,就是字节序标记   在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如</div> </li> <li><a href="/article/462.htm" title="JAVA Annotation之定义篇" target="_blank">JAVA Annotation之定义篇</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E8%A7%A3/1.htm">注解</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a><a class="tag" taget="_blank" href="/search/%E5%85%A5%E9%97%A8/1.htm">入门</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E9%87%8A/1.htm">注释</a> <div>    Annotation: 译为注释或注解 An annotation, in the Java computer programming language, is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, pa</div> </li> <li><a href="/article/589.htm" title="tomcat的多域名、虚拟主机配置" target="_blank">tomcat的多域名、虚拟主机配置</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a> <div>众所周知apache可以配置多域名和虚拟主机,而且配置起来比较简单,但是项目用到的是tomcat,配来配去总是不成功。查了些资料才总算可以,下面就跟大家分享下经验。 很多朋友搜索的内容基本是告诉我们这么配置: 在Engine标签下增面积Host标签,如下: <Host name="www.site1.com" appBase="webapps"</div> </li> <li><a href="/article/716.htm" title="Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )" target="_blank">Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )</a> <span class="text-muted">510888780</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/capistrano/1.htm">capistrano</a> <div> 1.ssh -v hdfs@192.168.18.133 出现 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 错误 运行状况如下: OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 debug1: Reading configuratio</div> </li> <li><a href="/article/843.htm" title="log4j的用法" target="_blank">log4j的用法</a> <span class="text-muted">Harry642</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a> <div>一、前言:     log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现,     当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中</div> </li> <li><a href="/article/970.htm" title="mysql、sqlserver、oracle分页,java分页统一接口实现" target="_blank">mysql、sqlserver、oracle分页,java分页统一接口实现</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/jave/1.htm">jave</a> <div> 定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量 oracle分页:     select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart sqlServer分页:  </div> </li> <li><a href="/article/1097.htm" title="Hessian 简单例子" target="_blank">Hessian 简单例子</a> <span class="text-muted">antlove</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/service/1.htm">service</a><a class="tag" taget="_blank" href="/search/hessian/1.htm">hessian</a> <div>hello.hessian.MyCar.java package hessian.pojo; import java.io.Serializable; public class MyCar implements Serializable { private static final long serialVersionUID = 473690540190845543</div> </li> <li><a href="/article/1224.htm" title="数据库对象的同义词和序列" target="_blank">数据库对象的同义词和序列</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97/1.htm">序列</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E4%B9%89%E8%AF%8D/1.htm">同义词</a><a class="tag" taget="_blank" href="/search/ORACLE%E6%9D%83%E9%99%90/1.htm">ORACLE权限</a> <div>回顾简单的数据库权限等命令; 解锁用户和锁定用户 alter user scott account lock/unlock; //system下查看系统中的用户 select * dba_users; //创建用户名和密码 create user wj identified by wj; identified by //授予连接权和建表权 grant connect to </div> </li> <li><a href="/article/1351.htm" title="使用Powermock和mockito测试静态方法" target="_blank">使用Powermock和mockito测试静态方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/1.htm">持续集成</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/Powermock/1.htm">Powermock</a> <div>        实例: package com.bijian.study; import static org.junit.Assert.assertEquals; import java.io.IOException; import org.junit.Before; import org.junit.Test; import or</div> </li> <li><a href="/article/1478.htm" title="精通Oracle10编程SQL(6)访问ORACLE" target="_blank">精通Oracle10编程SQL(6)访问ORACLE</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a> <div>/* *访问ORACLE */ --检索单行数据 --使用标量变量接收数据 DECLARE v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; BEGIN select ename,sal into v_ename,v_sal from emp where empno=&no; dbms_output.pu</div> </li> <li><a href="/article/1605.htm" title="【Nginx四】Nginx作为HTTP负载均衡服务器" target="_blank">【Nginx四】Nginx作为HTTP负载均衡服务器</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a> <div> Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处:   负载均衡的好处 增加可用资源 增加吞吐量 加快响应速度,降低延时 出错的重试验机制 Nginx主要支持三种均衡算法: round-robin l</div> </li> <li><a href="/article/1732.htm" title="jquery-validation备忘" target="_blank">jquery-validation备忘</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/F%23/1.htm">F#</a><a class="tag" taget="_blank" href="/search/Firebug/1.htm">Firebug</a> <div>留点学习jquery validation总结的代码:   function checkForm(){ validator = $("#commentForm").validate({// #formId为需要进行验证的表单ID errorElement :"span",// 使用"div"标签标记错误, 默认:&</div> </li> <li><a href="/article/1859.htm" title="solr限制admin界面访问(端口限制和http授权限制)" target="_blank">solr限制admin界面访问(端口限制和http授权限制)</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/%E9%99%90%E5%AE%9AIp%E8%AE%BF%E9%97%AE/1.htm">限定Ip访问</a> <div>solr的管理界面可以帮助我们做很多事情,但是把solr程序放到公网之后就要限制对admin的访问了。 可以通过tomcat的http基本授权来做限制,也可以通过iptables防火墙来限制。 我们先看如何通过tomcat配置http授权限制。 第一步: 在tomcat的conf/tomcat-users.xml文件中添加管理用户,比如: <userusername="ad</div> </li> <li><a href="/article/1986.htm" title="多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1" target="_blank">多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a> <div> public class IncDecThread { private int j=10; /* * 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1 * 两个问题: * 1、线程同步--synchronized * 2、线程之间如何共享同一个j变量--内部类 */ public static </div> </li> <li><a href="/article/2113.htm" title="买房历程" target="_blank">买房历程</a> <span class="text-muted">cfyme</span> <div>    2015-06-21: 万科未来城,看房子   2015-06-26: 办理贷款手续,贷款73万,贷款利率5.65=5.3675   2015-06-27: 房子首付,签完合同   2015-06-28,央行宣布降息 0.25,就2天的时间差啊,没赶上。   首付,老婆找他的小姐妹接了5万,另外几个朋友借了1-</div> </li> <li><a href="/article/2240.htm" title="[军事与科技]制造大型太空战舰的前奏" target="_blank">[军事与科技]制造大型太空战舰的前奏</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%88%B6%E9%80%A0/1.htm">制造</a> <div>        天气热了........空调和电扇要准备好..........        最近,世界形势日趋复杂化,战争的阴影开始覆盖全世界..........        所以,我们不得不关</div> </li> <li><a href="/article/2367.htm" title="dateformat" target="_blank">dateformat</a> <span class="text-muted">dai_lm</span> <a class="tag" taget="_blank" href="/search/DateFormat/1.htm">DateFormat</a> <div> "Symbol Meaning Presentation Ex." "------ ------- ------------ ----" "G era designator (Text) AD" "y year</div> </li> <li><a href="/article/2494.htm" title="Hadoop如何实现关联计算" target="_blank">Hadoop如何实现关联计算</a> <span class="text-muted">datamachine</span> <a class="tag" taget="_blank" href="/search/mapreduce/1.htm">mapreduce</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E5%85%B3%E8%81%94%E8%AE%A1%E7%AE%97/1.htm">关联计算</a> <div>    选择Hadoop,低成本和高扩展性是主要原因,但但它的开发效率实在无法让人满意。     以关联计算为例。     假设:HDFS上有2个文件,分别是客户信息和订单信息,customerID是它们之间的关联字段。如何进行关联计算,以便将客户名称添加到订单列表中?   &nbs</div> </li> <li><a href="/article/2621.htm" title="用户模型中修改用户信息时,密码是如何处理的" target="_blank">用户模型中修改用户信息时,密码是如何处理的</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a> <div>当我添加或修改用户记录的时候对于处理确认密码我遇到了一些麻烦,所有我想分享一下我是怎么处理的。 场景是使用的基本的那些(系统自带),你需要有一个数据表(user)并且表中有一个密码字段(password),它使用 sha1、md5或其他加密方式加密用户密码。 面是它的工作流程: 当创建用户的时候密码需要加密并且保存,但当修改用户记录时如果使用同样的场景我们最终就会把用户加密过的密码再次加密,这</div> </li> <li><a href="/article/2748.htm" title="中文 iOS/Mac 开发博客列表" target="_blank">中文 iOS/Mac 开发博客列表</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Blog/1.htm">Blog</a> <div>  本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息。 本博客列表涉及的文章内容支持 定制化Google搜索,特别感谢 JeOam 提供并帮助更新。 本博客列表也提供同步更新的OPML文件(下载OPML文件),可供导入到例如feedly等第三方定阅工具中,特别感谢 lcepy 提供自动转换脚本。这里有导入教程。 </div> </li> <li><a href="/article/2875.htm" title="js去除空格,去除左右两端的空格" target="_blank">js去除空格,去除左右两端的空格</a> <span class="text-muted">蕃薯耀</span> <a class="tag" taget="_blank" href="/search/%E5%8E%BB%E9%99%A4%E5%B7%A6%E5%8F%B3%E4%B8%A4%E7%AB%AF%E7%9A%84%E7%A9%BA%E6%A0%BC/1.htm">去除左右两端的空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E6%8E%89%E6%89%80%E6%9C%89%E7%A9%BA%E6%A0%BC/1.htm">js去掉所有空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E9%99%A4%E7%A9%BA%E6%A0%BC/1.htm">js去除空格</a> <div>js去除空格,去除左右两端的空格 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g</div> </li> <li><a href="/article/3002.htm" title="SpringMVC4零配置--web.xml" target="_blank">SpringMVC4零配置--web.xml</a> <span class="text-muted">hanqunfeng</span> <a class="tag" taget="_blank" href="/search/springmvc4/1.htm">springmvc4</a> <div>servlet3.0+规范后,允许servlet,filter,listener不必声明在web.xml中,而是以硬编码的方式存在,实现容器的零配置。 ServletContainerInitializer:启动容器时负责加载相关配置 package javax.servlet; import java.util.Set; public interface ServletContainer</div> </li> <li><a href="/article/3129.htm" title="《开源框架那些事儿21》:巧借力与借巧力" target="_blank">《开源框架那些事儿21》:巧借力与借巧力</a> <span class="text-muted">j2eetop</span> <a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a> <div>同样做前端UI,为什么有人花了一点力气,就可以做好?而有的人费尽全力,仍然错误百出?我们可以先看看几个故事。 故事1:巧借力,乌鸦也可以吃核桃 有一个盛产核桃的村子,每年秋末冬初,成群的乌鸦总会来到这里,到果园里捡拾那些被果农们遗落的核桃。 核桃仁虽然美味,但是外壳那么坚硬,乌鸦怎么才能吃到呢?原来乌鸦先把核桃叼起,然后飞到高高的树枝上,再将核桃摔下去,核桃落到坚硬的地面上,被撞破了,于是,</div> </li> <li><a href="/article/3256.htm" title="JQuery EasyUI 验证扩展" target="_blank">JQuery EasyUI 验证扩展</a> <span class="text-muted">可怜的猫</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/%E9%AA%8C%E8%AF%81/1.htm">验证</a> <div>  最近项目中用到了前端框架-- EasyUI,在做校验的时候会涉及到很多需要自定义的内容,现把常用的验证方式总结出来,留待后用。   以下内容只需要在公用js中添加即可。   使用类似于如下: <input class="easyui-textbox" name="mobile" id="mobile&</div> </li> <li><a href="/article/3383.htm" title="架构师之httpurlconnection----------读取和发送(流读取效率通用类)" target="_blank">架构师之httpurlconnection----------读取和发送(流读取效率通用类)</a> <span class="text-muted">nannan408</span> <div>1.前言.    如题. 2.代码. /* * Copyright (c) 2015, S.F. Express Inc. All rights reserved. */ package com.test.test.test.send; import java.io.IOException; import java.io.InputStream</div> </li> <li><a href="/article/3510.htm" title="Jquery性能优化" target="_blank">Jquery性能优化</a> <span class="text-muted">r361251</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a> <div>一、注意定义jQuery变量的时候添加var关键字 这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: $loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的 二、请使用一个var来定义变量 如果你使用多个变量的话,请如下方式定义: . 代码如下: var page </div> </li> <li><a href="/article/3637.htm" title="在eclipse项目中使用maven管理依赖" target="_blank">在eclipse项目中使用maven管理依赖</a> <span class="text-muted">tjj006</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>概览: 如何导入maven项目至eclipse中 建立自有Maven  Java类库服务器 建立符合maven代码库标准的自定义类库 Maven在管理Java类库方面有巨大的优势,像白衣所说就是非常“环保”。 我们平时用IDE开发都是把所需要的类库一股脑的全丢到项目目录下,然后全部添加到ide的构建路径中,如果用了SVN/CVS,这样会很容易就 把</div> </li> <li><a href="/article/3764.htm" title="中国天气网省市级联页面" target="_blank">中国天气网省市级联页面</a> <span class="text-muted">x125858805</span> <a class="tag" taget="_blank" href="/search/%E7%BA%A7%E8%81%94/1.htm">级联</a> <div>1、页面及级联js <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> &l</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>