Лабораторная работа 7.
Разработка программного модуля “Roads.aspx”.
-
Открыть в WordPad файл “r61.txt” (см. рис. 1).
19 26
19 26
74.2943 69.523
145.706 12.9047
1 Бира
0
101.126 56.3755
0
1 Гнилое
1
110.662 52.7074
0
1 Тещино
2
108.896 39.607
2
0 Бира
3450 5
0 300
4 Волочаевка
2000 3
0 600
1 Березовка
3
102.009 42.9258
0
1 Волочаевка
Рис. 1. Вид файла r61.txt
Заменить в нем все точки запятыми и после каждого вводимого числа нажать клавишу “Enter”. Файл должен быть приведен к виду (см. Рис. 2).
19
26
19
26
74,2943
69,523
145,706
12,9047
1
Бира
0
101,126
56,3755
0
1
Гнилое
1
110,662
52,7074
0
1
Тещино
2
108,896
39,607
2
0
Рис. 2. Вид преобразованного файла “r61.txt”.
Сохранить его с другим именем в формате Unicode (см. Рис. 3).
Рис. 3. Сохранение файла r61_U.txt
Теперь файл готов к использованию в разрабатываемом модуле”Roads.aspx”.
-
Создать новый проект (см рис.4)
Рис. 4. Создание проекта библиотеки классов C# (.dll)
Изменить файл Class1.cs к виду (см. рис.5).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Path
{
public class Class1
{
public class pp
{
public int nvr;
public pp()
{
nvr = 0;
}
}
public class ee
{
public int nvr;
public ee()
{
nvr = 0;
}
}
public class Putver
{
public List<pp> Pvt;
public Putver()
{
Pvt = null;
}
}
public class Puted
{
public List<ee> Pet;
public Puted()
{
Pet = null;
}
}
public class Loads
{
public int nver;
public String namev;
public double ves;
public double zena;
public int reis;
public int tip;
public Loads()
{
nver = 0;
namev = null;
ves = 0.0;
zena = 0.0;
reis = 0;
tip = 0;
}
}
public class DPoint
{
public double x;
public double y;
public DPoint()
{
x = 0.0;
y = 0.0;
}
}
public class Vertex // вершина
{
// protected:
// GeoPoint coord;
public String name;
public int tip;
public int numbv;
public DPoint pv;
public int kolper;
// int nlist;
// public Loads Lod;
// TList *Ld[1000];
//TList *Ld;
// public GenericList<Loads>[] Ld;
public List<Loads> Ld;
// private List<Loads> Ld;
public Vertex()
{
name = null;
tip = 0;
numbv = 0;
pv = null;
// Lod = null;
Ld = null;
}
}
public class Edge
{
//protected:
// Vertex v1,v2;
public double length;
public int numbe, vn, vk;
public DPoint pn, pk;
public double prsp;
public double zagr;
public int napr;
public double v;
public double nap1, nap2;
}
public void path(int mb, int me, int n, int kb, ref Edge[] Ed, ref Vertex[] Ver, ref Putver[] Putv, ref Puted[] Pute, out int npi, int mv, int mme)
{
/*
ia - Массив номеров вершин пути
mk - Элементы массива вершин графа
ik - Номера элементов mk
ng - Число вершин
n - Число дуг
m1 - Начальная вершина
n1 - Конечная вершина
*/
int i = 0, i1 = 0, i2 = 0, j = 0, j2 = 0, j4 = 0, k = 0, k3 = 0, l = 0, v = 0, vv = 0, kolper = 0, jj = 0, m1 = 0, n1 = 0;
//int *m,*mk,*ik,*ia;
int[] m = new Int32[1000];
int[] mk = new Int32[1000];
int[] ik = new Int32[1000];
int[] ia = new Int32[1500];
// pp ppv = new pp();
// ee eev = new ee();
ik[0] = 0;
npi = 0;
for (i = 0; i < 1500; i++) ia[i] = 0;
j = 0;
ik[j] = 0;
for (i = 0; i < mv; i++)
{
v = Ver[i].numbv;
for (k = 0; k < mme; k++)
{
if (Ed[k].vn == v)
{
mk[j] = Ed[k].vk;
j++;
}
if (Ed[k].vk == v)
{
mk[j] = Ed[k].vn;
j++;
}
}
ik[i + 1] = j;
}
j4 = 0;
i = 0;
for (v = 0; v < mv; v++)
{
if (Ver[v].numbv == mb) { i = v; break; }
}
j = 0;
i2 = ik[i + 1] - 1;
i1 = ik[i];
for (k = i1; k <= i2; k++)
m[k] = mk[k];
ia[j] = mb;
l24:
for (k = i1; k <= i2; k++)
if (m[k] >= 0)
{
j2 = m[k];
goto l26;
}
goto l25;
l26: m[k] = -1;
ia[j] = Ver[i].numbv;
ia[j + 1] = j2;
if (j2 != me)
{
for (v = 0; v < mv; v++)
{
if (Ver[v].numbv == j2) { i = v; break; }
}
// i=j2;
j++;
i1 = ik[i];
i2 = ik[i + 1] - 1;
for (k = i1; k <= i2; k++)
{
m[k] = mk[k];
for (k3 = 0; k3 <= j; k3++)
if (m[k] == ia[k3])
m[k] = -1;
}
// if(j2==me)goto m11;
goto l24;
}
// m11:
j4++;
npi++;
for (l = 0; l <= j + 1; l++)
{ // 1
// Putv[kb+npi-1]->Add((void *)ia[l]);
for (k = 0; k < n; k++)
{
if ((Ed[k].vn == ia[l] && Ed[k].vk == ia[l + 1])
|| (Ed[k].vk == ia[l] && Ed[k].vn == ia[l + 1]))
{
if (Ed[k].napr == 1)
{
if (!(Ed[k].vn == ia[l] && Ed[k].vk == ia[l + 1]))
{
npi--;
goto mimo;
}
}
}
}
} // 1 end
Putv[kb + npi] = new Putver();
Pute[kb + npi] = new Puted();
Putv[kb + npi].Pvt = new List<pp>();
Pute[kb + npi].Pet = new List<ee>();
// Putv[cher].Pvt = new List<pp>();
// Pute[cher].Pet = new List<ee>();
for (l = 0; l <= j + 1; l++)
{
pp ppv = new pp();
ppv.nvr = (Int32)ia[l];
Putv[kb + npi - 1].Pvt.Add(ppv);
for (k = 0; k < n; k++)
{
if ((Ed[k].vn == ia[l] && Ed[k].vk == ia[l + 1])
|| (Ed[k].vk == ia[l] && Ed[k].vn == ia[l + 1]))
{
ee eev = new ee();
eev.nvr = (Int32)Ed[k].numbe;
Pute[kb + npi - 1].Pet.Add(eev); break;
}
}
}
mimo:
ia[j + 1] = 0;
for (k = i1; k <= i2; k++)
if (m[k] >= 0)
goto l24;
l25: if (j > 0)
j--;
ia[j + 1] = 0; // ????
for (v = 0; v < mv; v++)
{
if (Ver[v].numbv == ia[j]) { i = v; break; }
}
// i=ia[j];
i1 = ik[i];
i2 = ik[i + 1] - 1;
for (v = 0; v < mv; v++)
{
if (Ver[v].numbv == mb) { vv = v; break; }
}
if (i != vv)
goto l24;
for (k = i1; k <= i2; k++)
if (m[k] >= 0)
goto l24;
return;
}
public void ShellSort(double[] item, int count, int[] indmas, int cher)
{
int i = 0; int j = 0; int gap = 0; int k = 0;
double x = 0;
int jj = 0; int kk = 0;
// char x;
int[] a = new Int32[5];
a[0] = 9; a[1] = 5; a[2] = 3; a[3] = 2; a[4] = 1;
for (k = 0; k < 5; k++)
{
gap = a[k];
for (i = gap + cher; i < count + cher; i++)
{
x = item[i];
jj = indmas[i];
for (j = i - gap; j >= cher && x < item[j]; j = j - gap)
{
item[j + gap] = item[j];
indmas[j + gap] = indmas[j];
}
item[j + gap] = x;
indmas[j + gap] = jj;
}
kk = 0;
}
kk = 0;
return;
}
}
}
Рис. 5. Вид файла Class1.cs
-
Закрыть предыдущий проект и открыть разрабатываемый.
Добавить к проекту новый элемент “Roads” подобно тому , как это сделано в лабораторной работе 3.
Занести показанный на рис. 6 текст в файл Global.asax.cs.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
namespace WebApplication3
{
public class pp
{
public int nvr;
public pp()
{
nvr = 0;
}
}
public class ee
{
public int nvr;
public ee()
{
nvr = 0;
}
}
public class Putver
{
public List<pp> Pvt;
public Putver()
{
Pvt = null;
}
}
public class Puted
{
public List <ee> Pet;
public Puted()
{
Pet = null;
}
}
public class Loads
{
public int nver;
public String namev;
public double ves;
public double zena;
public int reis;
public int tip;
public Loads()
{
nver = 0;
namev = null;
ves =0.0 ;
zena = 0.0;
reis = 0;
tip = 0;
}
}
public class DPoint
{
public double x;
public double y;
public DPoint()
{
x = 0.0;
y = 0.0;
}
}
public class Vertex // вершина
{
// protected:
// GeoPoint coord;
public String name;
public int tip;
public int numbv;
public DPoint pv;
public int kolper;
// int nlist;
// public Loads Lod;
// TList *Ld[1000];
//TList *Ld;
// public GenericList<Loads>[] Ld;
public List <Loads> Ld;
// private List<Loads> Ld;
public Vertex()
{
name = null;
tip = 0;
numbv = 0;
pv = null;
// Lod = null;
Ld = null;
}
}
public class Edge
{
//protected:
// Vertex v1,v2;
public double length;
public int numbe, vn, vk;
public DPoint pn, pk;
public double prsp;
public double zagr;
public int napr;
public double v;
public double nap1, nap2;
}
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// Код, выполняемый при запуске приложения
}
void Application_End(object sender, EventArgs e)
{
// Код, выполняемый при завершении работы приложения
}
void Application_Error(object sender, EventArgs e)
{
// Код, выполняемый при возникновении необрабатываемой ошибки
}
void Session_Start(object sender, EventArgs e)
{
// Код, выполняемый при запуске нового сеанса
}
void Session_End(object sender, EventArgs e)
{
// Код, выполняемый при запуске приложения.
// Примечание: Событие Session_End вызывается только в том случае, если для режима sessionstate
// задано значение InProc в файле Web.config. Если для режима сеанса задано значение StateServer
// или SQLServer, событие не порождается.
}
}
}
Рис. 6. Текст файла Global.asax.cs
Изменить файл Roads.aspx к виду (см. Рис. 7).
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Roads.aspx.cs" Inherits="WebApplication3.Roads" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<style type="text/css">
.style1
{
width: 102px;
}
.style2
{
width: 115px;
}
.style3
{
width: 104px;
}
</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:Button ID="bVvod" runat="server" onclick="bVvod_Click1"
Text="Ввод_файла" Width="118px" />
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="bPut" runat="server"
Text="Пути" onclick="bPut_Click1" />
<br />
<table class="style1">
<tr>
<td id ="L1" class="style2" width="350px">
<!-- <asp:DropDownList ID="DropDownList1" runat="server" Width="340px" Height="600px">
</asp:DropDownList> -->
<asp:ListBox ID="ListBox1" runat="server" Width="340px" Height="340px">
</asp:ListBox>
</td>
<td id ="Im1" class="style3" width="340px">
<asp:Image ID="Image1" runat="server" Width="343px" />
</td>
</tr>
</table>
</asp:Content>
Рис. 7. Файл Roads.aspx
Изменить файл Roads.aspx.cs к виду (см. рис. 8).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Runtime.InteropServices;
namespace WebApplication3
{
public partial class Roads : System.Web.UI.Page
{
[DllImport("Class1")]
extern unsafe static public void path(int mb, int me, int n, int kb, ref Edge[] Ed, ref Vertex[] Ver, ref Putver[] Putv, ref Puted[] Pute, out int npi, int mv, int mme);
[DllImport ("Class1")]
extern unsafe static public void ShellSort(ref double [] item,int count, ref int [] indmas, int cher);
static public int mv = 5;
static public int me = 5;
static public Vertex[] Ver;
static public Edge[] Ed;
static public Int32 pp;
static public Int32 ee;
static public Putver [] Putv;
static public Puted [] Pute;
//-----------
//----------
protected void Page_Load(object sender, EventArgs e)
{
}
protected void bVvod_Click1(object sender, EventArgs e)
{
string Filename1 = "";
int i = 0;
int j = 0;
int n = 0;
int nmv = 5;
int nme = 5;
int kolper = 0;
// Vertex[] Ver;
// Edge[] Ed;
DPoint pt = new DPoint();
DPoint p0 = new DPoint();
DPoint p1 = new DPoint();
// Loads Lod = new Loads();
// pt.x = 0.0; pt.y = 0; p0.x = 0; p0.y = 0; p1.x = 0; p1.y = 0;
string savepath = @"C:\inetpub\wwwroot\WebApplication3\WebApplication3\Roads\";
if (FileUpload1.HasFile == true)
{
Filename1 = FileUpload1.FileName.ToString();
savepath += Filename1;
FileUpload1.SaveAs(savepath);
using (StreamReader streamReader = new StreamReader(savepath))
// StreamReader streamReader = new StreamReader(savepath)
{
string str = "";
if (!streamReader.EndOfStream)
{
str = streamReader.ReadLine();
mv = Convert.ToInt32(str);
str = streamReader.ReadLine();
me = Convert.ToInt32(str);
// Vertex [] Ver = new Vertex[mv];
// Edge [] Ed = new Edge[me];
Ver = new Vertex[mv];
Ed = new Edge[me];
str = streamReader.ReadLine();
nmv = Convert.ToInt32(str);
str = streamReader.ReadLine();
nme = Convert.ToInt32(str);
str = streamReader.ReadLine();
p0.x = Convert.ToDouble(str);
str = streamReader.ReadLine();
p0.y = Convert.ToDouble(str);
str = streamReader.ReadLine();
p1.x = Convert.ToDouble(str);
str = streamReader.ReadLine();
p1.y = Convert.ToDouble(str);
for (i = 0; i < mv; i++)
{
Ver[i] = new Vertex();
// Ver[i].Lod = new Loads();
str = streamReader.ReadLine();
Ver[i].tip = Convert.ToInt32(str);
if (Ver[i].tip == 1)
{
str = streamReader.ReadLine();
Ver[i].name = str.ToString();
}
str = streamReader.ReadLine();
Ver[i].numbv = Convert.ToInt32(str);
str = streamReader.ReadLine();
Ver[i].pv = new DPoint();
Ver[i].pv.x = Convert.ToDouble(str);
str = streamReader.ReadLine();
Ver[i].pv.y = Convert.ToDouble(str);
str = streamReader.ReadLine();
kolper = Convert.ToInt32(str);
Ver[i].kolper = Convert.ToInt32(str);
if (kolper > 0)
{
Ver[i].Ld = new List<Loads>();
for (j = 0; j < kolper; j++)
{
Loads Lod = new Loads();
str = streamReader.ReadLine();
Lod.nver = Convert.ToInt32(str);
str = streamReader.ReadLine();
Lod.namev = str.ToString();
str = streamReader.ReadLine();
Lod.ves = Convert.ToDouble(str);
str = streamReader.ReadLine();
Lod.zena = Convert.ToDouble(str);
str = streamReader.ReadLine();
Lod.tip = Convert.ToInt32(str);
str = streamReader.ReadLine();
Lod.reis = Convert.ToInt32(str);
Ver[i].Ld.Add(Lod);
Lod = null;
n++;
} // end j
} // end if kolper
n++;
} // end i Ver
n++;
for (i = 0; i < me; i++)
{
Ed[i] = new Edge();
str = streamReader.ReadLine();
Ed[i].numbe = Convert.ToInt32(str);
str = streamReader.ReadLine();
Ed[i].vn = Convert.ToInt32(str);
str = streamReader.ReadLine();
Ed[i].vk = Convert.ToInt32(str);
Ed[i].pn = new DPoint();
str = streamReader.ReadLine();
Ed[i].pn.x = Convert.ToDouble(str);
str = streamReader.ReadLine();
Ed[i].pn.y = Convert.ToDouble(str);
Ed[i].pk = new DPoint();
str = streamReader.ReadLine();
Ed[i].pk.x = Convert.ToDouble(str);
str = streamReader.ReadLine();
Ed[i].pk.y = Convert.ToDouble(str);
str = streamReader.ReadLine();
Ed[i].length = Convert.ToDouble(str);
str = streamReader.ReadLine();
Ed[i].prsp = Convert.ToDouble(str);
str = streamReader.ReadLine();
Ed[i].zagr = Convert.ToDouble(str);
str = streamReader.ReadLine();
Ed[i].napr = Convert.ToInt32(str);
str = streamReader.ReadLine();
Ed[i].v = Convert.ToDouble(str);
}
n++;
} // if endOfstrim
// } // using
n = 0;
} // if file
}
}
protected void bPut_Click1(object sender, EventArgs e)
{ //0
int i = 0; int j = 0; int n = 0; int v = 0;
int nn = 0; int mm = 0; int tek = 0; int n1 = 0;
int k = 0; int npi = 0; int cher = 0; int jj = 0;
int kp = 0; int kk = 0; int sc = 0;
int m = 0;
int kolper = 0;
int vsp = 0;
Loads hh1 = new Loads();
Putv = new Putver [500];
Pute = new Puted [500];
Putver Promp=null;
Putver Promp1=null;
Puted Promd=null;
Puted Promd1=null;
int[] nachv = new Int32[500];
int[] kput = new Int32[500];
int[] konv = new Int32[500];
int[] indmas = new Int32[1000];
double[] dlinp = new double[1000];
double[] gruz = new double[500];
double[] gruzp = new double[500];
double[] intens = new double[500];
double dlput = 0.0;
double putprom = 0.0;
string buff = "";
for (i = 0; i < mv; i++)
{ //1
if (Ver[i].tip == 1)
{ //2
v = Ver[i].numbv;
if (Ver[i].Ld != null)
{ //3
kolper = Ver[i].Ld.Count;
for (jj = 0; jj < kolper; jj++)
{ //4
hh1 = (Loads)Ver[i].Ld[jj];
vsp = hh1.nver;
for (nn = 0; nn < mv; nn++)
{ //5
if (Ver[nn].numbv == vsp)
{ //6
mm = nn; break;
} //e6
} //e5
n1 = Ver[mm].numbv;
npi = 0;
nachv[tek] = Ver[i].numbv;
konv[tek] = n1;
gruz[tek] = hh1.ves;
gruzp[tek] = gruz[tek];
cher = 0;
for (j = 0; j < tek; j++)
{ //7
cher = cher + kput[j];
} // e7
Putv[cher] = new Putver();
Putv[cher].Pvt = new List<pp>();
Pute[cher] = new Puted();
Pute[cher].Pet = new List<ee>();
path(Ver[i].numbv, n1, me, cher, ref Ed, ref Ver, ref Putv, ref Pute, out npi, mv,me);
//path();
kput[tek] = npi;
tek++;
for (j = cher; j < cher + kput[tek - 1]; j++)
{ //8
if (Putv[j] != null)
{ //9
m = Putv[j].Pvt.Count;
if(Pute[j]!=null)
{ //10
m=Pute[j].Pet.Count;
dlput=0.0;
for (k = 0; k < m; k++)
{ //11
vsp=Pute[j].Pet[k].nvr;
for (nn = 0; nn < me; nn++)
{ //12
if (Ed[nn].numbe == vsp)
{ //13
mm = nn; break;
} //e13
} // e12
dlput = dlput + Ed[mm].length;
} // e11
} // e10
dlinp[j] = dlput;
} //e9
} // e8
} // e4
// n++;
} // e3
} // e2
} // end i first e1
for (i = 0; i < tek; i++)
{
cher = 0;
if (i > 0)
{
for (j = 1; j <= i; j++) cher = cher + kput[j - 1];
}
for (kk = cher; kk < cher + kput[i]; kk++) indmas[kk] = kk;
ShellSort(ref dlinp, kput[i], ref indmas, cher);
k = 0;
}
k = 0;
cher = 0;
for (v = 0; v < tek; v++)
{ //v
k = kput[v];
cher = 0;
if (v > 0)
{
for (jj = 1; jj <= v; jj++) cher = cher + kput[jj - 1];
}
Promp1 = Putv[0];
Promd1 = Pute[0];
for (i = cher; i < cher + k; i++)
{ // i
kk = i;
mm = indmas[kk];
if (mm >= 0)
{ // mm
Promp = Putv[kk];
Promd = Pute[kk];
// putprom=dlinp[i];
Putv[kk] = Putv[mm];
Pute[kk] = Pute[mm];
// dlinp[i]=dlinp[mm];
indmas[kk] = -1;
sc = -1;
vx1:
if (sc == 0) goto vix1;
sc = 0;
for (j = cher; j < cher + k; j++)
{
if (indmas[j] == kk)
{
Promp1 = Putv[j];
Promd1 = Pute[j];
Putv[j] = Promp;
Pute[j] = Promd;
kk = j;
Promp = Promp1;
Promd = Promd1;
indmas[j] = -1;
sc++;
goto vx1;
}
}
} // end mm
vix1: ;
} // end i
} // end v
k = 0;
for (j = 0; j < tek; j++) k = k + kput[j];
for (j = 0; j < k; j++)
{
if (Putv[j] != null)
{
m = Putv[j].Pvt.Count;
buff = "";
buff =buff + j.ToString();
buff = buff + ":";
for (i = 0; i < m; i++)
{
mm = (int)Putv[j].Pvt[i].nvr;
buff = buff + mm.ToString();
buff = buff + "-";
}
buff = buff + "(";
buff = buff + dlinp[j].ToString();
buff = buff + ")";
// DropDownList1.Items.Add(buff);
ListBox1.Items.Add(buff);
}
}
k = 0;
kp++;
} // end bPut_click1
} // end class
} // end namespace
Рис. 8. Вид файла Roads.aspx.cs
-
Добавить в проект новое решение (см. рис.9).
Рис. 9. Добавление в проект существующего вновь разработанного проекта (.dll)
Идентифицировать проект (см. рис. 10).
Рис.10. Выбор добавляемого проекта
Выполнить проект (см. рис. 11).
Рис.11. Выполнение проекта
Проект готов к дальнейшим дополнениям.