S1总复习(2)手机管理系统


目录

  • S1总复习(2)手机管理系统
  • 程序要求
  • 要求
  • 数据库设计
  • 具体实现步骤
  • 数据库操作
  • 主表
  • 从表
  • 代码
  • 主窗口
  • 界面
  • 代码
  • 添加窗口
  • 界面
  • 代码
  • 扩展
  • DbHelper
  • 查询窗口
  • 界面
  • 代码


程序要求

要求

某公司开发手机信息管理系统,SQL Server2008 作为数据库,程序界面采用 MDI 窗 体风格,主菜单包括菜单项:“增加信息”、“查询信息”和“退出”,如图-1 所示。

如何查看手机系统的架构信息_winform

数据库设计

数据库名称:MobileManager,其他设置参见下表:

如何查看手机系统的架构信息_c#_02


如何查看手机系统的架构信息_sqlserver_03

具体实现步骤

1、 建立数据库 MobileManager 和数据表 MobileBrand 、MobileInfo; 各个表中至少分别输入 2 条测试数据。

2、 在 Visual Studio 2012 中创建 Windows 窗体应用程序。

3、 将默认窗体名称 Form1 更改为 frmMain,窗体标题设置为“手机信息管理系统”,设 置该窗体为 MDI 父窗体,并添加如图-1 所示的 3 个菜单项,程序运行后该窗体默认最 大化。

4、 用户点击“增加信息”的菜单项后,以子窗体形式打开“增加信息”窗体,如图-2 所 示。

a)该窗体包括 8 个标签控件、5 个文本框控件、1 个组合框控件和 3 个按钮控件。

b)该窗体禁止最大化,且边框不可以拖拽。

c)打开位置为屏幕中央。

d)手机品牌组合框需在窗体加载时加载手机品牌信息,读取数据库表 MobileBrand 的信息。默认有一个选项被选中。

e) “手机价格” 、“重量”文本框中的 TextAlign 属性为 Right,其余文本框的 TextAlign 属性为 Left。

如何查看手机系统的架构信息_System_04

5、 完成“清空”功能。用户点击“清空”按钮后,系统清除所有文本框显示的文本信息, 注意要保持组合框中的项。

6、 实现“增加”按钮功能。用户点击“增加”按钮后:

a)首先检测是否所有文本框中均填入信息。如果某个文本框为空则提示用户填写,如 图-3 所示。

b)如果信息填写完整,则将该条信息成功存入数据库。如果保存成功则提示用户“保 存成功!”,如图-4 所示。如果保存失败,则提示用户“保存失败!”,如图-5 所示。

如何查看手机系统的架构信息_c#_05


如何查看手机系统的架构信息_如何查看手机系统的架构信息_06


如何查看手机系统的架构信息_sqlserver_07


7、 完成“关闭”按钮功能:点击“关闭”按钮后关闭“增加信息”窗体。

8、 用户点击“查询信息”的菜单项后,以子窗体形式打开“查询信息”窗体,如图-6 所 示。

a)该窗体包括 1 个标签控件、1 个组合框控件、1 个 ListView 控件和 2 个按钮控件。

b)该窗体禁止最大化,且边框不可以拖拽,打开位置为屏幕中央。

c)ListView 控件以 Details 形式显示,且设置如图-6 所示的 6 个列标题。

d)窗体加载时组合框仅显示“请选择”,但不需要实现组合框的数据库信息加载。

e)窗体加载时 ListView 控件显示数据库中所有手机信息,如图-6 所示。

f)本窗体“查询”按钮的功能不需要实现。

如何查看手机系统的架构信息_System_08


9、 完成“关闭”按钮功能:点击“关闭”按钮后关闭“查询信息”窗体。

10、完成主窗体中“退出”菜单功能:点击“退出”菜单后先提示用户“是否要退出?” , 当用户点击“是”后退出应用程序。如图-7 所示。

如何查看手机系统的架构信息_sqlserver_09

数据库操作

主表

如何查看手机系统的架构信息_winform_10

如何查看手机系统的架构信息_winform_11

从表

如何查看手机系统的架构信息_如何查看手机系统的架构信息_12


如何查看手机系统的架构信息_winform_13

代码

主窗口
界面

主界面

如何查看手机系统的架构信息_如何查看手机系统的架构信息_14


设置

如何查看手机系统的架构信息_c#_15


如何查看手机系统的架构信息_sqlserver_16


主窗体的属性设置就完了

代码

在是代码:

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 db1107手机信息管理系统
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void tsmlAdd_Click(object sender, EventArgs e)
        {
            //实例化窗体
            FromAdd fromAdd = new FromAdd();
            //设置父子窗口
            fromAdd.MdiParent = this;
            //显示窗口
            fromAdd.Show();

        }

        private void tsmlQuery_Click(object sender, EventArgs e)
        {
            //实例化窗口
            FromQuery query = new FromQuery();
            //设置父子窗口
            query.MdiParent = this;
            //显示窗口
            query.Show();
        }

        private void tsmlClose_Click(object sender, EventArgs e)
        {
            DialogResult show = MessageBox.Show("是否要退出!","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question);

            if (show == DialogResult.Yes)
            {
                this.Close();
            }
            
        }
    }
}

主窗体代码编写完成

主窗口完成后在做添加窗口

添加窗口
界面

界面:

如何查看手机系统的架构信息_winform_17


窗口属性设置

如何查看手机系统的架构信息_System_18


如何查看手机系统的架构信息_System_19

属性设置完毕

代码
using System;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

namespace db1107手机信息管理系统
{
    public partial class FromAdd : Form
    {
        public FromAdd()
        {
            InitializeComponent();
        }

        private void btnEmpty_Click(object sender, EventArgs e)
        {
            //清空文本
            txtPhoneModel.Text = "";
            txtPhonePrice.Text = "";
            txtPhoneSize.Text = "";
            txtPhoneWeight.Text = "";
            txtTerminalStyle.Text = "";
        }

        private void FromAdd_Load(object sender, EventArgs e)
        {
            //初始化组合框
            cbLoad();
        }

        private void cbLoad()
        {
            //召唤帮手
            DbHelper helper = new DbHelper();

            //新建sql 语句
            String sql = "select * from MobileBrand";

            //让帮手干活
            DataSet ds = helper.getDataSet(sql);

            //组合框显示值
            cbPhoneBrand.DisplayMember = "Brand";
            //组合框实际值
            cbPhoneBrand.ValueMember = "BrandID";

            //绑定数据源
            cbPhoneBrand.DataSource = ds.Tables["table"];
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            //关闭窗口
            this.Close();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //获取组合框实际的值
            String cbIdx = cbPhoneBrand.SelectedValue.ToString();

            //获取文本框数据
            String brand = txtPhoneModel.Text;
            String price = txtPhonePrice.Text;
            String size = txtPhoneSize.Text;
            String weight = txtPhoneWeight.Text;
            String terminal = txtTerminalStyle.Text;

            //非空验证
            bool b = checkText();

            if (!b)
            {
                return;
            }

            //判断是否是数字
            bool l = checkNum(price);
            bool i = checkNum(weight);
            if (!(l && i))
            {
                MessageBox.Show("保存失败!");
                return;
            }

            //添加数据
            //调用帮手
            DbHelper helper = new DbHelper();

            //新建 sql 语句
            String sql = String.Format("insert into MobileInfo values ({0},'{1}',{2},'{3}',{4},'{5}');", cbIdx
                , brand, price, size, weight, terminal);

            //让帮手干活
            int update = helper.update(sql);

            if (update > 0)
            {
                MessageBox.Show("保存成功!");
            }
            else
            {
                MessageBox.Show("保存失败!");
            }

            this.Close();
        }

        private bool checkNum(String s)
        {
            bool b;
            try
            {
                int i = Int32.Parse(s);
                b = true;
            }
            catch
            {
                b = false;
            }


            return b;
        }

        private bool checkText()
        {
            bool b = true;

            //获取文本框数据
            String brand = txtPhoneModel.Text;
            String price = txtPhonePrice.Text;
            String size = txtPhoneSize.Text;
            String weight = txtPhoneWeight.Text;
            String terminal = txtTerminalStyle.Text;

            //文本框非空判断
            if (brand.Length == 0 && price.Length == 0 && size.Length == 0 && weight.Length == 0 &&
                terminal.Length == 0)
            {
                MessageBox.Show("请输入所有的手机信息!");
                b = false;
            }
            else if (brand.Length == 0 || price.Length == 0 || size.Length == 0 || weight.Length == 0 ||
                     terminal.Length == 0)
            {
                MessageBox.Show("保存失败!");
                b = false;
            }

            return b;
        }
    }
}
扩展
DbHelper

这里的DbHelper 是我写的一个工具类
具体代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;

namespace db1107手机信息管理系统

{
    class DbHelper
    {
        // 连接字符串
        public String connStr = "Data Source=.;Initial Catalog=MobileManager;Integrated Security=True";
        
        // 获得连接对象
        public SqlConnection getConn() {
            SqlConnection conn = new SqlConnection(this.connStr);
            conn.Open();
            return conn;
        }

        // 增删改方法
        // 返回受影响行数
        public int update(String sql) {
            // 连接对象
            SqlConnection conn = getConn();
            // 执行者
            SqlCommand cmd = new SqlCommand(sql,conn);
            // int i = 执行者.执行不查询()
            int i = cmd.ExecuteNonQuery();
            return i;
        }

        // 查询方法
        // 返回数据朗读者
        public SqlDataReader getReader (String sql) {
            // 连接对象
            SqlConnection conn = getConn();
            // 执行者
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = sql;
            cmd.Connection = conn;
            // 执行者.executeReader()----》数据朗读者
            SqlDataReader reader = cmd.ExecuteReader();
            return reader;
        }

        // 获取断开式的表
        public DataTable getTable(String sql)
        {
            SqlConnection conn = getConn();
            DataSet ds = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);
            adapter.Fill(ds,"table");
            DataTable dt = ds.Tables["table"];
            return dt;
        }

        //获取仓库
        public DataSet getDataSet(String sql)
        {
            SqlConnection conn = getConn();
            DataSet ds = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);
            adapter.Fill(ds,"table");
            return ds;
        }
        
    }
}
查询窗口
界面

如何查看手机系统的架构信息_sqlserver_20

属性

如何查看手机系统的架构信息_sqlserver_21


如何查看手机系统的架构信息_c#_22

代码

代码:

using System;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

namespace db1107手机信息管理系统
{
    public partial class FromQuery : Form
    {
        private DataSet ds;

        public FromQuery()
        {
            InitializeComponent();
        }

        private void FromQuery_Load(object sender, EventArgs e)
        {
            //组合框加载
            cbLoad();

            //ListView 加载
            lvLoad();
        }

        private void lvLoad()
        {
            //调用帮手
            DbHelper helper = new DbHelper();

            //新建 sql 语句
            String sql = "select * from MobileInfo inner join MobileBrand on MobileBrand.BrandID = MobileInfo.BrandID";

            SqlDataReader reader = helper.getReader(sql);

            while (reader.Read())
            {
                ListViewItem item = new ListViewItem();

                //获取组合框的数据
                String brand = reader["Brand"].ToString();
                String type = reader["Type"].ToString();
                String price = reader["Price"].ToString();
                String size = reader["Size"].ToString();
                String weight = reader["Weight"].ToString();
                String style = reader["Style"].ToString();

                //分别添加
                item.Text = brand;
                item.SubItems.Add(type);
                item.SubItems.Add(price);
                item.SubItems.Add(size);
                item.SubItems.Add(weight);
                item.SubItems.Add(style);

                listView1.Items.Add(item);
            }
        }

        private void cbLoad()
        {
            //调用帮手
            DbHelper helper = new DbHelper();

            //新建sql 语句
            String sql = "select * from MobileBrand";

            //让帮手干活
            DataTable dt = helper.getTable(sql);

            cbPhoneModel.DisplayMember = "Brand";

            cbPhoneModel.ValueMember = "BrandID";

            DataRow row = dt.NewRow();
            row[0] = "-99";
            row[1] = "请选择";
            dt.Rows.InsertAt(row, 0);

            cbPhoneModel.DataSource = dt;
        }


        private void btnQuery_Click(object sender, EventArgs e)
        {
            //清空数据
            listView1.Items.Clear();
            
            //调用帮手
            DbHelper helper = new DbHelper();

            //获取组合框中的值
            String cbIdx = cbPhoneModel.SelectedValue.ToString();

            //判断
            if (cbIdx.Equals("-99"))
            {
                //如果我的组合框中的值为请选择 -99 的话执行一下代码!

                //抵用 listView 加载
                lvLoad();

                return;
            }

            

            upDataLv(cbIdx);
        }

        private void upDataLv(String cbIdx)
        {

            //调用帮手
            DbHelper helper = new DbHelper();

            //新建 sql 语句
            String sql = "select * from MobileInfo inner join MobileBrand on MobileBrand.BrandID = MobileInfo.BrandID";

            SqlDataReader reader = helper.getReader(sql);

            while (reader.Read())
            {
                ListViewItem item = new ListViewItem();

                //获取 BrandID
                String brandId = reader["BrandID"].ToString();

                //获取组合框的数据
                String brand = reader["Brand"].ToString();
                String type = reader["Type"].ToString();
                String price = reader["Price"].ToString();
                String size = reader["Size"].ToString();
                String weight = reader["Weight"].ToString();
                String style = reader["Style"].ToString();

                if (cbIdx == brandId)
                {
                    //分别添加
                    item.Text = brand;
                    item.SubItems.Add(type);
                    item.SubItems.Add(price);
                    item.SubItems.Add(size);
                    item.SubItems.Add(weight);
                    item.SubItems.Add(style);

                    listView1.Items.Add(item);
                }
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

注意:这里代码可以实现所有的功能,但是性能方面有问题!!!