结对编程1(201421123088,201421123063)

码市地址:https://coding.net/u/DzXzz/p/GUI-operation

1、题目描述:

我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。

2、需求分析:

a、记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。

这个由于我写的是winform, 所以考虑了两种实现,一种连接数据库;一种是文件流。由于我使用了datagridvie控件输出题目,又没有使用题库。就选择了文件流

b、有计时功能,能显示用户开始答题后的消耗时间。

查阅之后 c#有个Stopwatch类,直接调用方法就可以实现。

c、界面支持中文简体/中文繁体/英语,用户可以选择一种;

这个其实一开始我就是想着是用下拉式列表,加判定条件控制不同输出,后来发现好像不是这样解决的,查阅后感觉应该是利用From.Localizable 或者Form.Language解决
但理解不深,之后学习再解决吧

3、程序设计:

大概流程:

4、代码展示:

计时器的代码很简单,调用Stopwatch类, 点击出题时开始,点击批改时结束,然后输出(中间代码行数有点多就不直接复制了) 
```
         Stopwatch watch = new Stopwatch();  //创建计时器
         watch.Start();          //开始计时
         watch.Stop();           //结束计时
         string time = watch.Elapsed.ToString();    //输出时间
```
文件流主要通过这两个函数实现
```
     public int GetRows(string FilePath)
    {
        using (StreamReader read = new StreamReader(FilePath, Encoding.Default))
        {
            return read.ReadToEnd().Split('\n').Length;        //返回行数
        }
    }
    public void Write(string path,string line)
    {
       
        StreamWriter sw = File.AppendText(path);
        //开始写入
        sw.Write(line);
        //清空缓冲区
        sw.Flush();
        //关闭流
        sw.Close();
        
    }
```
然后判定写入错题加正确答案
```
     if (celldata == "错误")
                        {
                            string wrong = "";
                            for (int m = 1; m < 9; m++)
                            {
                                wrong = wrong + this.dataGridView2.Rows[i].Cells[m].Value.ToString();
                            }
                            wrong = wrong + num6 + "/" + num7 + "\r\n";
                            Write(path, wrong);
                        }

```
```
    int totalcount;
        totalcount = GetRows(path);            //获取行数
```
还有就是文本框只能输入数字
```
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        //判断是否为数字
        //(char)8是允许退格键,可允许用户修改数字
        //其他输入清空文本框
        if (!(Char.IsNumber(e.KeyChar)) && e.KeyChar != (char)8) 
        {
            e.Handled = true;                  
        }
       
    }
```

5、程序运行:

6、小结感受:

没学过vs,也没学过c# 这次主要是因为上次是使用c编写的,不想改成java所以花了一天时间看了c#快速入门,编程过程中也是不断的在学习。虽然功能基本实现,但是好丑啊,好像生成题目改成弹窗会好看的多...本来语言切换也写了 但是因为自己感觉不符合要求就删了(上文也说了)不过切实体会到c#好像很便利,以后要再研究研究。

7、结对分工:

  这次编程方面主要以我上次的代码为主,一般是我在敲代码,队友在旁交流指导。碰到问题一起讨论可行性,感觉还是有用的,更能激发思维,毕竟我感觉编程逻辑比较重要。不过要求两个用户分别提交代码真的有些蛋疼...可能还是不习惯git管理代码吧

8、PSP(Personal Software Process)表格

posted @ 2017-03-14 22:58  DzXzz  阅读(237)  评论(2编辑  收藏  举报