java设计一个投票统计的系统,在第一个界面有三个投票按钮,被投票人分别是张三、李四、王五,点击哪个投票按钮,就在一个数据库的vote表中显示被投票人的姓名,并累计一次被投票人的得票情况,运用sql语句。也可以先在右下角的文本框中输入想要推荐投给谁之后,再点击"另外推荐"按钮去投票。投票之后,程序自动将被投票人的姓名添加到vote表中;在第二个界面,分别显示张三、李四、王五(及其他被推荐的人)各自的得票数;在第三个界面,根据查询结果,提取出姓名、票数,从而更新界面中的内容
时间: 2024-02-18 11:06:07 浏览: 182
好的,这是一个比较完整的系统,需要分为三个部分来实现,分别是投票界面、统计界面和查询界面。其中,投票界面用于投票,统计界面用于显示各个被投票人的得票数,查询界面用于查询并更新得票情况。
首先,需要创建一个数据库,包括一个名为vote的表,该表包含两个字段,分别是name和count,用于存储被投票人的姓名和得票数。
接下来,我们需要实现投票界面。在该界面上,创建三个按钮,分别代表张三、李四、王五。当用户点击某个按钮时,程序将会自动向vote表中插入被投票人的姓名,并将该人的得票数加1。如果用户需要推荐其他人,则可以在界面的右下角的文本框中输入,然后点击"另外推荐"按钮进行投票。投票完成后,程序应该会自动将被投票人的姓名添加到vote表中。
接下来,我们需要实现统计界面。在该界面上,程序将会从vote表中读取各个被投票人的得票数,并将其显示在界面上。
最后,我们需要实现查询界面。在该界面上,用户可以根据被投票人的姓名进行查询,并获取该人的得票数。用户也可以直接在该界面上修改某个被投票人的得票数,从而更新vote表中的内容。
下面是一个简单的Java代码实现,用于实现投票统计的系统:
```java
import java.sql.*;
public class VoteSystem {
public static void main(String[] args) {
try {
// 连接数据库
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/vote", "root", "password");
// 创建投票界面
VoteFrame voteFrame = new VoteFrame(conn);
// 创建统计界面
StatFrame statFrame = new StatFrame(conn);
// 创建查询界面
QueryFrame queryFrame = new QueryFrame(conn);
// 显示投票界面
voteFrame.setVisible(true);
// 关闭数据库连接
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
class VoteFrame extends JFrame implements ActionListener {
private Connection conn;
private JButton zhangSanButton, liSiButton, wangWuButton, otherButton;
private JTextField otherTextField;
private JButton voteButton;
public VoteFrame(Connection conn) {
this.conn = conn;
// 创建界面组件
zhangSanButton = new JButton("张三");
liSiButton = new JButton("李四");
wangWuButton = new JButton("王五");
otherButton = new JButton("另外推荐");
otherTextField = new JTextField(10);
voteButton = new JButton("投票");
// 添加事件监听器
zhangSanButton.addActionListener(this);
liSiButton.addActionListener(this);
wangWuButton.addActionListener(this);
otherButton.addActionListener(this);
voteButton.addActionListener(this);
// 添加组件到界面上
JPanel panel = new JPanel();
panel.add(zhangSanButton);
panel.add(liSiButton);
panel.add(wangWuButton);
panel.add(otherButton);
panel.add(otherTextField);
panel.add(voteButton);
getContentPane().add(panel);
// 设置窗口大小和位置
setTitle("投票界面");
setSize(300, 100);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
try {
// 获取被投票人的姓名
String name = "";
if (e.getSource() == zhangSanButton) {
name = "张三";
} else if (e.getSource() == liSiButton) {
name = "李四";
} else if (e.getSource() == wangWuButton) {
name = "王五";
} else if (e.getSource() == otherButton) {
name = otherTextField.getText();
}
// 将被投票人的姓名和得票数插入到数据库中
if (!name.equals("")) {
Statement stmt = conn.createStatement();
String sql = "INSERT INTO vote (name, count) VALUES ('" + name + "', 1) ON DUPLICATE KEY UPDATE count = count + 1";
stmt.executeUpdate(sql);
stmt.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
class StatFrame extends JFrame {
private Connection conn;
private JTable table;
public StatFrame(Connection conn) {
this.conn = conn;
// 从数据库中读取数据
String[] columnNames = {"姓名", "得票数"};
Object[][] rowData = new Object[3][2];
try {
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM vote WHERE name IN ('张三', '李四', '王五')";
ResultSet rs = stmt.executeQuery(sql);
int i = 0;
while (rs.next()) {
rowData[i][0] = rs.getString("name");
rowData[i][1] = rs.getInt("count");
i++;
}
rs.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
// 创建表格
table = new JTable(rowData, columnNames);
// 添加组件到界面上
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
// 设置窗口大小和位置
setTitle("统计界面");
setSize(300, 100);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class QueryFrame extends JFrame implements ActionListener {
private Connection conn;
private JLabel nameLabel, countLabel;
private JTextField nameTextField, countTextField;
private JButton queryButton, updateButton;
public QueryFrame(Connection conn) {
this.conn = conn;
// 创建界面组件
nameLabel = new JLabel("姓名:");
countLabel = new JLabel("得票数:");
nameTextField = new JTextField(10);
countTextField = new JTextField(10);
queryButton = new JButton("查询");
updateButton = new JButton("更新");
// 添加事件监听器
queryButton.addActionListener(this);
updateButton.addActionListener(this);
// 添加组件到界面上
JPanel panel = new JPanel();
panel.add(nameLabel);
panel.add(nameTextField);
panel.add(queryButton);
panel.add(countLabel);
panel.add(countTextField);
panel.add(updateButton);
getContentPane().add(panel);
// 设置窗口大小和位置
setTitle("查询界面");
setSize(300, 100);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
try {
// 查询被投票人的得票数
if (e.getSource() == queryButton) {
String name = nameTextField.getText();
if (!name.equals("")) {
Statement stmt = conn.createStatement();
String sql = "SELECT count FROM vote WHERE name = '" + name + "'";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
countTextField.setText(Integer.toString(rs.getInt("count")));
} else {
countTextField.setText("0");
}
rs.close();
stmt.close();
}
}
// 更新被投票人的得票数
if (e.getSource() == updateButton) {
String name = nameTextField.getText();
int count = Integer.parseInt(countTextField.getText());
Statement stmt = conn.createStatement();
String sql = "UPDATE vote SET count = " + count + " WHERE name = '" + name + "'";
stmt.executeUpdate(sql);
stmt.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
```
注意:上面这段代码仅为示例,实际开发中需要根据具体需求进行修改和完善。此外,由于没有对SQL注入进行处理,存在SQL注入漏洞,需要注意防范。
阅读全文