体检套餐管理系统 -- List<T>单列集合

本文章为List<T>单列集合开发项目,如需要 Dictionary<K,V>双列集合开发的此项目,请到楼主博客园寻找

博客网址:http://www.cnblogs.com/lsy131479/

窗体

一.首先定义项目类

 
 /// <summary>
    /// 项目类
    /// </summary>
public class HealthCheckItem
    {
        //项目描述
        private string description;
        //项目名称
        private string name;
        //项目价格
        private int price;

        //无参构造
        public HealthCheckItem()
        {
        }

        //有参构造
        public HealthCheckItem(string description, string name, int price)
        {
            this.description = description;
            this.name = name;
            this.price = price;
        }

        public string Description { get => description; set => description = value; }
        public string Name { get => name; set => name = value; }
        public int Price { get => price; set => price = value; }
    }

二.定义套餐类

  /// <summary>
    /// 套餐类
    /// </summary>
   public class HealthCheckSet
    {
        //套餐名
        private string name;
        //套餐总价格
        private int price;
        //存储套餐内的项目
        private List<HealthCheckItem> items = new List<HealthCheckItem>();

        //无参构造
        public HealthCheckSet()
        {
        }
        //有参构造
        public HealthCheckSet(string name)
        {
            this.name = name;
            
        }

        

        public string Name { get => name; set => name = value; }
        public int Price { get => price; set => price = value; }
        public List<HealthCheckItem> Items { get => items; set => items = value; }
    }

 三.主窗体代码

  /// <summary>
        /// 体检套餐管理系统 -- List<T>单列集合
        /// </summary>
        public FrmMain()
        {
            InitializeComponent();
        }

        //存储套餐类的集合
        List<HealthCheckSet> Set = new List<HealthCheckSet>();
        private void FrmMain_Load(object sender, EventArgs e)
        {
            //删除多余的列
            this.dgvHealth.AutoGenerateColumns = false;
            //删除多余的行
            this.dgvHealth.AllowUserToAddRows = false;

            /*
             * 初始化套餐类集合
             * 调用刷新datagridview的方法
             * */
            HealthCheckSet set0 = new HealthCheckSet("请选择");
            HealthCheckSet set1 = new HealthCheckSet("入学体检");
            Set.Add(set0);
            Set.Add(set1);
            AddExamCbo();
        }

        //存储所有套餐内项目的集合
        public List<HealthCheckItem> allItems = new List<HealthCheckItem>();

        public void AddPhyCbo()
        {
            //清空集合
            allItems.Clear();

            //集合初始化
            HealthCheckItem item1 = new HealthCheckItem("用于检查身高。", "身高", 5);
            HealthCheckItem item2 = new HealthCheckItem("用于检查体重。", "体重", 5);
            HealthCheckItem item3 = new HealthCheckItem("用于检查肝功能。", "肝功能", 50);
            HealthCheckItem item4 = new HealthCheckItem("用于检查视力。", "视力", 5);
            HealthCheckItem item5 = new HealthCheckItem("用于检查听力。", "听力", 5);
            HealthCheckItem item6 = new HealthCheckItem("用于检查B超。", "B超", 80);
            HealthCheckItem item7 = new HealthCheckItem("用于检查心电图。", "心电图", 100);
            allItems.AddRange(new HealthCheckItem[] { item1, item2, item3, item4, item5, item6, item7 });
            /*
             * 绑定刷新项目下拉框
             * */
            this.cboPhy.DisplayMember = "name";
            this.cboPhy.DataSource = new BindingList<HealthCheckItem>(allItems);
        }

        public void AddExamCbo()
        {
            /*
             * 绑定刷新套餐下拉框
             * */
            this.cboExams.DataSource = new BindingList<HealthCheckSet>(Set); ;
            this.cboExams.DisplayMember = "name";
        }

        private void cboExams_SelectedIndexChanged(object sender, EventArgs e)
        {
            //调用绑定刷新datagridview方法
            AddDgv();
            //调用刷新金额的方法
            CalcPrice();
            //调用删除按钮状态方法
            Btn();

            /*
             * 如果不是请选择也就是0下标还原初始状态(按钮为禁用,项目下拉框无项目)
             * 反之,按钮解除禁用状态,项目下拉框从新填充数据
             * */
            if (this.cboExams.SelectedIndex > 0)
            {
                AddPhyCbo();
                this.btnAdd.Enabled = true;
                this.lblNames.Text = cboExams.Text;
            }
            else
            {
                this.btnAdd.Enabled = false;
                this.btnDel.Enabled = false;
                this.lblNames.Text = cboExams.Text;
                this.cboPhy.DataSource = null;

            }
        }

        public void AddDgv()
        {
            /*
             * 将选中套餐的项绑定刷新datagridview
             * */
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    this.dgvHealth.DataSource = new BindingList<HealthCheckItem>(item.Items);
                    return;
                }
            }
        }

        public void item()
        {
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    foreach (HealthCheckItem it in item.Items)
                    {
                        if (it.Name.Equals(this.cboPhy.Text))
                        {
                            /*
                             * 判定是否已存在要添加的项
                             * */
                            MessageBox.Show("您已添加过此项!");
                            return;
                        }
                    }
                    foreach (HealthCheckItem it in allItems)
                    {
                        if (it.Name.Equals(this.cboPhy.Text))
                        {
                            /*
                             * 如果通过验证,可以添加,则将该项添加到集合中,并刷新datagridview与套餐价格
                             * */
                            item.Items.Add(it);
                            AddDgv();
                            CalcPrice();
                            MessageBox.Show("添加成功!");

                            return;
                        }
                    }
                    return;
                }
            }
        }
        public void CalcPrice()
        {
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    /*
                     * 计算套餐金额
                     * */
                    item.Price = 0;
                    foreach (HealthCheckItem it in item.Items)
                    {
                        item.Price += it.Price;
                    }
                    //将套餐金额赋值给控件,并显示
                    this.lblPrices.Text = item.Price.ToString();
                    return;
                }
            }
            
        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            //添加套餐项目

            item();
            Btn();
        }

        private void btnNew_Click(object sender, EventArgs e)
        {
            //非空验证
            if (txtNewName.Text == "" || txtNewName.Text == null)
            {
                MessageBox.Show("请输入套餐名称!");
                return;
            }

            /*
             * 将通过验证的套餐名称添加到集合并刷新套餐下拉框
             * */
            HealthCheckSet set = new HealthCheckSet(this.txtNewName.Text);
            Set.Add(set);

            AddExamCbo();
            this.cboExams.Text = this.txtNewName.Text;
            MessageBox.Show("添加成功!");
        }

        private void btnDel_Click(object sender, EventArgs e)
        {
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    for (int i = 0; i < item.Items.Count; i++)
                    {
                        if (item.Items[i].Name.Equals(this.dgvHealth.SelectedRows[0].Cells[0].Value.ToString()))
                        {
                            /*
                             * 删除要删除的项并刷新相关控件
                             * */
                            item.Items.RemoveAt(i);
                            AddDgv();
                            CalcPrice();
                            this.lblPrices.Text = item.Price.ToString();
                            MessageBox.Show("删除成功!");
                            Btn();
                            return;
                        }
                    }
                    return;
                }
            }
        }
        public void Btn()
        {
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    /*
                     * 判断删除按钮的状态,如果集合里有数据为启用,无数据为禁用
                     * */
                    if (item.Items.Count > 0)
                    {
                        this.btnDel.Enabled = true;
                    }
                    else
                    {
                        this.btnDel.Enabled = false;
                    }
                    return;
                }
            }
            
        }
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

ASP.NET用HttpListener实现文件断点续传

本文转载:http://www.cnblogs.com/TianFang/archive/2007/01/03/610739.html

13610
来自专栏小特工作室

基于微软企业库的AOP组件(含源码)

软件开发,离不开对日志的操作。日志可以帮助我们查找和检测问题,比较传统的日志是在方法执行前或后,手动调用日志代码保存。但自从AOP出现后,我们就可以避免这种繁琐...

24270
来自专栏林德熙的博客

win10 uwp 网络编程 带Header的WebRequest获取BufferHttpClient 使用 Cookie

上面传输的头,Head=Head+length 中的第二个Head,包含 传输者id,当前传输是传输的消息最后一段还是中间,当前传输 是服务器第消息

12810
来自专栏GreenLeaves

WCF系列教程之WCF客户端调用服务

1、创建WCF客户端应用程序需要执行下列步骤 (1)、获取服务终结点的服务协定、绑定以及地址信息 (2)、使用该信息创建WCF客户端 (3)、调用操作 (4)、...

23990
来自专栏菩提树下的杨过

.net中的认证(authentication)与授权(authorization)

注:这篇文章主要给新手看的,老手们可能会觉得没啥营养,就请绕过吧。 “认证”与“授权”是几乎所有系统中都会涉及的概念,通俗点讲: 认证(authenticat...

378100
来自专栏大内老A

我的WCF之旅(2):Endpoint Overview

WCF实际上是构建了一个框架,这个框架实现了在互联系统中各个Application之间如何通信。使得Developers和Architect在构建分布式系统中,...

23570
来自专栏更流畅、简洁的软件开发方式

一个保存数据的方法(可以切换存放的位置,可以设置密钥)

      在asp.net里面一般的生命周期都比较短,如果想要比较长久的保存数据的话,一般有选择几种方式可供选择,即cookies、ViewState、Ses...

288100
来自专栏跟着阿笨一起玩NET

System.Threading.Tasks.Task引起的IIS应用程序池崩溃

2. 从服务器端看(Windows Server 2008 + IIS 7.0),在事件日志中会出现Event ID为5010的错误:

31820
来自专栏逸鹏说道

微信扫码支付+Asp.Net MVC

这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下。 一、准备工作 使用的微信API中的统一下单方法,关键...

68960
来自专栏kwcode

ASP.NET 实现Base64文件流下载PDF

因为业务需要调用接口获取的是 Base64文件流 需要提供给客户下载PDF文档 源码部分借鉴网上,具体地址忘记了。 //Base64文件流 ...

45950

扫码关注云+社区

领取腾讯云代金券