java设计一个投票统计的系统,在第一个界面有三个投票按钮,被投票人分别是张三、李四、王五,点击哪个投票按钮,就在一个数据库的vote表中显示被投票人的姓名,并累计一次被投票人的得票情况,运用sql语句。也可以先在右下角的文本框中输入想要推荐投给谁之后,再点击"另外推荐"按钮去投票。投票之后,程序自动将被投票人的姓名添加到vote表中;在第二个界面,分别显示张三、李四、王五(及其他被推荐的人)各自的得票数;在第三个界面,根据查询结果,提取出姓名、票数,从而更新界面中的内容
时间: 2024-02-13 15:07:05 浏览: 88
java做的投票系统
4星 · 用户满意度95%
好的,根据您的要求,我为您提供一个简单的Java代码实现。
首先,需要使用Java连接MySQL数据库,可以使用JDBC API来实现。以下是一个简单的数据库连接代码:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection {
private static final String URL = "jdbc:mysql://localhost:3306/vote_system";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return conn;
}
}
```
在这个代码中,我们首先定义了连接数据库的URL、用户名和密码。然后,在getConnection()方法中,使用JDBC API来获取数据库连接。
接下来,我们可以创建一个Vote类,用于表示被投票人的姓名和得票数:
```java
public class Vote {
private String name;
private int count;
public Vote(String name, int count) {
this.name = name;
this.count = count;
}
public String getName() {
return name;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
```
在这个代码中,我们定义了一个Vote类,用于表示被投票人的姓名和得票数。我们可以使用该类来表示数据库中的每一行数据。
接下来,我们可以创建一个VoteDao类,用于实现对数据库的操作,包括添加投票记录、查询各个被投票人的得票数、查询某个被投票人的得票数等操作。以下是一个简单的实现:
```java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class VoteDao {
private Connection conn;
public VoteDao() {
conn = DatabaseConnection.getConnection();
}
public void addVote(String name) {
String sql = "INSERT INTO vote(name, count) VALUES (?, 1) ON DUPLICATE KEY UPDATE count = count + 1";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, name);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public List<Vote> getAllVotes() {
String sql = "SELECT * FROM vote";
List<Vote> votes = new ArrayList<>();
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
int count = rs.getInt("count");
Vote vote = new Vote(name, count);
votes.add(vote);
}
} catch (SQLException e) {
e.printStackTrace();
}
return votes;
}
public int getVoteCount(String name) {
String sql = "SELECT count FROM vote WHERE name = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, name);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
return rs.getInt("count");
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
}
```
在这个代码中,我们定义了一个VoteDao类,用于实现对数据库的操作。其中,addVote()方法用于添加投票记录,如果该被投票人已经存在,则将其得票数加一;getAllVotes()方法用于查询各个被投票人的得票数;getVoteCount()方法用于查询某个被投票人的得票数。
接下来,我们可以创建一个VoteSystem类,用于实现投票系统的界面和交互。以下是一个简单的实现:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
public class VoteSystem {
private JFrame frame;
private JPanel panel1;
private JPanel panel2;
private JPanel panel3;
private JButton button1;
private JButton button2;
private JButton button3;
private JButton button4;
private JLabel label1;
private JLabel label2;
private JLabel label3;
private JLabel label4;
private JTextField textField;
private VoteDao voteDao;
public VoteSystem() {
voteDao = new VoteDao();
frame = new JFrame("投票系统");
frame.setSize(500, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel1 = new JPanel();
panel2 = new JPanel();
panel3 = new JPanel();
frame.add(panel1, BorderLayout.NORTH);
frame.add(panel2, BorderLayout.CENTER);
frame.add(panel3, BorderLayout.SOUTH);
label1 = new JLabel("请选择被投票人:");
button1 = new JButton("张三");
button2 = new JButton("李四");
button3 = new JButton("王五");
panel1.add(label1);
panel1.add(button1);
panel1.add(button2);
panel1.add(button3);
label2 = new JLabel("推荐投票人:");
textField = new JTextField(10);
button4 = new JButton("另外推荐");
panel2.add(label2);
panel2.add(textField);
panel2.add(button4);
label3 = new JLabel("投票结果:");
panel3.add(label3);
label4 = new JLabel();
panel3.add(label4);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String name = "张三";
voteDao.addVote(name);
updateLabel();
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String name = "李四";
voteDao.addVote(name);
updateLabel();
}
});
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String name = "王五";
voteDao.addVote(name);
updateLabel();
}
});
button4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String name = textField.getText().trim();
if (!name.isEmpty()) {
voteDao.addVote(name);
updateLabel();
}
}
});
}
public void show() {
updateLabel();
frame.setVisible(true);
}
private void updateLabel() {
List<Vote> votes = voteDao.getAllVotes();
StringBuilder sb = new StringBuilder();
for (Vote vote : votes) {
sb.append(vote.getName()).append(":").append(vote.getCount()).append(" ");
}
label4.setText(sb.toString());
}
}
```
在这个代码中,我们定义了一个VoteSystem类,用于实现投票系统的界面和交互。其中,我们使用了Swing API来创建界面和组件,包括JFrame、JPanel、JLabel、JButton和JTextField等。
在构造方法中,我们首先创建了三个面板,并将它们添加到窗口的不同位置。然后,我们创建了三个标签、三个按钮和一个文本框,并将它们添加到面板中。我们使用了匿名内部类来为按钮添加事件监听器,当用户点击某个按钮时,调用VoteDao类的addVote()方法来添加投票记录,并调用updateLabel()方法来更新投票结果标签的内容。
最后,我们定义了一个show()方法来显示窗口,并定义了一个updateLabel()方法来更新投票结果标签的内容。
这个代码只是一个简单的实现,还有很多地方可以优化和改进。您可以根据实际需求进行修改和扩展。
阅读全文