transign_form.cs

来自「第三方物流信息管理平台 1、数据库配置: 需要打开MS SQL SERVE」· CS 代码 · 共 561 行 · 第 1/2 页

CS
561
字号
			this.sqlDataAdapter1.UpdateCommand = this.sqlUpdateCommand1;
			// 
			// sqlDeleteCommand1
			// 
			this.sqlDeleteCommand1.CommandText = "DELETE FROM city_trans WHERE (城市编码 = @Original_城市编码) AND (城市名称 = @Original_城市名称 O" +
				"R @Original_城市名称 IS NULL AND 城市名称 IS NULL)";
			this.sqlDeleteCommand1.Connection = this.sqlConnection1;
			this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_城市编码", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "城市编码", System.Data.DataRowVersion.Original, null));
			this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_城市名称", System.Data.SqlDbType.VarChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "城市名称", System.Data.DataRowVersion.Original, null));
			// 
			// sqlConnection1
			// 
			this.sqlConnection1.ConnectionString = "initial catalog=logistics;integrated security=SSPI;persist security info=False;wo" +
				"rkstation id=SOFT54;packet size=4096";
			// 
			// sqlInsertCommand1
			// 
			this.sqlInsertCommand1.CommandText = "INSERT INTO city_trans(城市名称) VALUES (@城市名称); SELECT 城市编码, 城市名称 FROM city_trans WH" +
				"ERE (城市编码 = @@IDENTITY)";
			this.sqlInsertCommand1.Connection = this.sqlConnection1;
			this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@城市名称", System.Data.SqlDbType.VarChar, 50, "城市名称"));
			// 
			// sqlSelectCommand1
			// 
			this.sqlSelectCommand1.CommandText = "SELECT 城市编码, 城市名称 FROM city_trans";
			this.sqlSelectCommand1.Connection = this.sqlConnection1;
			// 
			// sqlUpdateCommand1
			// 
			this.sqlUpdateCommand1.CommandText = "UPDATE city_trans SET 城市名称 = @城市名称 WHERE (城市编码 = @Original_城市编码) AND (城市名称 = @Ori" +
				"ginal_城市名称 OR @Original_城市名称 IS NULL AND 城市名称 IS NULL); SELECT 城市编码, 城市名称 FROM c" +
				"ity_trans WHERE (城市编码 = @城市编码)";
			this.sqlUpdateCommand1.Connection = this.sqlConnection1;
			this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@城市名称", System.Data.SqlDbType.VarChar, 50, "城市名称"));
			this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_城市编码", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "城市编码", System.Data.DataRowVersion.Original, null));
			this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_城市名称", System.Data.SqlDbType.VarChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "城市名称", System.Data.DataRowVersion.Original, null));
			this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@城市编码", System.Data.SqlDbType.Int, 4, "城市编码"));
			// 
			// tDataset1
			// 
			this.tDataset1.DataSetName = "tDataset";
			this.tDataset1.Locale = new System.Globalization.CultureInfo("zh-CN");
			this.tDataset1.Namespace = "http://www.tempuri.org/tDataset.xsd";
			// 
			// transign_Form
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
			this.ClientSize = new System.Drawing.Size(704, 421);
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.button3,
																		  this.button2,
																		  this.textBox5,
																		  this.label5,
																		  this.button1,
																		  this.groupBox1});
			this.Name = "transign_Form";
			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
			this.Text = "transign_Form";
			this.Load += new System.EventHandler(this.transign_Form_Load);
			this.groupBox1.ResumeLayout(false);
			((System.ComponentModel.ISupportInitialize)(this.tDataset1)).EndInit();
			this.ResumeLayout(false);

		}
		#endregion


		private void transign_Form_Load(object sender, System.EventArgs e)
		{
			tDataset1.Clear();
			sqlDataAdapter1.Fill(tDataset1);

		
		}

		private void set_pragh(int startverx,int endverx)
		{
			int mm=this.tDataset1.Tables[0].Rows.Count;//图的接点数,城市数量
			
			int[,] pragh=new int[mm,mm];//距离矩阵
			string fmu;int ff;//起点
			string smu;int ss;//终点
			string dmu;int dd;//距离

			int[] d=new int[mm];//数据结构中的带权长度数组
			bool [,] p=new bool[mm,mm];//数据结构中的最短路径存储数组
			bool [] final=new bool[mm];//确定是否将某个点加入S集合
			int min;
			int k=0;
			int n=0;
			int q=0;
			int[] result=new int[50];//存储运算结果的数组
			string[] point=new string[50];

	
						
			for(int i=0;i<mm;i++)    //设置矩阵 初始化
				for(int j=0;j<mm;j++)
					pragh[i,j]=1000000;

			for(int m=0;m<this.ds2.Tables[0].Rows.Count;m++)
			{
				fmu=this.ds2.Tables[0].Rows[m][1].ToString().Trim();
				ff=int.Parse(fmu);
				Console.Write(ff);
				smu=this.ds2.Tables[0].Rows[m][2].ToString().Trim();
				ss=int.Parse(smu);
				dmu=this.ds2.Tables[0].Rows[m][3].ToString().Trim();
				dd=int.Parse(dmu);

				if(int.Parse(this.ds2.Tables[0].Rows[m][3].ToString().Trim())<1000000)
					pragh[ff,ss]=dd;
			}
			for(int v=0;v<mm;v++)
			{
				final[v]=false;
				d[v]=pragh[startverx,v];   //初始化
				for(int w=0;w<mm;w++)
					p[v,w]=false;  //设空路径
				if(d[v]<1000000)
				{
					p[v,startverx]=true;
					p[v,v]=true;
				}
			}//for
			d[startverx]=0;
			final[startverx]=true;//v0顶点属于s集

			//开始主循环,每次求得v0到某个v顶点的最短路径,并加v到s集
			for(int i=1;i<mm;i++)
			{
				min=1000000;
				for(int j=0;j<mm;j++)
				
					if(!final[j])
						if(d[j]<min)
						{
							k=j;
							min=d[j];
						}
				final[k]=true;
				for(int j=0;j<mm;j++)
					if(!final[j]&&(min+pragh[k,j])<d[j])
					{
						d[j]=min+pragh[k,j];
						

						for(int m=0;m<mm;m++)
							p[j,m]=p[k,m];

						p[j,j]=true;
					}
			}//for
			//查找startverx到endverx在pragh中的位置,写入result数组
			for(int m=0;m<mm;m++)
			{
				if(p[endverx,m])
				{
					result[n]=m;
					n=n+1;
				}

			}
			for(int i=0;i<n;i++)
				for(int m=0;m<this.tDataset1.Tables[0].Rows.Count;m++)
				
					if(int.Parse(this.tDataset1.Tables[0].Rows[m][0].ToString().Trim())==result[i])
					{
						point[q]=this.tDataset1.Tables[0].Rows[m][1].ToString().Trim();
						q=q+1;
					}
			for(int j=q-1;j>0;j--)
			{
				if(point[j]!="")
				{
					shortpragh+=point[j]+"--";
				}						
			}
			shortpragh+=point[0];

			this.textBox5.Text=shortpragh;
								
		}

		private void button1_Click(object sender, System.EventArgs e)
		{
			string startverx=this.comboBox1.Text.Trim();
			string endverx=this.comboBox2.Text.Trim();
			int start=0;
			int end=0;
	
			for(int i=0;i<this.tDataset1.Tables[0].Rows.Count;i++)
			{
				if(startverx==this.tDataset1.Tables[0].Rows[i][1].ToString().Trim())
				{
					start=int.Parse(this.tDataset1.Tables[0].Rows[i][0].ToString().Trim());
					
				}

				if(endverx==this.tDataset1.Tables[0].Rows[i][1].ToString().Trim())
				{
					end=int.Parse(this.tDataset1.Tables[0].Rows[i][0].ToString().Trim());
			
				}
			}
			

			set_pragh(start,end);//调用最短路径的算法
		}

		private void button2_Click(object sender, System.EventArgs e)
		{
			if(this.textBox5.Text.Trim()==""||this.textBox1.Text.Trim()=="")
			{
				MessageBox.Show("未指定有效的编号或者未进行路线的设计,无法保存数据!!","提示");
			}
			else
			{
			
				int ddbh=int.Parse(this.textBox1.Text.Trim());
				bool flog2=false;

				string order_num=this.textBox1.Text.Trim();
				string sendSQL22="select 订单编号 from short_pragh_xs";

				temptable2=this.link2.SelectDataBase(sendSQL22);
				
				for(int i=0;i<temptable2.Rows.Count;i++)
				{
					if(order_num==temptable2.Rows[i][0].ToString().Trim())
						flog2=true;
				}
				
				if(flog2==false)
				{
					try
					{
						string sendvalues="('" + ddbh +"','"+ shortpragh +"')";
						string strSQL22="insert short_pragh_xs(订单编号,最短路径)values"+sendvalues;
						this.link2.UpdateDataBase(strSQL22);
					
					}
					catch
					{
						MessageBox.Show("数据保存失败","提示");
						return;
					}
					MessageBox.Show("数据保存成功!","提示");
					
				}
				else
				{
					MessageBox.Show("此编号的最短路径已经存储过了!!","提示");
				}
				
			}

			
		
		}

		private void button3_Click(object sender, System.EventArgs e)
		{
			this.textBox5.Text="";
			shortpragh="";

		}










	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?