第5章体检套餐管理系统1,课程内容回顾
第1章:深入.NET框架
.NET框架组件
CLR的作用及组成
.NET程序编译过程
.NET核心类库及命名空间
第2章深入C#数据类型
类、对象、属性、封装
类图
结构
拆箱装箱
值类型和引用类型
静态成员和静态方法
操作集合实现元素的增、删、查、遍历
ArrayList
Hashtable
操作泛型集合实现元素的增、删、查、遍历
List
Dictionary
泛型
第4章深入类的方法
构造函数
方法重载
类之间通信
2,知识梳理
类和对象
对象
类
类和对象的关系
创建类:
创建类的属性:只读、只写、验证逻辑
方法:无参无返回值、带参无返回值、无参有返回值、带参有返回值
构造函数:有参构造函数、无参构造函数
静态方法
对象间互操作
对象相互协同工作,共同完成软件功能
封装
消息传递
C#数据类型
基本数据类型
枚举
接口
集合
列表
02,字典
哈希表Hashtable
字典Dictionary
03,队列Queue
04,栈
Stack
显示控件数据绑定
DataGridView控件
绑定列表集合List
设置DataSource属性为BindingList
绑定字典集合Dictionary
借助BindingSource对象设置DataSource
ListView控件
绑定集合信息
体检套餐管理系统
关键思路和代码分析:
首先可以功能提取出两个类,一个是HealthCheckItem(检查项目类)和HealthCheckItem(体检套餐类)。首先我们要理清两个类的关系,一项套餐中可以包含多项项目检查。
HealthCheckItem:包括项目名称、单价和描述3个属性
例如:肝功能、用于检查肝功能、60
然后写一个带参构造函数,对这三个字段赋值
HealthCheckSet:包括要检查的项目、套餐名称、总价(所有要检查项目之和)
所以这里我们就要考虑检查项目的类型:
可以定义一个泛型集合来存储项目的类型,如List
然后写2个构造函数对List
进行初始化,如下
最后该类还需要一个套餐总价计算方法
窗体加载时需要初始化几个项目:
查看、删除套餐体检项目
编写UpdateSet(HealthCheckSetset)方法,实现DataGridView控件重新绑定集合对象
体检项目变更时,需要调用CalcPrice()方法重新计算总价
关键代码:
添加体检项目
从体检项目中选择一项,单击“添加”按钮,将选中项添加到泛型集合,并重新绑定DataGridView
重点:判断添加的体检项目在现有套餐中是否存在
新建套餐
需求说明:录入套餐名称,点击“确定”,将新建的套餐添加到套餐集合。
体检套餐管理系统思路剖析
今天我们来看下体检套餐管理系统如何书写!
首先我们来看下系统的效果图,如下
我们需要清楚的是该项目主要练习泛型集合List
书写该系统前,大家先不必考虑功能如何实现,而是先将需求搞清楚,当需求明确后,功能就变得简单了。
需求:为了提高医务人员的工作效率,我们需要开发一款管理系统。我们都知道一个套餐可以包含多个体检项目,就如大家购买的手机套餐:提供了免费短信和流量等多项服务。
思路剖析:
1.根据需求分析,我们可以提取出两个类,一个是套餐类(HealthCheckSet),一个是体检项目类(HealthCheckItem).
体检项目类:
套餐类(HealthCheckSet)内容:
在窗体中做一些初始化工作
首先,我们知道套餐可能有N个,体检项目也有很多,所以我们需要考虑使用集合来存储对应的数据。如下在内存中定义一些容器来保存我们关心的数据。
当套餐下拉框选择项发生改变时,需要加载所选套餐下对应的体检项目。
分析到这里相信大家对这个项目已的思路已经有了一定的了解,剩下的内容就由大家来完成了。
接下来我来写一下一些重要的代码!!
首先要先创建两个类来存储
1.
publicclassHealthCheckSet{//HealthCheckItem的集合publicList
//套餐价格阿publicintPrice{get;set;}
//套餐名称publicstringName{get;set;}
//无参构造publicHealthCheckSet(){}
//带参构造publicHealthCheckSet(stringname,List
2.
publicclassHealthCheckItem{//项目描述publicstringDescription{get;set;}//项目名称publicstringName{get;set;}//项目价格publicintPrice{get;set;}
//无参构造publicHealthCheckItem(){}
//带参构造publicHealthCheckItem(stringname,stringdescription,intprice){this.Name=name;this.Price=price;this.Description=description;}}}
然后是要写在logd事件里的东西:
//建立所有检查项目集合//List
//建立套餐中的检查项目集合List
//使用字典保存套餐集合Dictionary
//初始化检查项目HealthCheckItemitem,item2,item3,item4,item5,item6,item7;
//定义一个默认套餐HealthCheckSetmoren;
//初始化检查项目的方法publicvoidmain(){item=newHealthCheckItem("身高","用于检查身高",10);item2=newHealthCheckItem("体重","用于检查体重",5);item3=newHealthCheckItem("视力","用于检查视力",15);item4=newHealthCheckItem("听力","用于检查听力",20);item5=newHealthCheckItem("肝功能","用于检查肝功能",100);item6=newHealthCheckItem("B超","用于检查B超",10);item7=newHealthCheckItem("心电图","用于检查心电图",100);
Alllist.Add(item.Name,item);Alllist.Add(item2.Name,item2);Alllist.Add(item3.Name,item3);Alllist.Add(item4.Name,item4);Alllist.Add(item5.Name,item5);Alllist.Add(item6.Name,item6);Alllist.Add(item7.Name,item7);
//dictionary.Add(item.Name,item);
}
//生成默认套餐数据publicvoidyuan(){list.Add(item);list.Add(item2);list.Add(item3);
moren=newHealthCheckSet("入学体检",list);//计算价格moren.CalcPrice();
this.dictionary.Add("入学体检",moren);
//套餐列表下拉框的加载方法publicvoidcombox(){cbm_sum.Items.Clear();cbm_sum.Items.Add("--请选择--");foreach(stringitemindictionary.Keys){cbm_sum.Items.Add(item);}//默认第一项为选中cbm_sum.SelectedIndex=0;}//检查项目下拉框的加载方法publicvoidcombox2(){cmb_xiang.Items.Clear();cmb_xiang.Items.Add("--请选择--");foreach(stringiteminAlllist.Keys){cmb_xiang.Items.Add(item);}//默认第一项为选中cmb_xiang.SelectedIndex=0;}privatevoidFrmMain_Load(objectsender,EventArgse){main();yuan();combox();combox2();
//添加套餐privatevoidbut_add_Click(objectsender,EventArgse){if(txt_name.Text!=""){if(dictionary.Keys.Contains(txt_name.Text)){MessageBox.Show("已经有该套餐了","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Error);return;}else{//给health实例化List
}else{MessageBox.Show("添加的不能为空!","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Error);}}//填充套餐的DataGridViewpublicvoidUpdateSet(HealthCheckSetset){if(set.Item==null){//给DataGridView的数据源赋空值dgv.DataSource=newBindingList
//选择套餐privatevoidcbm_sum_SelectedIndexChanged(objectsender,EventArgse){
stringsetName=cbm_sum.Text;if(cbm_sum.Text=="--请选择--"){//给DataGridView的数据源赋空值dgv.DataSource=newBindingList
lab_xianshiname.Text="";cmb_xiang.Text="";lab_xianshiprice.Text="";but_new.Enabled=false;return;
}else{lab_xianshiname.Text=setName;if(dictionary[setName]!=null){//根据套餐名给DataGridView绑定数据UpdateSet(dictionary[setName]);}else{//给DataGridView的数据源赋空值dgv.DataSource=newBindingList
//删除privatevoidbut_shan_Click(objectsender,EventArgse){stringkey=dgv.SelectedRows[0].Cells[1].Value.ToString();this.dictionary[cbm_sum.Text].Item.Remove(Alllist[key]);
dgv.DataSource=newBindingList
//添加项目privatevoidbut_new_Click(objectsender,EventArgse){stringname=cmb_xiang.Text;if(!dictionary[cbm_sum.Text].Item.Contains(Alllist[name])){dictionary[cbm_sum.Text].Item.Add(Alllist[name]);MessageBox.Show("添加成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);dgv.DataSource=newBindingList
//添加按钮的是否可用privatevoidcmb_xiang_SelectedIndexChanged(objectsender,EventArgse){
if(cmb_xiang.Text=="--请选择--"||cbm_sum.Text=="--请选择--"){but_new.Enabled=false;}else{but_new.Enabled=true;}}
privatevoidgb_add_Enter(objectsender,EventArgse){
privatevoidgb_main_Enter(objectsender,EventArgse){
privatevoidtxt_name_TextChanged(objectsender,EventArgse){
privatevoidlab_name_Click(objectsender,EventArgse){
privatevoiddgv_CellContentClick(objectsender,DataGridViewCellEventArgse){
privatevoidlab_xiang_Click(objectsender,EventArgse){
privatevoidlab_xianshiprice_Click(objectsender,EventArgse){
privatevoidlab_price_Click(objectsender,EventArgse){
privatevoidlab_xianshiname_Click(objectsender,EventArgse){
privatevoidlabname_Click(objectsender,EventArgse){
privatevoidlab_sum_Click(objectsender,EventArgse){
privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){