为了更便捷地开展中考招生录取公示工作,某市教育局设计了一个中考录取学校查询系统。用户可以在浏览器在相应的页面注册、登录和查询等操作。该系统服务器采用 Flask Web 框架编写,框架结构如图 a 所示。
图a
(1)在设计该系统的前期准备中,需要了解系统需要达到怎么样的目标,这一过程属于
____。
(2)小王登录查询系统应访问子页面的 URL 是
____。
(3)已知录取信息存储在 data 目录下,文件名称格式为“2021 年<学校名称>录取名单”。文件样例如图 b 所示(涉及隐私的部分用*代替)。服务器端部分代码如下,请补全代码
2021年杭州第二中学滨江校区录取名单 |
准考证号 | 姓名 | 性别 |
21******* | 鲍** | 男 |
21******* | 卜** | 男 |
21******* | 蔡** | 女 |
21******* | 柴* | 男 |
21******* | 常** | 女 |
21******* | 陈* | 男 |
21******* | 陈* | 男 |
图 b
from flask import Flask, render_template, request, redirect, url_for
import pandas as pd
import os
app = Flask(_name_)
# 读取所有 CSV 文件的文件名,代码略
# 将所有文件名中的年份和学校名称提取出来,存入 school_years,school_names
# 将文件名与文件路径映射存入 file_paths
def query_admissions(year, school_name, student_name, exam_id):
# 读取对应学校和年份的录取数据
file_path = os.path.exists(f"data\\{year}年{school_name}录取名单")
if file_path:
df = pd.read_csv(f"data\\{year}年{school_name}录取名单", skiprows=1)
result =
①
____ return school_name
@app.route('/')
def index():
return render_template('index.html')
@app.route(' ②
____')
def login():
return render_template('login.html')
@app.route('/view')
def view():
exam_id = request.args.get('exam_id')
name = request.args.get('student_ name')
admission = ""
for school_name in school_names:
if ③
____: admission = school_name
return render_template('view.html',exam_id=exam_id,student_name=name,admission=admis⁃sion)
if _name_ == '_main_':
app.run(debug=True,port="80")
(4)加框处代码有误,请更正。
____(5)下列代码用于统计各学校性别比(男性:女性)并将排行前五的学校绘制在图表中,如图 c 所示。请补全代码。
图 c
import pandas as pd
import matplotlib.pyplot as plt
# 设置中文字体,这里略去
# 读取并合并所有 CSV 文件,并添加学校列,代码略
merged_df = pd.concat(dfs, ignore_index=True)
school_gender_ratio = merged_df.groupby([' 学 校 ', ' 性别 ']).size().unstack(fill_value=0)
school_gender_ratio['总'] = ①
____school_gender_ratio['男'] = school_gender_ratio['男'] / school_gender_ratio['总']
school_gender_ratio['女'] = school_gender_ratio['女'] / school_gender_ratio['总']
sorted_schools = ②
____ax = sorted_schools[['男', '女']].plot(kind='bar', stacked=True)
ax.set_title('不同学校的性别比例')
ax.set_xlabel('学校')
ax.set_ylabel('性别比例')
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
ax.legend(title='性别', prop=font)
plt.show()