【雜談】淺談進銷庫系統的數據庫設計和數據處理

      進銷庫系統主要用在銷售和商品管理,主要要做到借貸一致,如果數據處理不好的話容易造成庫存和流水無法對應,和錢財打交道的東西可都馬虎不得,之前受以爲朋友的委託給他設計了一個銷售管理系統。在沒有參考現成設計的基礎上靠自己的YY硬是做了一個進銷庫系統。不太完善但是還是想記錄一下心路歷程

      首先,系統分爲3個庫,分別是會員庫,庫存/產品庫,流水庫,算是比較簡單。會員庫通過會員ID作爲主鍵和流水庫進行關聯,而產品庫則以產品的品牌和型號作爲識別主鍵(仔細回想一下應該給產品庫設計一個主鍵更加方便纔是)

      會員庫和產品庫的設計如下

create table CustomerTable  --顧客表
(
	Uid int identity(1,1),--序號
	CusName varchar(50) not null, --姓名
	CusPhone varchar(50) not null, --電話
	CusDegreeL varchar(50) not null, --左邊度數
	CusDegreeR varchar(50) not null, --右邊度數
	CheckInTime datetime  not null, --登記時間
)
create table CargoTable  --顧客表
(
	CargType varchar(50) not null, --品牌
	CargModel varchar(50) not null, --型號
	CargDegree varchar(50) not null, --度數
	CargCost float not null, --價格
	CargCounts int  not null, --庫存
)

    流水錶設計就比較偷懶了,直接以時間作爲流水號以每條商品爲單位進行進銷庫操作,會員信息以會員ID代替

create table SerialTable  --顧客表
(
	SerialNum varchar(50)  not null ,--流水號
	Cusid int  not null ,--客戶ID

	CargType varchar(50) not null, --品牌
	CargModel varchar(50) not null, --型號
	CargDegree varchar(50) not null, --度數
	CargCost float not null, --價格
	CargCounts int  not null, --數量

	CheckInTime datetime  not null, --出單時間
)

    而客戶端的進庫和會員增加和一般的數據庫增刪改查沒有什麼區別,而進行銷庫的時候會首先檢索庫存是否充足,如果充足的話會首先進行庫存的修改(產品出庫),然後進行流水的添加。當庫存不足的時候會直接終止進程

string SerialNum = DateTime.Now.ToString("yyyyMMddHHmmss");//以時間戳作爲流水號
            if (SUid == 0)
            {
                MessageBox.Show("請先選擇客戶");
                return;
            }
            double Costs = 0;
            List<CargoModel> listCargo = new List<CargoModel>();
            foreach (DataGridViewRow item in SellingView.Rows)
            {
                if (item.Cells[0].Value == null)
                    break;
                listCargo.Add(
                CargoService.TrsCargo(item.Cells[0].Value.ToString(),
                    Convert.ToDouble(item.Cells[1].Value.ToString()),
                    Convert.ToInt32(item.Cells[2].Value.ToString())));
            }
            foreach (var item in listCargo)
            {
                Costs += item.CargCost * item.CargCounts;
            }
            try
            {
                FrmGetMoney frmget = new FrmGetMoney(Costs, lblCus.Text);
                frmget.ShowDialog();
            }
            catch (Exception ex)
            {
                if (ex.Message == "成功")
                {
                    foreach (var item in listCargo)
                    {
                        try
                        {
                            CargoService.OutPutCargo(item);
                            SerialService.Insert(SerialNum, SUid, item);
                            Costs += item.CargCost * item.CargCounts;
                            lblCost.Text = Costs.ToString();
                        }
                        catch (Exception ec) { MessageBox.Show(ec.Message); }
                    }
                    SellingView.Rows.Clear();
                }
            }

最後上一下效果圖

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