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

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

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

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

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

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

  6.实现删除体检项目: 

下面是实现的效果图:

新建体检套餐:

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

C#体检套餐项目-LMLPHP

删除选中的体检项目:

C#体检套餐项目-LMLPHP

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

C#体检套餐项目-LMLPHP

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

C#体检套餐项目-LMLPHP

C#体检套餐项目-LMLPHP

下面是代码:

 
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)
{ }
}
}
 
05-03 23:40