zoukankan      html  css  js  c++  java
  • 体检套餐系统


    界面效果图:

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

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

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

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

    ④:新建套餐

    二:创建体检项目维护系统中的检查项目类(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;
                }
    
            }
    复制代码
     
     

  • 相关阅读:
    Recommended Books for Algo Trading in 2020
    Market Making is simpler than you think!
    Top Crypto Market Makers of 2020
    Top Crypto Market Makers, Rated and Reviewed
    爬取伯乐在线文章(五)itemloader
    爬取伯乐在线文章(四)将爬取结果保存到MySQL
    爬取伯乐在线文章(三)爬取所有页面的文章
    爬取伯乐在线文章(二)通过xpath提取源文件中需要的内容
    爬取伯乐在线文章(一)
    爬虫去重策略
  • 原文地址:https://www.cnblogs.com/hq-123/p/5373379.html
Copyright © 2011-2022 走看看