二阶段12.14

  今天,我们设计了导线计算的窗口,同样增加了百度

和标准的查询按钮,还为其加入了数据的导入导出,加入

了等级的选择和限差的显示与判断,使数据判断简单化。

  图片:

程序:

private void 计算_Click(object sender, EventArgs e)
{
string[] sd = new string[dataGridView1.RowCount - 5];
double[] sdr = new double[sd.Length];
double[] cr = new double[sd.Length];
double x2, y2, x3, y3;
double sum = 0;
x2 = Convert.ToDouble(dataGridView1.Rows[1].Cells[12].Value);
y2 = Convert.ToDouble(dataGridView1.Rows[1].Cells[13].Value);
x3 = Convert.ToDouble(dataGridView1.Rows[sd.Length - 1].Cells[12].Value);
y3 = Convert.ToDouble(dataGridView1.Rows[sd.Length - 1].Cells[13].Value);
cr[0] = dmstorad(Convert.ToString(dataGridView1.Rows[0].Cells[4].Value));

double acd = dmstorad(Convert.ToString(dataGridView1.Rows[sd.Length - 1].Cells[4].Value));
for (int i = 1; i < sd.Length; i++)
{
sd[i] = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
sdr[i] = dmstorad(sd[i]);
}
sum = fangweijiao(sdr, cr);
dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[1].Value = radtodms(sum);
double fd, fdx;

string str1 = comboBox1.Text;
string str2 = "图根导线";
string str3 = "一级导线";
string str4 = "二级导线";
string str5 = "三级导线";
string str6 = "四等导线";
string str7 = "测量等级";

if (str1.Equals(str7, StringComparison.OrdinalIgnoreCase) == true)
{
MessageBox.Show("请选择导线等级!");
fdx = 0;
}
else if(str1.Equals(str2, StringComparison.OrdinalIgnoreCase) == true)
{
fdx = 60 * Math.Sqrt(sd.Length - 1);
}
else if (str1.Equals(str3, StringComparison.OrdinalIgnoreCase) == true)
{
fdx = 10 * Math.Sqrt(sd.Length - 1);
}
else if (str1.Equals(str4, StringComparison.OrdinalIgnoreCase) == true)
{
fdx = 16 * Math.Sqrt(sd.Length - 1);
}
else if (str1.Equals(str5, StringComparison.OrdinalIgnoreCase) == true)
{
fdx = 24 * Math.Sqrt(sd.Length - 1);

}
else if (str1.Equals(str6, StringComparison.OrdinalIgnoreCase) == true)
{
fdx = 5 * Math.Sqrt(sd.Length - 1);
}
else
{
fdx = 3.6 * Math.Sqrt(sd.Length - 1);
}
fd = cr[cr.Length - 1] - acd;

dataGridView1.Rows[dataGridView1.RowCount - 3].Cells[1].Value =
Convert.ToString(Math.Round(fd * 180 / Math.PI * 3600, 2)) + "″";
dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value =
Convert.ToString(Math.Round(fdx, 2)) + "″";

if (Math.Abs(fd * 180 / Math.PI * 3600) > fdx)
{
textBox3.Text = "角度闭合差超限!";
}
else
{
textBox3.Text = "角度闭合差合格";

double vd = -fd / (sd.Length - 1);
double sumvd = 0;
for (int i = 1; i < sd.Length; i++)
{
sdr[i] += vd;
sumvd += vd;
dataGridView1.Rows[i].Cells[2].Value =Convert.ToString(Math.Round(vd * 180 / Math.PI * 3600, 2)) + "″";
dataGridView1.Rows[i].Cells[3].Value = radtodms(sdr[i]);
}
if (Math.Round(sumvd, 8) != Math.Round(-fd, 8))
MessageBox.Show("角度改正数分配有误!");
else
dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[2].Value =Convert.ToString(Math.Round(sumvd * 180 / Math.PI * 3600, 2)) + "″";
sum = fangweijiao(sdr, cr);
if (Math.Round(cr[cr.Length - 1], 8) != Math.Round(acd, 8))
MessageBox.Show("坐标方位角推算有误!");
else
{
dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[3].Value =radtodms(sum);
for (int i = 0; i < sd.Length; i++)
dataGridView1.Rows[i].Cells[4].Value = radtodms(cr[i]);
}
//坐标计算与调整
double[] juli = new double[sd.Length - 1];
double[] dx = new double[sd.Length - 1];
double[] dy = new double[sd.Length - 1];
double[] vx = new double[sd.Length - 1];
double[] vy = new double[sd.Length - 1];
double[] cx = new double[sd.Length - 1];
double[] cy = new double[sd.Length - 1];
double[] x = new double[sd.Length - 1];
double[] y = new double[sd.Length - 1];
double sumjuli = 0;
double sumdx = 0;
double sumdy = 0;
double fx, fy, fxy, k1;
double sumvx = 0;
double sumvy = 0;
double sumcx = 0;
double sumcy = 0;
for (int i = 1; i < juli.Length; i++)
{
juli[i] = Convert.ToDouble(dataGridView1.Rows[i].Cells[5].Value);
sumjuli += juli[i];
dx[i] = juli[i] * Math.Cos(cr[i]);
dy[i] = juli[i] * Math.Sin(cr[i]);
sumdx += dx[i];
sumdy += dy[i];
dataGridView1.Rows[i].Cells[6].Value = Convert.ToString(Math.Round(dx[i], 3));
dataGridView1.Rows[i].Cells[7].Value = Convert.ToString(Math.Round(dy[i], 3));
}
x[1] = x2;
y[1] = y2;
fx = sumdx - (x3 - x2);
fy = sumdy - (y3 - y2);
fxy = Math.Sqrt(fx * fx + fy * fy);
k1 = sumjuli / fxy;
double xiancha = 0.0;
if (str1.Equals(str6, StringComparison.OrdinalIgnoreCase) == true)
{xiancha=35000;}
else if (str1.Equals(str2, StringComparison.OrdinalIgnoreCase) == true)
{xiancha = 2000;}
else if (str1.Equals(str3, StringComparison.OrdinalIgnoreCase) == true)
{xiancha = 15000;}
else if (str1.Equals(str4, StringComparison.OrdinalIgnoreCase) == true)
{xiancha = 10000;}
else if (str1.Equals(str5, StringComparison.OrdinalIgnoreCase) == true)
{ xiancha = 5000;}
else if (str1.Equals(str7, StringComparison.OrdinalIgnoreCase) == true)
{xiancha = 55000;}
else
{xiancha = 1000000000000000000000000000000000000000000000.0;}
if (k1> xiancha )
{
textBox3.AppendText("\r\n");
textBox3.AppendText("导线全长相对闭合差合格");
}
else
{
textBox3.AppendText("\r\n");
textBox3.AppendText("导线全长相对闭合差超限!");
}
for (int j = 1; j <= vx.Length - 1; j++)
{
vx[j] = -fx * juli[j] / sumjuli;
vy[j] = -fy * juli[j] / sumjuli;
sumvx += vx[j];
sumvy += vy[j];
dataGridView1.Rows[j].Cells[8].Value = Convert.ToString(Math.Round(vx[j], 4));//将坐标增量改正数放入表格
dataGridView1.Rows[j].Cells[9].Value = Convert.ToString(Math.Round(vy[j], 4));

cx[j] = dx[j] + vx[j];
cy[j] = dy[j] + vy[j];
sumcx += cx[j];
sumcy += cy[j];
dataGridView1.Rows[j].Cells[10].Value = Convert.ToString(Math.Round(cx[j], 3));
dataGridView1.Rows[j].Cells[11].Value = Convert.ToString(Math.Round(cy[j], 3));
}
if (Math.Round(sumvx, 4) != Math.Round(-fx, 4) || Math.Round(sumvy, 4) != Math.Round(-fy, 4))
MessageBox.Show("坐标增量分配有错误!");
if (Math.Round(sumcx, 4) != Math.Round(x3 - x2, 4) || Math.Round(sumcy, 4) != Math.Round(y3 - y2, 4))
MessageBox.Show("改正后坐标增量计算有错误!");
dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[8].Value = Convert.ToString(Math.Round(sumvx, 3));
dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[9].Value = Convert.ToString(Math.Round(sumvy, 3));
dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[10].Value = Convert.ToString(Math.Round(sumcx, 3));
dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[11].Value = Convert.ToString(Math.Round(sumcy, 3));
for (int j = 1; j < x.Length - 1; j++)
{
x[j + 1] = x[j] + cx[j];
y[j + 1] = y[j] + cy[j];
dataGridView1.Rows[j + 1].Cells[12].Value = Convert.ToString(Math.Round(x[j + 1], 3));
dataGridView1.Rows[j + 1].Cells[13].Value = Convert.ToString(Math.Round(y[j + 1], 3));
}

if (Math.Round(x[x.Length - 1] + cx[cx.Length - 1], 3) != Math.Round(x3, 3) || Math.Round
(y[y.Length - 1] + cy[cy.Length - 1], 3) != Math.Round(y3, 3)) MessageBox.Show("坐标计算有错误!");

dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[5].Value = Convert.ToString(sumjuli);
dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[6].Value = Convert.ToString(Math.Round(sumdx, 3));
dataGridView1.Rows[dataGridView1.RowCount - 4].Cells[7].Value = Convert.ToString(Math.Round(sumdy, 3));
dataGridView1.Rows[dataGridView1.RowCount - 3].Cells[7].Value = Convert.ToString(Math.Round(fx, 3));
dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[7].Value = Convert.ToString(Math.Round(fy, 3));
dataGridView1.Rows[dataGridView1.RowCount - 3].Cells[10].Value = Convert.ToString(Math.Round(fxy, 3));
dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[11].Value = Convert.ToString(Math.Round(k1, 0));

}
}

原文地址:https://www.cnblogs.com/wtctd/p/10121556.html

时间: 2024-10-13 10:35:47

二阶段12.14的相关文章

二阶段12

对窗口进行美化,之前的窗口过于简单,第一眼不能够吸引人的注意,因此我设计了一个界面,界面中有一个我们团队的头像,软件的名称叫呆一呆,这个名称的来源和想法是"呆"字像一个测量仪器,这也符合我们的测量程序这个软件界面上的三个按钮,分别是三角高程,导线,和退出. 原文地址:https://www.cnblogs.com/wushao12345/p/10111380.html

Mysql事物与二阶段提交

 1.事务的四种特性(ACID) 事务可以是一个非常简单的SQL构成,也可以是一组复杂的SQL语句构成.事务是访问并且更新数据库中数据的一个单元,在事务中的操作,要么都修改,要么都不做修改,这就是事务的目的,也是事务模型区别于其他模型的重要特征之一. 事务的原子性:原子是不可分割的,事务不可分割(没有commit数据不能被读到). 事务的持久性:在commit之后,不能丢数据.(就是在提交后,数据必须落盘redo落盘). 事务的隔离性:在数据库里面,各个事务之间不能互相影响. 事务的一致性:事务

模块管理常规功能自定义系统的设计与实现(21--第二阶段设计目标)

第二阶段设计目标 前面的章节讲了建立单个模块的各种功能,从现在开始要加入若干个具有关联的模块,使其协同工作.我设计了一个简易的销售管理系统,系统的结构如下图所示,从本节开始将逐步的搭建此系统. 在上图中,各模块之间都能通过一定的路径产生联系,而具有关联的二个模块具有直接的关系,例如省是市的父模块,市是省的子模块:客户单位是市的子模块也是省的子模块.这种上下级关系将会是处理的重点.各模块间的关系要明确,不能出现关系不明确或者循环引用的模块,那样权限的设置将会有问题. 例如有如下模块结构: 在上图中

分布式基础之二阶段提交

分布式基础之二阶段提交 二阶段提交(Two Phase Commit)在分布式事务处理中非常常见.它主要用来保证分布式事务处理的一致性,决定事务的提交或回滚.目前二阶段提交广泛应用于关系型数据库的分布式事务处理中,它是分布式系统中的一个常见协议. 需求 为什么要二阶段提交?因为在分布式系统中,每个节点只知道自己的事务是否执行成功了,而分布式系统要求一致性,也就是所有的节点的状态都应该一致.如果某一个事务只在部分节点执行成功,那么势必会导致各分布式节点不一致.二阶段提交就是用来保证要么所有的节点都

mysql 2PC二阶段协义 与 日志闪回

mysql两份日志: binlog :server innodb redo log:engine 两份日志顺序一致性:否则主备不一致 两份日志:原子性,同时都有,同时都无 2PC二阶段协义: 第一阶段:准备界段 第二阶段:提交阶段 买房子示例 准备界段: 房产局确认: 买方:钱是否准备好 卖方:房子是否可卖 提交界段: 政务中心: 买方: 确认按手印 卖方:确认按手印 ----------------------------------------------------------------

MongoDB官方文档翻译系列之 -- 执行二阶段提交

简介 本篇文档提供了一个使用二阶段提交将数据写入多个文档的方法来处理多文档更新或"多文档事务".在此基础上,你可以扩展实现类似数据回滚的功能. 背景 在MongoDB数据库中,作用于单个document的操作总是原子性的:但是,涉及到多个document的操作,也就是我们常说的"多文档事务",是非原子性的. 由于document可以设计的非常复杂并且能包含多个"内嵌"document,因此单文档原子性对很多实际场景提供了必要的支持.(译者注:比如

分布式入门之4:二阶段提交

1. 背景: 初时提出,是为解决分布式数据库的事务问题.单机数据库事务可靠日志技术,MVCC技术实现.分布式情况下,就需要额外的手段来保证,这才出现了二阶段提交. 2. 流程: 从角色上,二阶段提交分为两种角色:协调者(coordinate),参与者(participant).流程思路上很简单: 1. 协调者询问询问所有参与者,能否提交:参与者返回是否能提交的结果: 2. 协调者根据参与者的返回结果决定是否提交事务,并通知参与者执行. 但实际上,二阶段提交需要考虑不少异常场景: 对照上图: 1

二阶段提交应用项目(Two-phase commit protocol )2PC 高并发

整个系统的需求文档为英文描述. A Simple 2-Phase Commit System The company ABC provides its customers wire transfer service. For example, it can withdraw $1000 from John's account in Bank of China and deposit the money to John's another account in China Construction

模块管理常规功能自定义系统的设计与实现(30--第二阶段总结)

第二阶段总结 经过了前二个阶段近30节介绍,一个完全基于前台配置的销售管理系统即架构成功,并可以使用.当然实际的需求还是千变万化,五花八门,但只要是符合关系数据库原理,只要是以记录作为管理的主体,那就只是一个字段和表扩充的过程了.在搭建系统整个过程中模块采用了自顶向下生成的方式.对于层次多,关系复杂的系统也是一样的,设计合理,逻辑清楚,模块只要一个个搭就行了.开发好以后,整个系统的开发文档其实也在里面了,所有模块的属性,字段的属性,各模块之间的关系,都可以在这个系统里看得见了. 至于开发速度也是