From f63769e23140d35d5f606c4801ef1a738b889a7e Mon Sep 17 00:00:00 2001 From: molaboon Date: Sat, 3 Jul 2021 00:55:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=9A=A8=E5=A4=A7=E5=AD=B8?= =?UTF-8?q?=E7=94=9F=E7=B0=A1=E6=98=93=E6=95=99=E5=8B=99=E7=B3=BB=E7=B5=B1?= =?UTF-8?q?=E7=B6=B2=E7=AB=99=E7=95=AB=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ncnu.py | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Ncnu.py diff --git a/Ncnu.py b/Ncnu.py new file mode 100644 index 0000000..33cae82 --- /dev/null +++ b/Ncnu.py @@ -0,0 +1,100 @@ +from tkinter import * +from api.ncnu import NCNU +from config import CONFIG +from tkinter import messagebox +from tkhtmlview import HTMLLabel + +def createNcnuWin(): + ncnu = NCNU(CONFIG['NCNU']['username'], CONFIG['NCNU']['password']) + if ncnu.status: + def dlCurriculum(sem): + if ncnu.getCourseTable(sem): + messagebox.showinfo(message="{} 課表已經儲存到 ./{}課表.pdf".format(sem,sem)) + else: + messagebox.showwarning(message="無法存取 {} 課表".format(sem)) + win=Tk() + leftframe=Frame(win) + leftframe.pack(fill=BOTH,side=LEFT) + rightframe=Frame(win) + rightframe.pack(side=RIGHT) + + textlb=Label(leftframe,text="我的學習紀錄",font="Helvetica 20") + options=["各學期成績總覽","指定學期的成績列表","缺曠課記錄","獎懲紀錄","加選課程狀態"] + optionsListbox=Listbox(leftframe) + optionsListbox.insert(END,*options) + chooseSemesterLb=Label(leftframe,text="指定學期",font="Helvetica 10") + + chooseSemesterEntry=Entry(leftframe) + chooseSemesterEntry.insert(0,"1092") + downloadBtn=Button(leftframe,text="下載課表",command=lambda:dlCurriculum(chooseSemesterEntry.get())) + + + textlb.pack(fill=BOTH,expand=True) + optionsListbox.pack(fill=BOTH) + chooseSemesterLb.pack(fill=BOTH) + chooseSemesterEntry.pack(fill=BOTH) + downloadBtn.pack() + + htmlLb=HTMLLabel(rightframe,html="") + htmlScrollbar=Scrollbar(rightframe) + htmlLb.configure(yscrollcommand=htmlScrollbar.set) + + htmlScrollbar.pack(fill=Y,side=RIGHT) + htmlLb.pack() + + def itemSelected(event): + obj = event.widget + Index = obj.curselection() + + Html='''''' + if str( obj.get(Index) ) == options[0]: + scores = ncnu.getScoreSummary() + for c in scores['semesters']: + Html+=''' 學期:{} 修課數:{} 通過數:{} 學分數:{} 平均分數:{} 排名:{}

'''.format(c.get("semester"), + c.get("select_num"),c.get("pass_Num"),c.get("pass_credit"),c.get("average"),c.get("rank") ) + c=scores['sum'] + Html+=''' 學期{} 修課數:{} 通過數:{} 學分數:{} {} {}'''.format(c.get("semester"), + c.get("select_num"),c.get("pass_Num"),c.get("pass_credit"),c.get("average"),c.get("rank") ) + htmlLb.set_html(Html) + + elif str( obj.get(Index) ) == options[1]: + scores = ncnu.getScore(chooseSemesterEntry.get()) + for i in scores: + Html+="代號: {} 班號: {} 課程名稱: {} 學分數: {}老師: {} 時間: {} 地點: {} 學分: {} 分數: {} 是否為必修?: {}

".format(i.get("number"), + i.get("class"),i.get("name"),i.get("credit"),i.get("teacher"),i.get("time"),i.get("place"),i.get("credit"),i.get("score"),i.get("mandatary") ) + htmlLb.set_html(Html) + elif str( obj.get(Index) ) == options[2]: + absenceLogs = ncnu.getAbsenceLogs() + if absenceLogs: + for log in absenceLogs: + Html+=''' {} {} {} {} {}'''.format(log.get('id'), + log.get('semester'),log.get('classname'),log.get('date'),log.get('time')) + htmlLb.set_html(Html) + else: + Html+='''

沒有任何缺曠課記錄

''' + htmlLb.set_html(Html) + elif str( obj.get(Index) ) == options[3]: + awardLogs = ncnu.getAwardLogs() + if awardLogs: + for log in awardLogs: + Html+=''' {} {} {} {} {}'''.format(log.get('id'), + log.get('semester'),log.get('award'),log.get('count'),log.get('content')) + htmlLb.set_html(Html) + else: + Html+='''

沒有任何缺曠課記錄

''' + htmlLb.set_html(Html) + elif str( obj.get(Index) ) == options[4]: + logs = ncnu.getAddCourseLogs() + if logs: + for log in logs: + Html+=''' {} 學期: {}
課名: {} 班別: {} 加選狀態:{}

'''.format(log.get('id'), + log.get('semester'),log.get('classname'),log.get('class'),log.get('check')) + htmlLb.set_html(Html) + optionsListbox.bind("<>", itemSelected) + + win.mainloop() + + else: + print("NCNU 教務系統登入失敗") + +createNcnuWin()