202202-发际线跟我作队 实验九 团队作业6:团队项目编码
一、实验目的与要求
项目 | |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/2019nwnucs |
本次作业要求链接 | https://edu.cnblogs.com/campus/xbsf/2019nwnucs/homework/12699 |
团队名称 | 发际线跟我作队 |
团队成员分工描述 | (1)毛玉贤:完善系统设计说明书、编码 (2)蒋敏敏:编码 (3)张颖:环境搭建、项目编码规范说明 |
团队的课程学习目标 | (1)掌握软件编码实现的工程规范。 |
这个作业在哪些方面 助团队实现学习目标 |
(1)团队成员线上交流学习,使得我们对于讨论的问题可以清晰的抒发各自的观点; (2)成员彼此讲解自己对所学内容的理解,解答他人疑惑,提升了团队对基本概念的理解,加深印象; |
团队博客链接 | 发际线跟我作队 |
团队项目Github仓库链接 | 传送门 |
二、实验内容与步骤
1、任务一:完善《实验八 项目需求分析建模与系统设计(2)》的项目系统设计说明书,进一步细化分析系统设计模型,精化类的属性和操作,详细定义类中服务参数和具体实现逻辑,调整类的层次关系和关联关系,定义软件数据库表结构等。并编制《XXX软件设计说明书1.2》发布在团队项目Github仓库。
1.1 完善《系统软件设计说明书1.2》
-
细化分析系统设计模型
本系统共分为六个模块,资源管理模块、论坛模块、笔记模块、题库模块、个人信息模块、消息模块。-
资源管理模块
所开发的网站需要有丰富的资源供用户使用,包括系统提供的资源以及普通用户上传的资源,开源数据集等,资源管理模块实现了用户资源上传、资源分类(文档或文件夹)、资源删除、管理员的审核等功能,为用户上传下载资源,提供了便捷的途径。 -
论坛模块
一个好的知识学习网站,论坛功能是少不了的,论坛功能提供给用户随时随地发帖的机会,在学习过程中遇到不懂的问题,可以随心发帖,请教热心的技术伙伴,一起交流讨论问题,同时系统会为用户精准推送同一地区技术伙伴的帖子,以及笔记、文档等资源,这为用户提供了结交周边技术好友的机会。 -
笔记模块
用户在使用网站资源进行学习的同时,希望能随时在线记录所学知识,记录学习过程中的易混淆点、重点、难点,帮助学习,方便复习。笔记模块的编辑功能采用了用户比较喜欢的Markdown排版,编辑简单方便,同时用户可以查看下载其他用户公开发表的笔记,参考学习。 -
题库模块
背包知识社区系统,不仅要能进行知识资源的下载查看,还能进行相应模块的练习,巩固用户掌握的知识,用户能根据难度、题目类型搜索相应的编程练习题,还可以搜索具体的题目标题,来找相应的题目。 -
个人信息
用户可以修改自己的身份信息,设置自己的空间是否公开以及公开范围等。 -
消息模块
用户之间可以进行交流,对任何一个问题发表自己的见解,建立一个友好的可交流的资源平台,可以有效地提高用户的学习效率并增进人与人之间的交流。
-
-
精化类的属性和操作
- 完善后的类图(黑色为新增)
-
资源类(新增部分说明,下同)
- 属性:对于资源类的设计在原来的基础上新增了资源内容、以及(资源的)删除时间两个属性,在上次实验的过程中,只考虑到资源编号、类型等属性的存储而忽略了资源内容也是需要存储的,故在此基础上,新增了内容。由于资源在被用户上传后,也有可能由于某些原因而被用户弃用或删除,故也增加了删除时间;
- 操作:删除后的资源会被存放在系统资源模块的回收站中,默认情况系统30后将自动彻底清除,在此期间用户均可以还原被删除的资源文件,重新进行上传、使用等,操作合理;
-
帖子类
- 属性:在帖子类中,新增了帖子内容、发帖用户、(帖子的)更新时间,以及删除时间,四个属性,通过上次老师对实验八作业的点评,让我们也意识到了自己的问题。在帖子类中,帖子的内容也需要存储,在发布帖子后,再次修改帖子的更新时间需要显示,以及发帖人。当用户删除帖子时,也需要记录删除时间,删除后的帖子同样会进入回收站中。
- 操作:新增的操作有:还原删除帖子以及查看帖子,帖子在被用户删除后,会进入回收站,与资源类删除相似,可以再30天内随时还原删除的帖子,重新修改或发布等。当用户在使用该系统时,必然有查看功能。
-
笔记类
- 属性:不管是资源、帖子这些类都缺少存储内容的属性,笔记类也不例外,新增了存储笔记内容的属性。并且需要记录发布或创建此条笔记的用户。
- 操作:对于笔记的操作,不仅可以进行添加、修改、删除等操作,当用户看别人的笔记时,可以进行点赞、收藏和评论,同帖子类一样,用户之间可以对互相的发布的帖子、笔记之间进行点赞、收藏和评论操作,当然用户可以互相查看各自的笔记。
-
邮件类
- 属性:新增邮件内容、邮件发送者两个属性,邮件的内容需要存储在数据库中,同时用户所接受的邮件,发送者也需要进行记录。
- 操作:用户可以查看邮件,该部分修改了之前的错误,以及增加了本项目缺少的基础部分。
-
练习题类、用户资源类、系统资源类、用户界面类
- 这些类的修改将不再具体赘述,新增内容均为上次实验中缺少,或修改错误后的内容,由于上次考虑不完善,所以在上次的基础上,新增了这些内容。
-
个人信息类
- 属性:个人信息类原来没有添加,这是上次实验八的最考虑欠妥的地方,普通用户需要有修改个人信息的权利,例如,修改姓名、性别、生日、城市、简介等等基本信息,其中个人信息继承了用户类的各种属性,在此基础上,它也有属于自己特有的属性,黑名单,此处的黑名单指的是用户黑名单。
- 操作:可以进行基本信息的修改以及用户对黑名单的操作。
-
调整类的层次关系和关联关系
- 软件数据库表结构
- 根据课程题目的要求,经需求分析,需用到七个表,分别为注册用户表,资源上传表,帖子发布表,笔记记录表,练习题库表,邮件接收表,系统管理员表。详细属性及其主码如小表所示,其中加下划线的为该表的主码。
编号 | 数据结构名 | 属性 |
---|---|---|
1 | 注册用户 | 用户编号、姓名、年龄、生日、城市、学校、手机号、邮箱、简介、密码 |
2 | 资源上传 | 用户编号、资源编号、资源类别、上传时间、更新时间、审核状态 |
3 | 帖子发布 | 帖子编号、标题、发表时间、发表用户、评论量、点赞量、收藏量 |
4 | 笔记记录 | 用户编号、笔记编号、标题、创建时间、更新时间 |
5 | 练习题库 | 题目编号、题目名称、通过率、难度、类型 |
6 | 邮箱 | 用户编号、邮件编号、发件人姓名、接收时间、邮件标题、接收状态 |
7 | 管理员 | 工号、姓名、性别、密码 |
- 下面是本系统所需要的的七个基本表。
字段名 | 说明 | 数据类型 | 约束 | 备注 |
---|---|---|---|---|
UserId | 用户编号 | varchar(30) | 主码 | 注册用户的编号 |
UserName | 姓名 | char(10) | not null | 注册用户的姓名 |
UserIntroduce | 简介 | text | not null | 注册用户的简单介绍 |
PhoneNum | 手机号 | char(11) | not null | 注册的手机号码 |
UserSex | 性别 | char(2) | not null,取“男”或“女” | 注册人性别 |
UserBirthday | 生日 | datetime | not null | 注册人生日 |
UserCity | 城市 | char(4) | not null | 注册人当前所在城市 |
UserSchool | 单位 | varchar(10) | not null | 就读学校或者公司 |
UserEmail | 邮箱 | varchar(20) | not null | 绑定的邮箱 |
UserPassword | 密码 | varchar(10) | not null | 登录密码 |
字段名 | 说明 | 数据类型 | 约束 | 备注 |
---|---|---|---|---|
ResourceId | 资源编号 | varchar(30) | 主码 | 用户上传资源的独有编号 |
UserId | 用户编号 | varchar(30) | not null,引用注册用户表的外码 | 注册用户的编号 |
ResourceSort | 资源类别 | char(10) | not null | 用户上传的资源类型,文档或文件夹 |
UploadTime | 上传时间 | datetime | not null | 资源上传的时间 |
UpdataTime | 更新时间 | datetime | not null | 更新所上传资源的时间 |
ResourceState | 审核状态 | char(4) | not null,取“通过”或“未过” | 管理员审核上传资源的状态 |
字段名 | 说明 | 数据类型 | 约束 | 备注 |
---|---|---|---|---|
InvitationId | 帖子编号 | varchar(30) | 主码 | 发布帖子的编号 |
UserId | 用户编号 | varchar(30) | not null,引用注册用户表的外码 | 注册用户的编号 |
InvitationTitle | 标题 | char(20) | not null | 发布帖子的标题 |
InvitationPublishtime | 发表时间 | datetime | not null | 帖子发表的时间 |
CommentNum | 评论量 | int | not null | 评论帖子的数量 |
LikeNum | 点赞量 | int | not null | 点赞帖子的数量 |
CollectNum | 收藏量 | int | not null | 收藏帖子的数量 |
字段名 | 说明 | 数据类型 | 约束 | 备注 |
---|---|---|---|---|
NoteId | 笔记编号 | varchar(30) | 主码 | 创建笔记的编号 |
UserId | 用户编号 | varchar(30) | not null,引用注册用户表的外码 | 注册用户的编号 |
NoteTitle | 标题 | char(20) | not null | 记录笔记的概要标题 |
CreateTime | 创建时间 | datetime | not null | 笔记创建的时间 |
NoteUpdataTime | 更新时间 | datetime | not null | 笔记再次编写更新的时间 |
字段名 | 说明 | 数据类型 | 约束 | 备注 |
---|---|---|---|---|
QuestionId | 题目编号 | varchar(30) | 主码 | 题库中题目的编号 |
QuestionName | 题目名称 | char(20) | not null | 题目的标题、名称 |
PercentOfPass | 通过率 | char(4) | not null | 答对这道题目的人占总答题人数的百分比 |
DegreeOfDifficulty | 难度 | char(10) | not null | 这道题的难道,简单,普通,或困难 |
QuestionSort | 类型 | char(10) | not null | 该题目相关的知识点类型,字符串、二叉树、数组、链表等等 |
字段名 | 说明 | 数据类型 | 约束 | 备注 |
---|---|---|---|---|
EmailId | 邮件编号 | varchar(30) | 主码 | 接收邮件的编号 |
UserId | 用户编号 | varchar(30) | not null,引用注册用户表的外码 | 注册用户的编号 |
SenderName | 发件人姓名 | char(10) | not null | 发件人的姓名 |
ReceiveTime | 接收时间 | datetime | not null | 邮件接收的时间 |
EmailName | 邮件标题 | char(20) | not null | 接收邮件的标题 |
EmailState | 接收状态 | char(4) | not null ,取“已读”或“未读” | 邮件的接收状态,已读或未读 |
字段名 | 说明 | 数据类型 | 约束 | 备注 |
---|---|---|---|---|
AdministratorId | 工号 | varchar(30) | 主码 | 管理员的编号 |
AdministratorName | 姓名 | char(10) | not null,引用注册用户表的外码 | 管理员的姓名 |
AdministratorSex | 性别 | char(2) | not null,取“男”或“女” | 管理员的性别,男或女 |
AdministratorTel | 手机号 | char(11) | not null | 管理员的注册电话 |
AdministratorPassword | 密码 | varchar(10) | not null | 管理员的登录密码 |
- 数据流
- 根据用户需求分析,由用户,管理员,资源等基本表之间的关系,总结出本系统所需要的数据流。
编号 | 数据流名 | 输入 | 输出 |
---|---|---|---|
1 | 用户注册信息 | 电话、密码 | 登录信息 |
2 | 用户登录信息 | 电话、密码 | 首页信息 |
3 | 资源上传信息 | 所要上传的资源 | 资源信息 |
4 | 检索信息 | 查询信息 | 相应帖子、文档信息 |
5 | 发帖信息 | 编辑帖子信息 | 帖子发布信息 |
6 | 笔记信息 | 笔记内容 | 保存笔记信息 |
7 | 习题信息 | 编辑代码 | 结果信息 |
8 | 个人信息 | 修改信息 | 修改后的个人信息,年龄、城市、性别等 |
9 | 管理信息 | 管理员电话、密码 | 通过用户上传资源、以及设置用户基本界面信息 |
1.2 完善后的《系统软件设计说明书1.2》
1.3 上传完善后的《系统软件设计说明书1.2》截图;
2、任务二:团队软件项目编码准备,要求如下:
2.1 搭建并配置软件开发环境;
2.1.1 安装pycharm
(1)PyCharm官网下载
进入后,看到如下界面:
professional 表示专业版,community 是社区版,推荐安装社区版,因为是免费使用的。
(2)下载完成之后完了选择合适路径点击安装。
点击Install进行安装,安装完成后点击Finish即可。
2.1.1 Django安装配置
(1)新建Django项目
File-New Project 新建一个Django项目:
默认新建环境的工具是Virtualenv, 这里用的是conda。输入好location(安装位置)后点击create,即可生成Django项目。
(2)配置已开发的Django项目
点击右上角的配置框选择 Edit Configurations
进来后先输入Name 项目名称,然后在Python Interpreter选择你的代码所属环境的编译器,最后选择Fix,弹出Django配置页。
在点击Fix后出现的配置页中,输入这三项:
第一个是项目根目录,第二个是settings.py文件的位置,第三个是manage.py的位置。三者缺一不可。搞定后点击OK,配置完成。
(3)运行项目
(4)访问http://127.0.0.1:8000/就是网站的首页了。
2.2 团队商议制定团队项目编码规范;
2.3 上传项目编码规范文档到团队项目Github仓库截图;
3、任务三:以团队作业的前期成果为基础,采用团队协作方式编写软件代码,创建程序,开发软件关联数据库,进行必要代码测试。
3.1 代码测试
-
测试目标
- 通过测试,达到以下目标:
- 测试已实现的产品是否达到设计的要求(例如是否实现论坛模块,评论、写笔记等功能),包括:各个功能点是否以实现,业务流程是否正确;
- 产品规定的操作和系统运行稳定;
- Bug数和缺陷率控制在可接收的范围之内,遗留BUG一般不超过所有BUG的10%;
- 通过测试,达到以下目标:
-
测试人力资源
- 2人
-
测试环境
- 操作系统:Windows 11 家庭中文版;
- 软件:SQLite3.8.8,Python3.10,Django 4.0.3
- 硬件:Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz 2.40 GHz,8GB RAM
- 网络:西北师大校园网
-
测试结果
-
普通用户
-
注册界面
- 登录界面
- 首页
- 编辑帖子
- 帖子发布
- 笔记
-
管理员
-
管理资源
3.2 代码上传到团队项目Github仓库截图
3.3 代码签入团队项目仓库情况统计
4、任务四:完成《实验九 团队作业6:团队项目编码》团队博文作业:
4.1 发布博客到班级作业
4.2 记录完成《实验九 团队作业6:团队项目编码》各项任务实际花费的时间和分工;
任务 | 总计(min) | |
---|---|---|
任务一 | (1)完善《软件需求规格说明书》,并上传到Github;(60) | 60 |
任务二 | (1)搭建环境配置;(30) (2)指定项目编码规范(35) |
65 |
任务三 | (1)生成源代码;(661) (2)上传github;(5) |
666 |
任务四 | (1)完成博客;(125) (2)记录时间;(5) (4)心得体会以及总结陈述;(8) |
138 |
4.3 每位成员结合任务分工总结本次实验心得,最后由项目组长进行总结陈述;
姓名 | |
---|---|
毛玉贤 | 在本次实验中,使用了pycharm进行编码的设计,在编码的过程中,我们小组一同学习,各自发挥各自的优势,对于任务的划分合理有度,在模块分类、代码编写上、每个人负责一些模块,任务完成后各个模块进行任务的交接以及情况的说明;这使得我们小组的任务进度上,由于前期的合理规划,所以在任务进度上能够按时执行,顺利完成,在不明白的问题上,我们团队会小组讨论,合力解决问题,这不仅使得每位成员的参与感增强,而且大家都在慢慢掌握这一知识点,提升了团队凝聚力,协作力;在此次实验中,无论是制定编码规范还是具体编码都是经过我们小组讨论后,在开始进行具体设计的,在讨论的过程中,各自提出的疑问,有时也是其他人所不熟知的,通过这一过程,很好地帮助我们理解实验项目的各个要求; |
蒋敏敏 | 在本次作业中,大家共同学习了一些软件的使用,同时小组间相互交流,齐心协力完成了本次项目的开发。也可以说这次作业是将前几次项目前期已准备的工作进行实现,这几次的作业给我带来了许多不一样的体验,学到了如何去开发一个软件,收获满满。本次作业分工明确,PM会根据团队成员擅长的方面进行分工,这样既能减少成员的工作量,也能提高团队成员的兴趣和凝聚力。团队中各组员关系融洽,一起学习、一起进步,利于团队的发展。 |
张颖 | 本次的作业是完成软件编码,掌握软件编码的工程规范,这一周我们小组完善了项目系统设计说明书,完成了编码环境的搭建,商议并制定了团队项目编码规范,以之前的成果为基础,创建程序开发软件关联数据库,通过小组讨论,互相启发,达到优势互补,解决我们个体无法解决的疑难的目的。我们在参与讨论,参与探究的过程中,必须要有自己的见解和前认知能力作为基础,而我们的独立思考是无法由别人或小组来替代的,只有在我们通过团队分工来思考到达一定的程度展开讨论,才有可能出现一点即通、恍然大悟、豁然开朗、原来是这样的效果;也只有在此时展开讨论,才有可能出现观点的碰撞,因此我们参与在协作学习之前,一定要做好团队分工,有独立学习思考的时机。 |
- 总结陈述:由于时间紧任务重,在代码编写、设计实现的过程中,非常考验团队协作的默契程度,通过前几次项目的训练,我们也发现了本团队在团队协作、分工上的不足,也一直在进行时整改。这次项目结合以往的项目经验,使我们在一开始就清晰定位自己在团队中所主要承担的任务。在前期我们统一了编码规范以后,成员之间共同讨论进行了任务模块的划分。任务分配合理,成员的兴趣与凝聚力也大大提高,在遇到问题时,我们能及时互相指正,并且当成员懈怠时,能各自起到督促作用。本次项目任务量较大,我们在做的过程中学到了很多新知识,收获了不仅是知识层面的东西,还有如何是一个团队高效运行、如何与团队成员之间友好合作、如何协调团队成员之间的不同意见及矛盾,这些都是我们在这个过程中逐步遇到、学到、解决到的问题,相信这些宝贵的财富,在以后的学习工作中,一定会是我们每个人受益匪浅。