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

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

相关推荐
EricWang13584 分钟前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
September_ning4 分钟前
React.lazy() 懒加载
前端·react.js·前端框架
时差9537 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式9 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
web行路人14 分钟前
React中类组件和函数组件的理解和区别
前端·javascript·react.js·前端框架
超雄代码狂36 分钟前
ajax关于axios库的运用小案例
前端·javascript·ajax
秋意钟36 分钟前
MySQL日期类型选择建议
数据库·mysql
长弓三石44 分钟前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙
小马哥编程1 小时前
【前端基础】CSS基础
前端·css
嚣张农民1 小时前
推荐3个实用的760°全景框架
前端·vue.js·程序员