第五章 套餐管理系统

第五章项目:体检套餐

窗体搭建的效果图如下:

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

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

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

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

④:新建套餐

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

        }

时间: 04-07

第五章 套餐管理系统的相关文章

第五章 体验套餐管理系统

体检套餐管理系统 套餐含义:体检套餐是一种形象的说法,体检的项目有很多,常规的项目就有几十种,个人体质.疾病的种类.体检者对体检项目的要求各不相同,全部的体检项目大概要几百种.普通的消费者不具备医学专业知识,所以也就无法从众多的体检项目中选择适合自己的体检项目.如果选择的项目过多,则浪费体检费用,选择的项目过少,又不能对需要检测的症状进行全面检测,很容易造成漏检.经过有多年经验的专家在对疾病预防经验的综合整理后,对体检项目进行科学分组,针对人群的年龄.体质.疾病类型.健康要求而制定的科学的体检项

深入浅出Zabbix 3.0 -- 第十五章 Zabbix 协议与API

今天是六.一儿童节,祝小朋友们节日快乐!发完此文就带我家小朋友出去玩耍了. 第十五章 Zabbix 协议与API 本章将介绍和开发相关的Zabbix协议和API的内容,通过对Zabbix协议和API的深入了解,你可以利用Zabbix协议编写客户端程序并将其嵌入的产品或系统中,并将数据发送到Zabbix server,这在无法安装Zabbixagent等程序的场景(例如专用的嵌入式系统)中非常有用.你也可以利用Zabbix API开发自己的业务系统,或灵活的与现有系统整合集成. 15.1 Zabb

第五章 MySQL事务,视图,索引,备份和恢复

第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行,要么都不执行. 事务是作为最小的控制单元来使用的,特别使用与多用户同时操作的数据库系统. 2.为什么需要事务 事务(transaction)是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事务中进行的所有数据均会提交,成为数据库中永久的组成部分.如果事务执行遇到错误且

软件工程——理论、方法与实践 第五章

第五章主要讲 1.形式化方法基本概念分为形式规约.形式证明与验证.程序求精,形式证明与验证技术主要包括模型检测和定理证明. 2.时态逻辑介绍了Kripke结构:一阶线性时态逻辑以队列及其操作与汉诺塔操作规划问题为例进行讲解.计算树逻辑一般是CTL与CTL*的统称. 3.模型检测就是在软件系统的Kripke结构模型下,对以CTL*公式给出的软件性质的正确性验证. 4.Z语言是由牛津大学程序设计研究小组开发的一种形式语言,对Z语言的表示进行详细的概述与讲解,并以停车场管理系统与图书管理系统为例详细讲

2014年计算机软考《网络管理》知识点-【第五章】

51CTO学院,在软考备考季特别整理了"2014年计算机软考<网络管理>知识点",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年计算机软考<网络管理>知识点汇总  第五章 局域网软件 ☆ 网络操作系统是使网络上各计算机能方便而有效的共享网络资源.为网络用户提供所需的各种服务的 软件和有关规程的集合. 5.1操作系统概述及其发展 (1) 操作系统有以下三个发展阶段: A. 最初的操作系统是单块式的,由一组

《大道至简》第五章读后感

失败的过程也是过程,我觉得这句话很有深意,阅读完大道至简第五章,我又有了很深的感触. 首先是“做过程不是做工程”,过程是为了实现某种目的而经历的一些事情,过程有很多种,虽然经历了某种过程,但不一定能实现某种功能.做完过程的每一个阶段,并不等于做工程.做过程不是做工程的精义,也不是最终目的. 然后是“做过场”,做过场就好像是一种形式一样,做了没必要做的事情,就是浪费时间. 做工程的最终目的是实现客户的要求,工程只是一种实现的途径.最初做开发的前辈们,不用什么工程或者过程,也一样编出了程序,也一样解

大道至简第五章读后感

第五章 失败的过程也是过程 今天照样老师带领着我们阅读了大道至简第五章,阅读了<大道至简>的第五章,这章在前面的基础上又进了一步,有了技术和团队,加上有效的沟通,接下来就要接项目做工程. “虚有其表耳”,本章以<明皇实录>中的一句话来告诉我们一个深刻的道理:不要只求外表,只做形象工程,而是要透过表象,力求实质. 失败了不要紧,没有失败也就找不到自己的不足,也就不会发现自己的问题,更不用谈改进了.我们的前辈们就是在不断的失败中才总结出了“瀑布模型”“螺旋模型”等模型,方便了我们.但是

第五章 电子星球

                   第五章         电子星球   山高高兮.路长长,岁月悠悠兮.转眼空.   镇楼竹: 1. 秀竹一枝自宛然, 莫愁风雨损华年. 几番颠扑呈贞骨, 露重霜寒节更坚. 2. 纤纤凤竹长漓边, 不共山花斗野妍. 时对清流摇倩影, 溪流常伴乐怡然. 3. 坚节何愁风雨多, 晴天朗日更婆娑. 生凉不荫趋炎客, 惹得骚人为咏歌.   咏经典物理.戏现代理论物理: 在山泉水洁如冰, 溅玉飞珠迸有声. 流入大江清浊混, 滔滔何日见澄明.     一.   批驳现代理论

Linux与云计算——第二阶段 第五章:存储Storage服务器架设—分布式存储Ceph

Linux与云计算--第二阶段Linux服务器架设 第五章:存储Storage服务器架设-分布式存储Ceph 1 Ceph 配置Ceph集群 Install Distributed File System "Ceph" to Configure Storage Cluster. For example on here, Configure Cluster with 1 admin Node and 3 Storage Node like follows. | +------------