C# 用面向对象的思想去编程
再接上一篇博文,之前写的两篇博文虽然实现了功能,但是和控件之间的粘性太大,依赖于控件进行操作,所以这篇博文主要用面向对象的思想做一个Demo,将逻辑层与显示层剥离开
首先新建一个窗体文件,搭建界面完毕:

新建一个类,命名为LawHelper

在LawHelper里新建两个对象,分别存放法律法规的名称编号和具体的位置:
public class Law
{
public string Nmae;
public int ID;
} public class LawNode
{
public string Name;
public int Level;
public int Parent;
public int ID;
public string LawName;
public int LawID;
}
再新建三个函数,分别对应着界面上的combobox选项,左边树状图的Node的具体位置以及右边textbox里的具体法律条款的显示:
public List<Law> GetLaws()
{
//实例化Law类
Law law = new Law();
return null;
} public List<LawNode> GetLawNodes(Law law)
{
LawNode lawNode = new LawNode();
return null;
} public string GetLawText(LawNode lawnode)
{
return null;
}
编写第一个函数GetLaws(),获取到对应的法律法规的名称:
public List<Law> GetLaws()
{
//新建List
List<Law> laws = new List<Law>(); //输入想关联的数据库的基本信息
SqlConnection conn = new SqlConnection(@"server = DESKTOP-5SDB4D4;Initial Catalog= test;User ID=sa;Password=lmz123LMZ");
//打开数据库连接
conn.Open();
//sql语句
string str = " select * from [test].[dbo].[TRaw] where c1 = 0";
//创建命令对象
SqlCommand lo_cmd = conn.CreateCommand();
lo_cmd.CommandText = str;
SqlDataReader dtr = lo_cmd.ExecuteReader();
while (dtr.Read())
{
//实例化Law类
Law law = new Law();
//法律名称
law.Nmae = (string)dtr["c3"];
//法律代码
law.ID = (int)dtr["c0"];
//将值赋到List中
laws.Add(law);
}
return laws;
}
值得一提的是,我一开始将对象的实例放在了循环的外面,导致往List赋值的时候后面的值会将前面的值全部覆盖,解决方法就是在循环里实例化
编写第二个和第三个函数,分别获取具体的法律条文的位置以及输出最后的法律条文信息
编写完成后去主界面编写程序,首先实例化LawHelper类:
//实例化LawHelper类
LawHelper lawhelper = new LawHelper();
Law law = new Law();
List<LawNode> lawslocation = new List<LawNode>();
再对应编写对应的函数代码,具体代码如下显示:
LawHelper:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient; namespace WindowsFormsApp4
{
public class Law
{
public string Name;
public int ID;
} public class LawNode
{
//节点的名称
public string name;
//法律的层级
public int Level;
//父节点
public int Parent;
//具体法律条例的ID
public int ID;
//所选法律名称对应的编号
public int LawID;
} public class LawHelper
{
//获取带法律名称及对应的法律编号
public List<Law> GetLaws()
{
//新建List
List<Law> laws = new List<Law>();
//输入想关联的数据库的基本信息
SqlConnection conn = new SqlConnection(@"server = DESKTOP-5SDB4D4;Initial Catalog= test;User ID=sa;Password=lmz123LMZ");
//打开数据库连接
conn.Open();
//sql语句
string str = " select * from [test].[dbo].[TRaw] where c1 = 0";
//创建命令对象
SqlCommand lo_cmd = conn.CreateCommand();
lo_cmd.CommandText = str;
SqlDataReader dtr = lo_cmd.ExecuteReader();
while (dtr.Read())
{
//实例化Law类
Law law = new Law();
//法律名称
law.Name = (string)dtr["c3"];
//法律代码
law.ID = (int)dtr["c0"];
//将值赋到List中
laws.Add(law);
}
dtr.Close();
conn.Close();
return laws;
} //获取法律条文的位置
public List<LawNode> GetLawNodes(Law law)
{
//新建List存放对应的值
List<LawNode> lawslocation = new List<LawNode>();
SqlConnection conn = new SqlConnection(@"server = DESKTOP-5SDB4D4;Initial Catalog= test;User ID=sa;Password=lmz123LMZ");
//打开数据库连接
conn.Open();
//sql语句
string str = " select * from [test].[dbo].[TRaw] where c0 =" + law.ID;
//创建命令对象
SqlCommand lo_cmd = conn.CreateCommand();
lo_cmd.CommandText = str;
SqlDataReader dtr = lo_cmd.ExecuteReader();
while (dtr.Read())
{
//实例化LawNode类
LawNode lawNode = new LawNode();
//层级
lawNode.Level = (int)dtr["c4"];
//法律名称代码
lawNode.LawID = (int)dtr["c0"];
//父节点
lawNode.Parent = (int)dtr["c1"];
//法律名称代码
lawNode.ID = (int)dtr["c2"];
//将值赋到List中
lawslocation.Add(lawNode);
}
dtr.Close();
conn.Close();
return lawslocation;
} //获取具体的法律条文
public string GetLawText(LawNode lawnode)
{ //获取到法律的层级
int level = lawnode.Level;
//获取到法律的编号
int ID = lawnode.ID;
//获取法律名称的ID
int LawID = lawnode.LawID; string lawItem = ""; SqlConnection conn = new SqlConnection(@"server = DESKTOP-5SDB4D4;Initial Catalog= test;User ID=sa;Password=lmz123LMZ");
//打开数据库连接
conn.Open();
//sql语句
string str = "select * from [test].[dbo].[TRaw] where c4 =" + level + "and c0 = " + LawID + "and c2 = " + ID;
//创建命令对象
SqlCommand lo_cmd = conn.CreateCommand();
lo_cmd.CommandText = str;
SqlDataReader dtr = lo_cmd.ExecuteReader();
while (dtr.Read())
{
if((int)dtr["c6"] == )
{
//获取到具体的法律条例
lawItem = (string)dtr["c3"];
}
}
dtr.Close();
conn.Close();
return lawItem;
}
}
}
Form1:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace WindowsFormsApp4
{
public partial class Form1 : Form
{
//实例化LawHelper类
LawHelper lawhelper = new LawHelper();
Law law = new Law();
List<LawNode> lawslocation = new List<LawNode>(); public Form1()
{
InitializeComponent();
SetComboboxValue();
comboBox1.SelectedIndex = ;
} //设置combobox1的值
public void SetComboboxValue()
{
List<Law> laws = lawhelper.GetLaws();
for (int i = ;i< laws.Count; i++)
{
comboBox1.Items.AddRange(new object[] { laws[i].Name});
}
} //选择不同的法律法规
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
//获取到选中的法律名称
int inx = comboBox1.SelectedIndex;
//树节点清空
treeView1.Nodes.Clear();
List<Law> laws = lawhelper.GetLaws();
law.Name = laws[inx].Name;
law.ID = laws[inx].ID;
lawslocation = lawhelper.GetLawNodes(law);
int count = ; //循环所有的节点
for (int i = ; i < lawslocation.Count; i++)
{
//当level层级为1时,生成所有的父节点
if (lawslocation[i].Level == )
{
TreeNode node = new TreeNode();
node.Text = "第" + NumberToChinese(count) + "条";
treeView1.Nodes.Add(node);
count++;
lawslocation[i].name = node.Text;
}
//当父节点ID与法律法规ID相吻合的时候,生成子节点
//if ()
//{ //} }
} //单击节点弹出消息
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode TN = e.Node;
int inx = comboBox1.SelectedIndex;
List<Law> laws = lawhelper.GetLaws();
law.Name = laws[inx].Name;
law.ID = laws[inx].ID;
// List<LawNode> lawslocation = lawhelper.GetLawNodes(law);
for (int i = ; i < lawslocation.Count; i++)
{
LawNode getinfo = new LawNode();
if (TN.Text == lawslocation[i].name)
{
getinfo.ID = lawslocation[i].ID;
getinfo.LawID = lawslocation[i].LawID;
getinfo.Level = lawslocation[i].Level;
textBox1.Text = lawhelper.GetLawText(getinfo);
break;
} }
} //数字转中文
public string NumberToChinese(int number)
{
string res;
string str = number.ToString();
string schar = str.Substring(, );
switch (schar)
{
case "":
res = "一";
break;
case "":
res = "二";
break;
case "":
res = "三";
break;
case "":
res = "四";
break;
case "":
res = "五";
break;
case "":
res = "六";
break;
case "":
res = "七";
break;
case "":
res = "八";
break;
case "":
res = "九";
break;
default:
res = "零";
break;
}
if (str.Length > )
{
switch (str.Length)
{
case :
case :
res += "十";
break;
case :
case :
res += "百";
break;
case :
res += "千";
break;
case :
res += "万";
break;
default:
res += "";
break;
}
res += NumberToChinese(int.Parse(str.Substring(, str.Length - )));
} res = res.Replace("十零", "十").Replace("一十", "十");
return res;
}
}
}
最后的效果如图所示:

C# 用面向对象的思想去编程的更多相关文章
- C#基础第七天-作业答案-利用面向对象的思想去实现名片-动态添加
class Card { private string name; public string Name { get { return name; } set { name = value; } } ...
- C#基础第七天-作业-利用面向对象的思想去实现名片-动态添加
1.利用面向对象的思想去实现: (增加,修改,删除,查询,查询全部)需求:根据人名去(删除/查询).指定列:姓名,年龄,性别,爱好,电话. 多条添加 , 动态添加 名片 本系列教程: C#基础总结之八 ...
- C#基础第六天-作业-利用面向对象的思想去实现名片
1.利用面向对象的思想去实现: (增加,修改,删除,查询,查询全部)需求:根据人名去(删除/查询).指定列:姓名,年龄,性别,爱好,电话. 本系列教程: C#基础总结之八面向对象知识点总结-继承与多态 ...
- C#基础第六天-作业答案-利用面向对象的思想去实现名片
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 【quick-cocos2d-x】Lua 面向对象(OOP)编程与元表元方法
版权声明:本文为博主原创文章,转载请注明出处. 面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物. 早期的计算机编程是基于面向过程的方法,通过设计一个算法就可以解决当时 ...
- python 面向对象设计思想发展史
这篇主要说的是程序设计思想发展历史,分为概述和详细发展历史 一,概述 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的 指令和数 据.简单来 ...
- java面向对象的思想(java三大特性)
用通俗易懂的语言来理解java面向对象的思想 大家都知道,java是面向对象的编程,掌握面向对象的编程思想是掌握java编程语言的核心,但是很多人在面向对象方面都存在或多或少的误区,有的是刚学完C语言 ...
- 聚焦JavaScript面向对象的思想
面向对象是一种软件开发方法,是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物.随着时代的发展,计算机被用于解决越来越复杂的问题.一切事物皆对象,通过面向对象的方式,将现实世界的 ...
- 【Java并发基础】利用面向对象的思想写好并发程序
前言 下面简单总结学习Java并发的笔记,关于如何利用面向对象思想写好并发程序的建议.面向对象的思想和并发编程属于两个领域,但是在Java中这两个领域却可以融合到一起.在Java语言中,面向对象编程的 ...
随机推荐
- <转>jmeter(十六)配置元件之计数器
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- codeSourcery交叉编译环境
arm-none-Linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括 ...
- prufer编码 cayley定理
背景(在codeforces 917D 报废后,看题解时听闻了这两个玩意儿.实际上917D与之“木有关西”,也可以认为是利用了prufer的一些思路.) 一棵标号树的Pufer编码规则如下:找到标号最 ...
- linux装sqlite3
下载sqlite3源码包 tar xvfz sqlite-src-3.3.5 cd sqlite-3.3.5 ./configure –no-tcl make python继续一次. apt inst ...
- Python网络编程,粘包、分包问题的解决
tcp编程中的粘包.分包问题的解决: 参考:https://blog.csdn.net/yannanxiu/article/details/52096465 服务端: #!/bin/env pytho ...
- 树莓派无显示器开启ssh的方法
在boot根目录新建一个名为 ssh 的空文件即可. boot目录所在分区是fat32格式,可以被windows识别和操作 带有系统的tf卡(或SD卡)插入读卡器中,新建ssh文件即可,注意无后缀名
- UI自动化(一)html基础
前端的三把利器 HTML:赤裸的一个人 CSS:华丽的衣服 JS/JavaScript:赋予这个人的行为,也就是动起来 DOM 就是将页面变成可操 HTML(超文本标记语言) html代码实际上就是一 ...
- squid代理服务器安装和配置
服务器版本:centos6.5 squid版本:3.1 Squid介绍 Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用户想要下载一个主页时,可 ...
- AnswerOpenCV(1001-1007)一周佳作欣赏
外国不过十一,所以利用十一假期,看看他们都在干什么. 一.小白问题 http://answers.opencv.org/question/199987/contour-single-blob-with ...
- 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 20165211
目录 2018-2019-2 <网络对抗技术>Exp3 免杀原理与实践 20165211 1. 基础问题回答 (1)杀软是如何检测出恶意代码的? (2)免杀是做什么? (3)免杀的基本方法 ...