• 05章 体检套餐管理系统


    窗体搭建的效果图如下:

    一:实现的功能主要有以下几个方面:

    ①:显示指定套餐的项目明细

    ②:向指定套餐添加检查项目信息

    ③:删除套餐中的项目信息

    ④:新建套餐

    二:创建体检项目维护系统中的检查项目类(HealthCheckItem)、体检套餐类(HealthCheckSet)

    HealthCheckItem类中的属性说明如下:

    Description:项目描述

    Name:项目名称

    Price:项目价格

    HealthCheckSet类中的属性说明如下:

    Items:HealthCheckItem的集合。采用泛型集合List<T>作为存储HealthCheckItem的数据结构

    Price:套餐价格,即Items属性中检查项目的价格之和

    Name:套餐名称

    关键代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Chapter05
    {
       public  class HealthCheckItem
        {
          
           //项目名
    
           private string name;
           public string Name
           {
               get { return name; }
               set { name = value; }
           }
    
           //价格
           private int price;
           public int Price
           {
               get { return price; }
               set { price = value; }
           }
    
           //描述
           private string description;
           public string Description
           {
               get { return description; }
               set { description = value; }
           }
    
    
           public HealthCheckItem(string name,int price,string description)
           {
               this.Name = name;
               this.Price = price;
               this.Description = description;
           }
    
        }
    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Chapter05
    {
       public  class HealthCheckSet
        {
           //无参构造中实例化items
           public HealthCheckSet()
           {
               items = new List<HealthCheckItem>();
           }
    
           public HealthCheckSet(string name,List<HealthCheckItem>items)
           {
               this.Name = name;
               this.Items = items;
           }
    
           //项目名
           private string name;
           public string Name
           {
               get { return name; }
               set { name = value; }
           }
    
           //检查项目
           private List<HealthCheckItem> items;
           public List<HealthCheckItem> Items
           {
               get { return items; }
               set { items = value; }
           }
    
          
    
           //套餐价格
           private int price;
           public int Price
           {
               get { return price; }
               set { price = value; }
           }
    
           //套餐价格计算方法
           public void CalcPrice()
           {
               int totalPrice = 0;
    
               foreach (HealthCheckItem item in items)
               {
                   totalPrice += item.Price;
               }
               this.price = totalPrice;
           }
          
        }
    }

    三:使用集合来存储对应的数据,因为套餐 ,体检项目有多个。定义一些容器来保存数据。

            //定义几个检查项目
            HealthCheckItem height, weight, sight, hearing, liverFun, ekg, bWaves, bloodPressure, bloodTest;
    
            //定义一个系统默认检查套餐“入学体检”
            HealthCheckSet setA;
    
            //保存所有体检项目
            List<HealthCheckItem> AllItems = new List<HealthCheckItem>();
    
            //保存套餐中的体检项目
            List<HealthCheckItem> items = new List<HealthCheckItem>();
    
            //使用字典保存套餐集合
            public Dictionary<string, HealthCheckSet> HealthSet = new Dictionary<string, HealthCheckSet>();

    四:初始化保存在AllItems中的所有体检项目

            //初始化检查项目下拉框值
            public void InitItems()
            {
                height = new HealthCheckItem("身高",5,"用于检查身高");
                weight = new HealthCheckItem("体重", 5, "用于检查体重.");
                sight = new HealthCheckItem("视力", 10, "用于检查视力.");
                hearing = new HealthCheckItem("听力", 10, "用于检查听力.");
                liverFun = new HealthCheckItem("肝功能", 50, "用于检查肝功能.");
                bWaves = new HealthCheckItem("B超", 30, "用于检查B超.");
                ekg = new HealthCheckItem("心电图", 50, "用于检查心电图.");
                bloodPressure = new HealthCheckItem("血压", 20, "用于检查血压.");
                bloodTest = new HealthCheckItem("血常规", 20, "用于检查血常规.");
    
                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.Items.Add("请选择");
    
                foreach (HealthCheckItem item in AllItems)
                {
                    cboItems.Items.Add(item.Name);
                }
               
                //默认第一项被选中
                this.cboItems.SelectedIndex = 0;
    
            }

    五:生成默认套餐数据 以及 加载体检套餐下拉列表

             //生成默认套餐数据
            public 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);
            
            }
            //加载体检套餐下拉列表
            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;
    
    
            }

    六:在Load事件中调用方法

       private void frmMain_Load(object sender, EventArgs e)
            {
               this.lblSetName.Text = "";
                this.lblSetPrice.Text = "";
    
                //初始化所有检查项目
                InitItems();
    
                //初始化默认套餐
                InitSets();
    
                //加载下拉列表框
                InitHealthSetList();
    
                btnAdd.Enabled = false;
                btnDel.Enabled = false;
    
               this.dgvHealthList.AutoGenerateColumns = false;
    
            }

    七:当套餐下拉框选择项发生改变时,需要加载所选套餐下对应的体检项目

           //填充套餐的DataGridView 
            private void UpdateSet(HealthCheckSet set)
            {
                dgvHealthList.DataSource = new BindingList<HealthCheckItem>(set.Items);
    
            }
            //套餐列表
            private void cboSets_SelectedIndexChanged(object sender, EventArgs e)
            {
                string setName = this.cboSets.Text;
                if (setName == "请选择")
                {
                    this.dgvHealthList.DataSource = null;
                    lblSetName.Text = "";
                    lblSetPrice.Text = "";
                    return;
                
                }
                //设置套餐名称
                lblSetName.Text = this.HealthSet[setName].Name;
    
                //设置套餐总价
                lblSetPrice.Text = this.HealthSet[setName].Price.ToString();
              
                //更新套餐检查项目
                UpdateSet(HealthSet[setName]);
    
                //删除按钮为可用状态
                btnDel.Enabled = true;
            }

    八:在DataGridView中添加项目。判断是否已经存在要添加的项目,若不在要添加项目的集合中,则执行添加操作

            //添加
            private void btnAdd_Click(object sender, EventArgs e)
            {
                if (this.cboItems.SelectedIndex==0)
                {
                    MessageBox.Show("请选择一个项目!");
                    return;
                }
                string cboSetText = this.cboSets.Text;
                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;
    
                    //刷新窗体集合价格
                    this.lblSetPrice.Text = this.HealthSet[cboSetText].Price.ToString();
    
                    MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("该项目已存在!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
    
                }
            }

    九:实现删除体检套餐信息

            //删除项目
            private void btnDel_Click(object sender, EventArgs e)
            {
                string setNames = this.cboSets.Text;
                if (this.dgvHealthList.SelectedRows.Count == 0)
                {
                    MessageBox.Show("没有选择删除项!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                    return;
                }
    
                //获取选中项目的索引
                int index = this.dgvHealthList.SelectedRows[0].Index;
    
                //删除检查项
                this.HealthSet[setNames].Items.RemoveAt(index);
    
                //重新计算价格
                this.HealthSet[setNames].CalcPrice();
    
                //更新DataGridView显示
                UpdateSet(HealthSet[setNames]);
                
                //重设标签显示
                lblSetName.Text = setA.Name;
    
                string cboSetText = this.cboSets.Text;
    
                lblSetPrice.Text = this.HealthSet[cboSetText].Price.ToString();
    
                MessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

    十:在套餐列表中添加套餐,通过添加dictionary<K,V>中的Key值来添加套餐,并刷新下拉列表。

            //添加套餐
            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();
                    this.HealthSet.Add(this.txtHealthName.Text, Hch);
    
                    this.InitHealthSetList();
    
                    //向下拉框添加显示的内容
                    this.cboSets.SelectedIndex = this.HealthSet.Count;
                    lblSetName.Text = cboItems.Text;
                    Hch.Name = cboSets.Text;
    
                    MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }

    十一:未添加项目时添加按钮为禁用状态,添加时为可用

            //检查项目
            private void cboItems_SelectedIndexChanged(object sender, EventArgs e)
            {
               
                if (this.cboSets.Text != "请选择")
                {
                    this.btnAdd.Enabled = true;
    
                }
                else
                {
                    this.btnAdd.Enabled = false;
                }
    
            }
  • 相关阅读:
    如何用js判断一个对象是不是Array
    js实现数组去重怎么实现?
    点击一个ul的五个li元素,分别弹出他们的序号,怎么做?
    盒子模型
    13. 查看网络端口、配置网络
    12. 查看系统硬件配置
    11. 系统状态管理
    9. iptables 配置
    10. 编译软件包
    8. 管理软件包
  • 原文地址:https://www.cnblogs.com/WJ-163/p/5369925.html
Copyright © 2020-2023  润新知