字典集合Dictionary<K,V>和構造的應用==>>體檢套餐項目

来源:http://www.cnblogs.com/zhangzongle/archive/2016/02/28/5224802.html
-Advertisement-
Play Games

效果 首先,我們先來準備我們需要的類 1.檢查項目類 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespa


效果

首先,我們先來準備我們需要的類

1.檢查項目類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 第五章_體檢套餐管理系統_
{
    //項目類
   public class HealthCheckItem
    {
       //項目描述
        public string  Description { get; set; }
       //項目名稱
        public string  Name { get; set; }
       //項目價格
        public int Price { get; set; }

       //無參構造
        public HealthCheckItem() { }

       //帶參構造
        public HealthCheckItem(string name,string description,int price) 
        {
            this.Name = name;
            this.Price = price;
            this.Description = description;
        }
    }
}

2.套餐類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 第五章_體檢套餐管理系統_
{

    //套餐類
   public class HealthCheckSet
    {
        //HealthCheckItem的集合
        public List<HealthCheckItem> Item { get; set; }

       //套餐價格
        public int Price { get; set; }

       //套餐名稱
        public string Name { get; set; }

       //無參構造
        public HealthCheckSet() { }

       //帶參構造
        public HealthCheckSet(string name,List<HealthCheckItem> item)
        {
            this.Name = name;
            this.Item = item;
        }
        //計算總價格
        public void CalcPrice()
        {
            int totalPrice = 0;
            foreach (HealthCheckItem item in this.Item)
            {
                totalPrice += item.Price;
            }
            this.Price = totalPrice;
        }
    }
}

然後我們就可以來實現主頁面的一些功能鍵了

1.主界面的初始工作

        //建立所有 檢查項目 集合
       // List<HealthCheckItem> Alllist = new List<HealthCheckItem>();
        Dictionary<string, HealthCheckItem> Alllist = new Dictionary<string, HealthCheckItem>();

        //建立 套餐中的 檢查項目 集合
        List<HealthCheckItem> list = new List<HealthCheckItem>();

        //使用字典保存套餐集合
        Dictionary<string, HealthCheckSet> dictionary = new Dictionary<string, HealthCheckSet>();

        //初始化檢查項目
        HealthCheckItem item, item2, item3, item4, item5, item6, item7;

        //定義一個預設套餐
        HealthCheckSet moren;

        //初始化檢查項目的方法
        public void main() 
        {
             item = new HealthCheckItem("身高","用於檢查身高",10);
             item2 = new HealthCheckItem("體重","用於檢查體重",5);
             item3 = new HealthCheckItem("視力","用於檢查視力",15);
             item4 = new HealthCheckItem("聽力","用於檢查聽力",20);
             item5 = new HealthCheckItem("肝功能","用於檢查肝功能",100);
             item6 = new HealthCheckItem("B超","用於檢查B超", 10);
             item7 = new HealthCheckItem("心電圖","用於檢查心電圖",100);


             Alllist.Add(item.Name,item);
             Alllist.Add(item2.Name,item2);
             Alllist.Add(item3.Name,item3);
             Alllist.Add(item4.Name, item4);
             Alllist.Add(item5.Name,item5);
             Alllist.Add(item6.Name,item6);
             Alllist.Add(item7.Name,item7);


            //dictionary.Add(item.Name,item);

        }
      
        //生成預設套餐數據
        public void yuan() 
        {
            list.Add(item);
            list.Add(item2);
            list.Add(item3);

            moren = new HealthCheckSet("入學體檢",list);
            //計算價格
            moren.CalcPrice();

            this.dictionary.Add("入學體檢", moren);

        }

        //套餐列表 下拉框的載入方法
        public void combox() 
        {
            cbm_sum.Items.Clear();
            cbm_sum.Items.Add("--請選擇--");
            foreach (string item in dictionary.Keys)
            {
                cbm_sum.Items.Add(item);
            }
            //預設第一項為選中
            cbm_sum.SelectedIndex = 0;
        }
        //檢查項目 下拉框的載入方法
        public void combox2()
        {
            cmb_xiang.Items.Clear();
            cmb_xiang.Items.Add("--請選擇--");
            foreach (string item in Alllist.Keys)
            {
                cmb_xiang.Items.Add(item);
            }
            //預設第一項為選中
            cmb_xiang.SelectedIndex = 0;
        }
        private void FrmMain_Load(object sender, EventArgs e)
        {
            main(); //初始化檢查項目
            yuan();  //生成預設套餐數據
            combox();  //套餐列表 下拉框的載入
            combox2();//檢查項目 下拉框的載入

        }
   //填充套餐的DataGridView的方法
        public void UpdateSet(HealthCheckSet set) 
        {
            if (set.Item == null)
            {
                //給DataGridView的數據源賦空值
                dgv.DataSource = new BindingList<HealthCheckItem>();
                return;
            }
            else 
            {
                dgv.DataSource = new BindingList<HealthCheckItem>(set.Item);
            }
            
        }

 

2.添加套餐按鈕

  //添加套餐
        private void but_add_Click(object sender, EventArgs e)
        {
            if (txt_name.Text!="")
            {
               //判斷字典中是否有你想要添加的套餐
                if (dictionary.Keys.Contains(txt_name.Text))
                {
                   
                        MessageBox.Show("已經有該套餐了", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                        return;
                }
                    else
                    {
                        //給health實例化
                        List<HealthCheckItem> hao = new List<HealthCheckItem>();
                        HealthCheckSet health = new HealthCheckSet();
                        health.Item = hao;
                        health.Name = "";
                        health.Price = 0;
                        this.dictionary.Add(txt_name.Text, health);
                        combox();
                        cbm_sum.Text = txt_name.Text;
                        txt_name.Text = "";

                    }
            }
            else
            {
                MessageBox.Show("添加的不能為空!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
           
        }

3.選擇(改變)套餐

  //選擇套餐
        private void cbm_sum_SelectedIndexChanged(object sender, EventArgs e)
        {


            string setName = cbm_sum.Text;
            if (cbm_sum.Text=="--請選擇--")
            {
                //給DataGridView的數據源賦空值
                dgv.DataSource = new BindingList<HealthCheckItem>();

                lab_xianshiname.Text = "";
                cmb_xiang.Text = "";
                lab_xianshiprice.Text = "";
                but_new.Enabled = false;
                return;

            }
            else
            {
                lab_xianshiname.Text = setName;
                if ( dictionary[setName]!=null)
                {
                    //根據套餐名給DataGridView綁定數據
                    UpdateSet(dictionary[setName]);
                }
                else
                {
                    //給DataGridView的數據源賦空值
                    dgv.DataSource = new BindingList<HealthCheckItem>();
                }
                
                //根據套餐名給其中的檢查項求總價格
                lab_xianshiprice.Text = dictionary[setName].Price.ToString();
            }

           
        }

4.添加檢查項目按鈕

//添加項目
        private void but_new_Click(object sender, EventArgs e)
        {
            string name = cmb_xiang.Text;
            //根據你選擇的套餐找到相應的項目集合,同時判斷聚合中是否有你想要添加的項
            if (!dictionary[cbm_sum.Text].Item.Contains(Alllist[name]))//沒有,添加
            {
                dictionary[cbm_sum.Text].Item.Add(Alllist[name]);
                MessageBox.Show("添加成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                dgv.DataSource = new BindingList<HealthCheckItem>(dictionary[cbm_sum.Text].Item);
                dictionary[cbm_sum.Text].CalcPrice();
                //根據套餐名給其中的檢查項求總價格
                lab_xianshiprice.Text = dictionary[cbm_sum.Text].Price.ToString();
            }
            else//有,則提示
            {
                MessageBox.Show("已經有該項目的存在了", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
          
            
        }

5.刪除按鈕

        //刪除
        private void but_shan_Click(object sender, EventArgs e)
        {
            string key = dgv.SelectedRows[0].Cells[1].Value.ToString();
            this.dictionary[cbm_sum.Text].Item.Remove(Alllist[key]);

            dgv.DataSource = new BindingList<HealthCheckItem>(dictionary[cbm_sum.Text].Item);
            but_shan.Enabled = false;//刪除按鈕的禁用
         
        }
public string name; //選中 private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) { if (dgv.SelectedRows.Count!=1||dgv.SelectedRows[0].Cells[1].Value==null) { MessageBox.Show("請你正確的選擇一行!","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Error); return; } else { name = dgv.SelectedRows[0].Cells[1].Value.ToString(); but_shan.Enabled = true;//刪除按鈕的可用 } }

6.添加按鈕的可用或禁用

 //添加按鈕的 是否可用(檢查項目下拉框的SelectedIndexChanged事件)
        private void cmb_xiang_SelectedIndexChanged(object sender, EventArgs e)
        {

            if (cmb_xiang.Text == "--請選擇--"||cbm_sum.Text=="--請選擇--")
            {
                 but_new.Enabled = false;//禁用
            }
            else
            {
                but_new.Enabled = true;//可用
            }
            
        }

這樣,我們的項目就完成了,有一些可以優化的,忘大家別忘了,沒有一樣東西可以是永遠的經典喲!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 刪除D盤的所有文件:del /a /f /q d:\*.* 刪除指定目錄的指定擴展名的文件:del /a /f /q 目錄:\*.jpg 刪除當前目錄下的指定擴展名的文件(指定擴展名為jpg):del /a /f /q %cd%\*.jpg PS: *為通配符/a /f 是強制刪除所有屬性的文件/q
  • 1、激活root用戶:sudo passwd root 2、安裝ftp:apt-get install vsftpd,修改配置文件/etc/vsftpd.conf write_enable=yes表明可上傳,修改完配置文件要重啟服務service vsftpd restart。 /etc/ftpus
  • FROM: http://blog.csdn.net/npy_lp/article/details/7686583 從事Linux開發的軟體工程師幾乎都使用過虛擬機軟體,如VMware workstation,一般把虛擬機軟體運行在微軟的操作系統中,把Linux操作系統(如Ubuntu)運行在虛擬機
  • 系統媽Ghost win10 64位快速安裝版 V2016年2月,更新了最新系統補丁,升級系統版本號為2016年2月份。這款累積更新補丁會取代之前的版本。本系統還附帶最常用的裝機必備軟體、QQ等。 系統下載:http://www.xitongma.com 三種激活途徑:1、利用win7、win8、w
  • 深度技術ghost win7系統 64位快速安裝版 V2016年2月,深度技術ghost win7 64位快速安裝版在不影響大多數軟體和硬體運行的前提下,已經儘可能關閉非必要服務,自動安裝AMD/Intel 雙核 CPU 驅動和優化程式,發揮新平臺的最大性能。首次登陸桌面,後臺自動判斷和執行清理目標
  • 首先定義一個字元串: string str = "abc"; 1.字元大小寫轉化 大寫:str.ToUpper(); 小寫: str.ToLower(); 2.字元和Ascii碼互相轉換 Ascii碼:byte[] b = Encoding.GetEncoding("unicode").GetByt
  • 註釋 /// <summary> /// 3.文檔註釋 /// </summary> private static void Test() { Console.WriteLine("Hello world!");// 1.單行註釋 Console.ReadKey(); /* 2.塊註釋 Consol
  • 3.0獲取介面調用憑據 ①介面說明 access_token是公眾號的全局唯一票據,公眾號調用各介面時都需使用access_token。開發者需要進行妥善保存。access_token的存儲至少要保留512個字元空間。access_token的有效期目前為2h(7200s),需定時刷新,重覆獲取將導
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...