• 泛型实践——体检套餐系统


    体检套餐项目总结

    首先可以功能提取出两个类,一个是  HealthCheckItem (检查项目类)和HealthCheckItem(体检套餐类)。首先我们要理清两个类的关系,一项套餐中可以包含多项项目检查。

    HealthCheckItem:包括项目名称、单价和描述3个属性

     

          public HealthCheckItem(string name,int price,string description)

          {

              //this

              this.Name = name;

              this.Description = description;

              this.Price = price;

          }

    HealthCheckSet:包括要检查的项目、套餐名称、总价(所有要检查项目之和)

    所以这里我们就要考虑检查项目的类型:

    可以定义一个泛型集合来存储项目的类型,如List<HealthCheckItem>

    然后写2个构造函数对List<HealthCheckItem>

    进行初始化,如下

     

    最后该类还需要一个套餐总价计算方法

    //套餐计算方法

           public  void CalcPrice()

           {

               int totalPrice = 0;

               foreach (HealthCheckItem item in items)

               {

                   totalPrice += item.Price;

               }

               this.price =totalPrice;

           }

    窗体加载时需要初始化几个项目:

     

    添加套餐   绑定数据

     

      private void btnOK_Click(object sender, EventArgs e)

            {

                //添加

                if (string.IsNullOrEmpty(txtHealthName.Text))

                {

                    MessageBox.Show("请输入套餐名称", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    return;//结束方法

                }

                else

                {

                    //声明一个套餐对象

                    HealthCheckSet Hch = new HealthCheckSet();

                    //将套餐对对象添加到Dictionary中

                    this.HealthSet.Add(this.txtHealthName.Text, Hch);

                    this.InitHealthSetList();

                    //下拉框显示刚添加的内容

                    this.cboSets.SelectedIndex = this.HealthSet.Count;

                    lblSetName.Text = cboSets.Text;

                    Hch.Name = cboSets.Text;

     

                    MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    this.txtHealthName.Text = string.Empty;

                    this.btnAdd.Enabled = true;

                    this.btnDel.Enabled = true;

                }

            }

            //绑定套餐到组合框

            public void InitHealthSetList()

            {

                //绑定前先清空

                this.cboSets.Items.Clear();

                //添加请选择

                this.cboSets.Items.Add("请选择");

                //将Dictionary的key值绑定到combobox上,作为combobox的显示值

                foreach (string key in this.HealthSet.Keys)

                {

                    this.cboSets.Items.Add(key);

                }

                //默认第一项被选中

                this.cboSets.SelectedIndex = 0;

                this.btnDel.Enabled = true;

            }

     

    //创建Item对象并保存到集合中

            public void InitItems()

            {

                height = new HealthCheckItem("身高", 6, "用于检查身高");

                weight = new HealthCheckItem("体重", 8, "用于检查体重.");

                sight = new HealthCheckItem("视力", 10, "用于检查视力.");

                hearing = new HealthCheckItem("听力", 12, "用于检查听力.");

                liverFun = new HealthCheckItem("肝功能", 50, "用于检查肝功能.");

                bWaves = new HealthCheckItem("B超", 40, "用于检查B超.");

                ekg = new HealthCheckItem("心电图", 50, "用于检查心电图.");

                bloodPressure = new HealthCheckItem("血压", 30, "用于检查血压.");

                bloodTest = new HealthCheckItem("血常规", 30, "用于检查血常规.");

     

                AllItems.Add(height);

                AllItems.Add(weight);

                AllItems.Add(sight);

                AllItems.Add(hearing);

                AllItems.Add(liverFun);

                AllItems.Add(bWaves);

                AllItems.Add(ekg);

                AllItems.Add(bloodPressure);

                AllItems.Add(bloodTest);

                this.cboItems.SelectedIndex = 0;

            }

            //默认套餐

            private void InitSets()

            {

                //创建默认套餐对象

                items = new List<HealthCheckItem>();

                items.Add(height);

                items.Add(weight);

                items.Add(liverFun);

     

                setA = new HealthCheckSet("入学体检", items);

                //计算套餐价格

                setA.CalcPrice();

                this.HealthSet.Add("入学体检", setA);

     

            }

     

      //添加项目

     

            private void btnAdd_Click(object sender, EventArgs e)

            {

                string cboSetText = this.cboSets.Text;

                if (this.cboItems.SelectedIndex==0)

                {

                    MessageBox.Show("请选择一个项目");

                    return;

                }

                if (cboSetText == "请选择")

                {

                    MessageBox.Show("请选择套餐!");

                    return;

                }

                //这个要检查的项目是否在这个套餐里已经存在了   假设不存在  执行添加

                int index = this.cboItems.SelectedIndex - 1;

                if (!this.HealthSet[cboSetText].Items.Contains(AllItems[index]))

                {

                    this.HealthSet[cboSetText].Items.Add(AllItems[index]);

                    this.HealthSet[cboSetText].CalcPrice();

                    UpdateSet(this.HealthSet[cboSetText]);

                    this.lblSetName.Text = this.HealthSet[cboSetText].Name;  //刷新窗体集合A名称

                    this.lblSetPrice.Text = this.HealthSet[cboSetText].Price.ToString();    //刷新集合A价格

                    MessageBox.Show("添加成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }

                else

                {

                    MessageBox.Show("该项目存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }

     

     

    //删除

     

            private void btnDel_Click(object sender, EventArgs e)

            {

                string setName = this.cboSets.Text;

                if (this.dgvHealthList.SelectedRows.Count == 0)

                {

                    MessageBox.Show("没有选择删除项。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    return;

                }

                int index = this.dgvHealthList.SelectedRows[0].Index;

                this.HealthSet[setName].Items.RemoveAt(index);

                this.HealthSet[setName].CalcPrice();//重新计算价格

                UpdateSet(this.HealthSet[setName]);

                lblSetName.Text = setA.Name;

                string cboSetText = this.cboSets.Text;

                lblSetPrice.Text = this.HealthSet[cboSetText].Price.ToString();

                MessageBox.Show("删除成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

               

            }

     

            }

    //当体检项目组合框某一个被选中时

            private void cboSets_SelectedIndexChanged(object sender, EventArgs e)

            {

                string setName = this.cboSets.Text;

                if (setName == "请选择")

                {

                    this.dgvHealthList.DataSource = new BindingList<HealthCheckItem>();

                    lblSetName.Text = "";

                    lblSetPrice.Text = "";

                    return;

                }

                lblSetName.Text = this.HealthSet[setName].Name;

                lblSetPrice.Text = this.HealthSet[setName].Price.ToString();

                UpdateSet(HealthSet[setName]);

                this.btnDel.Enabled = true;

            }   

            //更新套餐功能

            private void UpdateSet(HealthCheckSet set)

            {

                this.dgvHealthList.DataSource = new BindingList<HealthCheckItem>(set.Items);

            }

  • 相关阅读:
    Windows10系统下在Docker中部署静态网站
    NET接入Mesher--------解决微服务什么时候能支持.net 的应用开发的问题
    Windows系统下 ASP.NET Core 的 Docker 映像创建
    Windows平台部署 Asp.Net Core 3.1.0,将 ASP.NET Core 应用发布到 IIS ,使用 IIS 在 Windows 上托管 ASP.NET Core
    如何使用Activator.CreateInstance创建一个列表<T>,其中T在运行时是未知的?
    在 Visual Studio 中安装 FxCop 分析器
    .Net Core3.1下使用Swagger搭建web api项目
    Vuex访问状态对象的方法
    Vuex最基本样例
    搜索框 展示相关搜索内容列表,及延迟改进(仿百度)
  • 原文地址:https://www.cnblogs.com/PGYXZ/p/4621632.html
Copyright © 2020-2023  润新知