体检套餐项目总结
首先可以功能提取出两个类,一个是 HealthCheckItem (检查项目类)和HealthCheckItem(体检套餐类)。首先我们要理清两个类的关系,一项套餐中可以包含多项项目检查。
HealthCheckItem:包括项目名称、单价和描述3个属性
public HealthCheckItem(string name,int price,string description)
{
//this
this.Name = name;
this.Description = description;
this.Price = price;
}
HealthCheckSet:包括要检查的项目、套餐名称、总价(所有要检查项目之和)
所以这里我们就要考虑检查项目的类型:
可以定义一个泛型集合来存储项目的类型,如List<HealthCheckItem>
然后写2个构造函数对List<HealthCheckItem>
进行初始化,如下
最后该类还需要一个套餐总价计算方法
//套餐计算方法
public void CalcPrice()
{
int totalPrice = 0;
foreach (HealthCheckItem item in items)
{
totalPrice += item.Price;
}
this.price =totalPrice;
}
窗体加载时需要初始化几个项目:
添加套餐 绑定数据
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();
//将套餐对对象添加到Dictionary中
this.HealthSet.Add(this.txtHealthName.Text, Hch);
this.InitHealthSetList();
//下拉框显示刚添加的内容
this.cboSets.SelectedIndex = this.HealthSet.Count;
lblSetName.Text = cboSets.Text;
Hch.Name = cboSets.Text;
MessageBox.Show("添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.txtHealthName.Text = string.Empty;
this.btnAdd.Enabled = true;
this.btnDel.Enabled = true;
}
}
//绑定套餐到组合框
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;
this.btnDel.Enabled = true;
}
//创建Item对象并保存到集合中
public void InitItems()
{
height = new HealthCheckItem("身高", 6, "用于检查身高");
weight = new HealthCheckItem("体重", 8, "用于检查体重.");
sight = new HealthCheckItem("视力", 10, "用于检查视力.");
hearing = new HealthCheckItem("听力", 12, "用于检查听力.");
liverFun = new HealthCheckItem("肝功能", 50, "用于检查肝功能.");
bWaves = new HealthCheckItem("B超", 40, "用于检查B超.");
ekg = new HealthCheckItem("心电图", 50, "用于检查心电图.");
bloodPressure = new HealthCheckItem("血压", 30, "用于检查血压.");
bloodTest = new HealthCheckItem("血常规", 30, "用于检查血常规.");
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.SelectedIndex = 0;
}
//默认套餐
private 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);
}
//添加项目
private void btnAdd_Click(object sender, EventArgs e)
{
string cboSetText = this.cboSets.Text;
if (this.cboItems.SelectedIndex==0)
{
MessageBox.Show("请选择一个项目");
return;
}
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; //刷新窗体集合A名称
this.lblSetPrice.Text = this.HealthSet[cboSetText].Price.ToString(); //刷新集合A价格
MessageBox.Show("添加成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("该项目存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
//删除
private void btnDel_Click(object sender, EventArgs e)
{
string setName = this.cboSets.Text;
if (this.dgvHealthList.SelectedRows.Count == 0)
{
MessageBox.Show("没有选择删除项。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int index = this.dgvHealthList.SelectedRows[0].Index;
this.HealthSet[setName].Items.RemoveAt(index);
this.HealthSet[setName].CalcPrice();//重新计算价格
UpdateSet(this.HealthSet[setName]);
lblSetName.Text = setA.Name;
string cboSetText = this.cboSets.Text;
lblSetPrice.Text = this.HealthSet[cboSetText].Price.ToString();
MessageBox.Show("删除成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
//当体检项目组合框某一个被选中时
private void cboSets_SelectedIndexChanged(object sender, EventArgs e)
{
string setName = this.cboSets.Text;
if (setName == "请选择")
{
this.dgvHealthList.DataSource = new BindingList<HealthCheckItem>();
lblSetName.Text = "";
lblSetPrice.Text = "";
return;
}
lblSetName.Text = this.HealthSet[setName].Name;
lblSetPrice.Text = this.HealthSet[setName].Price.ToString();
UpdateSet(HealthSet[setName]);
this.btnDel.Enabled = true;
}
//更新套餐功能
private void UpdateSet(HealthCheckSet set)
{
this.dgvHealthList.DataSource = new BindingList<HealthCheckItem>(set.Items);
}