内容正文:
信息系统+算法专题
班级 姓名
1.【202212学军】小明帮老师搭建了一套选择题答案提交并实时统计答题情况的信息系统,系统功能和结构示意图如下:
该系统只在班级内网中使用,要实现的目标是:老师在屏幕上显示一道单选选择题,提供4个单选项,全班学生利用手中的只有A、B、C、D4个按钮的红外线答题器提交答案,Micro-bit智能终端通过红外接收模块接收全班同学提交的答案,再通过无线WiFi传送到启用了Web服务的教师机上,并保存到数据库中,答案提交结束后,从数据库中读取该题的答题情况,经过统计后,在电脑的浏览器上显示本题的正答率和每个同学的答题情况。系统结构图如下:
系统软件的编写分以下几步:
(1)数据采集。学生通过红外线答题器发送ABCD中的一个字符,智能终端micro:bit通过红外线接收器接收学生发送的信息(包括红外线接收器编号、答案字符),并匹配出学生姓名,传送到服务器中,系统允许学生多次发送数据,老师结束接收后,每个学生以最后一次提交的信息为准。下图为某一次采集结束后智能终端接收到的数据,学生每次提交的数据是以逗号分隔每个字段值的字符串,如果用变量st表示一行数据,则将st按字段值转换成列表1s的语句为 (单选,填字母)。
A.ls=st.split(",") B.ls=list(st)
C.ls=st.split("") D.ls=",".join(st)
(2)数据传输。智能终端程序部分代码如下:
from microbit import *
import Obloq
#设置网络连接参数
IP="192.168.0.101" ;PORT="8080"
SSID="js101" ;PASSWORD ="jiaoshi101"
while not Obloq.connectWifi(① ,10000):
display.show("E")
display.scroll(Onloq.ifconfig()) #显示网络信息
Obloq.httpSet(② )
#匹配姓名后传输数据到服务器上,代码略
(3)数据存储、处理和呈现。服务器端程序部分代码如下:
#导入模块,代码略
DATABASE="data.db"
app=Flask(__name__) #创建应用
#接收智能终端的数据并按提交的时间先后存储到数据库data.db中,代码略
@app.route("/")
def index():
db=sqlite3.connect(DATABASE)
cur=db.cursor()
cur.execute("SELECT * FROM da")
tmp=cur.fetchone() #跳过标题行
tmp=cur.fetchall()
n=len(tmp)
b=[0]*4 #b[0]至b[3]分别存储A、B、C、D选项的数量
while n>0: #保留每位同学最后提交的结果并统计
b[① -ord("A")]+=1
for j in range(n-2,-1,-1):
if ② ;
tmp.pop(j)
③
n-=1
for i in range(len(tmp)-1): #将学生最终提交结果按学号升序排序
for j in range(④ ):
if int(tmp[j][0])<int(tmp[j-1][0]):
tmp[j],tmp[j-1]=tmp[j-1],tmp[j]
#关闭游标对象和数据库对象,代码略
#返回处理结果b、tmp并显示,代码略
#运行程序对象实