软件工程个人项目作业
软件工程个人项目作业
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020春季计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 个人项目作业 |
我在这个课程的目标是 | 学习工程化开发软件 |
这个作业在哪个具体方面帮助我实现目标 | 软件的工程化 |
教学班级 | 006 |
项目地址 | https://github.com/YANGHARAM/intersect |
一.PSP表
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
· Estimate | 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | ||
· Analysis | · 需求分析 (包括学习新技术) | 30 | 40 |
· Design Spec | 生成设计文档 | 30 | 40 |
· Design Review | 设计复审 (和同事审核设计文档) | 10 | 10 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 20、 |
· Design | 具体设计 | 20 | 30 |
· Coding | 具体编码 | 40 | 70 |
· Code Review | 代码复审 | 20 | 20 |
· Test | 测试(自我测试,修改代码,提交修改) | 30 | 50 |
Reporting | 报告 | ||
·Test Report | 测试报告 | 30 | 30 |
·Size Measurement | 计算工作量 | 10 | 10 |
·Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 20 |
·Size Measurement | 合计 | 280 | 370 |
二.思路描述
输入的字符串用strtok_s函数分成5个字符串,然后这5个字符串转换为整数(int型)。
一个直线有两个点:(x1,y1),(x2,y2)这样的话他的倾斜a=(y1-y2)/(x1-x2).所以如果有交点的话两个直线相互不能平等。这就是两个直线的倾斜a1,a2不一样。a1!=a2.
用for函数比较输入的直线。然后不平等的话result++。但是如果交点重复的话不能加1.所以判断是不是交点重复。。最后输出result真。
三.设计实现过程
数据结构(直线):
用直线的一般是:Ax+By+C=0.
class Point {
public:
string L;
double x1;
double y1;
double x2;
double y2;
double A;//Ax+By+C=0
double B;
double C;
public:
Point(){
x1 = 0;
y1 = 0;
x2 = 0;
y2 = 0;
A = 0;
B = 0;
C = 0;
}
Point(string l,double X1, double Y1, double X2, double Y2) {
L = l;
x1 = X1;
x2 = X2;
y1 = Y1;
y2 = Y2;
}
};
交点判断:
用倾斜a公式判断两个直线是不是平等。如果不是的话就是有交点。
bool check(Point p1, Point p2) {
double a1;
double a2;
a1 = (p1.y1 - p1.y2) / (p1.x1 - p1.x2);
a2 = (p2.y1 - p2.y2) / (p2.x1 - p2.x2);
if (a1 == a2)return false;
else return true;
}
判断交点重复:
用for函数一个一个比较交点是不是重复,如果重复的话输出false就是不加1。
bool check_dot(dot D[],int d) {
if (d == 1)return true;
for (int i = 0; i < d-1; i++) {
for (int j = 1 + i; j < d; j++) {
if ((D[i].x == D[j].x) && (D[i].y == D[j].y))
return false;
else
return true;
}
}
}
求交点:
用交点求公式。
void result_dot(dot &k,Point p1, Point p2) {
double a = (p1.A * p2.B) - (p1.B * p2.A);
if (((p1.B * p2.C) - (p1.C * p2.B)) == 0.0) {
k.x = ((p1.B * p2.C) - (p1.C * p2.B));
}
else
k.x = ((p1.B * p2.C) - (p1.C * p2.B)) / a;
if (((p1.C * p2.A) - (p1.A * p2.C)) == 0.0) {
k.y = ((p1.C * p2.A) - (p1.A * p2.C));
}
else
k.y = ((p1.C * p2.A) - (p1.A * p2.C)) / a;
}
计算result:
double solve(Point p[],int n) {
for (int i = 0; i < n; i++)
{
ABC(p[i]);
}
double result = 0;
int d = 0;
if (n == 1)return 0.0;
for (int i = 0; i < n - 1; i++)
{
// 1 2 3 4 5
for (int j = 1 + i; j < n; j++) {
if (check(p[i], p[j]) && (p[i].L == "L") && (p[j].L == "L")) {
result_dot(D[d++], p[i], p[j]);
if(check_dot(D,d))
result++;
}
}
}
return result;
}