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()