字典集合Dictionary<K,V>和构造的应用==>>体检套餐项目

效果

首先,我们先来准备我们需要的类

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;//可用
            }

        }

这样,我们的项目就完成了,有一些可以优化的,忘大家别忘了,没有一样东西可以是永远的经典哟!

时间: 2024-10-05 05:07:25

字典集合Dictionary<K,V>和构造的应用==>>体检套餐项目的相关文章

C#泛型集合—Dictionary&lt;K,V&gt;使用技巧

[csharp] view plaincopy 1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述  1).从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成  2).任何键都必须是唯一的  3).键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值  4).Key和Value可以是任何类型(string,int,custom c

C#入门Dictionary&lt;k,v&gt;泛型集合

关于Dictionary<k,v>泛型集合 Dictionary<k,v>通常成为字典,<k,v>约束集合中元素类型: 编译时检查类型约束,无需装箱拆箱操作,与哈希表操作类似: 1 static void Main(string[] args) 2 { 3 //创建几个学员对象 4 Student objStudent1 = new Student(1001, "小明"); 5 Student objStudent2 = new Student(10

基础才是重中之重~Dictionary&lt;K,V&gt;里V的设计决定的性能

回到目录 字典对象Dictionary<K,V>我们经常会用到,而在大数据环境下,字典使用不当可能引起性能问题,严重的可能引起内在的溢出! 字典的值建议为简单类型,反正使用Tuple<T> 字典的键在查找时,时间复杂度为O(1),性能不会有任何问题,所以不要愿望它 下面代码是对500万的字典进行测试,首先赋值,然后取出一个随机机,性能在毫秒级 static void Draw() { int count = 5000000; Console.WriteLine("test

C#泛型集合之Dictionary&lt;k, v&gt;使用技巧

1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成 2).任何键都必须是唯一的 3).键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值 4).Key和Value可以是任何类型(string,int,custom class 等) 3.创建及初始化 Dictionary<

03集合:List&lt;T&gt;,Dictionary&lt;K,V&gt;

List<T>泛型集合 List<T>是C#中一种快捷.易于使用的泛型集合类型,使用泛型编程为编写面向对象程序增加了极大的效率和灵活性. 1.List<T>用法 (1)创建一个List<T>泛型集合对象实例 List<T> list = new List<T>();// T 为列表中元素的类型 List<string> mlist = new List<string>();//创建了一个 string 类型的集

遍历Dictionary&lt;K,V&gt;的两种方式

添加 Dictionary<string,int> things = new Dictionary<string,int>(); things.Add(........); things.Add(........); 第一种方式:可以使用Keys和values属性迭代集合中的键和值: foreach(string key in things.Keys) { // ...... } //或 foreach(int value in things.Values) { //.... }

ArrayList,Hashtable,List&lt;T&gt;,Dictionary&lt;K,V&gt;

1.ArrayList ArrayList list = new ArrayList(); //for遍历 for (int i = 0; i < list.Count; i++) { SE se=(SE)list[i]; Console.WriteLine(se.Name); } //foreach遍历 foreach(Object obj in list) { SE se=(SE)list[i]; Console.WriteLine(se.Name); } 2.Hashtable Hasht

c# Dictionary&lt;K,V&gt;

原文地址:https://www.cnblogs.com/fanweisheng/p/11517709.html

列表/字典/集合数据筛选

import randomlist1 = [random.randint(-10,10) for _ in range(10)]print('随机生成的十个在-10到10之间的整数列表:',list1)outList1 = list(filter(lambda x: x>=0,list1))#filter返回一个可迭代对象outList2 = [x for x in list1 if x >=0]#列表解析,快于filterprint('filter过滤列表中大于0的数:',outList1)