2023软工K班个人编程任务

欧旦杰 2023-09-14 22:59:42

作业链接:https://github.com/GSDJ999/102101429.git

一、PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划4060
Estimate估计这个任务需要多少时间6080
Development开发8601060
Analysis· 需求分析 (包括学习新技术)350280
Design Spec生成设计文档50220
Design Review设计复审60140
Coding Standard代码规范 (为目前的开发制定合适的规范)4020
· Design· 具体设计4040
· Coding具体编码290500
Code Review代码复审4050
Test测试(自我测试,修改代码,提交修改)120150
Reporting报告4050
· Test Repor测试报告4050
Size Measurement· 计算工作量4040
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划4040
 合计21602420

二、任务要求的实现

1.项目设计与技术栈

(1).本次作业难度较大,python得重新温习一下。在b站学习爬虫视频的教学视频,在csdn上借鉴相关的爬虫案例。遇到难点向室友求助。

(2)本次作业最大的难点是代码的编写,花的时间也是最多的。

(3)后面的数据整理也是看了实例或者向同学借鉴的,做的也比较差。

三、代码实现

import requests
import re

header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
    }

def get_Response(html_Url):  # 对于任意一个网址url,获取其html文件
    
    response = requests.get(html_Url, headers=header)
    if response.ok:
        response.encoding = 'utf-8'
        return response
    # 如果执行到这一步,就说明请求失败,报错并退出
    print(f"请求网页失败,状态码:{response.status_code}")
    SystemExit()

def get_Target_Video(target, num): # 从B站搜索栏中找排名前num的视频,爬取他们的BV号,target为搜索内容
    matches = []
    page = 0
    #从格式为 bvid:"BV....."中提取BV号
    match_Text = r'bvid:"([^"]+)"'
    for index in range(0,num,42): # 每次爬取42个BV号
        target_Url = f"https://search.bilibili.com/all?keyword={target}&o={index}&page={page}"
        print(target_Url)
        content = requests.get(target_Url,headers= header).text
        print(content)
        print(re.findall(match_Text,content))
        matches.extend(re.findall(match_Text,content))
        page += 1
    return matches[0:num]

    

def get_Cid(BV):  # 对于一个B站视频网址,获取其cid(即存储弹幕的网站key),输入为BV号
    bili_Url = f"https://www.ibilibili.com/video/{BV}/"
    content = get_Response(bili_Url).text
    # 我们用正则从html文件中提取 "bcid":"1252950136" 中的cid号
    match_Text = r'"bcid":"(\d*)"'
    match = re.search(match_Text, content)
    if match:
        cid = match.group(1)
        return cid
    # 如果执行到这一步,说明没有匹配到cid,报错并退出
    print("解析弹幕cid失败")
    SystemExit()


def get_Danmaku(cid):  # 对于一个cid,进入弹幕网站并爬取弹幕
    # danmaku(だんまく)就是弹幕的意思
    danmaku_Url = f"https://api.bilibili.com/x/v1/dm/list.so?oid={cid}"
    content = get_Response(danmaku_Url).text
    # 这样写看上去和上一个函数没什么两样,但我觉得可读性应该会好一点
    match_Text = r'<d[^>]*>([^<]+)</d>'  # 这次的格式是<d p=......>我是弹幕</d>
    matches = re.findall(match_Text, content)
    for match in matches:
        print(match)


def main():
    target = "日本核污染水排海"
    matches = get_Target_Video(target,50)
    


if __name__ == "__main__":
    main()
    # input("Press <Enter> to close\n")
import requests
from bs4 import BeautifulSoup
import re
import math
from openpyxl import Workbook
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from PIL import Image
import numpy as np

barrages_num=20#单个视频爬取弹幕数
video_num=40#爬取视频数

# 发送GET请求,获取视频页面的HTML内容
def get_video_html(url):
    response = requests.get(url)
    return response.text

# 发送GET请求,获取B站搜索结果页面的HTML内容
def get_search_results_html():
    page,html=1,''
    url = "https://search.bilibili.com/all?keyword=日本核污染水排海&order=click"
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
        "Cookie":"buvid3=2F38CD55-CCD9-0D05-EFAC-D78F4FCEE3A133631infoc; b_nut=1691060433; i-wanna-go-back=-1; _uuid=E37F628D-CE5A-5DD1-B23C-910B92326A76633722infoc; FEED_LIVE_VERSION=V8; header_theme_version=CLOSE; SESSDATA=d324dcc4%2C1706612493%2C8ce13%2A81zqyFrgt0rrTutbzOcf6NXii0x3EXBwvDIT9w6zs4rXoM6miWp779yNngwMbCD26szHztpgAAEgA; bili_jct=348a40f9dff0f5a035a9bec3dd91083c; DedeUserID=520029018; DedeUserID__ckMd5=179dfa6087c5f3f9; rpdid=|(mmJlY|~||0J'uYmu|Y|Rm); buvid4=0A6B4ED8-EFBE-C823-919F-2D38E9352F7055238-023020811-AYMpmfEzGjyejvuh2eCCkA%3D%3D; buvid_fp_plain=undefined; nostalgia_conf=-1; b_ut=5; is-2022-channel=1; LIVE_BUVID=AUTO1116911562759162; CURRENT_QUALITY=116; hit-new-style-dyn=1; hit-dyn-v2=1; CURRENT_BLACKGAP=0; fingerprint=d1f57f19105afe876875f4d406cae4a6; CURRENT_FNVAL=4048; home_feed_column=5; browser_resolution=1699-953; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTQxODU1MTIsImlhdCI6MTY5MzkyNjMxMiwicGx0IjotMX0.gFAVbUppg5H_wIZGERddzOAdrhwXERwn1ImjtxkE2AY; bili_ticket_expires=1694185512; PVID=3; buvid_fp=d1f57f19105afe876875f4d406cae4a6; b_lsid=12A610B5C_18A68640A2F; sid=6ocelinu; bp_video_offset_520029018=837948252620849161"
    }
    for page in range(math.ceil(video_num/30)):
        cur_url=url+"&page="+str(page)
        response = requests.get(cur_url,headers=header)
        html+=response.text
    return html

# 解析HTML,提取视频链接
def get_video_links(html):
    soup = BeautifulSoup(html, "html.parser")
    bvids = re.findall(r'bvid:"([^"]+)"', html)
    video_links = []
    for vid in bvids:
        video_links.append("https://www.bilibili.com/video/"+vid)
    return video_links

def tranfrom_url(url):
    url_index = url.find('bilibili')
    new_url = url[:url_index] + 'i' + url[url_index:]
    return new_url

# 解析视频页面,提取弹幕信息
def get_barrages_list(html):
    soup = BeautifulSoup(html, "html.parser")
    barrage_info = []
    barrages_url=re.findall('https://api.bilibili.com/x/v1/dm/list.so\?oid=\d+',html)
    barrages_response=requests.get(barrages_url[0])
    barrages_response.encoding='utf-8'
    barrages_list = re.findall('<d p=".*?">(.*?)</d>', barrages_response.text)
    return barrages_list

# 统计弹幕数量,并按照数量进行排序
def count_and_sort_barrages(barrage_list):
    barrages_count = {}
    for barrage in barrage_list:
        if barrage in barrages_count:
            barrages_count[barrage] += 1
        else:
            barrages_count[barrage] = 1
    sorted_barrages = sorted(barrages_count.items(), key=lambda x: x[1], reverse=True)
    return sorted_barrages

# 输出数量排名前20的弹幕
def output_top_barrages(sorted_barrages):
    for i, (barrage, count) in enumerate(sorted_barrages[:barrages_num]):
        print(f"{i+1}. 弹幕: {barrage},数量: {count}")

def save_excel(sorted_barrages):
    wb = Workbook()
    ws = wb.active
    ws.cell(row=1, column=1).value='排名'
    ws.cell(row=1, column=2).value = '数量'
    ws.cell(row=1, column=3).value = '弹幕'
    for i, row in enumerate(sorted_barrages[:20]):
        ws.cell(row=i + 2, column=1).value = 'No.'+str(i+1)
        ws.cell(row=i + 2, column=2).value = row[1]
        ws.cell(row=i + 2, column=3).value = row[0]
    wb.save('output.xlsx')

def creat_wordcloud(sorted_barrages):
    barrages_text = list(map(lambda x: x[0], sorted_barrages))
    barrages_cut=jieba.lcut(''.join(barrages_text))
    text = ' '.join(barrages_cut)
    stop={'了','死','的','是','吧','啊'}
    background_img=np.array(Image.open('earth_mask.jpg'))
    # 生成对象
    wc = WordCloud(font_path='simsun.ttc',
                   width=800, height=600,
                   max_words=400,
                   mode="RGBA",
                   background_color='lightblue',
                   mask=background_img,
                   stopwords=stop).generate(text)
    # 显示词云图
    plt.imshow(wc, interpolation="bilinear")
    plt.axis("off")
    plt.show()

# 主函数
def main():
    print("------开始爬取,等待一段时间------")
    search_results_html = get_search_results_html()
    video_links = get_video_links(search_results_html)
    barrage_info = []
    index = 0
    for link in video_links[:video_num]:
        new_link=tranfrom_url(link)
        video_page_html = get_video_html(new_link)
        barrage_info.extend(get_barrages_list(video_page_html))
        index+=1
        print(f'已爬取{index}条视频')
    sorted_barrages = count_and_sort_barrages(barrage_info)
    output_top_barrages(sorted_barrages)
    save_excel(sorted_barrages)
    creat_wordcloud(sorted_barrages)

# 执行主函数
if __name__ == "__main__":
    main()

四.可视化页面

 

五.心得体会

最大的心得就是差距太大了,对我来说难度太大了。做的稀里糊涂,交个差也很难,需要提升的地方太多了。付出的时间也要增加。多接触一些实例,多读有用的文章。各方面的技术不达标,得多付出点时间。这次作业也是看到了代码的神奇之处,之前接触太少了,小时候也没碰过电脑,这次算是激起了我的一点兴趣。

...全文
36 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
南京工程学院 车辆工程系 本科毕业设计(论文)开题报告 题 目:基于数字图像处理的车牌定位和分割的研究 专 业: 自动化(车辆电子电气) 级: K车电气051 学 号:240061443 学生姓名: 朱培诚 指导教师: 顾新艳 讲 师 2010年3月 说 明 1.根据南京工程学院《毕业设计(论文)工作管理规定》,学生必须撰写《毕业设计(论文)开题报告》,由指导教师签署意见、教研室审查,系教学主任批准后实施。 2.开题报告是毕业设计(论文)答辩委员会对学生答辩资格审查的依据材料之一。学生应当在毕业设计(论文)工作前期内完成,开题报告不合格者不得参加答辩。 3.毕业设计开题报告各项内容要实事求是,逐条认真填写。其中的文字表达要明确、严谨,语言通顺,外来语要同时用原文和中文表达。第一次出现缩写词,须注出全称。 4.本报告中,由学生本人撰写的对课题和研究工作的分析及描述,应不少于2000字,没有经过整理归纳,缺乏个人见解仅仅从网上下载材料拼凑而成的开题报告按不合格论。 5.开题报告检查原则上在第2~4周完成,各系完成毕业设计开题检查后,应写一份开题情况总结报告。 本科毕业设计(论文)开题报告 学生姓名 朱培诚 学 号 240061443 专 业 自动化(车辆电子电气) 指导教师 顾新艳 职 称 讲 师 所在院系 车辆工程 课题来源 自拟课题 课题性质 工程技术研究 课题名称 基于数字图像处理的车牌定位和分割的研究 毕业设计的内容和意义 采用数字图像处理的原理和技术,进行车牌区域的准确定位和分割的研究,给出相应的算法,并通过VC编程实现。 毕业设计的具体内容: 1.熟悉和了解数字图像处理的原理和技术。 2.熟悉VC的编程和调试方法。 3.掌握数字图像处理的常规算法,尤其对图像的几何校正,边缘检测、区域定位和图像分割原理和算法要有深入的了解。 4. 完成车牌区域的准确定位和分割的设计方案,给出相应的算法,并通过编程实现。 本课题研究的意义: 在交通路口的违章监视,在高速公路收费入口,在涵洞、桥梁的入口以及在停车场和加油站的管理中,都需要对汽车牌照进行记录,而目前这些工作大多数都是由人工完成的,工作量很大,有时也难免会出现错误,如果改用智能系统进行自动的检测和识别,则会大大提高工作的速度,降低管理人员的工作量,提高服务的效率与质量。 在国内现有技术的基础之上进一步研究汽车牌照智能识别技术实现对实时采集到的汽车牌照图像进行分析,准确定位分割、提取出图像中的汽车牌照,并快速自动智能地识别出汽车牌照,还可以全面消除人为因素,因而对车牌识别技术的研究和应用系统开发具有重要的现实意义。 文 献 综 述 车牌自动识别系统从上一世纪80年代开始进入应用研究阶段、这个阶段的研究没有形成完整的系统体系,而是就某一具体的问题进行研究,通常采用简单的图像处理方法来解决。进入20世纪90年代后,随着计算机视觉的发展和计算机性能的提高,开始出现车牌识别的系统化研究。中国、美国、日本、法国等国家相继投入大量的人力、物力进行应用研究,随着社会的进一步发展,交通状况急需更快的发展来适应经济发展需要,各国更加关注对该系统的研究和应用。 文献[1]中阐述了智能交通系统的概念于1990年由美国智能交通学会(ITS America,当时名称为IVHS America)提出,并在世界各国大力推广。经过10多年的推广、试行和发展,智能交通系统目前己在世界上经济发达国家和经济较为发达国家的一些都市及高速公路系统中实施。实践证明,迄今为止,在美国、欧洲、亚洲都已有成功应用的范例。在国外,以色列Hi-Tech公司的See/Car System系列,香港Asia VisionTechnology公司的VECON产品,新加坡Optasia公司的VLPRS系列都是比较成熟的产品。虽然国外汽车牌照识别系统研究工作己有一定进展,但并不适合我国汽车牌照识别,其原因主要有我国车牌本身的特点决定的。我国车辆牌照缺乏统一的标准,根据不同汽车、车型、用途,规定了多种牌照格式(例如分为军车、警车、普通车等);悬挂位置随机,使得车牌识别过程中缺乏规律,使车牌定位分割、字符切分难度增加,准确性降低;车牌长期暴露易受污损,使得车牌区域模糊不清,易发生粘连、断裂等现象,在国外发达国家不允许由于环境、道路或人为因素造成汽车牌照污染严重的车辆上路行驶;我国车辆牌照由汉字、字母和数字组成,汉字的识别与字母和数字的识别有很大的不同,从而增加了识别的难度;其他国家汽车牌照的底色和字符颜色统一,只有对比度较强的两种颜色,而我国汽车牌照底色和字符有蓝/白、黑/红、黑/白等多种颜色组合;还有设置的营运牌照及张贴的广告信息,容易在车牌定位时产生干扰、误定位;车牌附近环境恶劣,往往有复杂的外形及安全杠等,不利于快速定位。 文献[2]中阐述了国内在90年代也开始了车牌识别的研究。由于中国车牌与国外的差异,加上车牌上汉字的存在。所以照搬国外的技术并不完全可行。对于国内的己应用系统中较成功的有浙江大学开发的基于web模式的LPR系统,中科院自动化研究所汉王科技公司开发的“汉王眼车牌识别系统”。另外,亚洲视觉科技有限公司、深圳吉通电子有限公司、中国信息产业部下属的中智交通电子有限公司等也有自己的产品,另外西安交通大学的图像处理和识别研究室、上海交通大学的计算机科学和工程系、清华大学人工智能国家重点实验室等也做过类似的研究。目前这些系统普遍存在的问题有:全天候识别率并不稳定, 文 献 综 述 特别是在夜间,或不良天气下识别率会降低到50%左右。还有许多其它问题需要解决,如国内许多论文谈及已实现的系统,都是在对近似理想条件下的汽车图像识别,对于车牌倾斜角度很大,车牌上字符模糊等情况提出的解决办法甚少。因此这样的系统即使识别率较高,也是建立在苛刻的特定的拍照环境下的。车牌自动识别系统产品中还存在一些不足,因而LPR技术的研究还有许多工作要做:从目前一些产品的性能指标可以看出,LPR系统的识别率和识别速度有待提高。研究高速、准确的定位与识别算法是当前的主要任务。上述产品中所使用的汽车图像均为灰度图像,而车牌本身是彩色物体,其底色和字符颜色为有限的几种,具有明显的颜色特征,车牌定位及字符的分割和识别没有用到颜色特征,采用彩色图像模式,目前的算法也很少涉及颜色特征,这在一定程度上影响了系统的性能。对于车牌彩色信息的利用有待于深入研究。另外目前只能处理单个车牌的汽车图像,对于一幅图像中多个车牌的识别则无能为力。这使得目前对多个车道进行监控时,需要多套摄像设备和车牌识别所需的计算机。如能深入研究一幅图像中多个车牌的识别问题,则可降低系统成本,提高工作效率。 所以从技术上对牌照自动识别系统进行进一步的改进完善是很有必要的。在软件上这主要要求提高字符识别率,同时提高软件的运行速度,提高实时性。相信随着研究的深入,LPR技术定会走向成熟。 文献[3]中阐述了目前国内外汽车牌照定位与识别技术主要采用软硬结合方式和软件方式两种技术方案。所谓软硬结合方式,就是首先通过专用的图像抓拍设备获取一幅适合于计算机识别汽车牌照的高质量图像,然后用软件和硬件结合的方式对所获取的专用图像进行牌照识别,它的最大优点就是识别率高,能够全天候工作。所谓软件方式,就是通过识别软件对普通的车辆图像进行牌照识别,它的最大优点就是成本低,通用性好。车牌自动识别系统主要有摄像装置、视频采集接口、计算机和辅助照明装置组成。计算机通过视频采集接口采集摄像装置摄入的视频图像,经处理和识别得到车牌号。在自然光较暗影响识别效果时,由辅助照明装置提供摄像光源。硬件部分包括车辆感应器,高速摄影装置等。车辆感应器的功能是感应车辆的到来,触发高速摄影装置在一定时间内动作抓拍图像。如在高速公路上,通常在收费处前方公路两侧埋置电磁感应圈,当车辆驶入感应区内,电磁感应圈产生电流,触发摄影头工作。除此之外,还有激光红外线车辆感应器等。埋置电磁感应线圈的缺点是工程量大,而激光红外线车辆感应器容易引起二次触发,即脱车引起的触发拍照。动态车牌图像捕捉系统主要由高分辨率摄像机,多光谱照明灯,图像处理器及控制器组成。它根据亮度变化,即可完成车牌的抓拍。相比而言,动态车牌图像捕捉 文 献 综 述 系统可以在白天和夜间等多种情况下工作,清楚捕捉高速运动中的汽车牌照图像,其效果不受日光,车灯等环境因素的影响。大量实验表明该方案是最理想的解决可靠性的方案。 图像输入通常由硬件完成,牌照定位与字符识别通常由软件完成。 文献[4][5][6]中阐述了日前存在的大量的车牌定位算法,选择一个好的定位算法成为车牌识别的一个关键问题。文中针对基于投影法的车牌定位算法。在VC平台上对车牌图像进行预处理后,再通过找点和标出矩形即可实现车牌的定位。通过大量的试验得出,本算法可以解决车牌定位时遇到的绝大部分问题,具有较高的研究价值和社会经济效益。 文献[7]中对智能交通系统的核心技术——汽车牌照识别技术进行了研究,在图像处理技术的基础上,着重研究了车牌区域定位技术,析了日前有代表性的车牌定位方法,介绍了利用粒子图像测速关联PIV(Particle Image Velocimeter)算法原理,提出了一种采用车牌字符笔画2个边缘互相关值最大的方法进行车牌定位的算法,准确而快速地检出了车牌区域,为后续车牌字符识别打下了很好的基础。 文献[8][9][10][11]中阐述了针对不同尺寸车牌图像的定位问题,提出了一种新的自适应车牌定位方法。该方法首先根据车牌区域的共性来提取图像的纵向边缘;然后由车牌区纵向纹理和边缘密度等特征,采用一系列步骤自适应去除干扰边缘来保留类车牌特征区域;最后通过横向形态学运算使类车牌区闭合,以有效地克服以往形态学结构元素难以随车牌尺寸变化自适应选取的问题;同时提出了根据场景实际情况,选用灰度调整和颜色来判别模块的观点。通过实际场景中大量车牌样本的验证结果表明,该算法不仅准确率较高,而且自适应性良好,具有实用价值。 参考文献: [1] 刘允才.智能交通国际发展概况和国内优先考虑的课题[J].公路,2001,11(11):26-34. [2] Liu Jilin,Ma Hongqing.A High Performance License Plate Recognition System Basedon the Web Technique[D]. [3] 郑南宁,张西宁,戴莹,朱海安.行驶车辆牌照自动识别系统[J].西安交通大学学报,1991,l:43-53. [4] 张俭鸽,李娜.车牌定位在VC中的实现[J].中国科技信息,2009, (13):123-124. [5] 郑影.基于VC++的汽车牌照定位与识别系统的设计[D].吉林大学硕士学位论文,2009. [6] 张宏林.精通Visual C++数字图像模式识别技术及工程实践[M]:第2版.北 文 献 综 述 京:人民邮电出版社,2008. [7] 张丽伟,张晶.基于图像处理的车牌定位方法的研究[J].长春工程学院学报(自然科学版),2009,10(2):100-103. [8] 李宇成,阴亮.基于图像的运动车辆速度测量[J].北方工业大学学报,2008(3):32—36. [9] 王广宇.汽车牌照识别系统综述[J].郑州轻工业学院学报(自然科学报),2001,16(2):47-50. [10] 李波,曾致远,周建中.一种自适应车牌图像定位新方法[J].中国图象图形学报,2009,14(10):1978-1984. [11]Kenneth.R.Castleman.Digital Image Processing,Prentice Hall.1998,4. 研 究 内 容 本课题主要利用数字图像处理的原理和技术,完成车牌区域的准确定位和分割的设计方案,研究相应的算法,并通过编程实现。 其具体内容如下: 1、理解和掌握数字图像处理的原理和技术,能熟练运用数字图像处理的常规算法。 2、深入研究预处理中的灰度化、二值化、背景削弱、中值滤波等原理,以及图像的灰度变换空间滤波处理等,探索车牌定位常用的方法,研究现在流行的一些算法,总结出其优点和缺点,能够继承传统方法的优点,并加以改进和提高。 3、掌握算法实现的编程语言,熟练运用设计实现的平台Visual C++ 6.0,提高查阅资料的能力,并通过编程实现车牌的定位。 4、研究一种新型的车牌定位方法,本课题采用多层次分割的思想,每次分割都尽可能地减少分析范围,经过多次分割后最终定位出车牌区域。 研 究 计 划 第1-2周 收集资料,熟悉课题,确定系统总体研究方案。 第3周 熟悉资料,写出开题报告。 第4—5周 熟悉数字图像处理的主要内容。 第6—7周 熟悉VC语言的编程和调试方法。 第8—9周 熟悉并掌握数字图像的常规算法,重点研究边缘检测和区域分割等算法。 第10-11周 用VC编程实现并调试各个处理模块。 第12-13周 对整个系统进行软件联调,整理设计成果。 第14周 撰写论文。 第15周 修改论文,准备答辩。 第16周 毕业答辩。 特 色 与 创 新 在车辆识别系统中,牌照区域定位是影响车牌识别系统性能的重要因素之一车牌定位准确与否直接影响字符识别的准确率,以往的拍照定位重要包括:J.Barroso等基于提出的基于水平线搜索的定位方法;R.Parisi提出的机遇TFC变换的频域分析法;Charl Coeitzee等提出的基于Niblack二值化算法及自适应边界搜索算法的定位方法。这些方法或者对背景比较复及光照条件比较敏感,或者定位速度比较慢,为了克服这些缺陷,本课题提出了基于特征的车辆牌照实时定位算法和多层次分割算法,能够更高效地实现车牌的准确定位和分割,充分体现了该系统的实时性。 指导教师 意 见 指导教师签名: 年 月 日 教研室意见 主任签名: 年 月 日 系部意见 教学主任签名: 年 月 日

114

社区成员

发帖
与我相关
我的任务
社区描述
2023福州大学软件工程K班
软件工程 高校 福建省·福州市
社区管理员
  • kevinkex
  • Devil angel
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧