zoukankan      html  css  js  c++  java
  • 石家庄地铁站项目最终总结报告

      设计思路等诸多问题都在上次的  石家庄地铁站项目进度总结  中给出高中,所以这次的总结报告主要写改进过后的代码。

    代码如下:

    DBYtil类代码如下:
    
    package util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    /**
     * 数据库连接工具
     * @author Hu
     *
     */
    public class DBUtil {
        
        public static String db_url = "jdbc:mysql://localhost:3306/subway?serverTimezone=UTC";
        public static String db_user = "root";
        public static String db_pass = "root";
        
        public static Connection getConn () {
            Connection conn = null;
            
            try {
                Class.forName("com.mysql.jdbc.Driver");//加载驱动
                conn = DriverManager.getConnection(db_url, db_user, db_pass);//连接数据库
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
        
        /**
         * 关闭连接
         * @param state
         * @param conn
         */
        public static void close (Statement state, Connection conn) {
            if (state != null) {
                try {
                    state.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        
        public static void close (ResultSet rs, Statement state, Connection conn) {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            
            if (state != null) {
                try {
                    state.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    
    
    
    SubwayDao类代码如下:
    package dao;
    //用于从数据库获取数据并以ZhanDian类的形式输出
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    import entity.ZhanDian;
    import util.DBUtil;
    
    public class SubwayDao {
        //通过id和表名获取对应表的对应站点
        public ZhanDian getCourseByBiaoId(String biao,int id)
        {
            String sql = "select * from " + biao + " where id ='" + id + "'";
            Connection conn = DBUtil.getConn();
            Statement state = null;
            ResultSet rs = null;
            ZhanDian zhandian = null;
            try 
            {
                state = conn.createStatement();
                rs = state.executeQuery(sql);
                while (rs.next()) 
                {
                    String name = rs.getString("name");
                    zhandian = new ZhanDian(id,name);
                }
            } catch (Exception e) 
            {
                e.printStackTrace();
            } finally 
            {
                DBUtil.close(rs, state, conn);
            }
            return zhandian;
        }    
        /*
        //通过id获取对应1的站点
        public ZhanDian getCourseById_1(int id){
            String sql = "select * from one where id ='" + id + "'";
            Connection conn = DBUtil.getConn();
            Statement state = null;
            ResultSet rs = null;
            ZhanDian zhandian = null;
            
            try {
                state = conn.createStatement();
                rs = state.executeQuery(sql);
                while (rs.next()) {
                    String name = rs.getString("name");
                    zhandian = new ZhanDian(id,name);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                DBUtil.close(rs, state, conn);
            }
            return zhandian;
        }
        //通过id获取对应3的站点
        public ZhanDian getCourseById_3(int id){
            String sql = "select * from three where id ='" + id + "'";
            Connection conn = DBUtil.getConn();
            Statement state = null;
            ResultSet rs = null;
            ZhanDian zhandian = null;
            try {
                state = conn.createStatement();
                rs = state.executeQuery(sql);
                while (rs.next()) {
                    String name = rs.getString("name");
                    zhandian = new ZhanDian(id,name);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                DBUtil.close(rs, state, conn);
            }
            return zhandian;
        }    
        */
        //通过line获取jiedian表中的对应的中转站点
        public ZhanDian getCourseByLine(int line)
        {
            String sql = "select * from jiedian where line ='" + line + "'";
            Connection conn = DBUtil.getConn();
            Statement state = null;
            ResultSet rs = null;
            ZhanDian zhandian = null;
            try 
            {
                state = conn.createStatement();
                rs = state.executeQuery(sql);
                while (rs.next()) 
                {
                    String name = rs.getString("name");
                    zhandian = new ZhanDian(name);
                }
            } catch (Exception e) 
            {
                e.printStackTrace();
            } finally 
            {
                DBUtil.close(rs, state, conn);
            }
            return zhandian;
        }    
        //通过表名、站点名获取对应表中的对应id
        public int getIdByBNName(String biao,String name) 
        {
            String sql ="select * from " + biao + " where name = '" + name + "'";
            Connection conn = DBUtil.getConn();
            Statement state = null;
            ResultSet rs = null;
            ZhanDian zhandian = null;
            try 
            {
                state = conn.createStatement();
                rs = state.executeQuery(sql);
                while (rs.next()) 
                {
                    int id = rs.getInt("id");
                    zhandian = new ZhanDian(id);
                }
            } catch (Exception e) 
            {
                e.printStackTrace();
            } finally 
            {
                DBUtil.close(rs, state, conn);
            }
            return zhandian.getId();
        }
        //通过中转站名字和line获取ZhanDian对象
        public ZhanDian getZhanDianByName(String name,int line) 
        {
            String sql ="select * from jiedian where name = '" + name + "' and line = '" + line + "' ";
            Connection conn = DBUtil.getConn();
            Statement state = null;
            ResultSet rs = null;
            ZhanDian zhandian = null;
            try 
            {
                state = conn.createStatement();
                rs = state.executeQuery(sql);
                while (rs.next()) 
                {
                    String qidian = rs.getString("qidian");
                    String zhongdian = rs.getString("zhongdian");
                    zhandian = new ZhanDian(qidian,zhongdian);
                }
            } catch (Exception e) 
            {
                e.printStackTrace();
            } finally 
            {
                DBUtil.close(rs, state, conn);
            }
            return zhandian;
        }
    }
    
    
    Javabean类的代码如下:
    package entity;
    public class ZhanDian 
    {
        private int id;
        private int line;
        private String name;
        private String qidian;
        private String zhongdian;
        public int getId() 
        {
            return id;
        }
        public void setId(int id) 
        {
            this.id = id;
        }
        public int getLine() 
        {
            return line;
        }
        public void setLine(int line) 
        {
            this.line = line;
        }
        public String getName() 
        {
            return name;
        }
        public void setName(String name) 
        {
            this.name = name;
        }
        public String getQidian() 
        {
            return qidian;
        }
        public void setQidian(String qidian) 
        {
            this.qidian = qidian;
        }
        public String getZhongdian() 
        {
            return zhongdian;
        }
        public void setZhongdian(String zhongdian) 
        {
            this.zhongdian = zhongdian;
        }
        public ZhanDian(int id,int line,String name) 
        {
            this.id=id;
            this.line=line;
            this.name=name;    
        }
        public ZhanDian(int id,String name) 
        {
            this.id=id;
            this.name=name;
        }
        public ZhanDian(String qidian,String zhongdian) 
        {
            this.qidian=qidian;
            this.zhongdian=zhongdian;
        }
        public ZhanDian(String name) 
        {
            this.name=name;
        }
        public ZhanDian(int id) 
        {
            this.id=id;
        }
        public ZhanDian() 
        {
        }
        
    }
    
    Transform类的代码如下:
    package assist;
    
    import dao.SubwayDao;
    
    public class Transform 
    {
        //判断输入的地点名在哪一个线路和对应线路上的对应表中对应id
        
        public int transform(String name) {
            int line=0;
            int n;
            SubwayDao sd = new SubwayDao();
            //将数据库中one表中的数据存储到数组one中
            int id=1;
            //判断是否在第一条线
            for(n=0;n<29;n++) 
            {
                if(name.equals(sd.getCourseByBiaoId("one",id).getName()))
                {
                    line=1;
                    return line;
                }
                id++;
            }
            id=1;
            for(n=0;n<37;n++) 
            {
                if(name.equals(sd.getCourseByBiaoId("two",id).getName()))
                {
                    line=2;
                    return line;
                }
                id++;
            }
            id=1;
            for(n=0;n<34;n++) 
            {
                if(name.equals(sd.getCourseByBiaoId("three",id).getName()))
                {
                    line=3;
                    return line;
                }
                id++;
            }
            id=1;
            for(n=0;n<18;n++) 
            {
                if(name.equals(sd.getCourseByBiaoId("four",id).getName()))
                {
                    line=4;
                    return line;
                }
                id++;
            }
            id=1;
            for(n=0;n<21;n++) 
            {
                if(name.equals(sd.getCourseByBiaoId("five",id).getName()))
                {
                    line=5;
                    return line;
                }
                id++;
            }
            id=1;
            for(n=0;n<18;n++) 
            {
                if(name.equals(sd.getCourseByBiaoId("six",id).getName()))
                {
                    line=6;
                    return line;
                }
                id++;
            }
            return line;
        }
        //通过起点所在线路的数组,起点和中转站的id和名字得到起点到中转站的站点名字数组
        public String[] zhongZhanQ(String [] zhongzhan,int id1,int id,String name1,String name) 
        {
            String shuchu[]=new String [zhongzhan.length];
            int n=0;
            int i;
            //起点id1小于中转站id时
            if((id1-id)<0) 
            {
                for(i=(id1-1);i<id;i++) 
                {
                    shuchu[n]=zhongzhan[i];
                    n++;
                }
            }
            //起点id大于中转站id时
            else 
            {
                for(i=(id1-1);i>(id-2);i--) 
                {
                    shuchu[n]=zhongzhan[i];
                    n++;
                }
            }
            return shuchu;
        }
        
        //将两个数字和并成一个数字
        public int HeBing(int line1,int line2) 
        {
            String sline1=String.valueOf(line1);//将int型转化为String型
            String sline2=String.valueOf(line2);//将int型转化为String型
            String sline3;
            sline3=sline1+sline2;
            int line3= Integer.parseInt(sline3); //将String型转化为int型
            return line3;
        }
        
        //通过终点所在线路的数组,终点和中转站的id和名字得到起点到中转站的站点名字数组
        public String[] zhongZhanZ(String [] zhongzhan,int id,int id2,String name,String name2) 
        {
            String shuchu[]=new String [zhongzhan.length];
            int n=0;
            int i;
            //终点id小于中转站id时
            if((id2-id)<0) 
            {
                for(i=(id-2);i>(id2-2);i--) 
                {
                    shuchu[n]=zhongzhan[i];
                    n++;
                }
            }
            //终点id大于中转站id时
            else {
                for(i=id;i<id2;i++) 
                {
                    shuchu[n]=zhongzhan[i];
                    n++;
                }
            }
            return shuchu;
        }    
        //通过表名将其数组形式输出
        public String[] zu(String biao) 
        {
            String zu[] = new String[40];
            SubwayDao sd = new SubwayDao();
            //将数据库中表中的数据存储到数组中
            int id=1;
            int xunhuan=0;
            if(biao=="one") 
            {
                xunhuan = 29;
            }else if(biao == "two")
            {
                xunhuan = 37;
            }else if(biao=="three") 
            {
                xunhuan = 34;
            }else if(biao=="four") 
            {
                xunhuan = 18;
            }else if(biao=="five") 
            {
                xunhuan = 21;
            }else if(biao=="six") 
            {
                xunhuan = 18;
            }
            for(int n=0;n<xunhuan;n++) 
            {
                zu[n]=sd.getCourseByBiaoId(biao,id).getName();
                id++;
            }
            return zu;
        }
        /*
        //将表one以数组的形式输出
        public String[] oneZu() {
            String onezu[] = new String[29];
            SubwayDao sd = new SubwayDao();
            //将数据库中one表中的数据存储到数组one中
            int id=1;
            for(int n=0;n<29;n++) {
                onezu[n]=sd.getCourseById_1(id).getName();
                id++;
            }
            return onezu;
        }            
        //将表three以数组的形式输出
        public String[] threeZu() {
            String threezu[] = new String[34];
            SubwayDao sd = new SubwayDao();
            //将数据库中one表中的数据存储到数组one中
            int id=1;
            for(int n=0;n<34;n++) {
                threezu[n]=sd.getCourseById_3(id).getName();
                id++;
            }
            return threezu;
        }    
        */    
        
        
        //判断起点和终点是否在一条线上
        public boolean tiaoShu(int qidian,int zhongdian) 
        {
            if(qidian==zhongdian) 
            {
                return true;
            }else 
            {
                return false;
            }
        }    
        //通过line获得对应的字符串
        public String[] biaoByLine(int line) 
        {
            String biao[]=new String[40];
            switch(line) 
            {
                case 1:
                {
                    biao=zu("one");
                    break;
                }
                case 2:
                {
                    biao=zu("two");
                    break;
                }
                case 3:
                {
                    biao=zu("three");
                    break;
                }
                case 4:
                {
                    biao=zu("four");
                    break;
                }
                case 5:
                {
                    biao=zu("five");
                    break;
                }
                case 6:
                {
                    biao=zu("six");
                    break;
                }
            }
            return biao;
        }    
        
        
        //通过int型line获取string型的表名
        public String stringByLine(int line) 
        {
            String biaoname=null;
            switch(line) 
            {
                case 1:
                {
                    biaoname = "one";
                    break;
                }
                case 2:
                {
                    biaoname = "two";
                    break;
                }
                case 3:
                {
                    biaoname = "three";
                    break;
                }
                case 4:
                {
                    biaoname = "four";
                    break;
                }
                case 5:
                {
                    biaoname = "five";
                    break;
                }
                case 6:
                {
                    biaoname = "six";
                    break;
                }
            }
            return biaoname;
        }    
    }
    Main类的代码如下:
    package main;
    
    import assist.Transform;
    //import assist.IntStringInt;
    import dao.SubwayDao;
    public class Main {
        
        public String zhu(String qidian,String zhongdian/*,int qixian,int zhongxian*/) 
        {
            String string="";//存储所要输出的字符串
            Transform tf = new Transform();
            SubwayDao sd = new SubwayDao();
            int id1,id2;
            String qibiao,zhongbiao;
            int qiid,zhongid;
            String qiname,zhongname;
            int qixian,zhongxian;
            //起始点名字
            qiname=qidian;
            //终点名字
            zhongname=zhongdian;
            qixian=tf.transform(qiname);
            zhongxian=tf.transform(zhongname);
            //得出起始站点id1
            id1=sd.getIdByBNName((tf.stringByLine(qixian)), qidian);
            //得出终点对应id2
            id2=sd.getIdByBNName((tf.stringByLine(zhongxian)), zhongdian);
            //如果两个点在一条线上
            if(tf.tiaoShu(qixian,zhongxian)) 
            {
                String zhengzu[] = tf.zhongZhanQ(tf.biaoByLine(qixian), id1, id2, qiname, zhongname);
                string = string +"起点至终点的站点信息:开始 >> ";
                int mn;
                for(mn=0;mn<zhengzu.length&&zhengzu[mn]!=null;mn++) 
                {
                    string = string + mn + String.valueOf(zhengzu[mn]) + ">>";
                }
                string = string + "结束";
                string = string + "总共" + String.valueOf(mn-1) + "站";
            }
            //否则在两条线上
            else 
            {
                //得出换站点的line及名字
                int line=tf.HeBing(qixian,zhongxian);
                String name=sd.getCourseByLine(line).getName();
                //通过名字获取所交的两个表名
                qibiao=sd.getZhanDianByName(name,line).getQidian();
                zhongbiao=sd.getZhanDianByName(name,line).getZhongdian();
                //通过表名和名字获取对应表里的id值
                qiid=sd.getIdByBNName(qibiao,name);
                zhongid=sd.getIdByBNName(zhongbiao,name);
                //输出前半段路程数组
                String qizu[] = tf.zhongZhanQ(tf.biaoByLine(qixian), id1, qiid, qiname, name);
                String zhongzu[] = tf.zhongZhanZ(tf.biaoByLine(zhongxian), zhongid, id2, name, zhongname);
                //输出中途站点信息
                string=string + "起点至终点的站点信息:开始";
                int m=0;
                int n=0;
                for(m=0;m<qizu.length&&qizu[m]!=null;m++) 
                {
                        string = string + ">>" + m + String.valueOf(qizu[m]);
                }
                string= string + "(在此站需要换到  " + zhongxian + "  号线)>>";
                for(n=0;n<zhongzu.length&&zhongzu[n]!=null;n++) 
                {
                    string = string + m + String.valueOf(zhongzu[n]) + ">>";
                    m++;
                }
                string ="总共经过 " + String.valueOf(m-1) + "站" +  string + "结束";
            }
            return string;
        }
    }
    
    Servlet类的代码如下:
    
    package servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    import main.Main;
    
    @WebServlet("/Servlet")
    public class Servlet extends HttpServlet{
        private static final long serialVersionUID = 1L;
        
        
        
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("utf-8");
            String method = req.getParameter("method");
            if ("lucheng".equals(method)) {
                lucheng(req, resp);
            }
        }
        
        //查找线路
        private void lucheng(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{
            Main zhu = new Main();
            req.setCharacterEncoding("utf-8");
            String qidian = req.getParameter("qidian");
            String zhongdian = req.getParameter("zhongdian");
            String string=zhu.zhu(qidian, zhongdian);
            req.setAttribute("message", string);
            req.getRequestDispatcher("lucheng.jsp").forward(req,resp);
            
        }
    }

    界面代码如下:

    //face.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>石家庄地铁</title>
    
    <style>
    <%--最顶端的div样式--%>
        .tou{
            background-image:url(image/004_1.jpg);
            background-size:100% 100%;
        }
        .caidan{
            background-color:#669999;
            100%;
            heigh:100px;
        }
    </style>
    
    </head>
    
    <frameset rows="120px,*" frameborder="1" border="2" framespacing="0" >
    <frame src="yemei.jsp" name="yemei"/>
    <frame src="zhuti.jsp" name="zhuti"/>
    </frameset>
    
    <iframe>
    <body>
    <h1 align="center" style="color:red">该浏览器不支持frameset显示</h1>
    </body>
    </iframe>
    
    </html>
    //yeimei.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>页眉</title>
    
    <style>
    <%--最顶端的div样式--%>
        .tou{
            background-image:url(image/004_1.jpg);
            background-size:100% 100%;
        }
        .caidan{
            background-color:#669999;
            100%;
        }
    </style>
    
    </head>
    
    <body>
    <%-- 顶端要显示的div --%>
        <div class="tou" >
            <div>
            <img src="image/sjzdt.jpg" style="height: 70px;  70px; margin-left:10px; margin-top: 2px;"/>
                
            </div>
            <%--  <div >
                <img src="image/bei.jpg" style="height: 70px;  35px; margin-left: 990px; margin-top: 2px;"/>
            </div> --%>
            <div class="caidan">
                <table width="30%">
                    <tr>
                        <td align='center'>
                            <a href="zhuti.jsp" target="zhuti">首页</a>
                        </td>
                        <td align='center'>
                            <a href="jianjie.jsp" target="zhuti">公司简介</a>
                        </td>
                        <td align='center'>
                            <a href="shuoming.jsp" target="zhuti">使用说明</a>
                        </td >
                    </tr>
                </table>
            </div>
        </div>
    </body>
    </html>
    //zhuti.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>页面主体</title>
    <style>
        .zhuti{
            background-image:url(image/tu.jpg);
            background-repeat : repeat;
        }
    </style>
    </head>
    
    <body>
        <div style="100%;height:700px;background:url(image/tu.jpg);background-size:100% 100%;">
            <iframe src="shuru.jsp" width="200px" height="170px"></iframe>
        </div>
    </body>
    </html>
    //shuru.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>石家庄地铁</title>
    <style>
        .a{
            margin-top: 10px;
        }
    </style>
    </head>
    <body>
        <div align="center" style="100%;background:url(image/003_2.jpg);background-size:100% 100%;">
            <form action="Servlet?method=lucheng" method="post" onsubmit="return check()">
                <div class="a">
                    起点站名字:<input type="text" id="qidian" name="qidian" style="60px;"/>
                </div>
                <div class="a">
                &nbsp;
                </div>
                <div class="a">
                    终点站名字:<input type="text" id="zhongdian" name="zhongdian" style="60px;"/>
                </div>
                <div class="a">
                &nbsp;
                </div>
                <div class="a">
                    <button type="submit" class="b">确&nbsp;&nbsp;&nbsp;定</button>
                </div>
                
            </form>
        </div>
        <script type="text/javascript">
            function check() {
                var qidian = document.getElementById("qidian");
                var zhongdian = document.getElementById("zhongdian");
                if(qidian.value=='') {
                    alert('请填写起点站');
                    return false;
                }else if(zhongdian.value==''){
                    alert('请填写终点站');
                    return false;
                }
            }
        </script>
    </body>
    </html>
    //lucheng.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>路线显示</title>
    </head>
    <body>
    <div style="100%">
        <p style="color:red"><%=request.getAttribute("message")%></p>
    </div>
    </body>
    </html>
    //jianjie.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>公司简介</title>
    </head>
    <body>
    <h1>暂无公司简介</h1>
    </body>
    </html>
    //shuoming.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>使用说明</title>
    </head>
    <body>
    <h1>暂无使用说明</h1>
    </body>
    </html>

    以上为最终的项目的所有代码。

  • 相关阅读:
    C# 导出 Excel 自定义输出格式
    ONE路由协议模块分析与应用
    2440(ARM9) L3G4200D ADXL345 裸机程序
    C# SerialPort.close() bug解决方法
    C++ Primer 第五章 表达式
    C++ Primer 第一章 快速入门
    C++ Primer 第二章 变量和基本类型
    虚拟机virtualbox中挂载新硬盘
    C++ Primer 第四章 数组与指针
    C++ Primer 第三章 标准库类型
  • 原文地址:https://www.cnblogs.com/hwh000/p/10685607.html
Copyright © 2011-2022 走看看