如何做一个简单的XX(学生/图书馆)管理系统(二)

1.闲话
我做的是手机百科系统(什么玩意。。。)主要是学生管理系统什么的做的人太多了,所以随便选了一个题材
2.界面展示
如何做一个简单的XX(学生/图书馆)管理系统(二)_第1张图片
(数据随便插的勿喷)

3.所用控件
datagridview输出数据,combobox作为选项卡,linklabel超链接。

4.代码分析并展示各控件的作用
4.1 combobox
combobox可以利用其中的数据对数据库进行操作,也可以输出数据库中的内容,这里我主要利用的是利用其中的数据对数据库进行select
大部分没什么好说的,比较值得注意的一点是第一个和第二个combobox的作用,如果我第一个选了华为,那么第二个只会显示华为的系列,若我选择小米,则只显示小米的系列,实现代码如下

private void company_SelectedIndexChanged(object sender, EventArgs e)
        {
            series.Items.Clear();
            if (company.SelectedItem == "全部")
            {
                series.Items.Add("全部");
                
            }
            if (company.SelectedItem == "华为")
            {
                series.Items.Add("全部");
                series.Items.Add("p系列");
                series.Items.Add("荣耀系列");
                series.Items.Add("mate系列");
                series.Items.Add("青春系列");
                series.Items.Add("保时捷系列");
            }
            if (company.SelectedItem == "苹果")
            {
                series.Items.Add("全部");
                series.Items.Add("max系列");
                series.Items.Add("plus系列");
                series.Items.Add("苹果系列");
                series.Items.Add("X系列");
            }
            if (company.SelectedItem == "小米")
            {
                series.Items.Add("全部");
                series.Items.Add("max系列");
                series.Items.Add("红米系列");
                series.Items.Add("小米系列");
            }
            if (company.SelectedItem == "三星")
            {
                series.Items.Add("全部");
                series.Items.Add("note系列");
                series.Items.Add("A系列");
                series.Items.Add("S系列");
            }
        }

值得注意的一点是这些代码要放在第一个combobox里,因为这些事件的函数关系问题,如果把代码放到series里的话,添加出来的项目显示不出来,所以实现不了后续功能。
linklabel
linklabel可以实现超链接,本身相当于一个点击事件,我把它设了一个超链接

		private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Process.Start("http://detail.zol.com.cn/cell_phone/index1175779.shtml");
        }

4.2datagridview控件
这个控件可以实现很多的功能,可以用它向数据库输入信息,可以添加按钮,可以展示信息,相当imba的控件
可惜由于时间原因(其实是懒),我最后只利用了它的展示信息的功能,是我这个项目的遗憾之一。
代码如下:

			sql = sql5;//sql是最终的查询语句
            SqlDataAdapter output = new SqlDataAdapter(sql, mycon);
            DataSet sdt = new DataSet();
            output.Fill(sdt);
            DataTable stable = sdt.Tables[0];
            result.Rows.Clear();
            string toall = Convert.ToString(sdt.Tables[0].Rows.Count);//统计查询出来的数目
            textBox2.Text = toall;//展示查询出来的数目
            for (int i = 0; i < sdt.Tables[0].Rows.Count; i++)
            {
                result.Rows.Add( sdt.Tables[0].Rows[i][0], sdt.Tables[0].Rows[i][1], sdt.Tables[0].Rows[i][2], sdt.Tables[0].Rows[i][3], sdt.Tables[0].Rows[i][4], sdt.Tables[0].Rows[i][5]);
            }

4.3查询功能的实现:
由于我设计项目的原因,手机有多个属性,用户查询可能只需要其中两三个属性就可以进行查询了,那么查询语句怎么写?要写多少个if?其中几个空白的怎么搞,不能查询语句中间放个*吧。
想了想,也没太简单的办法,但是多重查询下来代码可能会过长,所以我用sql1,2,3,4,5等作为中间查询语句,把查询结果继承下来,并用变量代替语句解决了代码过长问题
其中代码如下

			if (company.SelectedItem == "全部"|| company.SelectedItem == null)
            {
                sql1 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone]";
                sql11= "select 手机名称 from [phone]";
            }
            else
            {
                sql1 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone],[pandc] where [pandc].厂商名 ='" + company.SelectedItem + "'and [phone].手机名称=[pandc].手机名";
                sql11= "select 手机名称 from [phone],[pandc] where [pandc].厂商名 ='" + company.SelectedItem + "'and [phone].手机名称=[pandc].手机名";
            }
            if (series.SelectedItem =="全部"||series.SelectedItem == null)
            {
                sql2 = sql1;
                sql22 = sql11;
            }
            else
            {
                sql2 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone],[pandc] where [pandc].所属系列 ='" + series.SelectedItem + "'and [phone].手机名称=[pandc].手机名 and [phone].手机名称 in ("+ sql11 +")";
                sql22= "select 手机名称 from [phone],[pandc] where [pandc].所属系列 ='" + series.SelectedItem + "'and [phone].手机名称=[pandc].手机名 and [phone].手机名称 in (" + sql11 + ")";
            }
            if(price.SelectedItem== "1000以下")
            {
                sql3 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone] where [phone].价格 <1000 and [phone].手机名称 in (" + sql22 + ")";
                sql33= "select 手机名称 from [phone] where [phone].价格 <1000 and [phone].手机名称 in (" + sql22 + ")";
            }
            else if(price.SelectedItem=="1000-2000")
            {
                sql3 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone] where  [phone].价格>=1000 and [phone].价格<=2000  and [phone].手机名称 in (" + sql22 + ")";
                sql33 = "select 手机名称 from [phone] where [phone].价格>=1000 and [phone].价格<=2000 and [phone].手机名称 in (" + sql22 + ")";
            }
            else if (price.SelectedItem == "2000-3000")
            {
                sql3 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone] where  [phone].价格>=2000 and [phone].价格<=3000  and [phone].手机名称 in (" + sql22 + ")";
                sql33 = "select 手机名称 from [phone] where [phone].价格>=2000 and [phone].价格<=3000 and [phone].手机名称 in (" + sql22 + ")";
            }
            else if (price.SelectedItem == "3000-4000")
            {
                sql3 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone] where  [phone].价格>=3000 and [phone].价格<=4000  and [phone].手机名称 in (" + sql22 + ")";
                sql33 = "select 手机名称 from [phone] where [phone].价格>=3000 and [phone].价格<=4000 and [phone].手机名称 in (" + sql22 + ")";
            }
            else if (price.SelectedItem == "4000-5000")
            {
                sql3 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone] where  [phone].价格>=4000 and [phone].价格<=5000  and [phone].手机名称 in (" + sql22 + ")";
                sql33 = "select 手机名称 from [phone] where [phone].价格>=4000 and [phone].价格<=5000 and [phone].手机名称 in (" + sql22 + ")";
            }
            else if (price.SelectedItem == "5000以上")
            {
                sql3 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone] where  [phone].价格>=5000 and [phone].手机名称 in (" + sql22 + ")";
                sql33 = "select 手机名称 from [phone] where [phone].价格>=5000 and [phone].手机名称 in (" + sql22 + ")";
            }
            else if(price.SelectedItem == "全部"|| price.SelectedItem == null)
            {
                sql3 = sql2;
                sql33 = sql22;
            }
            if(CPU.SelectedItem=="全部"|| CPU.SelectedItem == null)
            {
                sql4 = sql3;
                sql44 = sql33;
            }
            else
            {
                sql4 = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone] where  [phone].cpu='"+ CPU.SelectedItem +"'  and [phone].手机名称 in (" + sql33 + ")";
                sql44= "select 手机名称 from [phone] where  [phone].cpu='" + CPU.SelectedItem + "'  and [phone].手机名称 in (" + sql33 + ")";
            }
            if(photo.SelectedItem=="全部"|| photo.SelectedItem == null)
            {
                sql5 = sql4;
            }
            else
            {
                sql5= "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone] where  [phone].摄像头='" + photo.SelectedItem + "'  and [phone].手机名称 in (" + sql44 + ")";
            }
            sql = sql5;

ps:之所以引入sql11,22,33等是因为出现了这个错误
System.Data.SqlClient.SqlException:“当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。”
这个错误就是说如果select A,B,C from table where A in ()的话就会出错,所以只能select A from table where A in ()这个样子,但是我输出结果肯定是要ABCDE的,所以我取了个中间变量解决了这个问题。
4.4按名字查找
到这里就简单多了,直接放button事件的代码

			string constr = "server=.;database=housework;integrated security=SSPI";
            SqlConnection mycon = new SqlConnection(constr);
            SqlCommand checkCmd = mycon.CreateCommand();
            mycon.Open();
            string name = textBox1.Text;
            string sql = "select 手机名称,cpu,系统,价格,摄像头,内存 from [phone] where  手机名称='"+ name +"'";
            SqlDataAdapter output = new SqlDataAdapter(sql, mycon);
            DataSet sdt = new DataSet();
            output.Fill(sdt);
            DataTable stable = sdt.Tables[0];
            result.Rows.Clear();
            for (int i = 0; i < sdt.Tables[0].Rows.Count; i++)
            {
                result.Rows.Add(sdt.Tables[0].Rows[i][0], sdt.Tables[0].Rows[i][1], sdt.Tables[0].Rows[i][2], sdt.Tables[0].Rows[i][3], sdt.Tables[0].Rows[i][4], sdt.Tables[0].Rows[i][5]);
            }

到这里用户界面的基本功能就结束了,下面一篇我将展示我的管理界面的窗口,并简单介绍其中所用到的控件的用法等

你可能感兴趣的:(学习总结)