web项目管理系统的设计

2023-05-16

简介

某某管理系统(员工信息,学生成绩,办事流程等等)应该是很多web开发者最先接触到的项目之一,也是许多非科技企业主要维护的项目,可以说是学习web项目最佳练手工具,虽然很老旧,但依旧充当着很重要的角色。

本人也开发过某某管理系统(大作业项目),因此来分享类似的web项目的开发流程和知识点。

关系模式设计(ER)

根据要设计的管理系统,我们需要对其涉及的实体以及关系进行抽象。也就是要设计出经典的ER图。以影院管理系统为例,实体主要包括:电影院,电影,排片等等,关系主要包括:影院——电影,顾客——订单,电影——排片等等。其实也不困难,这些在设计表结构的时候需要多注意,我们要注意到哪些属性受到哪些属性制约的,分清楚强实体集和弱实体集。

能画清楚ER图,就很好设计sql了,这些不搞清楚,后面增删改查的时候,问题就大了。打个比方,订单信息是弱实体集,同时也是复合实体,它与排片之间有联系,与顾客之间也有联系。所以这个表必须用REFERENCES(外键)设计好。不然你改了影片名,顾客名,这订单却一点没变化,数据就不一致了。而且你可以会加上修改订单的功能,如果没设计好依赖关系,表是错的,操作到后面数据全乱了也有可能发生。

开发框架敲定

总得拿个工具来开发是吧!所以要想好用什么来开发。

如果是团队项目,最好是前后端分离,不然一人挑大梁,其他人就反馈bug,比较难合作,要合作也只能分配不同的板块进行设计,不高效。

如果是个人项目,最好也是前后端分离,毕竟是主流,这样可以学很多东西。当然,要学php,学jsp,就没必要分了,页面效果和数据都在自己操作之下,说实话开发起来还更快。

  • 前端:三大框架最值得学习的(Vue/Angular/React),其中最推荐Vue,因为最简单,接着是React,大厂用得多,Angular语法想较前两者可能复杂点。

  • 前端UI:写界面还是很难的,当然,想认真学通css的自己写比较合适,不然就乖乖用UI,UI和前端框架一般是相契合的,根据你选的前端框架查一下。

  • 后端:1. 主要学前端的可以考虑 express,超级简单,而且可以熟悉nodejs,或者考虑flask,python好用且易学,我们就不用纠结各类配置。2. 主要学后端的,首先是推荐java,学习资料多,而且企业用的也多,难点在于环境配置,各种依赖烦得很。其次是推荐golang,这是一门有活力的语言,竞争压力比java小很多。

下面我就以 vue + element-ui + express 为例子,谈谈接下来的开发。

前端设计

前端以vue为开发框架,采用element ui作为ui框架进行开发,核心是应用vue的组件化开发思想。也就是开发时,构思好你想看到的界面和想用到的功能,一个一个击破,最后再联系在一起。

组件管理与设计

前端三大框架都有组件的思想,由于采用了element-ui,很多组件不需要我们写(比如菜单栏目,布局,表格,页码等等)。但是一些大的组件(一般单独放在page/view文件夹里)还是要分出来的,比如:影院信息管理页面组件,顾客信息管理页面组件,订单管理页面组件等等。

另外,组件自然是抽离得越细越规范,比如你可以把一个简单的信息展示(几个

标签或者几个

  • 标签就能解决的)也抽出来。但是没必要,最后管理起来很麻烦。所有这种抽离的小组件应当放在common或者特定的文件夹下,与主视图组件区分开来。
  • 组件访问逻辑

    你可以用导航栏+a标签进行跳转,当然,还是前端路由更为推荐。

    前端路由用的是hash或history,可以做到页面不刷新。我们只要吧导航栏和前端路由表结合在一起,就可以轻松的做到点击导航栏跳转到对应的视图组件。

    https://blog.csdn.net/CSDN_Yong/article/details/104186851

    前端路由可以参考上面链接的文章

    组件代码的编写

    这个是基本功,像vue只要用好@和:这两个就能写出很多东西了,不知道怎么写可以考虑去github多搬运代码就会了。

    cookies的使用

    import cookies from 'vue-cookies'
    Vue.use(cookies);
    

    登陆控制一般是要用到的,而且你要阻止用户企图未登陆就通过修改url的方式访问到对应的组件。这时候只要比对cookies是否存在就可以判断先前有没有登陆。具体怎么用可以查阅其他文章。

    后端实现

    这一块不同的框架细节不太一样。但简单来说,就是根据前端的要求提供出一系列的api并对数据库进行各种操作。

    基本构造(express)

    //app.js
    var createError = require('http-errors');
    var express = require('express');
    var path = require('path');
    var cookieParser = require('cookie-parser');
    var logger = require('morgan');
    var session = require('express-session');
    var indexRouter = require('./routes/index');
    var app = express();
    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');
    //托管静态文件
    app.use(express.static('public'));
    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));
    app.use('/', indexRouter);
    app.listen(3000);
    module.exports = app;
    

    express脚手架基本就自带了上面的东西。use那里主要看开发要用到什么,要到的就用npm搞进去就行。

    跨域错误避免

    app.all("*", function(req, res, next) {
     if (!req.get("Origin")) return next();
     // use "*" here to accept any origin
     res.set("Access-Control-Allow-Origin","*");
     res.set("Access-Control-Allow-Methods", "GET");
     res.set("Access-Control-Allow-Headers", "X-Requested-With,Origin,Content-
    Type,Accept");
     // res.set('Access-Control-Allow-Max-Age', 3600);
     if ("OPTIONS" === req.method) return res.sendStatus(200);
     next();
    

    静态资源存储

    一般不同后端框架存储文件夹不太一样,不过可以肯定的一点,必须在代码中指定出来(也可能可以在IDEA中标出来,反正肯定不是直接放)。设置好之后,这个文件夹一般就放图片文件。

    API接口设计

    与前端协商好,需要请求或上传哪些数据,然后制定相应的url就可以了。

    API接口实现

    都是要导入依赖项的,也要提前配置好依赖(比如javaweb有单独的依赖配置文件),导入后,我们可以调用sql接口。以express为例子。

    const mysql = require('mysql');
    const conn = mysql.createConnection({
     host:'localhost',   //数据库地址
     user:'root', //用户名
     password:'123456', //密码
     database:'mysql' //数据库名
    });
    conn.connect();
    module.exports = conn;
    

    配置数据库,这个最好单独做成一个文件。

    conn.query(sqlStr,[name,password],(error,result,field)=>{
    	\\dosomething
    })
    

    然后我们就可以通过这个东西查询数据库了。

    学好ajax,又知道怎么查数据库了,其他不是很大的问题。当然,大的项目后台是要考虑并发,代理什么的,这里不考虑。

    前后端联合开发

    在不分前后端时,比如传统的jsp+java+servlet可能不太好区分。在分离的情况下,一般采用下面的套路(当然是限于小型项目,那些企业级的大有手段协调开发)

    开发时

    在前后端分离的情况下,后台维护API,数据库,前端维护界面就行。一般就是后台跑在某个服务器上,给出端口和基础的url,前端根据基础的url和端口拼接对应的请求url发给服务器以获取数据。最后前端要跑在另一个服务器上,用户访问的时候是访问前端这个服务器的。关系差不多如下:
    在这里插入图片描述
    这样做的好处就是两个服务器都可以启动热部署,开发效率比疯狂打包快得多得多,每一次更新都能立马进行调试。

    发布时

    当然是要打包了,首先打包前端,比如vue,就是 npm run build,获取dist文件夹,把这个dist文件夹塞到后端的静态文件那里去,然后制定index.html作为后端服务器启动入口,就大功告成啦!就想下图一样:
    在这里插入图片描述

    总结

    这类管理项目侧重点在于前端,作为练手项目,我们基本是不可能遇到后端开发真正的难点的(协调,并发,分布式等)。所以想好好练后台开发的,尽早实习,看看实际业务代码会有很大帮助。前端还是布局和组件化思想比较重要,我这篇文章可能有很多地方是不对的,很多话也是不对,但是应该能对想做一个练手项目的你有点帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web项目管理系统的设计 的相关文章

  • 你能用c++加载一个网页,包括JS和动态html并获取渲染的DOM字符串吗?

    是否可以用 C 加载网页并获取渲染的 DOM 不仅仅是 HTTP 响应 还有 java 脚本运行后 可能是让它运行一段时间后 呈现的 DOM 特别是随着时间的推移可能发生变化的动态 HTML 有这个库吗 或者 如果不是 c 您是否知道可以用
  • 如何判断是哪个控件导致ViewState加载失败?

    我的页面面临 Viewstate 加载问题 页面有一个登录工具来登录管理员和非管理员用户 当非管理员用户登录页面并单击启用了自动回发的复选框时 会出现奇怪的行为 错误详情如下 后来我发现 在左侧的导航面板中 承载链接 侧边栏如下图所示 Se
  • 如何在 Laravel 7.x 中从控制器返回视图时传递 cookie?

    在 laravel 7 x 中 有什么方法可以在返回视图时将 cookie 传递给客户端吗 类似于 return view welcome gt cookie name value min 嗯 我做了一些研究 发现有一些方法 我熟悉的两个是
  • 如何将 html 输入到 Flask 中?

    我有这个 html 位
  • JavaScript 中的对象解构[重复]

    这个问题在这里已经有答案了 gt a a true Statement lt a true 上面的语句是赋值true to a 为什么上面的语句在chrome控制台中没有报错 虽然下面的语句给出了错误 gt a a true Stateme
  • Jekyll 在子网站上生成静态网站?

    是否可以将 Jekyll 放在 GitHub 上托管的网站的单个部分上 即是否可以让 example github io 成为常规站点 而 example github io blog 由 Jekyll 静态生成 我相信可以通过创建另一个名
  • 对同一域发出 get 请求,出现 CORS 错误

    在浏览器扩展中 这是我的 ajax 调用 var xhr new XMLHttpRequest xhr open GET window location href true xhr responseType arraybuffer xhr
  • 单击链接时启动本地应用程序

    我正在开发一个内部 Web 应用程序 它允许我为客户存储远程控制凭据 每次我想要连接到客户计算机时 我都需要启动远程支持软件 复制并粘贴用户名和密码 然后单击 开始 按钮 该软件将具有可用的命令行参数 允许我立即启动会话 但是 我不知道如何
  • Phonegap - cordova 在 Android 和 iOS 设备上延迟且缓慢

    我刚刚开始使用 zend studio 开始我的第一个 PhoneGap 项目 但是 在我构建并部署它之后 该应用程序非常慢 Android 和 iOS 均可 滚动滞后 如果我按下按钮 转到下一页的速度很慢 有什么办法可以提高它的性能吗 提
  • VSTS 构建失败/发布无法在 bin 文件夹中找到 roslyn\csc.exe

    我们有一个网站项目 安装了以下 nuget 软件包 Microsoft CodeDom Providers DotNetCompilerPlatform 1 0 8 Microsoft Net Compilers 2 4 0 The web
  • 使用“邮递员”chrome 应用程序的肥皂请求正文

    假日网络服务 的肥皂请求正文会是什么样子 http www holidaywebservice com HolidayService v2 HolidayService2 asmx wsdl http www holidaywebservi
  • MVC4更新部分视图

    我正在开发一个简单的 MVC 应用程序 我有主视图 部分视图和控制器 这是我的主要视图 model partitalViewTest Models Qset div class transbox style height 1 Html Pa
  • Chrome:网络元素自动移动

    我正在开发一个网络项目 在过去的两周里 我正在进行学期考试 所以我要休息一下 现在 既然他们已经结束了 我又继续我的工作了 但我发现我的一些Web 元素 如按钮 span 在 Chrome 上移动了一些像素 在 IE 和 Mozilla 上
  • Safari 的“阅读器模式” - 开源解决方案? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Safari 有一个 阅读器模式 可以删除网站上除文本之外的所有内容 有谁知道提供相同功能的开源库 或
  • 如何获取dart中当前和调用函数的名称?

    C has System Reflection MethodBase GetCurrentMethod Name Dart 是否有类似的东西 但返回当前正在运行的函数以及调用当前运行函数的函数的名称的结果 我编写了一个简单的类 它提供当前函
  • Laravel htmlspecialchars() 期望参数 1 是我的项目中给出的字符串、对象?

    所以我正在尝试编写一个简单的网站表单 但它有这个 htmlspecialchars 错误 我尝试制作 message 但没有成功 有同样的错误 这是我的控制器
  • CSS3 与 JavaScript

    所以我试图在网页上创建一个动画 并试图找到一种使用 CSS3 来实现它的方法 但我对如何做到这一点感到非常困惑 我需要发生的是 当用户单击链接元素时 我希望 div 展开并填充特定于所单击的链接元素的内容 例如 当用户单击标题为 About
  • 将您的应用程序链接到现有页面

    我搜索了又搜索 似乎找不到任何与此相关的信息 我们有一个 Facebook 页面 facebook com companyname 我们在 Facebook 上也有一个应用程序 apps facebook com companyname 我
  • java Web应用程序中的日期转换

    String date1 13 03 2014 16 56 46 AEDT SimpleDateFormat sdf new SimpleDateFormat dd MM yyyy HH mm ss z sdf setTimeZone Ti
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执

随机推荐

  • 基础网络爬虫(Web crawler)相关技术浅析

    文章目录 前言基本概念Robots协议基本原理现状概况爬虫软件跨语言Selenium PythonurllibrequestsScrapyPyspider JavaWebMagicWebCollector 技术分析网络请求获取请求浏览器开发
  • Vue——整合EChart

    解决方案 span class token operator lt span template span class token operator gt span span class token operator lt span div
  • Python——gym运行错误【‘function‘ object has no attribute ‘Viewer‘】解决方案

    问题描述 function object has no attribute Viewer 问题分析 gym破坏性升级 xff0c 版本不兼容 解决方案 方法一 xff1a Python Gym ImportError cannot impo
  • 大学阶段总结——大四

    大四一年基本上在校外实习 xff0c 能写的东西不多 毕业设计从一月份开始做 xff0c 实际编码实际时间70天左右 xff0c 除因设备限制以外 xff0c 基本完成设计内容 大学确实单了四年 这一年主要学习Spring Cloud Al
  • Python——各类品牌库爬虫Demo

    解决方案 源代码 xff1a https gitee com shentuzhigang mini project tree master brand crawler 唯品会 span class token keyword import
  • 大学阶段总结

    总结一下自己的大学生活 学业 大一基本上是在课业学习和ACM训练的平稳有序的生活中度过 xff0c 也没干什么其他事了 上课学习学习 xff0c 错 xff0c 玩玩手机 xff0c 所以我两个学期的高数都是最后靠老师拉到及格 xff0c
  • 人生规划(Flag)

    生活 房 xff08 杭州住宅428w xff0c 商业128w xff0c 老家128w xff09 车 xff08 32w xff09 存款 xff08 100w xff09 结婚 在杭州干十年 xff0c 先赚个首付 xff0c 再根
  • 博客停更声明

    本博客自2022年7月1日起 xff0c 不再新增内容 之后所有新增文章将push到GitHub中 xff0c 再通过Vuepress以GitHub Page的形式发布 历史文章根据需要迁移与更新 个人网站如下 xff1a 申屠志刚 htt
  • vnc连接成功后黑屏的问题

    新弄了一个服务器 安装各种服务 装VNC遇到问题 黑屏 网上找了各种方式均为解决 最终探索出了如下解决方法 1 修改 vnc xstartup文件 首先文件权限最好设置为777 原来为 只看最后 if f etc X11 xinit xin
  • 资源-Windows10-2020原版镜像下载地址(20H2)以及1809、1803、1709

    说明 Windows10 2020原版镜像下载地址 xff08 20H2 xff09 以及Windows10 1809企业LTSC版下载地址 PS xff1a 何为LTSC版 LTSC版即为长期服务版 xff08 你也可以理解成企业精简版
  • 交通标志识别

    原文链接 xff1a https blog csdn net Mind programmonkey article details 93194997
  • 关于YOLOv3的一些细节

    原文链接 xff1a https www jianshu com p 86b8208f634f 本文是我对YOLO算法的细节理解总结 xff0c 本文的阅读前提是已读过YOLO相关论文 xff0c 文中不会谈及YOLO的发展过程 xff0c
  • Giou YOLOv3 | CVPR2019,通用,更优的检测框损失函数

    这篇论文提出的GIou损失函数 xff0c 是一种目标检测领域用于回归目标框损失函数 该Trick适用于任何目标检测算法 本文以YOLOv3为例进行阐述 论文 xff1a Generalized Intersection over Unio
  • ubuntu18.04+CUDA10+caffe+openpose环境配置与应用

    最近老板谈到了一个项目 xff0c 需要通过人的行为姿势来初步判断人在干嘛 xff0c 然后我就找到了openpose xff0c 找到源码之后 xff0c 我又粗略的看了下别人写的相关博客还有其他资料 xff0c 觉得也没什么大不了 xf
  • ubuntu18.04安装tensorflow-gpu报错

    今天因工作需要 xff0c 就打算在ubuntu系统上安装tensorflow gpu 刚开始我就直接在中断输入 pip install tensorflow gpu 61 61 1 13 1 但是发现下载速度炒鸡慢 xff0c 关键是下载
  • ubuntu18.04安装ROS Melodic的安装与卸载

    step1 设置软件源 sudo sh c 39 echo 34 deb http packages ros org ros ubuntu lsb release sc main 34 gt etc apt sources list d r
  • Win10上yolov3的配置及使用教程(VS2019)

    yolo论文翻译 或https zhuanlan zhihu com p 35023499 yolo官网 目录 硬件环境 安装教程 安装CUDA和cuDNN 下载darknet 修改darknet vcxproj 修改darknet sln
  • LabelImg的安装出现No module named 'libs.resources'错误

    如果出现No module named libs resources xff0c 直接看第7点 1 下载labelImg github地址 xff1a https github com tzutalin labelImg 34 34 34
  • Github网站重定向到自己的域名访问

    不多说 xff0c 上干货 xff01 首先你得有一个能访问搭建好的仓库网站 xff0c 而且是可视化的 如果没有请自行百度 xff01 开始 xff01 第一步 xff1a 打开你的Settings xff08 设置 xff09 xff0
  • web项目管理系统的设计

    简介 某某管理系统 xff08 员工信息 xff0c 学生成绩 xff0c 办事流程等等 xff09 应该是很多web开发者最先接触到的项目之一 xff0c 也是许多非科技企业主要维护的项目 xff0c 可以说是学习web项目最佳练手工具