产品经理所需要掌握的专业技术有以下内容:
毕设如果确定选题之后,就要写完整的开题报告,后期还有论文。
开题报告包括的课题背景、意义、调研资料也就对应了产品技术中的市场、用户、需求。
研究方法对应了产品技术中的业务、架构、流程、结构、功能、逻辑。
因为开题报告ddl的时间比较急,所以现在我们先来学习这一块的知识。
知识点之名词「业务」:
梳理软件的业务是确保你对项目的理解和规划非常重要的一步。以下是一个简单的指南,帮助你梳理小程序的业务:
1. 明确项目目标: 开始时,明确小程序的目标。你的小程序是为了解决什么问题,服务于什么用户,提供什么价值?这有助于你在业务规划中保持焦点。
我个人的理解:
从「明确项目目标」这一点我的理解是:我的小程序是为了解决大众对北京胡同文化不了解,想要通过游览来加深了解,但是又不知道该怎么玩,并且北京二环内的交通不太便利,在胡同停车是个难题,还有就是北京胡同里的美食也不常被人了解,对于北京官方旅游、商家来说,是他们增加游客量,提升旅行收入很好的一个工具。同时也宣传了北京的胡同文化。对于游客来说,这样导览类的软件也帮助人们更开心、更高质量的游览了。
总而言之,这个小程序包括文化传承、交通问题、美食推广、官方旅游推广以及游客体验。
项目目标:
你的小程序旨在通过个性化的导览服务,解决北京胡同文化认知不足、游览不便的问题,同时推广美食、解决停车难题,为游客提供便捷、愉悦的旅游体验,同时为商家和官方提供有效的宣传平台。通过这一系列目标,小程序促进了胡同文化传播和北京旅游业的繁荣。
2、明确目标用户: 进一步定义你的目标用户。他们是哪些人?年龄段、兴趣爱好、地理位置等方面的信息。等方面的信息,有助于你更有针对性地设计功能和提供服务。
-
游客类型:
- 文化追求者: 对历史、传统文化和胡同有浓厚兴趣的游客。
- 美食探险家: 喜欢尝试当地美食的游客。
- 自由行者: 喜欢自由安排行程,寻找个性化、非传统旅游体验的游客。
- 商务旅行者: 因公务来到北京,有短暂休息时间的游客。
-
兴趣和活动:
- 文化爱好者: 喜欢参观博物馆、历史古迹的人。
- 摄影爱好者: 爱好摄影,寻找拍摄胡同风光的人。
- 美食爱好者: 关注当地特色美食,喜欢在旅行中品尝不同口味的人。
-
旅行习惯:
- 独自旅行者: 喜欢独自探索,享受独特体验的人。
- 家庭游客: 与家人一起旅行的人,关心家庭友好的旅游体验。
- 朋友小团体: 喜欢和朋友一起组成小团体,共同体验的人。
-
交通和便利性:
- 自驾游客: 自驾车来到北京,关心停车问题的人。
- 公共交通使用者: 习惯使用公共交通工具,对于如何在胡同内方便出行感兴趣的人。
-
数字化程度:
- 数字本地人: 习惯使用智能手机和数字服务,愿意通过应用解决旅行中的问题的人。
- 传统游客: 喜欢传统旅游方式,可能对于数字服务的接受度较低的人。
-
需求和痛点:
- 寻找导览: 需要一个清晰的胡同导览,帮助他们更好地了解胡同文化。
- 解决停车问题: 关心在胡同停车的问题,寻找解决方案的人。
- 寻找美食: 对于在胡同内找到特色美食有浓厚兴趣的人。
3.列举主要功能
-
用户偏好选择模块: 允许用户设定个性化偏好,如历史、美食、停车需求等。
-
路线生成模块: 根据用户选择的偏好生成个性化的游览路线。
-
景点信息展示模块: 提供胡同景点的详细信息、历史文化解说等。
-
停车场信息模块: 展示周边停车场的位置、空位情况,并支持预约功能。
-
餐厅信息模块: 展示胡同周边餐厅的详细信息、菜单,并支持预订和点餐。
-
个人中心模块: 用户可以查看个人信息、历史路线、评价等。
-
评价建议模块: 允许用户对景点、餐厅、停车场进行评价和提出建议。
-
后台管理系统: 用于管理用户信息、胡同数据、停车场、餐厅信息等,提供日志记录等功能。
这些功能模块旨在提供全面的导览服务,解决用户在胡同游览中可能遇到的各类问题,使其旅游体验更加便捷和愉悦。
4.确定业务流程:
对每个主要功能模块,定义用户和系统之间的业务流程。考虑用户如何与你的小程序交互,从开始到结束的整个流程是什么样的。
我的思路是根据刚刚咱们划分的用户画像的不同,比如文化爱好者,北京胡同内本来就历史比较悠久,在对二环内的胡同进行调研,哪一块有哪些有历史知识的都进行一个信息整合,然后把地图上把有历史点的地点进行一个标注,在进入小程序时,选择游览偏好:文化/历史,就生成路线1/路线2/路线3等等,比如路线1,在这一条路线上,有哪些景点,有哪些停车场信息,哪些餐厅信息,都生成在路线1方案里。 如果你是美食爱好者,那么给你推荐的路线就偏向于以餐厅为重的路线,在这条路线上有哪些餐厅,停车场,景点之类的信息。
产品结构
5.定义核心特色、分析竞争对手: 仔细考虑你的小程序在胡同导览领域的核心特色是什么。这有助于你在推广和用户沟通中明确你的优势。
4.思考商业模式: 考虑项目的商业模式,尤其是与官方旅游、商家的合作方式,以及可能的盈利点。这对于项目的可持续性很关键。
5.用户体验设计: 以用户为中心,思考如何设计用户体验,使得用户在使用你的小程序时感到愉悦、方便,同时能够达到他们的期望和需求。
6.推广和营销策略: 考虑如何推广你的小程序,吸引更多的用户。可以考虑与旅游机构、酒店、餐厅等合作,制定一些创新的推广策略。
7.监测和反馈机制: 设计一个有效的监测和反馈机制,通过用户反馈和分析数据,不断优化你的小程序,确保它能够持续满足用户的需求。
二、产品概念之名词「架构」
谈论一个软件系统的架构时,我们关注的是系统的组织结构、组件之间的关系以及它们如何协同工作来实现系统的功能。架构是软件开发的基础,决定了系统的可维护性、可扩展性和性能等方面。
因为我是前端程序员,我对后端完全不懂,我现在写这个小程序的逻辑就是因为二环内的胡同的信息它是有限的,历史、餐厅、停车场都是有限的,写好了基本就是固定的,然后路线我想的是根据选择侧重不同选择的路线它就是写死的。然后接口这一块,微信小程序开发里面现在有云开发,可以可视化创建后端接口,不需要再重新去系统完整地去学习后端开发的知识。我需要什么接口,直接使用云开发来可视化创建这个接口,我前端再调用。我对数据库的知识也完全不懂,但是我理解数据库这一块就是说,历史知识是一个数据库,然后里面有历史名字,内容这些参数。对不对,比如说前端的历史相关的页面需要哪些内容,这些内容的就是数据库的组成内容。对不对。此外我对算法和数据处理,机器学习模型不懂,技术上也不是特别成熟,所以智能推荐这一块我暂时也实现不了。
网站系统的技术架构可以从两个维度做分层。
1、按SaaS、PaaS、LaaS分层
SaaS层指的是服务层,即开发团队开发的部分,即前端、后端、云计算服务软件等。
PaaS层指的是平台层,就是现成的软件,包括数据库、分布式文件系统、tomcat、nginx。
IaaS层指的是基础设施层,也就是硬件部分,包括服务器、网络设备、存储设备等。
2、按前端、后端、云计算服务分层
也就是对SaaS进一步分层。
前端指的是视图层。包括pc网页、手机网页、app等。
后端指的是业务处理层,一般是API接口,处理的是业务请求,比如数据库的增删改查。
云计算服务处理的是运行时间比较长的任务,一般受后端软件调度,比如视频转码、智能审核。云计算服务可能是第三方云计算平台提供的,也可能是资深团队开发的。
一个完整的架构其实就是把上述提到的两种分层合并起来:
一般大型的网站部署分为以下部分:
集群:多个服务器提供相同的功能,集群是为了降低单台服务器的压力和突破单台服务器的性能极限。
前端服务器包含两个部分:
1、web服务器软件:Nginx、Apache等
其作用是接收到请求后,在磁盘上找到对应的网页资源文件,并将其发送给请求端。
2、网页资源文件:
指的是网页的静态资源文件,包括html、css、js、图文文件、视频文件等 ,其中一部分网页资源文件(比如上传的头像、视频)会存在单独的文件服务器当中。
对于前端服务器集群而言,前面需要增加负载均衡以分发请求,负载均衡可以是自己搭建的服务器(nginx),或者是购买的云服务,在负载均衡前面需要增加CDN(缓存网页资源文件)服务,是为了加速网页资源文件的下载速度。
单个后端服务器一般包含两个部分
1、web应用服务器软件
根据不同的开发语言是有区别的,例如java一般是tomcat或jetty。其作用是接收到请求后,调用对应的后端应用程序,并把后端应用程序处理的结果返回给请求端。
2、后端应用程序
后端应用程序是真正处理请求的程序,java便携的话一般是以.war结尾的文件。
后端应用程序在网站系统中处于“司令塔”的位置,会调用很多第三方软件,比如数据库、非关系型数据库(如redis)、消息队列、第三方云计算服务等。
而且后端应用程序还会操作共享文件,如上传头像、视频等。
对于后端服务器集群而言,前面需要增加负载均衡以分发请求,而负载均衡可以与前端服务共用,其结构因具体实现方式而议。
云计算服务:
工作原理是后端应用程序向消息队列(RabbitMQ)下发任务,云计算服务软件监听消息队列并执行任务,云计算服务集群一般是监听同一个消息队列,以抢占的方式获取任务。
存储部分和第三方云计算服务部分:
1、存储部分包括数据库、文件服务器、非关系型数据库等,这些软件会提供自己的集群方式。
2、第三方云计算部分:
一般是通过调用API,在决定使用某个服务之前,除了明确功能点以外,还需要明确其是否能承受当前系统的使用量。
本小程序技术选型:
前端工程化基建和架构设计入门
后端架构入门:
数据库知识入门:
数据库是一个可以存储和组织数据的地方,就像一个巨大的电子文件夹。在你的小程序中,你可以将所有的数据都保存在一个数据库中。
像历史文化、餐厅、停车场所产生并需要存储的数据,相应功能板块里的数据可以存在一起,这个数据集合可以被看作是数据库中的一张表。这些表就像是文件夹里的文件,用来存储相似类型的数据。
每个表里都有字段,比如停车场表里可能有字段包括停车场的名称、地理位置、停车位容量等等。这样,当用户在小程序中进行操作,比如查看停车场信息,小程序就会去相应的表中查找和显示相关的数据。
数据库基本概念:
-
表:
- 表是数据库中的基本存储单位,每个表存储一种类型的数据。在你的情况下,分别有历史文化表、餐厅表和停车场表。
-
字段:
- 每个表包含若干字段,用于存储具体的数据。例如,历史文化表中的字段包括 ID、Name、Description、Location 等。
-
唯一标识符 (
ID
):- 用于唯一标识表中的每个记录,确保每个记录都有独特的标识。
-
关系:
- 不同表之间可以建立关系,以便在需要时检索相关数据。在你的情况下,可能需要路线表与历史文化、餐厅和停车场表建立关系。
-
云函数:
- 用于执行后端逻辑,与数据库交互,并通过前端调用获取所需的信息。
数据库分为关系型数据库,即多用二维表来表示数据之间的联系,不同的表通过关联字段来建立联系,这种关联关系就是关系型数据库管理系统的特点,常见的关系型管理系统软件有mysql、oracle、postgre。
与之对应的就是非关系型数据库(Not Only SQL):是对关系型数据库管理系统的补充和扩展。
像短视频、地理位置等这些数据类型复杂,所以就出现了非关系型数据库管理系统。比如redis、mongoDB等。
SQL:sql是一种用来操作关系型数据库的语言。
以mysql为例,在mac上,推荐在终端安装和操作。
除了自带的命令行客户端之外,mysql还提供了一个可视化的图形化GUI工具:MySQL Workbench,除外官方工具,还有DBeaver、Navicat等等。
1、您可以直接在终端进行开启mysql的服务,并且连接到这个服务器。
2、您可以使用GUI工具连接到你本地的数据库,并且进行可视化操作。
而不同的功能板块之间的数据可能会有影响/联系。
在数据库设计中,表与表之间的关系描述了不同数据实体之间的联系和互动。这些关系可以帮助你更有效地组织和检索数据。以下是几种常见的表与表之间的关系:
-
一对一关系 (One-to-One Relationship):
- 这种关系表示两个表中的每个记录都只与另一个表中的一个记录关联。例如,一个人可能只有一个身份证号,而每个身份证号只属于一个人。
-
一对多关系 (One-to-Many Relationship):
- 这种关系表示一个表中的记录可以关联到另一个表中的多个记录。例如,一个学生可以有多个成绩记录,但每个成绩记录只属于一个学生。
-
多对一关系 (Many-to-One Relationship):
- 这种关系是一对多关系的反向,表示多个表中的记录可以关联到另一个表中的一个记录。例如,多个订单可以属于同一个客户。
-
多对多关系 (Many-to-Many Relationship):
- 这种关系表示两个表中的记录可以互相关联,每个记录在另一个表中都有多个相关记录。例如,学生和课程之间的关系,一个学生可以选择多门课程,而一门课程也可以被多个学生选择。
如何建立表之间的关系:
在关系型数据库中,表之间的关系通常通过在表中使用共同的字段来建立。这个共同的字段通常是一个唯一标识符,如ID。这个字段在两个表中都存在,通过它可以实现关联。
例如,在你的小程序中,如果有一个表存储停车场信息,另一个表存储用户生成的路线信息,可以通过共同的字段(比如停车场ID)将这两个表关联起来。这样,当你查询用户生成的路线时,可以通过停车场ID找到相关的停车场信息。
这种关系的建立可以提高数据的一致性和可维护性,同时也使得数据库更加灵活和高效。
表与表之间的关系在数据库设计中起到非常重要的作用,它们能够帮助你更好地组织和管理数据。以下是一些实际应用场景,展示了表之间关系的用途:
-
电子商务平台:
- 场景: 在一个电子商务平台中,可以有一个存储用户信息的表,另一个存储订单信息的表。这两个表可以通过用户ID建立一对多的关系,即一个用户可以有多个订单。这有助于在查询时轻松地获取一个用户的所有订单信息。
-
学生选课系统:
- 场景: 在学生选课系统中,可以有一个表存储学生信息,另一个表存储课程信息。通过建立一个中间表,存储学生ID和课程ID的对应关系,实现多对多的关系。这样,一个学生可以选择多门课程,一门课程也可以被多个学生选择。
以电子商务平台为例,我们演示一下后端是如何连接到数据库的:
后端的技术栈以Java+Spring boot为例。
步骤概述:
-
在终端配置 MySQL: 你已经在终端中配置好了 MySQL,确保 MySQL 服务器正在运行,并且你知道数据库的用户名和密码。
-
创建数据库和表: 使用 SQL 语句在终端中创建数据库和表。比如:
CREATE DATABASE my_database; USE my_database; CREATE TABLE user ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255), email VARCHAR(255) );
-
后端连接数据库: 在后端项目中,使用 Spring Boot、Spring Data JPA 和 Hibernate 连接到 MySQL 数据库。
后端连接数据库的详细步骤:
步骤 1: 创建 Spring Boot 项目、引入数据库依赖:
使用你喜欢的 IDE(如 IntelliJ IDEA 或 Eclipse)创建一个新的 Spring Boot 项目。确保项目中包含以下依赖:
<!-- pom.xml -->
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version> <!-- 请根据实际情况调整版本号 -->
</dependency>
</dependencies>
步骤 2: 配置数据库连接信息
在 src/main/resources/application.yml
(或 application.properties
)中配置数据库连接信息:
# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/my_database
username: your_mysql_username
password: your_mysql_password
jpa:
hibernate:
ddl-auto: update
show-sql: true
确保替换 my_database
、your_mysql_username
和 your_mysql_password
为你实际使用的数据库名称、用户名和密码。
步骤 3: 创建实体类
在后端项目中,定义与数据库表对应的实体类。这些实体类通常使用JPA注解进行标识。创建一个简单的实体类,例如 User
:
// User.java
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
// Getters and setters
}
步骤 4: 创建 UserRepository
创建一个接口扩展 JpaRepository
,用于处理对用户实体的数据库操作、对数据库表进行CRUD操作。:
// UserRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
步骤 5: 创建控制器、在服务层使用Repository:
创建一个控制器类,处理 HTTP 请求, 在服务层的服务类中注入相应的Repository接口,并使用它来进行数据库操作。
// UserController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping
public List<User> getAllUsers() {
return userRepository.findAll();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userRepository.save(user);
}
}
在一个Web应用中,控制器是用于处理用户请求的组件。控制器的作用是接收来自前端的HTTP请求,执行相应的业务逻辑,并返回适当的响应给前端。在Spring框架中,使用@Controller
或@RestController
注解的类通常充当控制器的角色。
在我们的例子中,创建UserController
控制器的目的是处理与用户相关的HTTP请求。具体来说:
-
@RestController
注解: 表明这个类是一个控制器,并且它的每个方法的返回值都会被直接转换为HTTP响应体。这使得编写RESTful API变得更加简单。 -
@RequestMapping("/api/users")
注解: 定义了这个控制器处理的HTTP请求路径。在这个例子中,所有与用户相关的请求都应该以/api/users
开头。 -
@Autowired private UserRepository userRepository;
: 注入了UserRepository
,这样控制器就可以使用它来执行数据库操作。UserRepository
是一个Spring Data JPA提供的接口,它包含了许多用于操作数据库的方法。 -
@GetMapping
和@PostMapping
注解: 定义了处理HTTP GET 和 POST 请求的方法。在这个例子中,getAllUsers
方法处理获取所有用户的请求,而createUser
方法处理创建新用户的请求。 -
@RequestBody
注解: 用于将HTTP请求的JSON数据映射到User
对象。在createUser
方法中,我们通过这个注解接收前端传来的用户信息。
通过创建这个控制器,我们实现了一个简单的RESTful API,使得前端可以通过发送HTTP请求与后端进行交互。例如,前端可以通过发送GET请求到 /api/users
获取所有用户的信息,或者通过发送POST请求到 /api/users
创建一个新的用户。控制器负责接收这些请求,并调用相应的服务(在这个例子中是UserRepository
)来处理业务逻辑。
步骤 6: 运行项目
运行你的 Spring Boot 项目。Spring Boot 将会启动,并尝试连接到配置的 MySQL 数据库。
现在,你的后端应用程序已经连接到了 MySQL 数据库,并且可以通过 /api/users
路径处理用户数据的请求。
ps:后端你需要了解的一些概念:
在后端开发中,有一些基础概念和组件,你可能需要了解一下:
服务层(Service Layer):
- 服务层是后端应用中的一个组件,负责处理业务逻辑。它包含了应用中的核心业务逻辑,独立于数据访问层和表示层(通常是控制器)。
- 服务层的主要作用是将控制器(或其他调用者)的请求转化为对数据访问层的调用,并执行业务逻辑。
- 服务层提供了应用程序中各种业务操作的接口,例如创建用户、处理订单、计算总额等。
数据访问层(Data A***ess Layer):
- 数据访问层是与数据存储交互的组件,通常涉及数据库的读取和写入。
- 在典型的Java应用中,数据访问层使用ORM(对象关系映射)框架,将数据库表映射到实体类,通过实体类与数据库进行交互。
实体类(Entity Class):
- 实体类是应用程序中与数据库表相对应的类。它包含了表中的字段,并提供了与数据库交互的方法。
- 在ORM框架中,实体类的对象通常表示数据库表中的一行数据。
Repository模式:
- Repository 模式是一种设计模式,用于封装数据访问层的逻辑。在后端开发中,它通常用于封装对数据库的操作。
- Repository 接口提供了对实体的持久化操作,例如查询、插入、更新、删除等。
控制器(Controller):
- 控制器是 MVC(模型-视图-控制器)架构中的组件之一,负责接收用户的请求并根据请求调用相应的服务层方法。
- 控制器处理请求、验证输入,然后调用服务层处理业务逻辑,最终返回响应给客户端。
数据库设计入门:
数据库是大多数业务系统的核心。
数据库设计没有必要一次性设计的非常全面,开发过程中难免会有删减,只要骨架没有问题即可。
数据库设计是后端部分需求转化的过程(一般的业务系统),好比原型设计是前端部分的需求转化过程一样。
通过数据库分库分表,就能大概地描绘出后端功能的结构,如果后端开发人员跳过了数据库设计,就必然会出现分不清功能的情况,只能根据页面原型去猜测需要哪些接口,这种看到一个功能开发一个接口的工作模式,先不提代码写的如何,大多数情况下会出现开发进度不可控,开发多余接口,漏写接口等问题,所以说掌握数据库设计是每个后端程序员都必会的。
数据库设计一般是这样:
1、分库
一是为了降低单个数据库中数据表的复杂度。
二是为了后续扩展服务器市,更有针对性地扩展(只扩展请求压力比较大的部分)
分库的原则:
每个子系统对应一个数据库即可,以下图为例:
用户系统、博客系统、商城系统、流程系统都有自己独立的数据库。
而系统划分更多的是根据业务架构而定。
业务架构入门:
1、大体上的功能结构
主要分为三部分:即展示端、平台划分、角色划分。
展示端:即你做的这个项目它最终在哪些端口使用。比如pc网页、手机网页、手机app。
平台:平台指的是网站前台、管理后台。
角色划分:即这个项目它可以有多少个角色。
参考下图,另外功能模块的划分不需要考虑程序是如何实现的
咱们这个小程序:
下面是微信小程序端和web后台管理端口可能包含的功能模块的整理表格:
小程序端:
web后台管理平台端:
角色划分:
小程序端:
-
游客/用户: 小程序的普通使用者,可以浏览景点、查看路线、使用停车场和餐厅功能等。
Web后台管理系统:
-
系统管理员: 负责整个系统的管理和配置,拥有最高权限,可以对所有内容进行修改、添加、删除。
-
景点管理员: 管理和维护历史点的信息,包括添加新的历史点、更新历史点的详细信息等。
-
停车场管理员: 负责管理停车场的信息,包括更新停车场余位信息、处理停车场的相关事务等。
-
餐厅管理员: 管理和维护餐厅的信息,包括更新餐厅菜单、处理餐厅的相关事务等。
-
路线管理员: 管理和维护不同路线的信息,可以更新路线的景点、停车场、餐厅等内容。
2、核心的业务逻辑
然后确定核心业务逻辑:核心业务逻辑是对功能模块结构的补充:
我们这个小程序的核心业务逻辑流程图:
核心业务逻辑需要表达出每个功能模块主要的工作流程以及模块间的关系。
核心业务逻辑图体现的是谁在什么平台,操作了什么资料。
例图:
(这个图我是描述了我的业务逻辑之后用chatgpt在draw.io这个平台用mermaid语言自动生成的。不得不说非常牛逼)
完善的业务架构可以让产品的逻辑变得更加清晰,使得项目过程变得更加流畅。不仅能节省需求遗漏和需求频繁变动带来的成本浪费,也对后续的技术架构设计、开发计划排期带来指导性意见。
2、分表
更多是按照当前模块的业务功能而定。
咱们这个小程序的主流程是:
1、“用户”选择偏好
2、生成路线
3、这条路线上的停车场可以预约,餐厅可以预订。
小程序端口的表:
-
用户表(User):
- 存储用户的基本信息,如用户ID、用户名、密码(经过加密处理)、偏好设置等。
-
偏好选择表(Preference):
- 记录用户的偏好选择,可能包括景点主题、美食口味等。
-
生成路线表(Route):
- 记录生成的路线信息,包括路线ID、景点列表、停车场、餐厅等。
-
景点信息表(ScenicSpot):
- 存储景点的详细信息,包括景点ID、名称、历史讲解、位置信息等。
-
文字历史讲解表(HistoryDescription):
- 记录景点的文字历史讲解,与景点信息表关联。
-
停车场信息表(ParkingLot):
- 记录停车场的信息,包括停车场ID、位置、可预约状态等。
-
餐厅信息表(Restaurant):
- 存储餐厅的详细信息,包括餐厅ID、名称、菜单、可预约点餐状态等。
-
餐厅预约记录表(RestaurantReservation):
- 记录用户对餐厅的预约信息,包括预约ID、用户ID、预约时间、预约餐厅等。
-
停车场预约记录表(ParkingLotReservation):
- 记录用户对停车场的预约信息,包括预约ID、用户ID、预约时间、预约停车场等。
字段设计:
-
用户表(User):
- 用户ID(UserID)
- 用户名(Username)
- 密码(Password)
- 偏好设置(Preferences)
-
偏好选择表(Preference):
- 偏好ID(PreferenceID)
- 用户ID(UserID)
- 景点主题(ScenicTheme)
- 美食口味(CuisinePreference)
- 其他偏好(OtherPreferences)
-
生成路线表(Route):
- 路线ID(RouteID)
- 用户ID(UserID)
- 路线信息(RouteInfo)
-
景点信息表(ScenicSpot):
- 景点ID(ScenicSpotID)
- 景点名称(ScenicSpotName)
- 历史讲解(HistoryDescription)
- 位置信息(Location)
-
文字历史讲解表(HistoryDescription):
- 讲解ID(DescriptionID)
- 景点ID(ScenicSpotID)
- 讲解内容(DescriptionContent)
-
停车场信息表(ParkingLot):
- 停车场ID(ParkingLotID)
- 位置(Location)
- 可预约状态(ReservationStatus)
-
餐厅信息表(Restaurant):
- 餐厅ID(RestaurantID)
- 餐厅名称(RestaurantName)
- 菜单(Menu)
- 可预约点餐状态(ReservationStatus)
-
餐厅预约记录表(RestaurantReservation):
- 预约ID(ReservationID)
- 用户ID(UserID)
- 预约时间(ReservationTime)
- 预约餐厅ID(RestaurantID)
-
停车场预约记录表(ParkingLotReservation):
- 预约ID(ReservationID)
- 用户ID(UserID)
- 预约时间(ReservationTime)
- 预约停车场ID(ParkingLotID)
web后台管理系统端口:
为了支持Web后台管理系统,可能需要额外的表格来管理系统的配置、用户权限等。以下是一些可能需要的表格,具体视系统需求而定:
-
用户表(User): 存储后台管理系统的用户信息,包括用户ID、用户名、密码等。
-
角色表(Role): 存储系统中的角色信息,如角色ID、角色名称等。
-
权限表(Permission): 存储系统中的权限信息,如权限ID、权限名称等。
-
用户角色关联表(UserRole): 存储用户与角色之间的关联关系,包括用户ID和角色ID。
-
角色权限关联表(RolePermission): 存储角色与权限之间的关联关系,包括角色ID和权限ID。
-
系统配置表(SystemConfig): 存储系统的配置信息,如系统名称、Logo、默认设置等。
-
日志表(Log): 记录系统操作日志,包括用户操作、时间、IP地址等。
-
景点表(ScenicSpot): 存储景点信息,包括景点ID、名称、历史讲解等。
-
停车场表(ParkingLot): 存储停车场信息,包括停车场ID、位置信息、是否可预约等。
-
餐厅信息表(Restaurant): 存储餐厅的详细信息,包括餐厅ID、名称、菜单、是否可以预约点餐的状态等。
-
餐厅预约记录表(RestaurantReservation): 存储用户对餐厅的预约记录,包括用户ID、餐厅ID、预约时间等。
-
停车场预约记录表(ParkingReservation): 存储用户对停车场的预约记录,包括用户ID、停车场ID、预约时间等。
项目排期:
原型设计篇:
入口图(参考这个)底部导航栏第一栏为“游胡同”
一共归纳不同的路线方案
点击玩转智慧地图后跳转:
点击游览路线:
路线分为
纯建筑型路线(游览)
复合路线(即包含景点,停车场,餐厅)
又比如喜欢摇滚乐的,在胡同里也有很多地下音乐。这样一条路线(方案讨论一下)
餐厅(应该加一个营业中/已打烊。可预约/无需预约)
餐厅在地图上标注显示
但是餐厅也设置一个底部导航栏叫“餐厅”
但是这个餐厅页就是设置成列表介绍有哪些餐厅
停车场(营业中,可预约?剩余车位)
我的页面
我的餐厅预约
我的停车场预约