2024-06-19 13:13:34 +08:00
import dmPython
import json
from Crypto . Cipher import AES
from Crypto . Random import get_random_bytes
import base64
2024-06-29 11:58:02 +08:00
from datetime import datetime
2024-07-11 14:23:10 +08:00
import re
2024-06-29 11:58:02 +08:00
# 获取当前日期和时间
current_datetime = datetime . now ( )
Time = current_datetime . strftime ( " % Y- % m- %d % H: % M: % S " )
2024-06-19 13:13:34 +08:00
2024-06-19 19:23:01 +08:00
db = dmPython . connect ( user = ' SYSDBA ' , password = ' dameng!! ' , host = " 36.138.114.105 " , port = " 32522 " )
2024-06-19 13:13:34 +08:00
def pad ( data ) :
block_size = 16
padding = block_size - len ( data ) % block_size
return data + bytes ( [ padding ] * padding )
def student_login_func ( ID , password ) : # 登录函数,根据学号和职工号和管理员号码进行区分,进入到不同的页面
login_cursor = db . cursor ( )
secret_key = b ' aaaaaaaaaaaaaaaa ' # 生成16字节密钥
aes = AES . new ( secret_key , AES . MODE_ECB )
password = pad ( password . encode ( ' UTF-8 ' ) )
en_password = base64 . b64encode ( aes . encrypt ( password ) )
en_password = en_password . decode ( ' utf8 ' )
login_cursor . execute ( f " SELECT * FROM STUDENT where ID= { ID } " )
login_result = login_cursor . fetchall ( )
password = login_result [ 0 ] [ 2 ]
login_cursor . close ( )
return en_password , password
# student_login_func('20240101','350625')
def teacher_login_func ( ID ) :
login_cursor = db . cursor ( )
login_cursor . execute ( f ' SELECT * FROM TEACHER WHERE TEACHER_ID= { ID } ' )
login_result = login_cursor . fetchall ( )
password = login_result [ 0 ] [ 2 ]
login_cursor . close ( )
print ( password )
return password
def administrator_login_func ( ID ) :
login_cursor = db . cursor ( )
login_cursor . execute ( f ' SELECT * FROM ADMINISTRATOR WHERE ID= { ID } ' )
login_result = login_cursor . fetchall ( )
password = login_result [ 0 ] [ 2 ]
login_cursor . close ( )
print ( password )
return password
def register_func ( usernames , ID , password , Class , gender ) :
register_cursor = db . cursor ( )
secret_key = b ' aaaaaaaaaaaaaaaa ' # 生成16字节密钥
aes = AES . new ( secret_key , AES . MODE_ECB )
password = pad ( password . encode ( ' UTF-8 ' ) )
en_password = base64 . b64encode ( aes . encrypt ( password ) )
register_cursor . execute ( f ' INSERT INTO STUDENT ( " NAME " , " ID " , " PASSWORD " , " CLASS " , " GENDER " ) VALUES (?,?,?,?,?) ' ,
( usernames , ID , en_password , Class , gender ) )
register_cursor . execute ( f ' INSERT INTO STUDENT_MIDDLE_CLASS ( " STUDENT_ID " , " CLASS " ) VALUES(?,?) ' , ( ID , Class ) )
db . commit ( )
register_cursor . close ( )
return ' 注册成功 '
# 下为测试数据
# register_func('小紫','20240104','350625','女')
# 获取学生信息
def add_result_func ( id , time , result_data ) : # 添加成绩
add_result_conn_cursor = db . corsor
result_data_str = json . dumps ( result_data ) # 将字典转换为JSON字符串
add_result_conn_cursor . execute ( f " INSERT INTO STUDENT_RESULT VALUES ( ' { id } ' , ' { time } ' , ' { result_data_str } ' ) " )
print ( ' 添加成功 ' )
db . commit ( )
add_result_conn_cursor . close ( )
return ' 添加成功 '
# 测试数据
# add_result_data={'id':2312072104,'time':'2005-03-23','result':{'chinese':100,'math':100}}
# add_result_func(add_result_data['id'],add_result_data['time'],add_result_data['result'])
def fetch_result_func ( id ) : # 查询一个同学在不同时间段的不同考试成绩返回内容为{'result': '{"chinese": 100, "english": 100}'}
cursor = db . cursor ( )
cursor . execute ( f " SELECT * FROM STUDENT_TEST where STUDENT_ID= { id } " )
result = cursor . fetchall ( )
result_dic = { }
for i in result :
result_dic [ i [ 3 ] ] = i [ 5 ]
cursor . close ( )
return result_dic
def get_lesson_func ( id ) :
get_lesson_cursor = db . cursor ( )
get_lesson_cursor . execute ( " SELECT C.COURSE FROM STUDENT_MIDDLE_CLASS S INNER JOIN COURSE C ON S.CLASS = C.CLASS "
" WHERE S.STUDENT_ID = (?) " , ( id , ) )
get_lesson_result = get_lesson_cursor . fetchall ( ) [ 0 ] [ 0 ]
lesson = eval ( get_lesson_result )
print ( lesson )
get_lesson_cursor . close ( )
return lesson
def student_succeed_func ( ID ) :
cursor = db . cursor ( )
2024-07-01 21:48:29 +08:00
cursor . execute ( f ' SELECT * FROM STUDENT WHERE ID= { ID } ' ) # 报错
2024-06-19 13:13:34 +08:00
student_succeed = cursor . fetchall ( ) [ 0 ]
student_succeeds = student_succeed [ 0 ] , student_succeed [ 1 ] , student_succeed [ 3 ] , student_succeed [ 4 ]
cursor . close ( )
return student_succeeds
# fetch_testID('20240101')
def fetch_test_func ( ID ) : #获取试卷
cursor = db . cursor ( )
2024-07-01 21:48:29 +08:00
correct = [ ]
2024-06-29 11:58:02 +08:00
TrueTestDic = { }
TruetestID = [ ]
cursor . execute ( f " SELECT * FROM STUDENT_TEST WHERE STUDENT_ID=? AND TF= ' true ' " , ( ID ) )
for i in cursor . fetchall ( ) :
2024-07-01 21:48:29 +08:00
correct . append ( i )
correct = correct [ : : - 1 ] [ : 3 ]
for i in correct :
2024-06-29 11:58:02 +08:00
TruetestID . append ( i [ 3 ] )
TrueTestDic [ i [ 3 ] ] = i
2024-07-01 21:48:29 +08:00
TruetestID = TruetestID [ : : - 1 ] [ : 3 ]
2024-06-29 11:58:02 +08:00
for index in TruetestID :
cursor . execute ( f " SELECT * FROM TEST_BANK WHERE ID=? " , ( index ) )
TrueTestDic [ index ] = TrueTestDic [ index ] , cursor . fetchall ( )
2024-07-01 21:48:29 +08:00
2024-06-29 11:58:02 +08:00
# print(TrueTestDic)
2024-07-01 21:48:29 +08:00
2024-06-29 11:58:02 +08:00
return TrueTestDic
2024-06-19 13:13:34 +08:00
# fetch_test_func('20240101')
2024-06-29 11:58:02 +08:00
def falseTest_func ( ID ) :
cursor = db . cursor ( )
FalseTestDic = { }
NOTFalseTestDic = { }
FalseTestID = [ ]
cursor . execute ( f " SELECT * FROM STUDENT_TEST WHERE STUDENT_ID=? AND TF= ' false ' " , ( ID ) )
for i in cursor . fetchall ( ) :
FalseTestID . append ( i [ 3 ] )
for index in FalseTestID :
cursor . execute ( f " SELECT * FROM TEST_BANK WHERE ID=? " , ( index ) )
if cursor . fetchall ( ) [ 0 ] [ 6 ] > Time :
cursor . execute ( f " SELECT * FROM TEST_BANK WHERE ID=? " , ( index ) )
FalseTestDic [ index ] = cursor . fetchall ( ) [ 0 ]
else :
cursor . execute ( f " SELECT * FROM TEST_BANK WHERE ID=? " , ( index ) )
NOTFalseTestDic [ index ] = cursor . fetchall ( )
return { ' 1 ' : FalseTestDic , ' 2 ' : NOTFalseTestDic }
# falseTest_func('20240101')
2024-07-01 21:48:29 +08:00
def TestDataFunc ( examID ) :
cursor = db . cursor ( )
cursor . execute ( f " SELECT * FROM TEST_BANK WHERE ID=? " , ( examID , ) )
TestID = cursor . fetchall ( ) [ 0 ]
ChoiceList = json . loads ( TestID [ 0 ] )
CompleList = json . loads ( TestID [ 1 ] )
JudgeList = json . loads ( TestID [ 2 ] )
Choice = [ ]
Comple = [ ]
Judge = [ ]
CHOICE = [ str ( x ) for x in ChoiceList ]
COMPLE = [ str ( x ) for x in CompleList ]
JUDGE = [ str ( x ) for x in JudgeList ]
for i in CHOICE :
cursor . execute ( f " SELECT * FROM CHOICE_QUESTION_BANK WHERE ID=? " , ( i ) )
Choice . append ( cursor . fetchall ( ) )
for i in COMPLE :
cursor . execute ( f " SELECT * FROM COMPLETION_QUESTION_BANK WHERE ID=? " , ( i ) )
Comple . append ( cursor . fetchall ( ) )
for i in JUDGE :
cursor . execute ( f " SELECT * FROM T_OR_F_QUESTION_BANK WHERE ID=? " , ( i ) )
Judge . append ( cursor . fetchall ( ) )
HOUR = TestID [ 3 ]
MIN = TestID [ 4 ]
if int ( HOUR ) == 0 :
time = int ( MIN )
elif int ( MIN ) == 0 :
time = int ( HOUR ) * 60
else :
time = int ( HOUR ) * 60 + int ( MIN )
dic = { ' examID ' : [ Choice , Comple , Judge , time ] }
# print(dic)
return dic
# TestDataFunc('35')
2024-06-19 13:13:34 +08:00
# 查找学生已经完成的记录
def find_end_test ( ID ) :
cursor = db . cursor ( )
cursor . execute ( f " SELECT TEST_ID FROM STUDENT_TEST WHERE STUDENT_ID= { ID } AND TF= ' true ' " )
testID = [ ]
TEST_ID = cursor . fetchall ( )
for i in TEST_ID :
testID . append ( i [ 0 ] )
return testID
# find_end_test('20240101')
def score_entry_func ( score , testID , ID ) :
cursor = db . cursor ( )
cursor . execute ( f " UPDATE STUDENT_TEST SET TF= ' true ' , RESULT=(?) WHERE STUDENT_ID=(?) AND TEST_ID=(?) " , ( score , ID , testID ) )
db . commit ( )
cursor . close ( )
return ' 修改成功 '
2024-06-20 14:54:17 +08:00
def FetchTrainTitleFunc ( ID ) :
cursor = db . cursor ( )
2024-06-20 15:30:16 +08:00
cursor . execute ( " SELECT * FROM TRAINSCORE WHERE STUDENT_ID=? and TF= ' false ' " , ( ID ) )
2024-06-20 14:54:17 +08:00
train_title = cursor . fetchall ( )
titles = [ ]
title = [ ]
for i in train_title :
titles . append ( i [ 2 ] )
for i in titles :
2024-07-01 21:48:29 +08:00
cursor . execute ( ' SELECT * FROM TRAINTEST WHERE ID=? AND STOPTIME>? ' , ( i , Time ) )
result = cursor . fetchall ( )
title . append ( result )
if result :
pass
else :
cursor . execute ( " UPDATE TRAINSCORE SET TF= ' true ' , RESULT= ' 0 ' , TRAINRESULT= ' 0 ' WHERE TEST_ID=? AND STUDENT_ID=? " , ( i , ID ) )
2024-06-20 14:54:17 +08:00
2024-07-01 21:48:29 +08:00
title = [ item for item in title if item ]
print ( title )
db . commit ( )
2024-06-20 14:54:17 +08:00
cursor . close ( )
return title
2024-07-01 21:48:29 +08:00
# FetchTrainTitleFunc("20240101")
2024-06-20 14:54:17 +08:00
2024-06-19 13:13:34 +08:00
2024-06-21 14:40:55 +08:00
def FetchTrainTestFunc ( operateID ) :
cursor = db . cursor ( )
cursor . execute ( " SELECT * FROM TRAINTEST WHERE ID=? " , ( operateID ) )
TrainID = cursor . fetchall ( ) [ 0 ]
#获取题目
CHOICEID = json . loads ( TrainID [ 0 ] )
COMPLEID = json . loads ( TrainID [ 1 ] )
JUDGEID = json . loads ( TrainID [ 2 ] )
Train = json . loads ( TrainID [ 11 ] )
CHOICELIST = [ ]
COMPLELIST = [ ]
JUDGELIST = [ ]
CHOICE = [ str ( x ) for x in CHOICEID ]
COMPLE = [ str ( x ) for x in COMPLEID ]
JUDGE = [ str ( x ) for x in JUDGEID ]
for i in CHOICE :
cursor . execute ( ' SELECT * FROM CHOICE_QUESTION_BANK WHERE ID=(?) ' , ( i ) )
CHOICELIST . append ( cursor . fetchall ( ) )
for i in COMPLE :
cursor . execute ( ' SELECT * FROM COMPLETION_QUESTION_BANK WHERE ID=(?) ' , ( i ) )
COMPLELIST . append ( cursor . fetchall ( ) )
for i in JUDGE :
cursor . execute ( ' SELECT * FROM T_OR_F_QUESTION_BANK WHERE ID=(?) ' , ( i ) )
JUDGELIST . append ( cursor . fetchall ( ) )
HOUR = TrainID [ 3 ]
MIN = TrainID [ 4 ]
if int ( HOUR ) == 0 :
time = int ( MIN )
elif int ( MIN ) == 0 :
time = int ( HOUR ) * 60
else :
time = int ( HOUR ) * 60 + int ( MIN )
dic = { ' operateID ' : [ CHOICELIST , COMPLELIST , JUDGELIST , Train , time ] }
2024-06-24 19:51:39 +08:00
2024-06-21 14:40:55 +08:00
return dic
2024-06-24 19:51:39 +08:00
# FetchTrainTestFunc('6')
def HistoryTrainFunc ( ID ) :
dic = { }
cursor = db . cursor ( )
cursor . execute ( " SELECT * FROM TRAINSCORE WHERE STUDENT_ID=? AND TF= ' true ' " , ( ID ) )
historytrain = cursor . fetchall ( )
for i in historytrain :
cursor . execute ( " SELECT * FROM TRAINTEST WHERE ID=? " , ( i [ 2 ] ) )
2024-07-10 21:47:55 +08:00
result = cursor . fetchall ( )
dic [ i [ 2 ] ] = i , result
2024-06-24 19:51:39 +08:00
return dic
# HistoryTrainFunc('20240101')
2024-06-29 11:58:02 +08:00
def FindTrain1SrcFunc ( ID , testID ) :
cursor = db . cursor ( )
2024-07-04 10:00:31 +08:00
cursor . execute ( " SELECT * FROM TRAINSCORE WHERE STUDENT_ID=? AND TEST_ID=? " , ( ID , testID ) )
result = cursor . fetchall ( ) [ 0 ]
2024-06-29 11:58:02 +08:00
cursor . close ( )
return result
2024-07-04 10:00:31 +08:00
# FindTrain1SrcFunc('20240101','54')
2024-06-29 11:58:02 +08:00
2024-07-10 20:05:41 +08:00
def AddTrainScoreFunc ( ID , testID , score , trainResult , succeed ) :
a = [ ]
2024-07-11 14:23:10 +08:00
# 打印结果字符串
succeed = json . loads ( succeed )
succeed = list ( succeed )
2024-07-10 20:05:41 +08:00
for i in succeed :
2024-07-11 14:23:10 +08:00
a . append ( i )
a = list ( set ( a ) )
if None in a :
a . remove ( None )
if len ( a ) == 0 :
result_string = ' 全能高手 '
else :
result_string = ' , ' . join ( a ) + ' 需要加强 '
2024-07-10 12:49:06 +08:00
cursor = db . cursor ( )
2024-07-11 14:23:10 +08:00
cursor . execute ( " UPDATE TRAINSCORE SET TF= ' true ' , RESULT=(?), TRAINRESULT=(?) ,ANALYSE=(?) WHERE STUDENT_ID=(?) AND TEST_ID=(?) " , ( score , trainResult , result_string , ID , testID ) )
print ( ' 加入成绩成功 ' )
2024-07-10 12:49:06 +08:00
db . commit ( )
cursor . close ( )
return ' 添加成功 '
2024-06-21 14:40:55 +08:00
2024-06-19 13:13:34 +08:00