体检套餐管理系统 -- Dictionary<K,V>双列集合
时间:2022-05-04
本文章向大家介绍体检套餐管理系统 -- Dictionary<K,V>双列集合,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文章为 Dictionary<K,V>双列集合开发项目,如需要List<T>单列集合开发的此项目,请到楼主博客园寻找
博客网址:http://www.cnblogs.com/lsy131479/
窗体
一.首先创建项目类
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 Dictionary<string, HealthCheckItem> items = new Dictionary<string, 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 Dictionary<string, HealthCheckItem>{ get => items; set => items = value; }
}
三.主窗体代码
/// <summary>
/// 体检套餐管理系统 -- Dictionary<K,V>双列集合
/// </summary>
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
private void FrmMain_Load(object sender, EventArgs e)
{
//删除多余列
this.dataGridView1.AutoGenerateColumns = false;
//清楚多余行
this.dataGridView1.AllowUserToAddRows = false;
/*
* 套餐下拉框初始化
* */
HealthCheckSet set0 = new HealthCheckSet("请选择");
HealthCheckSet set1 = new HealthCheckSet("入学体检");
set.Add(set0.Name, set0);
set.Add(set1.Name, set1);
AddExamCbo();
}
//刷新项目下拉框
public void AddExamCbo()
{
BindingSource source = new BindingSource();
source.DataSource = set.Keys;
this.cboExams.DataSource = source;
}
//套餐集合
Dictionary<string, HealthCheckSet> set = new Dictionary<string, HealthCheckSet>();
//初始化项目集合
Dictionary<string, HealthCheckItem> allItems = new Dictionary<string, 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.Add(item1.Name, item1);
allItems.Add(item2.Name, item2);
allItems.Add(item3.Name, item3);
allItems.Add(item4.Name, item4);
allItems.Add(item5.Name, item5);
allItems.Add(item6.Name, item6);
allItems.Add(item7.Name, item7);
this.cboPhy.DisplayMember = "name";
BindingSource source = new BindingSource();
source.DataSource = allItems.Keys;
this.cboPhy.DataSource = source;
}
private void cboExams_SelectedIndexChanged(object sender, EventArgs e)
{
/*
* 改变下拉框下标,判断下标。改变状态
* */
this.lblNames.Text = this.cboExams.Text;
RenovateDgv();
Btn();
if (this.cboExams.SelectedIndex > 0)
{
this.btnAdd.Enabled = true;
AddPhyCbo();
}
else
{
this.btnAdd.Enabled = false;
this.cboPhy.DataSource = null;
}
}
private void btnNew_Click(object sender, EventArgs e)
{
//非空验证
if (txtNewName.Text == "" || txtNewName.Text == null)
{
MessageBox.Show("请输入套餐名称!");
return;
}
/*
* 集合添加套餐名
* 并刷新下拉框
* */
HealthCheckSet set3 = new HealthCheckSet(this.txtNewName.Text);
set.Add(set3.Name, set3);
AddExamCbo();
this.cboExams.Text = set3.Name;
MessageBox.Show("添加成功!");
}
public void AddDgv()
{
//ToList()将双列集合转为单列集合
//Contains()在单列集合中寻找是否已存在该项
if (set[cboExams.Text].Items.Keys.ToList().Contains(this.cboPhy.Text))
{
MessageBox.Show("您已添加过此项!");
return;
}
/*
* 向套餐内添加项目
* */
set[cboExams.Text].Items.Add(cboPhy.Text, allItems[cboPhy.Text]);
Btn();
MessageBox.Show("添加成功!");
}
public void RenovateDgv()
{
/*
* 刷新datagridview
* */
BindingSource source = new BindingSource();
source.DataSource = set[cboExams.Text].Items.Values;
dataGridView1.DataSource = source;
}
private void btnAdd_Click(object sender, EventArgs e)
{
/*
* 添加套餐项目
* */
AddDgv();
RenovateDgv();
}
public void Btn()
{
/*
* 由集合内是否有元素,来改变删除按钮的状态
* */
if (set[cboExams.Text].Items.Count > 0)
{
this.btnDel.Enabled = true;
}
else
{
this.btnDel.Enabled = false;
}
/*
* 计算套餐总金额
* 并刷新控件
* */
set[cboExams.Text].Price = 0;
foreach (KeyValuePair<string, HealthCheckItem> it in set[cboExams.Text].Items)
{
set[cboExams.Text].Price += it.Value.Price;
}
this.lblPrices.Text = set[cboExams.Text].Price.ToString();
}
private void btnDel_Click(object sender, EventArgs e)
{
/*
* 由键来移除指定的集合元素
* 并刷新控件显示的值与状态
* */
set[cboExams.Text].Items.Remove(this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString().Trim());
RenovateDgv();
Btn();
MessageBox.Show("删除成功!");
}
}
- 让IoC动态解析自定义配置(提供基于Unity的实现)
- 如何让ASP.NET默认的资源编程方式支持非.ResX资源存储
- 在VS中通过建立依赖关系使文件结构更清晰
- 一个关于ConfigurationManager.GetSecion方法的小问题
- 追踪记录每笔业务操作数据改变的利器——SQLCDC
- 一个完整的用于追踪数据改变的解决方案
- C# 4.0新特性-"协变"与"逆变"以及背后的编程思想
- 通过内存分析工具来证明字符串驻留机制
- 如果在BackgroundWorker运行过程中关闭窗体…
- 从数据到代码——基于T4的代码生成方式
- 解决T4模板的程序集引用的五种方案
- 编写T4模板进行代码生成无法避免的两个话题:"Assembly Locking"&"Debug"
- 从yield关键字看IEnumerable和Collection的区别
- 让“链式调用(方法链)”更加自然一点
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go 每日一库之 twirp
- Go 每日一库之 casbin
- 元数据管理|Hive Hooks和Metastore监听器介绍
- Go 每日一库之 fyne
- 实时数仓|基于Flink1.11的SQL构建实时数仓探索实践
- 使用 fyne 编写一个计算器程序
- Go 每日一库之 negroni
- Go 每日一库之 cli
- Go 每日一库之 cron
- Go 每日一库之 mapstructure
- Go 每日一库之 jobrunner
- 在本地运行 fyne 官网
- Python-科学计算-pandas-12-df单列计算
- JDK15就要来了,你却还不知道JDK8的新特性!
- 八佰:用Python看知乎 vs 豆瓣的战斗