




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
班号:4专业选修课实验NET与C#程序设计 题 目 C#课程实验程序设计 学 院 计算机学院 专 业 计算机科学与技术 年级班别 12级4班 学 号 3112005901 学生姓名 柏石先 指导教师 杨劲涛 2015 年 5 月 10 日实验一 控制台程序设计1.1 实验环境与工具:计算机及操作系统:PC机,WindowsXP程序开发平台:Visual Studio 2005/2008/20101.2 实验目的(1) 熟悉Visual Studio.NET的IDE工具。(2) 实践C#语言基础知识及控制台应用程序开发1.3 实验内容基于控制台应用程序,设计一个二叉树的实验工具,要求可以支持以下功能:(1) 利用随机函数,生成任意数据量的一组数据,存于顺序表;(2) 利用上述数据,生成完全二叉树;(3) 生成二叉排序树(4) 判断二叉树是否为二叉排序树(5) 输出中序遍历序列的结果(6) 计算叶子结点数(7) 计算二叉树深度1.4 实验报告上述7大功能的算法思想和主要设计流程。1. 利用随机函数,生成任意数据量的一组数据,存于顺序表;主要思路:可以利用生成随机数的类Random的Next()方法,可以生成一个随机数。加入一for循后环,便可以生成一组随机数据。再根据ArrayList符合顺序表的特性,所以可以将数据保存到Arraylist中。部分核心代码:ArrayList a1 = new ArrayList();Random ran = new Random();int m = ran.Next(); /设置随机种子for (int i = 0; i 10; +i) Random r = new Random(m * i + m); /设置随机数 al.Add(r.Next(0, 200); /将数据存入顺序表 Console.Write(0 , ali);/打印输出该随机数顺序表 2. 利用上述数据,生成完全二叉树主要思路:首先需要考虑树的结构,要设计其数据结构,也就是设计它的类体结构和相关构造器。然后进行创建完全二叉树:先定义一个根节点,再一个一个取出顺序表中的随机数,并插入到生成树中。部分核心代码:/*树的节点类*/class Node private int data; /数据 private Node lChild; /左孩子 private Node rChild; /右孩子 public bool hasData = false; /该节点数据是否初始化 /*构造函数*/ public Node() data = 0; lChild = null; rChild = null; /*构造函数*/ public Node(int val) data = val; lChild = null; rChild = null; Node head1 = new Node(int)al0); BiTree tree1 = new BiTree(head1); tree1.createTree(al); /生成完全二叉树定义完全二叉树类体,继而生成一个完全二叉树。/*二叉树*/ class BiTree private Node head; /头节点 private ArrayList inOrderDatas; /安中序遍历读取的数据 private ArrayList al; /原始顺序表 /*二叉树构造函数*/ public BiTree(Node headNode) head = headNode; head.hasData = true; /* 创建二叉树, 参数为一个顺序表 */ public void createTree(ArrayList al) this.al = al; /初始化对象的顺序表 int now = 1; /第一个结点编号为1 insertTree(now, this.Head); /插入结点 /* 对树插入结点,第一个参数为结点编号,编号从1开始, 第二个参数为需要插入的结点 */ public void insertTree(int now, Node root) /* 对需要插入的结点编号对应的顺序表数据下标进行判断, 若在数据数目范围之内,则插入数据于结点(相当于插入结点于树), 否则返回*/ if (now - 1 al.Count) /now - 1为数据的顺序表下标,应小于数据的数目 int item = (int)alnow - 1; root.Data = item; /将数据插入到结点 root.hasData = true; else root.hasData = false; return; root.LChild = new Node(); /为结点的左孩子结点分配内存 root.RChild = new Node(); /为节点的右孩子节点分配内存 insertTree(2 * now, root.LChild); /为左孩子插入数据 insertTree(2 * now + 1, root.RChild); /为右孩子插入数据 /* 左孩子数据有无判断, 若无数据则置左孩子为null */ if (root.LChild.hasData = false) root.LChild = null; /* 右孩子数据有无判断, 若无数据则置右孩子为null */ if (root.RChild.hasData = false) root.RChild = null; 3. 生成二叉排序树主要思路:运用递归思想,将顺序表中的随机数不断插入到树种。部分核心代码:/*生成BSTree*/ public void createBSTree(ArrayList al) this.al = al; for (int i = 1; i this.al.Count; +i) insertBSTree(i, this.Head); public void insertBSTree(int now, Node root) /*为插入的结点输入数据*/ if (root.hasData = false) root.Data = (int)alnow; root.hasData = true; root.LChild = null; root.RChild = null; return; if (int)alnow root.Data) if (root.LChild = null) root.LChild = new Node(); insertBSTree(now, root.LChild); /插入左孩子 if (root.LChild.hasData = false) root.LChild = null; else if (root.RChild = null) root.RChild = new Node(); insertBSTree(now, root.RChild); /插入右孩子 if (root.RChild.hasData = false) root.RChild = null; 4. 判断二叉树是否为二叉排序树/*判断当前BiTree对象是否为二叉排序树*/ public bool isBSTree() /*获得树的中序遍历数据*/ ArrayList datas = this.getInOrderDatas(this.Head); bool isBST = true; /*按二叉排序树定义,当中序遍历所得数据中,后面的数据小于前面的数据,则并非二叉排序树*/ for(int i = 1; i datas.Count; +i) if (int)datasi rh ? lh : rh) + 1; 给出程序运行截图:效果示意图如下所示:心得小结:C#的控制台程序的开发体会,在比对了C和JAVA相关的开发经历之后。个人感觉C#的开发工具的体验很好,毕竟是有微软官方提供的开发工具,功能很强大。另外就是C#是基于面向对象的语言,所以采用面向对象的思想比较多,整体来说跟java开发的感觉差不多。实验二:窗体应用程序设计1.5 实验目的1学习视窗用户界面程序的基本开发方法和思路。2掌握VS 的可视化UI设计1.6 实验内容1) 基于窗体用户界面,创建一个简单的通讯录应用程序:2) 可记录个人的姓名、性别、居住地址、生日、工作单位、电话、评价;3) 其中“评价”,指对某人可以给以简短的评语,字数在300字以内;4) 可以对某人写评语,每次评语按时间记录,时间:yyyyMMddHH。一个小时内可以写一次。5) 支持按时间查看对某个人的历次评语。6) 支持查、增、删、改,等四大基本功能。7) 要求使用XML或数据库存贮。自选一种方式8) 要求按用户分配权限,包括:全权用户;可写用户-可以编写评语但不能更改其它信息;只读用户-只能看不能修改任何信息;非法用户-除了上述三类用户以外的其它用户1.7 实验报告简述上述7大功能的算法思想,和主要设计流程。给出程序运行截图。1. 首先,考虑数据的存储,采用了与SQL Sever数据库结合的方式。所以是基于Microsoft Visual Studio 2013 的C#窗体程序设计加上Microsoft SQL Sever 2005数据库管理系统的开发环境。根据需求建立了list数据库,该database包含了两个table,分别是用于存储登陆信息的数据表user_table和用于存储联系人相关信息的数据表Personal_info。如图所示,数据库list相关信息:2.相关数据表设计:数据表Personal_info的设计,包含7个属性列,以name为主键。数据表Personal_info在数据库中实际数据存储的效果数据表user_table的设计,包含3个属性列,以UserIS为主键。数据表user_table在数据库中实际数据存储的效果3.登录和注册界面的设计登录界面设计:注册账号界面:连接系统安装的数据相关语句: private string ConnecttionString = Data Source = SHIXIAN-PC; + Initial Catalog = list;Persist Security Info = true; + Trusted_Connection=SSPI; private SqlConnection conn = null; private SqlDataAdapter DateAdapter = null; private DataSet dateset = null; conn = new SqlConnection(ConnecttionString);command = new SqlCommand(); command.Connection = conn; command.CommandText = strSql; conn.Open(); command.ExecuteNonQuery();登录检查联系人登陆信息功能的实现代码:private string checkedId() string result = null; conn = new SqlConnection(ConnecttionString);string strSql = SELECT CASE WHEN U.uPassword = ? + THEN 1 ELSE 0 END ; strSql += FROM user_table U WHERE U.UserId = + textBox1.Text; SqlCommand command = null; try conn.Open(); command = new SqlCommand(); command.Connection = conn; command.CommandText = strSql; command.ExecuteNonQuery(); catch (Exception ex) MessageBox.Show(ex.Message); result = 0; finally if (conn != null) conn.Close(); command.Dispose(); return result; 程序主界面:/*主界面连个按钮的点击响应,分别跳转新的From*/ private void button2_Click(object sender, EventArgs e) Form1 form1 = new Form1(); form1.Show(); private void button3_Click(object sender, EventArgs e) Form3 form3 = new Form3(); form3.Show(); 添加联系人界面:保存按钮的点击相应事件,主要是获取填入的信息,并对此先进行预处理,判断是否有信息缺失。继而进行数据库连接操作,最终将信息保存到数据库list的Personal_info的表格中。其中也进行的异常处理机制的完善。private void button1_Click(object sender, EventArgs e) conn = new SqlConnection(ConnecttionString); string strSql = null; try strSql = INSERT INTO Personal_Info VALUES(; strSql += + textBox1.Text; strSql += , + comboBox1.SelectedItem.ToString(); strSql += , + textBox2.Text; strSql += , + dateTimePicker1.Value.ToString(yyyy-MM-dd); strSql += , + textBox4.Text; strSql += , + textBox15.Text; strSql += , + richTextBox1.Text + ); catch (Exception ex) MessageBox.Show(请输入完整的个人信息。); return; SqlCommand command = null; try command = new SqlCommand(); command.Connection = conn; command.CommandText = strSql; conn.Open(); int n = command.ExecuteNonQuery(); if (n 0) MessageBox.Show(成功保存!, 提示:); catch(Exception ex) MessageBox.Show(发生异常:+ex.Message); finally if (conn != null) conn.Close(); command.Dispose(); this.Close(); 点击查询联系人按钮的时候:跳转到新的Form,进行联系人查询相关。联系人查询相关Form,具有直接显示原始数据库中数据的datagridview。并且可以根据相关检索条件进行相关检索查询。还有根据选的指定联系人,进行删除操作或进行查看联系人详细信息操作,继而可以进行修改联系人信息和更新操作。查询数据库中存在的联系人纪录,并且将查询的全部数据显示到datagridview中的方法:public void showData(string str) conn = new SqlConnection(ConnecttionString); string strSql = str; SqlCommand command = null; try conn.Open(); command = new SqlCommand(); command.Connection = conn; command.CommandText = strSql; DateAdapter = new SqlDataAdapter(); dateset = new DataSet(); DateAdapter.SelectCommand = command; DateAdapter.Fill(dateset, t1); dataGridView1.DataSource = dateset; dataGridView1.DataMember = t1; int n = command.ExecuteNonQuery(); if (n 0) MessageBox.Show(数据加载成功!, 提示:); catch (Exception ex) MessageBox.Show(ex.Message); finally if (conn != null) conn.Close(); command.Dispose(); 根据选的指定联系人,进行查看联系人详细信息操作,继而可以进行修改联系人信息和更新操作。这里需要把当前用户选中的联系人的姓名作为传递参数,因为需要在查看联系人界面作为数据查询相关具体信息的条件码。而且姓名也是该数据表的主键,所以具有唯一标识性。 private void button1_Click(object sender, EventArgs e) int index = dataGridView1.SelectedRows0.Index; /获取选中行的行号 DataGridViewRow s = dataGridView1.Rowsindex; Form1 form1 = new Form1(s); form1.Show(); 将被选中的DataGridViewRow作为传递参数。跳转到查看联系人界面,此时打开的新的Form,并且根据从上一个form传递过来的参数中获取DataGridViewRow,再加载到相应的数据框中。值得一提的是因为姓名是主键,因此不提供修改。获取DataGridViewRow各列的数据并填充到相应的数据框中。public Form1(DataGridViewRow str) InitializeComponent(); /Cells0为要选的第几列 sname = str.Cells0.Value.ToString(); textBox7.Text = 查看联系人; textBox1.ReadOnly = true; textBox1.Enabled = false; button3.Visible = false; button1.Visible = false; textBox1.Text= sname; comboBox1.SelectedItem = str.Cells1.Value.ToString(); textBox2.Text=str.Cells2.Value.ToString(); dateTimePicker1.Value = (DateTime)str.Cells3.Value; textBox4.Text=str.Cells4.Value.ToString(); textBox15.Text=str.Cells5.Value.ToString(); richTextBox1.Text = str.Cells6.Value.ToString(); 此时可以进行联系人相关信息的更改,更改完成之后点击更新,将会把新的数据更新保存到数据中去。更新到数据库的相关事件处理:先进行数据库连接操作,之后再把需要更新的内容作为sql语句进行updata处理。private void button4_Click(object sender, EventArgs e) conn = new SqlConnection(ConnecttionString); string strSql = null; try strSql = update Personal_Info set sex = + comboBox1.SelectedItem.ToString(); strSql += ,address = + textBox2.Text; strSql += ,birthday= ;strSql += dateTimePicker1.Value.ToString(yyyy-MM-dd); strSql += ,company= + textBox4.Text; strSql += ,phone= + textBox15.Text; strSql += ,appraise= + richTextBox1.Text + ; strSql += where name =+ sname+; catch (Exception ex) MessageBox.Show(请输入完整的个人信息。); return; SqlCommand command = null; try command = new SqlCommand(); command.Connection = conn; command.CommandText = strSql; conn.Open(); int n = command.ExecuteNonQuery(); if (n 0) MessageBox.Show(成功更新!, 提示:); catch (Exception ex) MessageBox.Show(发生异常: + ex.Message); finally if (conn != null) conn.Close(); command.Dispose(); Form3.initdate(); this.Close(); 更新完成后提示:此时再次查看之前的界面,发现数据已经动态更新了,显示的数据是刚刚更新过的内容:当然也可进行删除联系人操作:具体的实现代码:private void button2_Click(object sender, EventArgs e) conn = new SqlConnection(ConnecttionString); string strSql = null; try strSql = delete from Personal_Info where name= + sname+; catch (Exception ex) MessageBox.Show(删除失败,没有该姓名的联系人); return; SqlCommand command = null; try command = new SqlCommand(); command.Connection = conn; command.CommandText = strSql; conn.Open(); int n = command.ExecuteNonQuery(); if (n 0) MessageBox.Show(成功删除!, 提示:); catch (Exception ex) MessageBox.Show(发生异常: + ex.Message); finally if (conn != null) conn.Close(); command.Dispose(); Form3.initdate(); this.Close(); 再次查看相关内容,已经为空了。这里再生成一些测试数据,用于测试检索功能。检索功能是依据用户的实际需求进行的实时变化检索。可以随时更改相关检索条件进行重新检索。按照一般用户需求总共设计了三种检索方式,分别是按姓名性别和联系方式进行检索。如图测试按性别检索信息,程序会根据用户输入的检索内容自行筛选后显示出来,供用户进行相关操作。如图测试按名字检索信息,程序会根据用户输入的检索内容自行筛选后显示出来,供用户进行相关操作。如果检索不到,会提示用户没有相关信息。另外联系方式的检索运用了模糊查询,也就是只要一部分的电话号码的数字也可进行相关的核对。检索功能的主要实现代码,按照用户选择的检索条件,再根据输入的检索内容进行数据库查询操作。如果能够检索到相关数据则将数据显示到datagridview中去: private void button3_Click(object sender, EventArgs e) if (comboBox1.SelectedItem=null) this.search(null); else if(comboBox1.SelectedItem.Equals(姓名) this.search(name); else if (comboBox1.Sele
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁夏教育数学试卷
- 淘宝店铺直播活动策划方案(3篇)
- 河道栏杆基础施工方案(3篇)
- 澳门废气处理施工方案(3篇)
- 临时保安考试题库及答案
- 北京市门头沟区2023-2024学年八年级下学期第一次月考语文考点及答案
- 安徽省宿州市灵璧县2024-2025学年高一上学期期末考试历史试卷及答案
- 放鞭炮初一作文700字14篇
- 客户服务热线接听规范及问题解决流程模板
- 时政知识培训方案策划课件
- 新常态下的中国消费-麦肯锡
- 酒店楼层分租协议书
- 血液肿瘤科知识培训课件
- 网络安全产品代理销售合同
- 单位对个人教育教学情况定性综合分析
- 《2025年CSCO HR阳性晚期乳腺癌治疗指南》解读
- 广播工程系统施工方案
- 新能源汽车概论 课件 5.1新能源汽车高压安全与防护
- 浙江省温州市鹿城区2025年小升初总复习数学测试卷含解析
- 带状疱疹护理查房
- 2025福建德化闽投抽水蓄能有限公司招聘15人笔试参考题库附带答案详解
评论
0/150
提交评论