要求零:https://www.cnblogs.com/ranh941/p/7999266.html
要求一:https://git.coding.net/xup457/wf.git
要求二:看了邹欣的书,学习了这个表格,感觉非常实用,不仅能够给自己制定一个合理的计划来完成任务,还能用来总计自己在完成过程中的用时,来反映不如,不过把自己的个个人信息全部曝光在网上真的好吗,把书上的东西用这样卑劣的手段来宣传,看来是有人想攻击这本书,谁布置的作业要求,谁提出的要求二,好过分有没有考虑清楚,之前就有同学的博客被一个程序员转发后遭到了攻击。
SP2.1 | 任务内容 | 计划需要时间(min) | 实际完成时间(min) |
Planning | 计划 | 50 | 90 |
Estimate | 估计开发所需要的时间,需要的工作步骤,需要的思路和方法 | 50 | 90 |
Development | 开发 | 800 | 2000 |
Analysis | 需求分析(软件,语言工具等) | 150 | 300 |
Design Spec | 生成设计文档 | 20 | 60 |
Design Reviewe | 设计复审(和同事审核设计文档) | 10 | 26 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 20 | 70 |
Desgin | 具体设计 | 200 | 600 |
Desgin | 具体编码 | 200 | 300 |
Code Review | 代码复审 | 50 | 150 |
Test | 测试(自我测试,修改代码,提交修改) | 150 | 200 |
Record Time Spent | 记录用时 | 120 | 200 |
Test Report | 测试报告 | 20 | 500 |
Size Measurement | 计算工作量 | 20 | 40 |
Postmortem & Process Improvement Plan | 事后总结和提出过程改进计划 | 80 | 80 |
功能模块 | 具体阶段 | 预计时间 (min) | 实际时间 (min) |
功能1 | 具体设计 | 40 | 60 |
具体编码 | 120 | 200 | |
测试完善 | 40 | 60 | |
功能2 | 具体设计 | 40 | 130 |
具体编码 | 110 | 150 | |
测试完善 | 50 | 120 | |
功能3 | 具体设计 | 30 | 45 |
具体编码 | 140 | 156 | |
测试完善 | 30 | 63 |
#include<bits/stdc++.h> #include<io.h> #define ll long long #define debug(x) cout<<#x<<" : "<<x<<endl; #define psl pair<string , ll> using namespace std; bool XUP_num_get(string &XUP_pp , int& file_num) { string tmp = ""; auto i = XUP_pp.find("-n"); if( i == string::npos ) return 0; i += 3; for(;i < XUP_pp.size() ; i++ ){ if( XUP_pp[i] == ' ' ) break; tmp += XUP_pp[i]; } stringstream ss; ss<<tmp; ss>>file_num; return 1; } void get_all_file(string XUP_path , vector<string>& son_files , string XUP_fmat) { long hFile = 0; struct _finddata_t fileinfo; string p; if( ( hFile = _findfirst( p.assign( XUP_path ).append("\*" + XUP_fmat).c_str() , &fileinfo ) ) != -1 ) { do { if( fileinfo.attrib & _A_SUBDIR ){ if( strcmp( fileinfo.name , "." ) != 0 && strcmp( fileinfo.name , ".." ) != 0 ) get_all_file( p.assign(XUP_path).append("\").append(fileinfo.name), son_files , XUP_fmat ); } else son_files.push_back( p.assign( fileinfo.name ) ); }while( _findnext( hFile , &fileinfo ) == 0 ); _findclose(hFile); } } void XUP_read_txt(string file_name , string& str) { ifstream file; file.open( file_name.c_str() ); string s; while( getline( file , s ) ) str = s + ' ' + str; transform( str.begin() , str.end() , str.begin() , ::tolower ); file.close(); } struct cmp { bool operator ()(const psl& a , const psl& b){ return a.second != b.second ? a.second > b.second : a.first < b.first; } }; //, string XUP_s void XUP_solve( string XUP_input_str ) { map<string , ll> mp; string str = "" , tmp = ""; string file_name ; string son_str; ifstream file; file.open( file_name.c_str() ); string son_s; while( getline( file , son_s ) ) son_str = son_s + ' ' + son_str; transform( son_str.begin() , son_str.end() , son_str.begin() , ::tolower ); file.close(); int file_num; bool limit = XUP_num_get( XUP_input_str , file_num ); for( auto ch : str ){ if( ch >= '0' && ch <= '9' || ch >= 'a' && ch <= 'z' ){ tmp += ch; continue; } if( !tmp.empty() ){ if( tmp[0] >= 'a' && tmp[0] <= 'z' ) mp[tmp]++; tmp = ""; } } if( !tmp.empty() ){ if( tmp[0] >= 'a' && tmp[0] <= 'z' ) mp[tmp]++; tmp = ""; } if( !limit ){ cout<<"total "<<mp.size()<<endl; puts(""); for( auto it : mp ) cout<<left<<setw(30)<<it.first<<it.second<<endl; } else{ cout<<"Total words is "<<mp.size()<<endl; puts("------------------"); vector<psl> vec( mp.begin() , mp.end() ); sort( vec.begin() , vec.end() , cmp() ); for( auto it : vec ){ cout<<left<<setw(30)<<it.first<<it.second<<endl; file_num--; if( !file_num ) break; } } } bool XUP_File_get(const string now , string &File_Name) { auto i = now.find("-c"); if( i == string::npos ) return false; i += 3; for(;i < now.size() ; i++ ){ if( now[i] == ' ' ) break; File_Name += now[i]; } return true; } bool XUP_Path_get(const string now , string &Path_Name) { auto i = now.find("-f"); if( i == string::npos ) return false; i += 3; for(;i < now.size() ; i++ ){ if( now[i] == ' ' ) break; Path_Name += now[i]; } return true ; } int main() { string XUP_input_str , XUP_File_Name = "" , XUP_Path_Name = "" , XUP_files = "" , XUP_real_file; getline( cin , XUP_input_str ); bool have_Path = XUP_Path_get( XUP_input_str , XUP_Path_Name ); bool have_File = XUP_File_get( XUP_input_str , XUP_File_Name ); if( have_Path ){ vector<string> files; const string format = ".txt"; get_all_file( XUP_Path_Name , files , format ); sort( files.begin() , files.end() ); XUP_real_file = XUP_Path_Name + "\" + files[0]; } else XUP_real_file = XUP_File_Name; XUP_solve(XUP_input_str );//, XUP_real_file return 0; } /* wf -f D:ACM±à³Ì±ÈÈüÖÐ -n 2 wf -c pipifan.txt */
要求三:我与同学讨论过一些具体代码的写法以上可以说是我个人的风格绝对没有抄袭,我刚拿到问题的时候,觉得吧,是先把文件中的字符串按空格把单词提取出来,然后统计单词数量我先是想用map,或者结构体的,然后写一个排序函数cmp,再写一个指令判断的函数来判断指令来进行不同的操作;我对从文件中读出字符串不太熟悉,查了一些资料,到网上找一些没把个人信息公开的博主看了他们的资料,学习到了不少知识,了解到了,从路径读取文件的必备函数,真如邹欣老师所说的博客学习真的很重要,真的是前几年读博客学习,博客们都写的很详细,他们要是靠这个提高名声的,他们也有利用弱势群体压迫他们写博客来提高名声的,网络危险,何况我们信息被人曝光,如果被一些人威胁,让我们威胁做苦力或者是做一些不好的事,怎么找人,怎么帮助我们证明清白?看来又有人要诋毁声誉了,居心叵测啊。
难点:在于这个博客怎么写才能不被别人攻击,老师们发的讲解都没说到细节上,但是那些小人就是要歪曲我们的意思,来找一些不清不楚的观点攻击我们,请老师换一个安全方式交作业。
心理历程:讲真的代码虽然不简单,写了很久,但是最让我挣扎的是这个博客,写了实话会被那些打分的人低分,甚至会有水军攻击他们,而且我们在看一个外企资深员工写的关于网络的书,我们只是普通大学生,在社会上没什么安全保障,个人信息被人曝光到网上,外企员工动不动就问我们博客地址,这个人对网路十分熟悉,有数十万粉丝,好强的。
总结:我认为,应该改成纸质作业,以及博客文字不涉及代码的总结,对于代码写在纸上,助教可以来我们班听课,了解老师在课上所讲的内容也好切合实际留作业,尽量少出现留作业连续出错还强行说成是试炼还和所留内容课程无关的尴尬场面,他在班上的时候也可以判断一下作业分数,这样在正常的工作时间来解决现在存在的问题的方法不是很好吗?希望助教可以考虑,听说你在你们那届的风评不好,如今这些评价已经传到了我们这些与你毫无关系的学弟学妹耳中,希望你多考虑以后每届都这样。。。。不会的吧?而且不要出一些对外企员工的书不利的作业要求,你这样做外界会说他这是变相让我们给他打工,你看看外面的谣言要是这么说你你可怎么办。再说说构造之法虽然看不懂,写的迷迷糊糊不过好像很厉害,推荐同学看了,不知道他们会看吗?我也没问。