ideaSSM物流运输管理系统短路径算法开发mysql数据库web结构Dijstra编程计算机网页源码maven项目

一、源码特点

idea ssm 物流运输管理系统是一套完善的完整信息管理系统,结合SSM框架完成本系统SpringMVC spring mybatis ,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。

前段主要技术 js css jquery

后端主要技术 SpringMVC spring mybatis

数据库 mysql

开发工具 IDEA JDK1.8 TOMCAT 8.5

最短路径算法 Dijstra算法

idea ssm物流运输管理系统1

二、功能介绍

1.登录功能

用户巨头不同角色(业务员、业务经理和超级管理员)。

2.权限控制

要求用户以不同角色登录时,能够使用的功能不同。

3.系统功能

(1)用户管理(超级管理员)

对系统的用户进行管理(增删改查)。用户注册时,用户数据表自动更新。

(2)权限管理(超级管理员)

对系统角色对应的权限进行管理(增删改查)。

(3)订单管理(业务员、业务经理、超级管理员)

对所有订单信息进行管理(增删改查)。其中,业务员仅能查看到个人负责的订单。

(4)业务管理(业务员、超级管理员)

a.添加、修改订单信息,自动计算物流费用。(自动更新订单表和客户信息表)

b.更新物流订单状态:揽件、入库、运输中、派送完成。

c.根据最短距离的订单运输建议,利用最短路径算法(Dijstra算法)进行路径规划。

(5)客户管理(业务经理、超级管理员)

对订单客户信息进行管理(增删改查)。

(6)报表管理(业务经理、超级管理员)

a.统计导出报表数据:统计订单数目、营业额、月度数据变化等报表数据

b.显示报表数据:利用图形、表格等形式展现报表数据

数据库设计

(1)权限信息表如表3.1所示:

表3.1 权限信息表

|----|------|---------|----|----|------|
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | qxid | INTEGER | 11 | 是 | 权限编号 |
| 2 | qx | VARCHAR | 40 | 否 | 权限 |

(2)机构信息表如表3.2所示:

表3.2 机构信息表

|----|------|---------|----|----|------|
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | jgid | INTEGER | 11 | 是 | 机构编号 |
| 2 | jgmc | VARCHAR | 40 | 否 | 机构名称 |
| 3 | lx | VARCHAR | 40 | 否 | 类型 |

(3)机构距离信息表如表3.3所示:

表3.3 机构距离信息表

|----|--------|---------|----|----|--------|
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | jgjlid | INTEGER | 11 | 是 | 机构距离编号 |
| 2 | qsjg | VARCHAR | 40 | 否 | 起始机构 |
| 3 | mdjg | VARCHAR | 40 | 否 | 目的机构 |
| 4 | jl | VARCHAR | 40 | 否 | 距离 |
| 5 | yssj | VARCHAR | 40 | 否 | 运输时间 |

(4)用户信息表如表3.4所示:

表3.4 用户信息表

|----|------|---------|----|----|------|
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | yhid | INTEGER | 11 | 是 | 用户编号 |
| 2 | yhm | VARCHAR | 40 | 否 | 用户名 |
| 3 | mm | VARCHAR | 40 | 否 | 密码 |
| 4 | xm | VARCHAR | 40 | 否 | 姓名 |
| 5 | jg | VARCHAR | 40 | 否 | 机构 |
| 6 | lxdh | VARCHAR | 40 | 否 | 联系电话 |
| 7 | lxdz | VARCHAR | 40 | 否 | 联系地址 |
| 8 | qx | VARCHAR | 40 | 否 | 权限 |

(5)重量价格信息表如表3.5所示:

表3.5 重量价格信息表

|----|--------|---------|----|----|--------|
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | zljgid | INTEGER | 11 | 是 | 重量价格编号 |
| 2 | zl | VARCHAR | 40 | 否 | 重量 |
| 3 | jg | VARCHAR | 40 | 否 | 价格 |

(6)客户信息表如表3.6所示:

表3.6 客户信息表

|----|------|---------|----|----|------|
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | khid | INTEGER | 11 | 是 | 客户编号 |
| 2 | khmc | VARCHAR | 40 | 否 | 客户名称 |
| 3 | lxdh | VARCHAR | 40 | 否 | 联系电话 |
| 4 | lxdz | VARCHAR | 40 | 否 | 联系地址 |

(7)运单信息表如表3.7所示:

表3.7 运单信息表

|----|-------|---------|----|----|-------|
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | ydid | INTEGER | 11 | 是 | 运单编号 |
| 2 | dh | VARCHAR | 40 | 否 | 单号 |
| 3 | kh | VARCHAR | 40 | 否 | 客户 |
| 4 | fjrxx | VARCHAR | 40 | 否 | 发件人信息 |
| 5 | sjrxx | VARCHAR | 40 | 否 | 收件人信息 |
| 6 | qsjg | VARCHAR | 40 | 否 | 起始机构 |
| 7 | mdjg | VARCHAR | 40 | 否 | 目的机构 |
| 8 | zl | VARCHAR | 40 | 否 | 重量 |
| 9 | gs | VARCHAR | 40 | 否 | 关税 |
| 10 | zjg | VARCHAR | 40 | 否 | 总价格 |
| 11 | fzr | VARCHAR | 40 | 否 | 负责人 |
| 12 | zt | VARCHAR | 40 | 否 | 状态 |

代码设计

  public String addpage(jigou bean, HttpServletRequest request){
	/**
	机构添加页面
	*/

        Map<String,Object> map= new HashMap<String,Object>();

        System.out.println("addPageok");
        return "jigou/jigouadd";
    }

    @RequestMapping(value="/add")
    public String add(jigou bean, HttpServletRequest request){
        /**
	机构添加处理方法
	**/
        Map<String,Object> map= new HashMap<String,Object>();//初始变量

	

		String jgid=(String)request.getParameter("jgid");//机构编号

		String jgmc=(String)request.getParameter("jgmc");//机构名称

		String lx=(String)request.getParameter("lx");//类型

        



        jigoudao.add(bean);//调用添加方法
        System.out.println("add");
        request.setAttribute("msg", "<script>alert('添加成功');</script>");//操作提示
        return "jigou/jigouadd";
    }


    /**删除 机构
     *
     */
    @RequestMapping(value="/del")
    public String  del(HttpServletRequest request,Map<String,Object> map){
	
        //	Map<String,Object> map= new HashMap<String,Object>();//初始化对象
        String a=(String)request.getParameter("keyid");//request 方式获得主键id
        int id=Integer.parseInt(a);
        request.setAttribute("msg", "<script>alert('删除成功');</script>");
        jigoudao.delete(id);//调用 删除方法
        return listpage(map,request);
    }

    /**
     * 查询jigou信息 返回list结果 前台获取
     */
    @RequestMapping(value="/listpage")
    public String listpage(Map<String,Object> map,HttpServletRequest request){
        List<Map> list= new ArrayList<Map>();//初始化对象
        Map  map1= new HashMap();

      
	String jgid=(String)request.getParameter("jgid");//机构编号
	if(jgid!=null&&!jgid.equals("")){
	map1.put("jgid",jgid);//机构编号
	}
	String jgmc=(String)request.getParameter("jgmc");//机构名称
	if(jgmc!=null&&!jgmc.equals("")){
	map1.put("jgmc",jgmc);//机构名称
	}
	String lx=(String)request.getParameter("lx");//类型
	if(lx!=null&&!lx.equals("")){
	map1.put("lx",lx);//类型
	}

        list=jigoudao.getAll(map1);//传入 方法参数 返回gly结果集
        System.out.println("listsize="+list.size());

        map.put("list", list);//传递参数
        return "jigou/jigoulist";
    }
	/**
	机构详情信息
	*/
    @RequestMapping(value="/detail")
    public String detail(Map<String,Object> map,HttpServletRequest request){

        String keyid=(String)request.getParameter("keyid");//request 方式获得主键id
         jigou bean=new jigou();//初始化对象
        bean=jigoudao.getjigouByID(Integer.parseInt(keyid));//根据id返回 jigou对象数据


		request.setAttribute("jgid", bean.getJgid());//机构编号

		request.setAttribute("jgmc", bean.getJgmc());//机构名称

		request.setAttribute("lx", bean.getLx());//类型

       


        return "jigou/jigoudetail";
    }

    /**
    进入jigou修改页面
    **/
    @RequestMapping(value="/modifypage")
    public String modifypage(Map<String,Object> map,HttpServletRequest request){
        String keyid=(String)request.getParameter("keyid");//request 方式获得主键id
        jigou bean=new jigou();//初始化对象
        bean=jigoudao.getjigouByID(Integer.parseInt(keyid));//根据id返回 jigou对象数据


      
		request.setAttribute("jgid", bean.getJgid());//机构编号

		request.setAttribute("jgmc", bean.getJgmc());//机构名称

		request.setAttribute("lx", bean.getLx());//类型

       



        return "jigou/jigoumodify";
    }

核心算法设计

  public static String getJL (String qsd,String mdd){
        String temp="";
        sz sz=new sz();
        String[] a=sz.get1sz();
        int data[][]=sz.getjl();
        int start=sz.getint(a,qsd);
        int end=sz.getint(a,mdd);
        System.out.println("start="+start);
        System.out.println("end="+end);
       temp=dijkstra(data, start,end);
       // sj=shortPath1[end];
       // System.out.println("sj="+shortPath1[end]);

        System.out.println("temp="+temp);

        temp=changword(temp);
        System.out.println("temp=new="+changword(temp));
        return temp;

    }
    public static int[] dijkstra(int[][] weight, int start) {
        // 接受一个有向图的权重矩阵,和一个起点编号start(从0编号,顶点存在数组中)
        // 返回一个int[] 数组,表示从start到它的最短路径长度
        int n = weight.length; // 顶点个数
        int[] shortPath = new int[n]; // 保存start到其他各点的最短路径
        String[] path = new String[n]; // 保存start到其他各点最短路径的字符串表示
        for (int i = 0; i < n; i++)
            path[i] = new String("["+start+"]" + "-->[" + i+"]");
        int[] visited = new int[n]; // 标记当前该顶点的最短路径是否已经求出,1表示已求出

        // 初始化,第一个顶点已经求出
        shortPath[start] = 0;
        visited[start] = 1;

        for (int count = 1; count < n; count++) { // 要加入n-1个顶点
            int k = -1; // 选出一个距离初始顶点start最近的未标记顶点
            int dmin = Integer.MAX_VALUE;
            for (int i = 0; i < n; i++) {
                if (visited[i] == 0 && weight[start][i] < dmin) {
                    dmin = weight[start][i];
                    k = i;
                }
            }

            // 将新选出的顶点标记为已求出最短路径,且到start的最短路径就是dmin
            shortPath[k] = dmin;
            visited[k] = 1;

            // 以k为中间点,修正从start到未访问各点的距离
            for (int i = 0; i < n; i++) {
                //如果 '起始点到当前点距离' + '当前点到某点距离' < '起始点到某点距离', 则更新
                if (visited[i] == 0 && weight[start][k] + weight[k][i] < weight[start][i]) {
                    weight[start][i] = weight[start][k] + weight[k][i];
                    path[i] = path[k] + "-->[" + i+"]";
                }
            }
        }
        for (int i = 0; i < n; i++) {

            System.out.println("||从" + start + "出发到" + i + "的最短路径为:" + path[i]+"");
        }
        System.out.println("=====================================");
        return shortPath;
    }

三、注意事项

1、管理员账号:admin密码:admin 数据库配置文件src\main\resources 下的 application.properties

2、开发环境为IDEA开发,数据库为mysql,使用java语言开发。

3、数据库文件名是jspssmwuliu.sql 系统名称jspssmwuliu

4、地址:login.jsp

四 系统实现

代码下载

https://download.csdn.net/download/qq_41221322/88955548

源码获取 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

相关推荐
亦世凡华、9 分钟前
MySQL--》如何在MySQL中打造高效优化索引
数据库·经验分享·mysql·索引·性能分析
m0_7482361110 分钟前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
YashanDB11 分钟前
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
数据库·yashandb·崖山数据库
ProtonBase22 分钟前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
Watermelo61722 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_7482489424 分钟前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_7482356136 分钟前
从零开始学前端之HTML(三)
前端·html
一个处女座的程序猿O(∩_∩)O2 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
hackeroink6 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
云和数据.ChenGuang6 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite