吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1097|回复: 17
收起左侧

[Python 原创] 新思路等级考试模拟系统——成绩回收程序

  [复制链接]
ccwoaijingjing 发表于 2024-7-2 14:15
本帖最后由 ccwoaijingjing 于 2024-7-2 14:22 编辑

局域网内教学机房用。学生在使用新思路等级考试模拟系统做完题后,老师如果想回收成绩比较麻烦。之前有自填、抄录、截图上传、图片识别等,先人写的方法。这次本人另辟蹊径,首先,教师端使用flask做了一个post响应的服务;然后,把学生端的成绩从软件的原文件中提取出来,(学生必须使用全部评分或者模拟考场的方式答题得到的分数才可以采集。);最后,发送post请求携带成绩发送给教师服务端,教师将成绩保存为excel文件。
附件就不上传了,直接放源代码。有特殊需求的可以随意编辑。最后用pyinstaller封装就可以。



教师服务端:
import tkinter as tk
from flask import Flask, request
import pandas as pd
from threading import Thread

app = Flask(__name__)
@app.route('/index', methods=['GET', 'POST'])
def index():
    name = request.form.get('name')
    source = request.form.get('source')
    ip = request.form.get('ip')
    ls.append([name, source, ip])
    return '上传成功'

def open_flask():
    app.run(
        host='0.0.0.0'
    )

def start_server():
    server_thread = Thread(target=open_flask)
    server_thread.start()

def save_data():
    df = pd.DataFrame(ls, columns=['姓名', '成绩', 'IP地址'])
    df.to_csv('成绩汇总.csv', index=False)

ls = []
root = tk.Tk()
# 窗口标题
root.title('模拟成绩接收器-教师端')
# 窗口大小
root.geometry('300x200')
butn1 = tk.Button(
    root,
    text='启动服务',  # 按键上的文字
    width=10, height=2,
    command=start_server  # 按键控制的执行命令
)
butn1.pack()
butn2 = tk.Button(
    root,
    text='保存数据',  # 按键上的文字
    width=10, height=2,
    command=save_data  # 按键控制的执行命令
)
butn2.pack()
root.mainloop()

学生请求端:
import time
import socket
import requests
import re
import tkinter as tk

def get_data():
    ip = socket.gethostbyname(socket.gethostname())
    name = name_l.get()
    uip = uip_l.get()
    level = level_l.get()
    try:
        path = ''
        if level == '1':
            path = 'WP'
        elif level == '2':
            path = 'TW'
# 这一步非常重要:定义你的机房学生机器模拟软件的安装路径!
        with open(f'C:\\Users\\admin\\Desktop\\NCRE\\{path}\\UserData\\UserPractice\\ExamRecord.xml', 'r', encoding='utf-8') as f:
            fr = f.read()
        com = re.compile('<得分>(.*?)</得分>')
        source = com.findall(fr)[-1]
        print(name, uip, level, source, ip)
        dic = {
            'name': name,
            'source': source,
            'ip': ip
        }
        URL = f'http://{uip}:5000/index'
        response = requests.post(URL, dic)
    except:
        pass

root = tk.Tk()
# 窗口标题
root.title('模拟成绩发送器-学生端')
# 窗口大小
root.geometry('300x200')
# 文字变量存储器
var = tk.StringVar()

tk.Label(root, text='请输入姓名:').pack()
name_l = tk.Entry(root)
name_l.pack()
tk.Label(root, text='请输入教师机IP:').pack()
uip_l = tk.Entry(root)
uip_l.pack()
tk.Label(root, text='请输入等级(1/2):').pack()
level_l = tk.Entry(root)
level_l.pack()
butn = tk.Button(
    root,
    text='发送分数',  # 按键上的文字
    width=10, height=2,
    command=get_data  # 按键控制的执行命令
)
butn.pack()
root.mainloop()

微信图片_20240702142137.jpg

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

msold5 发表于 2024-11-13 15:27
xlk333 发表于 2024-11-13 10:34
你最新版的新思路成绩上交程序分为教师端和学生端,能发一份给我否。放在云盘即可

把别人的劳动成果篡改后分享可能会带来麻烦,不过讨论下制作方法还是可以的。
1、 先规划大致功能如下:
A 学生端:
        学号框在姓名框前
        跳出界面时自动焦点到学号框
        在学号框中按TAB键可跳转到姓名框
        学号中的所有全角字符、中文字符转数字,参照:
                For $i=1 to 10;全角数字替换为纯英文
                        $j="0123456789"
                        $TEXT=StringReplace($TEXT,StringMid($j,$i,1),StringMid("0123456789",$i,1))
                        $j="零一二三四五六七八九"
                        $TEXT=StringReplace($TEXT,StringMid($j,$i,1),StringMid("0123456789",$i,1))
                Next
        可区分“模拟考试”和“练习”两外状态,并表达到考试上传的成绩中
        能单独提取每项的成绩,且与总成绩相符
        上传值:
                学号(只取最末2位)、姓名(只取前10个字,因补考要求带班级)、总分、子项、考试类型(“考试”/“练习”)、
                题套、机器名后4位、IP值第4位
B 教师端:
        检查是否重复运行
        程序不需要界面
        打开Excel表,如果这个Excel表被手动关闭则程序自动退出
        只要不退出,就不断接收学生提交的信息
        每增加提交重新按学号排序,显示信息到Excel:
                学号、姓名、总分、选择、操作、文本
                表格、演示、网络、类型、题套、机名、IP末
        对信息相同(总分、子分、题套)的用红色加粗,疑似作弊
        对电脑相同(机名或IP末)的学生,用蓝色加粗,疑似代答

2、原理分析1) UDP监听教师端发送的IP广播(一直进行,以防动态IP导致IP改变)2) 当输入完姓名学号后会自动向教师端进行tcp连接,发送姓名学号,然后关闭链接3) 当完成考试后,点击提交按钮,会再次发起tcp连接,发送所有信息,然后关闭

3、使用本论坛中的软件得到程序源码

4、实施,其核心步骤如下
1)在FrmUKeSO中创建Buttonclick+=submit
image1.png

2)创建SubmitForm image2.png
3)修改程序主窗口FrmUKeMain中的initializeComponent(),以便在打开窗口时就弹出输入窗口 (PS提交和输入本质上都是同一个class,只是构造函数不同)
image3.png



xlk333 发表于 2024-11-20 09:54
本帖最后由 xlk333 于 2024-11-20 11:20 编辑
msold5 发表于 2024-11-19 17:58
本来是自动判断的,你一定要在同一台机器上运行.....
还有,不应该在别人的贴子里说那么多与主题无关的 ...

谢谢提醒,已经新建了一个帖子《急求:关于新思路成绩提交程序的探讨和思考  https://www.52pojie.cn/thread-1983713-1-1.html  (出处: 吾爱破解论坛)》
这个可以正常使用,不过有点小问题:1、学生端截图的时候的,学号只能设置2位,而不能设置更长的字符,2、截图的区域太小,只是截取了成绩、没有把成绩页面里面显示的班级、学号一起截取下来
TGLG 发表于 2024-7-6 20:17
苏紫方璇 发表于 2024-7-8 00:48
代码插入可以参考板块置顶帖
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn/thread-713042-1-1.html
(出处: 吾爱破解论坛)
msold5 发表于 2024-8-16 17:12
用改代码的方式,可以直接弄个学生端和教师端
xlk333 发表于 2024-11-13 09:41
楼主, 你这个功能我正好需要,关键是怎么做这个程序,你所的flask,源代码、封装等,我都不懂。能不能直接给我一个已经做好的成绩回收程序,我安装在电脑上就可以运行。
xlk333 发表于 2024-11-13 10:15
怎么设定教师端和学生端?,我的新思路模拟软件安装的时候,没有缺分学生端和教师端?
xlk333 发表于 2024-11-13 10:34
msold5 发表于 2024-8-16 17:12
用改代码的方式,可以直接弄个学生端和教师端

你最新版的新思路成绩上交程序分为教师端和学生端,能发一份给我否。放在云盘即可
xlk333 发表于 2024-11-14 08:58
本帖最后由 xlk333 于 2024-11-14 09:00 编辑
msold5 发表于 2024-11-13 15:27
把别人的劳动成果篡改后分享可能会带来麻烦,不过讨论下制作方法还是可以的。
1、 先规划大致功能如下: ...

我对编程一窍不通,只是看见你2022年在论坛发的一个帖子:新思路计算机考试成绩收集【教学用】, 我下载了这个程序,但是学生端无法无法运行, 总是直接打开了Excel文档。按照你的说明,强行运行学生端,可以在D盘按照“ss”文件夹,但我只有一个C盘,没有D盘, 所以想询问你的解决方法,谢谢
msold5 发表于 2024-11-14 17:20
xlk333 发表于 2024-11-14 08:58
我对编程一窍不通,只是看见你2022年在论坛发的一个帖子:新思路计算机考试成绩收集【教学用】, 我下载 ...

以前那个是读数值自行提交到教师端的,如果你只是想要个D盘那很简单,在CMD下面这样就可以了:
subst d:  c:\临时文件夹
其中d是没有使用的驱动器名,而c:\临时文件夹 是你随意建的一个文件夹,必须先建。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 03:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表