一.完成一个小程序
我 拿到这个题目之后,就决定用最不熟悉的c#来实现,因为老师说不懂的去学才会有进步。布置任务后的第二天就开始去图书馆借了两本书《c#从入门到精通》,《c#项目实战》,拿到书之后看了入门书《c#从入门到精通》,看书的过程是痛苦的,因为发现大二选修课学的c#全交还给老师了,只能重头再学了。唯一有点印象的就是窗口应用程序,基于UI的设计。
写代码首先需要工具,由于电脑上没有visual studio的安装包,当时求助了度娘。
如果没有安装包的同学们,可以借鉴一下这个链接
http://blog.csdn.net/chunleixiahe/article/details/52874158,里面vs2003-2015的版本都有,推荐。由于网速问题,下载安装包都花费了半个小时。
看到题目,我就直接用Windows窗口程序完成了文件的查找,读取和统计字数,然后询问老师是否可以用Windows窗口程序完成,发现这次作业后续功能需要重定向输入,必须得做成控制台,否则无法做重定向输入。
编程中也遇到了很多问题,只能一步步看书和借助度娘来解决。
遇到的主要问题如下:
1.不知道c#对文件如何操作,如何查找文件,读取文件,输出文件的内容。
2.不知道如何统计文件中内容的字符,并且正确输出每个单词的出现的频数,后来实现这个小功能主要使用了哈希表,并对哈希表的值进行排序,然后遍历哈希表对每个单词出现的次数进行输出。
我的实现代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace wf
{
class Program
{
static void Main(string[] args)
{
string theFileName;
Console.Write(">type ");
theFileName=Console.ReadLine();
string thePath = @"D:\vs2010\test.txt";
//string thePath = null;
//Console.Write(">type ");
//thePath = Console.ReadLine();
//StreamReader content = File.OpenText(thePath);
//读取文件内容并输出
StreamReader reader = new StreamReader(thePath);
string sline=reader.ReadLine();
Console.WriteLine(sline.ToString());
sline = sline.ToLower();//全部变为小写字母
//定义一个字符数组
char[] c = { ' ', ',', '.', '?', '!', ':', ';', '\'', '\"' };
//分隔字符串后产生的字符串数组
string[] S = sline.Split(c);
//Console.WriteLine();
//Console.WriteLine(">wf -s test.txt");
// Console.WriteLine("total " + S.Length);
//建立哈希表
Hashtable ha = new Hashtable();
for (int i = 0; i < S.Length; i++)
{
//判断文本是否进入
if (ha.ContainsKey(S[i]))
{
ha[S[i]] = (int)ha[S[i]] + 1;
}
else
{
ha.Add(S[i], 1);
}
}
//int sum = 0;
string[] arrKey = new string[ha.Count];//存哈希表的键
int[] arrValue = new int[ha.Count];//存哈希表的值
ha.Keys.CopyTo(arrKey, 0);
ha.Values.CopyTo(arrValue, 0);
Console.WriteLine();
Console.WriteLine(">wf -s test.txt");
Console.WriteLine("total " + ha.Count);
Console.WriteLine();
Array.Sort(arrValue,arrKey);//按哈希表的值进行排序
//遍历哈希表
//foreach (DictionaryEntry de in ha)
//{
//输出
// Console.WriteLine(de.Key + ":" + de.Value);
//Console.Write(ha.Count);
// }
for (int i = arrKey.Length - 1; i >= 0; i--)
{
if ((string)arrKey[i] != "")
{
Console.Write(arrKey[i].ToString() + ":");
Console.WriteLine(arrValue[i].ToString());
}
}
}
}
}
实现的截图如下:
二.例行报告
1.PSP(personal software process)个人软件过程
类别 | 任务 | 开始时间 | 结束时间 | 打扰时间 | 净时间 |
借书 | 借书 | 2017.9.15 10:00 | 2017.9.15 10:20 | 无 | 20min |
看书 | 2017 9.15 12:20 | 2017.9.16 21:15 | n多打扰时间 | <5h | |
编程 | 写代码 | 2017 9.16 18:00 | 2017.9.16 21:30 | 洗漱30min,回复消息20min | 2h40min |
写作 | 写博客 | 2017.9.16 21:50 | 2017.9.16 22:30 | 无 | 40min |
2.进度条
代码行 | 博文字数 | 知识点 | |
第二周 | 83 | 800 | 见博客词频统计-功能一 |
三.修改格式
看到老师给出的样例是需要右对齐。
所以在输出部分修改了一行代码Console.Write(arrKey[i].ToString().PadRight(12) );
使得输出结果结果如下图
类别 | 任务 | 开始时间 | 结束时间 | 被打扰时间 | 净时间 |
编程 | 修改输出格式 | 2017.9.17 10:00 | 2017.9.17 10:24 | 聊天5min | 19min |