2024秋软件工程现场编程作业

news/2025/1/10 15:29:19/文章来源:https://www.cnblogs.com/aaaauv/p/18522309
作业所属课程 班级链接
作业要求 作业要求链接
作业的目标 开发一个个人记账本应用
团队名称 爱码单车队
成员1 102201542--曾庆徽
成员2 102201211--池家益
成员3 102201302--毛震
成员4 102201420--林传昊
成员5 102201425--郑礼鑫
成员6 102201538--黄志梁
成员7 102201630--岳俊杰
成员8 102201227--陈铭扬
成员9 102201239--翁林靖
成员10 102201257--王党兵

一.组员分工

成员 学号 分工职责
成员1 曾庆徽 组织与演示
成员2 池家益 编写app.py
成员3 毛震 测试与反馈
成员4 林传昊 编写index.html以及index.css
成员5 郑礼鑫 编写records.html以及style.css
成员6 黄志梁 整理代码目录以及调试app.py
成员7 岳俊杰 设计功能
成员8 陈铭扬 编写monthly_statistics.html
成员9 翁林靖 代码审查
成员10 王党兵 编写linechart.html以及linechart.css

二.程序运行环境

1. 安装 Python

确保你已经在系统上安装了 Python 3.x。可以在 Python 官方网站 下载适合你操作系统的安装包。

检查 Python 安装

在终端或命令提示符中输入以下命令,检查 Python 是否已安装:

python --version

python3 --version

如果没有安装,你可以按照说明进行安装。

2. 安装 pip

pip 是 Python 的包管理工具,通常在安装 Python 时会自动安装。你可以通过以下命令检查 pip 是否已安装:

pip --version

如果未安装,可以通过以下方式安装:

python -m ensurepip --upgrade

4. 安装项目

克隆github项目https://github.com/zqh666nb/Personal-Editor

5. 运行 Flask 应用

在编译器(推荐vscode)中打开该项目文件,根据requirements.txt中的要求安装(配置)好相应的库,然后可以在终端中打开文件运行app.py。

6. 访问应用

打开浏览器,访问 http://localhost:5000 查看应用。

三.程序运行截图和视频:

截图:





视频:

点击此处观看演示视频

四.关键代码:

关键部分其实就是添加记录,查询记录,绘制简单表格等功能的实现:

# 定义路由,当以 POST 方式访问 /add_record 路径时执行 add_record 函数
@app.route('/add_record', methods=['POST'])
def add_record():# 从表单获取日期、金额、类型、类别和备注信息date = request.form['date']amount = float(request.form['amount'])record_type = request.form['type']  # 获取用户选择的类型# 根据类型调整金额的正负,如果是支出类型,将金额设置为负值if record_type == 'expense':amount = -abs(amount)  # 将支出金额设置为负值category = request.form['category']note = request.form['note']# 加载现有数据data = load_data()# 创建新的记录字典record = {'date': date,'amount': amount,'category': category,'note': note}# 将新记录添加到数据列表中data.append(record)# 保存数据save_data(data)# 重定向到查看记录的页面return redirect(url_for('view_records'))# 定义路由,当访问 /view_records 路径时执行 view_records 函数
@app.route('/view_records')
def view_records():# 加载数据data = load_data()# 根据日期对数据进行排序sorted_data = sorted(data, key=lambda x: datetime.strptime(x['date'], '%Y-%m-%d'))# 返回 records.html 模板,并传递排序后的数据return render_template('records.html', records=sorted_data)# 定义路由,当访问 /monthly_statistics 路径时执行 monthly_statistics 函数
@app.route('/monthly_statistics')
def monthly_statistics():# 加载数据data = load_data()# 使用 defaultdict 创建一个字典,默认值是一个包含 'income' 和 'expenses' 键的字典,初始值都为 0monthly_stats = defaultdict(lambda: {'income': 0, 'expenses': 0})for record in data:# 从记录中获取日期、金额date = record['date']amount = record['amount']# 将日期转换为月份字符串month = datetime.strptime(date, '%Y-%m-%d').strftime('%Y-%m')  # 获取月份字符串# 如果金额大于 0,将其累加到当月的收入中if amount > 0:monthly_stats[month]['income'] += amountelse:# 如果金额小于 0,将其绝对值累加到当月的支出中monthly_stats[month]['expenses'] += abs(amount)  # 记录为正值# 对 monthly_stats 进行排序,确保按月份顺序显示sorted_monthly_stats = dict(sorted(monthly_stats.items(), key=lambda item: datetime.strptime(item[0], '%Y-%m')))# 将排序后的结果传递给模板return render_template('monthly_statistics.html', stats=sorted_monthly_stats)# 定义路由,当访问 /statistics 路径时执行 statistics 函数
@app.route('/statistics')
def statistics():# 加载数据data = load_data()# 计算总收入,即金额大于 0 的记录的金额总和income = sum(record['amount'] for record in data if record['amount'] > 0)# 计算总支出,即金额小于 0 的记录的金额总和(取绝对值)expenses = sum(record['amount'] for record in data if record['amount'] < 0)# 返回包含总收入和总支出的 JSON 数据return jsonify({'total_income': income, 'total_expenses': expenses})# 定义路由,当访问 /line_chart 路径时执行 generate_line_chart 函数
@app.route('/line_chart')
def generate_line_chart():# 加载数据data = load_data()if not data:# 如果没有数据,返回 line_chart.html 模板,并设置图表 URL 为 Nonereturn render_template('line_chart.html', chart_url=None)# 使用 defaultdict 创建一个字典,默认值是一个包含 'income'、'expenses' 和 'profit' 键的字典,初始值都为 0monthly_stats = defaultdict(lambda: {'income': 0, 'expenses': 0, 'profit': 0})for record in data:# 从记录中获取日期、金额date = record['date']amount = record['amount']# 将日期转换为月份字符串month = datetime.strptime(date, '%Y-%m-%d').strftime('%Y-%m')  # 获取月份字符串

五.软件亮点:

亮点一:
用户界面设计的精益求精:在设计用户友好型界面的过程中,团队成员对于界面的布局、颜色搭配和交互方式等方面存在不同的意见。通过反复争论和复审,不断调整设计方案,最终打造出简洁直观、美观大方的界面,极大地提高了用户的操作便利性和满意度。
亮点二:
我们不仅涉及了全部的收支记录,还分类规划了月度收支记录,方便更好地分析和了解自己的每个月的具体收支
亮点三:
附加功能的实现,我们能够成功实现绘制收支的折线图。

六.收获事件:

1.我们在设计编码的时候,考虑是采用json还是csv的时候意见产生了分歧,原因是json它的解码结构会将中文转换成其他的字母语言,并且查看时只能用txt文件来查看。
而csv可以正常解码,而且还能以表格的形式打开,一目了然,但是我们原本就是按json文件来保存,后期时间有点紧迫,所以就采用了json,不过好在问题不大😳。
2.对于前段的样式设计,我们立志追求简洁高效,当然这也对我们组内产生了很大的冲突,不过好在大家都会退让,及时筛选出优秀的样式设计进行取舍。
3.复审环节有一件事印象很深,就是大家想要争取实现在应用上添加一个删除数据的功能,但是感觉这个功能不痛不痒,所以大家都笑着决定放弃吧。

七.每个组员的编程体验:

曾庆徽:超超级级无敌有意思
郑礼鑫:AI真好用
池家益:编写个人记账本程序就像搭建一个专属的财务小管家,从定义收支类别到数据存储与计算,每一步都是对编程逻辑与功能实现的有趣探索
翁林靖:遇到了不会的东西现场学习,能得到很多收获
黄志梁:有趣生动充满挑战
王党兵:与AI辅助和优秀团队合作,编写账本应用,从数据记录到图表生成,全程高效流畅,技术提升与团队协作相得益彰
林传昊:在本次团队合作中,每个组员身上都有各自的闪光点,令我学到了很多个人和结对编程中不曾体验的收获。
陈铭扬:通过本次软件工程小组实践,我提升了与小组成员共同协商完成代码的能力以及对于前端网页设计的能力,并且在3个小时现场实践的过程之中,提升自身的应变能力。
毛震:哈哈哈哈,这编程可太棒啦。
岳俊杰:ai真厉害,队友更厉害,安心来自大哥

八.组长打分:

成员 学号 组长打分(满分100分)
成员2 池家益 96
成员3 毛震 95
成员4 林传昊 97
成员5 郑礼鑫 97
成员6 黄志梁 96
成员7 岳俊杰 95
成员8 陈铭扬 96
成员9 翁林靖 95
成员10 王党兵 97

九.github仓库链接以及commit记录:

github链接:https://github.com/zqh666nb/Personal-Editor
commit记录:


(ps:因为有些成员把代码在其他成员机子上先和修改的一并测试,所以没体现在记录上捏。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825893.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕棚沟一日游玩

路线:成都(自驾)--> 毕棚沟(景区大巴)-->龙王海-->上海子-->磐羊湖(月亮湾)-->燕子岩成都--毕棚沟:自驾。5点出发。 毕棚沟--龙王海:景区大巴,顺时针绕湖走半圈,有黄杉、红枫,然后继续坐大巴 龙王海--上海子:景区大巴 上海子--磐羊湖:自费。上山单程…

基于STM32的激光通信系统设计

备忘编者按:激光通信具有保密性强、通信容量大、重量轻、功耗和体积小、制造和维护费用低等特点。为满足民用领域对于激光通信的需求,设计了一种基于STM32的激光通信系统。该系统由激光发射模块、激光接收模块,STM32F407主控模块组成,采用双音多频方式进行调制。在实验室环…

Respiratory Physiology Neurobiology

Respiratory Physiology & Neurobiology@目录一、征稿简介二、重要信息三、服务简述四、投稿须知 一、征稿简介二、重要信息期刊官网:https://ais.cn/u/3eEJNv三、服务简述 四、投稿须知 1.在线投稿:由艾思科蓝支持在线投稿,请将文章全文投稿至艾思科蓝投稿系统; 2.文章…

Applied Artificial Intelligence

Applied Artificial Intelligence@目录一、征稿简介二、重要信息三、服务简述四、投稿须知 一、征稿简介二、重要信息期刊官网:https://ais.cn/u/3eEJNv三、服务简述 四、投稿须知 1.在线投稿:由艾思科蓝支持在线投稿,请将文章全文投稿至艾思科蓝投稿系统; 2.文章应具有学术…

十光年团队_项目原型设计+概要设计

作业所属的课程 软件工程2024作业要求 2024秋软工实践团队作业-第二次作业的目标 完成原型设计和概要设计团队名称 十光年团队成员学号-姓名 施靖杰-102201327邓才慧-102201102陈宇尧-102201119陆旭东-102201118黄宇舟-102201331邱予-102202121高鑫源-102201635黄森福-10220163…

【文件系统】嵌入式文件系统Fatfs简介

Fatfs 1.Fatfs简介 FatFs(File Allocation Table File System)是一个专为小型嵌入式系统设计的通用FAT文件系统模块。它完全由ANSI C语言编写,独立于硬件平台,因此具有很好的可移植性。FatFs支持FAT12、FAT16和FAT32文件系统,可以用于各种嵌入式平台,包括但不限于8051、P…

CTF学习(17)MISC(后门查杀)

1.解压获得html文件夹(入门用的工具题吗)--->使用D盾以文本文件格式打开include.php文件后发现pass处有段md5数据(实为flag)(还是不太明白md5加密的特征,只是长度一样吗) FLAG: flag{6ac45fb83b3bc355c024f5034b947dd3}

一些AI数学基础

众所周知,在当前机器学习看待数据的很重要一个方式是概率,例如分类问题是建模一个P(Y=C|X)。 在面对离散变量的时候,例如人名这种离散变量。 假设有问题:给一个名字,判断该人是中国哪里人。(或许在现实生活中,该问题是不合理的,一般情况下无法根据人名判断是哪里人) 假…

VMWare windows xp 安装VMwareTools后重启黑屏问题

VMWare windows xp 安装VMwareTools后重启黑屏问题 使用VMware17安装windowsxp系统后发现不能从VMware安装vmware tools后 在提示网址下载ios后挂载到xp系统上,安装vmware tools后重启,系统黑屏 解决办法: 虚拟机设置->硬件->显示->取消勾选加速3D图形

将网页固定到任务栏

参考:https://jingyan.baidu.com/article/5553fa821b231d25a3393408.html

09.Gateway新一代网关

1.概述 1.1 是什么 1.1.1 官网 https://docs.spring.io/spring-cloud-gateway/reference/ 1.1.2 体系定位 Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关SpringCloud Gateway…