Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Magistr / methods / Лабораторная работа 7

.doc
Скачиваний:
7
Добавлен:
15.05.2015
Размер:
725.5 Кб
Скачать

Лабораторная работа 7.

Разработка программного модуля “Roads.aspx”.

  1. Открыть в 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”.

  1. Создать новый проект (см рис.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

  1. Закрыть предыдущий проект и открыть разрабатываемый.

Добавить к проекту новый элемент “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

  1. Добавить в проект новое решение (см. рис.9).

Рис. 9. Добавление в проект существующего вновь разработанного проекта (.dll)

Идентифицировать проект (см. рис. 10).

Рис.10. Выбор добавляемого проекта

Выполнить проект (см. рис. 11).

Рис.11. Выполнение проекта

Проект готов к дальнейшим дополнениям.