JavaWeb——技术效应知识库系统(ps:信息管理系统)

此处写的是我写的一个小项目。拿出来给大家分享下,当时都是自己摸索出来,自己写出来的,东西比较简单,但也是自己投入精力写出来的东西,往大佬轻喷。😳😊
当时也不太会,Java只会一个基础,都是网上找教程一点点跟着学,写出来的。✊💪
注: 技术效应知识库其实就是一个==信息管理系统==,不用管什么是技术效应,这个就是个应用背景,底层的实现方法都是一样的。

当时参考的网站:菜鸟教程 上面的很基础,也很实用,适合初学者。
再推荐一个B站up写的编程教程网站:Road 2 Coding 内容很丰富。
再推荐几个B站的up(点击即可跳转):

  1. CodeSheep:Road 2 Coding这个网站就是他写的。👍
  2. 技术胖:搞了很多免费的编程课程,很不错。太良心了😭
  3. 稚晖君:膜拜大佬,感受下凑数的感觉。懂的越多,才知道稚辉君有多强大。🧎♂️🧎🧎♀️👍
  4. 017_凌十七:我是来人间凑数的。🙋

@[TOC]

一、基本介绍


  • 技术效应就是指由技术所产生的一种特定的科学现象。
  • 技术效应知识库系统可以提供功能、技术效应以及案例三者之间的数据的存储功能,方便用户通过功能来查找实现功能的技术效应及效应所对应的案例,从而帮助用户进行创新设计。

1、使用到的技术、工具

技术:

  • Bootstrap 框架: 弹性框架,也美观,好用。
  • JSP: 数据交互。
  • Servlet: 数据交互。
  • MySQL: 数据库,存储数据。

工具:

  • VS Code: 写web界面的时候可以实时预览,看到自己写出来的效果。
  • Eclipse(IDEA也挺好): 开发工具都可,之前学习用的Eclipse就直接用了。
  • Tomcat: Web应用服务器,用它来开发和调试JSP 程序。
  • Navicat: 方便的管理数据库。

2、系统功能图

[图片上传失败...(image-d1f165-1649150051646)]

3、数据库表设计

[图片上传失败...(image-1107b5-1649150051646)]

二、系统界面设计


所有界面都写了中英文两种

1、首页

[图片上传失败...(image-156f93-1649150051646)]
[图片上传失败...(image-d69b81-1649150051646)]

2、现象对应效应的展示界面

首页搜索选择按钮下的现象表中点击现象或者索引项便可跳转到该现象对应的效应展示界面(下图以现象“测量温度”为例)。
[图片上传失败...(image-1bea75-1649150051646)]
该部分的关键代码是:

<%@ page import="Display_Method.DisplayQuery" %>
<jsp:useBean id="database" class="Display_Method.DisplayQuery" scope="request" />    
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:setProperty name="database" property="keyWord" param="keyWord" />
<jsp:getProperty name="database" property="queryResult" /> 

<jsp:useBean>可以在JSP中声明一个JavaBean,scope指出了bean的作用域,第一行代码的作用是指出数据该传向哪个Java类,setProperty会将keyWord的值传递入数据处理的Java类DisplayQuery,getProperty会接收DisplayQuery类中的返回内容,从而使展示界面良好显示。后续各个表格的展示也是使用了这种方法与数据库进行交互。

3、表的展示界面

提供数据库中的整张表的展示,使用户可以直观的看到整张表的内容。[图片上传失败...(image-75c095-1649150051646)]
[图片上传失败...(image-20d836-1649150051647)]
[图片上传失败...(image-d107b3-1649150051647)]

4、搜索结果展示界面

下图以模糊搜索“位移”为例
[图片上传失败...(image-30c443-1649150051647)]

5、管理员界面展示

可以从首页、展示界面以及搜索结果展示界面的管理员登录入口进入

  • 管理管理员信息🧑💻
    [图片上传失败...(image-4355d5-1649150051647)]
  • 管理现象表👩💻
    [图片上传失败...(image-bc29f9-1649150051647)]
  • 管理效应表👨💻
    [图片上传失败...(image-7d91bd-1649150051647)]
  • 管理效应详情表🧑💻
    [图片上传失败...(image-61cbbd-1649150051647)]
  • 管理案例表👨💻
    [图片上传失败...(image-5298d2-1649150051647)]

6、管理员登录界面

[图片上传失败...(image-df3e71-1649150051647)]

<%-- 管理员模态框 --%>
  <div class="modal fade" id="AdminModal">
    <div class="modal-dialog modal-sm">
      <div class="modal-content">
  
        <%-- 管理员模态框头部 --%>
        <div class="modal-header">
          <h5 class="modal-title">管理员登录</h5>
          <button type="button" class="close" data-dismiss="modal">&times;</button>
        </div>
  
       <form name="Login" action="../Check/Checklogin.jsp" onsubmit="return validateForm()"  method="post">
        <%-- 管理员模态框主体 --%>
        <div class="modal-body">
            <label for="user">账号:</label>
            <input type="text" class="form-control" id="username" name="username" placeholder="请输入账号">
            <label for="pwd">密码:</label>
            <input type="password" class="form-control" id="password" name="password" placeholder="请输入密码">
        </div>
        <%-- 管理员模态框底部 --%>
        <div class="modal-footer">    
          <button type="submit" class="btn btn-secondary" onclick="validateForm()">
             登录
          </button>     
        </div>
        </form>
        
      </div>
    </div>
  </div>

7、新用户使用指南

一个系统刚开始总得有个新手教程吧,我就在首页放了个弹窗按钮,弹出一个用户指南。用轮播的形式,放入了很多张使用说明。(中英文都有)
[图片上传失败...(image-d631d8-1649150051647)]

  <%-- 新手教程模态框 --%>
  <div class="modal fade" id="NewUserModal">
    <div class="modal-dialog modal-lg">
      <div class="modal-content">
  
        <%-- 新手教程模态框头部 --%>
        <div class="modal-header">
          <h5 class="modal-title">新用户使用指南</h5>
          <button type="button" class="close" data-dismiss="modal">&times;</button>
        </div>
  
        <%-- 新手教程模态框主体 --%>
        <div class="modal-body">
          <div id="demo" class="carousel slide" data-ride="carousel">
 
            <%-- 指示符 --%>
            <ul class="carousel-indicators" >
              <li data-target="#demo" data-slide-to="0" class="active"></li>
              <li data-target="#demo" data-slide-to="1"></li>
              <li data-target="#demo" data-slide-to="2"></li>
            </ul>
             
            <%-- 轮播图片 --%>
            <div class="carousel-inner">
              <div class="carousel-item active">
                <img src="Images\首页介绍.png">
              </div>
              <div class="carousel-item">
                <img src="Images\主页搜索.png">
              </div>
              <div class="carousel-item">
                <img src="Images\展示界面介绍.png">
              </div>
            </div>
             
            <%-- 左右切换按钮 --%>
            <a class="carousel-control-prev" href="#demo" data-slide="prev">
              <span class="carousel-control-prev-icon"></span>
            </a>
            <a class="carousel-control-next" href="#demo" data-slide="next">
              <span class="carousel-control-next-icon"></span>
            </a>
             
          </div>
        </div>
      </div>
    </div>
  </div>

三、功能设计


1、搜索功能

  • 搜索功能的不同主要体现在查数据库表时候使用的sql语句。
  • 设计了三种搜索方式:模糊搜索、精确搜索、案例搜索
  • 展示界面的搜索均为同时搜索现象和效应模糊搜索。管理员界面中的搜索功能均为搜索当前表中内容,输入搜索内容即可即时搜索。
  • 除管理员界面的搜索外,其余搜索功能均使用传递JDBC形式连接数据库,通过传递SQL语句进入数据库搜索。

[图片上传失败...(image-8e431b-1649150051647)]
[图片上传失败...(image-b1ceef-1649150051647)]
[图片上传失败...(image-e46f8d-1649150051647)]
此处使用的关键代码:

  1. 加载驱动
public KeyWordQuery() {
        queryResult = new StringBuffer();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  1. 使用getString()方法获取传入该类的关键字,使用setString()方法将传入该类的关键字设定为给定String的值。
public String getKeyWord() {  //接收来自页面的关键字
        return keyWord;
    }
    public void setKeyWord(String keyWord) {
        this.keyWord = keyWord;
        try {
            byte bb[] = keyWord.getBytes("ISO-8859-1");
            keyWord = new String(bb,"GB2312");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  1. 使用返回值类型为StringBuffer的getQueryResult()函数返回前端界面需要接收的返回内容。
public StringBuffer getQueryResult() {
        String condition = null;
        condition = "Select * From kbs"; //此处双引号内的字符串为搜索的SQL语句
        StringBuffer str = f(condition); //这里的f()函数为与数据库交互的函数
        return str;  //此处返回与数据库交互得到的内容
    }
  1. 使用返回值类型为StringBuffer的f()函数返回从数据库接收的返回内容等。使用try,catch捕获并抛出异常,使用try内的前三句连接数据库,第四句将SQL语句传入数据库,使用append()将括号内内容返回前端界面。使用rs.next()获取返回值的下一项,rs.getString()获取数据库返回的数据。con.close()关闭数据库连接。下面代码以首页表格为例。
public StringBuffer f(String condition) {
        StringBuffer str = new StringBuffer();
        Connection con;
        Statement st;
        ResultSet rs;
        try {
            String url = "jdbc:mysql://localhost:3306/kbs?serverTimezone=UTC" ;
            con = DriverManager.getConnection(url,"root","123456");//账户密码
            st = con.createStatement();
            rs = st.executeQuery(condition);
                str.append("<div class=\"container\">"); //双引号内内容返回页面
            str.append("<div class=\"polaroid\">");
            str.append("<table class=\"table table-hover table-bordered table-striped\">");
            str.append("<thead class=\"thead-dark\">");
            str.append("<tr>");
            str.append("<th>" + "现象");
            str.append("<th>" + "索引项 F");
            str.append("</tr>");
            str.append("</thead>");
            str.append("<tbody>");
            while(rs.next()) {
                str.append("<tr>");
                str.append("<td>" + rs.getString(2) + "</td>");
                str.append("<td>" + rs.getString(3) + "</td>");
                str.append("</tr>");
            }
            str.append("</tbody>");
            str.append("</table>");
            str.append("</div>");
            str.append("</div>");
            con.close();
} catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return str;
    }
  1. 管理员界面的搜索功能使用的是JavaScript方法实现搜索。
function row2() {
    var input, filter, table, tr, td, i;
    input = document.getElementById("myInput"); //使用ID名从页面获取关键字
    filter = input.value.toUpperCase();
    table = document.getElementById("ManagementTable"); //查找的表的ID
    tr = table.getElementsByTagName("tr"); //此处标识为查找的是列
  for (i = 0; i < tr.length; i++) {
      td = tr[i].getElementsByTagName("td")[1];  //此处的1为搜索的是第2列
      if (td) {
        if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
          tr[i].style.display = "";
        } else {
          tr[i].style.display = "none";
        }
      } 
    }
 }

2、管理员登录功能

[图片上传失败...(image-10747c-1649150051647)]

3、数据管理功能

都以==增加==功能为例,别的功能模块实现方式类似。

3.1 管理员管理

[图片上传失败...(image-53bb5b-1649150051647)]

<%-- 增删改三个功能按钮的页面代码 --%>
<div class="container" id="DAOTable">
 <div class="container" style="margin-top:30px;" id="DAO">
  <div class="btn-group flex-container" id="DAObutton"  >
    <button type="button" class="btn btn-dark col-md-2" data-toggle="collapse" data-target="#Addemo">
       <i class="fa fa-plus-square">&nbsp&nbsp增加</i>
     </button>
    <button type="button" class="btn btn-dark col-md-2" data-toggle="collapse" data-target="#Deldemo">
       <i class="fa fa-minus-square-o">&nbsp&nbsp删除</i>
     </button>
    <button type="button" class="btn btn-dark col-md-2" data-toggle="collapse" data-target="#Modifydemo">
       <i class="fa fa-wrench">&nbsp&nbsp修改</i>
     </button>
   </div>
<%-- 增加管理员的页面代码 --%>
<div id="Addemo" class="collapse">
    <form class="form-inline form-group" id="Addgroup" name="Add" action="../Check/Admin_Add_Check.jsp" onsubmit="return Admin_Add_Check()"  method="post">
       <label for="username">账号:&nbsp&nbsp</label>
       <input type="text" class="form-control col-md-2" id="username" name="username" style="margin-right:20px;">
       <label for="password">密码:&nbsp&nbsp</label>
       <input type="text" class="form-control col-md-2" id="password" name="password">
       <button type="submit" class="btn btn-dark" style="margin-left:30px;" onclick="Admin_Add_Check()">
         <i class="fa fa-floppy-o" style="font-size:18px"></i>&nbsp&nbsp增加
       </button>
   </form>
 </div>

3.2 现象表管理

[图片上传失败...(image-2217c4-1649150051647)]

<div id="Addemo" class="collapse">
    <form class="form-inline form-group" id="Addgroup" name="Add" action="../Check/Phe_Add_Check.jsp" onsubmit="return Phe_Add_Check()"  method="post">
       <label for="phenomenon">现象:&nbsp&nbsp</label>
       <input type="text" class="form-control col-md-2" id="phenomenon" name="phenomenon" style="margin-right:20px;">
       <label for="indexf">索引项F:&nbsp&nbsp</label>
       <input type="text" class="form-control col-md-2" id="indexf" name="indexf" >
       <button type="submit" class="btn btn-dark" style="margin-left:30px;" onclick="Phe_Add_Check()">
         <i class="fa fa-floppy-o"></i>&nbsp&nbsp增加
       </button>
     </form>
 </div>

3.3 效应表管理

[图片上传失败...(image-972b19-1649150051647)]

<div id="Addemo" class="collapse">
    <form id="Addgroup" name="Add" action="../Check/Effect_Add_Check.jsp" onsubmit="return Effect_Add_Check()"  method="post">
    <div class="form-inline form-group">
     <label for="indexf">索引项F:&nbsp&nbsp</label>
     <input type="text" class="form-control col-md-2" id="indexf" name="indexf" style="margin-right:20px;">
     <label for="phenomenon">现象:&nbsp&nbsp</label>
     <input type="text" class="form-control col-md-2" id="phenomenon" name="phenomenon" style="margin-right:20px;">
 </div> 
    <div class="form-inline form-group">
     <label for="indexe">索引项E:&nbsp&nbsp</label>
     <input type="text" class="form-control col-md-2" id="indexe" name="indexe" style="margin-right:20px;">
     <label for="effect">效应:&nbsp&nbsp</label>
     <input type="text" class="form-control col-md-2" id="effect" name="effect">
    
     <button type="submit" class="btn btn-dark" style="margin-left:45px;" onclick="Effect_Add_Check()">
       <i class="fa fa-floppy-o"></i>&nbsp&nbsp增加
     </button>
    </div>
   </form>
 </div>

3.4 效应详情表管理

[图片上传失败...(image-600475-1649150051647)]

<div id="Addemo" class="collapse">
  <form id="Addgroup" name="Add" action="../Check/Introduce_Add_Check.jsp" onsubmit="return Introduce_Add_Check()"  method="post">
  
    <div class="form-inline form-group">
      <label for="indexe">索引项E:&nbsp&nbsp</label>
      <input type="text" class="form-control col-md-2" id="indexe" name="indexe" style="margin-right:20px;">
      <label for="effect">效应:&nbsp&nbsp</label>
      <input type="text" class="form-control col-md-2" id="effect" name="effect" style="margin-right:20px;">
      <button type="submit" class="btn btn-dark " style="margin-left:30px;" onclick="Introduce_Add_Check()">
        <i class="fa fa-floppy-o"></i>&nbsp&nbsp增加
      </button>
    </div>
    
      <div class="form-group form-inline">
        <label for="name">效应详情:&nbsp&nbsp</label>
          <textarea class="form-control col-md-10" id="description" name="description" rows="4"></textarea>
      </div>
    
  </form>
   <h5 id="Note">PS:在添加效应详情时请使用HTML标签等对文本进行分段、加粗等操作。</h5>
</div>

3.5 案例表管理

[图片上传失败...(image-74baf-1649150051647)]

<%-- 案例表不一样的地方就是要上传图像 --%>
<div id="Addemo" class="collapse">
   <form class="form-inline form-group" id="Addgroup" name="Add" action="../Check/Example_Add_Check.jsp" onsubmit="return Example_Add_Check()"  method="post">
    <label for="indexe">索引项E:&nbsp&nbsp</label>
    <input type="text" class="form-control col-md-1" id="indexe" name="indexe" style="margin-right:20px;">
    <label for="effect">效应:&nbsp&nbsp</label>
    <input type="text" class="form-control col-md-2" id="effect" name="effect" style="margin-right:20px;">
    <label for="example">案例:&nbsp&nbsp</label>
    <input type="text" class="form-control col-md-2" id="example" name="example" style="margin-right:20px;">
    <label for="path">图像路径:&nbsp&nbsp</label>
 <input type="text" class="form-control col-md-2" id="path" name="path" value="../Images/">
     <button type="submit" class="btn btn-dark" style="margin-left:30px;" onclick="Example_Add_Check()">
      <i class="fa fa-floppy-o"></i>&nbsp&nbsp增加
    </button>       
  </form>

   <form method="post" action="/TESTKBS/UploadServlet" enctype="multipart/form-data">
    <div class="form-inline form-group" id="Addgroup">
     <label for="uploadimage">图像:&nbsp&nbsp</label>
     <input type="file" class="form-control col-md-6"id="uploadFile" name="uploadFile" style="margin-right:20px;">
     <button type="submit" class="btn btn-dark" value="上传"  style="margin-left:30px;">
       <i class="fa fa-cloud-upload"></i>&nbsp&nbsp上传
     </button>
    </div>
   </form>
    <h5 id="Note">PS:图像上传时将图像重命名为:“<b>索引项.后缀</b>”方便管理。如:<b>E1.jpg</b>。添加图像路径格式如:“<b>../Images/E1.jpg</b>”</h5>
</div>

四、详细代码


项目放到了gitee上,有需要的可以自取。🤪

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容