• 个人第三次作业—结对编程


    项目地址 saodan
    队友博客 口袋里的世界jjj
    结对队友学号 廖志丹:201731032125
    王川:201731021132

    1. PSP表格

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

    2. 解题思路(共同完成)

    2.1 解题思维导图:

    2.2 界面UI设计:

    2.2 代码设计:

    说明:OpenExcel类库中的GetExcelFile类和ExcelToDataTables类实现打开Excel文件读取学生信息的功能,student类实现将学生信息写入数据字典,WriteOutStu类库实现将学生信息写入Excel表格,结对编程_课堂随机点名系统类库实现主界面设计和功能的实现。

    3. 具体实现(共同完成):

    1.导入学生名单

    code
    
    OpenFileDialog op = new OpenFileDialog();
    op.Filter = "Excel(97-2003)文件|*.xls|所有文件|*.*";
    op.Title = "打开文件夹";
    string path = null;
    op.InitialDirectory = "d:\";//最初从D盘开始查找文件,测试文件放置于本文件夹。
    op.FilterIndex = 1;
    if (op.ShowDialog() == DialogResult.OK)//判断路径是否正确
    {
            path = op.FileName;
    }
    string name = GetExcelFile.GetFile(path);//获取Excel文件。
    string Tsql = "SELECT * FROM [" + name + "]";
    DataTable table = ExcelToDataTable.Redatatable(path, Tsql).Tables[0];//将Excel转换为dataset类型并赋值于table
    /*获取文件名*/
    public static class GetExcelFile
    {
        public static string GetFile(string path)
        {
            string name = null;
            if (File.Exists(path))
            {
                using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False;" + "data source=" + path + ";Extended Properties='Excel 12.0; HDR=yes; IMEX=2'"))
            {
             conn.Open();
            name = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0][2].ToString().Trim();
            }
        }
        return name;
        }
    }
    /*将Excel类型转换成datatable*/
    public static DataSet Redatatable(string path,string Tsql)
    {
        DataSet ds;
        string strcon = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False;" + "data source=" + path + ";Extended Properties='Excel 12.0; HDR=yes; IMEX=2'";
        OleDbConnection mycon = new OleDbConnection(strcon);
        mycon.Open();
        OleDbDataAdapter myconn = new OleDbDataAdapter(Tsql, strcon);
        ds = new DataSet();
        myconn.Fill(ds);
        mycon.Close();
        return ds;
    }
    

    说明:
    运用OpenFileDialog控件打开文件
    运用OLedb连接Excel,并将Excel表中的信息填充到datatable表中

    2.建立学生信息的数据字典

    code
    
    stuList = studentList.StudentList(table);//将学生信息存储到字典中
    public static class studentList
    {
        public static Dictionary StudentList(DataTable data)
        {
            Dictionary stuList = new Dictionary();
            for (int i = 1; i < data.Rows.Count; i++)
            {
                stuList.Add(i, data.Rows[i][1].ToString());
            }
            return stuList;
        }
    }
    

    3.随机点名并记录缺课名单

    code
    
    string path1 = @"E:/";
    filepath = path1 + System.DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString().Replace(":", "-") + "缺课名单" + ".xls";//缺课学生文件命名
    private void timerCallname_(object sender, EventArgs e)
    {
        Random random = new Random();
        int t = random.Next(1, stuList.Count + 1);
        label1.Text = stuList[t];
    }
    private void label1_Click(object sender, EventArgs e)
    {
        DialogResult re = MessageBox.Show(string.Format("{0}是否缺席。", label1.Text),"提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
        if (re == DialogResult.Yes)
        {
            WriteOutStu.Class1.Write(filepath, label1.Text.ToString());//将缺课学生导出为Excel文件
        }
    }
    public static void Write(string Path,string str)
    {
        FileStream datafile = new FileStream(Path, FileMode.Append, FileAccess.Write);
        string data = string.Format("{0}	缺席
    ",str);
        StreamWriter writer = new StreamWriter(datafile, Encoding.GetEncoding("gb2312"));
        writer.Write(data);
        writer.Flush();
        writer.Close();
    }
    

    说明:
    运用timer事件,利用random产生随机数进行随机点名
    运用MessageBox判断学生是否缺课
    运用IO类将缺课学生名单写入Excel文件

    4.新增功能

    (1) 实现从Excel表格中获取学生名单的功能,脱离了数据库的限制,无需安装数据库即可实现对学生信息的操作。
    (2) 新增记录学生缺课信息的功能。
    (3) 实现将学生缺课信息导出的功能,并运用时间命名文件,方便学生信息管理。

    5. 源代码管理

    本次实验运用VS2017的GitHub Extension for Visual Studio拓展进行源代码管理,实现代码的及时同步。

    6.单元测试

    思路:建立DataTable数据表进行测试

    code
    
    public class studentListTests
    {
        [TestMethod()]
        public void StudentListTest()
        {
            DataTable table = new DataTable(;
            DataColumn column = new DataColumn(" ");
            column.AutoIncrement = true;
            column.AutoIncrementSeed = 1; 
            column.AutoIncrementStep = 1;
            column.AllowDBNull = false;
            table.Columns.Add("学号", Type.GetType("System.String"));
            table.Columns.Add("姓名", Type.GetType("System.String"));
            table.Rows.Add("2016", "王川");
            table.Rows.Add("2017", "廖志丹");
            Assert.AreEqual(studentList.StudentList(table)[1], "廖志丹");
        }
    }
    

    思路:
    读取文件内容,检验写入信息是否正确

    code
    
    public class Class1Tests
    {
        [TestMethod()]
        public void WriteTest()
        {
            Student s = new Student();
            s.Loading_Click(null, EventArgs.Empty);
            WriteOutStu.Class1.Write(s.filepath, "廖志丹");
            StreamReader sr = new StreamReader(s.filepath,Encoding.Default);
            string str = sr.ReadToEnd();
            Assert.AreEqual(str, "廖志丹	缺席
    ");
        }
    }
    

    7.回归测试及代码覆盖率

    8.代码互审

    • 在这次结对编程过程中,我们边写代码,边进行代码互审,发现了许多命名不规范的问题并及时得到改正。
    • 在编程过程中,我们进行了多次代码合并,改正了许多命名空间和引用错误,保障了最终代码成功合并。
    • 详细的代码互审参考博文:高效代码审查的八条准则和十个经验

    9.结对过程

    • 通过这次结对编程,锻炼了团队编程的能力,尤其是练习了代码合并,为今后的团队项目积累了经验。
    • 这次结对编程达到了1+1>2的效果,两人结对编程可以更快完成功能搭建,进行及时的代码互审,改正错误,提高质量
  • 相关阅读:
    java并发:简单面试问题集锦
    Java:泛型
    Java:注解(元数据)
    Java:反射
    Java:静态代理 and 动态代理
    华为机试题——该警醒了,骚年
    java并发:线程同步机制之Lock
    java并发:中断一个正在运行的线程
    java中String类型变量的赋值问题
    java中的自增问题
  • 原文地址:https://www.cnblogs.com/liaozhidan/p/11615096.html
Copyright © 2020-2023  润新知