【软件工程】实验3:软件详细设计

news2024/11/19 15:39:41

CAM系统的类图

在这里插入图片描述

CAM系统的顺序图

在这里插入图片描述

CAM系统模拟实现(CAM工具库封装)

1、代码运行界面

(1)根据提示输入要加工的图形类型
(2)J-Soft软件会根据输入的数字提示用户输入不同的图形参数,图形参数输入完后,相应的调用9#Lab开发的库中的函数,根据传递进来的信息,生成加工路径,并进行加工
(3)加工完成后提示用户结果信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、库函数

#include<stdio.h>

//圆
void circle(float r)
{
    printf("正在生成加工路径......\n");
    printf("加工路径已生成,开始工作\n");
    printf("【##      】工作完成进度25\n");
    printf("【####    】工作完成进度50\n");
    printf("【######  】工作完成进度75\n");
    printf("【########】工作完成进度100\n");
    printf("图形切割已完成!\n");
    printf("半径:%f\n",r);
    printf("------------------------\n");
}
//正方形
void square(float l)
{

    printf("\t正在生成加工路径......\n");
    printf("\t加工路径已生成,开始工作\n");
    printf("\t【##      】工作完成进度25\n");
    printf("\t【####    】工作完成进度50\n");
    printf("\t【######  】工作完成进度75\n");
    printf("\t【########】工作完成进度100\n");
    printf("\t图形切割已完成!\n");
    printf("\t正方形边长:%f\n",l);
    printf("------------------------\n");
}
// 矩形
void rectangle(float length,float width)
{
    printf("\t正在生成加工路径......\n");
    printf("\t加工路径已生成,开始工作\n");
    printf("\t【##      】工作完成进度25\n");
    printf("\t【####    】工作完成进度50\n");
    printf("\t【######  】工作完成进度75\n");
    printf("\t【########】工作完成进度100\n");
    printf("\t图形切割已完成!\n");
    printf("\t矩形长:%f,宽:%f\n",length,width);
    printf("------------------------\n");
}
//三角形
void triangle(float a,float b,float c)
{
    printf("\t正在生成加工路径......\n");
    printf("\t加工路径已生成,开始工作\n");
    printf("\t【##      】工作完成进度25\n");
    printf("\t【####    】工作完成进度50\n");
    printf("\t【######  】工作完成进度75\n");
    printf("\t【########】工作完成进度100\n");
    printf("\t图形切割已完成!\n");
    printf("\t三角形边长[a:%f,b:%f,c:%f]\n",a,b,c);
    printf("------------------------\n");
}

int main()
{
    printf("欢迎使用J-Soft计算机辅助制造系统!\n");
    printf("------------------------\n");
    printf("1:圆形\n");
    printf("2:正方形\n");
    printf("3:矩形\n");
    printf("4:三角形\n");
    printf("5:退出\n");
    printf("------------------------\n");

    while(true){
        printf("欢迎使用J-Soft计算机辅助制造系统!\n");
        printf("操作:");
        int choice;
        scanf("%d",&choice);
        if(choice==1){
            float r;
            printf("请输入半径:");
            scanf("%f",&r);
            circle(r);
        }
        else if(choice==2) {
            float l;
            printf("请输入边长:");
            scanf("%f",&l);
            square(l);
        }
        else if(choice==3){
            float length,width;
            printf("请输入长:");
            scanf("%f",&length);
            printf("请输入宽:");
            scanf("%f",&width);
            rectangle(length,width);
        }
        else if(choice==4){
            float a,b,c;
            printf("请输入边长a:");
            scanf("%f",&a);
            printf("请输入边长b:");
            scanf("%f",&b);
            printf("请输入边长c:");
            scanf("%f",&c);
            triangle(a,b,c);
        }
        else if(choice==5){
            printf("谢谢使用!\n");
            return 0;
        }
        else
            printf("指令错误!\n");
    }
}

三、对设计质量进行自我评估

  • 可读性:在变量与函数名的命名上,遵循见名知意原则,可以通过名称较好的了解该模块的内容,做了一定的注释,来让review的同学和老师阅读更方便
  • 可扩展性:功能性代码之间相对独立,扩展新增功能的话不会太影响到原来的代码逻辑,尽量的去做到少修改源代码而实现新功能。
  • 可维护性、可复用性、灵活性、简单性等都是只能保持在简单的逻辑下才能比较好的保持。
  • 自身编程水准有限,只是做的简单的模拟,并没有考虑到细节的问题,所以才能稍微的让代码易懂可读一些,如果是真正的实现复杂的逻辑,在可读性、可扩展性等质量评价方面,可能就会下降,转而变为只考虑是否能够实现,而较难的去同时考虑代码质量问题。

四、产品需求更改的影响分析

  • 如若山理集团转型生产五星形不锈钢版,首先对于J-Soft公司来说,需要在操作页面增加五星形的加工选项,在接受到五星形的加工请求的时候,需要调用新的库函数。
  • 分析我们的需求Noam变更,由初版的圆形变为现在的五星形,在进行库函数的调用之前,我们需要在原来的判断结构中再加一个判断,然后再在这个判断函数中提示用户输入新的参数,调用库中新的函数。可能会产生如下的一些影响,
  • 此时应该进行重构

【参考资料:徐老师💗】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/110778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

函数栈帧(栈区)

函数栈帧&#xff08;栈区&#xff09;一.前言二.main函数空间的开辟&#xff08;函数调用是如何做到的&#xff09;三.main函数内部的变量初始化&#xff08;局部变量是如何创建的以及为什么是随机值&#xff09;四.main函数内部的函数创建1.函数是如何传参的2.传参的顺序以及…

物联网通信技术原理第2章 无线通信技术(期末重点)

目录 2.1 无线通信基本知识 2.1.2 无线通信的特点 2.2 无线信道 2.2.1 恒参无线信道举例 2.2.2 恒参无线信道特性及其对信号传输的影响 1. 幅度—频率畸变 2. 相位—频率畸变​编辑 2.2.3 随参无线信道距离 1、短波电离层反射 2、对流层散射信道 2.2.4 随参信道特性及…

漏洞深度分析|Apache Karaf 4.2.16 存在JNDI 注入漏洞

项目地址 GitHub - apache/karaf: Mirror of Apache Karaf 项目介绍 Apache Karaf是一个模块化运行时&#xff0c;支持多种框架和编程模型&#xff08;REST/API、web、spring boot 等&#xff09;。它提供了统包功能&#xff0c;您可以毫不费力地直接利用这些功能&#xff0…

戴维南定理

定理内容&#xff1a;任意二端口直流网络都可以被一个等效电路替换&#xff0c;这个等效电路只包含一个电压源和一个串联电阻&#xff0c;如图1所示。 图1 戴维南定理的作用 1、分析含有非串联或非并联电源的网络 2、用最少数量的元件实现复杂网络的端口特性&#xff08;端口前…

【深入浅出Spring原理及实战】「开发实战系列」SpringSecurity原理以及实战认证分析开发指南

前提介绍 承接上一篇文章&#xff0c;相信大家应该已经对SpringSecurity的原理有了一定的认识&#xff0c;而本篇文章给大家带来的则是在实际业务开发中的技术指南&#xff0c;希望对你有所帮助。所谓知彼知己方能百战百胜&#xff0c;用Spring Security来满足我们的需求最好了…

我们国家都有哪些信息安全标准

写在前面 早年刚参加信息安全工作更多的学点皮毛技术&#xff0c;到处找安全工具&#xff0c;跟踪poc&#xff0c;拿到一个就全网扫一遍&#xff0c;从来没有想过&#xff0c;系统化的安全工作应该怎样搞?我做的工作在安全体系中处于哪个阶段? 后来有机会做企业安全建设&…

503.下一个更大元素II,42. 接雨水

503. 下一个更大元素 II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数…

C++:vector操作笔记

本文记录了对C中的vector容器的简单操作&#xff0c;包括给vector添加元素、按指定列排序、取值。 文章目录一、vector 和普通数组之间的转化二、根据vector数组的某一列数据排序三、删除二维 vector 数组最后一列数据一、vector 和普通数组之间的转化 1&#xff0c;数组转vec…

Mysql日志体系

3、Mysql日志体系 bing log &#xff1a;在server记录mysql所有的DDL和DML语句&#xff0c;主要用来做主从复制和数据恢复。内容追加&#xff0c;没有固定大小限制。redo log &#xff1a;undo log &#xff1a; 3.1、bin log 3.1.1、binlog日志作用 binlog记录所有的DDL和…

Unity CEO:玩家不在乎AR还是VR,他们只想要优质内容

近期&#xff0c;Unity CEO John Riccitiello在接受英国金融时报采访时&#xff0c;透露了自己对于游戏的前生今世&#xff0c;以及AR/VR和未来的看法。他认为&#xff0c;打造一个新平台需要大量优质内容&#xff0c;创意对于新平台很重要&#xff0c;不管AR和VR技术有什么区别…

java医院挂号系统挂号预约网站挂号网站预约网站源码

主要实现门诊挂号和用户网站预约挂号的功能 演示视频&#xff1a; https://www.bilibili.com/video/BV1nN411d7HT/?share_sourcecopy_web&vd_sourceed0f04fbb713154db5cc611225d92156 环境&#xff1a;jdk7/8mysql5.5tomcat7/8 技术&#xff1a;ssm(springspringmvcmyi…

读书笔记---Bioinformatics Data Skills

最近阅读了《Bioinformatics Data Skills》&#xff0c;是不错的生物信息学入门书&#xff0c;本文作者简介如下&#xff1a; 全书以下面三个方向展开&#xff0c;为生物信息学的继续学习指明了道路&#xff1a; &#xff08;1&#xff09;生物信息学数据技巧&#xff08;第一章…

动态DNS与DPDK高性能DNS -DPDK环境搭建

工具准备&#xff1a; vmware Ubuntu 16.04 Server 版本 1.vmware 添加两块网卡 桥接网卡作为 DPDK 运行的网卡 NAT 网卡作为 ssh 连接的网卡 2.修改网卡配置信息 将 ethernet0.virtualDev 由 e1000 修改 vmxnet3&#xff0c;因为 vmware 的 vmxnet3 支持多队 列网卡 3.修…

Qt对象树

对象模型&#xff08;对象树&#xff09; 类似于c中虚析构实现的功能一样&#xff0c;在释放父类对象的同时调用子类的析构函数释放子类对象 也c调用析构函数的区别是&#xff1a;会先调用父类的析构函数&#xff0c;然后一层层往下调用子类析构&#xff0c;直到调用到底层子…

10.1、Django框架简介、创建第一个应用

文章目录预备知识MVC模式和MTV模式MVC模式MTV 模式Django框架Django框架简介Django框架的应用启动后台admin站点管理数据库迁移创建管理员用户管理界面本地化创建并使用一个应用bookapp项目的数据库模型创建数据库模型生成数据库表数据库上的基本操作启用后台admin站点管理自定…

Vue框架--Ruoyi解析(前端)

路由router注册 router目录下的 index.js 配合 permission.js 是整套vue前端项目的权限判断核心. index.js 里面的path 配置都是一些不会与权限挂钩的路由,例如: 404、登录页面路径等. permission.js 中的 router.beforeEach 是路由拦截,在访问某个链接之前会进行权限判断,但是…

Mob教你汇总常见的用户注册和登录方式

目前市面上APP的常见的用户注册和登录方式有三种&#xff0c;第一种是最早期的手机号码密码登录&#xff0c;第二种是常见的 手机号码短信验证码&#xff0c;第三者是最新推出&#xff0c;且正被各大应用APP接入采用的" 一键登录"秒验方式。本文从运行方式、优势、劣…

【Leetcode】965. 单值二叉树、100. 相同的树、572. 另一棵树的子树

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 965. 单值二叉树 100. 相同的树 572. 另一棵树的子树 965. 单值二叉树…

蓝桥杯,我劝你不要参加的8个完美理由

蓝桥杯&#xff0c;是一个全国高校的IT技术比拼&#xff0c;如果你参加了&#xff0c;可能不止是刷题数量的剧增&#xff0c;还有你的软件人生 我劝你不要参加&#xff0c;因为如果你参加了&#xff0c;可能会有以下烦恼&#xff1a; 目录 1、会让你变得上进 2、会提前感受码…

OpenCV inRange 函数使用详解

本文是 OpenCV图像视觉入门之路的第6篇文章&#xff0c;本人详细的解决了RGB转HSV&#xff0c;HSV通过AI来进行HSV转 inRange() 函数的范围值操作&#xff0c;简单全面的解决了OpenCV对于图像中某个颜色的分析工作&#xff0c;本文通过识别红色区域和蓝色区域来编写示例程序和博…