超市管理系统``
南风超市管理系统
制作成员:丁超,郭盛传,蒋东玲,徐家尧
我们是湖南工程职业技术学院的学生,改项目为大一阶段末项目答辩项目
本项目主要分为三大模块,登录注册页面,前台销售和积分兑换,后台人员管理
1.登入注册界面
本界面可实现管理员和收银员的登录,以及收银员的注册(PS:管理员只能数据库中自己添加)
下面为收银员界面的展示
收银员登入成功后进行图片验证
(登入成功后拖拽图片成功即可进入主界面)
实现登录部分代码展示如下
public void Button1_Click(object sender, EventArgs e)
{
//定义并储存用户名及密码
string name = textBox1.Text.Trim();
string passward = textBox2.Text.Trim();
//链接数据库
string password = textBox2.Text.Trim();
if (comboBox1.Text=="")
{
MessageBox.Show("请输入登录方式");
}
else if (name==""||passward=="")
{
MessageBox.Show("账号密码不能为空","提示");
}
else if (comboBox1.Text == "收银员")
{
string connstring = "server=.;database=commodity;user=sa;pwd=123456";
ds = DBHelper.GetDataSet(sql);
int a = ds.Tables[0].Rows.Count;
//跳出图片验证,隐藏按钮
if (a>0)
{
UserNamecs.UserName = textBox1.Text;
panel1.Show();
label5.Show();
button1.Hide();
button2.Hide();
comboBox1.Hide();
textBox1.Hide();
textBox2.Hide();
}
else
{
MessageBox.Show("用户的账号密码不正确,请重新输入!", "提示");
}
}
//图片验证思路
两控件
panel 和picturebox
使用PS进行关键部分抠图,裁剪
对裁剪图片放入picturebox,被裁图片放入panel中,拖动pictbox到panel中指定位置区间实现验证成功,并跳转
关键代码如下
bool isMouseDown = false;
System.Drawing.Point p1 = new System.Drawing.Point();
System.Drawing.Point p2 = new System.Drawing.Point();
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
isMouseDown = true;
p1 = PointToClient(Control.MousePosition);//记录鼠标坐标
p2 = pictureBox1.Location; //记录图片坐标
}
private void pictureBox1_MouseMove_1(object sender, MouseEventArgs e)
{
//鼠标坐标的相对改变值
int a = PointToClient(Control.MousePosition).X - p1.X;
int b = PointToClient(Control.MousePosition).Y - p1.Y;
//图片坐标计算&赋值
if (isMouseDown)
pictureBox1.Location = new System.Drawing.Point(p2.X + a, p2.Y + b);//图片新的坐标 = 图片起始坐标 + 鼠标相对位移
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
int a = pictureBox1.Location.X;
int b = pictureBox1.Location.Y;
if ((a == 50 && b == 25) || (a == 51 && b == 25) || (a == 50 && b == 24) || (a == 49 && b == 25))
{
MessageBox.Show("成功");
Main form2 = new Main();
this.Hide();
form2.ShowDialog();
Application.Exit();
}
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
int a = pictureBox1.Location.X;
int b = pictureBox1.Location.Y;
if ((a == 50 && b == 25) || (a == 51 && b == 25) || (a == 50 && b == 24) || (a == 49 && b == 25))
{
MessageBox.Show("成功");
Main form2 = new Main();
this.Hide();
form2.ShowDialog();
Application.Exit();
}
}
收银员注册界面
验证码的实现代码
public class ValidCode
{
#region Private Fields
private const double PI = 3.1415926535897932384626433832795;
private const double PI2 = 6.283185307179586476925286766559;
//private readonly int _wordsLen = 4;
private int _len;
private CodeType _codetype;
private readonly Single _jianju = (float)18.0;
private readonly Single _height = (float)24.0;
private string _checkCode;
#endregion
#region Public Property
public string CheckCode
{
get
{
return _checkCode;
}
}
#endregion
#region Constructors
/// <summary>
/// public constructors
/// </summary>
/// <param name="len"> 验证码长度 </param>
/// <param name="ctype"> 验证码类型:字母、数字、字母+ 数字 </param>
public ValidCode(int len, CodeType ctype)
{
this._len = len;
this._codetype = ctype;
}
#endregion
#region Public Field
public enum CodeType { Words, Numbers, Characters, Alphas }
#endregion
#region Private Methods
private string GenerateNumbers()
{
string strOut = "";
System.Random random = new Random();
for (int i = 0; i < _len; i++)
{
string num = Convert.ToString(random.Next(10000) % 10);
strOut += num;
}
return strOut.Trim();
}
private string GenerateCharacters()
{
string strOut = "";
System.Random random = new Random();
for (int i = 0; i < _len; i++)
{
string num = Convert.ToString((char)(65 + random.Next(10000) % 26));
strOut += num;
}
return strOut.Trim();
}
//
private string GenerateAlphas()
{
string strOut = "";
string num = "";
System.Random random = new Random();
for (int i = 0; i < _len; i++)
{
if (random.Next(500) % 2 == 0)
{
num = Convert.ToString(random.Next(10000) % 10);
}
else
{
num = Convert.ToString((char)(65 + random.Next(10000) % 26));
}
strOut += num;
}
return strOut.Trim();
}
private System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)
{
System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height);
// 将位图背景填充为白色
System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);
graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, destBmp.Width, destBmp.Height);
graph.Dispose();
double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width;
for (int i = 0; i < destBmp.Width; i++)
{
for (int j = 0; j < destBmp.Height; j++)
{
double dx = 0;
dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;
dx += dPhase;
double dy = Math.Sin(dx);
// 取得当前点的颜色
int nOldX = 0, nOldY = 0;
nOldX = bXDir ? i + (int)(dy * dMultValue) : i;
nOldY = bXDir ? j : j + (int)(dy * dMultValue);
System.Drawing.Color color = srcBmp.GetPixel(i, j);
if (nOldX >= 0 && nOldX < destBmp.Width
&& nOldY >= 0 && nOldY < destBmp.Height)
{
destBmp.SetPixel(nOldX, nOldY, color);
}
}
}
return destBmp;
}
#endregion
#region Public Methods
public Stream CreateCheckCodeImage()
{
string checkCode;
switch (_codetype)
{
case CodeType.Alphas:
checkCode = GenerateAlphas();
break;
case CodeType.Numbers:
checkCode = GenerateNumbers();
break;
case CodeType.Characters:
checkCode = GenerateCharacters();
break;
default:
checkCode = GenerateAlphas();
break;
}
this._checkCode = checkCode;
MemoryStream ms = null;
//
if (checkCode == null || checkCode.Trim() == String.Empty)
return null;
Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * _jianju)), (int)_height);
Graphics g = Graphics.FromImage(image);
try
{
Random random = new Random();
g.Clear(Color.White);
// 画图片的背景噪音线
for (int i = 0; i < 18; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.FromArgb(random.Next()), 1), x1, y1, x2, y2);
}
Font font = new System.Drawing.Font("Times New Roman", 14, System.Drawing.FontStyle.Bold);
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
if (_codetype != CodeType.Words)
{
for (int i = 0; i < checkCode.Length; i++)
{
g.DrawString(checkCode.Substring(i, 1), font, brush, 2 + i * _jianju, 1);
}
}
else
{
g.DrawString(checkCode, font, brush, 2, 2);
}
// 画图片的前景噪音点
for (int i = 0; i < 150; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
// 画图片的波形滤镜效果
if (_codetype != CodeType.Words)
{
image = TwistImage(image, true, 3, 1);
}
// 画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
}
finally
{
g.Dispose();
image.Dispose();
}
return ms;
}
#endregion
}
}
下面为验证码的判断
if (!this.txtValidCode.Text.Equals(validCode.CheckCode))//验证是否输入正确
{
MessageBox.Show(" 请输入正确的验证码!", this.Text);
this.txtValidCode.Focus();
this.txtValidCode.Text = "";
return;
}
验证码的点击切换
private void picValidCode_Click(object sender, EventArgs e)
{
picValidCode.Image = Bitmap.FromStream(validCode.CreateCheckCodeImage());//点击图片更换验证码
}
下面为管理员界面的展示
该界面的主要功能有对收银人员的添加和查看以及删除
(主要功能不一一展示,直接上图)
销售请款曲线图代码如下
public class GraphEdit
{
/// <summary>
/// 画板宽度
/// </summary>
public int BoardWidth { get; set; }
/// <summary>
/// 画板高度
/// </summary>
public int BoardHeight { get; set; }
/// <summary>
/// 画板背景颜色
/// </summary>
public Color BoardColor { get; set; }
/// <summary>
/// 画图区域颜色
/// </summary>
public Color AreasColor { get; set; }
/// <summary>
/// 曲线图颜色
/// </summary>
public Color GraphColor { get; set; }
/// <summary>
/// 坐标轴颜色
/// </summary>
public Color AxisColor { get; set; }
/// <summary>
/// 刻度线颜色
/// </summary>
public Color ScaleColor { get; set; }
/// <summary>
/// 当前绘制的图
/// </summary>
public Bitmap CurrentImage { get; set; }
/// <summary>
/// 垂直(纵向)边距(画图区域距离左右两边长度)
/// </summary>
public int VerticalMargin { get; set; }
/// <summary>
/// 平行(横向)边距(画图区域距离左右两边长度)
/// </summary>
public int HorizontalMargin { get; set; }
public int YScaleCount { get; set; }
public GraphEdit(int width, int height, Color boradColor)
{
this.BoardWidth = width;
this.BoardHeight = height;
this.BoardColor = boradColor;
//默认值
this.XScaleCount = 12;
this.YScaleCount = 5;
}
/// <summary>
/// 获得当前数据画出的曲线面积图
/// </summary>
/// <param name="data">需要绘制的数据</param>
/// <param name="xRange">X轴范围(data数据里面的实际范围)</param>
/// <param name="yRange">Y轴范围(data数据里面的实际范围)</param>
/// <param name="isFill">是否需要面积填充</param>
/// <returns>当前的曲线面积图</returns>
public Image GetCurrentGraph(List<Point> data, float xRange, float yRange, bool isFill)
{
CurrentImage = new Bitmap(BoardWidth, BoardHeight);
Graphics g = Graphics.FromImage(CurrentImage);
g.SmoothingMode = SmoothingMode.AntiAlias; //反锯齿
g.Clear(BoardColor);
//1.确定曲线图区域
int iAreaWidth = BoardWidth - 2 * HorizontalMargin; //画图区域宽度
int iAreaHeight = BoardHeight - 2 * VerticalMargin; //画图区域高度
Point pAreaStart = new Point(HorizontalMargin, VerticalMargin); //画图区域起点
Point pAreaEnd = new Point(BoardWidth - HorizontalMargin, BoardHeight - VerticalMargin); //画图区域终点
Point pOrigin = new Point(HorizontalMargin, BoardHeight - VerticalMargin); //原点
Rectangle rectArea = new Rectangle(pAreaStart, new Size(iAreaWidth, iAreaHeight));
SolidBrush sbAreaBG = new SolidBrush(AreasColor);
g.FillRectangle(sbAreaBG, rectArea);
sbAreaBG.Dispose();
//2.确定坐标轴
Pen penAxis = new Pen(AxisColor, 5);
penAxis.EndCap = LineCap.ArrowAnchor;
g.DrawLine(penAxis, pOrigin, new Point(pAreaStart.X, pAreaStart.Y - VerticalMargin / 2));
g.DrawLine(penAxis, pOrigin, new Point(pAreaEnd.X + HorizontalMargin / 2, pAreaEnd.Y));
penAxis.Dispose();
//3.确定刻度线和标签
Pen penScale = new Pen(ScaleColor, 1);
int fontSize = 8;
for (int i = 0; i <= XScaleCount; i++)
{
int x = i * (iAreaWidth / XScaleCount) + pAreaStart.X;
g.DrawLine(penScale, x, pAreaStart.Y, x, pAreaEnd.Y);
string lbl = (i * (xRange / XScaleCount)).ToString();
if (xRange == 30) //如果按照一天分钟时间显示
lbl = (i * (xRange / XScaleCount) / 1).ToString();
if (i != 0)
{ g.DrawString(lbl, new Font("微软雅黑", fontSize, FontStyle.Regular), new SolidBrush(AxisColor), new Point(x - fontSize, pAreaEnd.Y + VerticalMargin / 9)); }
}
for (int i = 0; i <= YScaleCount; i++)
{
int y = pAreaEnd.Y - (i * (iAreaHeight / YScaleCount));
g.DrawLine(penScale, pAreaStart.X, y, pAreaEnd.X, y);
string lbl = (i * (yRange / YScaleCount)).ToString();
g.DrawString(lbl, new Font("微软雅黑", fontSize, FontStyle.Regular), new SolidBrush(AxisColor), new Point(pAreaStart.X - (fontSize * lbl.Length) - HorizontalMargin / 9, y - fontSize / 2));
//4.画曲线面积
//4.1得到数据
//4.2数据排序 :为了能顺序画出图,需要对X轴上的数据进行排序 冒泡排序
List<Point> listPointData = SortingData(data);
//4.3.数据转换:将实际的数据转换到图上的点
List<Point> listPointGraphics = new List<Point>();//图上的点
foreach (Point point in listPointData)
{
Point p = new Point();
p.X = pAreaStart.X + Convert.ToInt32((iAreaWidth / xRange) * point.X); //120为实际值的取值范围0-120
p.Y = pAreaStart.Y + (iAreaHeight - Convert.ToInt32((iAreaHeight / yRange) * point.Y)); //1000为实际值取值范围0-1000
listPointGraphics.Add(p);
}
//4.3将点的集合加入到画曲线图的路径中
GraphicsPath gpArea = new GraphicsPath();
//第一个点 //起点要从X轴上开始画 结束点也要画回X轴:即在开始点和结束点要多画一次原点的Y
//gpArea.AddLine(new Point(listPointGraphics[0].X, pOrigin.Y), listPointGraphics[0]);
//中间点
for (int i = 0; i < listPointGraphics.Count - 1; i++) //注意:超出数组界限时,编译器不会出错
{
gpArea.AddLine(listPointGraphics[i], listPointGraphics[i + 1]);
}
//最后一个点
//gpArea.AddLine(listPointGraphics[listPointGraphics.Count - 1], new Point(listPointGraphics[listPointGraphics.Count - 1].X, pOrigin.Y));
SolidBrush brush = new SolidBrush(GraphColor);//定义单色画刷
if (isFill)
{
g.FillPath(brush, gpArea); //填充
}
else
{
g.DrawPath(new Pen(GraphColor, 5), gpArea); //边缘
}
gpArea.CloseFigure(); //是否封闭
return CurrentImage;
}
/// <summary>
/// 数据排序
/// </summary>
/// <param name="lp"></param>
/// <returns></returns>
private List<Point> SortingData(List<Point> lp)
{
for (int i = 0; i < lp.Count - 1; i++)
{
for (int j = 0; j < lp.Count - 1 - i; j++)// j开始等于0,
{
if (lp[j].X > lp[j + 1].X)
{
Point temp = lp[j];
lp[j] = lp[j + 1];
lp[j + 1] = temp;
}
}
}
return lp;
}
}
GraphEdit graphEdit;
Color boardColor = Color.FromArgb(17, 81, 138);//指定绘制图的背景色
Thread toUpdate; //刷新线程
private void LoadingUI()
{
graphEdit = new GraphEdit(640, 350, boardColor);
graphEdit.HorizontalMargin = 50; //横水平边距
graphEdit.VerticalMargin = 80; //竖垂直边距
graphEdit.AreasColor = Color.FromArgb(100, 0, 0, 0); //画图区域颜色
graphEdit.GraphColor = Color.FromArgb(255, 110, 176); //曲线面积颜色
graphEdit.AxisColor = Color.FromArgb(255, 255, 255); //坐标轴颜色
graphEdit.ScaleColor = Color.FromArgb(20, 255, 255, 255); //刻度线颜色
graphEdit.XScaleCount = 30; //X轴刻度线数量
graphEdit.YScaleCount = 10; //Y轴刻度线数量
toUpdate = new Thread(new ThreadStart(Run));
toUpdate.Start();
}
private void Run()
{
while (true)
{
Image image = graphEdit.GetCurrentGraph(this.GetBaseData(), XRange, YRange, false); // 如果是面积曲线图将最后一个参数设为true
Graphics g = this.CreateGraphics(); //指定使用那个控件来接受曲线图
g.DrawImage(image, 0, 0);
g.Dispose();
Thread.Sleep(5000); //每2秒钟刷新一次
}
}
float XRange = 30; //X轴最大范围(0-1440)
float YRange = 10000; //Y轴最大范围(0-500)
/// <summary>
/// 得到(数据库)数据
/// </summary>
/// <returns></returns>
private List<Point> GetBaseData()
{
Random r = new Random();
List<Point> result = new List<Point>(); //数据
DataSet das = new DataSet();
string sqls = "select * from xiaostime";
das = DBHelper.GetDataSet(sqls);
int ao = das.Tables[0].Rows.Count;
for (int i = 0; i <ao-1; i++)
{
Point p;
string sql = "select money from xiaostime where DATEDIFF(DD,time,GETDATE()-" + i + ")=0";
object o = DBHelper.ExecuteScalar(sql);
int oo = Convert.ToInt32(o);
if (i > 0)
p = new Point(i + 2, oo);
else
p = new Point(i+1, oo);
result.Add(p);
}
return result;
}
private void Form1_FormClosing_1(object sender, FormClosingEventArgs e)
{
try
{
toUpdate.Abort();
}
catch (Exception)
{
Environment.Exit(0);
}
}
接下来为收银员登入的主界面
该界面包括对商品的添加,库存的查看,提醒查询,炒作人员,营业报表,前台销售,换班系统,以及积分商品的兑换
(主要展示前台销售)
前台销售
前台销售部分可先根据关键字或者商品编号进行查询,点击表中商品获取商品编号,名称,价格,输入购买数量加入下面的购物车。共计金钱会随着商品的添加而不断变化
最后可进行会员的判断,如果是会员进行95折进行打折。
实收金额要大于共计金额,否则支付失败
销售成功后会添加到销售报表之中并可以打印小票
(实现功能如下图)
(PS:营业报表产生数据)
代码展示
1.获取商品信息
try
{
this.shoppingid_tb.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
this.name_tb.Text = dataGridView1.Rows[e.RowIndex].Cells["name"].Value.ToString();
this.price_tb.Text = dataGridView1.Rows[e.RowIndex].Cells["price"].Value.ToString();
}
catch (Exception)
{
MessageBox.Show("不能这么操作","提示");
}
2.添加商品进入购物车
try
{
int much = int.Parse(dataGridView1.SelectedRows[0].Cells["much"].Value.ToString());
int shulian = Convert.ToInt32(shuliang_tb.Text);
if (much > shulian)
{
DataSet sa = new DataSet();
string sqlcheck = "select * from saleInfo where shoppingid='" + shoppingid_tb.Text + "'";
sa = DBHelper.GetDataSet(sqlcheck);
int f = sa.Tables[0].Rows.Count;
if (f > 0)
{
string sqlupdate = "update saleInfo set number=number+'" + shulian + "'where shoppingid='" + shoppingid_tb.Text + "'";
DBHelper.ExecuteNonQuery(sqlupdate);
string sqlstr1 = "select SUM(price * number) from saleInfo ";
//更新应付金额
object o = DBHelper.ExecuteScalar(sqlstr1);
taotol_tb.Text = o.ToString();
DataSet ds = new DataSet();
string sql = "select * from saleInfo";
ds = DBHelper.GetDataSet(sql);
dataGridView2.AutoGenerateColumns = false;
dataGridView2.DataSource = ds.Tables[0];
}
else
{
string number = shoppingid_tb.Text.Trim();
string sqlstr = "insert into saleInfo values('" + number + "','" + name_tb.Text + "','" + shuliang_tb.Text + "','" + price_tb.Text + "','" + much + "')";
bool a = DBHelper.ExecuteNonQuery(sqlstr);
if (a == true)
{
string sqlstr1 = "select SUM(price * number) from saleInfo ";
//更新应付金额
object o = DBHelper.ExecuteScalar(sqlstr1);
double oo = Convert.ToDouble(o);
taotol_tb.Text = o.ToString();
DataSet ds = new DataSet();
string sql = "select * from saleInfo";
ds = DBHelper.GetDataSet(sql);
dataGridView2.AutoGenerateColumns = false;
dataGridView2.DataSource = ds.Tables[0];
}
else
{
MessageBox.Show("添加失败", "提示");
}
}
}
else
{
MessageBox.Show("库存不足,请补货", "提示");
}
}
catch (Exception)
{
MessageBox.Show("不能这样操作");
}
3.消费金额判断,减少库存,增加积分,打印小票等
private void button3_Click(object sender, EventArgs e)
{
//判断余额
double s = double.Parse(shishou_tb.Text.ToString());
double y = double.Parse(taotol_tb.Text.ToString());
try
{
if (s < y)
{
MessageBox.Show("余额不足", "提示");
}
else
{
double a = s - y;
MessageBox.Show("支付成功,找回" + a + "元", "提示");
//打印小票
string info = null;
for (int i = 0; i < dataGridView2.Rows.Count - 1; i++)
{
string nb1 = dataGridView2.Rows[i].Cells[1].Value.ToString();
string nb2 = dataGridView2.Rows[i].Cells[2].Value.ToString();
string nb3 = dataGridView2.Rows[i].Cells[3].Value.ToString();
info += "南风超市"+"\r\n商品编号:" + nb1 + "\r\n商品名称:" + nb2 + "\r\n购买数量:" + nb3;
}
info += "\r\n\r\n经办人:" + UserNamecs.UserName + "\r\n实付金额:" + s + "\r\n应付金额:" + y + "\r\n找回:" + a;
Random re = new Random();
using (StreamWriter st = new StreamWriter(@"F:\小票\小票:" + re.Next(1, 10000) + ".txt", false, Encoding.UTF8))
{
st.Write(info);
st.Flush();
}
//统计积分
string sqljifen = "UPDATE customer set customer.jifen=a.jifen+" + y + " from customer a,saleexcel b where a.tel='" + textBox3.Text + "'";
bool sdd = DBHelper.ExecuteNonQuery(sqljifen);
//统计累计消费
string leiji = "UPDATE customer set customer.shopping=a.shopping+" + y + " from customer a,saleexcel b where a.tel='" + textBox3.Text + "'";
DBHelper.ExecuteNonQuery(leiji);
//日销售表
//查
DataSet dataSet = new DataSet();
string saql = "select * from xiaostime where DATEDIFF(DD,time,GETDATE())=0";
dataSet = DBHelper.GetDataSet(saql);
int ss = dataSet.Tables[0].Rows.Count;
if (ss > 0)
{
//修改
string sqlud = "update xiaostime set money=money+'" + y + "'where DATEDIFF(DD,time,GETDATE())=0";
DBHelper.ExecuteNonQuery(sqlud);
}
else
{
//添加
string sqlck = "insert into xiaostime values(GETDATE(),'" + y + "')";
DBHelper.ExecuteNonQuery(sqlck);
}
//工资
DataSet dmoney = new DataSet();
string sqlmoney = "select * from gz where name='" + UserNamecs.UserName + "'";
dmoney = DBHelper.GetDataSet(sqlmoney);
int qian = dmoney.Tables[0].Rows.Count;
if (qian > 0)
{
string qiangai = "update gz set tic =tic+'" + y / 10 + "' where name='" + UserNamecs.UserName + "'";
DBHelper.ExecuteNonQuery(qiangai);
string qia = "update gz set zon=tic+money";
DBHelper.ExecuteNonQuery(qia);
}
else
{
string qiana = "insert into gz(name) values('" + UserNamecs.UserName + "')";
DBHelper.ExecuteNonQuery(qiana);
}
//减少商品数量
int kucun = 0;
//int shul = Convert.ToInt32(shuliang_tb.Text);
for (int i = 0; i < this.dataGridView2.Rows.Count - 1; i++)
{
//string[] app = new string[i];
//app[i] = dataGridView2.Rows[0].Cells["colshoppingid"].Value.ToString();
string app = dataGridView2.Rows[i].Cells["colshoppingid"].Value.ToString();
string app1 = app;
int shul = Convert.ToInt32(dataGridView2.Rows[i].Cells["colnumber"].Value.ToString());
int shu2 = shul;
if (kucun >= 0)
{
string A = "update commodity set stock=stock-" + shu2 + "where number='" + app1 + "'";
bool row = DBHelper.ExecuteNonQuery(A);
}
//清空会员号码
textBox3.Text = "";
panel1.Hide();
panel2.Hide();
//显示按钮
button2.Show();
}
}
}
catch (Exception)
{
MessageBox.Show("不能这样操作");
}
//刷新购物车,实现清空购物车
string sql = "delete saleInfo";
bool b = DBHelper.ExecuteNonQuery(sql);
DataSet ds = new DataSet();
string sqls = "select * from saleInfo";
ds = DBHelper.GetDataSet(sqls);
dataGridView2.AutoGenerateColumns = false;
dataGridView2.DataSource = ds.Tables[0];
shishou_tb.Text = "";
taotol_tb.Text = "";
shoppingid_tb.Text = "";
name_tb.Text = "";
price_tb.Text = "";
shuliang_tb.Text = "";
textBox5.Text = "";
//加入销售情况到销售报表
string sql2 = "insert into saleexcel values('" + UserNamecs.UserName + "','" + y + "','" + textBox3.Text + "',getdate())";
bool r = DBHelper.ExecuteNonQuery(sql2);
3.会员查询
private void button2_Click_1(object sender, EventArgs e)
{
DataSet da = new DataSet();
string sql = "select * from customer where tel='"+textBox3.Text+"'";
da = DBHelper.GetDataSet(sql);
int a = da.Tables[0].Rows.Count;
if (a>0)
{
panel1.Show();
panel2.Hide();
button2.Hide();
double money = Convert.ToDouble(taotol_tb.Text)*0.95;
taotol_tb.Text = money.ToString();
}
else
{
panel2.Show();
panel1.Hide();
}
}
4,购物车的清空
private void Sale_FormClosing(object sender, FormClosingEventArgs e)
{
//关闭自动清空购物车
string sql = "delete saleInfo";
bool b = DBHelper.ExecuteNonQuery(sql);
DataSet ds = new DataSet();
string sqls = "select * from saleInfo";
ds = DBHelper.GetDataSet(sqls);
dataGridView2.AutoGenerateColumns = false;
dataGridView2.DataSource = ds.Tables[0];
shishou_tb.Text = "";
taotol_tb.Text = "";
shoppingid_tb.Text = "";
name_tb.Text = "";
price_tb.Text = "";
shuliang_tb.Text = "";
textBox5.Text = "";
}
//购物车右键删除
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
//右键删除
string id = dataGridView2.Rows[0].Cells["AID"].Value.ToString();
string sql = "delete saleInfo where ID='" + id + "'";
if (DBHelper.ExecuteNonQuery(sql) == true)
{
string sqlstr = string.Format("select * from saleInfo");
DataSet ds = new DataSet();
ds = DBHelper.GetDataSet(sqlstr);
dataGridView2.AutoGenerateColumns = false;
dataGridView2.DataSource = ds.Tables[0];
//更新应付金额
string sqlstr1 = "select SUM(price * number) from saleInfo";
object o = DBHelper.ExecuteScalar(sqlstr1);
taotol_tb.Text = o.ToString();
}
else
{
MessageBox.Show("删除商品失败,请重试!", "提示");
}
}
5.窗体加载事件
private void Sale_Load(object sender, EventArgs e)
{
//显示当前时间
Timer = new Timer();
Timer.Interval = 1000;
Timer.Tick += new EventHandler(Timer_Tick);
Timer.Start();
Win32.AnimateWindow(this.Handle, 350, Win32.AW_CENTER);
string sql = string.Format("select * from commodity ");
DataSet ds = new DataSet();
ds = DBHelper.GetDataSet(sql);
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = ds.Tables[0];
//应付金额的查找
string sqlstr = "select SUM(price * number) from saleInfo";
object o = DBHelper.ExecuteScalar(sqlstr);
//获取应付金额
taotol_tb.Text = o.ToString();
}
积分兑换模块
说明:会员每产生一元消费就会累加一积分
详情如下图
我们的项目基本功能大致就是这些,还有许多小功能,如商品添加,会员添加,换班操作,当前操作人员,提醒查询就不一一演示了,动动小脑瓜,复杂问题也能简单解决
over