使用泛型集合写的一个小项目

  1.要实现新建体检套餐,并且如果已经有了该体检套餐就不能再次新建,

  2.要实现套餐列表动态更新,没添加一个体检套餐,在套餐列表里就自动添加一项;

  3.向当前套餐类表里添加检查项目,一个体检套餐里不可以有重复的体检项目;

  4.动态计算套餐当前价格;

  5.动态的将套餐列表当前套餐的体检项目显示在dgvlist中;

  6.实现删除体检项目: 

下面是实现的效果图:

新建体检套餐:

给体检套餐添加体检项目并计算套餐价格:

删除选中的体检项目:

在套餐列表中选择体检套餐可以查看具体的体检项目和套餐价格:

不能添加重复的套餐,每个套餐不能有重复的体检项目:

下面是代码:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 体检套餐系统
{
public class HC
{
//体检项目类
public HC()
{
}
//代参构造方法用于初始化成员变量
public HC(string name, string desc, int price)
{
this.Name = name;
this.Price = price;
this.Desc = desc;
}
public string Name { get; set; }
public string Desc { get; set; }
public int Price { get; set; }
}
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 体检套餐系统
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//声明一个HC类型的集合,保存初始化后的体检项目
List<HC> hc1 = new List<HC>()
{
new HC("身高","用于检查身高",),
new HC("体重","用于检查体重",),
new HC("肝功能","用于检查肝功能",),
new HC("B超","用于检查身体内部",),
new HC("心电图","用于检查心电图",),
new HC("听力","用于检查听力",),
};
//声明一个双列集合,用于保存体检套餐,套餐名为key,体检项目为value;
Dictionary<string, List<HC>> hc2 = new Dictionary<string, List<HC>>(); private void Form1_Load(object sender, EventArgs e)
{
//把体检项目的名称绑定在下拉列表cbo2中
foreach (HC item in hc1)
{
cbo2.Items.Add(item.Name);
}
}
//将体检套餐的名称绑定在下拉列表cbo1中
private void info()
{
cbo1.Items.Clear();
foreach (string item in hc2.Keys)
{
cbo1.Items.Add(item);
}
}
//新建体检套餐的方法
private void 新建_Click(object sender, EventArgs e)
{
int error = ;
foreach (string item in hc2.Keys)
{
if (item == txt1.Text)
{ error = ; }
}
if(txt1.Text!=""&&error!=)
{
hc2.Add(txt1.Text, new List<HC>());
info();
MessageBox.Show("添加成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else if (error == )
{
MessageBox.Show("已经有该套餐了不能再次添加", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
MessageBox.Show("套餐名不能为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); }
}
//向选中的体检套餐添加体检项目的方法
private void button2_Click(object sender, EventArgs e)
{
int error = ;
foreach (string item in hc2.Keys)
{
if (item == cbo1.Text)
{
for (int i = ; i < hc2[item].Count; i++)
{
if (hc2[item][i].Name == cbo2.Text)
{
error = ;
}
}
}
}
HC h = new HC();
if (cbo1.Text != "" && cbo2.Text !=""&&error==)
{
foreach (HC item in hc1)
{
if (item.Name == cbo2.Text)
{
h = item;
}
}
foreach (string item in hc2.Keys)
{
if (item == cbo1.Text)
{
hc2[item].Add(h); }
}
}
else if (error == )
{
MessageBox.Show("不能有重复的体检项目", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
MessageBox.Show("请补全体检套餐信息", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
info1();
} private void cbo1_SelectionChangeCommitted(object sender, EventArgs e)
{
info1();
}
//动态更新体检套餐的方法
private void info1()
{
int money = ; foreach (string item in hc2.Keys)
{
if (cbo1.SelectedItem.ToString() == item)
{
for (int i = ; i <hc2[item].Count; i++)
{
money += hc2[item][i].Price;
}
dataGridView1.DataSource = new BindingList<HC>(hc2[item]);
lb1.Text = cbo1.SelectedItem.ToString();
lb2.Text = money.ToString();
}
} }
//删除的方法
private void button3_Click(object sender, EventArgs e)
{ foreach (string item in hc2.Keys)
{
if (item == cbo1.SelectedItem.ToString())
{
if (dataGridView1.SelectedRows.Count >= )
{
for (int i = ; i < hc2[item].Count; i++)
{
if (hc2[item][i].Name == dataGridView1.SelectedRows[].Cells[].Value.ToString())
{
DialogResult dr = MessageBox.Show("是否删除", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
if (dr == DialogResult.Yes)
{
hc2[item].RemoveAt(i);
info1();
MessageBox.Show("删除成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
}
}
} }
} private void txt1_TextChanged(object sender, EventArgs e)
{ } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{ }
}
}
 

C#体检套餐项目的更多相关文章

  1. 字典集合Dictionary<K,V>和构造的应用==>>体检套餐项目

    效果 首先,我们先来准备我们需要的类 1.检查项目类 using System; using System.Collections.Generic; using System.Linq; using ...

  2. 大型三甲医院医疗体检信息管理系统源码 PEIS 体检科软件 CS

    详情请点击查看 开发环境 :VS2008 + C# + SQL2000 功能介绍: 1:设置:操作员设置   系统功能设置    用户组权限设置  公告打印设置  数据字典设置  临床类型设置  体检 ...

  3. 【深入学习.Net】.泛型集合【体检管理系统】

    基于泛型List的体检管理系统(蜗牛爬坡) 第五章[体检管理系统] 一.项目展示图(基于.net core6.0) 二.首先准备两个Model类 HealthCheckItem(项目类):Name(项 ...

  4. S2---深入.NET平台和C#编程的完美总结

    1.NET简单解说 l 面向对象提升 OOP(Object Oriented  Programming)面向对象编程 AOP:(Aspache  Oriented Programming):面向切面编 ...

  5. 2014年5月份第4周51Aspx源码发布详情

    最基本wcf服务器与客户端交互源码  2014-5-26 [VS2003]源码描述:本示例讲解的是最基本的wcf语法,示例浏览请先运行服务端,然后在运行客户端,适合想要学习wcf的初学者.仅供借鉴,欢 ...

  6. 对于家政020 APP平台如何走出资本寒冬?

    成都亿合科技小编了解到,随着O2O烧钱大战过去,网络上流传的一份O2O项目死亡名单上显示,近年来,汽车.社区.旅游.教育等16个领域的多个O2O项目关门大吉,仅外卖餐饮O2O项目倒闭的就有十几个.只有 ...

  7. impdp因致命错误终止 ORA-7445 [kpodpals]

    基本要素 前天好不easy成功给用户把数据全库导出,今天用户又告知导出的数据无法导入,首先就问用户有什么错误提示,给我的回答是就一个'作业"SYSTEM"."SYS_IM ...

  8. iPhone 6/6 Plus国行版开卖当日抢购攻略

    在距离苹果首批发售时隔一个月也就是北京时间10月17日,苹果iPhone 6.iPhone 6 Plus终于也要在中国大陆开卖,众多国内用户终于有机会安排自己的购机计划.据不完全数据显示,目前iPho ...

  9. MyBatis-xml配置SQL文件中,传入List数组、基本类型String、int……、与自定义类型的方法

    //基本类型 @Override public String queryItemNumber(String packId) throws Exception { // TODO Auto-genera ...

随机推荐

  1. JS 对象封装的常用方式

    JS是一门面向对象语言,其对象是用prototype属性来模拟的,下面,来看看如何封装JS对象. 常规封装 function Person (name,age,sex){ this.name = na ...

  2. URI编码解码和base64

    概述 对于uri的编解码,在js中有3对函数,分别是escape/unescape,encodeURI/decodeURI,encodeURIComponent/decodeURIComponent. ...

  3. 跨域之URL

    在介绍怎么跨域之前,先来弄清楚一个概念:URL.以下内容摘自维基百科. 统一资源定位符(或称统一资源定位器/定位地址.URL地址等,英语:Uniform / Universal Resource Lo ...

  4. C# 复制指定节点的所有子孙节点到新建的节点下

    XML结构: 新建一个mask_list节点,一个procedure节点,将上面的mask_list和procedure节点的所有子孙节点添加到新建的mask_list和procedure节点 Xml ...

  5. 设计模式(六)原型模式(Prototype Pattern)

    一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在 ...

  6. css图片精灵

    <ul> <li class="top"> <em>01</em> <p><a href="http:/ ...

  7. 安装Oracle时出现环境变量Path的值大于1023的解决办法

    出现的情况我就不说了,直接重点: 计算机->属性->高级系统设置->高级->环境变量 1)在"系统变量"编辑Path,全选将其中的路径全部复制出来放到文本文 ...

  8. Jquery更改table中的内容(一)

    css部分: .tab{ border:solid 1px #00aaee; text-align: left; margin:20px;}.tab tr{ border-top: solid 1px ...

  9. HTML学习(零)简介

    一)HTML介绍 它是一个超文本标记语言,静态页面. 所谓的'超文本'就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 主要的结构为包括"头"部分(英语:Head).和 ...

  10. 可空类型(Nullable<T>)及其引出的关于explicit、implicit的使用

    问题一:Nullable<T>可赋值为null 先看两行C#代码 int? i1 = null; int? i2 = new int?(); int? 即Nullable<int&g ...