c#Windows 窗体应用 课程设计
应用功能:通过数据库实现登录注册,查找增加商品和购买结算的功能;
设计内容:创建了6个form窗体,form1登录界面,form2注册界面,form3主页界面,form4增加商品界面,form5查找商品界面,form6查看购买订单界面;
其中form3主页界面,我通过3个button和一个panel来实现在form3窗体里显示查找,增加,查看这三个form界面;
设计困难点1:数据库的使用
解决方案:这里我使用的是SQL Server 2008,从下载到安装都是通过网上的资源学习的;
实现登录注册:
1,(SQL)创建数据库,表
2,(vs)工具-连接到数据库
3,sql语句
注册账号,代码如下:
这里用到了SQL INSERT INTO 语句
注意需要引用 using System.Data.SqlClient;
private void button1_Click(object sender, EventArgs e)
{
//string constr = "initial catalog=Example_1;Server=(local);user id=;passdword=;"; 验证sqlserver登录
string Username = username.Text.Trim();
string Password = password.Text.Trim();
string constr = "initial catalog=Example_1;Server=(local);integrated security=true;"; //声明数据库连接字符串,验证Windows登录
SqlConnection connection = new SqlConnection(constr); //创建数据库连接
connection.Open(); //打开数据库
string Commandtext= "insert into HT_user(username,password)values('" + Username + "','" + Password + "')";
//创建一个字符串来存储sql命令
SqlCommand cmd = new SqlCommand(Commandtext, connection);
//实例化一个sqlCommand对象来执行命令
if (username.Text.Trim() == "")
{
MessageBox.Show("用户名不能为空!");
}
else if (password.Text.Trim() == "")
{
MessageBox.Show("密码输入不正确!");
}
else if (password.Text.Trim() != repassword.Text.Trim())
{
MessageBox.Show("请确认两次密码是否相同!");
}
else
{
cmd.ExecuteNonQuery(); //执行命令对象的SQL语句
MessageBox.Show("注册成功!");
connection.Close();
}
登录账号,代码如下:
这里运用了SQL SELECT 语句和SQL WHERE 子句
private void button1_Click(object sender, EventArgs e)
{
string Username = username.Text.Trim();
string Password = password.Text.Trim();
if (Username.Equals("") || Password.Equals(""))
{
MessageBox.Show("用户名或密码不能为空!");
}
else
{
string constr = "initial catalog=Example_1;Server=(local);integrated security=true;";
SqlConnection connection = new SqlConnection(constr);
connection.Open();
string select = "select * from HT_user where username='" + Username + "'and password='" + Password + "'";
SqlCommand cmd = new SqlCommand(select, connection);
SqlDataReader reader = cmd.ExecuteReader();
if (!reader.Read())
{
MessageBox.Show("该用户不存在!请重新输入账号!");
username.Text = "";
password.Text = "";
}
else if (reader["password"].ToString().Trim() == password.Text.Trim())
{
MessageBox.Show("恭喜你已成功登录", "确认", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
Form3 form3 = new Form3();
this.Hide();
form3.Show();
}
else
{
MessageBox.Show("密码错误!请重新输入!");
username.Text = "";
password.Text = "";
}
}
}
设计困难点2:怎样在同一窗体form里通过点击不同的button实现显示不同的内容? 这里对c#控件的使用和一些实现方法都有着很多的疑问,百度了很多才补全信息差;
解决方案:在主窗体添加一个panel控件(用作其它控件的容器),通过这个容器将我们需要用的控件显示在这个容器里,再通过点击事件实现容器里的内容变化;
代码如下:
private void button1_Click(object sender, EventArgs e)
{
this.panel1.Update(); //刷新重绘无效区域
Form4 form4 = new Form4();
form4.TopLevel = false; //是否将窗体显示为顶层窗体
form4.Dock = DockStyle.Fill; //指定控件填充
this.panel1.Controls.Clear(); //移除在panel里的所有控件
this.panel1.Controls.Add(form4);
form4.Show();
}
可以对主窗体属性和容器显示窗体属性进行修改,达到你想要的展示效果;
上面图片里的数据显示方式我是通过dataGridView控件实现的;后面添加货品,查询订单同样
在form3主窗体里,我设置了首页(查询商品),添加商品,用户(查询订单)3个button,分别通过以上解决方案实现3个button的点击事件显示出的form里的添加,查询操作;
思路:(创建订单表,货品表)
下面是首页(查询购买商品)的实现代码;
private void pictureBox2_Click(object sender, EventArgs e)
{
string Goods = goods.Text.Trim();
string constr= "initial catalog=Example_1;Server=(local);integrated security=true;Data Source=LAPTOP-PJ8B4O4I;";
SqlConnection connection = new SqlConnection(constr);
connection.Open();
string select= "select * from HT_goods where goods='"+Goods+"'";
SqlCommand cmd = new SqlCommand(select, connection);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet dt = new DataSet();
da.Fill(dt); // 数据结果放到dataset中,
int a = dt.Tables[0].Rows.Count;
if (a>0)
{
goods1.Text = dt.Tables[0].Rows[0]["goods"].ToString();//将表1,行1的内容返回给goods1(textbox属性name改名)的text属性;
price.Text = dt.Tables[0].Rows[0]["price"].ToString();
}
else
{
MessageBox.Show("未搜索到该商品!", "确认", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
connection.Close();
}
购买商品结束和创建订单实现代码如下:
public int a;
public float f;
private void button1_Click(object sender, EventArgs e)
{
a = Convert.ToInt32(numericUpDown1.Value.ToString());//这里是创建的numericUpDown控件;
f =Convert.ToInt32(price.Text.ToString()) * a;
if (comboBox1.SelectedIndex == -1)
{
MessageBox.Show("请填写地址!");
}
else
{
total.Text = Convert.ToString(f);
MessageBox.Show("本次购物总共" + f.ToString() + "元"+ "物流指定为xx."+"\n", "将在不久送往" +comboBox1.Text+".");
}
string Goods1 = goods1.Text.Trim();
string Price = price.Text.Trim();
string Num = numericUpDown1.Value.ToString();
string Total = total.Text.Trim();
string Address = comboBox1.Text.ToString();
string constr = "Initial Catalog=Example_1;Integrated Security=True;server=(local)";
SqlConnection connection = new SqlConnection(constr);
connection.Open();
string Commandtext = "insert into HT_users (goods1,price,num,total,address) values('" + Goods1 + "','" + Price + "','" + Num + "','" + Total + "','" + Address + "')";
SqlCommand cmd = new SqlCommand(Commandtext, connection);
cmd.ExecuteNonQuery();
MessageBox.Show("订单已存取!");
connection.Close();
}
后面添加货品和查询订单的实现代码可以通过上面的一系列代码来学习并实现;完成后也可以为该设计添加删除数据的操作(SQL DELETE 语句);在完成设计后最好再对sql进行学习;
使用的控件:
button textbox label
PictureBox
panel (图片里下划线的实现,是通过将panel的size属性宽设为了1);
将窗体的图形分割也是用到了panel的容器设定;
Dategridview
checkbox
numericUpDown