第一次个人编程作业

1.Github地址

https://github.com/chenshanshan333/031702311

(因为C++评测的时候自己一直无法解决乱码的问题,所以代码现在上传了用python写的)

2.PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 65
· Estimate · 估计这个任务需要多少时间 1400 1500
Development 开发 80 95
· Analysis · 需求分析 (包括学习新技术) 115 130
· Design Spec · 生成设计文档 40 30
· Design Review · 设计复审 120 145
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 80 75
· Design · 具体设计 30 45
· Coding · 具体编码 20 15
· Test · 测试(自我测试,修改代码,提交修改) 120 130
Reporting 报告 35 45
· Test Repor · 测试报告 30 25
· Size Measurement · 计算工作量 20 15
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 35
· 合计 2180 2350

3.解题思路描述

1.输入输出采用的是文件流的方式。
2..因为手机号混杂在地址中,所以可以先把手机号切割出来。
3.姓名与地址用逗号隔开,所以可以先用“,”切割出来姓名,然后还要替换掉原来姓名的部分。
4.先判断直辖市,北京、上海、天津、重庆,有的话可以直接切割出来,用字符串存取,然后就是省和市部分的取值,切割完后还要替换掉原来字符串所在的位置。
5.如何不是直辖市,先查找是否有“省”字,如果有直接进行切割,如果没有用设置好的字符串是所有省份的进行判断,看是否存在相同,存在的话直接进行切割。
6.接着切割下一级,先用“市”进行切割,如何查找到“市”的位置,就进行切割,切割完后要进行替换,如果没有找到就用设置好的市的字符串进行比较,如果有存在的话,就进行切割,用字符串存取,还要替换原来字符串所在的位置。
7.接着切割第三级县、区、县级市,同样用关键字“县、区、市”进行切割,找到了同样用字符串进行存取,如果没有找到则为空字符串。
8.再着用“街道、镇、乡”关键字进行查找,找到后切割用字符串进行存取,如果没有找到则字符串为空字符串
9.以上为划分为5级地址的步骤。
10.7级地址时,先用关键字“街、路、巷”进行切割,切割后用字符串进行存取,存取完后还要用空字符串进行替换,若没有找到关键字则用空字符串表示。
11.最后用关键字“号”进行切割,切割后用字符串进行存取,存取后切割,切割完后要进行替换,若没有找到则用空字符串进行表示。
12.最后把切割后的字符串用json格式输出,保存在文件中。

然后就开始翻c++的书,复习一下基本的语法,看题目后遇到不懂的就各种百度,进行学习。

4.设计实现过程

关键函数 用途
str.find() 用于查找关键字所在的位置
str.substr(int a,int b) 用于获取所要的字符串
str.replace(int a,int b,char c) 用于替换掉原字符串被切割的部分
string zdjq(string fg,string zd) 在主函数外设定的用于获取所要字符串并进行返回
string zdjq1(string fg,string zd) 在主函数外设定的用于把切割完的字符串进行返回

关键代码

string zdjq(string fg,string zd) 
 {
 	string dz_jq="";
 	int q=-1;
	q= zd.find(fg);
	if(q>-1)	
	{
	 dz_jq=zd.substr(0,q+fg.length());//获取所要字符串
	 zd=zd.replace(0,q+fg.length(),"");//把原字符串中所要部分用空格替换
	}
	return dz_jq;//返回主函数,返回值是所要部分并用字符串存取
 }

string zdjq1(string fg,string zd) 
 {
 	int q=-1;
	q= zd.find(fg);
	if(q>-1)	
	{
	 zd=zd.replace(0,q+fg.length(),"");//把原字符串所要部分用空格替换 
	}
	return zd;//返回主函数,返回值是原字符串被切割后剩下的部分
 }

计算机接口性能的改进

性能改进:因为用c++打代码会比较长,所以因为切割和替换经常被使用然后就设定在主函数之外,需要的时候在调用,避免主函数太长。

计算模块部分单元测试展示

#include "stdafx.h"
#include "CppUnitTest.h"
#include "../addressbook/addressbook.h" //添加原始项目的头文件,建议相对路径
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace addressbookTest {//addressbook项目单元测试 
TEST_CLASS(UnitTest1) {//测试类
public: 
TEST_METHOD(TestMethod1) {//测试函数
// TODO: 在此输入测试代码
Assert::AreEqual(15, add(5, 10));
}
};
}

```c++
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
2!小洪,上海市1526347892鼓楼区虹口路223号.
2! 郭空,广东省广州市越秀1854693625区中山六路109号.
1! 林勤,重庆市交锋镇16122237895东街52号.
1!韶划奸,上海15717060981市普陀区长风新村街道光复西路1995号中山北路6-17号海鑫公寓.
2!楚涡握,湖北18883549874省随州市随县吴山镇唐王街联宏村委会.
1!钭洋,福建省龙岩市新罗区岩山13135601243镇岩山供销社黄固村农资农家店.

[{"姓名":"李四","手机":"13756899511","地址":["福建省","福州市","鼓楼区","鼓西街道","湖滨路","110号","湖滨大厦一层"]},
{"姓名":"张三","手机":"13599622362","地址":["福建省","福州市","闽侯县","上街镇","福州大学10#111"]},
{"姓名":"王五","手机":"18960221533","地址":["福建省","福州市","鼓楼区","","五一北路","123号","福州鼓楼医院"]},
{"姓名":"小美","手机":"15822153326","地址":["北京","北京市","东城区","","交道口东大街","1号","北京市东城区人民法院"]},
{"姓名":"小陈","手机":"13965231525","地址":["广东省","东莞市","","凤岗镇","凤平路13号"]},
{"姓名":"小洪","手机":"1526347892","地址":["上海","上海市","鼓楼区","","虹口路","223号",""]},
{"姓名":"郭空","手机":"1854693625","地址":["广东省","广州市","越秀区","","中山六路","109号","",
{"姓名":"林勤","手机":"16122237895","地址":["重庆","重庆市","","交锋镇","东街52号"]}
{"姓名":"韶划奸","手机":"15717060981","地址":["上海","上海市","普陀区","长风新村街道","光复西路1995号中山北路6-17号海鑫公寓"]},
{"姓名":"楚涡握","手机":"18883549874","地址":["湖北省","随州市","随县","吴山镇","唐王街","","联宏村委会"]},
{"姓名":"钭洋","手机":"13135601243","地址":["福建省","龙岩市","新罗区","岩山镇","岩山供销社黄固村农资农家店"]}]

代码覆盖率指的是程序中源代码被测试的比例。

异常处理

使用的方法是
try
{......}
catch()
{..... }
1.当找不到目标文件的时候进行异常处理。
2.当所给地址无姓名时进行报错。
3.当找不到电话号码的时候进行报错。

最终所花时间

见上述PSP表格

心路历程与收获

一开始看到题目的时候,第一眼觉得的是题目好长,但是仔细看了之后,理了一下自己的思路,想清楚题目是一步步根据关键字进行切割的。
对于java、c++、python,还是选择了自己比较熟悉的c++。因为自己太过于懒散,导致非常长的一段时间没有打过代码,对于c++的基本语法
都感觉到生疏。原本以为只是根本关键字进行切割应该不会很难,结果越打自己越混乱,时不时就翻书、百度。就这样一直打,打完改错误,
占用了自己非常长的时间,深深地感觉到日常慢慢积累打代码的重要性。接着开始熟悉要求,json格式......,因为自己太菜了,json格式不会
调包,就只能手打了。Github上传文件、评测工具、异常处理、单元测试等等一些之前没接触过的东西,为了作业,各种百度查资料,虽然
到最后自己并没有全部地学会,但是感觉熬夜的这几天还是有收获的。同时也感受到了自己与别人的差距,给自己敲一个大大的警钟,希望
接下去自己可以一步一步地学习有关做项目的知识,在团队项目的时候可以帮的上忙!

posted @ 2019-09-17 22:31  也许hhh。  阅读(182)  评论(3编辑  收藏  举报