课程设计(论文)任务书软件学院学院09软件工程+会计学专业 2 班一、课程设计(论文)题目简单投票管理系统(小应用程序Applet)二、课程设计(论文)工作自 2010 年 12 月20 日起至2010 年12 月 24 日止。
三、课程设计(论文) 地点: 软件学院实训中心四、课程设计(论文)内容要求:1.本课程设计的目的(1)掌握Java语言的程序设计方法;(2)理论联系实际,进一步提高学生的软件开发技术;(3)培养学生分析、解决问题的能力;(4)提高学生实践论文撰写能力。
2.课程设计的任务及要求1)课程设计任务:设计一个投票管理系统。
2)创新要求:(1)新增背景音乐(2)新增程序的“使用说明”(3)在输入候选人之前选项框和部分功能键被禁用,防止乱点导致统计结果有误(4)新增保存结果功能(5)新增版权所属标签3)课程设计论文编写要求(1)课程设计任务及要求(2)设计思路--工作原理、功能规划(3)详细设计---数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。
(4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。
(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。
(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)(7)报告按规定排版打印,要求装订平整,否则要求返工;(8)课设报告的装订顺序如下:封面---任务书---中文摘要---目录----正文---附录(代码及相关图片)(9)严禁抄袭,如有发现,按不及格处理。
4)课程设计评分标准:(1)学习态度:10分;(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.代码编写调试阶段(8学时):程序模块代码编写、调试、测试4.撰写论文阶段(4学时):总结课程设计任务和设计内容,撰写课程设计论文学生签名:2010 年12 月20 日课程设计(论文)评审意见(1)学习态度(10分):优()、良()、中()、一般()、差();(2)系统设计(20分):优()、良()、中()、一般()、差();(3)编程调试(20分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)论文撰写(30分):优()、良()、中()、一般()、差();评阅人:职称:讲师2010 年12 月25 日目录一、课程设计任务及要求 (1)二、需求分析 (3)三、设计思路 (4)四、详细设计 (7)五、运行调试与分析讨论 (16)六、设计体会与小结 (20)七、参考文献 (21)一、课程设计任务及要求设计一个如图1所示的投票管理系统界面,要求输入候选人名单后,点击确认按钮实现使用选择框代表候选人,计选择框的名字就是候选人的名字。
点击取消按钮候选人输入框为空,重新输入候选人名单。
选中候选人的选择框时,表示给该候选人投一票。
点击确定按钮时表示产生一张选票。
点击刷新按钮回到程序的初始界面重新设置候选人。
根据选择框的状态变化统计出候选人的最后得票数,并可按票选取多少点击排序按钮对候选人进行排序。
(其中,最多从候选人中选取3人,如果一张选票选取多于3人,该票就作废票处理。
如果一个也没投票,就作弃权处理。
程序能显示一共统计了多少选票,并能统计出废票和弃权票的票数。
图1二、需求分析本程序主要需要掌握窗口的布局和按钮事件的触发相关知识,所有部件都可以添加到面板Panel上,显示提示信息需要用到标签Label,输入框需要新建TextField,按钮用Button,选票需要新建Checkbox复选框来实现,至于下面那个用来显示各个候选人得票数的要先新建文本框TextField 添加到一个小面板上,再新建个Scroll滚动条,将建有文本框的面板添加到Scroll滚动条上就可以了。
为了做出这个界面还需要对各个部件进行摆放,为了达到那个效果,可以将整个界面分成很多个小块,每一小块都是个面板,最后再拼接起来,每个小块都设置好布局setLayout,在这里主要用到网格布局GridLayout,流式布局FlowLayout和BorderLayout方位布局,设置面板的颜色可以用setBackground()来实现。
做好界面后,接下来就需要去实现各个功能了。
因为各个功能都是通过按钮来实现的,所以要对按钮进行注册监听addActionlistener(),监听之后就是对按钮事件的处理了actionPerformed(ActionEvent e)。
要一个字符串中的人名,可以用StringTokenizer字符串分析器来获取候选人的名字,其中还要用到里面的一些方法,比如nextToken()、hasMoreTokens ()、countTokens()。
还有setEnabled()方法可以设置按钮是否可用,setState(boolean)可以设置复选框是否激活,在文本框或文本域中输出和获取信息可以分别用setText()和getText(),根据候选人数将多余的复选框去掉,可以让设置多余的为不可见setVilible(flase)这样就行了。
对于附加功能如背景音乐,可以用AudioClip接口、public void play ()控制播放、public void loop()实现循环播放、public void stop ()停止播放当前音乐、使用说明和保存结果都是需要通过新建Franme窗体实现的。
三、设计思路一拿到这个题目我就构思好了大概的方向,那就是先制作主界面,然后再实现各个按钮的功能。
界面设计时,先定义好各个部件:标签Label、文本框TextFiled、按钮Button、复选框Checkbox、Scroll滚动条,我把整个界面分成很多个小面板,每一行部件都在一个小面板上面,最后将这些小面板一个个添加上去add(),像流式布局FlowLayout、方位布局BorderLayout、网格布局GridLayout主要是用到了这三种布局,中间那几块面板通过setBackground()将其背景色改为绿色。
经过不断修改测试运行,一个投票系统的主界面就做出来了。
接下来就是对各个功能的实现了,定义几个类变量来记录投票相关记录如:Checkbox candidate[] //选择框数组,代表候选人TextField personvote[] //文本条数组,显示每个人的得票情况int count[] //记录每个人的得票数int totalvote=0, //总票数int peoplenumber=0; //候选人个数int count1=0,invalidatedTicket=0,abstention=0; //分别表示选的人数,废票数,弃权票数对各个按钮进行注册监听addActionListener()在输入候选人名单时是输入一串名字,所以要从这一串名字中单个的提取出来并统计出候选人个数,在完成这项功能时要用到StringTokenizer类。
String g=canditate.getText();//获取输入的候选人StringTokenizer st=new StringTokenizer(g);//字符串分析器peoplenumble=st.countTokens();//统计候选人数int i=0;while(st.hasMoreTokens()){candidatelist[i]=st.nextToken();i++;}//获取语言符号(候选人名单)点击确认按钮后,根据候选人个数添加单选按钮,并以候选人名字作为单选按钮的标签名。
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;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<peoplenumble;j++)if(candidate[j].getState())count[j]++;}//统计候选人所得票数out.setText("已经统计了:"+totalvote+"张选票,其中弃权票:"+abstention+"作废票:"+invalidatedTicket);//输出统计结果for(int j=0;j<peoplenumble;j++)personvote[j].setText(""+candidatelist[j]+"得票数:"+count[j]);//输出各个候选人得票数点击“排序”则比较各个候选人的票数由高到低进行排序for(int j=0;j<peoplenumble;j++)for(int i=j+1;i<peoplenumble;i++)if(count[j]<count[i]){m=count[j];count[j]=count[i];count[i]=m;n=candidatelist[j];candidatelist[j]=candidatelist[i];candidat elist[i]=n;}//按得票数由多到少进行排序“刷新”按钮通过清空所有文本框中的数据,所有变量变为初始化值;“使用说明”通过弹出Frame窗体来实现,在该窗体中新建了几个文本框TextFeild和Scroll滚轮用来显示帮助信息。