1975react社区问答管理系统开发mysql数据库web结构node.js编程计算机网页源码

news2024/11/28 1:37:22

一、源码特点
  react 社区问答管理系统是一套完善的完整信息管理类型系统,结合react.js框架和node.js后端完成本系统,对理解react node编程开发语言有帮助系统采用node框架(前后端分离)),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
前段主要技术 react
后端主要技术 node.js
数据库 mysql
开发工具 vscode
环境需要

    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router-dom": "^6.16.0",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4"
vue 版本 2.9.6
node 版本 16.14.2

使用说明

后端服务
nodemon clean exit   这个是 node.js 启动命令
客户端
npm run start 启动命令

二、功能介绍

(1)分类管理:对分类信息进行添加、删除、修改和查看
(2)标签管理:对标签信息进行添加、删除、修改和查看
(3)用户管理:对用户信息进行添加、删除、修改和查看
(4)问答管理:对问答信息进行添加、删除、修改和查看,同时进行其他业务操作,也可以进行深度检索
(5)评论管理:对评论信息进行添加、删除和查看
(6)关注管理:对关注信息进行添加、删除、和查看
(7)点赞管理:对点赞信息进行添加、删除和查看
(8)举报管理:对举报信息进行添加、删除、修改和查看
(9)通知管理:对通知信息进行添加、删除、修改和查看
(10)私信管理:对私信信息进行添加、删除、修改和查看
(11)用户登录、退出、个人信息修改、用户注册

数据库设计

CREATE TABLE `fenlei` (
`flid` int(11) NOT NULL auto_increment,
`fl` VARCHAR(40) default NULL COMMENT '分类',  PRIMARY KEY  (`flid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `biaoqian` (
`bqid` int(11) NOT NULL auto_increment,
`bq` VARCHAR(40) default NULL COMMENT '标签',  PRIMARY KEY  (`bqid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `yonghu` (
`yhid` int(11) NOT NULL auto_increment,
`yhm` VARCHAR(40) default NULL COMMENT '用户名',
`mm` VARCHAR(40) default NULL COMMENT '密码',
`xm` VARCHAR(40) default NULL COMMENT '姓名',
`qx` VARCHAR(40) default NULL COMMENT '权限',
`lxdh` VARCHAR(40) default NULL COMMENT '联系电话',
`lxdz` VARCHAR(40) default NULL COMMENT '联系地址',  PRIMARY KEY  (`yhid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `wenda` (
`wdid` int(11) NOT NULL auto_increment,
`wdh` VARCHAR(40) default NULL COMMENT '问答号',
`bt` VARCHAR(40) default NULL COMMENT '标题',
`nr` VARCHAR(40) default NULL COMMENT '内容',
`fbsj` VARCHAR(40) default NULL COMMENT '发布时间',
`yh` VARCHAR(40) default NULL COMMENT '用户',
`zt` VARCHAR(40) default NULL COMMENT '状态',
`dzl` VARCHAR(40) default NULL COMMENT '点赞量',  PRIMARY KEY  (`wdid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `pinglun` (
`plid` int(11) NOT NULL auto_increment,
`wd` VARCHAR(40) default NULL COMMENT '问答',
`pl` VARCHAR(40) default NULL COMMENT '评论',
`yh` VARCHAR(40) default NULL COMMENT '用户',
`plsj` VARCHAR(40) default NULL COMMENT '评论时间',  PRIMARY KEY  (`plid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `guanzhu` (
`gzid` int(11) NOT NULL auto_increment,
`zz` VARCHAR(40) default NULL COMMENT '作者',
`yh` VARCHAR(40) default NULL COMMENT '用户',
`gzsj` VARCHAR(40) default NULL COMMENT '关注时间',  PRIMARY KEY  (`gzid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

react.js设计

import React, { useState } from 'react';
import axios from 'axios';
import { useNavigate } from 'react-router-dom';
//举报添加页面
function Addjubao() {
    const [formData, setFormData] = useState({
        bt: '',
        jbnr: '',
        wd: '',
        jbsj: '',
        yh: '',
        zt: '',
      });

  // 定义 handleChange 函数
  const handleChange = (e) => {
    setFormData((prevState) => ({
      ...prevState,
      [e.target.name]: e.target.value,
    }));
  };    
     
      const handleReset = () => {
        setFormData({   bt: '',   jbnr: '',   wd: '',   jbsj: '',   yh: '',   zt: '',    });
      };
    const navigate = useNavigate();

    const handleSubmit = (event) => {
        event.preventDefault();
     
        // 发送POST请求到后端保存举报数据
    
      
        axios.post('/api/jubao/save', {
            form:formData
        })
        .then(() => {
            alert("保存成功");
         //   navigate('/');  
         handleReset(); // 重置表单
        })
        .catch(error => {
            alert('添加举报时发生错误');
            console.error("添加举报时发生错误:", error);
        });
    };

    return (
        <div>
            <h2>添加举报</h2>
            <form onSubmit={handleSubmit} method='post'>


                <div className="form-group">
                    <label>标题:</label>
                    <input type="text" className="form-control" name="bt" value={formData.bt}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>举报内容:</label>
                    <input type="text" className="form-control" name="jbnr" value={formData.jbnr}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>问答:</label>
                    <input type="text" className="form-control" name="wd" value={formData.wd}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>举报时间:</label>
                    <input type="text" className="form-control" name="jbsj" value={formData.jbsj}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>用户:</label>
                    <input type="text" className="form-control" name="yh" value={formData.yh}
          onChange={handleChange} required />
                </div>
                <div className="form-group">
                    <label>状态:</label>
                    <input type="text" className="form-control" name="zt" value={formData.zt}
          onChange={handleChange} required />
                </div>

   		 <div className="form-group">
                <button type="submit" className="btn btn-primary">保存</button>  

                <button type="button" onClick={handleReset} id="reset" className="btn btn-success" >重置</button>
       		</div>
            </form>
        </div>
    );
}

export default Addjubao;

node.js设计

 
 
// 3.2 创建路由单元
//let router=express.Router();
 
 
let router=express.Router();
 
//3.3 查询关注接口 
router.get('/findAll',(req,res)=>{
	
    const zz=req.query.zz;//作者
	   // console.log("zz="+zz);
    const yh=req.query.yh;//用户
	   // console.log("yh="+yh);



    

    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql='select * from guanzhu where 1=1 ';
        if(zz){
            sql+=`and zz like '%${zz}%'`;//动态拼接sql
        }
        if(yh){
            sql+=`and yh like '%${yh}%'`;//动态拼接sql
        }

        console.log(sql);
        connection.query(sql,(err,results)=>{
            if(err) throw err;
            res.json(new Response(200,results,'查询成功'))
        });
        // 释放连接对象
        connection.release();
        
    })
});
 
 
 
 



 

// 3.3 删除关注接口 
router.get('/deleteById',(req,res)=>{
    // query是一个对象可以将id解构出来
    // let id=req.query.id等价于一下代码
    let {id}=req.query;
    db.getConnection((err,connection)=>{
        if(err) throw err; 
        // 根据id删除数据
        let sql=`delete from guanzhu where gzid=${id}`;
        connection.query(sql,(err,results)=>{
            if(err) throw err;
            res.json(new Response(200,null,'删除成功'))
        });
        connection.release()
    })
 
});
 
 
  
//3.4 导出
module.exports=router
 
 
 





 
//3.3 查询关注接口 
router.get('/findOne',(req,res)=>{
    let {id}=req.query;

    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql=`select * from guanzhu where gzid=${id}`;
        connection.query(sql,(err,results)=>{
            if(err) throw err;
            res.json(new Response(200,results[0],'查询成功'))
        });
        // 释放连接对象
        connection.release();
        
    })
});
 
 
 
 

// 3.3 关注修改接口
router.post('/update',(req,res)=>{
    // 根据数据库的数据 将id name gender 解构出来
    let {id,form}=req.body;
    // console.log("form.name  ="+form);  
   
    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql='';
        // 需要判断id判断 id存在则为修改接口  id不存在则为新增接口
     
            // 修改
            sql=`update guanzhu set zz='${form.zz}',yh='${form.yh}',gzsj='${form.gzsj}' where gzid=${id}`;
      
            // 执行sql操作
            connection.query(sql,(err,results)=>{
                if(err) throw err;
                res.json(new Response(200,null,'修改成功'))
            })
    })
})
 
 
 // 3.3 新增关注接口
router.post('/save',(req,res)=>{
    // 根据数据库的数据 将id name gender 解构出来
    let {form}=req.body;



    console.log("form="+form);

  //  console.log("form.name  ="+form.name);  
  
    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql='';
        // 需要判断id判断 id存在则为修改接口  id不存在则为新增接口
       
            sql=`insert into guanzhu(zz,yh,gzsj) values('${form.zz}','${form.yh}','${form.gzsj}')`;
            console.log("sql="+sql);
            // 执行sql操作
            connection.query(sql,(err,results)=>{
                if(err) throw err;
                res.json(new Response(200,null,'保存成功'))
            })
    })
})
 
 

router.post('/gz',(req,res)=>{
    // 根据数据库的数据 将id name gender 解构出来
    let {form}=req.body;



    console.log("form="+form);

  //  console.log("form.name  ="+form.name);  
  
    db.getConnection((err,connection)=>{
        if(err) throw err;
        let sql='';
        // 需要判断id判断 id存在则为修改接口  id不存在则为新增接口
            sql='delete from guanzhu where zz='+form.zz+' and yh='+form.yh+''  ;
            connection.query(sql,(err,results)=>{
                if(err) throw err;
               // res.json(new Response(200,null,'保存成功'))
            })
            sql=`insert into guanzhu(zz,yh,gzsj) values('${form.zz}','${form.yh}','${form.gzsj}')`;
            console.log("sql="+sql);
            // 执行sql操作
            connection.query(sql,(err,results)=>{
                if(err) throw err;
                res.json(new Response(200,null,'保存成功'))
            })
    })
})

三、注意事项
1、管理员账号:admin密码:admin 数据库配置文件\sqwd\util\pool.js
2、开发环境为vscode开发,数据库为mysql,使用react语言开发。
3、数据库文件名是reactsqwd.sql 系统名称sqwd. 地址:http://128.0.0.1:3000/login

四 系统实现

需要源码 其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1897124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何有效管理你的Facebook时间线?

Facebook作为全球最大的社交平台之一&#xff0c;每天都有大量的信息和内容在用户的时间线上展示。有效管理你的Facebook时间线&#xff0c;不仅可以提升用户体验&#xff0c;还能够帮助你更好地控制信息流和社交互动。本文将探讨多种方法和技巧&#xff0c;帮助你有效管理个人…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】认证服务03—分布式下Session共享问题

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【19】分布式下Session共享问题 session原理分布式下session共享问题Session共享问题解决—session复制Session共享问题解决—客户端存储Session共享问题解决—hash一致性Session共享问题…

【C++】 解决 C++ 语言报错:Invalid Use of Incomplete Type

文章目录 引言 在 C 编程中&#xff0c;“Invalid Use of Incomplete Type” 是一种常见错误。此错误通常在程序试图使用未完全定义的类或结构时发生。这种错误不仅会导致编译失败&#xff0c;还可能导致程序行为不可预测。本文将详细探讨无效使用不完整类型的成因、检测方法及…

【Redis】真行,原来是这样啊! --Redis自动序列化和手动序列化的区别(存储结构、内存开销,实际写法)

对于Redis有两种序列化和反序列化的方式&#xff0c; 方式一&#xff1a; 一种是通过 注入RedisTemplate 对象&#xff0c;找个对象&#xff0c;通过配置类进行一定的配置&#xff0c;使得使用RedisTemplate 对象时&#xff0c;便会使用配置的那些键、值的序列化方式&#xff…

【人工智能】--强化学习(2.0)

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;强化学习与有监督学习的区别 &#x1f348;数据特点 &#x1f348;学习目标 &#x1f348;反馈机制 &#x1f348;策略…

数学建模MATLAB绘图大全

最近快要开始一年一度的数学建模竞赛啦&#xff0c;接下来争取每天更一篇数学建模算法&#xff01;&#xff08;当然这是理想状态下&#xff09;&#xff0c;今天就先更一些MATLAB常用的绘图吧&#xff0c;论文赏心悦目的关键就在于丰富多彩的图&#xff0c;好看的图一定会成为…

Linux 查看磁盘是不是 ssd 的方法

lsblk 命令检查 $ lsblk -d -o name,rota如果 ROTA 值为 1&#xff0c;则磁盘类型为 HDD&#xff0c;如果 ROTA 值为 0&#xff0c;则磁盘类型为 SSD。可以在上面的屏幕截图中看到 sda 的 ROTA 值是 1&#xff0c;表示它是 HDD。 2. 检查磁盘是否旋转 $ cat /sys/block/sda/q…

深入理解【 String类】

目录 1、String类的重要性 2、常用方法 2、1 字符串构造 2、2 String对象的比较 2、3 字符串查找 2、4字符转换 数值和字符串转换&#xff1a; 大小写转化&#xff1a; 字符串转数组&#xff1a; 格式转化&#xff1a; 2、5 字符串替换 2、6字符串拆分 2、7 字符串…

【pytorch12】什么是梯度

说明 导数偏微分梯度 梯度&#xff1a;是一个向量&#xff0c;向量的每一个轴是每一个方向上的偏微分 梯度是有方向也有大小&#xff0c;梯度的方向代表函数在当前点的一个增长的方向&#xff0c;然后这个向量的长度代表了这个点增长的速率 蓝色代表比较小的值&#xff0c;红色…

初阶数据结构二叉树练习系列(1)

这个系列的文章将带大家一起刷题&#xff0c;并且总结思路 温馨提示&#xff1a;本篇文章里的练习题仅适合刚学完二叉树的小白使用 相同的树 思路 情况分析&#xff1a;第一种情况&#xff1a;两棵树都为空 → 返回true 第二种情况&am…

Vue +Echarts 二维数组获取最大值和最小值以及索引

实现图例效果 获取最大值方法&#xff1a; maxSecond(array) {let max Number.MIN_SAFE_INTEGER;for (let i 0; i < array.length; i) {const secondElement parseInt(array[i][1]);if (secondElement > max) {max secondElement;}}return max;}, 获取最大值索引&…

数据结构——(单)链表

文章目录 1. 结构 2. 链表的分类 1. 单链表 2. 双链表 3. 循环单链表 4. 循环双链表 3. 优缺点 4. 单链表函数 5. 单链表代码实现 1. 结构 逻辑结构 链表是一种线性结构&#xff0c;由一系列结点&#xff08;Node&#xff09;组成。每个结点包含一个数据元素和一个指…

Linux库概念及相关编程(动态库-静态库)

Linux库概念及相关编程 分文件编程案例 分文件编程是指将程序按功能模块划分成不同的文件进行编写&#xff0c;这种方法有以下好处&#xff1a; 功能责任划分&#xff1a;每个文件对应一个功能模块&#xff0c;职责明确&#xff0c;易于理解和维护。方便调试&#xff1a;可以…

绝地求生PUBG点击开始游戏一直在加载不读条计时间的解决办法

绝地求生PUBG作为一款引领潮流的大逃杀游戏&#xff0c;凭借其紧张刺激的对抗体验赢得了全球玩家的喜爱。 即使是游戏已经上线很长时间了&#xff0c;但是游戏现在依旧是很火爆&#xff0c;还有很多玩家下载游戏进行游玩。然而&#xff0c;一些为玩家在游戏中遇到了点击开始游戏…

java版本ERP管理系统源码 Spring Cloud ERP_ERP系统_erp软件_ERP管理系统

在当今数字化时代&#xff0c;企业对高效、稳定且易于扩展的管理系统的需求日益增长。为了满足这一需求&#xff0c;我们精心打造了一款基于Java技术的ERP&#xff08;Enterprise Resource Planning&#xff09;管理系统。该系统充分利用了Spring Cloud Alibaba、Spring Boot、…

Butterfly主题文章标题改成转动小风车

效果 标题级别不同小风车颜色不同&#xff0c;鼠标移入会有转动变慢及变色效果。 新建css 建议在/source下创建诸如img/css/js等文件夹&#xff0c;存放文章或网站用的素材&#xff0c;分门别类后续也方便维护。 Hexo打包的时候&#xff0c;会自动把/source下的文件&#…

JavaScript基础知识5(对象)

JavaScript基础知识5&#xff08;对象&#xff09; 对象创建对象使用对象字面量使用 new Object() 访问和修改属性点表示法方括号表示法 动态添加和删除属性添加属性删除属性 对象方法对象的遍历常用属性和方法数学常量数学函数三角函数 使用示例生成随机整数计算圆的面积求最大…

Zabbix 配置 VMware 监控

Zabbix监控VMware 官方文档&#xff1a;https://www.zabbix.com/documentation/current/en/manual/vm_monitoring Zabbix 可以使用低级发现规则自动发现 VMware 虚拟机管理程序和虚拟机&#xff0c;并根据预定义的主机原型创建主机来监控它们。Zabbix 还包括用于监控 VMware …

VirtualBox的windows server 2016设置主机和虚拟机共享文件夹

文章目录 安装步骤1. windows server 2016安装增强功能2.上述安装完成之后&#xff0c;需要做共享文件夹&#xff0c;在宿主机&#xff0c;新建一个test文件夹&#xff0c;做共享设置&#xff0c;如下图&#xff1a;3.然后打开虚拟机&#xff0c;设置文件共享 安装步骤 1. win…

字节码编程javassist之定义方法和返回值

写在前面 源码 。 本文看下如何使用javassist来定义方法和返回值。 1&#xff1a;源码 package com.dahuyou.javassist.generateFieldAndMethod;import javassist.*;import java.lang.reflect.Method;public class JustDoIt222 {public static void main(String[] args) thr…