計(jì)算機(jī)語言Java課程設(shè)計(jì)學(xué)籍管理系統(tǒng)_第1頁
計(jì)算機(jī)語言Java課程設(shè)計(jì)學(xué)籍管理系統(tǒng)_第2頁
計(jì)算機(jī)語言Java課程設(shè)計(jì)學(xué)籍管理系統(tǒng)_第3頁
計(jì)算機(jī)語言Java課程設(shè)計(jì)學(xué)籍管理系統(tǒng)_第4頁
計(jì)算機(jī)語言Java課程設(shè)計(jì)學(xué)籍管理系統(tǒng)_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、課程設(shè)計(jì)說明書名稱 計(jì)算機(jī)語言java課程設(shè)計(jì) 學(xué)籍管理系統(tǒng) 2011年 6月20日至 2011年 6月26日共 1 周院 系 計(jì)算機(jī)工程系 班 級 10軟件技術(shù)(外包)1班 姓 名 系主任 教研室主任 指導(dǎo)教師 目錄:1 系統(tǒng)概述11.2流程圖11.2 系統(tǒng)開發(fā)工具與環(huán)境22 系統(tǒng)設(shè)計(jì)22.1 系統(tǒng)概要設(shè)計(jì)22.2統(tǒng)詳細(xì)設(shè)計(jì)33系統(tǒng)的調(diào)試174課程設(shè)計(jì)心得185 參考文獻(xiàn)191 系統(tǒng)概述1.1 系統(tǒng)功能1學(xué)籍管理系統(tǒng)主界面模塊managerwindow類負(fù)責(zé)創(chuàng)建學(xué)籍管理系統(tǒng)的主窗口,該類含有main方法,程序從該類開始執(zhí)行。managerwindow類的成員變量中有4種重要類型的對象:inp

2、utstudent,inquest,modifysitation和delete對象。managerwindow類的主要成員的作用將在后面詳細(xì)闡述,managerwindow類創(chuàng)建的窗口及其中的主要對象2學(xué)籍管理系統(tǒng)student模塊student類所創(chuàng)建的對象是inputstudent類的成員之一,負(fù)責(zé)封裝學(xué)生的基本信息。3學(xué)籍管理系統(tǒng)studentpicture模塊studentpicture類所創(chuàng)建inputstudent,inquest,deletemodifysitation類的成員變量之一,負(fù)責(zé)顯示學(xué)生的照片。4學(xué)籍管理系統(tǒng)inputstudent模塊inputstudent類創(chuàng)建的

3、對象是managerwindow類的重要成員之一,負(fù)責(zé)提供錄入學(xué)生基本信息的界面5學(xué)籍管理系統(tǒng)inquest模塊 inquest類創(chuàng)建的對象是managerwindow類的重要成員之一,負(fù)責(zé)提供查詢學(xué)生基本信息及打印基本信息的界面。6學(xué)籍管理系統(tǒng)modifsituation模塊 modifsituation類創(chuàng)建的對象是managerwindow類的要成員之一,負(fù)責(zé)提供修改學(xué)生基本信息的界面。7學(xué)籍管理系統(tǒng)delete模塊delete類創(chuàng)建的對象是managerwindow類的重要成員之一,負(fù)責(zé)提供刪除學(xué)生基本信息的界面1.2流程圖啟動(dòng)程序?qū)W生信息錄入系統(tǒng)主界面學(xué)生信息查詢學(xué)生信息修改學(xué)生信息

4、刪除顯示學(xué)生照片學(xué)生信息封裝退出系統(tǒng)1.2 系統(tǒng)開發(fā)工具與環(huán)境開發(fā)工具 eclipse 軟件環(huán)境 開發(fā)語言:java、j2se 操作系統(tǒng):windows xp硬件方面: 處理器:intel pentium 166mx 或更高。 內(nèi)存:512m以上。 硬盤空間:200m以上。2 系統(tǒng)設(shè)計(jì)2.1 系統(tǒng)概要設(shè)計(jì)1錄入學(xué)生基本信息功能的界面。用戶可以通過菜單選項(xiàng)讓程序呈現(xiàn)錄入學(xué)生基本信息功能的界面,通過該界面可以錄入學(xué)生的學(xué)號,姓名,性別,出生日期,專業(yè)和照片等信息。2修改學(xué)生基本信息的功能界面。用戶可以通過菜單選項(xiàng)讓程序呈現(xiàn)“修改學(xué)生基本信息”功能的界面,通過該界面可以對已錄入的學(xué)生信息進(jìn)行修改。3

5、查詢與打印學(xué)生基本信息功能的界面,用戶可以通過菜單選項(xiàng)讓程序呈現(xiàn)出“查詢與打印學(xué)生基本信息”功能的界面,通過該界面可以對以錄入的學(xué)生信息進(jìn)行查詢和打印。4刪除學(xué)生基本信息功能的界面。用戶可以通過菜單選項(xiàng)讓程序呈現(xiàn)“刪除學(xué)生基本信息”功能的界面,通過該界面可以刪除已錄入的學(xué)生信息。2.2統(tǒng)詳細(xì)設(shè)計(jì)2.2.1 managerwindow類 該類是javax.swing包中的一個(gè)子類,并實(shí)現(xiàn)了actionlistener接口,標(biāo)明該類的主要成員變量和方法的uml圖如圖4-1所示1)成員變量基本信息錄入是inputstudent對象,負(fù)責(zé)提供錄入信息的界面。基本信息修改時(shí)modifysituation

6、對象,負(fù)責(zé)提供修改信息的界面?;拘畔⒉樵兣c打印時(shí)inquest對象,負(fù)責(zé)提供查詢與打印信息的界面?;拘畔h除時(shí)hashmap創(chuàng)建的散列映射,用于存儲(chǔ)鍵。file是file文件對象,程序?qū)⒒拘畔⑸⒘杏成鋵懭朐撐募?。錄入,修改,查詢,刪除,歡迎界面是jmenuitem創(chuàng)建的菜單項(xiàng)。2)方法managerwindow()是構(gòu)造方法,負(fù)責(zé)完成窗口的初始化。actionperformed(actionevent)方法是managerwindow類實(shí)現(xiàn)的actionlistener接口中的方法main方法是程序運(yùn)行的入口方法public class managerwindow extends jf

7、rame implements actionlistener inputstudent 基本信息錄入; modifysituation 基本信息修改; inquest 基本信息查詢與打印; delete 基本信息刪除; jmenubar bar; jmenu filemenu; jmenuitem 錄入,修改,查詢與打印,刪除,歡迎界面; hashmap 基本信息=null; file file=null; cardlayout card=null; jlabel label=null; jpanel pcenter; public managerwindow() 錄入=new jmenuit

8、em(錄入學(xué)生基本信息); 修改=new jmenuitem(修改學(xué)生基本信息); 查詢與打印=new jmenuitem(查詢與打印學(xué)生基本信息); 刪除=new jmenuitem(刪除學(xué)生基本信息); 歡迎界面=new jmenuitem(歡迎界面); bar=new jmenubar(); filemenu=new jmenu(菜單選項(xiàng)); filemenu.add(錄入); filemenu.add(修改); filemenu.add(查詢與打印); filemenu.add(刪除); filemenu.add(歡迎界面); bar.add(filemenu); setjmenuba

9、r(bar); label=new jlabel(學(xué)籍管理系統(tǒng),jlabel.center); label.seticon(new imageicon(welcome.jpg); label.setfont(new font(隸書,font.bold,36); label.sethorizontaltextposition(swingconstants.center); label.setforeground(color.red); 基本信息=new hashmap(); 錄入.addactionlistener(this); 修改.addactionlistener(this); 查詢與打印

10、.addactionlistener(this); 刪除.addactionlistener(this); 歡迎界面.addactionlistener(this); card=new cardlayout(); pcenter=new jpanel(); pcenter.setlayout(card); file=new file(基本信息.txt); if(!file.exists() try fileoutputstream out=new fileoutputstream(file); objectoutputstream objectout=new objectoutputstrea

11、m(out); objectout.writeobject(基本信息); objectout.close(); out.close(); catch(ioexception e) 基本信息錄入=new inputstudent(file); 基本信息修改=new modifysituation(file); 基本信息查詢與打印=new inquest(file); 基本信息刪除=new delete(file); pcenter.add(歡迎界面,label); pcenter.add(錄入界面,基本信息錄入); pcenter.add(修改界面,基本信息修改); pcenter.add(刪除

12、界面,基本信息刪除); add(pcenter,borderlayout.center); validate(); setvisible(true); setbounds(100,50,460,280); setdefaultcloseoperation(jframe.do_nothing_on_close); addwindowlistener(new windowadapter() public void windowclosing(windowevent e) int n=joptionpane.showconfirmdialog(null,確認(rèn)退出嗎?,確認(rèn)對話框, joptionpa

13、ne.yes_no_option ); if(n=joptionpane.yes_option) system.exit(0); ); validate(); public void actionperformed(actionevent e) if(e.getsource()=錄入) 基本信息錄入.clearmess(); card.show(pcenter,錄入界面); else if(e.getsource()=修改) 基本信息修改.clearmess(); card.show(pcenter,修改界面); else if(e.getsource()=查詢與打印) 基本信息查詢與打印.c

14、learmess(); 基本信息查詢與打印.setlocation(getbounds().x+getbounds().width,getbounds().y); 基本信息查詢與打印.setvisible(true); else if(e.getsource()=刪除) card.show(pcenter,刪除界面); else if(e.getsource()=歡迎界面) card.show(pcenter,歡迎界面); public static void main(string args) new managerwindow(); 運(yùn)行效果如下圖所示:.2.2.2 student類 創(chuàng)建

15、的類對象“學(xué)生”是inputstudent的重要成員之一,負(fù)責(zé)處理和學(xué)生有關(guān)的數(shù)據(jù)。標(biāo)明student類的主要成員變量和方法以及inputstudent類之間的組合1)成員變量number,name,discipling,grade,borth和sex是string對象,他們的值分別表示學(xué)生的學(xué)號,姓名,專業(yè),年級,出生日期,性別。imagepic是file對象,用來存放學(xué)生的照片圖像的引用。2)方法setnumber(string)和getnumber()方法分別用來設(shè)置number和獲取number。setimagepic和getimagepic()方法分別用來設(shè)置imagepic和獲取它

16、的值。源代碼:public class student implements serializable string number,name,discipling,grade,borth,sex; file imagepic; public void setnumber(string number) this.number=number; public string getnumber() return number; public void setname(string name) =name; public string getname() return name; pu

17、blic void setdiscipling(string discipling) this.discipling=discipling; public string getdisciping() return discipling; public void setgrade(string grade) this.grade=grade; public string getgrade() return grade; public void setborth(string borth) this.borth=borth; public string getborth() return bort

18、h; public void setsex(string sex) this.sex=sex; public string getsex() return sex; public void setimagepic(file image) imagepic=image; public file getimagepic() return imagepic; 運(yùn)行效果如下圖所示:2.2.3 inputstudent類inputstudent類是javax.swing包中jpanel容器的子類,并實(shí)現(xiàn)了actionlistener接口,所創(chuàng)建的對象,基本信息錄入是managerwiodow類中的最重要

19、成員之一,負(fù)責(zé)提供錄入學(xué)生信息的界面。表明inputstudent類的主要成員變量,方法和managerwindow類組合關(guān)系1)成員變量學(xué)生是student創(chuàng)建的對象,該對象含有核學(xué)生有關(guān)的數(shù)據(jù)。pic是studentpicture創(chuàng)建的對象,負(fù)責(zé)繪制學(xué)生的照片。錄入,重置和選擇照片是jbutton創(chuàng)建的對象,這些按鈕都將當(dāng)前容器注冊為自己的actionevent事件監(jiān)視器。2)方法inputstudent(file)是構(gòu)造方法,用來創(chuàng)建基本信息錄入對象,當(dāng)創(chuàng)建對象時(shí),通過該構(gòu)造方法的參數(shù)將managerwindow類中的file的引用傳遞給systemfile.actionperforme

20、d(actionevent)方法是inputstudent類實(shí)現(xiàn)接口中的方法。inputstdent創(chuàng)建的容器是錄入,重置,選擇照片按鈕時(shí),容器將執(zhí)行action performed(actionevent)方法進(jìn)行相應(yīng)的操作。運(yùn)行效果如下圖所示:源代碼:public class inputstudent extends jpanel implements actionlistener student 學(xué)生=null; studentpicture pic; hashmap 基本信息表=null; jtextfield 學(xué)號,姓名,年級,出生; jbutton 選擇照片; jcombobox

21、專業(yè); jradiobutton 男,女; buttongroup group=null; jbutton 錄入,重置; fileinputstream inone=null; objectinputstream intwo=null; fileoutputstream outone=null; objectoutputstream outtwo=null; file systemfile,imagepic; public inputstudent(file file) systemfile=file; pic=new studentpicture(); 學(xué)號=new jtextfield(5

22、); 姓名=new jtextfield(5); 專業(yè)=new jcombobox(); try filereader inone=new filereader(專業(yè).txt); bufferedreader intwo= new bufferedreader(inone); string s=null; int i=0; while(s=intwo.readline()!=null) 專業(yè).additem(s); inone.close(); intwo.close(); catch(ioexception exp) 專業(yè).additem(數(shù)學(xué)); 專業(yè).additem(計(jì)算機(jī)科學(xué)與技術(shù));

23、 年級=new jtextfield(5); 出生=new jtextfield(5); 選擇照片=new jbutton(選擇); group=new buttongroup(); 男=new jradiobutton(男,true); 女=new jradiobutton(女,false); group.add(男); group.add(女); 錄入=new jbutton(錄入); 重置=new jbutton(重置); 錄入.addactionlistener(this); 選擇照片.addactionlistener(this); 重置.addactionlistener(this

24、); box box1=box.createhorizontalbox(); box1.add(new jlabel(學(xué)號:,jlabel.center); box1.add(學(xué)號); box box2=box.createhorizontalbox(); box2.add(new jlabel(姓名:,jlabel.center); box2.add(姓名); box box3=box.createhorizontalbox(); box3.add(new jlabel(性別:,jlabel.center); box3.add(男); box3.add(女); box box4=box.cr

25、eatehorizontalbox(); box4.add(new jlabel(專業(yè):,jlabel.center); box4.add(專業(yè)); box box5=box.createhorizontalbox(); box5.add(new jlabel(年級:,jlabel.center); box5.add(年級); box box6=box.createhorizontalbox(); box6.add(new jlabel(出生:,jlabel.center); box6.add(出生); box boxh=box.createverticalbox(); boxh.add(bo

26、x1); boxh.add(box2); boxh.add(box3); boxh.add(box4); boxh.add(box5); boxh.add(box6); boxh.add(box.createverticalglue(); jpanel picpanel=new jpanel(); picpanel.setbackground(color.green); picpanel.add(new jlabel(選擇照片:,jlabel.center); picpanel.add(選擇照片); jpanel putbutton=new jpanel(); putbutton.add(錄入

27、); putbutton.add(重置); jpanel messpanel=new jpanel(); messpanel.add(boxh); messpanel.setbackground(color.cyan); putbutton.setbackground(color.red); setlayout(new borderlayout(); jsplitpane splitv= new jsplitpane(jsplitpane.vertical_split,picpanel,pic); jsplitpane splith=new jsplitpane(jsplitpane.hori

28、zontal_split,messpanel,splitv); add(splith,borderlayout.center); add(putbutton,borderlayout.south); validate(); public void actionperformed(actionevent e) if(e.getsource()=錄入) string number=; number=學(xué)號.gettext(); if(number.length()0) try inone=new fileinputstream(systemfile); intwo=new objectinputst

29、ream(inone); 基本信息表=(hashmap)intwo.readobject(); inone.close(); intwo.close(); catch(exception ee) if(基本信息表.containskey(number) string warning=該生基本信息已存在,請到修改頁面修改!; joptionpane.showmessagedialog(this,warning,警告, joptionpane.warning_message); else string m=基本信息將被錄入!; int ok=joptionpane.showconfirmdialo

30、g(this,m,確認(rèn), joptionpane.yes_no_option,joptionpane.information_message); if(ok=joptionpane.yes_option) string name=姓名.gettext(); string discipling=(string)專業(yè).getselecteditem(); string grade=年級.gettext(); string borth=出生.gettext(); string sex=null; if(男.isselected() sex=男.gettext(); else sex=女.gettex

31、t(); 學(xué)生=new student(); 學(xué)生.setnumber(number); 學(xué)生.setname(name); 學(xué)生.setdiscipling(discipling); 學(xué)生.setgrade(grade); 學(xué)生.setborth(borth); 學(xué)生.setsex(sex); 學(xué)生.setimagepic(imagepic); try outone=new fileoutputstream(systemfile); outtwo=new objectoutputstream(outone); 基本信息表.put(number,學(xué)生); outtwo.writeobject(

32、基本信息表); outtwo.close(); outone.close(); clearmess(); catch(exception ee) else string warning=必須要輸入學(xué)號!; joptionpane.showmessagedialog(this,warning,警告,joptionpane.warning_message); else if(e.getsource()=選擇照片) jfilechooser chooser=new jfilechooser(); filenameextensionfilter filter = new filenameextensi

33、onfilter( jpg & gif images, jpg, gif); chooser.setfilefilter(filter); int state=chooser.showopendialog(null); file choicefile=chooser.getselectedfile(); if(choicefile!=null&state=jfilechooser.approve_option) 選擇照片.settext(choicefile.getname(); imagepic=choicefile; pic.setimage(imagepic); pic.repaint(

34、); else if(e.getsource()=重置) clearmess(); public void clearmess() 學(xué)號.settext(null); 姓名.settext(null); 年級.settext(null); 出生.settext(null); 選擇照片.settext(選擇); imagepic=null; pic.setimage(imagepic); pic.repaint(); 2.2.4 modifysituation類 modifysituation類是javax.swing包中jpanel容器的子類,并實(shí)現(xiàn)了actionlistener接口,所創(chuàng)建的

35、對象:基本信息查詢時(shí)managerwindow類中最重要的成員之一,負(fù)責(zé)提供修改學(xué)生信息的界面。標(biāo)明modifysituation類的主要成員變量,方法以及和managerwindow類之間組合關(guān)系。1)成員變量pic是studentpicture創(chuàng)建的對象,負(fù)責(zé)繪制學(xué)生的照片。錄入,重置和選擇照片是jbutton創(chuàng)建的對象,這些按鈕都將當(dāng)前容器注冊為自己的actionevent事件監(jiān)視器.actionperformed(actionevent)方法是inputstudent類實(shí)現(xiàn)actionlistener接口中的方法。inquest創(chuàng)建的對話框時(shí)查詢,打印文本照片,打印文本和打印照片按鈕的

36、actionevent事件監(jiān)視器,當(dāng)用戶單擊某個(gè)按鈕時(shí),對話框?qū)?zhí)行actionperformed(actionevent)方法進(jìn)行相應(yīng)的操作。2)方法 modifysituation(file)是構(gòu)造方法,用來創(chuàng)建基本信息修改對象,當(dāng)創(chuàng)建該對象時(shí),通過該構(gòu)造方法的參數(shù)將managerwindow類中的file的引用傳遞給systemfile. actionperformed(actionevent)方法是inputstudent類實(shí)現(xiàn)的actionlistener接口中的方法。inputstudent創(chuàng)建的容器時(shí)開始修改,錄入修改,重置,選擇照片按鈕的actionperformed(acti

37、onevent)方法進(jìn)行相應(yīng)的操作。運(yùn)行效果如下圖所示:2.2.5 delete類 delete類是javax.swing包中jpanel容器的子類,并實(shí)現(xiàn)了actionlisten接口,所創(chuàng)建的對象:基本信息刪除是managerwindow類中最重要的成員之一,負(fù)責(zé)提供刪除學(xué)生信息的界面。標(biāo)明delete類的主要成員變量,方法以及和 managerwindow類之間組合關(guān)系1)成員變量 基本信息表是hashmap創(chuàng)建的散列映射,用于存儲(chǔ)鍵值數(shù)據(jù)對,其中的鍵必須是一個(gè)string對象,鍵對應(yīng)的值必須是student對象。程序?qū)膕ystemfile文件中讀出曾寫入到該文件中的hashmap對象

38、,并且將這個(gè)對象的引用賦給基本信息表。刪除是jbutton創(chuàng)建的對象,該按鈕將當(dāng)前容器注冊為自己的actionevent事件監(jiān)視器。systemfile和imagepic是file聲明的對象,其中systemfile存放的件引用managerwindow類中的file相同。2)方法delete是構(gòu)造方法,用來創(chuàng)建基本信息刪除對象,當(dāng)創(chuàng)建對象時(shí),通過該構(gòu)造方法的參數(shù)將managerwindow類中的file的引用傳遞給system.actionperformed(actionevent)方法是inputstudent類實(shí)現(xiàn)actionlistener接口中的方法。inquest創(chuàng)建的對話框時(shí)查詢

39、,打印文本照片,打印文本和打印照片按鈕的actionevent事件監(jiān)視器,當(dāng)用戶單擊某個(gè)按鈕時(shí),對話框?qū)?zhí)行actionperformed(actionevent)方法進(jìn)行相應(yīng)的操作。運(yùn)行效果如下圖所示:源代碼:public class delete extends jpanel implements actionlistener hashmap 基本信息表=null; jtextfield 學(xué)號,姓名,專業(yè),年級,出生; jradiobutton 男,女; jbutton 刪除; buttongroup group=null; fileinputstream inone=null; obje

40、ctinputstream intwo=null; fileoutputstream outone=null; objectoutputstream outtwo=null; file systemfile=null; public delete(file file) systemfile=file; 學(xué)號=new jtextfield(10); 刪除=new jbutton(刪除); 學(xué)號.addactionlistener(this); 刪除.addactionlistener(this); 姓名=new jtextfield(10); 姓名.seteditable(false); 專業(yè)=

41、new jtextfield(10); 專業(yè).seteditable(false); 年級=new jtextfield(10); 年級.seteditable(false); 出生=new jtextfield(10); 出生.seteditable(false); 男=new jradiobutton(男,false); 女=new jradiobutton(女,false); group=new buttongroup(); group.add(男); group.add(女); box box1=box.createhorizontalbox(); box1.add(new jlabe

42、l(輸入要?jiǎng)h除的學(xué)號:,jlabel.center); box1.add(學(xué)號); box1.add(刪除); box box2=box.createhorizontalbox(); box2.add(new jlabel(姓名:,jlabel.center); box2.add(姓名); box box3=box.createhorizontalbox(); box3.add(new jlabel(性別:,jlabel.center); box3.add(男); box3.add(女); box box4=box.createhorizontalbox(); box4.add(new jla

43、bel(專業(yè):,jlabel.center); box4.add(專業(yè)); box box5=box.createhorizontalbox(); box5.add(new jlabel(年級:,jlabel.center); box5.add(年級); box box6=box.createhorizontalbox(); box6.add(new jlabel(出生:,jlabel.center); box6.add(出生); box boxh=box.createverticalbox(); boxh.add(box1); boxh.add(box2); boxh.add(box3); boxh.add(box4); boxh.add(box5); boxh.a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論