个人第三次作业:结对编程

个人第三次作业:结对编程

结对作业
GitHub项目地址 https://github.com/zerowcl/PairProgramming.git
队友博客地址 https://www.cnblogs.com/jiao54/
作业链接 https://www.cnblogs.com/cherish599/p/11577268.html

一、psp表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 20
.Estimate .估计这个任务需要多少时间 800 970
Development 开发 660 750
· Analysis · 需求分析 (包括学习新技术) 60 120
· Design Spec · 生成设计文档 10 10
· Design Review · 设计复审 (和同事审核设计文档) 10 10
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 30 30
· Coding · 具体编码 360 420
· Code Review · 代码复审 60 30
· Test · 测试(自我测试,修改代码,提交修改) 120 120
Reporting 报告 120 200
· Test Report · 测试报告 60 120
· Size Measurement · 计算工作量 20 20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 40 60
合计 800 970

二、计算模块接口的设计与实现过程

  1. 设计思路
    (1)这次代码本来我们我们设想的是链接数据库来进行点名设计,但考虑到只能用VS完成,所以就简化了很多东西,没有链接数据库,但这样就不是很方便进行信息的及时更新,核心代码还是以老师的为主。我们设计的界面有
  • 登录界面
  • 点名界面
  • 学生信息展示界面
    流程图
graph LR A[登录界面] --登录成功 --> B((学生信息展示界面)) A -- 登陆失败 --> C(取消) B --> D{点名界面}
  1. 体现原则
  • Design By Contract(契约式设计):
    契约式设计就是按照某种规定对一些数据等做出约定,如果超出约定,程序将不再运行,例如要求输入的参数必须满足某种条件。
    如何体现: 登录界面,如果密码正确即可进入学生信息界面,如果不正确,就不进入点名界面。
  • Information Hiding(信息隐藏):
    信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
    如何体现: 登录界面不需要学生信息,所以就没有添加对学生信息的引用,学生信息在登录界面也就不可访问。
  • Interface Design(接口设计):
    对接口的名字,功能,接口与接口间的继承关系进行设计;好的接口设计可以增强代码可读性,易用性,可更改性。
    如何体现:此次代码因为功能不是很多,就没有涉及接口。
  • Loose Coupling 松耦合:
    软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
    如何体现:这次的代码设计因为没有接口,所以模块间耦合都比较高。

三、代码复审过程

  1. 代码规范参考
  2. 代码互申情况
       因为我们住在一个寝室,所以在编码过程中我们就进行了代码互申,然后在互申过程中,发现我们前期构想的启动页面的进度条无法显示进度,最后抛弃了这个想法。

四、具体代码

  1. 登录(因为不能连接数据库,所以我们就只设计了一个用户名和密码,“text”,“1111”)
 private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void FrmLogin_Load(object sender, EventArgs e)
        {
            this.Tag = "验证失败";
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            if (textBox1.Text == "text")
            {
                if (textBox2.Text == "1111")
                {
                    this.Tag = "验证成功";
                    this.Close();
                }
            }
            else
            {
                MessageBox.Show("验证失败,请重新输入");
                textBox1.Text = "";
                textBox2.Text = "";
            }
        }

登录失败

  1. 加载学生信息(代码出了差错,就是加载出来以后会另外添加3列放置学生信息)
            StudentDAO stuDao = new StudentDAO();
            stuList = stuDao.getAllStudents();

            
            int stuCounts = stuList.Count;
            progressName.Maximum = stuCounts;


           
            DataTable dt = new DataTable();
            dt.Columns.Add("stuID", Type.GetType("System.String"));
            dt.Columns.Add("stuName", Type.GetType("System.String"));
            dt.Columns.Add("stuSex", Type.GetType("System.String"));

            
            foreach (Student stu in stuList)
            {
                dt.Rows.Add(stu.Id , stu.Name, stu.Sex);
                progressName.Value += 1;
                Thread.Sleep(500);
            }


            dgvStuList.DataSource = dt;

在这里插入图片描述
在这里插入图片描述

  1. 学生点名
Random ra = new Random();
            int i = ra.Next(stuList.Count);
            labName.Text = stuList[i].Name;

在这里插入图片描述

五、附加功能

  • 这次代码在老师的代码的基础上增加了登录功能,其他功能由于自身C#功底浅薄,并未过多涉及。

六、单元测试

public void TestMethod1()
        {
            StudentDAO sd = new StudentDAO();
            StudentDataset st = new StudentDataset();
        }

单元测试截图:
在这里插入图片描述

七、结对过程

  1. 分工
  • 何玉姣(我的队友)负责窗体信息设计及单元测试,
  • 王春兰(我)负责代码编写
  1. 过程展示
    在这里插入图片描述
    在这里插入图片描述

八、个人感悟

   这次代码优化,前期想了很多功能,可后期发现如果不使用数据库的话,单用C#就显得比较难做,比如学生信息即时更新等等,在经过长时间的尝试之后,由于作业时间来不及,还是选择了放弃,只保留了削减过的登录界面。这次结对编程相较之前的单人编程来讲,会好做一点,因为我们一起编程,就更容易发现对方代码中的瑕疵,对实现需求更有好处。

posted @ 2019-10-01 13:26  木锡  阅读(161)  评论(0编辑  收藏  举报