C# 把时间转为秒_19.9.13 记录时间编程分析

因为这算是学c#之后第一个自己非常有热情编写的一个程序,加上最近需要重构这个项目,所以记录一下编写的过程。

1.编写目标

原来记录时间使用的是有道云笔记中的表格和excel中的汇总结合。如下图:

43c19e39683b4b4d6e9a5f5cf32a4a0a.png

缺点非常明显:

  • 统计时需要从有道云笔记手动输入到excel中
  • 所有的记录以文字方式存在有道云笔记里,浏览困难,容易丢失

契机是当时学了数据库的基本知识,那天睡午觉时突然想到,这种一条条的记录和sql的表非常相似啊,或许可以用c#编写一个高度契合自己需要的exe。

希望实现的功能有:

  • 数据存放在sql中
  • 能用GUI方便地向sql中添加一条条数据,每条数据大概包括:事件类型,时长,重要程度等等
  • 能使用datagridview方便地浏览每天发生的事件。并且能对每周,每月的数据进行汇总分析,能把分类的分析结果用折线图,饼形图显示出来。

基本用到的工具就是:sql,datagridview,winform中的chart控件。

因为当时编写时非常菜,结构十分混乱,所以这里只讲其中“攻克”的几个小问题,具体的结构等到我重构代码之后再说。

2.日期这种格式的存放方式

学sql时没看到date这种格式,差点就把年月日分开存了。。。真菜

但是c#中的datetimepicker控件和sql中的datetime数据类型确实帮了我的大忙,进行汇总时尤其方便。

  • 存入数据库时以:dateTimePicker1.Value.ToString("yyyy-MM-dd")的方式在c#和sql中流通。
  • 同月的查询非常好写:where datediff(month,日期,'" + date + "')=0
  • 同周的查询有点麻烦,因为西方习惯把周日当做第一天。我看到了把第一天设置为周一的办法,但是用起来效果并不好,所以采取了一种傻瓜式的方式:
 where (datediff(week,日期,DATEADD(day,-1,'" + date + "'))=0 AND DATEPART(WEEKDAY,日期)!=7) OR (DATEPART(WEEKDAY,日期)=7 AND datediff(week,日期,DATEADD(day,-1,'" + date + "'))=-1)

这个东西重构时要重点关注一下,看起来丑,查询效率肯定也低。

3.datagridview绑定查询出来的sql结果

这部分有点晕头转向,基本是按照网上一个教程写的,重构时要重点注意一下

  • 大概是SqlDataAdapter数据进入dataset,dataset的数据进入datatable,最后datagridview的数据绑定datatable
  • 添加汇总行时,在datatable中新建一行并添加
            DataRow dr = dt.NewRow();
            int index = table.RowCount;
            dt.Rows.InsertAt(dr, index);
            table.Rows[index].Cells[0].Value = "全天统计";
            table.Rows[index].Cells[2].Value = time_sum;

4.全页显示datagridview和左右分别显示datagridview和chart之间的切换

目前的做法挺傻的,我没在代码里新建控件,反倒是一开始就拖动到form里面了。trick是更改绑定的panel和隐藏控件。

这种肯定有通用的做法的,到时看看通用的做法是什么

5.访问数据库的办法

这部分基本照抄学习视频的做法,现在看的书里面都是把数据层和业务层分开,操作数据库专门写一个类库,重构时要掌握这种通用的办法。

6.项目的架构

这就体现出菜鸟和老手的区别。

由于一开始就没有把想法搭建好,导致代码结构非常乱。现在有两个form,一个viewdata类(实在重用的代码太多才建的类)。

现在这种架构代码的方式是学习c#的重中之重,我看了书之后已经有了些思路。大概是两个基类:数据库类,操作数据库的类。业务层分一个添加类和一个查询的类。这部分还是想的不够清楚,还是对类的概念理解不够深。

7.说到最后

目前工作之外手头有四个想自己实现的小项目

  • 重构record_time项目,重点是要学会科学的架构
  • 或许能编写一个安卓端?云数据库?因为record_time这个exe很多时候要用电脑很不方便
  • 一个带书签,书签能提示这个音频节点内容的音频播放器。这个我原来一直想找但是没找到,现在可以自己做一个。
  • 一个使用GMAP的,能记录自己想去的地方和去过的地方的exe。如果谷歌地球能达到我的需求,用谷歌地球就好。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值