十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
用这方法,先看看你的当前路径等
成都创新互联公司专注于企业全网整合营销推广、网站重做改版、凤阳网站定制设计、自适应品牌网站建设、H5网站设计、商城网站制作、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为凤阳等各大城市提供网站开发制作服务。
URL url=getClass().getResource(".");
1、利用System.getProperty()函数获取当前路径:
System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径
2、使用File提供的函数获取当前路径:
File directory = new File("");//设定为当前文件夹
try{
System.out.println(directory.getCanonicalPath());//获取标准的路径
System.out.println(directory.getAbsolutePath());//获取绝对路径
}catch(Exceptin e){}
File.getCanonicalPath()和File.getAbsolutePath()大约只是对于new File(".")和new File("..")两种路径有所区别。
# 对于getCanonicalPath()函数,“."就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹
# 对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径
# 至于getPath()函数,得到的只是你在new File()时设定的路径
比如当前的路径为 C:\test :
File directory = new File("abc");
directory.getCanonicalPath(); //得到的是C:\test\abc
directory.getAbsolutePath(); //得到的是C:\test\abc
direcotry.getPath(); //得到的是abc
File directory = new File(".");
directory.getCanonicalPath(); //得到的是C:\test
directory.getAbsolutePath(); //得到的是C:\test\.
direcotry.getPath(); //得到的是.
File directory = new File("..");
directory.getCanonicalPath(); //得到的是C:\
directory.getAbsolutePath(); //得到的是C:\test\..
direcotry.getPath(); //得到的是..
既然是商品库存系统,那么最少有各种商品的单件信息,1:需要有商品的进货价格,卖出价格,剩余数量,每月的销售数量,进货时间等,在对应的数据库表创建相应的字段。2:商品管理就是对多种商品的管理,所以还要有各种商品的分类,比如烟酒类,饮料类,小吃类,将其分类好管理,同样数据库里面建立相对的数据表。具体需要根据自己需求来编写。3:界面的设计,这里可分为登陆界面,其中一个是用户登陆后查看的界面,和管理员登陆后查看的界面,用户登录只能查看对应的商店的物品管理,并且能进行修改自家商品。管理员登陆可查看所有的用户的商店物品,及修改物品信息。而物品分类栏就可以用jQuery来实现局部的刷新界面。左边为物品分类栏,右边为选中物品类的信息。点击右边分类物品的某件物品,可跳转到该类物品的单个信息,如第1点提到的。
摘要:ASP源码,管理系统,销售系统,管理系统
ASP版塑料卡板包装制品销售统计管理系统功能包括:销售数据录入与管理、支持条型码的销售清单(送货单)打印功能、销售业绩提成统计功能、收款与未收款分开统计功能。系统没有做太多美工,欢迎对此系统感兴趣的朋友美工设计!使用前请修改admin/conn.asp和conn.asp中的数据库名及目录。为了安全请将修改数据库名字,后台管理目录admin也可以更改为任何名称。
后台地址:admin/login.asp
管理员:admin
密码:admin
希望采纳。。。。
产销不平衡用NBPSProcedure,平衡用BPSProcedure
public class ProductSaleBTProb {
public static void main(String[] args) {
float[][] costMatrix=new float[][]{{1.5f,2f,0.3f,3f},{7f,0.8f,1.4f,2f},{1.2f,0.3f,2f,2.5f}};
/*
* 测试行、列位势方法
float[][] ASMatrix=new float[6][7];
ASMatrix[0]=new float[]{20f,0f,80f,0f,0f,0f,0f};
ASMatrix[1]=new float[]{0f,70f,0f,10f,0f,0f,0f};
ASMatrix[2]=new float[]{30f,0f,0f,20f,0f,0f,0f};
doLCPosiPower(costMatrix, ASMatrix, 3, 4);
for(int i=0;i6;i++){
System.out.println(Arrays.toString(ASMatrix[i]));
}
*/
/*
* 测试pw为产地产量,sw为销售地效率,费用矩阵costMatrix
*/
int[] pw=new int[]{100,80,50};
int[] sw=new int[]{50,70,80,30};
int[] rv=BPSProcedure(costMatrix, 3, 4, pw, sw);
for(int i=0;irv.length;i+=3){
System.out.print("编号"+rv[i]+"的产地,向编号"+rv[i+1]+"的销地运输:"+rv[i+2]+"\n");
}
/*
*产销不平衡测试
costMatrix=new float[][]{{4f,2f,5f},{3f,5f,3f},{1f,3f,2f}};
int[] pw=new int[]{8,7,4};
int[] sw=new int[]{4,8,5};
int[] rv=NBPSProcedure(costMatrix, 3, 3, pw, sw);
for(int i=0;irv.length;i+=3){
System.out.print("编号"+rv[i]+"的产地,向编号"+rv[i+1]+"的销地运输:"+rv[i+2]+"\n");
}
*/
}
//产销平衡运输费用最低问题,保证pw和sw相等
//costMatrix为费用矩阵,pnum为产地个数,即costMatrix的行数,snum为销地个数,即costMatrix的列数
//pw表示不同产地产量,sw表示不同销地销量,由于是float浮点运算,保留2位小数
//返回值没三位表示一个信息,比如{...,0,1,40,1,2,60..}表示编号0的产地向编号1的销售地运输40,编号1的产地向编号2的销售地运输60,
public static int[] BPSProcedure(float[][] costMatrix,int pnum,int snum,int[] pw,int[] sw){
int i,j;
//构造一个分配矩阵,增加3行3列,增加的第1行列表示分配的和,第2行列表示行列差,第3行列表示行、列位势
float[][] ASMatrix=new float[pnum+3][snum+3];
int tmpsum=0; //记录初始解是否分配完毕,
while(tmpsumpnum){
//运用行、列差值法分别求行、列差,对即没有给运量又没有打叉的进行统计
float min1=0,min2=0;
for(i=0;ipnum;i++){
//该行打叉则跳过
if(ASMatrix[i][snum+1]==-1)continue;
min1=0;min2=0;
for(j=0;jsnum;j++){
//如果ij有运量或者已经该行或该列打叉则不统计
if(ASMatrix[i][j]0||ASMatrix[pnum+1][j]==-1)
continue;
else if(min1==0)min1=costMatrix[i][j];
else if(min2==0){
if(min1costMatrix[i][j]){
min2=min1;
min1=costMatrix[i][j];
}else
min2=costMatrix[i][j];
}else{
if(!(min2costMatrix[i][j])) continue;
else if(!(min1costMatrix[i][j]))
min2=costMatrix[i][j];
else{
min2=min1;
min1=costMatrix[i][j];
}
}
}
if(min2!=0) //如果min2有值,则计算差额
ASMatrix[i][snum+1]=Math.round((min2-min1)*100)/100f;
else
ASMatrix[i][snum+1]=min1;
}
for(j=0;jsnum;j++){
//该列打叉则跳过
if(ASMatrix[pnum+1][j]==-1)continue;
min1=0;min2=0;
for(i=0;ipnum;i++){
//如果有运量或者该行打叉则跳过
if(ASMatrix[i][j]0||ASMatrix[i][snum+1]==-1)
continue;
else if(min1==0) min1=costMatrix[i][j];
else if(min2==0){
if(min1costMatrix[i][j]){
min2=min1;
min1=costMatrix[i][j];
}else
min2=costMatrix[i][j];
}else{
if(!(min2costMatrix[i][j])) continue;
else if(!(min1costMatrix[i][j]))
min2=costMatrix[i][j];
else{
min2=min1;
min1=costMatrix[i][j];
}
}
}
if(min2!=0)
ASMatrix[pnum+1][j]=Math.round((min2-min1)*100)/100f;
else
ASMatrix[pnum+1][j]=min1;
}
//找出没有被标记为-1的行、列差额最大的并按照满足一方最大分配,当分配数和等于最大值时对应行列差标记为-1,循环进行,直到分完
float lcpospowmax=-1;
int lindex=-1,cindex=-1;
for(i=0;ipnum;i++){
if(ASMatrix[i][snum+1]==-1)continue;
if(ASMatrix[i][snum+1]!=-1lcpospowmaxASMatrix[i][snum+1]){
lcpospowmax=ASMatrix[i][snum+1];
lindex=i;
}
}
for(j=0;jsnum;j++){
if(ASMatrix[pnum+1][j]==-1)continue;
if(ASMatrix[pnum+1][j]!=-1lcpospowmaxASMatrix[pnum+1][j]){
lcpospowmax=ASMatrix[pnum+1][j]; cindex=j;
}
}
float mincost=0;
//在列上找到最大值
if(cindex!=-1){
lindex=-1;
for(i=0;ipnum;i++){
//如果该位置有运量或者被叉掉则不在统计之内
if(ASMatrix[i][cindex]0||ASMatrix[i][snum+1]==-1)
continue;
else if(mincost==0){
mincost=costMatrix[i][cindex];
lindex=i;
}else{
if(mincostcostMatrix[i][cindex]){
mincost=costMatrix[i][cindex];
lindex=i;
}
}
}
//最终找到lindex、cindex对应格子分配,尽量满足一方
//ASMatrix[pnum][cindex]表示第cindex已经分配数、ASMatrix[lindex][snum]表示已经供应的数量
//需求量和分配量之间的关系,分配后标记每行、列和的格子也相应加上
if((sw[cindex]-ASMatrix[pnum][cindex])(pw[lindex]-ASMatrix[lindex][snum])){
ASMatrix[lindex][cindex]=Math.round((sw[cindex]-ASMatrix[pnum][cindex])*100)/100f;
ASMatrix[pnum+1][cindex]=-1; //该列已经分配完毕
}else if((sw[cindex]-ASMatrix[pnum][cindex])(pw[lindex]-ASMatrix[lindex][snum])){
ASMatrix[lindex][cindex]=Math.round((pw[lindex]-ASMatrix[lindex][snum])*100)/100f;
ASMatrix[lindex][snum+1]=-1;
tmpsum++; //该行生产量分配完毕
}else{
ASMatrix[lindex][cindex]=pw[lindex]-ASMatrix[lindex][snum];
ASMatrix[lindex][snum+1]=-1;
ASMatrix[pnum+1][cindex]=-1;
tmpsum++;
}
ASMatrix[lindex][snum]=Math.round((ASMatrix[lindex][snum]+ASMatrix[lindex][cindex])*100)/100f;
ASMatrix[pnum][cindex]=Math.round((ASMatrix[pnum][cindex]+ASMatrix[lindex][cindex])*100)/100f;
}else if(lindex!=-1){
mincost=0;
cindex=-1;
for(j=0;jsnum;j++){
if(ASMatrix[lindex][j]0||ASMatrix[pnum+1][j]==-1)
continue;
else if(mincost==0){
mincost=costMatrix[lindex][j];
cindex=j;
}else{
if(mincostcostMatrix[lindex][j]){
mincost=costMatrix[lindex][j];
cindex=j;
}
}
}
//最终找到lindex、cindex对应格子分配
if((sw[cindex]-ASMatrix[pnum][cindex])(pw[lindex]-ASMatrix[lindex][snum])){
ASMatrix[lindex][cindex]=Math.round((sw[cindex]-ASMatrix[pnum][cindex])*100)/100f;
ASMatrix[pnum+1][cindex]=-1; //该列已经分配完毕
}else if((sw[cindex]-ASMatrix[pnum][cindex])(pw[lindex]-ASMatrix[lindex][snum])){
ASMatrix[lindex][cindex]=Math.round((pw[lindex]-ASMatrix[lindex][snum])*100)/100f;
ASMatrix[lindex][snum+1]=-1;
tmpsum++; //该行生产量分配完毕
}else{
ASMatrix[lindex][cindex]=pw[lindex]-ASMatrix[lindex][snum];
ASMatrix[lindex][snum+1]=-1;
ASMatrix[pnum+1][cindex]=-1;
tmpsum++;
}
ASMatrix[lindex][snum]=Math.round((ASMatrix[lindex][snum]+ASMatrix[lindex][cindex])*100)/100f;
ASMatrix[pnum][cindex]=Math.round((ASMatrix[pnum][cindex]+ASMatrix[lindex][cindex])*100)/100f;
}
}
//至此,用行列差法找到了初始分配方案ASMatrix[i][j]==0表示叉去的格子,ipnum,jsnum
boolean findSolu=false;
int tmp1=0;
for(i=0;ipnum;i++)
for(j=0;jsnum;j++){
if(ASMatrix[i][j]0)
tmp1+=1;
}
if(tmp1(pnum+snum-1))
findSolu=true;
while(!findSolu){
// 位势法求Rij,如果能找到0的说明要调整,否则找到最优解
doLCPosiPower(costMatrix,ASMatrix,pnum,snum);
//Rij=cij-(ui+vj);对于分派矩阵中空格计算Rij
float rijmin=0; //存放最小的空格校验值
int rijminl=-1,rijminc=-1;
for(i=0;ipnum;i++){
for(j=0;jsnum;j++){
if(!(ASMatrix[i][j]0)((costMatrix[i][j]-ASMatrix[i][snum+2]-ASMatrix[pnum+2][j])rijmin)){
rijmin=Math.round((costMatrix[i][j]-ASMatrix[i][snum+2]-ASMatrix[pnum+2][j])*100)/100f;
rijminl=i;rijminc=j;
}
}
}
//如果校验值小于0,则用闭回路进行调整
if(rijmin0){
//找闭回路,
int rijminOVl=-1,rijminOVc=-1; //rijmin对应点的闭回路的顶点的i、j
boolean find=false;
// 向右边上下找
for(j=rijminc+1;jsnum!find;j++){
if(ASMatrix[rijminl][j]0){
for(i=rijminl+1;ipnum;i++){
if(ASMatrix[i][rijminc]0(ASMatrix[i][j]0)){
rijminOVl=i;rijminOVc=j;
find=true;
break;
}
}
for(i=rijminl-1;i=0;i--){
if(ASMatrix[i][rijminc]0(ASMatrix[i][j]0)){
rijminOVl=i;rijminOVc=j;
find=true;
break;
}
}
}
}
// 向左边上下找
for(j=rijminc-1;j=0!find;j--){
if(ASMatrix[rijminl][j]0){
for(i=rijminl+1;ipnum;i++){
if(ASMatrix[i][rijminc]0(ASMatrix[i][j]0)){
rijminOVl=i;rijminOVc=j;
find=true;
break;
}
}
for(i=rijminl-1;i=0;i--){
if(ASMatrix[i][rijminc]0(ASMatrix[i][j]0)){
rijminOVl=i;rijminOVc=j;
find=true;
break;
}
}
}
}
//记录rijmin闭回路相邻点中最小的,并调整分派矩阵
float minW=ASMatrix[rijminl][rijminOVc]ASMatrix[rijminOVl][rijminc]?
ASMatrix[rijminl][rijminOVc]:ASMatrix[rijminOVl][rijminc];
ASMatrix[rijminl][rijminOVc]=Math.round((ASMatrix[rijminl][rijminOVc]-minW)*100)/100f;
ASMatrix[rijminOVl][rijminc]=Math.round((ASMatrix[rijminOVl][rijminc]-minW)*100)/100f;
ASMatrix[rijminOVl][rijminOVc]=Math.round((ASMatrix[rijminOVl][rijminOVc]+minW)*100)/100f;
ASMatrix[rijminl][rijminc]=minW;
}else
findSolu=true;
}
ListInteger rv=new ArrayListInteger();
for(i=0;ipnum;i++)
for(j=0;jsnum;j++){
if(ASMatrix[i][j]0){
rv.add(i);
rv.add(j);
rv.add((int)ASMatrix[i][j]);
}
}
int[] tmprv=new int[rv.size()];
for(i=0;irv.size();i++){
tmprv[i]=rv.get(i);
}
return tmprv;
}
//根据分配矩阵和费用矩阵求出分配矩阵中的行、列位势,pnum+2、sunm+2表示行、列位势在ASMatrix中的位置
//由于方程组都是cij=ui+vj的形式,根据矩阵可以逐行逐列求解。
public static void doLCPosiPower(float[][] costMatrix,float[][] ASMatrix,int pnum,int snum){
int ansnum=0,lp=snum+2,cp=pnum+2; //lp列位置,cp行位置
boolean[] bs=new boolean[pnum+snum]; //0..pnum-1为行位势
ASMatrix[0][lp]=0; //令u0=0
bs[0]=true;
ansnum+=1;
int i,j;
while(ansnumpnum+snum){
for(i=0;ipnum;i++){ //逐行求解,根据costMatrix[i][j]=ASMatrix[i][lp]+ASMatrix[cp][j]
for(j=0;jsnum!bs[i];j++){ //根据列位势求行位势
if(ASMatrix[i][j]0bs[pnum+j]){
ASMatrix[i][lp]=Math.round((costMatrix[i][j]-ASMatrix[cp][j])*100)/100f;
ansnum+=1;
bs[i]=true;
}
}
if(!bs[i])continue;
for(j=0;jsnum;j++){ //根据行位势求列位势
if(ASMatrix[i][j]0!bs[pnum+j]){
ASMatrix[cp][j]=Math.round((costMatrix[i][j]-ASMatrix[i][lp])*100)/100f;
ansnum+=1;
bs[pnum+j]=true;
}
}
}
}
}
/*
* 产销不平衡,把它增加产地或者销地转化为平衡问题
* costMatrix费用矩阵,pnum产地个数,snum销地个数
*/
public static int[] NBPSProcedure(float[][] costMatrix,int pnum,int snum,int[] pw,int[] sw){
int pwsum=0,swnum=0;
int i,j;
for(i=0;ipw.length;i++)
pwsum+=pw[i];
for(i=0;isw.length;i++)
swnum+=sw[i];
//产大于销 增加一个销地,单位费用为0
int[] rv;
if(pwsumswnum){
float[][] nCostMatrix=new float[pnum][snum+1];
for(i=0;ipnum;i++)
for(j=0;jsnum;j++)
nCostMatrix[i][j]=costMatrix[i][j];
for(i=0;ipnum;i++)
nCostMatrix[i][snum]=0f;
int[] nsw=new int[snum+1];
for(i=0;isnum;i++)
nsw[i]=sw[i];
nsw[snum]=pwsum-swnum;
rv=BPSProcedure(nCostMatrix, pnum, snum+1, pw, nsw);
}
//销大于产 增加一个产地
else if(pwsumswnum){
float[][] nCostMatrix=new float[pnum+1][snum];
for(i=0;ipnum;i++)
for(j=0;jsnum;j++)
nCostMatrix[i][j]=costMatrix[i][j];
for(j=0;jsnum;i++)
nCostMatrix[pnum][j]=0f;
int[] npw=new int[pnum+1];
for(i=0;ipnum;i++)
npw[i]=pw[i];
npw[pnum]=swnum-pwsum;
rv=BPSProcedure(nCostMatrix, pnum+1, snum, npw, sw);
}else
rv=BPSProcedure(costMatrix, pnum, snum, pw, sw);
return rv;
}
}