个人项目 python实现
一. github地址:https://github.com/zjh1234562/WC
二 . PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
| Planning | 计划 | 10 | 10 |
| Estimate | 估计这个任务需要多少时间 | 10 | 10 |
| Development | 开发 | 510 | 590 |
| Analysis | 需求分析 | 10 | 20 |
| Design Spec | 生成设计文档 | 30 | 30 |
| Design Review | 设计复审 | 10 | 10 |
| Coding Standard | 代码规范 | 40 | 50 |
| Design | 具体设计 | 20 | 40 |
| Coding | 具体编码 | 350 | 400 |
| Code Review | 代码复审 | 30 | 20 |
| Test | 测试(自我测试,修改代码,提交修改) | 20 | 20 |
| Reporting | 报告 | 100 | 120 |
| Test Report | 测试报告 | 40 | 60 |
| Size Measurement | 计算工作量 | 10 | 20 |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 50 | 60 |
| Total | 总计 | 620 | 720 |
三. 解题思路
- 分析需求:这个作业要求的是根据用户输入的参数,文件名,从而对文件进行相应的统计。因此主要功能可分解为:命令行参数读取(包括参数,文件名),文件统计功能,界面,支持统配符。针对这些要实现的功能,我们可以一一分析解决。
- 命令行参数读取:该功能可以利用内置库sys实现,对用户输入的参数进行读取分析,并且用list储存。
- 文件统计功能:实现统计字符,单词,行数,注释行,空白行等功能,利用IO,对文件逐行进行读取,然后逐行累加,直到文件末尾,并将最后的结果返回。并且利用try...expect语句,实现对文件错误情况的处理,不至于出错直接中断程序,提供更良好的交互。
- 界面:该功能要实现与用户的交互,界面的设计较简单,利用filedialog函数可以实现用户选取文件。
- 支持通配符:实现可以利用正则表达式或者字符串的相关操作完成,先获得用户输入的文件名后缀,然后利用os库获取相对应的目录的所有文件名,最后利用正则表达式对文件进行筛选,返回符合后缀的文件,并用list存储。
- 单个功能都实现了,然后就是整合,编写main函数对功能的调用进行逻辑处理。
四. 设计过程
代码主要分为三个类,分别为文件统计类,界面类,主类。
- 文件统计类(Count):实现了文件统计功能,针对每个功能编写一个函数(这样以后要添加新功能就可以在这个类添加函数就行了),分别为
get_word(实现-w功能)
get_line(实现-l功能)
get_char(实现-c功能)
get_other(实现-a功能)
get_allwj(实现通配符功能)
- 界面类:
openfile(实现用户选取文件功能)
gui(实现界面功能)
countfile(在界面展示信息)
- 主类:
main

五. 测试结果
测试文件说明:file.c(一个正常的源程序),file1.c(空文件),file2.c=(只有一个字符),file3.c(只有一个词),file4.c(只有一行)

测试结果截图:
1.测试-w,-s,-l,-c,-a功能

2.输入不存在文件时:

3.测试-x功能:


代码覆盖率:

测试时未调用图形界面,因此GUI.py覆盖率较低
六.项目总结:
本次软件工程的作业使用面对对象编程,虽然面对过程也能完成任务,但是代码后期就会很难维护,并且冗余度也会很高,因此选用面对对象。选用的语言是python,使用的也都是自带的标准库。按照软件工程的方法,实现了一个小程序的开发,编码过程固然重要,但是在开发的过程,我发现其它的步骤也是尤为重要,这也是我们为什么需要学软件工程的原因。总之通过正常的作业,也算了解到软件开发所需要的过程及相关的知识。
个人项目 python实现的更多相关文章
- 项目: python爬虫 福利 煎蛋网妹子图
嘿嘿嘿! 嘿嘿嘿! 福利一波, 之前看小甲鱼的python教学视频的时候, 看到上面教的爬虫, 爬美女图片的, 心很痒痒, 但是不知道为啥, 按照视频一个字一个字敲的代码,总是报错, 有一天花了 一下 ...
- 结对项目(python) 黄浩伟 黄飞越
作者:黄浩伟 黄飞越 一 .Github项目地址: https://github.com/Flying123haha/123.git 二.psp表格: PSP2.1 Personal Softwar ...
- ssc项目Python爬虫心得
###今日心得 ####time.datetime 1.字符串格式到标准化格式:time.strptime(str, "%Y%m%d") 2.今天的标准化格式:today = da ...
- 使用 tox flake8 pytest 规范 python 项目
使用 tox flake8 pytest 规范 python 项目 python 中有些很好的工作来规范整个项目的开发,而其中使用较多的就是使用 tox . flake8 . pytest . tox ...
- python项目
python实战项目: http://www.the5fire.com/category/python实战/ python基础教程中的十个项目: python项目练习一:即时标记 python项目练习 ...
- 以正确的方式开源 Python 项目
以正确的方式开源 Python 项目 大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清 晰和无痛.我不是 ...
- Pipenv项目化你的python应用
目录 Pipenv 什么是pipenv 安装pipenv pipenv用法 使用pipenv开发项目 pipenv 结合 pyenv Pipenv 什么是pipenv Pipenv is a prod ...
- Python+Django(Python Web项目初体验)
参考:https://blog.csdn.net/qq_34081993/article/details/79229784 Django是一个开放源代码的Web应用框架,由Python写成. 安装Dj ...
- 想使用gevent、mysql、sqlalchemy实现python项目协程异步达到并发的效果
如题,但是查看了很多资料,都说python这边的mysql不支持异步并发,只能阻塞进行,心塞30秒,暂时放弃这方面的研究 如果不操作数据库的化,比如请求url.操作文件,还是可以用gevent来异步实 ...
随机推荐
- destoon漏洞修复关于 $do->add($post); SQL注入修改
在阿里云漏洞提示查看发现destoon有关于mobile/guestbook.php $do->add($post); SQL注入修改 漏洞名称:Destoon SQL注入 补丁文件:/mobi ...
- LeetCode 53. Maximum Subarray最大子序和 (C++)
题目: Given an integer array nums, find the contiguous subarray (containing at least one number) which ...
- [LeetCode] 662. Maximum Width of Binary Tree 二叉树的最大宽度
Given a binary tree, write a function to get the maximum width of the given tree. The width of a tre ...
- 分布式共识算法 (三) Raft算法
系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.引子 1.1 介绍 Raft 是一种为了管 ...
- android 模拟输入框edittext控件按下回车或扫描头扫描到条码
edtScan.setText(result); edtScan.onEditorAction(EditorInfo.IME_ACTION_NEXT); 场景:PDA都有扫描头,但有时想用自己的手机来 ...
- 2018-2019-2 20162329 《网络对抗技术》Exp9: Web安全基础
目录 Exp9: Web安全基础 一.基础知识 1.SQL注入攻击 2.XSS跨站脚本攻击 3.CSRF跨站请求伪造 二.SQL注入 1. 命令注入 2. 数字注入 3. 日志欺骗 三.XSS攻击 1 ...
- java常量池-字符串常量池、class常量池和运行时常量池
原文链接:http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/ 在java的内存分配中,经常听到很多关于常量 ...
- 物联网典型场景之智能家电,使用JOSH技术带来的优势和机会~
很多人一直问,用JOSH技术如何改变智能家电,有没有真正的必要? 一部分人的观点:我可以用嵌入式C.汇编完成家电的程序,毕竟这些设备的程序很简单: 另一部分的人:智能家电互相的连接都一直有人在做啊,并 ...
- Laravel服务容器的绑定与解析
本篇文章给大家带来的内容是关于Laravel服务容器的绑定与解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 老实说,第一次老大让我看laravel框架手册的那天早上,我 ...
- linux下c++如何输入不回显
#include <stdio.h> #include <termios.h> #include <unistd.h> #include <iostream& ...