Python网络socket编程案例----学生–教师在线批改作业
可用作课程设计,毕业设计,文章末尾有代码和程序
标题1、使用Python语言
使用Python的socket库进行网络编程,同时结合图形界面库如Tkinter来实现交互界面。
标题2、交互方便、使用方便
设计直观的用户界面,使用户可以方便地登录、提交作业和查看成绩。界面需要清晰明了,易于操作。
标题3、图形界面设计
利用Tkinter或PyQt等Python库来创建图形用户界面。界面应当美观、易用,并能显示网络信息传递的结果。
4、项目设计
项目主要分为两个端:学生端和教师端。各端的主要功能如下:
学生端
登录:学生通过输入学号和姓名进行登录。
提交作业:学生可以上传作业(jpg图片)到教师端的列表里。
查看成绩:学生可以查看自己每一次作业的成绩。
教师端
登录:教师通过输入账号和密码进行登录。
批改作业:教师可以查看学生提交的作业并给出ABCD四个等级的评价。
发送评价:教师将评价发送给对应学生。
5、具体实现细节
1. 网络交互部分
学生端和教师端通过TCP协议进行通信:确保数据传输的可靠性。
服务器端:用于处理登录验证、接收作业、发送评价等功能。
2. 图形界面部分
Tkinter库:用于创建简单的图形界面,显示登录窗口、提交作业窗口和查看成绩窗口。
界面布局和设计:尽量简洁美观,方便用户操作。
服务端代码以及运行效果:
此外,还需要导入threading模块来处理多线程。
项目结构:
学生端代码以及运行效果:
运行效果如下:
选择作业照片:
作业上传成功:
教师端代码以及运行效果:
出现了一个bug,无法正常显示作业列表
解决方法是服务器端利用字典属性进行存储,并且
1、学生提交作业图片后,服务器存储作业并分配给特定的学生。
2、教师端能够查看学生提交的作业图片,并能对其进行评分。
3、教师评分后,学生端可以查看评分结果。
解决之后,就出现下述效果:
多学生登陆之后,提交作业之后,教师端进行登陆之后,点击学生学号,就可以查看学生的作业,选择作业,然后点击作业等级【ABCD】四个选一
的方式 进行对作业进行评分等级,然后点击提交评分。
评分之后,就可以看到对该位学生进行了评分,并且显示评分成功。
代码:
服务器代码:
import socket
import threading
import os
class Server:
def __init__(self, host, port):
self.host = host
self.port = port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind((self.host, self.port))
self.sock.listen(5)
self.assignments = {
} # 用于存储作业数据
self.grades = {
} # 用于存储学生成绩
print("服务器启动,等待连接...")
def handle_client(self, client_sock, addr):
while True:
data = client_sock.recv(1024)
if not data:
break
command, *args = data.decode().split()
if command == "LOGIN":
student_id, name = args
self.assignments[student_id] = []
self.grades[student_id] = []
response = "OK"
client_sock.sendall(response.encode())
elif command == "UPLOAD":
student_id, file_size = args[0