**超市商品信息管理系统**

超市商品信息管理系统
商品信息包括:商品名称、价格、厂商、价格、商品分类(比如:速冻、日货、包装食品、饮料等)
功能要求:
注册功能(账号及密码存入数据库中)
商品信息的录入功能:
商品分类的查询功能:根据商品名称进行查询
商品价格的查询功能:根据商品名称进行查询
商品价格的修改功能
商品的统计功能:商品平均价格、商品种类数。
数据要求:

  1. 掌握和使用SQL Server 2008 Express 设计相关数据库;
  2. 数据库连接方式:请选择本机(或远程)连接方式;
  3. 注:如果自身原因不能使用数据库的,数据可保存在文件或内存数组中,课设成绩等级降一档。
    其他要求:
    界面美观,功能丰富。
    开发平台:VS2010

一.数据库设计
(1).表的设计
1)商品类型表(Wares_type)
名称 类型 约束条件 说明
type_id Int 无重复 类别标识,主键
type_name char(50) 不允许为空 类型名称,不允许重复

2)供货厂商表(Wares_provider)
名称 类型 约束条件 说明
provider_id int 无重复  供货商标识,主键
provider_name char(100) 不允许为空 供货商名称

3)商品信息表(Wares_info)
名称 类型 约束条件 说明
ID int 不允许为空 标识
wares_id int 无重复 商品标识,主键
wares_name Char(100) 不允许为空 商品名称
wares_type int 不允许为空 商品类型标识
provider int 不允许为空 供货厂商标识
setnum int 不允许为空 内含件数
stock int 不允许为空 进货数量
buy_price money 不允许为空 进货价
sell_price money 不允许为空 销售价

4)注册表(People1)
名称 类型 约束条件 说明
men_name char(20) 不允许为空 工牌号,主键
men_password char(20) 不允许为空 登入密码

二.详细设计
(1).程序皮肤
主要实现代码:
this.skinEngine1 = new Sunisoft.IrisSkin.SkinEngine(((System.ComponentModel.Component)(this)));
this.skinEngine1.SkinFile = Application.StartupPath + “//WaveColor2.ssk”;
在之后的每个窗体中都会有该段代码。
(2).主界面的设计
该功能实现较为简单,主要是展示超市的面貌。加入了Timer控件以及控件pictureBox1用于控制图片的切换主要代码如下:
//动态图片
bool flag = false;
private void 首界面_Load(object sender, EventArgs e)
{
pictureBox1.Image = Image.FromFile(@“C:\Users\ff\Desktop\C#课设\超市商品信息管理系统 (1)\超市商品信息管理系统\超市商品信息管理系统\c#_test\timg.jpg”);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
timer1.Interval = 3000;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (flag)
{
pictureBox1.Image = Image.FromFile(@“C:\Users\ff\Desktop\C#课设\超市商品信息管理系统 (1)\超市商品信息管理系统\超市商品信息管理系统\c#_test\timg3.jpg”);
flag = false;
}
else
{
pictureBox1.Image = Image.FromFile(@“C:\Users\ff\Desktop\C#课设\超市商品信息管理系统 (1)\超市商品信息管理系统\超市商品信息管理系统\c#_test\timg1.jpg”);
flag = true;
}
}

(3).登入功能实现
此处用了8个控件,2个TextBox、3个lable控件2个button控件以及1个picturebox控件,在文本框中输入正确的账号点击登入便可进入系统,点击返回可回到上一界面,点击注册,可进行注册。实现代码如下:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == “” || textBox2.Text == “”) //判断是否输入了账号以及密码
{
MessageBox.Show(“提示:请输入用户名和密码!”, “警告”);
return;//未输入则返回
}
SqlConnection mycon = new SqlConnection(); //打开数据库连接
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE ";
mycon.Open();
//定义操作数据库对象
SqlCommand cmd = new SqlCommand(“select * from People1”, mycon);
SqlDataReader reader = cmd.ExecuteReader();
bool flagshow = false ;
string User,Pwd;
while (reader.Read())//从数据库读取用户信息
{
User = reader[“men_name”].ToString() ;
Pwd = reader[“men_password”].ToString();
if (User.Trim() == textBox1.Text & Pwd.Trim() == textBox2.Text)//不区分大小写,且是否存在该用户
{
flagshow = true;
}
}
reader.Close();//查询关闭
mycon.Close();//关闭数据库
if (flagshow == true)//判断该用户是否存在,存在则进入下一个界面
{
主菜单 菜单 = new 主菜单();
菜单.MasterFrom = this;//在登入界面中加入MasterForm属性
菜单.Show();
this.Hide();
}
else
{
MessageBox.Show(“密码或账号错误,请重新输入!!”, “提示”);
textBox1.Text = “”;
textBox2.Text = “”;
return;
}
}

(4).注册功能实现
该页面由3个lable控件,3个TextBox控件,两个button控件组成,在文本框中输入正确的格式的账号,即可完成注册。主要实现代码如下:
private void button1_Click(object sender, EventArgs e)
{
//首先判断TextBox框中是否输入了数据,没有则返回重新输入。
if (textBox1.Text == “” || textBox2.Text == “”)
{
MessageBox.Show(“提示:请输入用户名和密码!”, “警告”);
return; //返回重新输入
}
//确认密码,当前后两次输入的不一致时,返回重新输入。
if (textBox2.Text != textBox3.Text)
{
MessageBox.Show (“两次输入的密码不一致!!!”,“警告”);
textBox3.Text = “”;
textBox2.Text = “”;
return;
}
SqlConnection mycon = new SqlConnection();//打开数据库连接
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE “;
mycon.Open();
//定义操作数据库对象
SqlCommand cmd = new SqlCommand(“select * from People1 where men_name=’” + textBox1.Text.Trim() + " 'and men_password = '” + textBox2.Text.Trim() + “’”, mycon);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
if (sdr.HasRows)//要注册的账号与已经存在的库中的相匹配,存在相同的则注册失败
{
MessageBox.Show(“该用户已注册,请使用其他用户名”, “提示”);
textBox1.Text = “”;
textBox2.Text = “”;
return;
}
else
{
sdr.Close();
string myinsert = “insert into People1 values(’” + textBox1.Text + “’,’” + textBox2.Text + “’)”;
SqlCommand mycom = new SqlCommand(myinsert, mycon);//定义了DBCommand对象并连接数据库
mycom.ExecuteNonQuery(); //执行插入语句
mycon.Close();//关闭数据库
mycon.Dispose();//释放所使用的资源
MessageBox.Show(“您已注册成功!”);
}
}

(5).主菜单
该模块主要用来显示该系统主要具有什么样的功能,给予用户做选择,选择用户需要使用什么功能。主要实现代码如下:
private void button1_Click(object sender, EventArgs e)//商品信息的录入按钮
{
商品信息的录入 录入 = new 商品信息的录入();
录入.MasterForm = this;//在商品信息的录入窗口加入MasterForm属性
录入.Show();
this.Hide();
}
private void button2_Click(object sender, EventArgs e)
{
商品分类的查询 分类 = new 商品分类的查询();
分类.MasterForm = this;
分类.Show();
this.Hide();
}
private void button4_Click(object sender, EventArgs e)
{
商品价格的修改 修改价格 = new 商品价格的修改();
修改价格.MasterForm = this;
修改价格.Show();
this.Hide();
}
private void button5_Click(object sender, EventArgs e)
{
商品统计功能 统计 = new 商品统计功能();
统计.MasterForm = this;
统计.Show();
this.Hide();
}
private void 返回_button6_Click(object sender, EventArgs e)
{
//在登入窗口返回按钮中加入
this.masterFrom.Show();
this.Close();
}
private 登入窗口 masterFrom;//在登入界面中加入MasterForm属性和masterForm字段
public 登入窗口 MasterFrom
{
set { this.masterFrom = value; }
}
private void button3_Click(object sender, EventArgs e)
{
商品类型及供应商添加 添加 = new 商品类型及供应商添加();
添加.MasterForm = this;
添加.Show();
this.Hide();
}
private void button6_Click(object sender, EventArgs e)
{
//结束程序
System.Environment.Exit(0);
}

(6).商品信息的录入功能
此功能模块用来录入商品的信息,由8个lable,6个TextBox,2个combox,2个button,1个dataGridView控件组成,在文本框中输入商品信息,选择好对应的商品类型,供应商,点击确定即可完成对商品信息的录入。主要实现代码如下:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == “” || textBox2.Text == “” || textBox5.Text == “” || textBox6.Text == “”)//判断文本框中是否输入了数据
{
MessageBox.Show(“请录入完整的商品信息!!!”, “警告”);
return;
}
SqlConnection mycon = new SqlConnection();//打开数据库连接
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE ";
mycon.Open();
SqlCommand cmd = new SqlCommand(“select * from Wares_info where wares_id=’” + textBox1.Text.Trim() + “’”, mycon);//定义操作数据库对象
cmd.Connection = mycon;
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();//读取一条记录
if (sdr.HasRows)
{
MessageBox.Show(“该用商品以录入完成,请录入其他商品”, “提示”);
textBox1.Text = “”;
return;
}
else
{
//DataReader为在线操作数据,DataReader会一直占用SQL Connection连接所以需要关闭
sdr.Close();
string sql = string.Format(@“insert into Wares_info values(’{0}’,’{1}’,’{2}’,’{3}’,’{4}’,’{5}’,’{6}’,’{7}’)”, textBox1.Text.Trim(), textBox2.Text.Trim(),comboBox1.SelectedIndex + 1,comboBox2.SelectedIndex + 1, textBox5.Text.Trim(), textBox6.Text.Trim(), textBox7.Text.Trim(), textBox8.Text.Trim());
textBox1.Text = “”;
textBox2.Text = “”;
comboBox1.Text = “”;
comboBox2.Text = “”;
textBox5.Text = “”;
textBox6.Text = “”;
textBox7.Text = “”;
textBox8.Text = “”;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();//执行sql语句
//创建sqlDataAdapter对象s
SqlDataAdapter s = new SqlDataAdapter(@"select
wares_id as ‘商品标识’,wares_name as ‘商品名称’ ,Waers_type.type_name as ‘商品类型’, Wares_provider .provider_name as ‘商品供应商’ ,
setnum as’内含数量’ ,stock as ‘库存’ ,sell_price as ‘进货价格’,buy_price as ‘销售价格’ from Wares_info join Waers_type on Wares_info .wares_type = Waers_type.type_id
join Wares_provider on Wares_info .provider = Wares_provider .provider_id ", mycon);
DataSet d = new DataSet();//创建DataSet对象d
s.Fill(d, “t”);//使用fill方法填充DataSet
dataGridView1.DataSource = d.Tables[“t”];//在DataGridView1控件中显示t
mycon.Close();
}
}

(7).商品统计功能
此功能用来统计商品的种类数量,以及每类商品的平均价格。点击combox控件及可显示数据。主要实现代码如下:
private void comboBox1_Click(object sender, EventArgs e)
{
SqlConnection mycon = new SqlConnection(); //打开数据库连接
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE ";
mycon.Open();
//定义操作数据库对象,获取数据适配器
SqlDataAdapter adq = new SqlDataAdapter("select type_name as ‘商品类型’ ,avg_money as ‘平均价格’ from Waers_type left join(select wares_type ,AVG(sell_price) as avg_money from Wares_info group by wares_type ) as tt on tt.wares_type = Waers_type .type_id ", mycon);
DataTable IvTable = new DataTable(); //声明一个内存表DataTable
adq.Fill(IvTable);//填充DataTable
comboBox1.DataSource = IvTable;
comboBox1.ValueMember = “商品类型”;// 控件值的列名
comboBox1.DisplayMember = “type_name”; //控件显示的列名
dataGridView1.DataSource = IvTable;
mycon.Close(); //断开连接
}

(8).商品价格修改及删除
该页面由2个lable,2个TextBox,3个button,1个dataGridView控件组成,首先进入页面会直接显示存在的商品,这便于用户能够直观的选择自己要修改的商品或要删除的商品。主要实现代码如下:
private void button1_Click(object sender, EventArgs e)
{
if (textBox2 .Text == “” && textBox1 .Text =="")
{
MessageBox.Show(“请输入修改的数据!!!”, “警告”);
return;
}
SqlConnection mycon = new SqlConnection(); //打开数据库连接
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE ";
mycon.Open();
SqlCommand selectCMD = new SqlCommand(); //定义操作数据库对象
selectCMD.Connection = mycon;
selectCMD.CommandText = string.Format(“UPDATE Wares_info SET buy_price = ‘{0}’ WHERE wares_name=’{1}’”, textBox2.Text, textBox1.Text);
selectCMD.ExecuteNonQuery();
MessageBox.Show(“修改成功 !”);
//显示修改后的商品价格及商品名称//创建sqlDataAdapter对象s
string sql = string.Format(“select wares_id as ‘商品标识’,wares_name as ‘商品名称’,buy_price as ‘商品单价’ from Wares_info where wares_name=’{0}’”, textBox1.Text);
SqlDataAdapter s = new SqlDataAdapter(sql , mycon);
DataSet d = new DataSet(); //创建DataSet对象d
s.Fill(d, “t”);//使用fill方法填充DataSet
dataGridView1.DataSource = d.Tables[“t”];//在DataGridView1控件中显示t
mycon.Close();
}
private void button2_Click(object sender, EventArgs e)
{
if (textBox1.Text == “”)//判断文本框中是否输入数据
{
MessageBox.Show(“请输入要删除的商品!!!”, “警告”);
return;
}
SqlConnection mycon = new SqlConnection(); //连接数据库
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE ";
mycon.Open();
SqlCommand selectCMD = new SqlCommand();
selectCMD.Connection = mycon;
selectCMD.CommandText = string.Format(“DELETE FROM Wares_info WHERE wares_id=’{0}’”, textBox1.Text);
selectCMD.ExecuteNonQuery();
MessageBox.Show(“删除成功 !”);
//显示修改后的商品价格及商品名称
//创建sqlDataAdapter对象s
SqlDataAdapter s = new SqlDataAdapter(“select wares_id as ‘商品标识’,wares_name as ‘商品名称’,buy_price as’商品单价’ from Wares_info”, mycon);
DataSet d = new DataSet(); //创建DataSet对象d
s.Fill(d, “t”);//使用fill方法填充DataSet
dataGridView1.DataSource = d.Tables[“t”]; //在DataGridView1控件中显示t
mycon.Close();
}

(9)商品的查询
此界面实现的为商品信息的查询,主要有按商品类型进行查询以及按价格区间进行查询,主要实现代码如下:
private void button2_Click(object sender, EventArgs e)//查询按钮
{
if (textBox1.Text == “”) //判断文本框中是否输入数据
{
MessageBox.Show(“请输入要查询的商品!!!”, “警告”);
return;
}
SqlConnection mycon = new SqlConnection();//打开数据库连接
mycon.ConnectionString = “Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE “;
mycon.Open();
string sql = string.Format(” select wares_id as ‘商品标识’,wares_name as ‘商品名字’,buy_price as ‘商品进价’ from Wares_info where buy_price > {0} and buy_price < {1}”, textBox1 .Text,textBox3 .Text );
SqlDataAdapter adq = new SqlDataAdapter(sql, mycon);
DataTable IvTable1 = new DataTable();//声明一个DataTable
adq.Fill(IvTable1); //将查询到的数据存入到内存表
dataGridView1.DataSource = IvTable1; //在dataGridView1中显示数据
mycon.Close();
}
private void button3_Click(object sender, EventArgs e) //确定按钮
{
if (comboBox1 .Text == “”) //判断组合框中是否输入数据
{
MessageBox.Show(“请选择要查询的类别!!!”, “警告”);
return;
}
SqlConnection mycon = new SqlConnection();//打开数据库连接
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE ";
mycon.Open();
string sql = string.Format(“select wares_id as ‘商品标识’,wares_name as ‘商品名字’,Waers_type .type_name as ‘商品类型’ from Wares_info left join Waers_type on Wares_info.wares_type = Waers_type .type_id where Wares_info .wares_type = {0}”, comboBox1.SelectedIndex+1 );
SqlDataAdapter adq = new SqlDataAdapter(sql, mycon);
DataTable IvTable1 = new DataTable();
adq.Fill(IvTable1);
dataGridView1.DataSource = IvTable1;//在dataGridView1中显示数据
mycon.Close();
}
private void comboBox1_Click(object sender, EventArgs e)
{
SqlConnection mycon = new SqlConnection(); //打开数据库连接
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE ";
mycon.Open();
//定义操作数据库对象,获取数据适配器
SqlDataAdapter adq = new SqlDataAdapter(“select * from Waers_type”, mycon);
DataTable IvTable = new DataTable();//声明一个内存表DataTable
adq.Fill(IvTable);//填充DataTable
comboBox1.DataSource = IvTable;
comboBox1.ValueMember = “type_name”;//控件值的列名
comboBox1.DisplayMember = “type_name”;//控件显示的列名
mycon.Close();//断开连接
}

(10)商品类型以及供应商的添加
此页面是为了实现商品类别的增加与删除,以及供应商的增加与删除,当删除了对应的商品类别或者供应商,与其对应的商品也会删除,请谨慎使用该删除功能。主要实现代码如下:
private void button2_Click(object sender, EventArgs e)
{
if (textBox1.Text == “” || textBox2.Text == “”)
{//首先判断TextBox框中是否输入了数据,没有则返回重新输入。
MessageBox.Show(“提示:请输入要添加的数据!!!”, “警告”);
return; //返回重新输入
}
SqlConnection mycon = new SqlConnection();//打开数据库连接
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE “;
mycon.Open();
//定义操作数据库对象
SqlCommand cmd = new SqlCommand(“select * from Waers_type where type_id=’” + textBox1.Text.Trim() + " 'and type_name = '” + textBox2.Text.Trim() + “’”, mycon);
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
if (sdr.HasRows)
{
MessageBox.Show(“该商品类型已经录入过,请录入它的类型商品!!”, “提示”);
textBox1.Text = “”;
textBox2.Text = “”;
return;
}
else
{
sdr.Close();
string myinsert = “insert into Waers_type values(’” + textBox1.Text + “’,’” + textBox2.Text + “’)”;
SqlCommand mycom = new SqlCommand(myinsert, mycon);//定义了DBCommand对象并连接数据库
mycom.ExecuteNonQuery(); //执行插入语句
//创建sqlDataAdapter对象s
SqlDataAdapter s = new SqlDataAdapter(“select * from Waers_type”, mycon);
DataSet d = new DataSet();//创建DataSet对象d
s.Fill(d, “t”);//使用fill方法填充DataSet
dataGridView1.DataSource = d.Tables[“t”];//在DataGridView1控件中显示t
mycon.Close();//关闭数据库
mycon.Dispose();//释放所使用的资源
MessageBox.Show(“您已录入完成!”);
}
}
private void button3_Click(object sender, EventArgs e)
{
if (textBox3.Text == “” || textBox4.Text == “”)
{ //首先判断TextBox框中是否输入了数据,没有则返回重新输入。
MessageBox.Show(“提示:请输入要添加的数据!!!”, “警告”);
return; //返回重新输入
}
SqlConnection mycon = new SqlConnection();//打开数据库连接
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE “;
mycon.Open();
SqlCommand cmd = new SqlCommand(“select * from Wares_provider where provider_id=’” + textBox3.Text.Trim() + " 'and provider_name = '” + textBox4.Text.Trim() + “’”, mycon);//定义操作数据库对象
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
if (sdr.HasRows)
{
MessageBox.Show(“该公司已存在,请录入其它公司!!”, “提示”);
textBox3.Text = “”;
textBox4.Text = “”;
return;
}
else
{
sdr.Close();
string myinsert = “insert into Wares_provider values(’” + textBox3.Text + “’,’” + textBox4.Text + “’)”;
SqlCommand mycom = new SqlCommand(myinsert, mycon);//定义了DBCommand对象并连接数据库
mycom.ExecuteNonQuery(); //执行插入语句
SqlDataAdapter s = new SqlDataAdapter(“select * from Wares_provider”, mycon);//创建sqlDataAdapter对象s
DataSet d = new DataSet();//创建DataSet对象d
s.Fill(d, “t”);//使用fill方法填充DataSet
dataGridView2.DataSource = d.Tables[“t”];//在DataGridView1控件中显示t
mycon.Close();//关闭数据库
mycon.Dispose();//释放所使用的资源
MessageBox.Show(“您已录入完成!”);
}
}
private void button4_Click(object sender, EventArgs e)
{
if (textBox5.Text == “”)
{
MessageBox.Show(“请输入要删除的商品!!!”, “警告”);
return;
}
SqlConnection mycon = new SqlConnection();
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE ";
mycon.Open();
SqlCommand selectCMD = new SqlCommand();
selectCMD.Connection = mycon;
selectCMD.CommandText = string.Format(“DELETE FROM Waers_type WHERE type_name=’{0}’”, textBox5.Text);
selectCMD.ExecuteNonQuery();
//显示修改后的商品价格及商品名称,创建sqlDataAdapter对象s
SqlDataAdapter s = new SqlDataAdapter(“select * from Waers_type”, mycon);
DataSet d = new DataSet(); //创建DataSet对象d
s.Fill(d, “t”);//使用fill方法填充DataSet
dataGridView1.DataSource = d.Tables[“t”];//在DataGridView1控件中显示t
textBox5.Text = “”;
mycon.Close();
}
private void button5_Click(object sender, EventArgs e)
{
if (textBox6.Text == “”)
{
MessageBox.Show(“请输入要删除的商品!!!”, “警告”);
return;
}
SqlConnection mycon = new SqlConnection();
mycon.ConnectionString = "Persist Security Info = False; User id = sa; pwd = 123456; database = Supermarket_Management_System;server =DESKTOP-MPIR1CE ";
mycon.Open();
SqlCommand selectCMD = new SqlCommand();
selectCMD.Connection = mycon;
selectCMD.CommandText = string.Format(“DELETE FROM Wares_provider WHERE provider_name=’{0}’”, textBox6.Text);
selectCMD.ExecuteNonQuery();
// MessageBox.Show(“删除成功 !”);

       //显示修改后的商品价格及商品名称,创建sqlDataAdapter对象s
        SqlDataAdapter s = new SqlDataAdapter("select * from Wares_provider", mycon);
        DataSet d = new DataSet();//创建DataSet对象d
        s.Fill(d, "t"); //使用fill方法填充DataSet
        dataGridView2.DataSource = d.Tables["t"]; //在DataGridView1控件中显示t
        textBox6.Text = "";
        mycon.Close();
    }
  • 4
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值