计算机软件著作权 (软著)申请流程

本文详细介绍了计算机软件著作权(软著)的免费登记流程、自行申请步骤和找代理的优缺点。从2017年起,软著登记不再收费,但申请人可以选择自行申请或找代理以节省时间和精力。自行申请涉及在线注册、填写申请表、准备材料和邮寄。找代理则可以提供加急服务和材料撰写,但会产生费用。此外,文章还提供了说明书模板供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

二、关于代理

三、要省钱,自己填(自行申请流程)

         四、要省事、找代理(节省精力、缩短下证时间,但有费用)

         五、说明书模板


一、关于软著(免费登记)

从2017年4月1日开始,版权保护中心停止征收计算机软件著作权登记费,即当前的软著普通登记是免费。在这里对普通登记进行一下说明,普通登记是指在版权保护中心业务大厅进行软著登记,登记方式有两种:1、现场提交,需要登记申请人或代理人通过提前预约的方式去往版权局大厅进行现场提交登记,该方式适合位于北京的申请人,提交后审查员进行初步审查,初审通过发放受理通知书,后续无补正情况下31工作日之后下证,申请人可凭借受理通知书现场取证,或通过邮寄取证(时间较长),总体时间在两个月左右2、邮寄提交,申请人按照要求整理好软著申请所需材料后,将所有申请材料邮寄至版权保护中心,材料到达之后等待大约20天左右进入受理阶段,初审通过后通过邮件发放受理通知书,后续无补正情况下31工作日之后下证,证书只能通过邮寄送达至申请人,总体申请时间在3~4个月。上述时间均为软著材料正常,不需要补正的情况,若软著材料不合格会发放软著补正通知书,补正材料亦可以通过现场提交或邮寄方式进行提交,中间处理过程较慢大约二十天左右。普通申请时间较长,审核相对较为严格,但如若各申请人正常开发完成的软件,整理说明书和代码文件仔细一些,一般下证书都没什么问题。对于时间比较充足且对于下证时间没有较大的需求申请人,完全可以不通过代理自行完成计算机软件著作权登记。

二、关于代理

软著代理通过收取一定费用的代理费的方式负责为客户处理软著申请事宜,在这里与其说是代理费,更确切的说是服务费。代理将申请人需要处理的材料规范性处理、流程性问题进行打包处理,为申请人节省时间精力,能够尽可能的减少软件补正几率从而提升证书授权通过率。同时一般的代理能够提供加急办理业务,使得申请人能够较快的获得证书,加急办理时间在3-31工作日不等。另外,对于只为了要一个证书的申请人,部分代理能够提供全包服务,说明书和软件都能代写。

总体说来:1、申请人自行申请免费,但时间较长,会占据一定的精力时间,同时一些不起眼的小问题会导致软著驳回补正;

                  2、通过代理申请,省时省力下证快,但是有费用支出,要求的下证时间越快费用越高。

### 实现 Spring Boot 中的省市区三级联动 #### 项目初始化与配置 为了实现省市区三级联动,首先需要创建一个新的 Spring Boot 项目并添加必要的依赖项。这包括 `web`, `jpa`, `lombok`, `mysql` 和 `jdbc` 启动器[^1]。 ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> </dependencies> ``` #### 数据库表设计 假设已经有一个包含省份、城市和区县的数据表结构。这些数据可以通过 SQL 脚本预先填充到 MySQL 数据库中。 #### Mapper 接口定义 对于每一个级别的区域(省/市/区),都需要编写相应的 MyBatis 或 JPA 的 Repository 来操作数据库。这里以 MyBatis 为例: ```java public interface TAddressProvinceMapper { @Select("SELECT * FROM t_address_province") List<TAddressProvince> getAllProvinces(); } public interface TAddressCityMapper { @Select("SELECT * FROM t_address_city WHERE province_code = #{provinceCode}") List<TAddressCity> getCitiesByProvinceCode(@Param("provinceCode") String provinceCode); } public interface TAddressTownMapper { @Select("SELECT * FROM t_address_town WHERE city_code = #{cityCode}") List<TAddressTown> getTownsByCityCode(@Param("cityCode") String cityCode); } ``` #### 修改启动类扫描包路径 为了让 Spring 自动发现所有的 Mapper 接口,可以在应用入口处通过 `@MapperScan` 注解指定 mapper 文件所在的包名[^2]。 ```java @SpringBootApplication @MapperScan(basePackages = "com.example.mapper") public class ProvinceApplication { public static void main(String[] args) { SpringApplication.run(ProvinceApplication.class, args); } } ``` #### 控制器层处理请求 控制器负责接收来自前端的选择变化事件,并返回对应下一级别的选项列表给前端展示。 ```java @RestController @RequestMapping("/api/address") public class AddressController { private final TAddressProvinceMapper provinceMapper; private final TAddressCityMapper cityMapper; private final TAddressTownMapper townMapper; @Autowired public AddressController(TAddressProvinceMapper provinceMapper, TAddressCityMapper cityMapper, TAddressTownMapper townMapper) { this.provinceMapper = provinceMapper; this.cityMapper = cityMapper; this.townMapper = townMapper; } @GetMapping("/provinces") public ResponseEntity<List<TAddressProvince>> listProvinces() { return new ResponseEntity<>(provinceMapper.getAllProvinces(), HttpStatus.OK); } @GetMapping("/cities/{provinceCode}") public ResponseEntity<List<TAddressCity>> listCities(@PathVariable String provinceCode) { return new ResponseEntity<>(cityMapper.getCitiesByProvinceCode(provinceCode), HttpStatus.OK); } @GetMapping("/towns/{cityCode}") public ResponseEntity<List<TAddressTown>> listTowns(@PathVariable String cityCode) { return new ResponseEntity<>(townMapper.getTownsByCityCode(cityCode), HttpStatus.OK); } } ``` #### 前端 Vue.js 集成 在前端部分可以采用 Vue.js 框架来构建交互界面。当用户选择不同的级别时触发 AJAX 请求获取新的子集数据更新视图[^4]。 ```html <div id="app"> <select v-model="selectedProvince" @change="fetchCities()"> <option value="">请选择省份...</option> <option v-for="item in provinces" :value="item.code">{{ item.name }}</option> </select> <select v-if="selectedProvince" v-model="selectedCity" @change="fetchDistricts()"> <option value="">请选择城市...</option> <option v-for="item in cities" :value="item.code">{{ item.name }}</option> </select> <select v-if="selectedCity" v-model="selectedDistrict"> <option value="">请选择区县...</option> <option v-for="item in districts" :value="item.code">{{ item.name }}</option> </select> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script> <script> new Vue({ el: '#app', data: () => ({ selectedProvince: '', selectedCity: '', selectedDistrict: '', provinces: [], cities: [], districts: [] }), methods: { fetchProvinces() { axios.get('/api/address/provinces') .then(response => (this.provinces = response.data)); }, fetchCities() { if (!this.selectedProvince) return; const url = `/api/address/cities/${this.selectedProvince}`; axios.get(url).then(response => (this.cities = response.data)); }, fetchDistricts() { if (!this.selectedCity) return; const url = `/api/address/towns/${this.selectedCity}`; axios.get(url).then(response => (this.districts = response.data)); } }, created() { this.fetchProvinces(); } }); </script> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值