存档资料成绩:华东交通大学理工学院课程设计报告书所属课程名称JAVA语言程序设计课程设计题目投票系统分院电信分院专业班级通信*班学号************学生姓名***指导教师**2015年7月5日课程设计(论文)评阅意见评阅人职称2015年月日序号项目等级优秀良好中等及格不及格1课程设计态度评价2出勤情况评价3任务难度评价4工作量饱满评价5任务难度评价6设计中创新性评价7论文书写规范化评价8综合应用能力评价综合评定等级目录一、课程设计任务及要求............................1二、需求分析......................................2三、设计思路......................................3四、详细设计......................................5五、运行调试与分析讨论...........................14六、设计体会与小结..............................16七、参考文献(资料).............................16第1页共19页一、课程设计任务及要求设计一个如图1所示的投票管理系统界面,要求输入候选人名单后,点击确认按钮实现使用选择框代表候选人,计选择框的名字就是候选人的名字。点击取消按钮候选人输入框为空,重新输入候选人名单。选中候选人的选择框时,表示给该候选人投一票。点击确定按钮时表示产生一张选票。点击刷新按钮回到程序的初始界面重新设置候选人。根据选择框的状态变化统计出候选人的最后得票数,并可按票选取多少点击排序按钮对候选人进行排序。(其中,最多从候选人中选取3人,如果一张选票选取多于3人,该票就作废票处理。如果一个也没投票,就作弃权处理。程序能显示一共统计了多少选票,并能统计出废票和弃权票的票数。华东交通大学理工学院课程设计报告第2页共19页二、需求分析本程序主要需要掌握窗口的布局和按钮事件的触发相关知识,所有部件都可以添加到面板Panel上,显示提示信息需要用到标签Label,输入框需要新建TextField,按钮用Button,选票需要新建Checkbox复选框来实现,至于下面那个用来显示各个候选人得票数的要先新建文本框TextField添加到一个小面板上,再新建个Scroll滚动条,将建有文本框的面板添加到Scroll滚动条上就可以了。为了做出这个界面还需要对各个部件进行摆放,为了达到那个效果,可以将整个界面分成很多个小块,每一小块都是个面板,最后再拼接起来,每个小块都设置好布局setLayout,在这里主要用到网格布局GridLayout,流式布局FlowLayout和BorderLayout方位布局,设置面板的颜色可以用setBackground()来实现。做好界面后,接下来就需要去实现各个功能了。因为各个功能都是通过按钮来实现的,所以要对按钮进行注册监听addActionlistener(),监听之后就是对按钮事件的处理了actionPerformed(ActionEvente)。要一个字符串中的人名,可以用StringTokenizer字符串分析器来获取候选人的名字,其中还要用到里面的一些方法,比如nextToken()、hasMoreTokens()、countTokens()。还有setEnabled()方法可以设置按钮是否可用,setState(boolean)可以设置复选框是否激活,在文本框或文本域中输出和获取信息可以分别用setText()和getText(),根据华东交通大学理工学院课程设计报告第3页共19页候选人数将多余的复选框去掉,可以让设置多余的为不可见setVilible(flase)这样就行了。三、设计思路一拿到这个题目我就构思好了大概的方向,那就是先制作主界面,然后再实现各个按钮的功能。界面设计时,先定义好各个部件:标签Label、文本框TextFiled、按钮Button、复选框Checkbox、Scroll滚动条,我把整个界面分成很多个小面板,每一行部件都在一个小面板上面,最后将这些小面板一个个添加上去add(),像流式布局FlowLayout、方位布局BorderLayout、网格布局GridLayout主要是用到了这三种布局,中间那几块面板通过setBackground()将其背景色改为绿色。经过不断修改测试运行,一个投票系统的主界面就做出来了。接下来就是对各个功能的实现了,定义几个类变量来记录投票相关记录如:Checkboxcandidate[]//选择框数组,代表候选人TextFieldpersonvote[]//文本条数组,显示每个人的得票情况intcount[]//记录每个人的得票数inttotalvote=0,//总票数intpeoplenumber=0;//候选人个数intcount1=0,invalidatedTicket=0,abstention=0;//分别表示选的人数,废票数,弃权票数对各个按钮进行注册监听addActionListener()在输入候选人名单时是输入一串名字,所以要从这一串名字中单个的提取出来并统计出候选人个数,在完成这项功能时要用到StringTokenizer类。Stringg=canditate.getText();//获取输入的候选人StringTokenizerst=newStringTokenizer(g);//字符串分析器peoplenumble=st.countTokens();//统计候选人数inti=0;while(st.hasMoreTokens()){candidatelist[i]=st.nextToken();i++;}//获取语言符号(候选人名单)华东交通大学理工学院课程设计报告第4页共19页点击确认按钮后,根据候选人个数添加单选按钮,并以候选人名字作为单选按钮的标签名。for(intj=0;j10;j++)candidate[j].setLabel(candidatelist[j]);//将候选人名单添加到复选框里将多余的选框设置为不可见for(intj=peoplenumble;j10;j++)candidate[j].setVisible(false)点击“取消”的话输入候选人的文本框为空,此时可以重新输入,点击下面“确定”则统计选了多少人并通过这个判断是废票还是弃权,然后分别给候选人增加票数并输出相应的信息;for(intj=0;j10;j++){if(candidate[j].getState())count1++;}//统计选了多少人if(count1==0)abstention++;//一个都没选则选票作为弃权if(count13)invalidatedTicket++;//选的人数超过3个则选票作废if(count1=3&&count10){for(intj=0;jpeoplenumble;j++)if(candidate[j].getState())count[j]++;}//统计候选人所得票数out.setText(已经统计了:+totalvote+张选票,其中弃权票:+abstention+作废票:+invalidatedTicket);//输出统计结果for(intj=0;jpeoplenumble;j++)personvote[j].setText(+candidatelist[j]+得票数:+count[j]);//输出各个候选人得票数点击“排序”则比较各个候选人的票数由高到低进行排序for(intj=0;jpeoplenumble;j++)for(inti=j+1;ipeoplenumble;i++)if(count[j]count[i]){m=count[j];count[j]=count[i];count[i]=m;n=candidatelist[j];candidatelist[j]=candidatelist[i];candidat华东交通大学理工学院课程设计报告第5页共19页elist[i]=n;}//按得票数由多到少进行排序“刷新”按钮通过清空所有文本框中的数据,所有变量变为初始化值;“使用说明”通过弹出Frame窗体来实现,在该窗体中新建了几个文本框TextFeild和Scroll滚轮用来显示帮助信息。“保存结果”也是通过弹出Franme窗体,窗体里面有个文本域TextArea,用来输出统计的结果,在文本域中,用户可以复制里面的内容然后保存在其他文件中。四、详细设计importjava.io.*;importjava.awt.*;importjava.util.*;importjava.applet.*;importjava.awt.event.*;importjavax.swing.*;publicclass投票管理系统extendsAppletimplementsActionListener{Labelhint,result,notice,banquan;TextFieldcanditate;//输入候选人文本框TextFieldout;//显示选举结果的文本框Buttonconfirm1,cancle,confirm2,refresh,sort;//分别表示确认、取消、确定、刷新、排序Buttonhelp;//使用说明Buttonsave;//保存统计结果Checkboxcandidate[]=newCheckbox[10];//选择框数组,代表候选人TextFieldt1,t2,t3,t4,t5,t6,t7,t8,t9,t10;TextFieldpersonvote[]={t1,t2,t3,t4,t5,t6,t7,t8,t9,t10};//文本条数组,显示每个人的得票情况Stringcandidatelist[]=newString[10];//候选人名单华东交通大学理工学院课程设计报告第6页共19页intcount[]={0,0,0,0,0,0,0,0,0,0};//记录每个人的得票数inttotalvote=0;//总票数intpeoplenumble=0;//候选人个数intcount1=0,invalidatedTicket=0,abstention=0;//分别表示选的人数,废票数,弃权票数publicvoidinit(){hint=newLabel(首先输入候选人的名字(人数不超过10,名字之间用空格分隔):);notice=newLabel(用下面的选择框统计选票(最多选3人):);result=newLabel(选举结果:);canditate=newTextField(50);confirm1=newButton(确认);cancle=newButton(取消);confirm2=newButton(确定);refresh=newButton(刷新);sort=newButton(排序);confirm2.setEnabled(false);refresh.setEnabled(false);sort.setEnabled(false);help=newButton(使用说明);save=newButton(保存结果);save.setEnabled(false);out=newTextField(50);for(inti=0;i10;i++)personvote[i]=newTextField(80);Panelp=newPanel();Panelp1=newPanel();Panelp2=newPanel();Panelp3=newPanel();Panelp4=newPanel();Panelp5=newPanel();Panelp6=newPanel();Panelp7=newPanel();Panelpa=newPanel();Panelpb=newPanel();华东交通大学理工学院课程设计报告