PSP:

一、计划

完成这个任务需要五天左右。

二、开发

1.需求分析:

作为一个排球比赛的现场工作人员,我需要统计每一名球员的得分以及技术统计(如:发球,拦网,一传等等),以便于颁发每场比赛的MVP,确定最佳阵容。

2.生成设计文档:

(1)通过现场工作人员的界面,当运动员得分时,通过datagridview控件增加或者更新数据,并且即时更新到数据库中,然后通过查询按钮进入比赛结束后运动员的总分及技术统计界面。

(2)能够获取数据库中发球,扣球,拦网的得分,以及一传二传的成功数,还有自由人防守的成功数,然后进行降序排序,获取第一行的第一个数据,将得分最高的运动员的名字现实到文本框中,得出MVP。

然后得出最佳发球,扣球,拦网,一传,二传,自由人,实现在文本框中。

(3)活动图

3.设计复审

同组人员一起复审,讨论了可行与不可行的地方,修改了部分功能。

4.代码规范

给目前的内容进行了一些合理的要求,以便进行开发。

5.具体设计

6.具体编码

using System.Data.OleDb;
namespace 工作人员统计
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
OleDbConnection conn;//声明一个OleDbConnection变量
OleDbDataAdapter adapter;//声明一个OleDbAdapter
DataSet ds = null;

private void Form1_Load(object sender, EventArgs e)
{
// TODO: 这行代码将数据加载到表“统计表DataSet.Allathlete”中。您可以根据需要移动或删除它。
this.allathleteTableAdapter1.Fill(this.统计表DataSet.Allathlete);
// TODO: 这行代码将数据加载到表“workersDataSet1.Allathlete”中。您可以根据需要移动或删除它。
// this.allathleteTableAdapter.Fill(this.workersDataSet1.Allathlete);
// TODO: 这行代码将数据加载到表“workers.Allathletes”中。您可以根据需要移动或删除它。

//
conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Administrator\Desktop\统计表.mdb");
adapter = new OleDbDataAdapter("select * from Allathlete", conn);
ds = new DataSet();
adapter.Fill(ds, "Allathlete");
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.RowHeadersVisible = false;

}

private void button1_Click(object sender, EventArgs e)
{
//连接数据库
conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Administrator\Desktop\统计表.mdb");
adapter = new OleDbDataAdapter("select * from Allathlete", conn);
ds = new DataSet();
adapter.Fill(ds,"Allathlete");
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.RowHeadersVisible = false;

//建立一个DataTable类型的方法

}
private DataTable dbcon(string strOleDb)
{
conn.Open();
this.adapter = new OleDbDataAdapter(strOleDb,conn);
DataTable dtSelect = new DataTable();
int rnt = this.adapter.Fill(dtSelect);
conn.Close();
return dtSelect;
}

private void button2_Click(object sender, EventArgs e)
{
if (dbUpdate())
{
MessageBox.Show("更新成功");
}
}
private Boolean dbUpdate()
{
string strOleDb = "select * from Allathlete";
DataTable dtUpdate = new DataTable();
dtUpdate = this.dbcon(strOleDb);
dtUpdate.Rows.Clear();
DataTable dtShow = new DataTable();
dtShow = (DataTable)this.dataGridView1.DataSource;
for (int i = 0; i < dtShow.Rows.Count; i++)//循环遍历
{
dtUpdate.ImportRow(dtShow.Rows[i]);

}
try
{
this.conn.Open();
OleDbCommandBuilder cb = new OleDbCommandBuilder(this.adapter);
this.adapter.Update(dtUpdate);
this.conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
return false;
}
dtUpdate.AcceptChanges();
return true;
}

private void button3_Click(object sender, EventArgs e)
{
Form2 a = new Form2();
a.Show();
this.Hide();
}

}
}

using System.Data.OleDb;

namespace 工作人员统计
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{
// TODO: 这行代码将数据加载到表“统计表DataSet3.Allathlete”中。您可以根据需要移动或删除它。
this.allathleteTableAdapter3.Fill(this.统计表DataSet3.Allathlete);
// TODO: 这行代码将数据加载到表“统计表DataSet2.Allathlete”中。您可以根据需要移动或删除它。
this.allathleteTableAdapter2.Fill(this.统计表DataSet2.Allathlete);
// TODO: 这行代码将数据加载到表“统计表DataSet1.Allathlete”中。您可以根据需要移动或删除它。
this.allathleteTableAdapter1.Fill(this.统计表DataSet1.Allathlete);
// TODO: 这行代码将数据加载到表“worker.Allathlete”中。您可以根据需要移动或删除它。
//this.allathleteTableAdapter.Fill(this.worker.Allathlete);

}

private void button3_Click(object sender, EventArgs e)
{
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Administrator\Desktop\统计表.mdb";
OleDbConnection con = new OleDbConnection(conn);
// string sql = "select qiuyuan from Allathletes order by faqiu desc";
con.Open();
string sql = "select qiuyuan from Allathlete order by faqiu desc";
OleDbCommand cmd = new OleDbCommand(sql,con);
OleDbDataReader reader = cmd.ExecuteReader();
try
{
reader.Read();
string faqiu = (string)reader[0].ToString();
textBox1.Text = faqiu;
reader.Close();
con.Close();
con.Open();
string sqa = "select qiuyuan from Allathlete order by kouqiu desc";
OleDbCommand cma = new OleDbCommand(sqa, con);
OleDbDataReader readera = cma.ExecuteReader();
readera.Read();
string kouqiu = (string)readera[0].ToString();
textBox2.Text = kouqiu;
readera.Close();
con.Close();
con.Open();
string sqb = "select qiuyuan from Allathlete order by lanwang desc";
OleDbCommand cmb = new OleDbCommand(sqb, con);
OleDbDataReader readerb = cmb.ExecuteReader();
readerb.Read();
string lanwang = (string)readerb[0].ToString();
textBox3.Text = lanwang;
readerb.Close();
con.Close();
con.Open();
string sqc = "select qiuyuan from Allathlete order by yichuan desc";
OleDbCommand cmc = new OleDbCommand(sqc, con);
OleDbDataReader readerc = cmc.ExecuteReader();
readerc.Read();
string yichuan = (string)readerc[0].ToString();
textBox4.Text = yichuan;
readerc.Close();
con.Close();
con.Open();
string sqd = "select qiuyuan from Allathlete order by erchuan desc";
OleDbCommand cme = new OleDbCommand(sqd, con);
OleDbDataReader readerd = cme.ExecuteReader();
readerd.Read();
string erchuan = (string)readerd[0].ToString();
textBox5.Text = erchuan;
readerd.Close();
con.Close();
con.Open();
string sqf = "select qiuyuan from Allathlete order by ziyouren desc";
OleDbCommand cmf = new OleDbCommand(sqf, con);
OleDbDataReader readerf = cmf.ExecuteReader();
readerf.Read();
string ziyouren = (string)readerf[0].ToString();
//textBox1.Text = faqiu;
//textBox2.Text = kouqiu;
// textBox3.Text = lanwang;
// textBox4.Text = yichuan;
// textBox5.Text = erchuan;
textBox6.Text = ziyouren;
reader.Close();
}
catch
{
MessageBox.Show("没有比赛数据!");
}
con.Close();
}

private void button1_Click(object sender, EventArgs e)
{
string conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Administrator\Desktop\统计表.mdb";
OleDbConnection con = new OleDbConnection(conn);
string sql = "select qiuyuan from Allathlete order by score desc";
con.Open();
OleDbCommand cmd = new OleDbCommand(sql,con);
OleDbDataReader reader = cmd.ExecuteReader();
reader.Read();
try
{
string mvp = (string)reader[0].ToString();
text.Text = mvp;
}
catch
{
MessageBox.Show("没有比赛数据!");
}
reader.Close();
con.Close();

}

private void label4_Click(object sender, EventArgs e)
{

}

private void button2_Click(object sender, EventArgs e)
{
text.Text = "";
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text= "";
}
}
}

7.代码复审

基本实现了想要的功能,没有复审。

8.

使用VS对代码进行测试,对代码进行重构,修复了部分问题。

、报告

   1.测试报告

测试通过。

2.计算工作量

时间:一星期

代码累计数:不确定

随笔累计数:不确定

3.事后总结

开发一个软件,有很多种方法,应该找到最简单实用的,还有代码实现功能,有些功能的实现用已有的代码无法实现,需要继续学习。

最后一次PSP的更多相关文章

  1. 结对项目:代码复审+PSP

    一.代码复审        首先我从代码风格规范和程序修改两方面进行审查. (一)代码风格规范修改 1 . 代码的部分未缩进:在用markdown粘贴代码时,需要后期tab,无形中加大工作量. 2 . ...

  2. 最后一周psp

    团队项目PSP 一:表格     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论用户界面 10:20 11:45 25 40 80 分析 ...

  3. 第十周 psp

    团队项目PSP 一:表格     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论用户界面 8:45 10:55 40 35 90 分析与 ...

  4. 第九周 psp

    团队项目PSP 一:表格     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论用户界面 9:50 12:45 35 45 80 分析与 ...

  5. 第八周PSP

    团队项目PSP 一:表格     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论用户界面 8:40 11:40 35 60 70 分析与 ...

  6. 本周psp

      本周PSP 类别 内容 开始时间 中止时间 终止时间 总用时 产品计划会议 定义产品的用户需求,以及从这个产品中得到什么.解决啥问题 18:00 0 20:00 120分钟 撰写博客 会议记录与个 ...

  7. 本周psp(观众页面)

    个人项目PSP(观众页面) 计划 30min 估计要用多长时间 3d 开发 5h 需求分析 1h 生成设计文档 1h 设计复审 50min 代码规范 20min 具体设计 40min 具体编码 3h ...

  8. psp进度(11月25号-31号)

    本周psp进度 11月25号 内容 开始时间 结束时间 打断时间 净时间 处理数据集  9:27  11:34  12m  115m 11月27号 内容 开始时间 结束时间 打断时间 净时间  scr ...

  9. 本周psp(11月17-23)

    本周psp进度 11月19号 内容 开始时间 结束时间 打断时间 净时间 发布读书笔记 11:05 11:25 0 20m 看构建之法书 9:50 10:48 5m 53m 11月20号 内容 开始时 ...

  10. 补PSP进度(10.28-11.3)

    本周PSP进度 10月31号 内容 开始时间 结束时间 打断时间 净时间 看蛋白质相互作用论文 8:40 10:35 约12m 103m 分析约跑功能 13:20 13:55 0 35m 练习VSL2 ...

随机推荐

  1. upupw一键绿色免安装环境包

    项目测试,选择upupw环境包 下载nginx版本,解压即可使用 任务就是要把我电脑上的项目test.com提供给公司局域网同事访问,如果是apache的话,前面的wampserver已经讲过了. 1 ...

  2. 解决NGUI自动被设置LYAER

    解决NGUI自动被设置LYAER uiwidget.cs1011行public void checklayer()这里修改 可以让LAYER不跟随父物体变动 但是这里有个问题 摄像机的CULL 不会被 ...

  3. ubuntu16.04安装virtualbox5.1失败 gcc:error:unrecognized command line option ‘-fstack-protector-strong’

    系统:ubuntu16.04.1 软件:Virtualbox-5.1 编译器:GCC 4.7.4 在如上环境下安装Vbx5.1提示我在终端执行/sbin/vboxconfig命令 照做 出现如下err ...

  4. 【LeetCode】#7 Reverse Integer

    [Question] Reverse digits of an integer. Example: x = 123, return 321 x = -123, return -321 [My Solu ...

  5. 删除Kafka的topic

    刚接触Kafka,开始认为删除一个topic只是运行一下Kafka-topic.sh的delete命令就行了,但是,事实却不是这样,会出现两种情况:(1) 如果topic没有使用过即没有传输过消息,可 ...

  6. js数组倒叙输出

    第一种:是直接利用代码进行输出 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  7. for循环每次展示固定条数的数据的写法。

    第一种是一组json数据实现分页的效果,也就是每一次展示5条数据.第二种场景是每一秒展示4条数据,直到全部显示完.两种思路都做个笔记记录下. var nums = 5; //每页出现的数量 var p ...

  8. How (not) to trigger a layout in WebKit

    As most web developers are aware, a significant amount of a script's running time may be spent perfo ...

  9. 制作简单的2D物理引擎(一)——动力学基础

    一切的基础 点 在二维平面中,点$P$就是坐标$(x,y)$,点集就是一系列坐标的集合$\{P_1,P_2,...,P_n\}$,不过这个集合是有序的(顺时针). 向量 加减运算 $$\vec{P}\ ...

  10. Redis常用命令入门1:字符串类型命令

    Redis总共有五种数据类型,在学习的时候,一定要开一个redis-cli程序,边看边练,提高效率. 一.最简单的命令 1.获得符合规则的键名列表 keys * 这里的*号,是指列出所有的键,同时*号 ...