【課程設計報告】基于JAVA GUI的投票管理系統的設計與實現
《【課程設計報告】基于JAVA GUI的投票管理系統的設計與實現》由會員分享,可在線閱讀,更多相關《【課程設計報告】基于JAVA GUI的投票管理系統的設計與實現(25頁珍藏版)》請在裝配圖網上搜索。
1、更多計算機類課程設計、畢業(yè)設計、論文請訪問: 課程設計(論文)任務書 軟 件 學 院 學 院 09軟件工程+會計學 專 業(yè) 2 班 一、課程設計(論文)題目 簡單投票管理系統(小應用程序Applet) 二、課程設計(論文)工作自 2010 年 12 月 20 日起至 2010 年 12 月 24 日止。 三、課程設計(論文) 地點: 軟 件 學 院 實 訓 中 心 四、課程設計(論文)內容要求: 1.本課程設計的目的
2、 (1)掌握Java語言的程序設計方法; (2)理論聯系實際,進一步提高學生的軟件開發(fā)技術; (3)培養(yǎng)學生分析、解決問題的能力; (4)提高學生實踐論文撰寫能力。 2.課程設計的任務及要求 1)課程設計任務: 設計一個投票管理系統。 2)創(chuàng)新要求: (1)新增背景音樂 (2)新增程序的“使用說明” (3)在輸入候選人之前選項框和部分功能鍵被禁用,防止亂點導致統計結果有誤 (4)新增保存結果功能 (5)新增版權所屬標簽 3)課程設計論文編寫要求 (1)課程設計任務及要求 (2)設計思路--工作原理、功能規(guī)劃 (3)詳細設計---數據分析、算法思路、類設計、功
3、能實現(含程序流程圖、主要代 碼及注釋)、界面等。 (4)運行調試與分析討論---給出運行屏幕截圖,分析運行結果,有何改進想法等。 (5)設計體會與小結---設計遇到的問題及解決辦法,通過設計學到了哪些新知識, 鞏固了哪些知識,有哪些提高。 (6)參考文獻(必須按標準格式列出,可參考教材后面的參考文獻格式) (7)報告按規(guī)定排版打印,要求裝訂平整,否則要求返工; (8)課設報告的裝訂順序如下:封面---任務書---中文摘要---目錄----正文---附錄 (代碼及相關圖片) (9)嚴禁抄襲,如有發(fā)現,按不及格處理。 4)課程設計評分標準: (1)學習態(tài)度:10分; (
4、2)系統設計:20分; (3)編程調試:20分; (4)回答問題:20分; (5)論文撰寫:30分。 5)參考文獻: (1)丁振凡. Java語言實用教程(第2版)[M]. 北京郵電大學出版社. 2008.1 (2)丁振凡. Java語言實用教程實驗指導(第2版)[M]. 北京郵電大學出版社. 2008.1 (3)楊樹林等. Java語言最新實用案例教程(第2版)[M]. 清華大學出版社. 2010.7 6)課程設計進度安排 1.準備階段(4學時):選擇設計題目、了解設計目的要求、查閱相關資料 2.程序模塊設計分析階段(4學時):程序總體設計、詳細設計 3.代碼編寫調試
5、階段(8學時):程序模塊代碼編寫、調試、測試 4.撰寫論文階段(4學時):總結課程設計任務和設計內容,撰寫課程設計論文 學生簽名: 2010 年 12 月 20 日 課程設計(論文)評審意見 (1)學習態(tài)度(10分):優(yōu)(?。?、良( )、中( )、一般(?。⒉睿ā。?; (2)系統設計(20分):優(yōu)( )、良( )、中( )、一般( )、差( ); (3)編程調試(20分):優(yōu)( )、良(?。?、中(?。?、一般(?。?、差(?。?; (4)回答問題(20分):優(yōu)( )、良(?。?、中(?。⒁话悖ā。⒉睿ā。?; (5)論文撰寫(
6、30分):優(yōu)( )、良(?。?、中(?。?、一般(?。⒉睿ā。? 評閱人: 職稱: 講師 2010 年 12 月 25 日 目 錄 一、課程設計任務及要求 1 二、需求分析 2 三、設計思路 3 四、詳細設計 6 五、運行調試與分析討論 15 六、設計體會與小結 19 七、參考文獻 20 一、課程設計任務及要求 設計一個如圖1所示的投票管理系統界面,要求輸入候選人名單后,點擊確認按鈕實現使用選擇框代表候選人,計選擇框的名字就是候選人的名字。點擊取消按鈕候選人輸入框為空,重新輸入候選人名單。選中候選人
7、的選擇框時,表示給該候選人投一票。點擊確定按鈕時表示產生一張選票。點擊刷新按鈕回到程序的初始界面重新設置候選人。根據選擇框的狀態(tài)變化統計出候選人的最后得票數,并可按票選取多少點擊排序按鈕對候選人進行排序。(其中,最多從候選人中選取3人,如果一張選票選取多于3人,該票就作廢票處理。如果一個也沒投票,就作棄權處理。程序能顯示一共統計了多少選票,并能統計出廢票和棄權票的票數。 圖1 二、需求分析 本程序主要需要掌握窗口的布局和按鈕事件的觸發(fā)相關知識,所有部件都可以添加到面板Panel上,顯示提示信息需要用到標簽La
8、bel,輸入框需要新建TextField,按鈕用Button,選票需要新建Checkbox復選框來實現,至于下面那個用來顯示各個候選人得票數的要先新建文本框TextField添加到一個小面板上,再新建個Scroll滾動條,將建有文本框的面板添加到Scroll滾動條上就可以了。為了做出這個界面還需要對各個部件進行擺放,為了達到那個效果,可以將整個界面分成很多個小塊,每一小塊都是個面板,最后再拼接起來,每個小塊都設置好布局setLayout,在這里主要用到網格布局GridLayout,流式布局FlowLayout和BorderLayout方位布局,設置面板的顏色可以用setBackground()
9、來實現。 做好界面后,接下來就需要去實現各個功能了。因為各個功能都是通過按鈕來實現的,所以要對按鈕進行注冊監(jiān)聽addActionlistener(),監(jiān)聽之后就是對按鈕事件的處理了actionPerformed(ActionEvent e)。要一個字符串中的人名,可以用StringTokenizer字符串分析器來獲取候選人的名字,其中還要用到里面的一些方法,比如nextToken()、hasMoreTokens()、countTokens()。還有setEnabled()方法可以設置按鈕是否可用,setState(boolean)可以設置復選框是否激活,在文本框或文本域中輸出和獲取信息可以分
10、別用setText()和getText(),根據候選人數將多余的復選框去掉,可以讓設置多余的為不可見setVilible(flase)這樣就行了。對于附加功能如背景音樂,可以用AudioClip接口、public void play()控制播放、public void loop()實現循環(huán)播放、public void stop()停止播放當前音樂、使用說明和保存結果都是需要通過新建Franme窗體實現的。 三、設計思路 一拿到這個題目我就構思好了大概的方向,那就是先制作主界面,然后再實現各個按鈕的功能。界面設計時,先定義好各個部件:標簽Label、文本框TextFiled、按鈕Butto
11、n、復選框Checkbox、Scroll滾動條,我把整個界面分成很多個小面板,每一行部件都在一個小面板上面,最后將這些小面板一個個添加上去add(),像流式布局FlowLayout、方位布局BorderLayout、網格布局GridLayout主要是用到了這三種布局,中間那幾塊面板通過setBackground()將其背景色改為綠色。經過不斷修改測試運行,一個投票系統的主界面就做出來了。 接下來就是對各個功能的實現了,定義幾個類變量來記錄投票相關記錄如: Checkbox candidate[] //選擇框數組,代表候選人 TextField personvo
12、te[] //文本條數組,顯示每個人的得票情況 int count[] //記錄每個人的得票數 int totalvote=0, //總票數 int peoplenumber=0; //候選人個數 int count1=0,invalidatedTicket=0,abstention=0; //分別表示選的人數,廢票數,棄權票數 對各個按鈕進行注冊監(jiān)聽addActionListener() 在輸入候選人名單時是輸入一
13、串名字,所以要從這一串名字中單個的提取出來并統計出候選人個數,在完成這項功能時要用到StringTokenizer類。 String g=canditate.getText();//獲取輸入的候選人 StringTokenizer st=new StringTokenizer(g);//字符串分析器 peoplenumble=st.countTokens();//統計候選人數 int i=0; while(st.hasMoreTokens()){ candidatelist[i]=st.nextToken(); i++;}//獲取語言符號(候選人名單) 點擊確認按鈕后,
14、根據候選人個數添加單選按鈕,并以候選人名字作為單選按鈕的標簽名。 for(int j=0;j<10;j++) candidate[j].setLabel(candidatelist[j]); //將候選人名單添加到復選框里 將多余的選框設置為不可見 for(int j=peoplenumble;j<10;j++) candidate[j].setVisible(false) 點擊“取消”的話輸入候選人的文本框為空,此時可以重新輸入,點擊下面“確定”則統計選了多少人并通過這個判斷是廢票還是棄權,然后分別給候選人增加票數并輸出相應的信息; for(int j=0;j<10
15、;j++){
if(candidate[j].getState())
count1++;}//統計選了多少人
if(count1==0) abstention++;//一個都沒選則選票作為棄權
if(count1>3) invalidatedTicket++;//選的人數超過3個則選票作廢
if(count1<=3&&count1>0){
for(int j=0;j 16、.setText("已經統計了:"+totalvote+"張選票,其中棄權票:"+abstention+"作廢票:"+invalidatedTicket);//輸出統計結果
for(int j=0;j 17、+)
if(count[j] 18、本域TextArea,用來輸出統計的結果,在文本域中,用戶可以復制里面的內容然后保存在其他文件中。
最后說下背景音樂的實現,通過添加AudioClip接口來實現
AudioClip music;//播放音樂
music=getAudioClip(getCodeBase(),"瘦瘦的-梁靜茹.mid");
public void start(){//循環(huán)播放音樂
music.loop();}
public void stop(){//結束播放
music.stop();}
四、詳細設計
import java.io.*;
import java.awt.*;
19、
import java.util.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;
public class 投票管理系統 extends Applet implements ActionListener{
AudioClip music;//播放音樂
Label hint,result,notice,banquan;
TextField canditate;//輸入候選人文本框
TextField out;//顯示選舉結果的文本框
Button confirm1,ca 20、ncle,confirm2,refresh,sort;//分別表示確認、取消、確定、刷新、排序
Button help;//使用說明
Button save;//保存統計結果
Checkbox candidate[]=new Checkbox[10];//選擇框數組,代表候選人
TextField t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
TextField personvote[]={t1,t2,t3,t4,t5,t6,t7,t8,t9,t10};//文本條數組,顯示每個人的得票情況
String candidatelist[]=new Stri 21、ng[10];//候選人名單
int count[]={0,0,0,0,0,0,0,0,0,0};//記錄每個人的得票數
int totalvote=0;//總票數
int peoplenumble=0;//候選人個數
int count1=0,invalidatedTicket=0,abstention=0; //分別表示選的人數,廢票數,棄權票數
public void init(){
music=getAudioClip(getCodeBase(),"瘦瘦的-梁靜茹.mid");
hint=new Label("首先輸入候選人的名字(人數不超過10,名字之 22、間用空格分隔):");
notice=new Label("用下面的選擇框統計選票(最多選3人):");
result=new Label("選舉結果:");
banquan=new Label("版權所屬:09軟件工程+會計學2班 祝捷");
canditate=new TextField(50);
confirm1=new Button("確認");cancle=new Button("取消");confirm2=new Button("確定");refresh=new Button("刷新");sort=new Button("排序");
confir 23、m2.setEnabled(false);refresh.setEnabled(false);sort.setEnabled(false);
help=new Button("使用說明");save=new Button("保存結果");save.setEnabled(false);
out=new TextField(50);
for(int i=0;i<10;i++)
personvote[i]=new TextField(80);
Panel p=new Panel();
Panel p1=new Panel();
Panel p2=new P 24、anel();
Panel p3=new Panel();
Panel p4=new Panel();
Panel p5=new Panel();
Panel p6=new Panel();
Panel p7=new Panel();
Panel pa=new Panel();
Panel pb=new Panel();
Panel pc=new Panel();
setLayout(new BorderLayout());
pa.setLayout(new GridLayout(7,1));
pb.setLayout(new 25、BorderLayout());
p4.setLayout(new GridLayout(1,5));
p5.setLayout(new GridLayout(1,5));
p1.add(hint);p2.add(canditate);p2.add(help);
p3.add(confirm1);p3.add(cancle);p3.add(notice);
p4.setBackground(Color.green);
p5.setBackground(Color.green);
p6.setBackground(Color.green);
for 26、(int i=0;i<5;i++){//創(chuàng)建候選人選項
candidate[i]=new Checkbox(candidatelist[i]);
p4.add(candidate[i]);
}
for(int i=5;i<10;i++){//創(chuàng)建候選人選項
candidate[i]=new Checkbox(candidatelist[i]);
p5.add(candidate[i]);
}
for(int j=0;j<10;j++){
candidate[j].setEnabled(false);
}
p6.add 27、(confirm2);p6.add(refresh);p6.add(sort);
p7.add(result);p7.add(out);p7.add(save);
pa.add(p1);pa.add(p2);pa.add(p3);pa.add(p4);pa.add(p5);pa.add(p6);pa.add(p7);
p.setLayout(new GridLayout(10,1));
for(int i=0;i<10;i++){
p.add(personvote[i]);
}
ScrollPane scroll=new ScrollPane(); 28、
scroll.add(p);
pc.add(banquan);
pb.add("Center",scroll);
pb.add("South",pc);
add("Center",pa);
add("South",pb);
confirm1.addActionListener(this);
cancle.addActionListener(this);
confirm2.addActionListener(this);
refresh.addActionListener(this);
sort.addActionListene 29、r(this);
help.addActionListener(this);
save.addActionListener(this);
}//面板的布局
public void start(){//循環(huán)播放音樂
music.loop();}
public void stop(){//結束播放
music.stop();}
public void actionPerformed(ActionEvent e){//注冊監(jiān)聽
String s=e.getActionCommand();
if(s.equals("確認")){
confir 30、m1.setEnabled(false);save.setEnabled(true);
confirm2.setEnabled(true);refresh.setEnabled(true);sort.setEnabled(true);help.setEnabled(true);
String g=canditate.getText();//獲取輸入的候選人
StringTokenizer st=new StringTokenizer(g);//字符串分析器
peoplenumble=st.countTokens();//統計候選人數
int i=0;
31、 while(st.hasMoreTokens()){
candidatelist[i]=st.nextToken();
i++;}//獲取語言符號(候選人名單)
for(int j=0;j<10;j++)
candidate[j].setLabel(candidatelist[j]);//將候選人名單添加到復選框里
for(int j=0;j 32、date[j].setVisible(false);//多余的選框設置為不可見
}
if(s.equals("取消")){//重新設置候選人,進行重新投票
confirm1.setEnabled(true);
canditate.setText("");
}
if(s.equals("確定")){
totalvote++;count1=0;
sort.setEnabled(true);
for(int j=0;j<10;j++){
if(candidate[j].getState())
33、 count1++;}//統計選了多少人
if(count1==0) abstention++;//一個都沒選則選票作為棄權
if(count1>3) invalidatedTicket++;//選的人數超過3個則選票作廢
if(count1<=3&&count1>0){
for(int j=0;j 34、;j++)
candidate[j].setState(false);
for(int j=0;j<10;j++){
candidate[j].setState(false);
}//清空選框中的勾
out.setText("已經統計了:"+totalvote+"張選票,其中棄權票:"+abstention+"作廢票:"+invalidatedTicket);//輸出統計結果
for(int j=0;j 35、得票數:"+count[j]);//輸出各個候選人得票數
}
if(s.equals("刷新")){
confirm1.setEnabled(true);
confirm2.setEnabled(false);refresh.setEnabled(false);sort.setEnabled(false);save.setEnabled(false);
totalvote=0;
peoplenumble=0;
count1=0;invalidatedTicket=0;abstention=0;
c 36、anditate.setText("");
out.setText("");
for(int j=0;j<10;j++){
candidate[j].setState(false);
}
for(int j=peoplenumble;j<10;j++)
candidate[j].setVisible(true);
for(int j=0;j<10;j++)
candidatelist[j]="";
for(int j=0;j<10;j++)
count[j]=0;
for(int j=0;j<10; 37、j++)
candidate[j].setLabel(candidatelist[j]);
for(int j=0;j<10;j++)
personvote[j].setText("");
}
if(s.equals("排序")){
sort.setEnabled(false);
int m;String n;
for(int j=0;j 38、count[j];count[j]=count[i];count[i]=m;
n=candidatelist[j];candidatelist[j]=candidatelist[i];candidatelist[i]=n;
}//按得票數由多到少進行排序
for(int j=0;j 39、 }
if(s.equals("保存結果")){
new Save();
}
}
class Help extends Frame{//“使用說明”的彈出窗體
Panel p=new Panel();
TextField help[]=new TextField[6];
Help(){
super("使用說明");
p.setLayout(new GridLayout(6,1));
for(int i=0;i<6;i++)
help[i]=new TextField(10);
for(int i=0;i<6;i+ 40、+){
p.add(help[i]);
}
ScrollPane scroll=new ScrollPane();
scroll.add(p);
add(scroll);
help[0].setText("使用說明:");
help[1].setText("1:在文本框中輸入候選人名單,點擊“確認”以完成候選人的設置,點擊“取消”可以重新設置候選人。");
help[2].setText("2:對候選人進行投票,點擊下面的“確定”以確認選票。(注意:每點一次確定將產生一張選票!)");
41、help[3].setText("3:確定選票后,會自動統計結果,點擊“排序”可以對候選人所得的票數由高到低進行排序。");
help[4].setText("4:點擊“刷新”可以重新設置候選人,并開始新的一輪投票");
help[5].setText("5:在任何時候可以點擊“使用說明”來查看幫助,點擊“保存結果”,可以將統計以文本的形式顯示出來。");
setSize(600,200);
setVisible(true);
addWindowListener(new closeWin());
}
class closeW 42、in extends WindowAdapter{
public void windowClosing(WindowEvent e){
Window w=e.getWindow();
w.dispose();
}
}
}
class Save extends Frame{//“保存結果”的彈出窗體
TextArea save;
Save(){
super("統計結果");
save=new TextArea(11,1);
add(save);
save.setText(out.getText()+\n 43、+personvote[0].getText()+\n+personvote[1].getText()+\n+
personvote[2].getText()+\n+personvote[3].getText()+\n
+personvote[4].getText()+\n+personvote[5].getText()+\n
+personvote[6].getText()+\n+personvote[7].getText()+\n
+personvote[8].getText()+\n+personvote[9].getText()+\n);
44、 setSize(300,300);
setVisible(true);
addWindowListener(new closeWin());
}
class closeWin extends WindowAdapter{
public void windowClosing(WindowEvent e){
Window w=e.getWindow();
w.dispose();
}
}
}
}
五、運行調試與分析討論
運行后的主界面(背景音樂響起)部分按鈕已禁用
45、 點擊“使用說明”后彈出的幫助文檔
輸入候選人點擊“確認”后,候選人出現在選票上,之前多余的選框沒有顯示出來
選擇候選人,點擊“確定”后自動統計出結果,并清空上一次選框中的勾
點擊“排序”后,候選人根據票數由高到低排列
點擊“保存結果”彈出一個統計結果的窗體可以對其進行復制,方便保存
點擊“刷新”所有數據清空回到主界面,此時可以進行下一輪投票
第 20 頁
6、 設計體會與小結
做這個課程設計我最大的體會就是不僅熟練地掌握了書本上的知識,還學到了很多書本上沒有的知識。雖然在很早以 46、前就把這個程序寫好了,也實現了基本功能,但老師每次看完之后都能夠給我一些改進的建議,按照老師的建議,我不厭其煩的把程序改了又改,從老師那我了解到,一個好的程序,應該能讓別人容易讀懂,所以變量名盡量用英文單詞而不要用單個字母表示,還有代碼中應該要有足夠多的注釋。當遇到某個功能無法實現時,我會上網先百度,看看網上有沒有好的解決方案,實在找不到的話就去問老師,通過老師提供的接口、類之類的,然后查詢那個幫助文檔。
我想一個人只有到了緊要關頭才會奮力一搏吧,通過課程設計,更加深入的了解了java,想當初剛學java的時候,輸出Hello Word!都能讓自己激動半天,我想我們在學東西的時候,興趣真的很 47、重要,以前學java時還感覺不到它的趣味性,可是學到后面GUI時,才發(fā)現java很有趣,自己照著書上把代碼打上去運行,幾乎每個例題都有在電腦上試驗過吧,所以每次做上機實驗時就仿照書上的寫,我想,學計算機語言最大的喜悅就是當一個程序按照自己所想要的結果運行出來吧!我覺得幫助別人也是一種學習,當有朋友讓我?guī)兔r,我會很樂意,因為在幫助別人的同時,會迫使自己去學習新的東西。
通過做這個投票管理系統,讓我對于Applet更加深入的了解了,還有部件的布局也更熟練了。我想,學習是個不間斷的過程,如果真正想學好一門語言的話,光靠課程設計這段時間是遠遠不夠的,所以凡事還是貴在堅持,我看過有些同學過兩天就換一個課設題目,我問他為什么,他說還有幾個錯誤怎么都找不出來,于是就換題了。
能順利的完成這次課設,我非常感謝我的java老師***,是她給予了我很多幫助,教會了我很多東西,謝謝!
第 22 頁
七、參考文獻
[1] 丁振凡. Java語言實用教程(第1版)[M]. 北京:北京郵電大學出版社,2005.2
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。