版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whc888666/article/details/88037253
前言 |
流程图 |
流程图是一切代码思路的来源。非常的重要。这也是我为什么每次都是把它放到最前面的原因。我的流程图是怎么画的,我的代码思路就是怎么走的。
组合查询其实不难,只要我们将每一步是如何实现的画出来,你就会明白,其实还是很简单的。非要说有点难的是:根据不同的字段出现不同的控件,这个也都是在实际操作中的难点。还有一点就是组合关系的判断:1.一个组合关系没有选择,说明就是查询第一行的内容;2.第一个组合关系的出现,表示查询的是第一行和第二行的关系;3.两个组合关系都用上了也就表示差窗体上所有的查询关系都要用上。
其实组合查询就这点东西。全在下面的流程图上(尽管很多地方还不是很专业,但是并不妨碍我对思考的记录)。
代码展示 |
UI层
对流程图阐释最清楚的地方就是我的UI层,尽管很多的判断不该放到这里,因为面向对象的的思想要求把逻辑判断需要放到BLL层。为了更加流畅的表现我的思路。当然后面优化的时候还是要严格按照面向对象的思想进行。代码的核心在于:if…else if 对逻辑的搭建。其他的一切都变得非常的简单。
namespace UI
{
public partial class frmStudentInfoDefend : Form
{
public frmStudentInfoDefend()
{
InitializeComponent();
}
//封装一个方法
public string English(string str)
{
switch (str)
{
case "卡号":
return "cardno";
case "学号":
return "studentNo";
case "姓名":
return "studentName";
case "性别":
return "sex";
case "专业":
return "department";
case "年级":
return "grade";
case "班级":
return "classno";
default:
return "";
}
}
private void cmdQuery_Click(object sender, EventArgs e)
{
//实例化Model层
StudentInfo studentinfo = new StudentInfo();
//实例化Facade层
fStudentInfoDefend fstudentinfodefend = new fStudentInfoDefend();
//将UI层的数据传入Model层
studentinfo.cmbName1 =English(cmbName1.Text.Trim());
studentinfo.cmbName2 = English(cmbName2.Text.Trim());
studentinfo.cmbName3 = English(cmbName3.Text.Trim());
studentinfo.cmbOpert1 = cmbOpert1.Text.Trim();
studentinfo.cmbOpert2 = cmbOpert2.Text.Trim();
studentinfo.cmbOpert3 = cmbOpert3.Text.Trim();
studentinfo.cmbGroupQuery1 = cmbGroupQuery1.Text.Trim();
studentinfo.cmbGroupQuery2 = cmbGroupQuery2.Text.Trim();
studentinfo.txtQueryContent1 = txtQueryContent1.Text.Trim();
studentinfo.txtQueryContent2 = txtQueryContent2.Text.Trim();
studentinfo.txtQueryContent3 = txtQueryContent3.Text.Trim();
//接收DAL层的数据
DataTable table = fstudentinfodefend.SelectStudentInfo(studentinfo);
//组合两个控件都为空的情况
if (cmbGroupQuery1.Text.Trim ()=="" && cmbGroupQuery2.Text.Trim()=="")
{
//设置其他控件不可用
cmbName2.Enabled = false;
cmbName3.Enabled = false;
cmbOpert2.Enabled = false;
cmbOpert3.Enabled = false;
txtQueryContent2.Enabled = false;
txtQueryContent3.Enabled = false;
//判空
if (cmbName1.Text.Trim() == "" || cmbOpert1.Text.Trim() == "" || txtQueryContent1.Text.Trim() == "")
{
MessageBox.Show("信息不能为空,请将信息填写完整!");
return;
}
else
{
dataGridView.DataSource = table;
MessageBox.Show("查询成功!", "提示");
}
}
//组合控件2为空的情况
else if (cmbGroupQuery2 .Text .Trim ()=="")
{
//判空
DataTable tableGroup1 = fstudentinfodefend.SelectStuGroup1(studentinfo);
if (cmbName1.Text.Trim() == "" || cmbOpert1.Text.Trim() == "" || txtQueryContent1.Text.Trim() == ""|| cmbName2.Text.Trim() == "" || cmbOpert2.Text.Trim() == "" || txtQueryContent2.Text.Trim() == "")
{
MessageBox.Show("信息不能为空,请将信息填写完整!");
//设置其他控件不可用
cmbName3.Enabled = false;
cmbOpert3.Enabled = false;
txtQueryContent3.Enabled = false;
return;
}
else
{
dataGridView.DataSource = tableGroup1;
MessageBox.Show("查询成功!", "提示");
}
}
//组合控件都不为空的情况
else
{
DataTable tableGroup1And2 = fstudentinfodefend.SelectStuGroup1And2(studentinfo);
//判空
if (cmbName1.Text.Trim() == "" || cmbOpert1.Text.Trim() == "" || txtQueryContent1.Text.Trim() == "" || cmbName2.Text.Trim() == "" || cmbOpert2.Text.Trim() == "" || txtQueryContent2.Text.Trim() == ""||cmbName3.Text.Trim() == "" || cmbOpert3.Text.Trim() == "" || txtQueryContent3.Text.Trim() == "")
{
MessageBox.Show("信息不能为空,请将信息填写完整!");
return;
}
else
{
dataGridView.DataSource = tableGroup1And2;
MessageBox.Show("查询成功!", "提示");
}
}
}
private void frmStudentInfoDefend_Load(object sender, EventArgs e)
{
//查询条件
cmbName1.Items.Add("卡号");
cmbName1.Items.Add("学号");
cmbName1.Items.Add("姓名");
cmbName1.Items.Add("性别");
cmbName1.Items.Add("专业");
cmbName1.Items.Add("年级");
cmbName1.Items.Add("班级");
cmbName2.Items.Add("卡号");
cmbName2.Items.Add("学号");
cmbName2.Items.Add("姓名");
cmbName2.Items.Add("性别");
cmbName2.Items.Add("专业");
cmbName2.Items.Add("年级");
cmbName2.Items.Add("班级");
cmbName3.Items.Add("卡号");
cmbName3.Items.Add("学号");
cmbName3.Items.Add("姓名");
cmbName3.Items.Add("性别");
cmbName3.Items.Add("专业");
cmbName3.Items.Add("年级");
cmbName3.Items.Add("班级");
//操作符
cmbOpert1.Items.Add(">");
cmbOpert1.Items.Add("<");
cmbOpert1.Items.Add("=");
cmbOpert1.Items.Add("<>");
cmbOpert2.Items.Add(">");
cmbOpert2.Items.Add("<");
cmbOpert2.Items.Add("=");
cmbOpert2.Items.Add("<>");
cmbOpert3.Items.Add(">");
cmbOpert3.Items.Add("<");
cmbOpert3.Items.Add("=");
cmbOpert3.Items.Add("<>");
//组合关系
cmbGroupQuery1.Items.Add("与");
cmbGroupQuery1.Items.Add("或");
cmbGroupQuery2.Items.Add("与");
cmbGroupQuery2.Items.Add("或");
}
private void cmdClear_Click(object sender, EventArgs e)
{
//清空控件
cmbName1.Text= "";
cmbName2.Text = "";
cmbName3.Text = "";
cmbOpert1.Text = "";
cmbOpert2.Text = "";
cmbOpert3.Text = "";
txtQueryContent1.Text = "";
txtQueryContent2.Text = "";
txtQueryContent3.Text = "";
cmbGroupQuery1.Text = "";
cmbGroupQuery2.Text = "";
}
}
}
BLL层
面向对象的思想,这一层是非常关键的。因为很多的逻辑关系都在这层,由于我今天给大家展示的不是我面向对象思想的机房重构。所以该层的代码也就是失去了他原本的意义。因此在这里也就不展示该层的代码了。
DAL层
因为我没有用面向对象的思想写代码,势必导致我的DAL层跟人家的DAL完全不同。面向对象中是将该层的查询方法在数据库进行了存储过程处理。变得简单了很多。我的DAL还是费了我很大功夫的。但是一样达到了面向对象思想能够达到的效果。思路远比代码本身更加重要。
namespace DAL
{
public class StudentInfoDefendDAO:IStudentInfoDefend
{
SqlHelper sqlhelper = new SqlHelper();
public DataTable SelectStudentInfo(StudentInfo studentinfo)
{
string name =studentinfo.cmbName1;
string fuhao = studentinfo.cmbOpert1;
string text= studentinfo.txtQueryContent1;
string addtext = name + fuhao + text;
string sql = @"select * from [student_Info] where "+addtext+" ";
DataTable table = sqlhelper.ExecuteQuery(sql, CommandType.Text);
return table;
}
public DataTable SelectStuGroup1(StudentInfo studentinfo)
{
string nameGroup1 = studentinfo.cmbName1;
string fuhaoGroup1 = studentinfo.cmbOpert1;
string textGroup1 = studentinfo.txtQueryContent1;
string addtextGroup1 = nameGroup1 + fuhaoGroup1 + textGroup1;
string sql = @"select * from [student_Info] where " + addtextGroup1 + " ";
DataTable tableGroup1 = sqlhelper.ExecuteQuery(sql, CommandType.Text);
return tableGroup1;
}
public DataTable SelectStuGroup1And2(StudentInfo studentinfo)
{
string nameGroup1And2 = studentinfo.cmbName1;
string fuhaoGroup1And2 = studentinfo.cmbOpert1;
string textGroup1And2 = studentinfo.txtQueryContent1;
string addtextGroup1And2 = nameGroup1And2 + fuhaoGroup1And2 + textGroup1And2;
string sql = @"select * from [student_Info] where " + addtextGroup1And2 + " ";
DataTable tableGroup1And2 = sqlhelper.ExecuteQuery(sql, CommandType.Text);
return tableGroup1And2;
}
}
}
总结 |
当然还希望大佬给我指出我的不足,我深表感激。