S1总复习(2)手机管理系统
程序要求
要求
某公司开发手机信息管理系统,SQL Server2008 作为数据库,程序界面采用 MDI 窗 体风格,主菜单包括菜单项:“增加信息”、“查询信息”和“退出”,如图-1 所示。
数据库设计
数据库名称:MobileManager,其他设置参见下表:
具体实现步骤
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。
5、 完成“清空”功能。用户点击“清空”按钮后,系统清除所有文本框显示的文本信息, 注意要保持组合框中的项。
6、 实现“增加”按钮功能。用户点击“增加”按钮后:
a)首先检测是否所有文本框中均填入信息。如果某个文本框为空则提示用户填写,如 图-3 所示。
b)如果信息填写完整,则将该条信息成功存入数据库。如果保存成功则提示用户“保 存成功!”,如图-4 所示。如果保存失败,则提示用户“保存失败!”,如图-5 所示。
7、 完成“关闭”按钮功能:点击“关闭”按钮后关闭“增加信息”窗体。
8、 用户点击“查询信息”的菜单项后,以子窗体形式打开“查询信息”窗体,如图-6 所 示。
a)该窗体包括 1 个标签控件、1 个组合框控件、1 个 ListView 控件和 2 个按钮控件。
b)该窗体禁止最大化,且边框不可以拖拽,打开位置为屏幕中央。
c)ListView 控件以 Details 形式显示,且设置如图-6 所示的 6 个列标题。
d)窗体加载时组合框仅显示“请选择”,但不需要实现组合框的数据库信息加载。
e)窗体加载时 ListView 控件显示数据库中所有手机信息,如图-6 所示。
f)本窗体“查询”按钮的功能不需要实现。
9、 完成“关闭”按钮功能:点击“关闭”按钮后关闭“查询信息”窗体。
10、完成主窗体中“退出”菜单功能:点击“退出”菜单后先提示用户“是否要退出?” , 当用户点击“是”后退出应用程序。如图-7 所示。
数据库操作
主表
从表
代码
主窗口
界面
主界面
设置
主窗体的属性设置就完了
代码
在是代码:
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();
}
}
}
}
主窗体代码编写完成
主窗口完成后在做添加窗口
添加窗口
界面
界面:
窗口属性设置
属性设置完毕
代码
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;
}
}
}
查询窗口
界面
属性
代码
代码:
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();
}
}
}
注意:这里代码可以实现所有的功能,但是性能方面有问题!!!