先看窗体设计图,第一个是JobForm.cs,第二个是FrmCodeExe.cs,第三个是FrmTestExe.cs
接下来,帮大家分析一下下面的代码。首先创建了3个窗体和5个类。5个类可以分为两部分,第一部分是员工部分,有两个类,一个是Employee类(父类),另一个是SE类(子类),SE继承了Employee类;第二部分是工作部分,有三个类,第一个是Job类(父类),另一些是CodeJob类和TestJob类(子类),子类继承了父类。
其次就是功能方面,主要分为三个方面吧
1:将数据和数据网格视图控件绑定起,来(datagridview),主要通过DataSource属性来完成,显示在控件中
2:在Datagridview控件中设置一个右键快捷菜单,菜单中主要有两个功能,分别是执行和完成情况,当你点击执行时,先获得当前行的索引,在通过索引来获得List泛型集合中的对象,从而调用相应的Execute()方法,Execute方法中是显示相应的窗体,分别是编码窗体和测试窗体,来填写相应的值到文本框中
3最后一个功能就是快捷菜单的完成情况,当你点击完成情况时,先获得当前行的索引,在通过索引来获得List泛型集合中的对象,从而调用相应的Show()方法,Show()方法展示相应工作的完成进度,以消息框(MessageBox)的形式展现
大家如果还有什么不懂,下面还有注释帮助你理解,多看几遍就差不多就OK了
下面还会写一些有关java和网页的相关内容
如果觉得还行的话,就帮我点点关注吧!
public partial class JobFrm : Form
{
Employee empl; //定义员工对象
CodeJob code1 = new CodeJob("编码", "编码", "实现购物车模块");
CodeJob code2 = new CodeJob("编码", "编码基类", "完成项目基类编码");
TestJob test1 = new TestJob("测试", "压力测试", "测试项目已实现模块");
public JobFrm()
{
InitializeComponent();
Init();
UpdateJob();
this.gbJobs.Text = empl.Name; //重点,在分组框上显示是哪一个员工的工作列表
}
private void JobFrm_Load(object sender, EventArgs e)
{
}
//初始化某员工工作列表
public void Init()
{
List<Job> jobList = new List<Job>();
jobList.Add(code1);
jobList.Add(code2);
jobList.Add(test1);
//实例化员工对象 ,程序员对象
empl = new SE("1120", "王小毛", 24, Gender.male, 100,jobList); //100是人气值
}
//将工作列表绑定到数据网格视图控件中
public void UpdateJob()
{
this.dgvJobList.DataSource = empl.WorkList;
}
//填写执行情况
private void tsmiExecute_Click(object sender, EventArgs e)
{
//获取当前行的索引
int index = this.dgvJobList.CurrentRow.Index;
//通过索引取得泛型集合中的对象,在执行对象中重写的Execute方法
empl.WorkList[index].Execute();
}
private void tsmiAchieve_Click(object sender, EventArgs e)
{
int index = this.dgvJobList.CurrentRow.Index;
empl.WorkList[index].Show();
}
}
public partial class FrmCodeExe : Form
{
//先创建一个编码工作对象
CodeJob job = new CodeJob();
public FrmCodeExe()
{
InitializeComponent();
}
private void CodeExeForm_Load(object sender, EventArgs e)
{
}
private void btnOK_Click(object sender, EventArgs e)
{
bool isError = false;
try
{
job.CodingLines = int.Parse(this.txtLines.Text.ToString());
job.Bugs = int.Parse(this.txtBugs.Text.ToString());
job.WorkDay= int.Parse(this.txtDays.Text.ToString());
}catch(Exception ex)
{
MessageBox.Show(ex.Message);
isError = true;
}
if (!isError)
{
MessageBox.Show("提交成功!", "提示");
this.Close();
}
}
}
public partial class FrmTestExe : Form
{
//创建一个测试工作对象
TestJob job = new TestJob();
public FrmTestExe()
{
InitializeComponent();
}
private void FrmTestExe_Load(object sender, EventArgs e)
{
}
private void btnOk_Click(object sender, EventArgs e)
{
bool isError = false;
try
{
job.CaseNum = int.Parse(this.txtCaseNum.Text.ToString());
job.FindBugs = int.Parse(this.txtBugs.Text.ToString());
job.WorkDay = int.Parse(this.txtDays.Text.ToString());
}catch(Exception ex)
{
MessageBox.Show(ex.Message);
isError = true;
}
if (!isError)
{
MessageBox.Show("提价成功!", "提示");
this.Close();
}
}
}
public abstract class Job
{
private string type; //工作类型
private string description; //工作描述
private string name; //工作名称
public string Type { get => type; set => type = value; }
public string Description { get => description; set => description = value; }
public string Name { get => name; set => name = value; }
public Job(string type,string name,string description)
{
this.Type = type;
this.Description = description;
this.Name = name;
}
public Job() { }
public abstract void Execute(); //抽象方法,执行
public abstract void Show(); //显示工作的完成情况
}
class CodeJob:Job
{
public CodeJob(string type,string name,string description) : base(type, name,description) { }
public CodeJob() { }
private int codingLines; //有效编码行数
private int bugs; //目前没有解决的bug个数
private int workDay; //用时-工作日
public int CodingLines { get => codingLines; set => codingLines = value; }
public int Bugs { get => bugs; set => bugs = value; }
public int WorkDay { get => workDay; set => workDay = value; }
public override void Execute()
{
FrmCodeExe frmCodeExe = new FrmCodeExe();
frmCodeExe.ShowDialog();
}
public override void Show()
{
this.CodingLines = 1000;
this.Bugs = 9;
this.WorkDay = 5;
string message = string.Format("有效编码行数:{0}\n遗留问题:{1}\n所需工作日:{2}", this.CodingLines ,this.Bugs,this.WorkDay);
MessageBox.Show(message, "指标完成情况", MessageBoxButtons.OK);
}
}
class TestJob:Job
{
public TestJob(string type, string name, string description) : base(type, name, description) { }
public TestJob() { }
private int caseNum; //编写的测试用例个数
private int findBugs; //发现的Bugs
private int workDay; //用时
public int CaseNum { get => caseNum; set => caseNum = value; }
public int FindBugs { get => findBugs; set => findBugs = value; }
public int WorkDay { get => workDay; set => workDay = value; }
public override void Execute()
{
FrmTestExe frmTestExe = new FrmTestExe();
frmTestExe.ShowDialog();
}
public override void Show()
{
this.CaseNum = 200;
this.FindBugs = 9;
this.WorkDay = 5;
string message = string.Format("测试用例个数:{0}\n发现的Bug数量:{1}\n所需工作日:{2}",this.CaseNum,this.FindBugs,this.WorkDay);
MessageBox.Show(message, "指标完成情况", MessageBoxButtons.OK);
}
}
class Employee
{
private string id; //工号
private int age; //年龄
private string name; //姓名
private Gender gender; //性别
private List<Job> workList; //工作列表
public string Id { get => id; set => id = value; }
public int Age { get => age; set => age = value; }
public string Name { get => name; set => name = value; }
public Gender Gender { get => gender; set => gender = value; }
public List<Job> WorkList { get => workList; set => workList = value; }
public Employee(string id, int age, string name, Gender gender, List<Job> list)
{
this.Id = id;
this.Age = age;
this.Name = name;
this.Gender = gender;
this.WorkList = list;
}
public virtual string DoWork()
{
return "工作列表";
}
}
class SE:Employee //SE是程序员
{
public SE(string id, string name, int age, Gender gender, int popularity, List<Job> list) : base(id, age, name, gender, list)
{
this.Popularity = popularity;
}
private int _popularity; //人气值
public int Popularity
{
get { return _popularity; }
set { _popularity = value; }
}
public override string DoWork() //工作方法
{
StringBuilder sb = new StringBuilder();
sb.Append(this.Name + ":\n");
for (int i = 0; i < this.WorkList.Count; i++)
{
sb.Append((i + 1) + "、" + WorkList[i].Name + ":" + WorkList[i].Description + "\n");
}
return sb.ToString();
}
}