博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈首次软工作业感受_苏若
阅读量:4947 次
发布时间:2019-06-11

本文共 11175 字,大约阅读时间需要 37 分钟。

好久之前就听闻,我们的软工老师不一般,恩,的确不一般.

我们的软工课也非同一般,不似国内传统的教学模式,虽然任务量大,但是确实让我上来就有那么一种感觉,如果好好抓住这次机会,我的专业水平将会得到一个很大的锻炼.

果不其然,上来的第一次作业就差点让人hold不住。

全英文的需求文档,看的磕磕绊绊,看完之后觉得还是不能很好的理解某些具体的需求,而且好不容易写完之后,老师紧接着改了3次需求文档,并且在极为紧张的时间下,要求按时提交(迟交零分,不交倒扣啊!)

虽说,对这种教学方式有点很不适应,但是,其实,这种情况是很真切的,因为以后的工作中肯定会遇到很多这样的突发情况,而且会读英文文档是计算机学生的一项应该必备的基本功。

言归正传,说到这次作业,就先要说说我自己。

因为前两年的规划问题,我并没有在专业和科技实践上投入过多的精力,甚至是欠缺,所以总体来讲自己编代码的能力还是蛮弱的。

所以,在这突如其来的第一次作业面前压力还是蛮大的。

我花了两天的时间熟悉VS12的环境,并学习了一些C#的基础知识,比如如何建立工程文件,读入输出文件等,当这些基础狂接弄清楚之后,我便用C语言面向过程的编程方法,运用数组存储和快排排序之后,简简单单的写出来程序,在我自己的小量测试数据上还是可以保证结果的准确信的,但是速度以及大容量数据的正确性却并未得到测试和验证,也实属有心无力,因为自己的码代码能力的确很需要练习。

看到同学们各种改进算法,哈希、LIST之类的,自己简直就是云里雾里,因为自己只是略微懂得一些最基本的知识,当然这些知识也得到了同学的一些帮助。

尽管,我现在并没有写出一个效率很好,很简洁的程序。

但是,我想通过我随后的不断学习、改进和努力,我可以在期末的时候写出一个优化的很好的程序。

尽管我的起点很低,但是我会好好努力,脚踏实地,慢慢地追赶上来。

我会把这个小程序一直做下去的,做到我满意为止。

 

以下是我现在写出来的低级版本:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.IO;namespace SP1_WFS_1._4{    class Program    {        //wordList store the word read        //frequency statistics the frequnence of the word        //numOfWord statistics the num of words        //postfix the postfix of one word         static string[] wordList;        static int[] frequency;        static int numOfWord;        static string[] postfix;        static void Main(string[] args)        {            wordList = new string[1000];            frequency = new int[1000];            numOfWord = 0;            postfix = new string[1000];            //When the first args of the command line is '-e',carry put extengded_mode            if (args[0] == "-e"){                extended_mode(args[1]);                write(args[1] + "\\sky.suruo@gmail.com.txt");            }            //otherwise,carry out simple_mode            else{                simple_mode(args[0]);                write(args[0] + "\\sky.suruo@gmail.com.txt");            }        }        static void extended_mode(string path)        {            DirectoryInfo folder = new DirectoryInfo(path);            //if the route isn't exist            if (folder.Exists == false)                Console.WriteLine("Don't have this path!!!");            else{                string[] allFiles = Directory.GetFiles(path);                for (int i = 0; i < allFiles.Count(); i++){                    char tempLetter;                    StringBuilder tempWord = new StringBuilder(), tempDigits = new StringBuilder();                    using (StreamReader sr = new StreamReader(allFiles[i])){                        //digitFlag mark read digit yes or not                        //numOfLetter is the num of letter before digit                        int flag = 0, sumOfLetter = 0, digitFlag = 0;                        while (sr.Peek() > 0){                            //filter the delimiters                            do{                                tempLetter = (char)sr.Read();                            } while (sr.Peek() > 0 && !(tempLetter >= 'a' && tempLetter <= 'z' || tempLetter >= 'A' && tempLetter <= 'Z' || tempLetter >= '0' && tempLetter <= '9'));                            do{                                //store it in tempDigits when it's digit                                if (tempLetter >= '0' && tempLetter <= '9'){                                    tempDigits.Append(tempLetter);                                    flag = 1;                                    digitFlag = 1;                                }                                else{                                    //count the num of letter,treat them as a word if num >3                                    //when digitFlag==0,numOfLetter stop +1                                    if (digitFlag == 0 && (tempLetter >= 'a' && tempLetter <= 'z' || tempLetter >= 'A' && tempLetter <= 'Z'))                                        sumOfLetter++;                                    //treat them as a part of the word only when letter was read follow                                    if (flag == 1){                                        tempWord.Append(tempDigits);                                        tempDigits.Clear();                                    }                                    tempWord.Append(tempLetter);                                }                                tempLetter = (char)sr.Read();                            } while (tempLetter >= 'a' && tempLetter <= 'z' || tempLetter >= 'A' && tempLetter <= 'Z' || tempLetter >= '0' && tempLetter <= '9');                            //insert the word which read right now to wordList                            if (sumOfLetter >= 3)                                insert(tempWord.ToString(), tempDigits.ToString());                            //initialize variable                            digitFlag = 0;                            flag = 0;                            sumOfLetter = 0;                            tempDigits.Clear();                            tempWord.Clear();                        }                    }                }                string[] allSonFolder = Directory.GetDirectories(path);                for (int i = 0; i < allSonFolder.Count(); i++){                    extended_mode(allSonFolder[i]);                }            }        }        static void simple_mode(string path)        {            DirectoryInfo folder = new DirectoryInfo(path);            //if the route isn't exist            if (folder.Exists == false)                Console.WriteLine("Don't have this path!!!");            else{                string[] allFiles = Directory.GetFiles(path);                for (int i = 0; i < allFiles.Count(); i++){                    char tempc;                    StringBuilder temps = new StringBuilder();                    using (StreamReader sr = new StreamReader(allFiles[i])){                        //same as above                        int numOfLetter = 0, digitFlag = 0;                        while (sr.Peek() > 0){                            do{                                tempc = (char)sr.Read();                            } while (sr.Peek() > 0 && !(tempc >= 'a' && tempc <= 'z' || tempc >= 'A' && tempc <= 'Z' || tempc >= '0' && tempc <= '9'));                            do{                                //same as above                                if (tempc >= '0' && tempc <= '9')                                    digitFlag = 1;                                //same as above                                if (digitFlag == 0 && (tempc >= 'a' && tempc <= 'z' || tempc >= 'A' && tempc <= 'Z'))                                    numOfLetter++;                                temps.Append(tempc);                                tempc = (char)sr.Read();                            } while (tempc >= 'a' && tempc <= 'z' || tempc >= 'A' && tempc <= 'Z' || tempc >= '0' && tempc <= '9');                            //same as above                            if (numOfLetter >= 3)                                insert(temps.ToString(), "");                            numOfLetter = 0;                            digitFlag = 0;                            temps.Clear();                        }                    }                }            }        }        static void insert(string temps, string digits)        {            //if the word is the first,assign it to the first            if (numOfWord == 0){                wordList[0] = temps;                postfix[0] = digits;                frequency[0] = 1;                numOfWord++;            }            else{                int i;                for (i = 0; i < numOfWord; i++){                    //if the wordList has store this word,it's frequence+1                    if (wordList[i].ToLower() == temps.ToLower()){                        frequency[i]++;                        if (string.CompareOrdinal(wordList[i], temps) > 0)                            wordList[i] = temps;                        if (postfix[i].CompareTo(digits) > 0)                            postfix[i] = digits;                        break;                    }                }                //if it's a new one,insert temps to the next of wordList                if (i == numOfWord){                    wordList[numOfWord] = temps;                    postfix[numOfWord] = digits;                    frequency[numOfWord++] = 1;                }            }        }        static void write(string path)        {            //sort it by it's frequnence before output            my_sort();            using (StreamWriter sw = new StreamWriter(path))            {                for (int i = 0; i < numOfWord; i++){                    sw.WriteLine("<"+wordList[i] + postfix[i] + ">:" + frequency[i]);                }            }        }        static void my_sort()        {            //sort by frequnence first            sort_frequency(0, numOfWord - 1);            //if the frequnence are the same,then sort by Letters sequence            int i = 0;            while (i < numOfWord - 1){                int j = i + 1;                //if the frequnence of two words are the same,then find all words which is the same frequence                while (frequency[i] == frequency[j] && j < numOfWord)                    j++;                if (j - i > 1)                    sort_alphabetical(i, j - 1);                i = j;            }        }        static void sort_frequency(int s, int t)        {            //QS                         int i, j;            if (s < t){                i = s;                j = t + 1;                while (true){                    do i++;                    while (!(frequency[s] >= frequency[i] || i == t));                    do j--;                    while (!(frequency[s] <= frequency[j] || j == s));                    if (i < j)                        my_swap(i, j);                    else                        break;                }                my_swap(s, j);                sort_frequency(s, j - 1);                sort_frequency(j + 1, t);            }        }        static void sort_alphabetical(int s, int t)        {            //QS            int i, j;            if (s < t){                i = s;                j = t + 1;                while (true){                    do i++;                    while (!((string.CompareOrdinal(wordList[s], wordList[i])) <= 0 || i == t));                    do j--;                    while (!((string.CompareOrdinal(wordList[s], wordList[j]) >= 0 || j == s)));                    if (i < j)                        my_swap(i, j);                    else                        break;                }                my_swap(s, j);                sort_alphabetical(s, j - 1);                sort_alphabetical(j + 1, t);            }        }        static void my_swap(int i, int j)        {            //a function to exchange two words            int tempi;            string temps;            temps = wordList[i];            wordList[i] = wordList[j];            wordList[j] = temps;            tempi = frequency[i];            frequency[i] = frequency[j];            frequency[j] = tempi;        }    }}

 

持续改进中。。。

转载于:https://www.cnblogs.com/DOOM-scse/archive/2012/10/07/2714644.html

你可能感兴趣的文章
PropertiesConfiguration读取值中包含英文逗号,用“\”转义
查看>>
url传参
查看>>
【转】Simulink模型架构指导
查看>>
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
Jdk1.8 HashMap源码分析
查看>>
新环境安装 python3
查看>>
牛客多校第三场 G Removing Stones(分治+线段树)
查看>>
[转载]java开发中的23种设计模式
查看>>
arm:启动代码判断是从nand启动还是从norflash启动,拷贝程序到内存的过程
查看>>
洛谷 P1308 统计单词数【字符串处理】
查看>>
C#中的继承
查看>>
表格的拖拽功能
查看>>
再回首Java第十八天
查看>>
QT5:QSS
查看>>
OpenCV2:幼儿园篇 第二章 读取图像
查看>>
搞好团队建设的致胜法宝
查看>>
实验二
查看>>
函数的形参和实参
查看>>