from tkinter import *#圖形界面包
from tkinter import messagebox
import os.path
import os
import math
import time
import copy
file_list=os.listdir('c:\\') #返回c盤目錄
if 'windowstools' not in file_list:#若不存在目錄則創建工作目錄
os.mkdir('c:\\windowstools')
def submit1():#成績管理
def submit1():
s1=u1.get()
s2=u2.get()
if os.path.exists('c:\\windowstools\\'+s1+'.txt')==False:
messagebox.showinfo('提示','用戶名不存在!') #錯與提示
u1.set('')
u2.set('')
return
f1=open('c:\\windowstools\\'+s1+'.txt','r+');
ss=f1.readlines()
s=[]
f1.close()
for i in ss:
s.append(i.replace('\n',''))
if s[0]!=s2:
messagebox.showinfo('提示','密碼錯誤!') #錯誤提示
u2.set('')
return
u1.set('')
u2.set('')
def sub1():
x=0
j=0
n=0
f1=open('c:\\windowstools\\'+s1+'.txt','r+');
ss=f1.readlines()
s=[]
f1.close()
for i in ss:
s.append(i.replace('\n',''))
w=Toplevel()
w.title('成績統計')
f=Frame(w)
f.pack(padx=80, pady=40, ipadx=20)#f爲塊容器
for i in range(3,len(s)):
if i%3==0:
x=x+int(s[i+1])
j=j+int(s[i+2])
n=n+1
Label(f,text='科目數: '+str(n)).grid(row=0,column=0,padx=5,pady=10)
Label(f,text='總學分: '+str(x)).grid(row=1,column=0,padx=5,pady=10)
Label(f,text='平均績點:'+str(j/n)).grid(row=2,column=0,padx=5,pady=10)
def sub2():
f1=open('c:\\windowstools\\'+s1+'.txt','r+');
ss=f1.readlines()
s=[]
f1.close()
for i in ss:
s.append(i.replace('\n',''))
w=Toplevel()
w.title('成績統計')
f=Frame(w)
f.pack(padx=80, pady=40, ipadx=20)#f爲塊容器
Label(f,text='科目').grid(row=0,column=0,padx=5,pady=10)
Label(f,text='學分 ').grid(row=0,column=1,padx=5,pady=10)
Label(f,text='績點 ').grid(row=0,column=2,padx=5,pady=10)
r=1
c=0
for i in range(3,len(s)):
Label(f,text=s[i]).grid(row=r,column=c,padx=5,pady=10)
c=c+1
if (i+1)%3==0:
r=r+1
c=0
def sub3():
def sub1():
f1=open('c:\\windowstools\\'+s1+'.txt','r+')
while True:
if f1.readline()=='':
break;
f1.write(u3.get()+'\n')
f1.write(u4.get()+'\n')
f1.write(u5.get()+'\n')
f1.close()
messagebox.showinfo('提示','保存成功!')
w=Toplevel()
w.title('添加成績')
f=Frame(w)
f.pack(padx=80, pady=40, ipadx=20)#f爲塊容器
Label(f,text='科目:').grid(row=2,column=0,padx=5,pady=10)
u3=StringVar()
Entry(f,textvariable=u3).grid(row=2,column=1,padx=5,pady=10)
Label(f,text='學分:').grid(row=3,column=0,padx=5,pady=10)
u4=StringVar()
l1=Entry(f,textvariable=u4).grid(row=3,column=1,padx=5,pady=10)
Label(f,text='績點:').grid(row=4,column=0,padx=5,pady=10)
u5=StringVar()
l2=Entry(f,textvariable=u5).grid(row=4,column=1,padx=5,pady=10)
Button(f,text='確定',command=sub1).grid(row=5,column=1)
w=Toplevel()
w.title('歡迎'+s[1])
f=Frame(w)
f.pack(padx=80, pady=40, ipadx=20)#f爲塊容器
Label(f,text='姓名:'+s[1]).grid(row=0,column=0,padx=5,pady=10)
Label(f,text='學號:'+s[2]).grid(row=1,column=0,padx=5,pady=10)
Button(f,text='成績統計',command=sub1).grid(row=2,column=0,padx=5,pady=10)
Button(f,text='瀏覽成績',command=sub2).grid(row=3,column=0,padx=5,pady=10)
Button(f,text='添加成績',command=sub3).grid(row=4,column=0,padx=5,pady=10)
def test(s):
for i in s:
if i not in '0123456789' and i not in 'abcdefghijklmnopqrstuvwxyz':
return 0
return 1
def submit2():
def submit3():
s1=u3.get()
s2=u4.get()
s3=u5.get()
if len(s1)<3:
messagebox.showinfo('提示','用戶名長度大於3!') #錯誤提示
return
if len(s2)<3 or len(s3)<3:
messagebox.showinfo('提示','密碼長度大於3!')
return
if test(s1)==0:
messagebox.showinfo('提示','用戶名由字母和數字組成!')
return
if test(s2)==0:
messagebox.showinfo('提示','密碼由字母和數字組成!')
return
if test(s3)==0:
messagebox.showinfo('提示','密碼由字母和數字組成!')
return
if s3!=s2:
messagebox.showinfo('提示','兩次密碼不同!,請重新輸入!')
u5.set('')
return
if os.path.exists(s1+'.txt')==True:
messagebox.showinfo('提示','用戶名已存在,請重新註冊!')
u3.set('')
u4.set('')
u5.set('')
return
def submit4():
f1=open('c:\\windowstools\\'+s1+'.txt','r+')
while True:
if f1.readline()=='':
break;
f1.write(ui.get()+'\n')
f1.write(uj.get()+'\n')
messagebox.showinfo('提示','保存成功!')
f1.close()
f1=open('c:\\windowstools\\'+s1+'.txt','a+')
f1.write(s2+'\n')
f1.close()
messagebox.showinfo('提示','註冊成功!')
t=Toplevel()
t.title('填寫個人信息')
ff=Frame(t)
ff.pack(padx=80, pady=40, ipadx=20)#f爲塊容器
Label(ff,text='姓名:').grid(row=0,column=0,padx=5,pady=10)
Label(ff,text='學號:').grid(row=1,column=0,padx=5,pady=10)
ui=StringVar()
Entry(ff,textvariable=ui).grid(row=0,column=1,padx=5,pady=10)
uj=StringVar()
Entry(ff,textvariable=uj).grid(row=1,column=1,padx=5,pady=10)
Button(ff,text='確定',command=submit4).grid(row=5,column=1)
w=Toplevel()
w.title('註冊')
a.geometry('400x300')
f=Frame(w)
f.pack(padx=80, pady=40, ipadx=20)#f爲塊容器
l=Label(f,text='用戶名和密碼均由字母和數字組成,區分大小寫')
l.grid(row=0,column=0,rowspan=1,columnspan=2,padx=20,pady=20)
Label(f,text='用戶名和密碼長度大於3').grid(row=1,column=1,padx=5,pady=10)
Label(f,text='用戶名:').grid(row=2,column=0,padx=5,pady=10)
u3=StringVar()
Entry(f,textvariable=u3).grid(row=2,column=1,padx=5,pady=10)
Label(f,text='密碼:').grid(row=3,column=0,padx=5,pady=10)
u4=StringVar()
l1=Entry(f,textvariable=u4,show='*').grid(row=3,column=1,padx=5,pady=10)
Label(f,text='確認密碼:').grid(row=4,column=0,padx=5,pady=10)
u5=StringVar()
l2=Entry(f,textvariable=u5,show='*').grid(row=4,column=1,padx=5,pady=10)
Button(f,text='確定',command=submit3).grid(row=5,column=0)
Button(f,text='退出系統',command=quit).grid(row=5,column=1)
a=Toplevel()
a.title('歡迎使用成績管理系統')
a.geometry('400x300')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)#f爲塊容器
l=Label(f,text='學生成績管理系統',font=('Arial',15))
l.grid(row=0,column=0,rowspan=1,columnspan=2,padx=20,pady=20)
Label(f,text='用戶名:').grid(row=1,column=0,padx=5,pady=10)
u1=StringVar()
Entry(f,textvariable=u1).grid(row=1,column=1,padx=5,pady=10)
Label(f,text='密碼:').grid(row=2,column=0,padx=5,pady=10)
u2=StringVar()
Entry(f,textvariable=u2,show='*').grid(row=2,column=1,padx=5,pady=10) # *表示密碼框輸入隱藏
Button(f,text='登陸',command=submit1).grid(row=3,column=0,padx=10,pady=10)
Button(f,text='註冊',command=submit2).grid(row=3,column=1,padx=10,pady=10)
def submit2(): #計算器
global s
s=''
def submitt1():
global s
s=s+'+'
u1.set(s)
def submitt2():
global s
s=s+'-'
u1.set(s)
def submitt3():
global s
s=s+'*'
u1.set(s)
def submitt4():
global s
s=s+'/'
u1.set(s)
def submitt0():
global s
s=''
u1.set(s)
def submitt5():
global s
s=s+'7'
u1.set(s)
def submitt6():
global s
s=s+'8'
u1.set(s)
def submitt7():
global s
s=s+'9'
u1.set(s)
def submitt8():
global s
s=s+'4'
u1.set(s)
def submitt9():
global s
s=s+'5'
u1.set(s)
def submitt10():
global s
s=s+'6'
u1.set(s)
def submitt11():
global s
s=s+'1'
u1.set(s)
def submitt12():
global s
s=s+'2'
u1.set(s)
def submitt13():
global s
s=s+'3'
u1.set(s)
def submitt14():
global s
s=s+'0'
u1.set(s)
def submitt15():
global s
s=s+'.'
u1.set(s)
def submitts():
global s
if '.' in s:
i=float(s)
else:
i=int(s)
i=math.sqrt(i)
u1.set(str(i))
s=''
def submittp():
global s
if '.' in s:
i=float(s)
else:
i=int(s)
i=i*i
u1.set(str(i))
s=''
def submittr():
global s
re=eval(s)
s=''
u1.set(str(re))
def submittjc():
global s
i=int(s)
sum=1
for j in range(1,i+1):
sum=sum*j
u1.set(str(sum))
s=''
a=Toplevel()
a.title('歡迎使用計算器')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)
u1=StringVar()
Entry(f,textvariable=u1).grid(row=0,column=0,padx=5,pady=10,columnspan=4)
Button(f,text='加',command=submitt1).grid(row=1,column=0,ipadx=5,ipady=5)
Button(f,text='減',command=submitt2).grid(row=1,column=1,ipadx=5,ipady=5)
Button(f,text='乘',command=submitt3).grid(row=1,column=2,ipadx=5,ipady=5)
Button(f,text='除',command=submitt4).grid(row=1,column=3,ipadx=5,ipady=5)
Button(f,text='清除',command=submitt0).grid(row=2,column=0,ipadx=5,ipady=5)
Button(f,text='7',command=submitt5).grid(row=2,column=1,ipadx=5,ipady=5)
Button(f,text='8',command=submitt6).grid(row=2,column=2,ipadx=5,ipady=5)
Button(f,text='9',command=submitt7).grid(row=2,column=3,ipadx=5,ipady=5)
Button(f,text='開方',command=submitts).grid(row=3,column=0,ipadx=5,ipady=5)
Button(f,text='4',command=submitt8).grid(row=3,column=1,ipadx=5,ipady=5)
Button(f,text='5',command=submitt9).grid(row=3,column=2,ipadx=5,ipady=5)
Button(f,text='6',command=submitt10).grid(row=3,column=3,ipadx=5,ipady=5)
Button(f,text='平方',command=submittp).grid(row=4,column=0,ipadx=5,ipady=5)
Button(f,text='1',command=submitt11).grid(row=4,column=1,ipadx=5,ipady=5)
Button(f,text='2',command=submitt12).grid(row=4,column=2,ipadx=5,ipady=5)
Button(f,text='3',command=submitt13).grid(row=4,column=3,ipadx=5,ipady=5)
Button(f,text='等於',command=submittr).grid(row=5,column=0,ipadx=5,ipady=5)
Button(f,text='0',command=submitt14).grid(row=5,column=1,ipadx=5,ipady=5)
Button(f,text='.',command=submitt15).grid(row=5,column=2,ipadx=5,ipady=5)
Button(f,text='階乘',command=submittjc).grid(row=5,column=3,ipadx=5,ipady=5)
def submit3(): #日曆模塊
def judge_ruinian(y):#判斷是否爲瑞年
if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
return True
else:
return False
def mon_day(y,m):#判斷某一年的某一個月多少天
if m in [1,3,5,7,8,10,12]:
return 31
elif m in [4,6,9,11]:
return 30
elif judge_ruinian(y):
return 29
else:
return 28
def day_1800(y,m):#自1800年以來過了多少天
days = 0
for y1 in range(1800, y):
if judge_ruinian(y1):
days=days+366
else:
days=days+365
for m in range(1, m):
days=days+mon_day(y, m)
return days
def mon_ji(y,m):#當月一號是周幾
return 3+day_1800(y,m)%7
t1=time.strftime('%Y-%m-%d',time.localtime(time.time()))
t=t1.split('-') #分割得到時間
year=int(t[0])
month=int(t[1])
day=int(t[2])
a=Toplevel()
a.title('歡迎使用日曆')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)
def xianshi(y,m,d):#圖形界面打印日曆
Label(f,text=t1).grid(row=0,column=0,columnspan=7)
Label(f,text='Mon Tue Wed Thu Fri Sat Sun ').grid(row=1,column=0,columnspan=7)
i=mon_ji(y,m)
k=2
if i!=7:
Label(f,text=' ').grid(row=2,column=0)
Label(f,text=' ').grid(row=2,column=1)
Label(f,text=' ').grid(row=2,column=2,columnspan=i)
k=3
for j in range(1,mon_day(y,m)+1):
if j==day:
Label(f,text=str(j),bg='red').grid(row=k,column=i-1)
else:
Label(f,text=str(j)).grid(row=k,column=i-1)
i=i+1
if i%8==0:
i=1
k=k+1
def submit1():
xianshi(y,m-1,d)
def submit2():
xianshi(y,m+1,d)
Button(f,text='上月',command=submit1).grid(row=k+1,column=0,ipadx=5,ipady=5,columnspan=2)
Button(f,text='下月',command=submit2).grid(row=k+1,column=5,ipadx=5,ipady=5,columnspan=2)
xianshi(year,month,day)
def submit4(): #日期計算
class Date:
def __init__(self, date):
self.setyear(date) # 年
self.setmonth(date) # 月
self.setday(date) # 日
self.date = date
def setyear(self, date): # 設置年
a = date.split('-')
self.year = int(a[0])
def setmonth(self, date): # 設置月
a = date.split('-')
b = int(a[1].lstrip('0'))
self.month = b
def setday(self, date): # 設置日
a = date.split('-')
b = int(a[2].lstrip('0'))
self.day = b
def redate(self):
return self.date
def show(self):
messagebox.showinfo('結果',str(self.year)+ '-'+ str(self.month)+ '-'+str( self.day))
def isdeap(self):
if self.year%400 == 0 or (self.year%4 == 0 and self.year%100 != 0):
return 1
else:
return 0
def whichday(self):
month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if self.isdeap() == 1:
month[1] = 29
if self.month == 1:
return self.day
else:
n = sum(month[:self.month-1])
return n+self.day
def bigorsmall(self, date1):
big = self
small = date1
flag = 0
if self.year > date1.year:
big = self
small = date1
elif self.year < date1.year:
big = date1
small = self
else:
if self.month > date1.month:
big = self
small = date1
elif self.month < date1.month:
big = date1
small = self
else:
if self.day > date1.day:
big = self
small = date1
elif self.day < date1.day:
big = date1
small = self
else:
big = self
small = date1
flag = 1
if big == date1:
messagebox.showinfo('結果',str(self.redate())+'早於'+str(date1.redate()))
elif big == self and flag != 1:
messagebox.showinfo('結果',str(self.redate())+'晚於'+str(date1.redate()))
else:
messagebox.showinfo('結果',str(self.redate())+str(date1.redate())+'是同一天')
list = [big,small]
return list
def dateinterval(self, date1):
big = self
small = date1
if self.year > date1.year:
big = self
small = date1
elif self.year < date1.year:
big = date1
small = self
else:
if self.month > date1.month:
big = self
small = date1
elif self.month < date1.month:
big = date1
small = self
else:
if self.day >= date1.day:
big = self
small = date1
else:
big = date1
small = self
if big.year != small.year:
x = big.whichday()
y = 365-small.whichday()
if small.isdeap() == 1:
y = 366-small.whichday()
z = 0
a = small.year+1
for i in range(big.year-small.year-1):
if a%400 == 0 or (a%4 == 0 and a%100 != 0):
z = z+366
else:
z = z+365
a = a+1
return x+y+z
else:
x = big.whichday()
y = small.whichday()
return x-y
def nextdate(self, n):
date = copy.deepcopy(self)
month1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
month2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
while 1:
if date.isdeap() == 1:
if n+date.day <= month2[date.month-1]:
date.day = date.day+n
break
else:
n = n-(month2[date.month-1]-date.day)
date.day = 0
date.month = date.month % 12+1
if date.month == 1:
date.year = date.year+1
else:
if n+date.day <= month1[date.month-1]:
date.day = date.day+n
break
else:
n = n-(month1[date.month-1]-date.day)
date.day = 0
date.month = date.month % 12+1
if date.month == 1:
date.year = date.year+1
date.show()
if __name__ == '__main__':
def submit1():
def submit():
a=u1.get()
b=u2.get()
date1 = Date(a)
date2 = Date(b)
x = date1.dateinterval(date2)
messagebox.showinfo('結果','這兩個日期相差'+str(x)+ '天')
a=Toplevel()
a.title(' ')
f=Frame(a)
f.pack()#f爲塊容器
Label(f,text='輸入日期(格式爲x-y-z,如2010-01-11').grid(row=0,column=0,padx=5,pady=10)
u1=StringVar()
Entry(f,textvariable=u1).grid(row=1,column=0,padx=5,pady=10)
u2=StringVar()
Entry(f,textvariable=u2).grid(row=2,column=0,padx=5,pady=10)
Button(f,text='確定',command=submit).grid(row=3,column=0,padx=10,pady=10)
def submit2():
def submit():
a=u1.get()
b=u2.get()
date1 = Date(a)
date2 = Date(b)
date1.bigorsmall(date2)
a=Toplevel()
a.title(' ')
f=Frame(a)
f.pack()#f爲塊容器
Label(f,text='輸入日期(格式爲x-y-z,如2010-01-11').grid(row=0,column=0,padx=5,pady=10)
u1=StringVar()
Entry(f,textvariable=u1).grid(row=1,column=0,padx=5,pady=10)
u2=StringVar()
Entry(f,textvariable=u2).grid(row=2,column=0,padx=5,pady=10)
Button(f,text='確定',command=submit).grid(row=3,column=0,padx=10,pady=10)
def submit3():
def submit():
a=u1.get()
b=u2.get()
date1 = Date(a)
date1.nextdate(b)
a=Toplevel()
a.title(' ')
f=Frame(a)
f.pack()#f爲塊容器
Label(f,text='輸入日期(格式爲x-y-z,如2010-01-11,天數').grid(row=0,column=0,padx=5,pady=10)
u1=StringVar()
Entry(f,textvariable=u1).grid(row=1,column=0,padx=5,pady=10)
u2=StringVar()
Entry(f,textvariable=u2).grid(row=2,column=0,padx=5,pady=10)
Button(f,text='確定',command=submit).grid(row=3,column=0,padx=10,pady=10)
def submit4():
def submit():
a=u1.get()
date1 = Date(a)
x = date1.whichday()
messagebox.showinfo('結果','該日期是今年的第'+str( x)+ '天')
a=Toplevel()
a.title(' ')
f=Frame(a)
f.pack()#f爲塊容器
Label(f,text='輸入日期(格式爲x-y-z,如2010-01-11').grid(row=0,column=0,padx=5,pady=10)
u1=StringVar()
Entry(f,textvariable=u1).grid(row=1,column=0,padx=5,pady=10)
Button(f,text='確定',command=submit).grid(row=3,column=0,padx=10,pady=10)
a=Toplevel()
a.title('日期系統')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)#f爲塊容器
Button(f,text='兩個日期間 的間隔 ',command=submit1).grid(row=0,column=1,padx=10,pady=10)
Button(f,text='比較兩個日期的大小',command=submit2).grid(row=1,column=1,padx=10,pady=10)
Button(f,text='日期若干天后的日期',command=submit3).grid(row=3,column=1,padx=10,pady=10)
Button(f,text='日期是一年的第幾天',command=submit4).grid(row=4,column=1,padx=10,pady=10)
Button(f,text='退出',command=quit).grid(row=5,column=1,padx=10,pady=10)
def submit5(): #備忘錄
global k
k=len(os.listdir('c:\\windowstools\\beiwanglu\\'))#獲取文件個數
k=k+1
def submit1():
def submit1():
global k
f=open('c:\\windowstools\\beiwanglu\\'+str(k)+'.txt','a+')
f.write(u.get())
f.close()
k=k+1
a=Toplevel()
a.title('編輯')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)
u=StringVar()
Entry(f,textvariable=u).grid(row=0,column=0,rowspan=40,ipadx=80,ipady=80,columnspan=40)
Button(f,text='保存',command=submit1).grid(row=41,column=1,padx=10,pady=10)
Button(f,text='清除',command=submit2).grid(row=41,column=2,padx=10,pady=10)
def submit2():
a=Toplevel()
a.title('瀏覽')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)
s=os.listdir('c:\\windowstools\\beiwanglu\\') #返回文件列表
k=0
for i in s:
f1=open('c:\\windowstools\\beiwanglu\\'+i,'r') #打開文件
t=f1.readlines()
Label(f,text=t).grid(row=k,column=0,padx=5,pady=10)
k=k+1
def submit3():
def submit1():
s1=u.get()
s=os.listdir('c:\\windowstools\\beiwanglu\\') #返回文件列表
k=0
for i in s:
f1=open('c:\\windowstools\\beiwanglu\\'+i,'r') #打開文件
t=f1.readlines()
for t1 in t:
if s1 in t1:
a=Toplevel()
a.title('結果')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)
Label(f,text=t).grid(row=k,column=0,padx=5,pady=10)
k=k+1
a=Toplevel()
a.title('搜索')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)
u=StringVar()
Entry(f,textvariable=u).grid(row=0,column=0)
Button(f,text='搜索',command=submit1).grid(row=1,column=0,padx=10,pady=10)
file_list=os.listdir('c:\\windowstools\\') #返回c盤目錄
if 'beiwanglu' not in file_list:#若不存在目錄則創建工作目錄
os.mkdir('c:\\windowstools\794588101.txt\beiwanglu')
a=Toplevel()
a.title('備忘錄')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)
Button(f,text='新建',command=submit1).grid(row=0,column=1,padx=10,pady=10)
Button(f,text='瀏覽',command=submit2).grid(row=1,column=1,padx=10,pady=10)
Button(f,text='搜索',command=submit3).grid(row=2,column=1,padx=10,pady=10)
def submit6():#搜索文件,用樹算法遍歷文件樹
def submit1():
submit2()
submit3()
submit4()
def submit2():
gg=u.get()
s='c:\\'
dir=[]
def search(s):
for i in os.listdir(s):
if gg==i:
messagebox.showinfo('提示',s+i)
return 0
if os.path.isdir(i) and i!='' and i!='.' and i!='..' and i!='...':
search(s+i+'\\')
search(s)
def submit3():
gg=u.get()
s='d:\\'
dir=[]
def search(s):
for i in os.listdir(s):
if gg==i:
messagebox.showinfo('提示',s+i)
return 0
if os.path.isdir(i) and i!='' and i!='.' and i!='..' and i!='...':
search(s+i+'\\')
search(s)
def submit4():
gg=u.get()
s='e:\\'
dir=[]
def search(s):
for i in os.listdir(s):
if gg==i:
messagebox.showinfo('提示',s+i)
return 0
if os.path.isdir(i) and i!='' and i!='.' and i!='..' and i!='...':
search(s+i+'\\')
search(s)
a=Toplevel()
a.title('文件搜索')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)
Label(f,text='請輸入文件名').grid(row=0,column=0,padx=5,pady=10)
u=StringVar()
Entry(f,textvariable=u).grid(row=0,column=1,padx=5,pady=10)
Button(f,text='全盤搜索',command=submit1).grid(row=1,column=0,padx=10,pady=10)
Button(f,text='C盤搜索',command=submit2).grid(row=1,column=1,padx=10,pady=10)
Button(f,text='D盤搜索',command=submit3).grid(row=2,column=0,padx=10,pady=10)
Button(f,text='E盤搜索',command=submit4).grid(row=2,column=1,padx=10,pady=10)
def submit7():
class Watch(Frame):
msec = 100
def __init__(self, parent=None, **kw):
Frame.__init__(self, parent, kw)
self._start = 0.0
self._elapsedtime = 0.0
self._running = False
self.timestr = StringVar()
self.makeWidgets()
def makeWidgets(self):
l = Label(self, textvariable = self.timestr)
self._setTime(self._elapsedtime)
l.grid(row=0,column=0,padx=5,pady=10,columnspan=3)
def _update(self):
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self._timer = self.after(self.msec, self._update)
def _setTime(self, elap):
minutes = int(elap/60)
seconds = int(elap-minutes*60.0)
hseconds = int((elap - minutes*60.0 - seconds) *100)
self.timestr.set('%2d:%2d:%2d' %(minutes, seconds, hseconds))
def Start(self):
if not self._running:
self._start = time.time() - self._elapsedtime
self._update()
self._running = True
def Stop(self):
if self._running:
self.after_cancel(self._timer)
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self._running = False
def Reset(self):
self._start = time.time()
self._elapsedtime = 0.0
self._setTime(self._elapsedtime)
tt= Toplevel()
tt.geometry('400x200')
tt.title('秒錶')
a=Frame(tt)
a.pack(padx=80, pady=40, ipadx=20)
sw=Watch(a)
sw.grid(row=0,column=0,padx=5,pady=10,columnspan=3)
Button(a, text = '開始', command = sw.Start).grid(row=1,column=0,padx=5,pady=10)
Button(a, text = '停止', command = sw.Stop).grid(row=1,column=1,padx=5,pady=10)
Button(a, text = '重置', command = sw.Reset).grid(row=1,column=2,padx=5,pady=10)
def submit8():#LL1文法
def put_in():#輸入
global a,vn,vt,start
a=[]
top=Tk()
top.title('LL1文法')
f=Frame(top)
f.pack(padx=80, pady=80, ipadx=40)#f爲塊容器
def submit1():
i=u3.get()+'保存成功'
p.set(i)
global start
start=u3.get()
u3.set('')
def submit():#按鈕事件
u1=u.get()
if u1!='0':
a.append(list(u1))
gg=u1+'保存成功'
p.set(gg)
u.set('')
else:
gg='輸入結束'
p.set(gg)
def submit2():
i=u4.get()+'保存成功'
global vn
vn=list(u4.get())
p.set(i)
u4.set('')
def submit3():
i=u5.get()+'保存成功'
global vt
vt=list(u5.get())
p.set(i)
u5.set('')
lab0 = Label(f, text=" ")
lab0.grid(row=0, column=0, padx=5, pady=5, sticky='w')
lab2 = Label(f, text="提示")
lab2.grid(row=1, column=0, padx=5, pady=5, sticky='w')
p = StringVar()
ent2 = Entry(f, textvariable=p)
ent2.grid(row=1, column=1, sticky='ew', columnspan=2)
lab1 = Label(f, text="請輸入產生式,以0結束輸入:")
lab1.grid(row=2, column=0, padx=5, pady=5, sticky='w')
u = StringVar()
ent1= Entry(f, textvariable=u)
ent1.grid(row=2, column=1, sticky='ew', columnspan=2)
button = Button(f, text="確定", command=submit, default='active',bg='green')
button.grid(row=2, column=3)
lab3= Label(f, text="輸入開始符號")
lab3.grid(row=3, column=0, padx=5, pady=5, sticky='w')
u3 = StringVar()
ent3=Entry(f, textvariable=u3)
ent3.grid(row=3, column=1, sticky='ew', columnspan=2)
button =Button(f, text="確定", command=submit1, default='active',bg='green',bd=2)
button.grid(row=3, column=3)
lab4= Label(f, text="輸入Vn")
lab4.grid(row=4, column=0, padx=5, pady=5, sticky='w')
u4 = StringVar()
ent4= Entry(f, textvariable=u4)
ent4.grid(row=4, column=1, sticky='ew', columnspan=2)
button = Button(f, text="確定", command=submit2, default='active',bg='green',bd=2)
button.grid(row=4, column=3)
lab5= Label(f, text="輸入Vt")
lab5.grid(row=5, column=0, padx=5, pady=5, sticky='w')
u5 = StringVar()
ent5=Entry(f, textvariable=u5)
ent5.grid(row=5, column=1, sticky='ew', columnspan=2)
button = Button(f, text="確定", command=submit3, default='active',bg='green',bd=2)
button.grid(row=5, column=3)
button = Button(f, text="運行程序", command=run, default='active',bg='green',bd=2)
button.grid(row=6, column=1)
button = Button(f, text="退出", command=quit, default='active',bg='green',bd=3)
button.grid(row=6, column=2)
def judge_null():#求能推出空串的非終結符
null=['*']
values=[1]*len(vn+vt+null)
dic=dict(zip(vn+vt+null,values))
dic['*']=0
for un_relation in range(5):
for i in a:
sum=0
for j in range(3,len(i)):
sum=sum+dic[i[j]]
if sum==0:
dic[i[0]]=0
return dic
def first():#求每一個非終結符的FIRST集
dic=judge_null()
global f
f=[]
for i in range(len(vn)):
f=f+[set()]
for ji in range(5):
for i in range(len(vn)):
for j in a:
if vn[i]==j[0]:
oo=0
for i1 in range(3,len(j)):
if dic[j[i1]]==0:
oo=oo+1
if oo==len(j)-3 and j[3]!='*':#若右部全部是能推出空符的非終結符
for i1 in range(3,len(j)):
f[i]=f[i]|f[vn.index(j[i1])]
f[i]=f[i]|{'*'}
else:
if j[3] in vt:
f[i].add(j[3])
elif j[3]=='*':
f[i].add('*')
else:
for i1 in range(3,len(j)):
if dic[j[i1]]==0:
if '*' in f[vn.index(j[i1])]:
f[i]=(f[vn.index(j[i1])]|f[i])-{'*'}
else:
f[i]=(f[vn.index(j[i1])]|f[i])
else:
f[i]=(f[vn.index(j[i1])]|f[i])
break
print('非終結符的FIRST集依次爲:')
print(f)
def first_chuan():#求每一個產生式右部符號串的FIRST集
global f1
dic=judge_null()
f1=[]
for i in range(len(a)):
f1=f1+[set()]
for i in a:
k=a.index(i)
oo=0
for j in range(3,len(i)):
if dic[i[j]]==0:
oo=oo+1
if oo==len(i)-3 and i[3]!='*':#若全部是能推出空符的非終結符
for j in range(3,len(i)):
f1[k]=f1[k]|f[vn.index(i[j])]
f1[k]=f1[k]|{'*'}
else:
if i[3] in vt:#若是以終結符開頭
f1[k].add(i[3])
elif i[3]=='*':#若是空符
f1[k].add('*')
else:
for j in range(3,len(i)):
if dic[i[j]]==0:
f1[k]=(f[vn.index(i[j])]|f1[k])-{'*'}
else:
f1[k]=(f[vn.index(i[j])]|f1[k])
break
print('符號串的FIRST集依次爲:')
print(f1)
def index1(li,k): #神奇勿動,求在產生式右部某元素在列表第一次出現的位置
for i in range(3,len(li)):
if li[i]==k:
return i
def follow_():#計算非終結符的FOLLOW集
dic=judge_null()
global follow
follow=[]
for i in range(len(vn)):
follow=follow+[set()]
follow[vn.index(start)]=follow[vn.index(start)]|{'#'}
for iii in range(5):
for i in range(len(vn)):
for j in a:
for k in j[3:]:
if k==vn[i]:
if index1(j,k)==len(j)-1:
follow[i]=follow[i]|follow[vn.index(j[0])]
else:
if j[index1(j,k)+1] in vt:
follow[i]=follow[i]|{j[index1(j,k)+1]}
else:
if dic[j[index1(j,k)+1]]==1:
follow[i]=(follow[i]|f[vn.index(j[index1(j,k)+1])])-{'*'}
else:
follow[i]=(follow[i]|f[vn.index(j[index1(j,k)+1])])-{'*'}
follow[i]=follow[i]|follow[vn.index(j[0])]
print('follow集依次爲:')
print(follow)
def select():
dic=judge_null()
global s
s=[]
for i in range(len(a)):
s=s+[set()]
for i in a:
k=a.index(i)
oo=0
for j in range(3,len(i)):
if dic[i[j]]==0:
oo=oo+1
if oo==len(i)-3 :#若全部是能推出空符
s[k]=(f1[k]-{'*'})|follow[vn.index(i[0])]
else:
s[k]=f1[k]
print('select集依次爲:')
print(s)
def judge(kk):#判斷文法是不是LL1文法
b=set()
global fr
zz=0
for i in range(len(a)):
for k in range(len(a)):
if a[i][0]==a[k][0] and i!=k:
b=s[i]&s[k]
if len(b)!=0:
print('不是LL(1)文法,因爲:')
print(a[i],'和',a[k],'的select集的交集不爲空')
l2=Label(fr,text='不是LL(1)文法,因爲:')
l2.grid(row=kk, column=0, padx=5, pady=0, sticky='w')
l2=Label(fr,text=(a[i],'和',a[k],'的select集的交集不爲空'))
l2.grid(row=kk+1, column=0, padx=5, pady=0, sticky='w')
return 0
def pipei(kk):#匹配字符串
global fr
if judge(kk)==0:
return 0
def submit2():
def submit5():
global fr
c=u3.get()
print(c)
c='#ii()'
c=list(c)
st=['#',start]
while True:
i=0
for k in range(len(s)):
if st[len(st)-1]==a[k][0] and c[0] in s[k]:
i=1
st.pop()
for j in range(3,len(a[k])):
st=st+[a[k][len(a[k])-j+2]]
if st[len(st)-1]=='*':
st.pop()
if st[len(st)-1]==c[0]:
if c==['#'] and st==['#']:
print('Accept')
l2=Label(ff,text='Accept')
l2.grid(row=kk+3, column=0, padx=5, pady=0, sticky='w')
return 0
c.remove(c[0])
st.pop()
if c==['#'] and st==['#']:
print('Accept')
return 0
if i==0:
print('error')
l2=Label(ff,text='匹配失敗')
l2.grid(row=kk+3, column=0, padx=5, pady=0, sticky='w')
return 0
f2=Tk()
f2.title('字符串匹配')
ff=Frame(f2)
ff.pack(padx=80, pady=80, ipadx=40)#f爲塊容器
l3.Label(ff,text='請輸入待匹配子串')
l3.grid(row=kk+1, column=0, padx=5, pady=0, sticky='w')
u3 = StringVar()
ent3= Entry(ff, textvariable=u3)
ent3.grid(row=kk+1, column=1, sticky='ew', columnspan=2)
button = tButton(ff, text="確定", command=submit5, default='active',bg='green',bd=2)
button.grid(row=kk+1, column=3)
l2=t.Button(fr,text='字符串匹配',command=submit2, default='active',bg='green',bd=2)
l2.grid(row=kk, column=1, padx=5, pady=0, sticky='w')
fr.mainloop()
def run():
top1=t.Tk()
top1.title('LL1文法運算結果')
global fr
fr=t.Frame(top1)
fr.pack(padx=80, pady=80, ipadx=40)#f爲塊容器
first()
first_chuan()
follow_()
select()
l1= Label(fr, text="非終結符FIRST集爲:")
l1.grid(row=0, column=0, padx=5, pady=5, sticky='w')
l2=Label(fr,text=f)
l2.grid(row=0, column=1, padx=5, pady=5, sticky='w')
l3= Label(fr, text="符號串FIRST集爲:")
l3.grid(row=1, column=0, padx=5, pady=5, sticky='w')
l4=Label(fr,text=f1)
l4.grid(row=1, column=1, padx=5, pady=5, sticky='w')
l1= Label(fr, text="Follow集爲:")
l1.grid(row=2, column=0, padx=5, pady=5, sticky='w')
l2=Label(fr,text=follow)
l2.grid(row=2, column=1, padx=5, pady=5, sticky='w')
l1= Label(fr, text="Select集爲:")
l1.grid(row=3, column=0, padx=5, pady=5, sticky='w')
kk=4
for i in a:
i1=i+['----------------------------------------------------------------']
l2=Label(fr,text=i1)
l2.grid(row=kk, column=1, padx=5, pady=0, sticky='w')
l2=Label(fr,text=s[kk-4])
l2.grid(row=kk, column=2, padx=0, pady=5, sticky='w')
kk=kk+1
button = Button(fr, text="退出", command=quit, default='active',bg='green',bd=5)
button.grid(row=0, column=3)
pipei(kk)
print('3333')
put_in()
a=Tk()
a.title('歡迎使用桌面小工具系統')
f=Frame(a)
f.pack(padx=80, pady=40, ipadx=20)#f爲塊容器
Button(f,text='成績管理',command=submit1).grid(row=0,column=0,padx=5,pady=10)
Button(f,text='計算器',command=submit2).grid(row=0,column=1,padx=5,pady=10)
Button(f,text='日曆',command=submit3).grid(row=0,column=2,padx=5,pady=10)
Button(f,text='日期計算',command=submit4).grid(row=0,column=3,padx=5,pady=10)
Button(f,text='備忘錄',command=submit5).grid(row=1,column=0,padx=5,pady=10)
Button(f,text='文件搜索',command=submit6).grid(row=1,column=1,padx=5,pady=10)
Button(f,text='秒錶',command=submit7).grid(row=1,column=2,padx=5,pady=10)
Button(f,text='LL1文法分析',command=submit8).grid(row=1,column=3,padx=5,pady=10)