C#案例應用(一)-----------銷售管理系統

C#製作簡易的的銷售管理系統

1.整體需求

1.具有簡易的登錄界面
2.能對商品信息進行快速查看、查詢、添加、編輯、保存等功能。

2.設計的窗體界面

1.登錄界面
2.商品信息的操作界面

3.所需的知識

 1.C#基礎語法
 2.ADO.NET數據庫

不太清楚的可以去看我主頁的文章,都是關於C#基礎的知識。

4.具體步驟及代碼

1.創建項目

首先打開vs2017,選擇“創建項目” ,選擇“Windows窗體應用”。詳細的操作 可以看我之前寫的一些簡單項目。

2.添加控件

登錄界面和商品信息界面如下:
在這裏插入圖片描述
在這裏插入圖片描述
可以試着根據圖片顯示的去添加控件,詳情見主頁的C#Windows窗體應用設計系列。商品信息界面最上面是一個tool strip 控件。後面會把源碼發出來,邊參考源碼編寫可以對C#的設計更加清楚。

3.添加代碼

需要添加的代碼如下,添加代碼的方法見主頁的文章介紹。
登錄界面:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace EMS
{
    public partial class frmLogin : Form
    {
        BaseClass.BaseInfo baseinfo = new EMS.BaseClass.BaseInfo();
        BaseClass.cPopedom popedom = new EMS.BaseClass.cPopedom();
        public frmLogin()
        {
            InitializeComponent();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            if (txtUserName.Text == string.Empty)
            {
                MessageBox.Show("用戶名稱不能爲空!", "錯誤提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            DataSet ds = null;
            popedom.SysUser = txtUserName.Text;
            popedom.Password = txtUserPwd.Text;
            ds=baseinfo.Login(popedom);
            if (ds.Tables[0].Rows.Count > 0)
            {
                EMS.BaseInfo.frmStock frm_Stock = new EMS.BaseInfo.frmStock();
                frm_Stock.Show();                
            }
            else
            {
                MessageBox.Show("用戶名稱或密碼不正確!","錯誤提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }

        private void txtUserName_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyValue == 13) //判斷是否按下Enter鍵
                txtUserPwd.Focus();//將鼠標焦點移動到“密碼”文本框
        }

        private void txtUserPwd_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyValue == 13)//判斷是否按下Enter鍵
                btnLogin.Focus();//將鼠標焦點移動到“登錄”按鈕
        }

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

      
    }
}

商品主界面的代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace EMS.BaseInfo
{
    public partial class frmStock : Form
    {
        BaseClass.BaseInfo baseinfo = new EMS.BaseClass.BaseInfo();//創建BaseInfo類的對象
        BaseClass.cStockInfo stockinfo = new EMS.BaseClass.cStockInfo();//創建cStockInfo類的對象
        int G_Int_addOrUpdate = 0;//定義添加/修改操作標識
        public frmStock()
        {
            InitializeComponent();
        }

        private void tlBtnAdd_Click(object sender, EventArgs e)
        {
            this.editEnabled();//設置各個控件的可用狀態
            this.clearText();//清空文本框
            G_Int_addOrUpdate = 0;//等於0爲添加數據
            DataSet ds = null;//創建數據集對象
            string P_Str_newTradeCode = "";//設置庫存商品編號爲空
            int P_Int_newTradeCode = 0;//初始化商品編號中的數字碼
            ds = baseinfo.GetAllStock("tb_stock");//獲取庫存商品信息
            if (ds.Tables[0].Rows.Count == 0)//判斷數據集中是否有值
            {
                txtTradeCode.Text = "T1001";//設置默認商品編號
            }
            else
            {
                P_Str_newTradeCode = Convert.ToString(ds.Tables[0].Rows[ds.Tables[0].Rows.Count - 1]["tradecode"]);//獲取已經存在的最大編號
                P_Int_newTradeCode = Convert.ToInt32(P_Str_newTradeCode.Substring(1, 4)) + 1;//獲取一個最新的數字碼
                P_Str_newTradeCode = "T" + P_Int_newTradeCode.ToString();//獲取最新商品編號
                txtTradeCode.Text = P_Str_newTradeCode;//將商品編號顯示在文本框中
            }
        }
        //設置各按鈕的可用狀態
        private void editEnabled()
        {
            groupBox1.Enabled = true;
            tlBtnAdd.Enabled = false;
            tlBtnEdit.Enabled = false;
            tlBtnDelete.Enabled = false;
            tlBtnSave.Enabled = true;
            tlBtnCancel.Enabled = true;
        }
        //設置各按鈕的可用狀態
        private void cancelEnabled()
        {
            groupBox1.Enabled = false;
            tlBtnAdd.Enabled = true;
            tlBtnEdit.Enabled = true;
            tlBtnDelete.Enabled = true;
            tlBtnSave.Enabled = false;
            tlBtnCancel.Enabled = false;
        }
        //清空文本框
        private void clearText()
        {
            txtTradeCode.Text= string.Empty;
            txtFullName.Text = string.Empty;
            txtType.Text = string.Empty;
            txtStandard.Text = string.Empty;
            txtUnit.Text = string.Empty;
            txtProduce.Text = string.Empty;
        }
        //設置DataGridView列標題
        private void SetdgvStockListHeadText() 
        {
            dgvStockList.Columns[0].HeaderText = "商品編號";
            dgvStockList.Columns[1].HeaderText = "商品名稱";
            dgvStockList.Columns[2].HeaderText = "商品型號";
            dgvStockList.Columns[3].HeaderText = "商品規格";
            dgvStockList.Columns[4].HeaderText = "商品單位";
            dgvStockList.Columns[5].HeaderText = "商品產地";
            dgvStockList.Columns[6].HeaderText = "庫存數量";
            dgvStockList.Columns[7].Visible = false;
            dgvStockList.Columns[8].HeaderText = "商品價格(加權平均價格)";
            dgvStockList.Columns[9].Visible = false;
            dgvStockList.Columns[10].HeaderText = "盤點數量";
            dgvStockList.Columns[11].Visible = false;
            dgvStockList.Columns[12].Visible = false;
        }

        private void frmStock_Load(object sender, EventArgs e)
        {
            txtTradeCode.ReadOnly = true;//設置商品編號文本框只讀
            this.cancelEnabled();//設置各按鈕的可用狀態
            //顯示所有庫存商品信息
            dgvStockList.DataSource = baseinfo.GetAllStock("tb_stock").Tables[0].DefaultView;
            this.SetdgvStockListHeadText();//設置DataGridView控件的列標題
        }

        private void tlBtnSave_Click(object sender, EventArgs e)
        {
            //判斷是添加還是修改數據
            if (G_Int_addOrUpdate == 0)
            {
                try
                {
                    //添加數據
                    stockinfo.TradeCode = txtTradeCode.Text;
                    stockinfo.FullName = txtFullName.Text;
                    stockinfo.TradeType = txtType.Text;
                    stockinfo.Standard = txtStandard.Text;
                    stockinfo.Unit = txtUnit.Text;
                    stockinfo.Produce = txtProduce.Text;
                    //執行添加操作
                    int id = baseinfo.AddStock(stockinfo);
                    MessageBox.Show("新增--庫存商品數據--成功!", "成功提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message,"錯誤提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                //修改數據
                stockinfo.TradeCode = txtTradeCode.Text;
                stockinfo.FullName = txtFullName.Text;
                stockinfo.TradeType = txtType.Text;
                stockinfo.Standard = txtStandard.Text;
                stockinfo.Unit = txtUnit.Text;
                stockinfo.Produce = txtProduce.Text;
                //執行修改操作
                int id = baseinfo.UpdateStock(stockinfo);
                MessageBox.Show("修改--庫存商品數據--成功!", "成功提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            dgvStockList.DataSource = baseinfo.GetAllStock("tb_stock").Tables[0].DefaultView;//顯示最新的庫存商品信息
            this.SetdgvStockListHeadText();//設置DataGridView控件列標題
            this.cancelEnabled();//設置各個按鈕的可用狀態
        }

        private void tlBtnEdit_Click(object sender, EventArgs e)
        {
            this.editEnabled();//設置各個按鈕的可用狀態
            G_Int_addOrUpdate = 1;//等於1爲修改數據
        }

        private void tlBtnFind_Click(object sender, EventArgs e)
        {
            if (tlCmbStockType.Text == string.Empty)//判斷查詢類別是否爲空
            {
                MessageBox.Show("查詢類別不能爲空!", "錯誤提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tlCmbStockType.Focus();//使查詢類別下拉列表獲得鼠標焦點
                return;
            }
            else
            {
                if (tlTxtFindStock.Text.Trim() == string.Empty)//判斷查詢關鍵字是否爲空
                {
                    //顯示所有庫存商品信息
                    dgvStockList.DataSource = baseinfo.GetAllStock("tb_stock").Tables[0].DefaultView;
                    this.SetdgvStockListHeadText();//設置DataGridView控件的列標題
                    return;
                }
            }
            DataSet ds = null;//創建DataSet對象
            if (tlCmbStockType.Text == "商品產地") //按商品產地查詢
            {
                stockinfo.Produce = tlTxtFindStock.Text;//記錄商品產地
                ds = baseinfo.FindStockByProduce(stockinfo, "tb_Stock");//根據商品產地查詢商品信息
                dgvStockList.DataSource = ds.Tables[0].DefaultView;//顯示查詢到的信息
            }
            else//按商品名稱查詢
            {
                stockinfo.FullName = tlTxtFindStock.Text;//記錄商品名稱
                ds = baseinfo.FindStockByFullName(stockinfo, "tb_stock");//根據商品名稱查詢商品信息
                dgvStockList.DataSource = ds.Tables[0].DefaultView;//顯示查詢到的信息
            }
            this.SetdgvStockListHeadText();//設置DataGridView控件列標題
        }

        private void tlBtnDelete_Click(object sender, EventArgs e)
        {
            if (txtTradeCode.Text.Trim() == string.Empty)//判斷是否選擇了商品編號
            {
                MessageBox.Show("刪除--庫存商品數據--失敗!", "錯誤提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            stockinfo.TradeCode = txtTradeCode.Text;//記錄商品編號
            int id = baseinfo.DeleteStock(stockinfo);//執行刪除操作
            MessageBox.Show("刪除--庫存商品數據--成功!", "成功提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            dgvStockList.DataSource = baseinfo.GetAllStock("tb_stock").Tables[0].DefaultView;//顯示最新的庫存商品信息
            this.SetdgvStockListHeadText();//設置DataGridView控件列標題
            this.clearText();//清空文本框
        }

        private void tlBtnCancel_Click(object sender, EventArgs e)
        {
            this.cancelEnabled();//設置各個按鈕的可用狀態
        }

        private void dgvStockList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            txtTradeCode.Text = this.dgvStockList[0, dgvStockList.CurrentCell.RowIndex].Value.ToString();//顯示商品編號
            txtFullName.Text = this.dgvStockList[1, dgvStockList.CurrentCell.RowIndex].Value.ToString();//顯示商品全稱
            txtType.Text = this.dgvStockList[2, dgvStockList.CurrentCell.RowIndex].Value.ToString();//顯示商品型號
            txtStandard.Text = this.dgvStockList[3, dgvStockList.CurrentCell.RowIndex].Value.ToString();//顯示商品規格
            txtUnit.Text = this.dgvStockList[4, dgvStockList.CurrentCell.RowIndex].Value.ToString();//顯示商品單位
            txtProduce.Text = this.dgvStockList[5, dgvStockList.CurrentCell.RowIndex].Value.ToString();//顯示商品產地
        }

        private void tlBtnExit_Click(object sender, EventArgs e)
        {
            this.Close();//關閉當前窗體
        }

        private void dgvStockList_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}

Main.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace EMS
{
    static class Program
    {
        /// <summary>
        /// 應用程序的主入口點。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmLogin());
        }
    }
}

需要添加的圖片素材在源碼文件夾的icon和image文件夾裏面,覺得不好看的可以自行查找。
注意,添加代碼時要與自己的添加的控件一一對應起來。

4.建立數據庫

數據庫具體的添加方法在我主頁的文章《一起來學C#之數據庫》中講過,在菜單欄中的“項目”-》》“添加新項目”-》》“基於服務的數據庫”,具體操作可以看我前面的文章。本次給出的源碼有數據庫,可以自行修改添加。
在這裏插入圖片描述

5.調試運行

根據自己所寫的去運行,再對照提供的源碼修改錯誤,運行界面如下。
登錄界面:在這裏插入圖片描述
登錄賬戶名:mr 密碼:mrsoft,可以根據源碼自行修改。

信息界面:
在這裏插入圖片描述
寫好運行後就可以看到該界面。

最後給大家分享一個有趣的C++案例

今日分享 C++Beep函數寫歌

(轉自B站UP主Charleyxiao 視頻BV1R54y1X7F4 )

//L'Internationale
#include <bits/stdc++.h>
#include <windows.h>
#define qdo 262 
#define qre 294
#define qmi 330     //q前綴爲低音,1後綴爲高音,s前綴爲半音階 
#define qfa 349
#define qso 392
#define qla 440
#define qsi 494
#define Do 523
#define re 578
#define mi 659
#define fa 698
#define so 784
#define la 880
#define si 988
#define do1 1046
#define re1 1175
#define mi1 1318
#define fa1 1480
#define so1 1568
#define la1 1760
#define si1 1976
#define sqdo 277
#define sqre 311
#define sqfa 370
#define sqso 415
#define sqla 466
#define sdo 554
#define sre 622
#define sfa 740
#define sso 831
#define sla 932
#define sdo1 1046
#define sre1 1245
#define sfa1 1480
#define sso1 1661
#define sla1 1865
int main(){
  int pai=600,ban=300;
  int ting=128;
  Sleep(100);
  Beep(re1,pai);
  Beep(1370,2*pai);
  Beep(sre1,pai);
  Beep(re1,pai);
  Beep(do1,3*ban);
  Beep(re1,ban);
  Beep(sre1,3*ban);
  
  Beep(sre1,ban);
  Beep(re1,3*ban);
  Beep(re1,ban);
  Beep(do1,3*ban);
  Beep(do1,ban);
  Beep(sla,pai);
  
  Beep(sla,0.75*pai);
  Beep(sla,0.25*pai);
  Beep(sla,pai);
  
  Beep(fa,pai);
  Beep(sla,3*ban);
  Beep(la,ban);
  Beep(do1,ban);
  Beep(sla,ban);
  Beep(fa,ban);
  Beep(re,ban);
  Beep(so,2*pai);
  Beep(sre,3*ban);
  Sleep(128);
  
  Beep(so,ban);
  Beep(do1,3*ban);
  Beep(sla,ban);
  Beep(la,ban);
  Beep(so,ban);
  Beep(fa,ban);
  Beep(sre,ban);
  Beep(re,3*pai);
  Sleep(128);
  
  Beep(fa,pai);
  Beep(sla,3*ban);
  Beep(la,ban);
  Beep(do1,ban);
  Beep(sla,ban);
  Beep(fa,ban);
  Beep(re,ban);
  Beep(so,2*pai);
  Beep(sre,ban);
  Beep(so,ban);
  Beep(do1,ban);
  Beep(sla,ban);
  Beep(la,pai);
  Beep(do1,pai);
  Beep(sre1,pai);
  Beep(la,pai);
  Beep(sla,3*pai);
  Sleep(128);
  
  Beep(re1,ban);
  Beep(do1,ban);
  Beep(la,3*ban);
  Beep(la,ban);
  Beep(so,ban);
  Beep(la,ban);
  Beep(sla,ban);
  Beep(so,ban);
  Beep(la,2*pai);
  Beep(fa,ban);
  Beep(fa,ban);
  Beep(670,ban);
  Beep(fa,ban);
  Beep(so,3*ban);
  Beep(so,ban);
  Beep(do1,3*ban);
  Beep(sla,ban);
  Beep(la,3*pai);
  Sleep(128);
  
  Beep(do1,pai);
  Beep(do1,3*ban);
  Beep(la,ban);
  Beep(fa,ban);
  Beep(fa,ban);
  Beep(670,ban);
  Beep(fa,ban);
  Beep(re1,2*pai);
  Beep(sla,ban);
  Beep(so,ban);
  Beep(la,ban);
  Beep(sla,ban);
  Beep(do1,pai);
  Beep(do1,pai);
  Beep(sla,pai);
  Beep(so,pai);
  Beep(fa,pai);
  Beep(1370,200);
  Beep(1370,200);
  Beep(1370,200);
  Beep(1370,200);
  Beep(1370,200);
  Beep(1370,200);
  
  Beep(re1,0.75*pai);
  Beep(do1,0.25*pai);
  Beep(sla,2*pai);
  Beep(fa,3*ban);
  Beep(re,ban);
  Beep(so,2*pai);
  Beep(sre,pai);
  Beep(do1,0.75*pai);
  Beep(sla,0.25*pai);
  Beep(la,2*pai);
  Beep(so,pai);
  Beep(fa,pai);
  Beep(fa,2.8*pai);
  Sleep(128+0.2*pai);
  
  Beep(fa,pai);
  Beep(re1,2*pai);
  Beep(do1,pai);
  Beep(fa,pai);
  Beep(sla,2*pai);
  Beep(la,3*ban);
  Beep(la,ban);
  Beep(so,3*ban);
  Beep(sfa,ban);
  Beep(so,pai);
  Beep(do1,pai);
  Beep(do1,2.7*pai);
  Sleep(128+0.3*pai);
  
  Beep(re1,0.75*pai);
  Beep(do1,0.25*pai);
  Beep(sla,2*pai);
  Beep(fa,3*ban);
  Beep(re,ban);
  Beep(so,2*pai);
  Beep(sre,pai);
  Beep(do1,0.75*pai);
  Beep(sla,0.25*pai);
  Beep(la,2*pai);
  Beep(so,pai);
  Beep(fa,pai);
  Beep(re1,3*pai);
  Sleep(128);
  
  Beep(re1,pai);
  Beep(1370,2*pai);
  Beep(sre1,pai);
  Beep(re1,pai);
  Beep(do1,3*ban);
  Beep(re1,ban);
  Beep(sre1,3*ban);
  Beep(sre1,ban);
  Beep(re1,3*ban);
  Beep(re1,ban);
  Beep(do1,3*ban);
  Beep(do1,ban);
  Beep(sla,3*pai);
}

有興趣的小夥伴可以去看看效果,由於我沒上傳視頻不能給大家展示。也可以看B站原視頻或者我上傳到網盤上的視頻 :鏈接:https://pan.baidu.com/s/1hX3_4ELhGsE9edOCxApPFQ
提取碼:gubq

由於時間處在期末,博主還有許多課程設計和考覈要做,所以寫的比較粗糙。大家有疑問的話歡迎在評論區留言,根據大家反映的情況更新和講解。切記先自己試着去寫,然後根據源碼不斷修改,自己纔會有提高。

銷售管理系統源代碼:鏈接:鏈接:https://pan.baidu.com/s/1GibGpV4JQvC_0it4Qo4Z5w
提取碼:4uki
據讀者反映的C#小遊戲設計的問題,把詳細的文檔給大家查錯:
鏈接:https://pan.baidu.com/s/1ejQu2y3CWPkj2ubIXsshUg
提取碼:zutz
ADO.NET數據庫參考資料:鏈接:https://pan.baidu.com/s/1CUjuA4UrMY2LXyVKjp-cyA
提取碼:in68

最後謝謝大家的理解,我把大家可能用到的資料放在上面,需要的自取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章