编写个代码实现下面的程序,最好能帮我写一下具体代码,有偿

题目1: 加减乘除运算微系统题目:为巩固和提高初学加减乘除运算的学生数学方面的认知与运算能力,请使用Python语言的tkinter库资源,编写一个简单的GUI可视化的小程序,实现一个随机出题(30以内整数加减乘除法的算术题)、判题、打分的小程序。具体要求如下:【程序要求:】(1)应用tkinter库资源绘制生成图形界面窗口(大小:800600):界面元素包括:若干标签控件Label、若干文本框控件Entry、三个命令按钮控件Button,以及其它个性化所需的、你认为有用的相关控件元素。(2)标签控件Label、文本框控件Entry元素,功用为:学生姓名的输入与显示、学生学号的输入与显示的载体,以及题号、题目数字、运算符、等号、结果等相关内容输入或显示的载体;三个按钮文本提示内容分别为Button 1->“随机生成试题”、 Button 2-> “提交”、 Button 3-> “查看答案”。(3)引用随机库资源,通过随机函数产生30以内的随机数,进行加减乘除法题目设计,题目的个数要求10个,且简单的单步运算题目。如:5+8= 、7-3= 、 24= 、 5÷2= (除法结果为整数除即可)。(4)程序流程:学生在界面上输入自己的姓名、学号信息;点击“随机生成试题”按钮,首先对学生输入的姓名和学号进行判断,经过身份检查之后才可做题(可用字典类型模拟一个数据库,键值对设置为学号和姓名,可提前设定几组姓名学号数据)。如果输入的姓名或学号为空,则需使用messagebox弹出对话框窗口提示“请注意:姓名或学号不能为空”;如学号和姓名已存在于字典之中,可以对应,则自动生成10道简单的加减乘除运算题目;否则,弹出对话框窗口提示“姓名或学号有误,请重新输入!”;学生在每个题目对应的文本框中输入对应答案;答题结束之后,点击“提交”按钮,页面给出该学生的测试成绩(成绩为百分制);最后,可以点击“查看答案”按钮查看本次测试的正确答案。【注意:在“提交”按钮按下之前,“查看答案”按钮应该是灰色、不可用的状态才好。或者,如果没做完全部题目就点击“查看答案”按钮,则自动提交现有题目,并显示分数。】(5)当点击“提交”按钮时,根据实际答题情况给出成绩,并将本次测试页面的全部基础信息(含:学生信息/题目/结果/成绩等),存入磁盘文件【学生姓名 – 学生学号.txt】;多次运行此程序测试、做题,磁盘文件【学生姓名 – 学生学号.txt】根据测试时间,内容应能顺序记录追加(可正序,也可逆序);【注意:文件中不能只有最后一次的测试信息记录】(5)设计窗口中各种元素的布局,做到合理美观;不做统一要求,要求大家基本功能相同,但形式各异,彰显大家的个性与创意;如有意向,也可自行增添其他扩展功能;

可以参考这个,有图和代码

Python GUI tkinter 随机生成题目_PushyTao的博客-CSDN博客_tkinter题目 (1)拟设计的功能及实现思路、需要用到的知识实现逐个显示题目,并且在点击按钮之后判断回答是否正确实现可以统计正确率(在回答完所有题目之后)实现指定题目的数量,指定题目的运算符号实现将所有题目进行记录,并打印到word文档实现将所有错误的题目进行记录,并打印到word文档实现指定打印题目的行数和列数,并在界面进行展示实现时刻提醒用户当前还剩下多少个题目没有解决(2)调用库的说明random 生成随机数要用到的库tkinter 制作图形化界面要用到的库docx 对word文档进行操作 https://blog.csdn.net/weixin_45712255/article/details/118181233

# from tkinter import *
import random
import tkinter as tk
from docx import Document
from docx.shared import Pt

correct = 0 #记录正确的数量
total = 0 #记录总数量
errorList = []
t_total = 0
allProblem = []

def getProblem():
    a = random.randint(1, 18)
    if a < 10:
        b = random.randint(10 - a, 9)
        c = a + b
        result = "%d  +  %d" % (a, b) #题目生成
        allProblem.append(result)
        # print(result)
        return (result, c)
    if a >= 10:
        b = random.randint(a - 9, 9)
        c = a - b
        result = "%d  -  %d" % (a, b) #题目生成
        allProblem.append(result)
        # print(result)
        return (result, c) #返回的题目 && 答案

def check():
    global t_total
    t_total -= 1
    if int(result.get()) == int(t[1]):
        global correct
        correct += 1
        h = "恭喜你!回答正确"
        hint.set(h)
    else:
        h = "糟糕!回答错误!"
        errorList.append(t[0]) #将错误的编号假加入 记录错误题目列表
        hint.set(h)
        result.set('') #设置为空串


def showAllProblemInPage(): # 在界面展示所有的题目
    # print('hello,world')
    var1 = len(allProblem) // 2
    var2 = 2
    def confirmRC():
        global var1, var2
        var1 = hang.get()
        var2 = lie.get()
        var1 = (int)(var1)
        var2 = (int)(var2) # print(var1) print(var2)
        disPlayWindow = tk.Tk()
        disPlayWindow.title('所有题目如下:')
        disPlayWindow.geometry('800x800+100+100')

        display = ''  # 展示的字符串
        cnt = 0
        for i in allProblem:
            cnt += 1
            if cnt % var2 != 0:
                display = display + i + '\\t' + '\\t'
            else:
                display = display + i + '\\n'
        lb = tk.Label(disPlayWindow, bg='pink', width=150, height=50)
        lb.config(text=display)
        lb.grid(row=1, column=1)
        # print(display)

    # 注意下行数和列数
    windowAllProblem = tk.Tk()
    windowAllProblem.title('所有题目展示界面')
    windowAllProblem.geometry('300x300+100+100')

    #行数列数标签放置
    l1 = tk.Label(windowAllProblem, text='行数:')
    l1.grid(row = 0)
    l2 = tk.Label(windowAllProblem, text='列数:')
    l2.grid(row = 1)

    hang = tk.Entry(windowAllProblem, show=None)
    hang.grid(row=0, column=1)
    lie = tk.Entry(windowAllProblem, show=None)
    lie.grid(row=1, column=1)
    # 行列放置完成
    confirmBtn = tk.Button(windowAllProblem, text='确认行和列', command=confirmRC)
    confirmBtn.grid(row=2, column=1)
    # 行数列数已经获取 :
    # var1 行数 var2 列数
    print(var1)
    print(var2)
    windowAllProblem.mainloop()


def showWrongProblemInPage(): #将所有错误题目在界面展示
    ## print('hello,world')
    var1 = len(errorList) // 2
    var2 = 2
    def confirmRC():
        global var1, var2
        var1 = hang.get()
        var2 = lie.get()
        var1 = (int)(var1)
        var2 = (int)(var2) # print(var1) print(var2)
        disPlayWindow = tk.Tk()
        disPlayWindow.title('所有题目如下:')
        disPlayWindow.geometry('800x800+100+100')

        display = ''  # 展示的字符串
        cnt = 0
        for i in errorList:
            cnt += 1
            if cnt % var2 != 0:
                display = display + i + '\\t' + '\\t'
            else:
                display = display + i + '\\n'
        lb = tk.Label(disPlayWindow, bg='pink', width=150, height=50)
        lb.config(text=display)
        lb.grid(row=1, column=1)
        # print(display)

    # 注意下行数和列数
    windowAllProblem = tk.Tk()
    windowAllProblem.title('所有题目展示界面')
    windowAllProblem.geometry('300x300+100+100')

    #行数列数标签放置
    l1 = tk.Label(windowAllProblem, text='行数:')
    l1.grid(row = 0)
    l2 = tk.Label(windowAllProblem, text='列数:')
    l2.grid(row = 1)

    hang = tk.Entry(windowAllProblem, show=None)
    hang.grid(row=0, column=1)
    lie = tk.Entry(windowAllProblem, show=None)
    lie.grid(row=1, column=1)
    # 行列放置完成
    confirmBtn = tk.Button(windowAllProblem, text='确认行和列', command=confirmRC)
    confirmBtn.grid(row=2, column=1)
    # 行数列数已经获取 :
    # var1 行数 var2 列数
    windowAllProblem.mainloop()
    print(var1)
    print(var2)

def printAllProblemInWord(): # 打印所有题目到word
    document = Document()
    paragraph = document.add_paragraph('所有的题目:\\n')
    for i in allProblem:
        paragraph.add_run(i + '\\n')

    print(len(allProblem))
    style = document.styles['Normal']
    font = style.font
    font.size = Pt(10)

    document.save('allProblem.docx')
    # return None

def printWrongProblemIntoWord(): #将所有错误题目打印到word
    document1 = Document()
    paragraph = document1.add_paragraph('所有错误的题目:\\n')
    for i in errorList:
        paragraph.add_run(i + '\\n')

    style = document1.styles['Normal']
    font = style.font
    font.size = Pt(10)

    document1.save('wrongProblem.docx')
    # return None

def newWindow():
    new_window = tk.Tk()
    new_window.title('答题信息显示及下载界面')
    new_window.geometry('300x300+100+100')

    info = tk.Label(new_window, bg='red', width=20)
    info.grid(row=0)
    info.config(text='the correct rate is ' + calCorrectRate() + '\\n')

    btn1 = tk.Button(new_window, text='将所有题目打印到word', command=printAllProblemInWord)
    btn1.grid(row=1, column=0)
    btn2 = tk.Button(new_window, text='展示所有题目到界面', command=showAllProblemInPage)
    btn2.grid(row=2, column=0)
    btn3 = tk.Button(new_window, text='将错误题目打印到word', command=printWrongProblemIntoWord)
    btn3.grid(row=3, column=0)
    btn4 = tk.Button(new_window, text='展示所有错误题目到界面', command=showWrongProblemInPage)
    btn4.grid(row=4, column=0)
    new_window.mainloop()

def calCorrectRate():
    global total, correct
    # 定义一下 正确率
    correct_rate = correct / total
    correct_rate = correct_rate * 100.0
    correct_rate = str(correct_rate) + ' %'
    return correct_rate


def next():
    global t, t_total
    if t_total == 0:
        l.config(text='所有题目都已经回答完毕, 跳转打印界面ing')
        # allProblem.pop()# 多余的题目删除掉(仅最后一个)
        # exit()函数在之后没有进行其他的操作
        newWindow()
        # exit() #! 记得改为别的函数
        # print('hello,world')
    l.config(text='一共需要做 ' + str(total) + ' 道题\\n' + '还剩' + str(t_total) + ' 道题\\n')
    t = getProblem()
    problem.set(t[0])
    result.set('')
    hint.set('')#判断的结果置为空

def getNumber():
    global total, t_total
    total = (int)(number.get())
    t_total = total
    # print(t_total) #输出总共的题目数量
    var1.set(total)
    # print(var1)
    l.config(text='一共需要做 ' + str(t_total) + ' 道题\\n')
    # print(total)

master = tk.Tk()
master.geometry('700x700+100+100')
master.title("加减进退位运算")
var1 = tk.StringVar() #定义一个变量
l = tk.Label(master, bg='yellow', width=30) # textvariable=var1,
l.grid(row=18) #放置在第18行
tk.Label(master, text='请输入数量:').grid(row=0) # 放置在第一行,这个框里面的是
tk.Label(master, text="题目").grid(row=1)
tk.Label(master, text="答案").grid(row=2)
tk.Label(master, text="信息").grid(row=5)

problem = tk.StringVar()
result = tk.StringVar()
hint = tk.StringVar() # 记录答案是否正确

number = tk.Entry(master, show=None)
number.grid(row=0, column=1)
# e0 = Entry(master, textvariable=)
e1 = tk.Entry(master, textvariable=problem) #题目显示
e2 = tk.Entry(master, textvariable=result) #答案框显示
e3 = tk.Entry(master, textvariable=hint) #结果显示

t = getProblem()
problem.set(t[0]) #作为题目problem
result.get()

e1.grid(row=1, column=1)
e2.grid(row=2, column=1)
e3.grid(row=5, column=1)

btn0 = tk.Button(master, text='确认数量', command=getNumber)
btn = tk.Button(master, text='确定', command=check) #执行 check函数
btn2 = tk.Button(master, text='下一题', command=next)#执行 下一个题
# 窗口放置
btn0.grid(row=0, column=4)
btn.grid(row=2, column=4)
btn2.grid(row=2, column=5)

master.mainloop()