2020软工实践第一次个人编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2020
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167
这个作业的目标 GitHub的使用,对json文件的解析及处理
学号 031802608

一、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60
Estimate 估计这个任务需要多少时间 200
Development 开发 100
Analysis 需求分析 (包括学习新技术) 300 600(时间还在不断上升)
Design Spec 生成设计文档 20
Design Review 设计复审 15
Coding Standard 代码规范 (为目前的开发制定合适的规范) 10
Design 具体设计 60
Coding 具体编码 30
Code Review 代码复审 50
Test 测试(自我测试,修改代码,提交修改) 20
Reporting 报告 20
Test Report 测试报告 15
Size Measurement 计算工作量 3
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 10
合计 913

二、解题思路

我是谁,我在哪,我要干嘛。看完题目不知道我该怎么下手,示例给的是python...直到示例数据出来,我才知道是要让我们处理json文件。emmm,从来没有接触过的东西。在经过两天百度c语言处理json文件的方法,使用jsoncpp头文件能处理json文件,但好像这次作业还是力不从心,最后give up(???)。想用python吧,但是我还没做过跟python有关的任何编程(???)。
截止保存,明白了python遍历文件夹、打开json文件的函数

9/17
通过不断翻看同学代码,慢慢理解,终于把部分代码打出来了 ..
还差参数指令没太明白
https://mp.weixin.qq.com/s?src=11&timestamp=1600346553&ver=2590&signature=UfxUhe3yoD9IbxfDJp58mCg2StHCceHGSrGydzlChRKQ-EYWavTKFy6C467vvRE927svGFYS9G9aDBx8WgNhT2DQqop7voAiMTHmCc5GxdsAvE3wQCGWha6fh6BLCb&new=1

三、设计实现过程

emmm,还是先学会python再来balabala吧...
目前为止能写出的东西...

在面向同学设计之后,通过阅读代码,理解之后,多出了一些东西

def _init(self, Address):
    user_event = {}
    repo_event = {}
    user_repo_event = {}
    for root, dic, files in os.walk(Address):
        # 遍历文件夹
        for f in files:
            if f[-5:] == '.json':
                event = ["PushEvent", "IssueCommentEvent", "IssuesEvent", "PullRequestEvent"]
                json_path = f
                x = open(Address + '\\' + json_path , 'r' , encoding='utf-8').readlines()
                for i in x :
                    i = json.loads(i)
                    if  i["type"] in event:
                        self.add_user_event(i, user_event)
                        self.add_repo_event(i, repo_event)
                        self.add_user_repo_event(i, user_repo_event)
    with open("user_event.json", "a") as f:
        json.dump(user_event, f)
    with open("repo_event.json", "a") as f:
        json.dump(repo_event, f)
    with open("user_repo_event.json", "a") as f:
        json.dump(user_repo_event, f)

def add_user_event(self, i, user_event):
    id = i["actor"]["login"]
    event = i["type"]
    if id not in user_event:
        #如果此ID未出现过,就建立新数据
        user_event[id] = {"PushEvent":0,"IssueCommentEvent":0,"IssuesEvent":0,"PullRequestEvent":0}
    user_event[id][event] +=1

def add_repo_event(self, i, repo_event):
    repo = i["repo"]["name"]
    event = i["type"]
    if repo not in repo_event:
        repo_event[repo] = {"PushEvent":0,"IssueCommentEvent":0,"IssuesEvent":0,"PullRequestEvent":0}
    repo_event[repo][event] += 1

def add_user_repo_event(self, i, user_repo_event):
    id = i["actor"]["login"]
    event = i["type"]
    repo = i["repo"]["name"]
    if id not in user_repo_event:
        user_repo_event[id] = {}
        user_repo_event[id][repo] = {"PushEvent":0,"IssueCommentEvent":0,"IssuesEvent":0,"PullRequestEvent":0}
    if repo not in user_repo_event:
        user_repo_event[id][repo] = {"PushEvent":0,"IssueCommentEvent":0,"IssuesEvent":0,"PullRequestEvent":0}
    user_repo_event[id][repo][event] +=1
     #对数据进行处理和分析,制作三个json分别存储user_event,repo_event,user_repo_event
def get_user_event(self, user, event):
    x = open("user_event.json", "r", encoding="utf-8").read()
    data = json.loads(x)
    return data[user][event]
def get_repo_event(self, repo, event):
    x = open("repo_event.json", "r", encoding="utf-8").read()
    data = json.loads(x)
    return data[repo][event]
def get_user_repo_event(self,user, repo, event):
    x = open("user_repo_event.json", "r", encoding="utf-8").read()
    data =json.loads(x)
    return data[user][repo][event]

通过同学代码和裕哥代码的理解,终于把class run给弄明白了 ...

    def __init__(self):
    self.parser = argparse.ArgumentParser()
    self.data = None
    self.argInit()
    print(self.analyse())

def argInit(self):
    self.parser.add_argument('-i', '--init')
    self.parser.add_argument('-u', '--user')
    self.parser.add_argument('-r', '--repo')
    self.parser.add_argument('-e', '--event')
def analyse(self):
    if self.parser.parse_args().init:
        self.data = Data(self.parser.parse_args().init, 1)
        return 0
    else:
        if self.data is None:
            self.data = Data()
        elif self.parser.parse_args().user and self.parser.parse_args().event and not self.parser.parse_args().repo:
            res = self.data.get_user_event(self.parser.parse_args().user, self.parser.parse_args().event)
        elif self.parser.parse_args().repo and self.parser.parse_args().event and not self.parser.parse_args().user:
            res = self.data.get_repo_event(self.parser.parse_args().repo, self.parser.parse_args().event)
        elif self.parser.parse_args().user and self.parser.parse_args().event and self.parser.parse_args().repo:
            res = self.data.get_user_repo_event(self.parser.parse_args().user, self.parser.parse_args().repo, self.parser.parse_args().event)
    return res

emm 用上面的方法报错 初始化失败... ...但是我不知道问题是什么 ...所以沿用了同学的代码

def analyse(self):
    if self.parser.parse_args().init:
        self.data = Data(self.parser.parse_args().init, 1)
    elif args.user and args.event and not args.repo:
        data = Data()
        print(data.get_user_event(args.user, args.event))
    elif args.repo and args.event and not args.user:
        data = Data()
        print(data.get_repo_event(args.repo, args.event))
    elif args.user and args.repo and args.event:
        data = Data()
        print(data.get_user_repo_event(args.user, args.repo, args.event))

七、代码规范链接

https://github.com/wysnzzzz/2020-personal-python/blob/master/codestyle

八、总结

自闭....还是太菜了....加油学习python....尽早写出代码 QAQ
先交了保个命?

磕磕绊绊终于是写出了代码 ...

posted @ 2020-09-16 23:20  wysnzzzz  阅读(156)  评论(2编辑  收藏  举报