学生投票软件.docx
《学生投票软件.docx》由会员分享,可在线阅读,更多相关《学生投票软件.docx(19页珍藏版)》请在冰豆网上搜索。
学生投票软件
Java期末项目论文
项目名称:
学生投票软件
小组成员:
AAA
BBB
年级专业:
11级计算机科学与技术
日期:
2013年12月18日
1、选题背景
每个合法的成年公民都具有选举权,在人们的日常工作、学习以及生活中,大到领导的选举,小到班级组织的活动,投票这项活动随处可见。
在我们大学校园里,每年都要进行三好学生、优秀干部的选举,奖助学金的评选等一系列活动,这些都需要我们学生进行投票。
手写的选票不但繁琐、麻烦,还会出现一些不合法的选票,于是我们小组决定制作一个投票、计票软件,方便大家的同时,也提升了该项活动的公平、公正性。
2、分析过程
本程序主要需要掌握窗口的布局格式和事件触发的相关知识,程序整体采用组合布局的方式,将所有部件添加到面板JPanel上,显示提示信息需要用到是标签Label,按钮用Button来实现,选票需要用Checkbox复选框来实现,选票的计数和显示用到的是设置为不可编辑的文本框TextField,候选人的照片也是通过JLabel来添加的。
本程序将整个界面分成若干个小块,每一小块都是一个面板,最后将所有小块拼接起来,为每个小块都设置好布局setLayout,我们在这里主要用到的布局有:
流式布局FlowLayout和BoxLayout盒式位布局。
界面创建好了之后,就要实现具体的功能了。
本程序的功能主要是通过鼠标触发来实现的,通过对java.awt.event.ActionListener的成员方法actionPerformed的重载来实现。
学生每次投票后,通过setEnabled(false)使投票按钮不可编辑,必须点击刷新按钮才能重新投票,这样能够有效地避免一个学生进行多次投票、刷票等不公平现象。
而文件的保存这一部分主要是参考教材第七章—文件和数据流的处理来实现的。
3、开发过程
在选定了题目之后,我首先分析了程序的编写思路及步骤,首先编写程序界面的相关代码,在实现了界面之后完成每一部分的具体功能。
⑴首先是界面的设计:
定义:
JPanel[]p=newJPanel[7],将布局分成了七个不部分,每一个部分设置成需要的布局形式,然后通过p[pj[i]].add()语句为每一部分添加相关的组件,设置相关属性,主要用到的组件有:
Dialog、Label、Button、TextField和CheckBox。
有关变量的定义如下:
①staticJDialogd=newJDialog();//弹出对话框
②staticJButton[]bk={newJButton("投票"),newJButton("刷新"),newJButton("保存结果")};//相关的按钮
③JCheckBox[]ck={newJCheckBox("陈乔恩"),newJCheckBox("蔡依林"),newJCheckBox("柯震东")};//实现投票的复选框
④JTextField[]t={newJTextField("",14),newJTextField("",14),newJTextField("",14),newJTextField("",14)};//文本框用于显示选票
⑤ImageIcon[]ic={newImageIcon("0.jpg"),newImageIcon("1.jpg"),newImageIcon("2.jpg"),newImageIcon("3.jpg"),newImageIcon("4.jpg")};//图片信息
⑵各部分功能的实现:
(只列出关键部分)
①查看简介按钮:
通过显示对话框的方式来实现候选人的介绍
button.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
JOptionPane.showMessageDialog(null,str1[0],str2[0],JOptionPane.PLAIN_MESSAGE);}
});
②投票按钮:
button.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(ck[0].isSelected()||ck[1].isSelected()||ck[2].isSelected())
count++;//如果由候选人被选,
if(ck[0].isSelected()){
count1++;//1号候选人被选,票数加1
ck[0].setEnabled(true);//设置复选框可以被编辑
bk[0].setEnabled(true);//投票按钮可以使用
}
//其他的候选人复选框和以上相同,这里不再列出
t[0].setText("投票总人数:
"+count);
t[1].setText("陈乔恩得票数:
"+count1);
t[2].setText("蔡依林得票数:
"+count2);
t[3].setText("柯震东得票数:
"+count3);
bk[0].setEnabled(false);//投票之后,投票按钮不可编辑,必须点击刷新按钮,保证每人只能投一张选票
}
③文件保存按钮主要通过以下步骤进行编写:
创建该文件所对应的输入/输出流或读写器的实例对象,以获得相应的系统资源;对文件进行读(输入)/写(输出)操作;最后调用close成员方法,关闭文件,以释放文件所占用的系统资源。
4、测试过程
⑴程序初始化界面
⑵测试查看三个候选人简介功能
⑶测试软件的投票功能(主要功能)
假设一共有15个人投票,每个人的投票情况如下:
陈乔恩
蔡依林
柯震东
1号投票人
√
√
2号投票人
√
√
3号投票人
√
4号投票人
√
√
5号投票人
√
√
6号投票人
√
√
√
7号投票人
√
√
8号投票人
√
9号投票人
√
√
10号投票人
√
√
11号投票人
√
√
12号投票人
√
13号投票人
√
14号投票人
√
15号投票人
√
√
√
总计
7票
11票
9票
投票结果显示如下:
⑷测试软件的选票存储功能
打开刚刚保存在C盘下的名为(选票.xls)的Excel文档:
5、小组人员分工及自我表现评价
⑴组员:
AAA
我参与了开发前期的选题及分析过程,由于本人编程能力较弱,所以未参与编程开发的工作,但是在这期间复习了课本,巩固了自己java语言编程的基础知识。
我还负责了软件开发后期的测试及改进阶段,与其他组员合作完善了软件的功能。
另外,我还负责本小组项目报告的编写。
虽然没有参与代码编写有些遗憾,可是在本项目开发的过程中提高了很多,综合表现得分90分。
⑵组员:
BBB
我主要参与了开发前期的选题及分析过程,在此期间从图书馆和互联网上查阅了很多资料,最终和AAA一起确定了课程的题目---学生投票软件。
随后由我负责软件代码的编写,在编写的过程中,由于对java语言掌握的不是特别好,遇到了很多问题,不过经过自己的努力,一一克服了困难,最终编写出了比较满意的代码,最后我还参与了开发后期的测试与程序改进,word的修改工作,综合表现得分95分。
6、总结
通过本次的Java期末大作业,我最大的体会就是我们不仅要熟练地掌握了书本上的知识,更要能够把学到的知识应用到上机编程中,这样才能算是真正学会了书本上所讲的知识。
本次Java编程主要参考本学期所学的教材第八章—Swing图形用户界面设计,本次代码有些简单,但完全是我自己编写的,无任何抄袭;在编写代码的过程中,我遇到了很多困难,比如图形界面的设计、鼠标触发等就花费了很多时间翻看教材和其他资料,不过看着凭借自己的努力做出来的成果,一切努力都是值得的。
通过做这个学生投票系统,我对于Java有了进一步地了解,特别对部件的布局更熟练了。
我想,学习是个持之以恒的过程,如果真正想学好Java语言的话,光靠课程设计的时间是远远不够的,因为自己对Java还是比较感兴趣,所以以后我一定要加强Java的学习,坚持不懈,一切努力都将会是值得的。
7、参考文献
1.雍俊海编著.《Java程序设计教程》(第二版)--北京:
清华大学出版社,2007.07
八、程序源代码
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.FlowLayout;
importjava.awt.Font;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.BufferedWriter;
importjava.io.FileWriter;
importjava.io.IOException;
importjavax.swing.JDialog;
importjavax.swing.JFileChooser;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JFrame;
importjavax.swing.JButton;
importjavax.swing.ImageIcon;
importjavax.swing.BoxLayout;
importjavax.swing.JCheckBox;
importjavax.swing.JTextField;
importjavax.swing.JOptionPane;
publicclassVoteextendsJFrame{
privatestaticfinallongserialVersionUID=1L;
protectedinti,m=0,h=0;
staticJDialogd=newJDialog();
staticJButton[]bk={newJButton("投票"),newJButton("刷新"),newJButton("保存结果")};
JCheckBox[]ck={newJCheckBox("陈乔恩"),newJCheckBox("蔡依林"),newJCheckBox("柯震东")};
JTextField[]t={newJTextField("",14),newJTextField("",14),newJTextField("",14),newJTextField("",14)};
ImageIcon[]ic={newImageIcon("00000.jpg"),newImageIcon("11111.jpg"),newImageIcon("22222.jpg"),newImageIcon("33333.jpg"),newImageIcon("44444.jpg")};
staticintcount=0,count1=0,count2=0,count3=0;
publicVote()
{
super("学生投票系统");
String[]s={"陈乔恩","蔡依林","柯震东"};
int[]ia={JLabel.CENTER,JLabel.CENTER,JLabel.CENTER,JLabel.CENTER,JLabel.CENTER};
int[]ib={JLabel.TOP,JLabel.TOP,JLabel.TOP,JLabel.TOP,JLabel.TOP};
Containerc=getContentPane();
c.setLayout(newFlowLayout());
JPanel[]p=newJPanel[7];
for(inti=0;i<7;i++)
{
p[i]=newJPanel();
}
p[0].setLayout(newFlowLayout());
p[1].setLayout(newFlowLayout(FlowLayout.CENTER,30,0));
p[2].setLayout(newFlowLayout(FlowLayout.CENTER,150,0));
p[3].setLayout(newFlowLayout());
p[4].setLayout(newBoxLayout(p[4],BoxLayout.Y_AXIS));
p[5].setLayout(newFlowLayout(FlowLayout.CENTER,0,0));
p[6].setLayout(newBoxLayout(p[6],BoxLayout.X_AXIS));
for(inti=0;i<7;i++)
{
c.add(p[i]);
}
int[]pj={0,1,1,1,2,2,2,3,4,4,4,5,5,5,5};
for(inti=0;i<=14;i++)
{
if(i==0)
{
JLabelaLabel=newJLabel(ic[i],JLabel.CENTER);
aLabel.setHorizontalTextPosition(ia[i]);
aLabel.setVerticalTextPosition(ib[i]);
p[pj[i]].add(aLabel);
}
if(i>0&&i<=3)
{
JLabelaLabel=newJLabel(s[i-1],ic[i],JLabel.CENTER);
aLabel.setHorizontalTextPosition(ia[i]);
aLabel.setVerticalTextPosition(ib[i]);
p[pj[i]].add(aLabel);
}
if(i>3&&i<=6)
{
JButtonb=newJButton("查看简介");
Show1(b,m++);
p[pj[i]].add(b);
}
if(i==7)
{
JLabelaLabel=newJLabel(ic[i-3],JLabel.CENTER);
aLabel.setHorizontalTextPosition(ia[i-3]);
aLabel.setVerticalTextPosition(ib[i-3]);
p[pj[i]].add(aLabel);
}
if(i>7&&i<=10)
{
p[pj[i]].add(ck[i-8]);
ck[i-8].setSelected(false);
}
if(i==11)
{
p[pj[i]].add(bk[i-11]);
Show1(bk[i-11],3);
}
if(i==12)
{
p[pj[i]].add(bk[i-11]);
Show1(bk[i-11],4);
}
if(i==13)
{
p[pj[i]].add(bk[i-11]);
Show1(bk[i-11],5);
}
if(i==14)
{
for(intlength=0;length<4;length++)
{
t[length].setEditable(false);
p[pj[i]].add(t[length]);
}
}
}
}
publicvoidShow1(JButtonbutton,intnumber)
{
finalStringstr2[]={"陈乔恩简介","蔡依林简介","柯震东简介"};
finalStringstr1[]={"陈乔恩,中国台湾女演员、歌手,出生于台湾新竹。
2001年9月23日正式出道,是一位多方位发展的艺人。
",
"蔡依林,1980年9月15日生于台湾,中国的流行音乐女歌手,擅长前卫多变的造型与丰富的舞曲及舞蹈。
",
"柯震东,本名柯家凯。
中国台湾男演员、歌手。
1991年6月18日出生于台湾澎湖,现就读于私立中国文化大学体育系。
"};
setLayout(newFlowLayout());
add(button);
if(number==0)//查看陈乔恩简介
{button.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
JOptionPane.showMessageDialog(null,str1[0],str2[0],JOptionPane.PLAIN_MESSAGE);
}
});
}
if(number==1)//查看蔡依林简介
{button.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
JOptionPane.showMessageDialog(null,str1[1],str2[1],JOptionPane.PLAIN_MESSAGE);
}
});
}
if(number==2)//查看柯震东简介
{button.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
JOptionPane.showMessageDialog(null,str1[2],str2[2],JOptionPane.PLAIN_MESSAGE);
}
});
}
if(number==3)//投票按钮
{button.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
if(ck[0].isSelected()||ck[1].isSelected()||ck[2].isSelected())
count++;
if(ck[0].isSelected())
{
count1++;
ck[0].setEnabled(true);
bk[0].setEnabled(true);
}
if(ck[1].isSelected())
{
count2++;
ck[1].setEnabled(true);
bk[0].setEnabled(true);
}
if(ck[2].isSelected()){
count3++;
ck[2].setEnabled(true);
bk[0].setEnabled(true);
}
t[0].setText("投票总人数:
"+count);
t[1].setText("陈乔恩得票数:
"+count1);
t[2].setText("蔡依林得票数:
"+count2);
t[3].setText("柯震东得票数:
"+count3);
bk[0].setEnabled(false);
Fontfont=newFont("宋体",Font.BOLD,15);
Colorclo[]={Color.blue,Color.magenta,Color.green,Color.red,Color.darkGray};
for(intj=0;j<4;j++)
{
t[j].setFont(font);
if(h%5==0)
t[j].setForeground(clo[0]);
if(h%5==1)
t[j].setForeground(clo[1]);
if(h%5==2)
t[j].setForeground(clo[2]);
if(h%5==3)
t[j].setForeground(clo[3]);
if(h%5==4)
t[j].setForeground(clo[4]);
}
h++;
}
});
}
if(number==4)//刷新按钮
{button.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
bk[0].setEnabled(true);
ck[0].setSelected(false);
ck[1].setSelected(false);
ck[2].setSelected(false);
ck[0].setEnabled(true);
ck[1].setEnabled(true);
ck[2].setEnabled(true);
}
});
}
if(number==5)//保存结果按钮
{button.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
JFileChooserf=newJFileChooser();
f.showSaveDialog(Vote.this);
Stringfilename=f.getSelec