广工C#与NET课程实验Word文档格式.docx

上传人:b****5 文档编号:19882741 上传时间:2023-01-11 格式:DOCX 页数:38 大小:1.80MB
下载 相关 举报
广工C#与NET课程实验Word文档格式.docx_第1页
第1页 / 共38页
广工C#与NET课程实验Word文档格式.docx_第2页
第2页 / 共38页
广工C#与NET课程实验Word文档格式.docx_第3页
第3页 / 共38页
广工C#与NET课程实验Word文档格式.docx_第4页
第4页 / 共38页
广工C#与NET课程实验Word文档格式.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

广工C#与NET课程实验Word文档格式.docx

《广工C#与NET课程实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《广工C#与NET课程实验Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。

广工C#与NET课程实验Word文档格式.docx

部分核心代码:

ArrayLista1=newArrayList();

Randomran=newRandom();

intm=ran.Next();

//设置随机种子

for(inti=0;

i<

10;

++i)

{

Randomr=newRandom(m*i+m);

//设置随机数

al.Add(r.Next(0,200));

//将数据存入顺序表

Console.Write("

{0}"

al[i]);

//打印输出该随机数顺序表

}

2.利用上述数据,生成完全二叉树

首先需要考虑树的结构,要设计其数据结构,也就是设计它的类体结构和相关构造器。

然后进行创建完全二叉树:

先定义一个根节点,再一个一个取出顺序表中的随机数,并插入到生成树中。

/*树的节点类*/

classNode

privateintdata;

//数据

privateNodelChild;

//左孩子

privateNoderChild;

//右孩子

publicboolhasData=false;

//该节点数据是否初始化

/*构造函数*/

publicNode()

{

data=0;

lChild=null;

rChild=null;

}

publicNode(intval)

data=val;

Nodehead1=newNode((int)al[0]);

BiTreetree1=newBiTree(head1);

tree1.createTree(al);

//生成完全二叉树

定义完全二叉树类体,,继而生成一个完全二叉树。

/*二叉树*/

classBiTree

privateNodehead;

//头节点

privateArrayListinOrderDatas;

//安中序遍历读取的数据

privateArrayListal;

//原始顺序表

/*二叉树构造函数*/

publicBiTree(NodeheadNode)

head=headNode;

head.hasData=true;

/*创建二叉树,参数为一个顺序表*/

publicvoidcreateTree(ArrayListal)

this.al=al;

//初始化对象的顺序表

intnow=1;

//第一个结点编号为1

insertTree(now,this.Head);

//插入结点

/*对树插入结点,第一个参数为结点编号,编号从1开始,第二个参数为需要插入的结点*/

publicvoidinsertTree(intnow,Noderoot)

/*对需要插入的结点编号对应的顺序表数据下标进行判断,

若在数据数目范围之内,则插入数据于结点(相当于插入结点于树),否则返回*/

if(now-1<

al.Count)//now-1为数据的顺序表下标,应小于数据的数目

intitem=(int)al[now-1];

root.Data=item;

//将数据插入到结点

root.hasData=true;

else

root.hasData=false;

return;

root.LChild=newNode();

//为结点的左孩子结点分配内存

root.RChild=newNode();

//为节点的右孩子节点分配内存

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*/

publicvoidcreateBSTree(ArrayListal)

for(inti=1;

this.al.Count;

insertBSTree(i,this.Head);

publicvoidinsertBSTree(intnow,Noderoot)

/*为插入的结点输入数据*/

if(root.hasData==false)

root.Data=(int)al[now];

root.hasData=true;

root.RChild=null;

if((int)al[now]<

root.Data)

if(root.LChild==null)

insertBSTree(now,root.LChild);

//插入左孩子

if(root.RChild==null)

insertBSTree(now,root.RChild);

//插入右孩子

4.判断二叉树是否为二叉排序树

/*判断当前BiTree对象是否为二叉排序树*/

publicboolisBSTree()

/*获得树的中序遍历数据*/

ArrayListdatas=this.getInOrderDatas(this.Head);

boolisBST=true;

/*按二叉排序树定义,当中序遍历所得数据中,后面的数据小于前面的数据,则并非二叉排序树*/

for(inti=1;

datas.Count;

if((int)datas[i]<

(int)datas[i-1])

isBST=false;

break;

returnisBST;

5.输出中序遍历序列的结果

/*获得中序遍历的数据*/

publicArrayListgetInOrderDatas(Noderoot)

this.inOrderDatas=newArrayList();

this.inOrder(root);

returninOrderDatas;

privatevoidinOrder(Noderoot)

//根结点为空

if(root==null)

//中序遍历左子树

inOrder(root.LChild);

//处理根结点

this.inOrderDatas.Add(root.Data);

//中序遍历右子树

inOrder(root.RChild);

6.计算叶子结点数

/*获得叶子节点数目*/

publicintgetLeafNodeCounts()

returncountLeafNode(this.Head);

}

/*对叶子结点计数*/

privateintcountLeafNode(Noderoot)

/*当前节点为空时,返回0个*/

return0;

/*左孩子与右孩子同时为空时,返回叶子结点数目1*/

if(root.LChild==null&

&

root.RChild==null)

return1;

/*递归计数左孩子与右孩子叶子结点数目*/

returncountLeafNode(root.LChild)+countLeafNode(root.RChild);

7.计算二叉树深度

/*获得树的深度*/

publicintgetHeight()

returncountHeight(this.Head);

/*对树的深度计数*/

privateintcountHeight(Noderoot)

intlh;

intrh;

{

lh=countHeight(root.RChild);

rh=countHeight(root.RChild);

return(lh>

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.首先,考虑数据的存储,采用了与SQLSever数据库结合的方式。

所以是基于MicrosoftVisualStudio2013的C#窗体程序设计加上MicrosoftSQLSever2005数据库管理系统的开发环境。

根据需求建立了list数据库,该database包含了两个table,分别是用于存储登陆信息的数据表user_table和用于存储联系人相关信息的数据表Personal_info。

如图所示,数据库list相关信息:

2.相关数据表设计:

数据表Personal_info的设计,包含7个属性列,以name为主键。

数据表Personal_info在数据库中实际数据存储的效果

数据表user_table的设计,包含3个属性列,以UserIS为主键。

数据表user_table在数据库中实际数据存储的效果

3.登录和注册界面的设计

登录界面设计:

注册账号界面:

连接系统安装的数据相关语句:

privatestringConnecttionString="

DataSource=SHIXIAN-PC;

"

+"

InitialCatalog=list;

PersistSecurityInfo=true;

+

Trusted_Connection=SSPI;

;

privateSqlConnectionconn=null;

privateSqlDataAdapterDateAdapter=null;

privateDataSetdateset=null;

conn=newSqlConnection(ConnecttionString);

command=newSqlCommand();

command.Connection=conn;

command.CommandText=strSql;

conn.Open();

command.ExecuteNonQuery();

登录检查联系人登陆信息功能的实现代码:

privatestringcheckedId()

stringresult=null;

stringstrSql="

SELECTCASEWHENU.uPassword=?

THEN1ELSE0END"

strSql+="

FROMuser_tableUWHEREU.UserId="

+textBox1.Text;

SqlCommandcommand=null;

try

command=newSqlCommand();

command.Connection=conn;

command.CommandText=strSql;

catch(Exceptionex)

MessageBox.Show(ex.Message);

result="

0"

finally

if(conn!

=null)conn.Close();

command.Dispose();

returnresult;

程序主界面:

/*主界面连个按钮的点击响应,分别跳转新的From*/

privatevoidbutton2_Click(objectsender,EventArgse)

{Form1form1=newForm1();

form1.Show();

privatevoidbutton3_Click(objectsender,EventArgse)

{Form3form3=newForm3();

form3.Show();

添加联系人界面:

保存按钮的点击相应事件,主要是获取填入的信息,并对此先进行预处理,判断是否有信息缺失。

继而进行数据库连接操作,最终将信息保存到数据库list的Personal_info的表格中。

其中也进行的异常处理机制的完善。

privatevoidbutton1_Click(objectsender,EventArgse)

stringstrSql=null;

strSql="

INSERTINTOPersonal_InfoVALUES("

'

'

+comboBox1.SelectedItem.ToString();

+textBox2.Text;

+dateTimePicker1.Value.ToString("

yyyy-MM-dd"

);

+textBox4.Text;

+textBox15.Text;

+richTextBox1.Text+"

)"

MessageBox.Show("

请输入完整的个人信息。

{command=newSqlCommand();

intn=command.ExecuteNonQuery();

if(n>

0)MessageBox.Show("

成功保存!

"

提示:

catch(Exceptionex)

发生异常:

+ex.Message);

this.Close();

点击查询联系人按钮的时候:

跳转到新的Form,进行联系人查询相关。

联系人查询相关Form,具有直接显示原始数据库中数据的datagridview。

并且可以根据相关检索条件进行相关检索查询。

还有根据选的指定联系人,进行删除操作或进行查看联系人详细信息操作,继而可以进行修改联系人信息和更新操作。

查询数据库中存在的联系人纪录,并且将查询的全部数据显示到datagridview中的方法:

publicvoidshowData(stringstr){

stringstrSql=str;

{conn.Open();

DateAdapter=newSqlDataAdapter();

dateset=newDataSet();

DateAdapter.SelectCommand=command;

DateAdapter.Fill(dateset,"

t1"

dataGridView1.DataSource=dateset;

dataGridView1.DataMember="

数据加载成功!

{MessageBox.Show(ex.Message);

{if(conn!

根据选的指定联系人,进行查看联系人详细信息操作,继而可以进行修改联系人信息和更新操作。

这里需要把当前用户选中的联系人的姓名作为传递参数,因为需要在查看联系人界面作为数据查询相关具体信息的条件码。

而且姓名也是该数据表的主键,所以具有唯一标识性。

privatevoidbutton1_Click(objectsender,EventArgse)

intindex=dataGridView1.SelectedRows[0].Index;

//获取选中行的行号

DataGridViewRows=dataGridView1.Rows[index];

Form1form1=newForm1(s);

将被选中的DataGridViewRow作为传递参数。

跳转到查看联系人界面,此时打开的新的Form,并且根据从上一个form传递过来的参数中获取DataGridViewRow,再加载到相应的数据框中。

值得一提的是因为姓名是主键,因此不提供修改。

获取DataGridViewRow各列的数据并填充到相应的数据框中。

publicForm1(DataGridViewRowstr)

InitializeComponent();

//Cells[0]为要选的第几列

sname=str.Cells[0].Value.ToString();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1