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语言中,面向对象编程的 ...
随机推荐
- bzoj2287 [POJ Challenge]消失之物
题目链接 少打个else 调半天QAQ 重点在47行,比较妙 #include<algorithm> #include<iostream> #include<cstdli ...
- <转>jmeter(三)SOAP/XML-RPC Request
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- Django框架----路由系统(详细)
Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...
- es6转es5在线工具
es6转es5在线工具:https://babeljs.io/repl/# 程序员常用在线工具:https://tool.lu/
- Mysql去掉html标签函数
函数 SET GLOBAL log_bin_trust_function_creators=; DROP FUNCTION IF EXISTS fnStripTags; DELIMITER | CRE ...
- CI(CodeIgniter)框架下使用非自带类库实现邮件发送
在项目开发过程中,需要到了邮件提醒功能.首先想到的是CI自身带不带邮件发送类,查看帖子,发现CI本身自带,然后试着利用CI自身带的类库来实现,经过搜搜很多帖子,不少开发者反馈CI自身的Email类有问 ...
- SVN Attempted to lock an already-locked dir异常解决方法
Attempted to lock an already-locked dir异常解决方法 eclipse或myeclipse用svn提交的时候报错: Attempted to lock an alr ...
- MS08_067漏洞渗透攻击实践
MS08_067漏洞渗透攻击实践 实验前准备 1.两台虚拟机,其中一台为kali,一台为windows xp sp3(英文版). 2.在VMware中设置两台虚拟机网络为NAT模式,自动分配IP地址, ...
- topcoder srm 300 div1
problem1 link 直接模拟即可. import java.util.*; import java.math.*; import static java.lang.Math.*; public ...
- 关于python hashlib模块的使用
hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 #!/usr/bin/ ...