簡易銷售點 (POS) 系統

基礎篇

C# 簡介

開發環境

變數與運算

流程控制

陣列

函數

物件

例外處理

函式庫篇

檔案處理

資料結構

正規表達式

Thread

應用篇

視窗程式

媒體影音

網路程式

遊戲程式

手機程式

資料庫

雲端運算

特殊功能

委派

擴展方法

序列化

LinQ

WPF

網路資源

教學影片

投影片

教學文章

軟體下載

考題解答

101習題

專案下載:簡易版 — Menu1.zip : 只有一樣商品 (紅茶)
專案下載:完整版 — Menu2.zip : 使用 ListView
專案下載:豪華版 — Menu3.zip : 使用 DataGridView
專案下載:豪華版 — POS.zip : 2011 年更新版,使用 DataGridView
專案下載:豪華版 — POS2012.zip : 2012 年更新版,使用 DataGridView

簡介

為了展示如何用 C# 設計一個小型的銷售點系統,我們設計了一個販賣飲料的 POS 軟體,可以讓販售者於電腦上點選飲料與數量,然後系統會自動計算總金額,這個程式可以用 ListView 或 DataGridView 元件進行設計,在上述的專案下載連結中,我們分別設計了這些專案,以下說明是我們使用 DataGridView 的設計方式的結果。

設計

MenuDesign.png

程式

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 POS
{
    public partial class FormMenu : Form
    {
        String name; // 品名
        double price; // 單價
        double number; // 數量
        double subTotal; // 小計

        public FormMenu()
        {
            InitializeComponent();

            // 填入銷售項目到菜單中
            DataGridViewRowCollection rows = dataGridViewMenu.Rows;
            rows.Add(new Object[] { "紅茶", 25 }); 
            rows.Add(new Object[] { "綠茶", 25 });
            rows.Add(new Object[] { "奶茶", 30 });
            rows.Add(new Object[] { "珍珠奶茶", 35 });
        }

        private void dataGridViewMenu_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            // 選取某項目,將該項目的品名價格放入待購項目中。
            if (dataGridViewMenu.Rows[e.RowIndex].Cells[0].Value == null)
                return;
            buttonName.Text = dataGridViewMenu.Rows[e.RowIndex].Cells[0].Value.ToString();
            textBoxPrice.Text = dataGridViewMenu.Rows[e.RowIndex].Cells[1].Value.ToString();
        }

        private void buttonAdd_Click(object sender, EventArgs e)
        {
            // 加入紐被按下
            calculateSubTotal(); // 計算小計,並加入到訂單中
            dataGridViewOrder.Rows.Add(new Object[] { name, price, number, subTotal }); 
            calculateTotal(); // 重新計算總價
        }

        private void calculateSubTotal() // 計算小計
        {
            name = buttonName.Text;
            price = double.Parse(textBoxPrice.Text);
            number = (double)numericUpDownNumber.Value;
            subTotal = price * number; // 小計 = 價格 * 數量
            textBoxSubtotal.Text = subTotal.ToString();
        }

        private void calculateTotal() // 計算總價
        {
            double total = 0.0;
            for (int i = 0; i < dataGridViewOrder.Rows.Count; i++)
            {
                DataGridViewRow row = dataGridViewOrder.Rows[i];
                if (row.Cells[0].Value != null)
                    total += (double)row.Cells[3].Value;
            }
            textBoxTotal.Text = total.ToString();
        }

        private void numericUpDownNumber_ValueChanged(object sender, EventArgs e)
        {
            calculateSubTotal(); // 數量修改時,重新計算小計。
        }

        private void buttonTotal_Click(object sender, EventArgs e)
        {
            calculateTotal(); // 按下總價紐時,重新計算總價。
        }
    }
}

執行結果

MenuRun.png

參考文獻

  1. Data Binding in .NET / C# Windows Forms — http://www.akadia.com/services/dotnet_databinding.html
  2. C# DataRow Examples — http://dotnetperls.com/datarow
  3. How to bind a DataGridView to a DataSet without a database? — http://www.devnewsgroups.net/windowsforms/t57859-how-bind-datagridview-dataset-without-database.aspx
  4. Data Binding in DataGrid Control - Part 1 — http://www.c-sharpcorner.com/UploadFile/mahesh/DataBindingInDataGridMCB112022005002207AM/DataBindingInDataGridMCB1.aspx
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License