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;
                }
    
            }
    复制代码
    复制代码
    复制代码
  • 相关阅读:
    使用NBU进行oracle异机恢复
    mycat偶尔会出现JVM报错double free or corruption并崩溃退出
    exp导出数据时丢表
    service_names配置不正确,导致dg创建失败
    XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
    HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端
    java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类
    【JAVA集合框架一 】java集合框架官方介绍 Collections Framework Overview 集合框架总览 翻译 javase8 集合官方文档中文版
    java内部类深入详解 内部类的分类 特点 定义方式 使用
    再谈包访问权限 子类为何不能使用父类protected方法
  • 原文地址:https://www.cnblogs.com/6zhi/p/5373422.html
Copyright © 2011-2022 走看看