体检套餐管理系统 -- 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 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)

1、使用WCF请求与答复模式须知 (1)、客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2)、相比Duplex来讲,这种模式强调的是客户...

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

Winform开发框架之权限管理系统

本文章转载:http://www.cnblogs.com/wuhuacong/archive/2011/05/08/2040620.html

2741
来自专栏GreenLeaves

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

本文参考自http://www.cnblogs.com/wangweimutou/p/4409227.html,纯属读书笔记,加深记忆 一、简介 在前面的随笔中...

1876
来自专栏小特工作室

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

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

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

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

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

21610
来自专栏大内老A

我的WCF之旅(2):Endpoint Overview

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

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

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

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

791
来自专栏林德熙的博客

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

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

521
来自专栏恰同学骚年

自己动手模拟开发一个简单的Web服务器

开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此...

1333
来自专栏晓晨的专栏

Entity Framework Core 2.0 使用代码进行自动迁移

1203

扫码关注云+社区