版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
python語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)院(系、部)課程名稱python語(yǔ)言程序設(shè)計(jì)授課專業(yè)授課年級(jí)授課教師實(shí)驗(yàn)時(shí)數(shù)2089年8月填寫(xiě)要求實(shí)驗(yàn)內(nèi)容應(yīng)編制在授課計(jì)劃內(nèi);實(shí)驗(yàn)教學(xué)內(nèi)容中應(yīng)有學(xué)時(shí)分配;應(yīng)明確開(kāi)展時(shí)間;每份指導(dǎo)書(shū)要求封皮相同,內(nèi)容完整,格式不限;指導(dǎo)書(shū)必須經(jīng)由專業(yè)負(fù)責(zé)人審核,并交由系主任審核,教務(wù)辦公室留存?zhèn)浒?;教師?shí)踐指導(dǎo)時(shí)需攜帶指導(dǎo)書(shū)。學(xué)院教務(wù)辦公室第第頁(yè)共19頁(yè)實(shí)驗(yàn)名稱:編寫(xiě)學(xué)生管理系統(tǒng)【實(shí)驗(yàn)?zāi)康摹磕軌蚓唧w應(yīng)用到基本的問(wèn)題需求解決,具備基本的程序設(shè)計(jì)能力。能利用所學(xué)的知識(shí)通過(guò)編程完成項(xiàng)目的搭建?!緦?shí)驗(yàn)器具】1.計(jì)算機(jī)【實(shí)驗(yàn)項(xiàng)目】序號(hào)實(shí)驗(yàn)項(xiàng)目類型具體實(shí)驗(yàn)項(xiàng)目名稱備注1綜合性基礎(chǔ)編程內(nèi)容必做編寫(xiě)學(xué)生管理系統(tǒng)必做思考題選做【管理要求】由班長(zhǎng)和學(xué)習(xí)委員將本班學(xué)生按照每組1人.分成若干實(shí)驗(yàn)小組。在實(shí)驗(yàn)實(shí)訓(xùn)過(guò)程中,注意按時(shí)填寫(xiě)實(shí)驗(yàn)實(shí)訓(xùn)記錄表。自覺(jué)維護(hù)實(shí)驗(yàn)室衛(wèi)生?!緦?shí)驗(yàn)要求】1.提前預(yù)習(xí)實(shí)驗(yàn)指導(dǎo)書(shū)和實(shí)驗(yàn)報(bào)告的內(nèi)容,復(fù)習(xí)課程所學(xué)過(guò)的相關(guān)內(nèi)容,對(duì)于沒(méi)有理解和掌握的知識(shí)點(diǎn)做好記錄。2.帶著問(wèn)題參加實(shí)驗(yàn)活動(dòng),安靜完成實(shí)驗(yàn)過(guò)程。3.實(shí)驗(yàn)過(guò)程中積極與實(shí)驗(yàn)教學(xué)人員互動(dòng),及時(shí)解決新問(wèn)題和老問(wèn)題。4.實(shí)驗(yàn)過(guò)程中及時(shí)、正確的做好記錄。5.實(shí)驗(yàn)結(jié)束后,整理好個(gè)人物品和相關(guān)物品,保持好環(huán)境衛(wèi)生。6.按照要求完成實(shí)驗(yàn)報(bào)告。【實(shí)驗(yàn)內(nèi)容一】簡(jiǎn)單的編程練習(xí)習(xí)題練習(xí)1:編寫(xiě)一個(gè)n+1的程序,當(dāng)用戶輸入一個(gè)整數(shù)n,則輸出n+1例如:用戶輸入4,則程序輸出5#n=int(input("請(qǐng)輸入一個(gè)整數(shù):"))
#print(n+1)習(xí)題練習(xí)2:編寫(xiě)一個(gè)程序,幫助水果店實(shí)現(xiàn)計(jì)價(jià)功能,用戶輸入水果單價(jià)(元/kg)和重量(kg),計(jì)算出需要花費(fèi)的金額例:用戶輸入單價(jià)3,輸入重量2,輸出6#n1=float(input("請(qǐng)輸入水果價(jià)格:"))
#n2=float(input("請(qǐng)輸入水果的重量:"))
#print(n1*n2)
#n1=float(input("請(qǐng)輸入水果單價(jià)(元/kg):"))
#n2=float(input("請(qǐng)輸入水果的重量(kg):"))
#price=n1*n2
#print("水果的價(jià)格為:",price,"元")【實(shí)驗(yàn)內(nèi)容二】一、需求分析學(xué)生管理系統(tǒng)應(yīng)具備的功能1.添加學(xué)生及成績(jī)信息2.將學(xué)生信息保存到文件中3.修改和刪除學(xué)生信息4.查詢學(xué)生信息5.根據(jù)學(xué)生成績(jī)進(jìn)行排序6.統(tǒng)計(jì)學(xué)生的總分二、系統(tǒng)功能結(jié)構(gòu)——學(xué)生信息系統(tǒng)的7大模塊1.錄入學(xué)生信息2.查找學(xué)生信息3.刪除學(xué)生信息4.修改學(xué)生信息5.學(xué)生成績(jī)排名模塊6.統(tǒng)計(jì)學(xué)生總?cè)藬?shù)模塊7.顯示全部學(xué)生信息模塊主界面主界面信息錄入信息查詢信息輸出系統(tǒng)操作退出學(xué)生信息學(xué)號(hào)查詢班級(jí)查詢班級(jí)信息姓名查詢輸出學(xué)生成績(jī)權(quán)限修改增加用戶其他用戶登錄總體構(gòu)思其實(shí)類似這類信息管理系統(tǒng)之類的程序,核心是和數(shù)據(jù)打交道,包括增刪查改,讀取、展示、保存等。三、功能實(shí)現(xiàn)1.引入python標(biāo)準(zhǔn)圖形界面庫(kù)tkinter。fromtkinterimport*#導(dǎo)入tkinter模塊所有類root=Tk()#創(chuàng)建主窗口root.geometry('200x100')#設(shè)定root窗口的大小label=Label(root,text='這是個(gè)標(biāo)簽')#創(chuàng)建一個(gè)標(biāo)簽,第一個(gè)參數(shù)是當(dāng)前對(duì)象加入的容器,#默認(rèn)是主窗口label.pack()#標(biāo)簽用packer布局方式放入容器rootroot.mainloop()#等待響應(yīng)用戶事件要用tkinter庫(kù)實(shí)現(xiàn)圖形界面,必須先導(dǎo)入tkinter模塊,見(jiàn)第1行。主窗口只能有一個(gè),主窗口是其他所有組件的最底層容器,容器是可以嵌套的。程序可以不創(chuàng)建主窗口,系統(tǒng)會(huì)默認(rèn)創(chuàng)建。用Tk()函數(shù)創(chuàng)建主窗口,見(jiàn)代碼第2行。用組件可以創(chuàng)建組件對(duì)象,見(jiàn)代碼第4行,創(chuàng)建一個(gè)Labe組件的label,創(chuàng)建Label對(duì)象時(shí),輸入的第一個(gè)參數(shù)是指當(dāng)前組件對(duì)象的容器。,label的容器是root,如果不指定容器,默認(rèn)容器就是主窗口。其他參數(shù)用于設(shè)定對(duì)象的各個(gè)屬性。比如,text='這是個(gè)標(biāo)簽'是設(shè)定當(dāng)前標(biāo)簽對(duì)象的文本內(nèi)容是“這是個(gè)標(biāo)簽”。第6行,指定組件放入容器的布局方式,此行語(yǔ)句是指定packer布局方式。packer方式,在默認(rèn)情況下,當(dāng)前組件對(duì)象放入上個(gè)對(duì)象的下方中間位置。代碼第7行,窗口開(kāi)始循環(huán)等待用戶對(duì)圖形界面觸發(fā)事件,然后對(duì)事件進(jìn)行響應(yīng)。也可以用config函數(shù)設(shè)置或者修改組件對(duì)象的屬性,如圖。2.tkinter圖形界面布局tkinter常用組件布局方式有packer布局、grid布局、place布局,決定了組件對(duì)象以怎樣的布局方式出現(xiàn)在容器中。創(chuàng)建組件后,如果沒(méi)有指定布局方式,組件是不會(huì)顯示在容器中的。一個(gè)容器只能使用一種布局方式。1.pack幾何布局管理器代碼練習(xí)1:fromtkinterimport*label1=Label(text='標(biāo)簽1')label1.config(fg='red',bg='black')label2=Label(text='標(biāo)簽2')label2.config(fg='yellow',bg='blue')label3=Label(text='標(biāo)簽3')label3.config(fg='white',bg='green')label1.pack()label2.pack(side=BOTTOM)label3.pack(side=RIGHT)mainloop()代碼練習(xí)2:fromtkinterimport*label1=Label(text='標(biāo)簽1')label1.config(fg='red',bg='yellow')label2=Label(text='標(biāo)簽2')label2.config(fg='yellow',bg='blue')label3=Label(text='標(biāo)簽3')label3.config(fg='white',bg='green')label1.pack(anchor=NE)label2.pack(anchor=N)label3.pack(anchor=SW)mainloop()2.grid幾何布局管理器代碼練習(xí)3:fromtkinterimport*label1=Label(text='標(biāo)簽1')label1.config(fg='red',bg='yellow')label2=Label(text='標(biāo)簽2')label2.config(fg='yellow',bg='blue')label3=Label(text='標(biāo)簽3')label3.config(fg='white',bg='green')label1.grid(row=0,column=3)label2.grid(row=1,column=2)label3.grid(row=1,column=1)mainloop()代碼練習(xí)4:fromtkinterimport*label1=Label(text='標(biāo)簽1')label1.config(fg='red',bg='yellow')label2=Label(text='標(biāo)簽2')label2.config(fg='yellow',bg='blue')label3=Label(text='標(biāo)簽3')label3.config(fg='white',bg='green')label1.grid(row=0,column=3)label2.grid(row=4,column=2)label3.grid(row=4,column=1)mainloop()3.place幾何布局管理器place幾何布局管理允許指定組件的大小與位置。place的優(yōu)點(diǎn)是可以精確控制組件的位置,不足之處是改變窗口大小時(shí),子組件不能隨之靈活改變大小。代碼練習(xí)5:fromtkinterimport*label1=Label(text='標(biāo)簽1')label1.config(fg='red',bg='yellow')label2=Label(text='標(biāo)簽2')label2.config(fg='yellow',bg='blue')label3=Label(text='標(biāo)簽3')label3.config(fg='white',bg='green')label1.place(x=0,y=0)label2.place(x=50,y=50)label3.place(relx=0.5,rely=0.2)mainloop()代碼練習(xí)6:fromtkinterimport*defshowmsg():label1.config(text='我被單擊了!')label1=Label(text='這是個(gè)標(biāo)簽')label1.pack()#command參數(shù)指定單擊按鈕要執(zhí)行的函數(shù)名btn=Button(text='按鈕',command=showmsg)btn.pack()mainloop()3.完成主界面代碼fromtkinterimport*fromtkinter.messageboximportaskokcancelroot=Tk()systitle='班級(jí)信息管理系統(tǒng)'#系統(tǒng)標(biāo)題defmain():root.geometry('600x400')#設(shè)置窗口初始大小root.title(systitle)#設(shè)置系統(tǒng)標(biāo)題#創(chuàng)建系統(tǒng)菜單menubar=Menu(root)#創(chuàng)建Menu對(duì)象menubar,將作為root窗口中的菜單root.config(menu=menubar)#將menubar菜單作為root窗口的頂層菜單欄#定義menuStudent,作為menubar菜單的子菜單menuStudent=Menu(menubar,tearoff=0)#菜單menuStudent的父菜單是menubarmenuStudent.add_command(label='添加新學(xué)生',font=('宋體',10),command=addStudent)menuStudent.add_command(label='顯示全部學(xué)生信息',font=('宋體',10),command=showAllStudent)menuStudent.add_command(label='查找/修改/刪除學(xué)生信息',font=('宋體',10),command=checkUpdateStudent)menuStudent.add_separator()menuStudent.add_command(label='退出',font=('宋體',10),command=goexit)#菜單'學(xué)生管理'添加為menubar的子菜單menubar.add_cascade(label='學(xué)生管理',font=('宋體',10),menu=menuStudent)menuHelp=Menu(menubar,tearoff=0)#menuHelp將作為menubar菜單的子菜單menuHelp.add_command(label='查看日志',font=('宋體',10),command=showlog)menuHelp.add_command(label='關(guān)于...',font=('宋體',10),command=showabout)#菜單menuHelp添加為menubar的子菜單menubar.add_cascade(label='其他',font=('宋體',10),menu=menuHelp)root.mainloop()defshowAllStudent():passdefcheckUpdateStudent():passdefaddStudent():passdefgoexit():ifaskokcancel('學(xué)生信息管理系統(tǒng)','確定退出系統(tǒng)?'):exit(0)defshowlog():passdefshowabout():passif__name__=='__main__':main()圖界面圖片4.Python訪問(wèn)SQLite數(shù)據(jù)庫(kù)SQLite是Python自帶的關(guān)系數(shù)據(jù)庫(kù),不需要安裝獨(dú)立的服務(wù)器。其他的數(shù)據(jù)庫(kù)則需要自行下載并安裝,Python通過(guò)第三方擴(kuò)展口來(lái)訪問(wèn)。(1)連接和創(chuàng)建SQLite數(shù)據(jù)庫(kù)訪問(wèn)SQLite數(shù)據(jù)庫(kù)時(shí),需要先導(dǎo)入sqlite3模塊,然后調(diào)用connect()函數(shù)建立數(shù)據(jù)庫(kù)連接,獲得數(shù)據(jù)庫(kù)連接對(duì)象。例如:importsqlite3cn=sqlite3.connect(student.db')connect()函數(shù)的參數(shù)為SQLite數(shù)據(jù)庫(kù)文件名。如果指定的數(shù)據(jù)庫(kù)不存在,則用該名稱創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)。如果使用“:memory:”表示文件名,Python會(huì)創(chuàng)建一個(gè)內(nèi)存數(shù)據(jù)庫(kù)。內(nèi)存數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)均保存在內(nèi)存中,關(guān)閉連接對(duì)象的時(shí)候,所有數(shù)據(jù)自動(dòng)刪除。例如:importsqlite3cn=sqlite3.connect(“:memory:”)通過(guò)上面內(nèi)容的學(xué)習(xí),現(xiàn)在經(jīng)過(guò)拓展將新增學(xué)生這個(gè)功能進(jìn)行完成。fromtkinterimport*fromtkinter.messageboximportaskokcancel,showinfofromsqlite3import*root=Tk()systitle='班級(jí)信息管理系統(tǒng)'#系統(tǒng)標(biāo)題dbfile='student.db'#v2cn=connect(dbfile)#v2連接數(shù)據(jù)庫(kù),連接對(duì)象cnoperateFrame=Frame()#功能窗口operateFrame.pack()defmain():root.geometry('600x400')#設(shè)置窗口初始大小root.title(systitle)#設(shè)置系統(tǒng)標(biāo)題#創(chuàng)建系統(tǒng)菜單menubar=Menu(root)#創(chuàng)建Menu對(duì)象menubar,將作為root窗口中的菜單root.config(menu=menubar)#將menubar菜單作為root窗口的頂層菜單欄#menuStudent將作為menubar菜單的子菜單menuStudent=Menu(menubar,tearoff=0)menuStudent.add_command(label='添加新學(xué)生',font=('宋體',10),command=addStudent)menuStudent.add_command(label='顯示全部學(xué)生信息',font=('宋體',10),command=showAllStudent)menuStudent.add_command(label='查找/修改/刪除學(xué)生信息',font=('宋體',10),command=checkUpdateStudent)menuStudent.add_separator()menuStudent.add_command(label='退出',font=('宋體',10),command=goexit)#菜單file添加為menubar的子菜單menubar.add_cascade(label='學(xué)生管理',font=('宋體',10),menu=menuStudent)#menuSubject將作為menubar菜單的子菜單menuSubject=Menu(menubar,tearoff=0)menuSubject.add_command(label='添加新科目',font=('宋體',10),command=addSubject)menuSubject.add_command(label='顯示全部科目',font=('宋體',10),command=showAllSubject)menuSubject.add_command(label='查找/修改/刪除科目',font=('宋體',10),command=checkUpdateSubject)menubar.add_cascade(label='科目管理',font=('宋體',10),menu=menuSubject)#menuSubject將作為menubar菜單的子菜單menuScore=Menu(menubar,tearoff=0)menuScore.add_command(label='錄入成績(jī)',font=('宋體',10),command=inputScore)#下級(jí)菜單“查詢成績(jī)”--子菜單1-按照科目查詢-子菜單2-按照學(xué)號(hào)查詢menuSearch=Menu(menubar,tearoff=0)menuSearch.add_command(label='按照科目查詢',font=('宋體',10),command=searchScoreBySid)menuSearch.add_command(label='按照學(xué)號(hào)查詢',font=('宋體',10),command=searchScoreByUid)menuScore.add_cascade(label='查詢成績(jī)',font=('宋體',10),menu=menuSearch)#完成“查詢成績(jī)”下級(jí)菜單menuScore.add_command(label='成績(jī)輸出為excel表',font=('宋體',10),command=outputExcel)menubar.add_cascade(label='成績(jī)管理',font=('宋體',10),menu=menuScore)menuHelp=Menu(menubar,tearoff=0)#help將作為menubar菜單的子菜單menuHelp.add_command(label='查看日志',font=('宋體',10),command=showlog)menuHelp.add_command(label='關(guān)于...',font=('宋體',10),command=showabout)#菜單help添加為menubar的子菜單menubar.add_cascade(label='其他',font=('宋體',10),menu=menuHelp)root.mainloop()defshowAllStudent():passdefcheckUpdateStudent():passdefaddStudent():forwidgetinoperateFrame.winfo_children():#清空窗口中原有的所有內(nèi)容widget.destroy()f1=Frame(operateFrame)f1.pack()studentIdVar=StringVar()studentNameVar=StringVar()ageVar=StringVar()telVar=StringVar()lStudentId=Label(f1,text='學(xué)號(hào):')lStudentName=Label(f1,text='姓名:')lAge=Label(f1,text='年齡:')lTel=Label(f1,text='電話:')tStudentId=Entry(f1,textvariable=studentIdVar)tStudentName=Entry(f1,textvariable=studentNameVar)tAge=Entry(f1,textvariable=ageVar)tTel=Entry(f1,textvariable=telVar)lStudentId.grid(row=1,column=1)lStudentName.grid(row=2,column=1)lAge.grid(row=3,column=1)lTel.grid(row=4,column=1)tStudentId.grid(row=1,column=2)tStudentName.grid(row=2,column=2)tAge.grid(row=3,column=2)tTel.grid(row=4,column=2)f2=Frame(operateFrame)f2.pack(pady=20)bReset=Button(f2,text='重置')bSave=Button(f2,text='保存')bReset.grid(row=1,column=1)bSave.grid(row=1,column=2)defreset():studentIdVar.set('')studentNameVar.set('')ageVar.set('')telVar.set('')bReset.config(command=reset)defsave(event):try:id=studentIdVar.get()ifnotid.isdigit():raiseException('學(xué)號(hào)必須為數(shù)字!')eliflen(id)!=4:raiseException('學(xué)號(hào)必須是4位!')name=studentNameVar.get()age=ageVar.get()ifnotage.isdigit():raiseException('年齡錯(cuò)誤!')else:age=int(age)ifage<15orage>50:raiseException('年齡必須大于15小于50!')tel=telVar.get()ifnottel.isdigit():raiseException('電話錯(cuò)誤!')eliflen(tel)!=4:raiseException('電話必須4位!')#向數(shù)據(jù)庫(kù)發(fā)送插入指令cn.execute('INSERTINTOstudentVALUES(?,?,?,?)',(id,name,age,tel))mit()showinfo(systitle,'成功添加新學(xué)生!')reset()tStudentId.focus()#測(cè)試:向數(shù)據(jù)庫(kù)發(fā)一個(gè)查詢指令#獲得了一個(gè)列表,列表中每個(gè)單元是一個(gè)學(xué)生,每個(gè)學(xué)生是一個(gè)元組#stulist=cn.execute('SELECT*FROMstudent').fetchall()#print(stulist)exceptExceptionasex:showinfo(systitle,ex)bSave.config(command=save)tTel.bind('<Return>',save)defaddSubject():passdefshowAllSubject():passdefcheckUpdateSubject():passdefinputScore():passdefsearchScoreBySid():passdefsearchScoreByUid():passdefoutputExcel():passdefgoexit():ifaskokcancel('學(xué)生信息管理系統(tǒng)','確定退出系統(tǒng)?'):exit(0)defshowlog():passdefshowabout():passif__name__=='__main__':main()6顯示所有學(xué)生defshowAllStudent():#v3forwidgetinoperateFrame.winfo_children():#清空窗口中原有的所有內(nèi)容widget.destroy()operateFrame.columnconfigure(1,minsize=50)operateFrame.columnconfigure(2,minsize=100)operateFrame.columnconfigure(3,minsize=50)operateFrame.columnconfigure(4,minsize=100)Label(operateFrame,text='學(xué)號(hào)',font=('宋體',10,'bold')).grid(row=0,column=1)Label(operateFrame,text='姓名',font=('宋體',10,'bold')).grid(row=0,column=2)Label(operateFrame,text='年齡',font=('宋體',10,'bold')).grid(row=0,column=3)Label(operateFrame,text='電話',font=('宋體',10,'bold')).grid(row=0,column=4)stulist=cn.execute('select*fromstudent').fetchall()rownum=1forstuinstulist:colnum=1forinfoinstu:Label(operateFrame,text=str(info),font=('宋體',10)).grid(row=rownum,column=colnum)colnum+=1rownum+=1查找刪除修改學(xué)生defcheckUpdateStudent():#v4forwidgetinoperateFrame.winfo_children():#清空窗口中原有的所有內(nèi)容widget.destroy()f1=LabelFrame(operateFrame,text='查找學(xué)生:')f1.pack()studentIdToSearchVar=StringVar()Label(f1,text='請(qǐng)輸入要查找的學(xué)生學(xué)號(hào):').grid(row=1,column=1)tStudentIdToSearch=Entry(f1,textvariable=studentIdToSearchVar)tStudentIdToSearch.grid(row=1,column=2)bSearch=Button(f1,text='查詢')bSearch.grid(row=1,column=3)f2=LabelFrame(operateFrame,text='刪除與修改學(xué)生:')f2.pack(pady=30)fDelete=Frame(f2)fDelete.pack()bDelete=Button(fDelete,text='刪除學(xué)生',state=DISABLED)bDelete.pack()fUpdate=Frame(f2)fUpdate.pack()studentIdVar=StringVar()studentNameVar=StringVar()ageVar=StringVar()telVar=StringVar()Label(fUpdate,text='學(xué)號(hào):').grid(row=1,column=1)Label(fUpdate,text='姓名:').grid(row=2,column=1)Label(fUpdate,text='年齡:').grid(row=3,column=1)Label(fUpdate,text='電話:').grid(row=4,column=1)Entry(fUpdate,textvariable=studentIdVar,state=DISABLED).grid(row=1,column=2)Entry(fUpdate,textvariable=studentNameVar).grid(row=2,column=2)Entry(fUpdate,textvariable=ageVar).grid(row=3,column=2)Entry(fUpdate,textvariable=telVar).grid(row=4,column=2)bSave=Button(fUpdate,text='保存修改',state=DISABLED)bSave.grid(row=4,column=3)defsearch(event=None):studentIdVar.set('')studentNameVar.set('')ageVar.set('')telVar.set('')studentIdToSearch=studentIdToSearchVar.get()stu=cn.execute('SELECTsid,sname,age,telFROMstudentWHEREsid=?',(studentIdToSearch,)).fetchone()print(stu)ifstu==None:showinfo(systitle,'該學(xué)生不存在')bSave.config(state=DISABLED)bDelete.config(state=DISABLED)else:studentIdVar.set(stu[0])studentNameVar.set(stu[1])ageVar.set(stu[2])telVar.set(stu[3])bDelete.config(state=NORMAL)bSave.config(state=NORMAL)bSearch.config(command=search)tStudentIdToSearch.bind("<Return>",search)defdelete():cn.execute('DELETEFROMstudentWHEREsid=?',(studentIdVar.get(),))mit()showinfo(systitle,'成功刪除!')studentIdVar.set('')studentNameVar.set('')ageVar.set('')telVar.set('')bDelete.config(command=delete)defsave():cn.execute('UPDATEstudentSETsname=?,age=?,tel=?WHEREsid=?',(studentNameVar.get(),ageVar.get(),telVar.get(),studentIdVar.get()))mit()showinfo(systitle,'成功修改!')bSave.config(command=save)成績(jī)錄入#v6成績(jī)管理definputScore():forwidgetinoperateFrame.winfo_children():#清空窗口中原有的所有內(nèi)容widget.destroy()f1=Frame(operateFrame)f1.pack()Label(f1,text='科目名稱:').grid(row=1,column=1)subjectNameVar=StringVar()comboxSubjectName=Combobox(f1,textvariable=subjectNameVar)comboxSubjectName.grid(row=1,column=2)bSave=Button(f1,text='保存成績(jī)')bSave.grid(row=1,column=3)subjectList=cn.execute('SELECTcid,cnameFROMcourse').fetchall()subjectNameList=[]forsubinsubjectList:subjectNameList.append(sub[1])comboxSubjectName["values"]=subjectNameListcomboxSubjectName.current(0)f2=Frame(operateFrame)f2.pack()Label(f2,text='學(xué)號(hào)',width=10).grid(row=1,column=1)Label(f2,text='姓名',width=10).grid(row=1,column=2)Label(f2,text='成績(jī)',width=10).grid(row=1,column=3)f3=Frame(operateFrame)#輸入成績(jī)的內(nèi)容窗口f3.pack()defgo(*args):#處理事件,*args表示可變參數(shù)forwidgetinf3.winfo_children():#清空輸入成績(jī)的內(nèi)容窗口widget.destroy()scoreVarList=[]studentList=cn.execute('SELECTsid,snameFROMstudentORDERBYsid').fetchall()r=2forstuinstudentList:Label(f3,text=stu[0],width=10).grid(row=r,column=1)Label(f3,text=stu[1],width=10).grid(row=r,column=2)#當(dāng)前科目,每個(gè)學(xué)生對(duì)應(yīng)一個(gè)輸入成績(jī)的文本框#每個(gè)成績(jī)文本框?qū)?yīng)的控制變量,依次構(gòu)成列表scoreVarListscoreVar=StringVar()scoreVarList.append(scoreVar)Entry(f3,textvariable=scoreVar,width=10).grid(row=r,column=3)r+=1#取到當(dāng)前科目名稱對(duì)應(yīng)的編號(hào)subjectNameChosed=subjectNameVar.get()forsubinsubjectList:ifsub[1]==subjectNameChosed:subjectIdChosed=sub[0]#把當(dāng)前科目之前已經(jīng)錄入的成績(jī)顯示出來(lái)scoreExistList=cn.execute('SELECTsid,gradeFROMscoreWHEREcid=?',(subjectIdChosed,)).fetchall()forstu,scoreVarinzip(studentList,scoreVarList):forsinscoreExistList:ifstu[0]==s[0]:scoreVar.set(s[1])defsave():#保存成績(jī):學(xué)號(hào)、科目編號(hào)、成績(jī)#先清空當(dāng)前科目的所有成績(jī)cn.execute('DELETEFROMscoreWHEREcid=?',(subjectIdChosed,))mit()forstu,gradeinzip(studentList,scoreVarList):s=grade.get().strip()ifs.isdigit():s=int(s)ifs>=0ands<=100:cn.execute('INSERTINTOscoreVALUES(?,?,?)',(stu[0],subjectIdChosed,s))else:showinfo(systitle,'成績(jī)必須在0-100之間')elifs!='':showinfo(systitle,'成績(jī)不合理!')mit()#測(cè)試#scoreList=cn.execute('SELECT*FROMscore').fetchall()#print(scoreList)bSave.config(command=save)comboxSubjectName.bind("<<ComboboxSelected>>",go)#綁定事件成績(jī)查詢#v7成績(jī)查詢defsearchScoreBySid():#按科目編號(hào)查詢forwidgetinoperateFrame.winfo_children():#清空窗口中原有的所有內(nèi)容widget.destroy()f1=Frame(operateFrame)f1.pack()subjectNameToSearchVar=StringVar()Label(f1,text="科目名稱").grid(row=1,column=1)comboxSubjectNameToSearch=Combobox(f1,textvariable=subjectNameToSearchVar)comboxSubjectNameToSearch.grid(row=1,column=2)subjectList=cn.execute('SELECTcid,cnameFROMcourse').fetchall()subjectNameList=[]forsubinsubjectList:subjectNameList.append(sub[1])comboxSubjectNameToSearch['values']=subjectNameListf2=Frame(operateFrame)f2.pack()Label(f2,text='學(xué)號(hào)',width=20).grid(row=1,column=1)Label(f2,text='姓名',width=20).grid(row=1,column=2)Label(f2,text='科目名稱',width=20).grid(row=1,column=3)Label(f2,text='成績(jī)',width=20).grid(row=1,column=4)f3=Frame(operateFrame)f3.pack()defsearch(*args):forwidgetinf3.winfo_children():#清空f(shuō)3窗口中原有的所有內(nèi)容widget.destroy()subjectNameToSearch=subjectNameToSearchVar.get()forsubinsubjectList:ifsub[1]==subjectNameToSearch:subjectIdToSearch=sub[0]sc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度某汽車制造商與某電池供應(yīng)商關(guān)于新能源汽車電池供應(yīng)的合同
- 2024年幼兒園家長(zhǎng)會(huì)計(jì)劃(31篇)
- 2024年建筑設(shè)備租賃及安裝合同
- 2024年房屋租賃合同標(biāo)的房產(chǎn)為市區(qū)20平方米住宅
- 2024年度工廠安全生產(chǎn)安防監(jiān)控合同
- 2024年新建醫(yī)院醫(yī)療設(shè)備采購(gòu)安裝合同
- 電梯公司維???jī)效考核方案
- 2024填塘渣工程現(xiàn)場(chǎng)施工人員管理合同
- 《基于RDF流的復(fù)雜事件處理方法研究與應(yīng)用》
- 采購(gòu)的年度總結(jié)范文(3篇)
- 婦產(chǎn)科護(hù)士晉升述職報(bào)告
- 骨髓腔內(nèi)輸液(IOI)技術(shù)
- 建筑幕墻工程(鋁板、玻璃、石材)監(jiān)理實(shí)施細(xì)則(全面版)
- 小學(xué)數(shù)學(xué)與思政融合課教學(xué)設(shè)計(jì)
- 體育公園運(yùn)營(yíng)管理方案
- 休閑生態(tài)農(nóng)業(yè)觀光園建設(shè)項(xiàng)目財(cái)務(wù)分析及效益評(píng)價(jià)
- 江西省南昌市民德學(xué)校2023-2024學(xué)年八年級(jí)上學(xué)期期中數(shù)學(xué)試題
- 國(guó)際金融(英文版)智慧樹(shù)知到期末考試答案2024年
- 2024年《藥物臨床試驗(yàn)質(zhì)量管理規(guī)范》(GCP)網(wǎng)絡(luò)培訓(xùn)題庫(kù)
- 遼寧省名校聯(lián)盟2024屆高三下學(xué)期3月份聯(lián)合考試化學(xué)
- 2023年度學(xué)校食堂每月食品安全調(diào)度會(huì)議紀(jì)要
評(píng)論
0/150
提交評(píng)論