【JSP+Servlet+Maven】——优质外卖订餐系统之概论部分
🎯绪论
😎前言
大家好!我是小夜,因为这学期学了JSP,最近在做一个jsp项目,最近更新不太频繁。接下来几周,我将把自己这一个的项目在这几周分批发在这个账号上面,刚学jsp的小伙伴,可以当作练手项目,大家关注一下吧!
😎研究背景
在快节奏的生活中,人们越来越倾向于选择外卖来解决日常餐饮需求。外卖订餐系统提供了一个便捷的平台,使用户能够随时随地浏览菜单、下单并享受快速的送餐服务。这一需求的增加推动了外卖订餐系统的发展。随着互联网的兴起,消费者越来越习惯于通过线上平台进行商品的浏览和购买,这种消费习惯的改变也影响了餐饮服务行业。外卖订餐系统作为连接商家与消费者的中间平台,得到了快速发展。技术的进步,尤其是大数据、移动支付和物流体系的完善,为外卖订餐系统的运营提供了强大的技术支持。这些技术的融合应用,不仅优化了用户体验,还提高了餐饮服务的效率和质量。
😎研究意义
市场需求:随着现代生活节奏的加快,人们越来越倾向于选择快捷、便利的餐饮服务,外卖成为了许多人日常饮食的重要部分。因此,研究并优化外卖订餐系统,可以更好地满足市场日益增长的需求。
用户体验:一个优秀的外卖订餐系统能够提供更加流畅和愉悦的用户体验,通过用户界面(UI)和用户体验(UX)设计的不断优化,吸引并保留更多的用户。
技术创新:研究外卖订餐系统,可以为技术创新提供舞台,如利用人工智能(AI)进行个性化推荐、使用大数据分析用户行为和消费模式等。
😎相关技术介绍
🎈JSP技术
JSP技术是一种动态网页开发技术,它允许在HTML页面中嵌入Java代码,从而实现动态内容的生成和业务逻辑的处理。
JSP由Sun Microsystems公司创建,是基于Java Servlet API的一种技术,主要用于简化服务器端的Web开发。当客户端请求一个JSP页面时,服务器将解析这个页面,执行其中的Java代码,并将结果嵌入到HTML中,然后返回给客户端。这一系列操作使得JSP能够高效地生成动态网页内容。
JSP的工作方式基于请求/应答模式。当一个JSP文件首次被请求时,JSP引擎会将它转换成一个Java源文件(servlet),然后将这个Java源文件编译成可快速执行的二进制代码。如果文件中没有语法错误,这些二进制代码将被执行以处理客户端的请求。这种转换和编译过程确保了JSP页面的快速响应和高效执行。
🎈MySql数据库技术
MySQL数据库技术是一种开源、跨平台的关系型数据库管理系统,具有高性能、高可靠性和易用性等特点。
MySQL由瑞典MySQL AB公司开发并于1995年发布第一个版本,现属于Oracle公司旗下产品。它采用客户端/服务器架构,并支持多个操作系统,包括Linux、Windows、macOS等。这种跨平台的特性使得MySQL在全球范围内广泛应用于各种应用程序,从小型个人项目到企业级应用系统。
MySQL以其开源、免费的特点著称。对于个人用户和部分商业用途,MySQL是可以免费使用的。其开源特性不仅降低了使用成本,还允许用户根据需要对源代码进行修改和定制。MySQL的这些特点使其成为不少开发者和企业的首选数据库管理系统。
🎈三层架构
三层架构通常指的是软件设计中的Controller、Service和DAO三个层次,它们在应用程序中各自承担不同的职责,相互协作以实现整体功能。
Controller层(控制层):Controller层是表现层,负责接收用户的输入,并将请求转发给相应的服务层处理,最后返回处理结果给用户。它位于架构的最前端,直接面对用户或外部请求,是系统与外界交互的窗口。控制层的主要任务是请求处理和数据转发,不包含业务逻辑,确保了用户接口的轻量化。例如,在一个Web应用中,Controller层接收来自网页表单或者移动端的请求,然后调用Service层进行进一步的业务处理。
Service层(业务逻辑层):Service层是业务逻辑层,封装了应用程序的核心业务逻辑。这一层承担着处理具体业务逻辑的任务,如用户的增删改查、发送验证码或邮件等。它解释用户的请求,执行必要的业务计算,调用数据访问层进行数据持久化操作,并返回执行结果。通过封装业务逻辑,Service层使得系统更加模块化,便于维护和复用。例如,在用户管理系统中,Service层会处理注册、登录等业务逻辑,调用DAO层来实现数据的存取。
DAO层(数据访问层):DAO层负责与数据库或其他持久化存储方式直接交互。它的主要职责是执行具体的数据库操作,如CRUD(增加、查询、更新和删除),并返回操作结果。通过抽象化数据访问,DAO层使得业务逻辑层与数据存储细节解耦,提高了系统的适应性和稳定性。
🎈MVC模式
MVC全名是Model View Controller,它用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC可用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使一个程序可以使用不同的表现形式。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。
🎈B/S模式
B/S模式,即浏览器/服务器模式,是一种网络架构模式,主要通过浏览器作为客户端访问服务器上的数据和服务。在这种模式下,用户只需拥有一个Web浏览器,就可以访问服务器上的资源,而无需安装任何专门的软件。这种架构模式简化了信息系统的部署和管理,提高了系统的可靠性和可扩展性,同时为用户提供了更加便捷的访问途径。
🎯需求分析
😎可行性分析
🎈技术可行性
JSP适用性:JSP是Java EE技术的一部分,适合用于创建动态网页和Web应用程序。它允许在HTML中嵌入Java代码,实现业务逻辑与页面显示的分离。虽然现代框架如Spring MVC等提供了更先进的开发方式,但JSP依然能够满足外卖订餐系统的基本需求。
数据库选择:根据系统需求,可以选择关系型数据库如MySQL、PostgreSQL或非关系型数据库如MongoDB。考虑到外卖系统的高并发和大数据量,一个具有良好索引和查询优化的数据库至关重要。
服务器要求:系统将运行在支持Java EE标准的Web服务器上,如Apache Tomcat。考虑到可能的用户并发访问量,服务器需要有足够的处理能力和内存来保证响应速度和稳定性。
模块化设计:采用模块化设计原则,将系统划分为用户管理、订单处理、支付流程、餐厅信息管理等独立模块,通过JSP和Servlet实现模块间的交互,提高系统的可维护性和扩展性。
前端技术:虽然JSP可以负责页面生成,但结合JavaScript框架如jQuery,可以提高用户界面的交互性。使用Ajax技术实现动态内容加载,提升用户体验。
🎈经济可行性
初始开发成本:这包括系统设计、编码实现、测试和部署的费用。使用JSP和数据库可能不需要大量的前期投资,因为这两者都是成熟的技术,有许多免费和开源的资源可供利用。然而,根据系统的复杂度和功能要求,可能需要聘请经验丰富的开发人员,这可能会增加成本。
硬件与服务器成本:系统运行需要服务器支持,可以选择云服务或自行搭建服务器。云服务虽然提供灵活性和可扩展性,但长期来看可能会有更高的运营成本。自建服务器则需要一次性的硬件投资和维护费用。
维护与更新成本:系统上线后,需要定期进行维护和更新,以保证软件的稳定性和安全性。这涉及到对软硬件的持续投资,包括服务器费用、人员工资、软件升级等。
市场需求分析:外卖市场的增长趋势表明,用户对于便捷订餐的需求强烈。一个优化良好的外卖订餐系统有望吸引大量用户,尤其是如果它能提供独特的功能或更好的用户体验。
收益模式:系统可以通过多种方式实现盈利,如向餐馆收取平台使用费、订单抽成、广告收入或提供增值服务。收益的具体模式取决于市场定位和目标用户群。
竞争分析:市场上已有多个成熟的外卖订餐服务平台,新系统需要在特色服务、用户体验或价格上具有竞争优势才能获得市场份额。
😎功能需求分析
优选外卖订餐系统应该包括九种模块。属于用户的模块有登入模块、注册模块、注销模块、餐品展示模块、分类模块、购物车模块。属于商家的模块有登入模块、注销模块、餐品展示模块、热卖餐品模块、添加模块、出售车模块。优选外卖订餐系统用例图如图所示。
🎈用户模块
- 登入模块:用于校验用户信息,用户选择身份后,在客户端输入账户名和密码,进行登入,客户端会将用户输入的账户名和密码发送至服务器端,服务器会将客户端发送回来的数据与数据库中的数据进行比较,若发现是数据库中的数据,则返回到客户端,将页面跳转到登入后的主页面;若没有在数据库中找到用户的数据,则将错误信息返回至客户端,并要求用户重新输入。登入用例图如图。
- 注册模块:用户选择功能,并输入账户名,和两次密码,确定提交后,客户端先判断两次密码是否一样,若不同,拦截发往服务器端的请求,并展示两次密码不同的信息;若两次密码相同,则将信息添加到数据库中,并返回客户端,跳转到登入界面,进行登入。注册模块如图。
- 注销模块:用户点击注销按钮,清除Session中的用户登入信息。注销模块如图
- 餐品展示模块:用户登入后,进入餐品展示页面,在餐品展示页面,可以看到服务器传到客户端的数据库中的餐品数据。餐品展示模块用例图。
- 分类模块:用户登入后,可以选择不同的店铺进入购买,在不同的店铺中,也有不同的分类供用户选择。分类模块用例图。
- 购物车模块:用户进入店铺后,可以对商品可以进行购买,进入购物车模块后,可以对购买后的商品进行取消。购物车模块用例图如图所示。
🎈商家模块
- 登入模块:用于校验用户信息,商家选择身份后,在客户端输入账户名和密码,进行登入,客户端会将用户输入的账户名和密码发送至服务器端,服务器会将客户端发送回来的数据与数据库中的数据进行比较,若发现是数据库中的数据,则返回到客户端,将页面跳转到登入后的主页面;若没有在数据库中找到商家的数据,则将错误信息返回至客户端,并要求用户重新输入。登入用例图如图。
- 注销模块:商家点击注销按钮,清除Session中的商家登入信息。注销模块如图。
- 餐品展示模块:商家登入后,进入自己店铺的餐品展示页面,在餐品展示页面,可以看到服务器传到客户端的数据库中的餐品数据。餐品展示模块用例图。
- 热卖餐品模块:商家登入后,可以查看热卖餐品。热卖餐品模块用例图。
- 添加模块:商家登入后,可以对本店铺的餐品进行添加。添加模块用例图。
- 出售车模块:商家可以通过出售车模块查看用户在本店铺购买的餐品,并且可以发货。出售车模块用例图。
🎯概要设计
😎系统总体结构与功能
🎈系统设计方法三原则
一、模块化设计
定义与目的:模块化设计是指将系统分解为独立但协作的模块或组件。每个模块负责一部分独立的功能,易于理解、开发和维护。
低耦合性和高内聚性:有效的模块化要求模块之间具有低耦合性(减少相互依赖),而模块内部则具有高内聚性(紧密相关的功能聚集在一起)。这样可以降低修改和扩展的成本,提升系统的灵活性和可维护性。
重用与标准化:模块化设计促进代码重用,减少了开发时间和成本。同时,采用标准化的接口和协议可以确保不同模块间的兼容性,提高整体系统的稳定性。
二、抽象化设计
定义与目的:抽象化设计是通过隐藏复杂性的处理,只展示给使用者必要的信息和操作。它简化了系统设计与使用,让开发者和用户不需要关心不必要的细节。
层次化抽象:系统设计应该建立在不同的抽象层次上,每一层提供一组服务给上一层,同时隐藏其下层的实现细节。这种分层的方式有助于管理复杂性,并允许每一层独立变化而不影响到其他层。
数据抽象和封装:面向对象设计中的数据抽象允许将数据和操作数据的方法封装为对象。这提高了代码的可读性和可维护性,并减少了代码间的错误交互。
三、逐步精细化
定义与目的:逐步精细化是指在系统设计过程中,从高层的概要设计开始,逐步细化到具体的实现细节。这种方法有助于逐步理清思路,系统地解决问题。
迭代和增量开发:采用迭代和增量的开发模式,将系统分成多个小部分,逐步构建和测试每一部分,最终整合成完整的系统。这有利于管理项目进度,及早发现并修复问题。
用户参与和反馈:在逐步精细化的过程中,持续的用户参与和反馈至关重要。它可以确保系统设计符合用户需求,及时调整方向,提升用户满意度。
🎈系统的模块设计
经过分析,优选外卖订餐系统应该包括九种模块。属于用户的模块有登入模块、注册模块、注销模块、餐品展示模块、分类模块、购物车模块。属于商家的模块有登入模块、注销模块、餐品展示模块、热卖餐品模块、添加模块、出售车模块。模块总体结构图。
😎系统流程图
😎数据库设计
🎈数据库设计原则
设计开发一个冗余较小、结构合理的数据库,在设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称之为范式。本次数据库设计满足数据库设计的三大范式。
第一范式(确保每列保持原子性)
第一范式是最基本的范式。要求每张数据库表中的所有的字段都是不可拆解的原子,这才能证明该数据库表满足了第一范式。如何合理的遵循第一范式,是需要依据系统的现实需求来敲定的。比如数据库系统中需要用到“地理位置”这个字段,原本只需“地理位置”属性设计成数据库表的一个字段就行。但是假如某个系统需要经常去数据库中获取“地理位置”属性中的“城市”名字那部分,根据第一范式,就必须要把“地理位置”这个字段重新拆分为省份、城市、详细地址等多个字段进行存储,这样在对地址中某一部分进行操作的时候将非常方便。
第二范式(确保表中的每列都和主键相关)
第二范式是对第一范式的基础之上的进化、升华。第二范式要求保障一个数据库表中的每列都与主键相干,而且不能只和主键的某一部分相关(主要针对的是就联合主键而言)。换句话说在,一个表中只能存储一种或者一类数据,不能够在同一张数据库表中存储多种数据。
第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式要求确保数据表中的每一列数据都与主键直接有关系,而不是间接有关系。如在设计数据表时的时候,需要将客户id作为一个外关键,来和订单表来建立相应的关系,而不是在订单表中直接添加到其他客户信息的。
🎈E-R图
🎈数据库设计
设计本系统数据库采用Mysql,根据ER图的分析,系统共设计使用6张表,分别是以下是设计的本系统所需要的表设计。
area表是表示店铺地址的。详情见表1。
表1 area表
序号 |
列名 |
数据类型 |
长度 |
主键 |
说明 |
1 |
aid |
int |
|
是 |
地区id |
2 |
aname |
varchar |
100 |
|
地区名称 |
car表是用来表示购物车信息的,详情见表2。
表2 car表
序号 |
列名 |
数据类型 |
长度 |
主键 |
说明 |
1 |
cid |
int |
|
是 |
购物车id |
2 |
cname |
varchar |
1000 |
|
菜品名 |
3 |
cstate |
int |
|
|
购物车状态 |
4 |
cprice |
int |
|
|
单价 |
5 |
cfid |
int |
|
|
餐品id |
6 |
cuid |
int |
|
|
用户id |
7 |
cdid |
int |
|
|
店铺id |
dianpu表是用来存储店铺信息的,详情见表3。
表3 dianpu表
序号 |
列名 |
数据类型 |
长度 |
主键 |
说明 |
1 |
did |
int |
|
是 |
店铺id |
2 |
dname |
varchar |
1000 |
|
店名 |
3 |
dareaid |
int |
|
|
所在区域id |
food表是用来存储店铺中的餐品信息的,详情见表4。
表4 food表
序号 |
列名 |
数据类型 |
长度 |
主键 |
说明 |
1 |
fid |
int |
|
是 |
餐品id |
2 |
fname |
varchar |
100 |
|
餐品名 |
3 |
fcount |
int |
|
|
购买人数 |
4 |
fprice |
int |
|
|
单价 |
5 |
fdianid |
int |
|
|
店铺id |
6 |
fstate |
int |
|
|
状态 |
shangjia表是用来存储商家信息的,详情见表5。
表5 shangjia表
序号 |
列名 |
数据类型 |
长度 |
主键 |
说明 |
1 |
sid |
int |
|
是 |
商家id |
2 |
sname |
varchar |
1000 |
|
商家名称 |
3 |
password |
varchar |
1000 |
|
登入密码 |
4 |
sdianid |
int |
|
|
店铺id |
user表是用来存储用户信息的,详情见表6。
表6 user表
序号 |
列名 |
数据类型 |
长度 |
主键 |
说明 |
1 |
uid |
int |
|
是 |
用户id |
2 |
uname |
varchar |
100 |
|
用户名称 |
3 |
password |
varchar |
100 |
|
用户密码 |
🎯详细设计与实现
😎优质外卖订餐系统的登入界面
登入页面。如图所示:
😎商家主界面
🎈主界面
在主界面中,有一系列功能的展示。如图所示:
🎈修改餐品界面
点击修改,修改餐品界面展示,如图所示:
🎈添加餐品界面
点击添加餐品,此界面用于添加餐品。如图所示:
🎈热卖餐品页面
在此页是热卖的餐品。如图所示:
🎈出售车界面
点击出售车,跳转到出售车界面,商家可发货。如图所示:
😎 用户主界面
🎈 用户注册界面
用于用户注册。如图所示:
🎈 主界面
在主界面中,有一系列功能的展示。如图所示:
🎈餐品分类界面
点击左边栏,查看分类展示,如图所示:
🎈购物车界面
点击购物车,进行购物车展示。如图所示:
欢迎大家点赞、评论加关注哟!!!
- 点赞
- 收藏
- 关注作者
评论(0)