公交车管理系统java_数据结构---公交线路提示系统(Java后台+excel表格+web前端)...

importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.List;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.ss.usermodel.Cell;importorg.apache.poi.ss.usermodel.CellType;importorg.apache.poi.ss.usermodel.Row;importorg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.usermodel.Workbook;importentity.Bus;public classDao{public List readExcelList() throwsIOException {/*** 读取表格

* 输出至前端*/List list = new ArrayList<>();

String filePath="D://dns.xls";

InputStream input= newFileInputStream(filePath);

Workbook wb= null;

wb= newHSSFWorkbook(input);//得到一个工作表对象;

Sheet sheet = wb.getSheetAt(0);int rsRows = sheet.getLastRowNum();//获取sheet表中的总行数//遍历行//每一行成一个bus对象

Bus bus=null;for (int i=0;i<=rsRows;i++) {

Row row=sheet.getRow(i);int id=0;

String name=null;//遍历行单元格,已知有两列;第一列int型id,第二列String型name

Cell cell1 = row.getCell(0);

Cell cell2= row.getCell(1);//一定要检验是否为空

if(cell1==null||cell1.equals(null)||cell1.getCellType()==CellType.BLANK){break;

}else{//数值型

id=(int) cell1.getNumericCellValue();

}if(cell2==null||cell2.equals(null)||cell2.getCellType()==CellType.BLANK){break;

}else{//字符串型

name=cell2.getStringCellValue();

}

bus=newBus(id,name);

list.add(bus);

}

wb.close();//关闭

returnlist;

}public static ListreadTxtFile(String filePath) {/*** 读取文档

*@paramfilePath

*@return

*/List list = new ArrayList();try{

String encoding= "UTF-8";

File file= newFile(filePath);if (file.isFile() &&file.exists()) {

InputStreamReader read= newInputStreamReader(newFileInputStream(file), encoding);

BufferedReader bufferedReader= newBufferedReader(read);

String lineTxt= null;while ((lineTxt = bufferedReader.readLine()) != null) {if (!lineTxt.startsWith("#"))

list.add(lineTxt);

}

read.close();

}else{

System.out.println("找不到文件");

}

}catch(Exception e) {

System.out.println("出错了");

e.printStackTrace();

}returnlist;

}public staticString[][] createArray(String filePath){/*** 读取文档生成二维数组

*@paramfilePath

*@return

*/List list =readTxtFile(filePath);

System.out.println("读取成功");

String[][] array= newString[list.size()][];for(int i=0;i

array[i]= newString[list.size()];

String linetxt=list.get(i);

String[] myArray= linetxt.replaceAll("\\s+", "@").split("@");for(int j=0;j

array[i][j]=myArray[j];

}

}returnarray;

}public static int[][] str2int(String[][] str){//String型转为int型

inta,b;

a=str.length;

b= str[0].length;int result[][] = new int[a][b];for(int i = 0 ; i < a ; ++i)for(int j = 0 ; j < b ; ++j) {

result[i][j]=Integer.parseInt(str[i][j]);

}returnresult;

}public static List dijkstra(int vs,int vf) throwsIOException {/*** Dijkstra最短路径。

* 即图中"节点vs"到其它各个节点的最短路径。

*@paramvs 起始节点

*@paramGraph 图

* 将最短路径上的顶点,距离存入泛型集合list,返回

* 注意整型用Integer不能用int*/List list= new ArrayList();//将最短路径上的顶点,距离存入list,返回

String[][] str= createArray("D:\\text.txt");//将读取的String型二维数组转化为int型

int[][]Graph =str2int(str);int NUM = Graph[0].length;int[] prenode = new int[NUM];//前驱节点数组

int[] path = new int[NUM];//最短距离数组

boolean[] flag = new boolean[NUM];//该节点是否已经找到最短路径

int vnear = 0;//距离vs最近的节点//初始化

for (int i = 0; i

prenode[i]=i;

path[i]= Graph[vs][i];//顶点i的最短路径为顶点vs到i的权

flag[i] = false;

}

flag[vs]= true;//vs自身初始化//遍历 Graph.length-1次,找出每个顶点的最短路径

for (int v = 1; v < Graph.length; v++) {//每次循环求得当前距离vs最近的顶点vnear和最短距离min

int min = 100000;//100000表示无穷

for (int j = 0; j < Graph.length; j++) {if (!flag[j] && path[j]

min=path[j];

vnear=j;

}

}//标记顶点vnear为已经获取到最短路径

flag[vnear] = true;//根据vnear更新vs到其他所有节点的前驱节点和最短路径

for (int k = 0; k < Graph.length; k++) {if (!flag[k] && (min + Graph[vnear][k])

prenode[k]=vnear;

path[k]= min +Graph[vnear][k];

}

}

}

list.add(path[vf]+"");//+""作用是将int转化为String型//依次保存前驱

for(int i=0;i<4&&prenode[vf]!=vs;i++) {//i范围根据自己表的情况

list.add(getNamebyid(vf));

vf=prenode[vf];

}

list.add(getNamebyid(vs));returnlist;

}public int getIdbyname(String name)throwsIOException {//通过name获得id

int x=-1;

String filePath="D://dns.xls";

InputStream input= newFileInputStream(filePath);

Workbook wb= null;

wb= newHSSFWorkbook(input);//得到一个工作表对象;

Sheet sheet = wb.getSheetAt(0);int rsRows = sheet.getLastRowNum();//获取sheet表中的总行数//遍历行

for (int i=0;i<=rsRows;i++) {

Row row=sheet.getRow(i);int id=0;

String flag=null;//遍历行单元格,已知有两列;第一列int型id,第二列String型name

Cell cell1 = row.getCell(0);

Cell cell2= row.getCell(1);if(cell1==null||cell1.equals(null)||cell1.getCellType()==CellType.BLANK){break;

}else{//数值型

id=(int) cell1.getNumericCellValue();

};if(cell2==null||cell2.equals(null)||cell2.getCellType()==CellType.BLANK){break;

}else{//字符串型

flag=cell2.getStringCellValue();

};

String a=newString(flag);

String b=newString(name);if(a.equals(b)){

x=id;

};

}

wb.close();//记得关闭

returnx;

}public static String getNamebyid(int id) throwsIOException {//通过id获得name

String str=null;

String filePath="D://dns.xls";

InputStream input= newFileInputStream(filePath);

Workbook wb= null;

wb= newHSSFWorkbook(input);//得到一个工作表对象;

Sheet sheet = wb.getSheetAt(0);int rsRows = sheet.getLastRowNum();//获取sheet表中的总行数//遍历行

for (int i=0;i<=rsRows;i++) {int flag=0;

String name=null;

Row row=sheet.getRow(i);//遍历行单元格

Cell cell1= row.getCell(0);

Cell cell2= row.getCell(1);if(cell1==null||cell1.equals(null)||cell1.getCellType()==CellType.BLANK){break;

}else{//数值型

flag=(int) cell1.getNumericCellValue();

}if(cell2==null||cell2.equals(null)||cell2.getCellType()==CellType.BLANK){break;

}else{//字符串型

name=cell2.getStringCellValue();

}if(flag==id){

str=name;

}

}

wb.close();//记得关闭

returnstr;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值