来csdn也有两年了,在这期间学了很多的知识,也跟着许多的大神做了几个小项目。但自己也在想什么时候能够有个自己的项目,之前在学校做过一个基于集合存储数据的学生信息管理系统,现在想着改进一下,于是趁着暑假做了一个小项目吧(基于mysql+jdbc+java swing的学生成绩信息管理系统)。一来是巩固自己的学习成果,二来是记录自己的学习历程,期待后面能做出更多的项目吧。
1.利用jdbc将java程序与mysql建立连接
2.利用java swing将学生信息和成绩信息显现出来
3.通过使用sql指令来实现对学生信息和成绩信息的crud(增查改删)操作
1.利用Navicat创建两个数据表(stu和classes),同时两个数据表用外键约束连接(
CONSTRAINT `fk_classes_stu` FOREIGN KEY (`class_id`) REFERENCES `stu` (`stu_num`) ON DELETE CASCADE
)
2.使用sql指令对数据表中数据进行增删改查,并通过java swing显示
3.查询所有学生信息,利用连接查询将两个数据表的信息一并显示
账号和密码通过HashMap来存储,账号为键密码为值,利用其基本方法来添加账号密码(注册),以及登录。
package view; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; import java.util.Map; public class MainView extends JFrame { private Mapuserhashmap=new HashMap<>(); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JPanel p4=new JPanel(); JLabel welcome=new JLabel("欢迎来到学生信息管理系统"); JLabel username=new JLabel("账号:"); JLabel password=new JLabel("密码:"); JTextField usernametext=new JTextField(10); JPasswordField passwordField=new JPasswordField(10); JButton confirm=new JButton("确认"); JButton exit=new JButton("退出"); JButton register=new JButton("注册"); public MainView() { this.setTitle("学生信息管理系统"); this.setSize(800, 500); this.setLayout(new GridLayout(4, 1,10,10)); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); p4.add(welcome); p1.add(username); p1.add(usernametext); p2.add(password); p2.add(passwordField); p3.add(confirm); p3.add(register); p3.add(exit); this.add(p4); this.add(p1); this.add(p2); this.add(p3); register.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==register){ if(userhashmap.containsKey(usernametext.getText())){ JOptionPane.showMessageDialog(null,"注册失败,您的账号已存在","警告",JOptionPane.WARNING_MESSAGE); return; } userhashmap.put(usernametext.getText(),passwordField.getText()); JOptionPane.showMessageDialog(null,"注册成功","通知",JOptionPane.INFORMATION_MESSAGE); } } }); confirm.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == confirm) { if (userhashmap.containsKey(usernametext.getText())) { if (userhashmap.get(usernametext.getText()).equals(passwordField.getText())) { JOptionPane.showMessageDialog(null,"登陆成功","通知",JOptionPane.INFORMATION_MESSAGE); dispose(); ManagerView mv=new ManagerView(); mv.setVisible(true); } else { JOptionPane.showMessageDialog(null,"密码错误","警告",JOptionPane.WARNING_MESSAGE); } } else{ JOptionPane.showMessageDialog(null,"该用户不存在","警告",JOptionPane.WARNING_MESSAGE); } } } }); exit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); } public static void main(String[] args) { MainView m=new MainView(); m.setVisible(true); } }
使用GridBagLayout布局设置左边为学生信息管理的按钮,右边为成绩信息管理的按钮
package view; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ManagerView extends JFrame{ JButton insert=new JButton("添加学生信息"); JButton delete=new JButton("删除学生"); JButton update=new JButton("学生信息修改"); JButton query=new JButton("查询学生信息"); JButton queryall=new JButton("查询所有学生信息"); JButton insertclass=new JButton("添加成绩信息"); JButton deleteclass=new JButton("删除成绩信息"); JButton updateclass=new JButton("修改成绩信息"); JLabel labelstu=new JLabel("学生管理系统");//设置“学生管理系统”标签 JLabel labelclass=new JLabel("成绩管理系统");//设置“成绩管理系统”标签 public ManagerView(){ this.setTitle("学生成绩管理"); this.setSize(1200,500); this.setLayout(new GridBagLayout()); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置每个按钮长,高为140,120 Dimension dimension=new Dimension(140,30);//通过setPreferredSize()方法来设置按钮和标签大小,但要传入Dimension对象 insert.setPreferredSize(dimension); delete.setPreferredSize(dimension); update.setPreferredSize(dimension); query.setPreferredSize(dimension); queryall.setPreferredSize(dimension); insertclass.setPreferredSize(dimension); deleteclass.setPreferredSize(dimension); updateclass.setPreferredSize(dimension); labelstu.setPreferredSize(dimension); labelclass.setPreferredSize(dimension); GridBagConstraints constraintsleft=new GridBagConstraints(); constraintsleft.gridx = 0; // 列为0 constraintsleft.gridy = GridBagConstraints.RELATIVE; // 按钮的行相对于前一个按钮的行 constraintsleft.anchor = GridBagConstraints.CENTER; // 设置水平方向上的位置居中 constraintsleft.fill = GridBagConstraints.HORIZONTAL; // 填充水平方向 /*constraintsleft.weightx = 0.5; // 水平方向上的权重为0.5*/ constraintsleft.insets = new Insets(5, 5, 5, 200); // 设置按钮的内边距 constraintsleft.ipadx = 10; this.add(labelstu,constraintsleft); this.add(insert,constraintsleft); this.add(delete,constraintsleft); this.add(update,constraintsleft); this.add(query,constraintsleft); this.add(queryall,constraintsleft); GridBagConstraints constraintsright=new GridBagConstraints(); constraintsright.gridx=1; constraintsleft.gridy = GridBagConstraints.RELATIVE; // 按钮的行相对于前一个按钮的行 constraintsleft.anchor = GridBagConstraints.CENTER; // 设置水平方向上的位置居中 constraintsleft.fill = GridBagConstraints.HORIZONTAL; // 填充水平方向 /*constraintsleft.weightx = 0.5; // 水平方向上的权重为0.5*/ constraintsleft.insets = new Insets(5, 200, 5, 5); // 设置按钮的内边距 constraintsleft.ipadx = 10; this.add(labelclass,constraintsright); this.add(insertclass,constraintsright); this.add(deleteclass,constraintsright); this.add(updateclass,constraintsright); insert.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { InsertStuView insertStuView=new InsertStuView(); insertStuView.setVisible(true); } }); delete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DeleteStuView deleteStuView=new DeleteStuView(); deleteStuView.setVisible(true); } }); update.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { UpdateStuview updateStuview=new UpdateStuview(); updateStuview.setVisible(true); } }); query.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { QueryStuView queryStuView=new QueryStuView(); queryStuView.setVisible(true); } }); insertclass.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { InsertClassView insertClassView=new InsertClassView(); insertClassView.setVisible(true); } }); deleteclass.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DeleteClassView deleteClassView=new DeleteClassView(); deleteClassView.setVisible(true); } }); updateclass.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { UpdateClassView updateClassView =new UpdateClassView(); updateClassView.setVisible(true); } }); /* p1.add(insert); p2.add(delete); p3.add(query); p4.add(update); p5.add(orderby);*/ queryall.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { QueryAllView queryAllView=new QueryAllView(); queryAllView.setVisible(true); } }); } }
package view; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import service.StuManage; public class InsertStuView extends JFrame { JLabel labelname=new JLabel("请输入您的姓名"); JLabel labelgender=new JLabel("请输入您的性别"); JLabel labelid=new JLabel("请输入您的学号"); JTextField textname=new JTextField(15); JTextField textgender=new JTextField(15); JTextField textid=new JTextField(15); JButton confirm=new JButton("确定"); JButton cancel=new JButton("取消"); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JPanel p4=new JPanel(); public InsertStuView(){ this.setSize(500,300); this.setTitle("请添加学生信息"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new GridLayout(4,1,10,10)); p1.add(labelname); p1.add(textname); p2.add(labelgender); p2.add(textgender); p3.add(labelid); p3.add(textid); p4.add(confirm); p4.add(cancel); this.add(p1); this.add(p2); this.add(p3); this.add(p4); confirm.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { StuManage.insertStudata(textname.getText(),textgender.getText(),textid.getText()); } catch (Exception ex) { JOptionPane.showMessageDialog(null,"添加失败","警告",JOptionPane.WARNING_MESSAGE); } dispose(); } }); cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dispose(); } }); } }
package view; import service.StuManage; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class DeleteStuView extends JFrame { JLabel labelid=new JLabel("请输入您想删除学生的学号"); JTextField textField=new JTextField(15); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JButton confirm=new JButton("确定"); JButton cancel=new JButton("取消"); public DeleteStuView(){ this.setSize(500,300); this.setLayout(new GridLayout(2,1,0,0)); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("删除学生"); p1.add(labelid); p1.add(textField); p2.add(confirm); p2.add(cancel); p1.setBorder(BorderFactory.createEmptyBorder(70,0,0,0)); this.add(p1); this.add(p2); confirm.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try{ StuManage.deleteStudata(textField.getText()); }catch(Exception ex){ JOptionPane.showMessageDialog(null,"删除失败","警告",JOptionPane.WARNING_MESSAGE); } dispose(); } }); cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dispose(); } }); } }
package view; import service.StuManage; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class UpdateStuview extends JFrame{ JLabel labeloldid=new JLabel("请输入您要修改学生的学号"); JLabel labelname=new JLabel("请输入您要修改后的姓名"); JLabel labelgender=new JLabel("请输入您要修改后的性别"); JLabel labelid=new JLabel("请输入您要修改后的学号"); JTextField textFieldoldid=new JTextField(15); JTextField textname=new JTextField(15); JTextField textgender=new JTextField(15); JTextField textid=new JTextField(15); JButton confirm=new JButton("确定"); JButton cancel=new JButton("取消"); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JPanel p4=new JPanel(); JPanel p5=new JPanel(); public UpdateStuview(){ this.setSize(500,300); this.setTitle("请修改学生信息"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new GridLayout(5,1,10,10)); p1.add(labeloldid); p1.add(textFieldoldid); p2.add(labelname); p2.add(textname); p3.add(labelgender); p3.add(textgender); p4.add(labelid); p4.add(textid); p5.add(confirm); p5.add(cancel); this.add(p1); this.add(p2); this.add(p3); this.add(p4); this.add(p5); confirm.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { StuManage.updateStudata(textname.getText(),textgender.getText(),textid.getText(),textFieldoldid.getText()); } catch (Exception ex) { JOptionPane.showMessageDialog(null,"修改失败","警告",JOptionPane.WARNING_MESSAGE); } dispose(); } }); cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dispose(); } }); } }
package view; import service.ClassManage; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class QueryStuView extends JFrame { JLabel id=new JLabel("请输入学生的id"); JTextField textid=new JTextField(15); JButton confirm=new JButton("确定"); JButton cancel=new JButton("取消"); JLabel labelstu=new JLabel("学生信息表"); JLabel labelscore=new JLabel("成绩信息表"); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JPanel p3=new JPanel(); JPanel p4=new JPanel(); String[] stucolumnname={"姓名","性别","学号"}; String[] scorecolumnname={"学科","分数","教师"}; public QueryStuView(){ this.setLayout(new GridLayout(4,4,10,10)); this.setTitle("学生信息查询"); this.setSize(1000,700); DefaultTableModel stumodel=new DefaultTableModel(); DefaultTableModel scoremodel=new DefaultTableModel(); stumodel.setColumnIdentifiers(stucolumnname); scoremodel.setColumnIdentifiers(scorecolumnname); JTable stutable = new JTable(stumodel); JTable scoretable=new JTable(scoremodel); JScrollPane scrollstu=new JScrollPane(stutable); JScrollPane scrollscore=new JScrollPane(scoretable); p1.setBorder(BorderFactory.createEmptyBorder(70,0,0,0)); p1.add(id); p1.add(textid); p2.add(confirm); p2.add(cancel); p3.add(labelstu); p3.add(scrollstu); p4.add(labelscore); p4.add(scrollscore); this.add(p1); this.add(p2); this.add(p3); this.add(p4); confirm.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try{ stumodel.setRowCount(0); scoremodel.setRowCount(0); ClassManage.querystu(textid.getText(),stumodel,scoremodel); }catch(Exception ex){ JOptionPane.showMessageDialog(null,"查找失败","警告",JOptionPane.WARNING_MESSAGE); } } }); cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dispose(); } }); } }
package view; import service.ClassManage; import javax.swing.*; import javax.swing.table.DefaultTableModel; public class QueryAllView extends JFrame{ JLabel text=new JLabel("学生信息查询"); DefaultTableModel model=new DefaultTableModel(); JTable queryall=new JTable(model); JScrollPane jScrollPane=new JScrollPane(queryall); JPanel p1=new JPanel(); JPanel p2=new JPanel(); public QueryAllView(){ this.setTitle("学生成绩查询"); this.setSize(1000,700); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); String[] columnname={"姓名","性别","学号","科目","分数"}; model.setColumnIdentifiers(columnname); p1.add(text); p2.add(jScrollPane); this.add(p1); this.add(p2); try{ ClassManage.queryall(model); }catch(Exception ex){ JOptionPane.showMessageDialog(null,"查询失败","警告",JOptionPane.WARNING_MESSAGE); } } }
花了三四天的时间做了个小项目,基本上我想要做的功能已基本实现了,能够基本实现对学生信息的增删改查操作。同时,我学到了很多之前没学到的知识,也对近期学的知识进行了巩固和复习。不过我是学完之后再做,所以可能有些bug和小问题,也欢迎各位来提问指正问题,也期待自己能够作出更多更优质的项目。如果想要源码可以直接私信或者通过百度网盘下载源码。
提取码:0718
上一篇:【MySQL】不就是事务