测量程序设计实习报告姓名: XX班级: XXXX学号: XXXX教师评语:实验名称:使用C#开发环境建立测量程序框架一、实验的目的与任务:(1)学会用C#窗体程序开发环境建立应用程序框架方法(2)学会使用常见的Windows控件(3)根据自身需要设计一个测量程序界面二、实验的过程与步骤:1、首先打开visual studio 2010,选择文件→新建→项目。
在弹出的对话框中右栏一侧选择windows窗体应用。
选择文件存放地址,输入项目名称,点击确定,完成。
2、拖动menuSctrip控件到主窗体,并且键入“文件”、“工具”两个选项,在“文件”下添加一个“打开”选项;在“工具”下添加“近似平差计算”、“高斯消元”两个选项。
3、选择项目→添加windows窗体,输入窗体名称“CLSJ”,点击确定。
4、在CLSJ窗体中拖入SplitContainer控件,将窗体分为左右两部分,调整大小。
在拖入一个“TabControl”,新建选项卡。
最后,加入“Button”、“TextBox”、“Label”控件。
5、用相同的方法,新建一个名为高斯消元的窗体,然后按照需要进行设计。
三、程序运行效果四、本实验心得体会这是第一次接触这种可视化开发编程,刚开始不是很熟悉,对于编程语言来说,在掌握一定语法之后,要多用,多结合实际进行一些简单编程,这样才能提高对一种编程语言的理解。
实验名称:导线计算程序设计及粗差探测一、实验的目的与任务:(1) 掌握方位角计算的程序设计方法(2) 掌握符合导线、闭合导线、支导线计算的程序设计方法(3) 理解粗差探测的程序设计方法二、实验的设计与开发步骤:1、考虑到在测量时所用的角度均为度分秒,而在c#计算时只是别度分秒,因此先设计两个函数,可以将度分秒和弧度制进行转化。
2、其次先写一个point 类,包含x ,y 两个成员变量,然后在设计一个方位角函数,用两个point 类当作形参传递进去,根据方位角计算公式παk xy +∆∆=arctan ,(根据象限角和方位角关系对k 进行调节)应该分为四种情况,但是考虑到分母不为0,因此应该在加一种情况,即导线与y 轴重合。
3、然后根据边长,根据方位角,公式ααsin *cos *1212l y y l x x +=+=进行坐标推算。
三、程序运行及数据测试效果四、本实验心得体会在掌握一定的语法规则后,要多应用。
另外就是在遇到问题时,可以去网上查找,这样不断反复,就会熟练使用某种语法。
实验名称:测量数据库的建立一、实验的目的与任务:(1)掌握利用Access或SQLserver建立测量数据库的基本方法(2)掌握利用C#编程连接数据库,并进行数据操作的方法二、实验的设计与开发步骤:1、首先在窗体加载时就要链接access数据库,这样当打开窗体时数据就可以加载进去。
首先就是使用OleDbConnection方法进行链接,然后用open方法打开数据库,在关闭窗体时,一定要在使用close 关闭。
2、在链接数据库并打开以后,然后就是新建一个数据集DataSet,相当于数据库的副本,在c#中对数据库进行操作均相当于对这个副本进行操作。
然后写一个 OleDbDataAdapter对象,使用sql语句对要用的数据中部分或全部内容进行选择,然后用Fill方法将数据库绑定到数据集中。
3、最后就是用Command执行sql语句命令。
三、程序运行及数据测试效果四、本实验心得体会数据库在之前是一个完全不知道的东西,通过这次实习,对数据库有了一个新的理解,数据库在测量程序中是必不可少的东西,在刚开始链接操作数据库时有很多问题,通过网上查找,询问老师基本得以解决。
附录一:导线计算代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Collections;using System.Windows.Forms;namespace CLCX{public partial class FORM1 : Form{public static CLSJ clsj = new CLSJ();public static int count = 0;public FORM1(){InitializeComponent();}private void 打开ToolStripMenuItem_Click(object sender, EventArgs e) {//在关闭clsj窗口后可以再次打开if (clsj.IsDisposed==true){clsj = new CLSJ();clsj.MdiParent = this;clsj.Show();}else{clsj.MdiParent = this;clsj.Show();}}private void 近似平差计算ToolStripMenuItem_Click(object sender, EventArgs e) {//坐标近似推算int row = clsj.datag1.RowCount;//1.方位角计算。
简单起见,两个已知点坐标为置于前两行.//每段线的方位角编号和起点编号相同.point[] p = new point[2];p[0] = new point(Convert.ToDouble(clsj.datag1.Rows[0].Cells[4].Value), Convert.ToDouble(clsj.datag1.Rows[0].Cells[5].Value));p[1] = new point(Convert.ToDouble(clsj.datag1.Rows[1].Cells[4].Value), Convert.ToDouble(clsj.datag1.Rows[0].Cells[4].Value));ArrayList raw = new ArrayList();raw.Add(tool.fangweijiao(p[0], p[1]));for (int i = 1; i < row - 1; i++){raw.Add(Convert.ToDouble(raw[i - 1]) +tool.d2r(Convert.ToDouble(clsj.datag1.Rows[i].Cells[2].Value)) - Math.PI);}//2.坐标推算for (int i = 2, j = 1; i < row - 1; i++,j++){clsj.datag1.Rows[i].Cells[4].Value =Convert.ToDouble(clsj.datag1.Rows[i - 1].Cells[4].Value) +Convert.ToDouble(clsj.datag1.Rows[i].Cells[3].Value) *Math.Cos(Convert.ToDouble(raw[j]));clsj.datag1.Rows[i].Cells[5].Value =Convert.ToDouble(clsj.datag1.Rows[i - 1].Cells[5].Value) +Convert.ToDouble(clsj.datag1.Rows[i].Cells[3].Value) *Math.Sin(Convert.ToDouble(raw[j]));clsj.datag1.Rows[i].Cells[4].Value =Math.Round(Convert.ToDouble(clsj.datag1.Rows[i].Cells[4].Value), 4);clsj.datag1.Rows[i].Cells[5].Value =Math.Round(Convert.ToDouble(clsj.datag1.Rows[i].Cells[5].Value), 4);}}}public class point{public double X;public double Y;public point(double X,double Y){this.X = X;this.Y = Y;}}public class tool{public static double d2r(double d) //"度"转弧度{int degree, min, sec;degree = (int)d;min = (int)((d - degree) * 100);sec = (int)((d - degree - min/100) * 10000);return (degree + min/ 60 + sec/3600) * Math.PI/180;}public static double fangweijiao(point p1, point p2) //方位角计算,返回弧度制结果{double r = 0;double dx, dy;dx = p2.X - p1.X;dy = p2.X - p1.Y;if (dx == 0){if (dy > 0)r = Math.PI / 2;if (dy < 0)r = Math.PI * 2 / 3;}if (dx > 0 && dy > 0)r = Math.Atan(Math.Abs(dy) / Math.Abs(dx));if (dx > 0 && dy < 0)r = 2 * Math.PI - Math.Atan(Math.Abs(dy) / Math.Abs(dx));if (dx < 0 && dy > 0)r = Math.PI - Math.Atan(Math.Abs(dy) / Math.Abs(dx));if (dx < 0 && dy < 0)r = Math.PI + Math.Atan(Math.Abs(dy) / Math.Abs(dx));return r;}}}数据库操作代码:using System;using System.Collections;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Data.OleDb;using System.Windows.Forms;namespace CLCX{public partial class CLSJ : Form{public CLSJ(){InitializeComponent();}OleDbConnection conn;OleDbDataAdapter adapt;DataSet dat;OleDbCommand build;private void CLSJ_Load(object sender, EventArgs e){//与数据库建立连接string str_con = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\cldata.mdb";string str_load = "select * from cldata";conn = new OleDbConnection(str_con);conn.Open();dat = new DataSet();adapt = new OleDbDataAdapter(str_load, conn);adapt.Fill(dat,"cldata");datag1.DataSource = dat.Tables[0];conn.Close();}private void but_save_Click_1(object sender, EventArgs e){try{string str_con = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\cldata.mdb";string str_load = "select * from cldata";string command;conn = new OleDbConnection(str_con);conn.Open();dat = new DataSet();adapt = new OleDbDataAdapter(str_load, conn);adapt.Fill(dat, "cldata");datag1.DataSource = dat.Tables[0];int i = datag1.RowCount;command = "insert into cldata (ID,测站,水平角,平距,X,Y,备注) values (" + i + ","+ "'" + tex_CZ.Text + "'" + ","+Convert.ToDouble(tex_SPJ.Text) + ","+Convert.ToDouble(tex_PJ.Text) + ","+Convert.ToDouble(tex_X.Text) + ","+Convert.ToDouble(tex_Y.Text) + ","+ "'" + tex_NT.Text + "'"+ ")";build = new OleDbCommand(command, conn);int p = build.ExecuteNonQuery();dat.Clear(); //将数据集清空,刷新datagridview控件conn.Close();}。