学生成绩管理系统(Java)

article/2025/11/9 23:17:46

目录

 

 

 ​编辑

需求分析:

登录界面(LoginPanel)

主界面(MainApp)

重写

1.班级重写(cs.practics.bean.BjBean.java)

2.课程重写(cs.practics.bean.CourseBean.java)

3.成绩重写(cs.practics.bean.MarkBean.java)

4.学生重写(cs.practics.bean.StudentBean.java)

班级管理

1.班级增加(cs.practics.bj.BJAddPanel)

2.班级查询(cs.practics.bj.BjFindPanel)

3.班级服务(cs.practics.service.BjService.java)

4.成绩添加(MarkInputPanel.java)

5.班级查询(MarkSelectPanel.java)

6.学生添加(StudentAddPanel.java)

7.学生查询(StudentSelectPanel.java)

课程管理

1.课程添加(cs.practics.course.CouresAddPanel.java)

2.课程查询(cs.practics.course.CouresSelectPanel.java)

服务

1.班级服务(cs.practics.service.BjService.java)

2.课程服务(cs.practics.service.CourseService.java)

3.成绩服务(cs.practics.service.MarkService.java)

4.学生服务(cs.practics.service.StudentService.java)

5.工具类(cs.practics.service.FileUtil.java)


 

 

需求分析:

1. 产品介绍

本学生成绩管理系统模块是为了实现学校人力资源的优化和学生成绩管理的科学管理而设计的,通过试用本系统,可以更加有效的管理学生成绩信息,其中包括学生的基本信息,成绩信息并且具有信息的增加,查询,修改等功能。

2. 产品面向的用户群体

本系统主要面向教师和学生。

(1)教师:登录管理、用户管理、成绩管理等。

(2)学生:主要使用的业务模块包括系统登录、查询成绩。

 

3. 产品应当遵循的标准或规范

(1)专业编号遵循国家统计规范

(2)数据库的设计遵循本项目要求的统一设计规范。

4. 产品的范围

本项目主要分为成绩管理、成绩查询设计管理、登录管理、学生管理。

5. 产品中的角色

角色名称

职责描述

教师

管理系统中的基础数据以及系统设置

学生

登陆系统之后,以及查看自己的成绩

6. 产品的功能需求

6.1 功能性需求分类

 

 

功能类别

功能名称

描述

登录功能

学生登录

学生用户登录信息

教师登录

教师用户登录信息

班级管理

查询

查询班级信息

新增

新增班级信息

修改

修改班级信息

删除

删除班级信息

学生管理

查询

查询学生信息

新增

新增学生信息

修改

修改学生信息

删除

删除学生信息

成绩管理

成绩查询

查询学生的成绩信息

成绩录入

录入学生的成绩

成绩管理

修改学生的成绩

成绩查询统计

查询课程成绩及平均分

按班级分组查询课程及平均分

学生成绩查询

查询成绩

学生登录账户查询自己的每门成绩

6.2功能层次结构图

2f7273cdfad8975a8955c25f0bb16071.gif

正在上传…重新上传取消

                                

 

7. 产品的非功能性需求

7.1 用户界面需求

需求名称

详细要求

整体风格

以蓝色为主色调

兼容性

能在主流浏览器(火狐、谷歌、IE8+、360浏览器)上运行

 

 

 

 

 

 

 

 

7.2 软硬件环境需求

需求名称

详细要求

开发语言

Java或.NET

运行环境

Jdk1.6+或.NET Framework 3.5以上

数据库

Mysql5.0或者SqlServer 2005以上

操作系统

Windows Server2008

 

 

 

 

7.3 产品质量需求

主要质量属性

详细要求

正确性

无数据计算错误,无流程错误

健壮性

程序出错后,系统能正常捕获异常,不会导致程序终止运行

可靠性

系统支持7*24无间断运行,不会因系统功能的复杂运算而导致系统崩溃

性能、效率

数据请求在0.2S内返回

易用性

功能使用,操作简单,避免繁琐的逻辑设定

清晰性

功能结果及名称清晰,避免用户误解

安全性

用户必须成功登陆后,根据权限才可使用对应的功能

可扩展性

提供良好的系统接口,支持后续功能的开发扩展

兼容性

兼容主流浏览器(火狐、谷歌、IE8+、360浏览器)

可移植性

能较好部署到其他版本的Windows操作系统上

 

 

8. 其它需求

下面开始代码的分布以及书写

登录界面(LoginPanel)

package cs.practics;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;@SuppressWarnings("serial")
public class LoginPanel extends JPanel {private JTextField txtUserName;private JTextField txtPwd;private JButton btnOk;private JButton btnQuit;@SuppressWarnings("unused")private MainApp parent;public LoginPanel(MainApp parent){this.parent = parent;setLayout(null);JLabel jLabel = new JLabel("用户名:");jLabel.setBounds(500, 200, 70, 30);add(jLabel);txtUserName = new JTextField();txtUserName.setBounds(570, 200, 200, 30);add(txtUserName);JLabel jLabel2 = new JLabel("密码:");jLabel2.setBounds(500, 250, 70, 30);add(jLabel2);txtPwd = new JTextField();txtPwd.setBounds(570, 250, 200, 30);add(txtPwd);btnOk= new JButton("确定");btnOk.setBounds(580, 300, 80, 30);add(btnOk);btnOk.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (txtUserName.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "用户名不能为空", "错误", JOptionPane.ERROR_MESSAGE);return ;}if (txtPwd.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "密码不能为空", "错误", JOptionPane.ERROR_MESSAGE);return ;}if (txtUserName.getText().equals("1") && txtPwd.getText().equals("1")){JOptionPane.showMessageDialog(null, "登录成功!");parent.loginSuccess();}else{JOptionPane.showMessageDialog(null, "失败成功!");}}});btnQuit = new JButton("退出");btnQuit.setBounds(680, 300, 80, 30);add(btnQuit);btnQuit.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {parent.quit();}});}}

主界面(MainApp)

​
package cs.practics;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;import cs.practics.bj.BJAddPanel;import cs.practics.bj.BjFindPanel;
import cs.practics.bj.MarkInputPanel;
import cs.practics.bj.MarkSelectPanel;
import cs.practics.bj.StudentAddPanel;
import cs.practics.bj.StudentSelectPanel;
import cs.practics.course.CourseAddPanel;
import cs.practics.course.CourseSelectPanel;@SuppressWarnings("serial")
public class MainApp extends JFrame implements ActionListener {@SuppressWarnings("unused")private static final long seriaLVersionUID = -2550337629393921238L;private JMenuBar menuBar;private JMenu courseMenu;private JMenu bjMenu;private JMenu markMenu;private JMenu studentMenu;@SuppressWarnings("unused")private JMenuItem[] courseMenuItems;@SuppressWarnings("unused")private JMenuItem[] bjMenuItems;@SuppressWarnings("unused")private JMenuItem[] markMenuItems;@SuppressWarnings("unused")private JMenuItem[] studentMenuItems;private JPanel curPanel = null;public MainApp() {setTitle("学生成绩管理系统");curPanel = new LoginPanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);setSize(1600, 900);setLocationRelativeTo(null);setVisible(true);initMenu();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}private void initMenu() {menuBar = new JMenuBar();this.setJMenuBar(menuBar);menuBar.setVisible(false);bjMenu = new JMenu("班级管理");String[] op = { "新增班级", "查询班级"};initMenuItem(bjMenu, op);menuBar.add(bjMenu);courseMenu = new JMenu("课程管理");op = new String[]{ "新增课程", "查询课程"};initMenuItem(courseMenu, op);menuBar.add(courseMenu);studentMenu = new JMenu("学生管理");op = new String[]{ "新增学生", "学生查询"};initMenuItem(studentMenu, op);menuBar.add(studentMenu);markMenu = new JMenu("成绩管理");op = new String[]{ "成绩查询", "录入成绩"};initMenuItem(markMenu, op);menuBar.add(markMenu);}private void initMenuItem(JMenu menu, String[] opers) {JMenuItem[] menuItems = new JMenuItem[opers.length];for (int i = 0; i < opers.length; i++) {menuItems[i] = new JMenuItem(opers[i]);menuItems[i].addActionListener(this);menuItems[i].setActionCommand(menu.getActionCommand() + "-" + opers[i]);menu.add(menuItems[i]);}}@Overridepublic void actionPerformed(ActionEvent e) {removePanel();if ("课程管理-新增课程".equals(e.getActionCommand())){curPanel = new CourseAddPanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);refresh();} else if ("班级管理-新增班级".equals(e.getActionCommand())){curPanel = new BJAddPanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);refresh();}else if ("班级管理-查询班级".equals(e.getActionCommand())){curPanel = new BjFindPanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);refresh();}/*else if ("班级管理-修改班级".equals(e.getActionCommand())){curPanel = new BjDeletePanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);refresh();}*/else if ("课程管理-查询课程".equals(e.getActionCommand())){curPanel = new CourseSelectPanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);refresh();}else if ("学生管理-新增学生".equals(e.getActionCommand())){curPanel = new StudentAddPanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);refresh();}else if ("学生管理-学生查询".equals(e.getActionCommand())){curPanel = new StudentSelectPanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);refresh();}else if ("成绩管理-录入成绩".equals(e.getActionCommand())){curPanel = new MarkInputPanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);refresh();}else if ("成绩管理-成绩查询".equals(e.getActionCommand())){curPanel = new MarkSelectPanel(this);getContentPane().add(curPanel, BorderLayout.CENTER);refresh();}}public void removePanel() {if (curPanel != null) {remove(curPanel);}curPanel = null;}public void refresh(){getContentPane().validate();getContentPane().repaint();}public void loginSuccess(){menuBar.setVisible(true);removePanel();refresh();}public void quit(){System.exit(0);}public static void main(String[] args) {new MainApp();}}​

重写

1.班级重写(cs.practics.bean.BjBean.java)

package cs.practics.bean;import java.io.Serializable;@SuppressWarnings("serial")
public class BjBean implements Serializable {private String BjID;private String Bjname;public String getBjID() {return BjID;}public void setBjID(String bjID) {BjID = bjID;}public String getBjname() {return Bjname;}public void setBjname(String bjname) {Bjname = bjname;}public String toString() {return Bjname;}public String getBjName() {// TODO Auto-generated method stubreturn Bjname;}}

2.课程重写(cs.practics.bean.CourseBean.java)

package cs.practics.bean;import java.io.Serializable;@SuppressWarnings("serial")
public class CourseBean implements Serializable{private String courseID;private String courseName;public String getCourseID() {return courseID;}public void setCourseID(String courseID) {this.courseID = courseID;}public String getCourseName() {return courseName;}public void setCourseName(String courseName) {this.courseName = courseName;}public String toString(){return this.courseName;}}

3.成绩重写(cs.practics.bean.MarkBean.java)

package cs.practics.bean;import java.io.Serializable;
import java.math.BigDecimal;public class MarkBean implements Serializable{private static final long serialVersionUID = -6391917037783889667L;private String studentID;private String studentName;private String courseID;private String courseName;private String bjID;private String bjName;private BigDecimal mark;public String getStuName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public String getCourseName() {return courseName;}public void setCourseName(String courseName) {this.courseName = courseName;}public String getBjID() {return bjID;}public void setBjID(String bjID) {this.bjID = bjID;}public String getBjName() {return bjName;}public void setBjName(String bjName) {this.bjName = bjName;}public String getStudentID() {return studentID;}public void setStudentID(String studentID) {this.studentID = studentID;}public String getCourseID() {return courseID;}public void setCourseID(String courseID) {this.courseID = courseID;}public BigDecimal getMark() {return mark;}public void setMark(BigDecimal mark) {this.mark = mark;}public Object getStudentName() {// TODO Auto-generated method stubreturn studentName;}}

4.学生重写(cs.practics.bean.StudentBean.java)

package cs.practics.bean;import java.io.Serializable;
import java.math.BigDecimal;public class MarkBean implements Serializable{private static final long serialVersionUID = -6391917037783889667L;private String studentID;private String studentName;private String courseID;private String courseName;private String bjID;private String bjName;private BigDecimal mark;public String getStuName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public String getCourseName() {return courseName;}public void setCourseName(String courseName) {this.courseName = courseName;}public String getBjID() {return bjID;}public void setBjID(String bjID) {this.bjID = bjID;}public String getBjName() {return bjName;}public void setBjName(String bjName) {this.bjName = bjName;}public String getStudentID() {return studentID;}public void setStudentID(String studentID) {this.studentID = studentID;}public String getCourseID() {return courseID;}public void setCourseID(String courseID) {this.courseID = courseID;}public BigDecimal getMark() {return mark;}public void setMark(BigDecimal mark) {this.mark = mark;}public Object getStudentName() {// TODO Auto-generated method stubreturn studentName;}}

班级管理

1.班级增加(cs.practics.bj.BJAddPanel)

package cs.practics.bj;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;import cs.practics.bean.BjBean;
import cs.practics.service.BjService;@SuppressWarnings({ "serial", "unused" })
public class BJAddPanel extends JPanel {private JTextField txtID;private JTextField txtName;private JButton btnOk;private JButton btnCancel;private JFrame parent;public BJAddPanel (JFrame parent) {this.parent = parent;setLayout(null);JLabel jLabel = new JLabel("班级ID:");jLabel.setBounds(500, 200, 70, 30);add(jLabel);txtID = new JTextField();txtID.setBounds(570, 200, 200, 30);add(txtID);JLabel jLabel2 = new JLabel("班级名称:");jLabel2.setBounds(500, 250, 70, 30);add(jLabel2);txtName = new JTextField();txtName.setBounds(570, 250, 200, 30);add(txtName);btnOk = new JButton("确定");btnOk.setBounds(520, 300, 80, 30);add(btnOk);btnOk.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (txtID.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "班级ID不能为空", "错误", JOptionPane.ERROR_MESSAGE);return;}if (txtName.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "班级名称不能为空", "错误", JOptionPane.ERROR_MESSAGE);return;}BjBean BjBean = new BjBean();BjBean.setBjID(txtID.getText());BjBean.setBjname(txtName.getText());Integer rtn = BjService.bjService.add(BjBean);if (rtn != 1) {JOptionPane.showMessageDialog(null, txtID.getText() + "." + txtName.getText() + "添加失败,班级ID已经存在", "错误", JOptionPane.ERROR_MESSAGE);} else {JOptionPane.showMessageDialog(null, "添加成功!");txtID.setText("");txtName.setText("");}}});btnCancel = new JButton("取消");btnCancel.setBounds(680,300,80,30);add(btnCancel);btnCancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {cancel();}});}protected void cancel(){parent.remove(this);parent.validate();parent.repaint();}
}

2.班级查询(cs.practics.bj.BjFindPanel)

package cs.practics.bj;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;import cs.practics.bean.BjBean;
import cs.practics.service.BjService;public class BjFindPanel extends JPanel {private static final long serialVersionUID=3254423774866407987L;private JTextField txtID;private JTextField txtSelID;private JTextField txtName;//private JTextField txtBjName;private JButton btnOk;private JButton btnCancel;private JFrame parent;public BjFindPanel  (JFrame parent) {this.parent = parent;setLayout(null);JLabel jLabel = new JLabel("查询班级的ID:");jLabel.setBounds(500, 200, 70, 30);add(jLabel);txtSelID = new JTextField();txtSelID.setBounds(570, 200, 200, 30);add(txtSelID);JLabel jLabel1 = new JLabel("班级ID:");jLabel1.setBounds(500, 250, 70, 30);add(jLabel1);txtID = new JTextField();txtID.setBounds(570, 250, 200, 30);add(txtID);txtID.setEditable(false);JLabel jLabel21 = new JLabel("班级名:");jLabel21.setBounds(500, 300, 70, 30);add(jLabel21);txtName = new JTextField();txtName.setBounds(570, 300, 200, 30);add(txtName);txtName.setEditable(false);btnOk = new JButton("确定");btnOk.setBounds(520, 350, 80, 30);add(btnOk);btnOk.addActionListener(new ActionListener() {@SuppressWarnings("unused")@Overridepublic void actionPerformed(ActionEvent e) {/*BjBean bjBean = (BjBean )jComboBox.getSelectedItem();System.out.println(bjBean.getBjID()+","+bjBean.getBjname());*/if (txtSelID.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "班级ID不能为空", "错误", JOptionPane.ERROR_MESSAGE);return;}BjBean BjBean = new BjBean();BjBean.setBjID(txtSelID.getText());BjBean rtn = BjService.bjService.select(BjBean);if (rtn == null) {JOptionPane.showMessageDialog(null, "查询失败,班级ID不存在", "错误", JOptionPane.ERROR_MESSAGE);txtSelID.setText("");txtID.setText("");txtName.setText("");} else {txtID.setText(rtn.getBjID());txtName.setText(rtn.getBjName());//txtBjName.setText(rtn.getBjName());txtSelID.setText("");}}});btnCancel = new JButton("取消");btnCancel.setBounds(680,350,80,30);add(btnCancel);btnCancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {cancel();}});}protected void cancel(){parent.remove(this);parent.validate();parent.repaint();}}

3.班级服务(cs.practics.service.BjService.java)

package cs.practics.service;import java.beans.beancontext.BeanContext;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import cs.practics.bean.BjBean;
import cs.practics.bean.StudentBean;public class BjService {public static final String dz1 = "E:/java实训/bj/data/data.data";private List<BjBean> list = null;public static BjService bjService = new BjService();private  BjService(){try{list = FileUtil.loadData(dz1);}catch (ClassNotFoundException| IOException e){e.printStackTrace();}if(list==null)list = new ArrayList<>();}public BjBean searchByBjID(String bjID){for(BjBean bjBean:list){if(bjBean.getBjID().equals(bjID)) return bjBean;}return null;}public int add(BjBean bean){try {BjBean tmp = searchByBjID(bean.getBjID());if (tmp !=null) return -2;list.add(bean);FileUtil.writeData(list,dz1);return 1;}catch (Exception e){e.printStackTrace();return -1;}}public List<BjBean> list() {// TODO Auto-generated method stubreturn list;}public Integer add(StudentBean studentBean) {// TODO Auto-generated method stubreturn add(studentBean);}public BjBean select(BjBean bjBean) {// TODO Auto-generated method stubBjBean rtn = searchByBjID(bjBean.getBjID());if(rtn != null) {return rtn;}else {return null;}}
}

4.成绩添加(MarkInputPanel.java)

package cs.practics.bj;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;import cs.practics.bean.BjBean;
import cs.practics.bean.CourseBean;
import cs.practics.bean.MarkBean;
import cs.practics.service.BjService;
import cs.practics.service.CourseService;
import cs.practics.service.MarkService;public class MarkInputPanel extends JPanel {
private static final long serialVersionUID = 3254423774866407987L;protected static final String bjBean = null;private JButton btnOK;private JButton btnCancel;private JButton btnSubmit;private JFrame parent;private JComboBox<BjBean> jComboBox;private JComboBox<CourseBean> jComboBox2;private JTable jTable;private JScrollPane jScrollPane=null;public MarkInputPanel(JFrame parent) {this.parent = parent;setLayout(null);
//		setLayout(new BorderLayout());JLabel jbl2 = new JLabel("班级:");jbl2.setBounds(180, 10, 70, 30);add(jbl2);List<BjBean> classes = BjService.bjService.list();if (classes != null) {BjBean[] arr = classes.toArray(new BjBean[0]);jComboBox = new JComboBox<>(arr);}else {jComboBox = new JComboBox<>();}jComboBox.setBounds(250, 10, 200, 30);add(jComboBox);JLabel jbl3 = new JLabel("课程:");jbl3.setBounds(480, 10, 70, 30);add(jbl3);List<CourseBean> courses = CourseService.courseService.list();if (courses != null) {CourseBean[] arr = courses.toArray(new CourseBean[0]);jComboBox2 = new JComboBox<>(arr);}else {jComboBox2 = new JComboBox<>();}jComboBox2.setBounds(550, 10, 200, 30);add(jComboBox2);btnOK = new JButton("查询");btnOK.setBounds(780, 10, 80, 30);add(btnOK);btnOK.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {BjBean bjBean = (BjBean) jComboBox.getSelectedItem();CourseBean courseBean = (CourseBean) jComboBox2.getSelectedItem();if (bjBean == null || courseBean == null) {JOptionPane.showMessageDialog(null, "没有选班级或课程", "错误", JOptionPane.ERROR_MESSAGE);return;}List<MarkBean> marks = MarkService.markService.search(bjBean.getBjID(), courseBean);if (marks != null && marks.size() != 0) {Object[] columnNames = { "学号", "姓名", "班级ID", "班级", "课程ID", "课程名", "成绩" };Object[][] rowData = new Object[marks.size()][columnNames.length];for (int i = 0; i < marks.size(); i++) {MarkBean markBean = marks.get(i);rowData[i] = new Object[] { markBean.getStudentID(),markBean.getStudentName(), markBean.getBjID(),markBean.getBjName(), markBean.getCourseID(), markBean.getCourseName(), markBean.getMark() };}DefaultTableModel model = new DefaultTableModel(rowData, columnNames) {private static final long serialVersionUID = -4509445279793353632L;public boolean isCellEditable(int rowIndex, int columnIndex) {if (columnIndex == 6)return true;return false;}public void setValueAt(Object value, int rowIndex, int columnIndex) {if (columnIndex == 6) {try {new BigDecimal("" + value);super.setValueAt(value, rowIndex, columnIndex);} catch (Exception e) {JOptionPane.showMessageDialog(null, "只能输入数字", "错误", JOptionPane.ERROR_MESSAGE);}}}};jTable = new JTable(model);jTable.setRowHeight(30);jTable.setRowMargin(5);jTable.setShowHorizontalLines(true);jTable.setShowVerticalLines(true);if (jScrollPane!=null){remove(jScrollPane);}jScrollPane = new JScrollPane(jTable);add(jScrollPane);jScrollPane.setBounds(40, 60, 1200, 500);}}});btnCancel = new JButton("取消");btnCancel.setBounds(870, 10, 80, 30);add(btnCancel);btnCancel.addActionListener(e -> cancel());btnSubmit = new JButton("提交");btnSubmit.setBounds(960, 10, 80, 30);add(btnSubmit);btnSubmit.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {List<MarkBean> marks = new ArrayList<>();for (int i = 0; i < jTable.getRowCount(); i++) {MarkBean markBean = new MarkBean();markBean.setStudentID(""+jTable.getValueAt(i, 0));markBean.setStudentName(""+jTable.getValueAt(i, 1));markBean.setBjID(""+jTable.getValueAt(i, 2));markBean.setBjName(""+jTable.getValueAt(i, 3));markBean.setCourseID(""+jTable.getValueAt(i, 4));markBean.setCourseName(""+jTable.getValueAt(i, 5));markBean.setMark(new BigDecimal(""+jTable.getValueAt(i,6)));marks.add(markBean);}MarkService.markService.sumbit(marks);JOptionPane.showMessageDialog(null, "提交成功!");}});}protected void cancel() {parent.remove(this);parent.validate();parent. Repaint();}}

5.班级查询(MarkSelectPanel.java)

package cs.practics.bj;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;import cs.practics.bean.MarkBean;
import cs.practics.service.MarkService;@SuppressWarnings("serial")
public class MarkSelectPanel extends JPanel {private JTextField txtID;private JButton btnOk;private JButton btnCancel;private JFrame parent;private JTable jTable;private JScrollPane jScrollPane=null;public MarkSelectPanel(JFrame parent){this.parent = parent;setLayout(null);JLabel jLabel = new JLabel("学生ID:");jLabel.setBounds(500,10,70,30);add(jLabel);txtID = new JTextField();txtID.setBounds(550,10,200,30);add(txtID);btnOk = new JButton("查询" );btnOk.setBounds(780,10,80,30);add(btnOk);btnOk.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if(txtID.getText().isEmpty()){JOptionPane.showMessageDialog(null,"学生ID不能为空","错误",JOptionPane.ERROR_MESSAGE);return;}List<MarkBean> smb = MarkService.markService.searchByStuID(txtID.getText());Object[] columnNames = {"学生名","课程ID", "课程名", "成绩" };Object[][] rowData = new Object[smb.size()][columnNames.length];if(smb.size()!=0){for (int i=0;i<smb.size();i++){MarkBean markBean = smb.get(i);rowData [i]=new Object[]{markBean.getStudentName(),markBean.getCourseID(),markBean.getCourseName(),markBean.getMark()};}DefaultTableModel model = new DefaultTableModel(rowData, columnNames) {private static final long serialVersionUID = -4509445279793353632L;public boolean isCellEditable(int rowIndex, int columnIndex) {return false;}};jTable = new JTable(model);jTable.setRowHeight(30);jTable.setRowMargin(5);jTable.setShowHorizontalLines(true);jTable.setShowVerticalLines(true);if (jScrollPane!=null){remove(jScrollPane);}jScrollPane = new JScrollPane(jTable);add(jScrollPane);jScrollPane.setBounds(200, 60, 800, 200);}else {JOptionPane.showMessageDialog(null, "没有成绩记录,查询失败!", "错误", JOptionPane.ERROR_MESSAGE);}}});btnCancel = new JButton("取消");btnCancel.setBounds(870, 10, 80, 30);add(btnCancel);btnCancel.addActionListener(e -> cancel());}protected void cancel() {parent.remove(this);parent.validate();parent.repaint();}}

6.学生添加(StudentAddPanel.java)

package cs.practics.bj;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;import cs.practics.bean.BjBean;
import cs.practics.bean.StudentBean;
import cs.practics.service.BjService;
import cs.practics.service.StudentService;public class StudentAddPanel extends JPanel {private static final long serialVersionUID = 3254423774866407987L;private JTextField txtID;private JTextField txtName;private JButton btnOk;private JButton btnCancel;private JFrame parent;private JComboBox<BjBean> jComboBox;public StudentAddPanel(JFrame parent) {this.parent = parent;setLayout(null);JLabel jLabel = new JLabel("学生ID:");jLabel.setBounds(500, 200, 70, 30);add(jLabel);txtID = new JTextField();txtID.setBounds(570, 200, 200, 30);add(txtID);JLabel jLabel2 = new JLabel("学生姓名:");jLabel2.setBounds(500, 250, 70, 30);add(jLabel2);txtName = new JTextField();txtName.setBounds(570, 250, 200, 30);add(txtName);JLabel label1=new JLabel("学生班级:");    //创建标签label1.setBounds(500,300,200,30);add(label1);List <BjBean> classes = BjService.bjService.list();if(classes != null) {BjBean[] arr = classes.toArray(new BjBean[0]);jComboBox = new JComboBox<>(arr);}else {jComboBox = new JComboBox<>();}jComboBox.setBounds(570, 300, 200, 30);add(jComboBox);btnOk = new JButton("确定");btnOk.setBounds(520,600 , 80, 30);add(btnOk);btnOk.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//下拉框BjBean bjBean = (BjBean)jComboBox.getSelectedItem();System.out.println(bjBean.getBjID()+","+bjBean.getBjName());if (txtID.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "学生ID不能为空", "错误", JOptionPane.ERROR_MESSAGE);return;}if (txtName.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "学生姓名不能为空", "错误", JOptionPane.ERROR_MESSAGE);return;}StudentBean studentBean = new StudentBean();studentBean.setStudentID(txtID.getText());studentBean.setStudentName(txtName.getText());BjBean bjBean1=(BjBean)jComboBox.getSelectedItem();Integer rtn = StudentService.studentService.add(studentBean,bjBean1);if (rtn != 1) {JOptionPane.showMessageDialog(null, txtID.getText() + "." + txtName.getText() + "添加失败,班级ID已经存在", "错误", JOptionPane.ERROR_MESSAGE);} else {JOptionPane.showMessageDialog(null, "添加成功!");txtID.setText("");txtName.setText("");}}});btnCancel = new JButton("取消");btnCancel.setBounds(680,600,80,30);add(btnCancel);btnCancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {cancel();}});}protected void cancel(){parent.remove(this);parent.validate();parent. Repaint();}}

7.学生查询(StudentSelectPanel.java)

package cs.practics.bj;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;import cs.practics.bean.CourseBean;
import cs.practics.bean.StudentBean;
import cs.practics.service.CourseService;
import cs.practics.service.StudentService;public class StudentSelectPanel extends JPanel {private static final long serialVersionUID = 3254423774866407987L;private JTextField txtSelID;private JTextField txtID;private JTextField txtName;private JTextField txtBjName;private JButton btnOk;private JButton btnCancel;private JFrame parent;public StudentSelectPanel(JFrame parent) {this.parent = parent;setLayout(null);JLabel jLabel = new JLabel("查询的学生ID:");jLabel.setBounds(500, 200, 70, 30);add(jLabel);txtSelID = new JTextField();txtSelID.setBounds(570, 200, 200, 30);add(txtSelID);JLabel jLabel2 = new JLabel("学生ID:");jLabel2.setBounds(500, 250, 70, 30);add(jLabel2);txtID = new JTextField();txtID.setBounds(570, 250, 200, 30);add(txtID);txtID.setEditable(false);JLabel jLabel21 = new JLabel("学生名:");jLabel21.setBounds(500, 300, 70, 30);add(jLabel21);txtName = new JTextField();txtName.setBounds(570, 300, 200, 30);add(txtName);txtName.setEditable(false);JLabel jLabel211 = new JLabel("班级名:");jLabel211.setBounds(500, 350, 70, 30);add(jLabel211);txtBjName = new JTextField();txtBjName.setBounds(570, 350, 200, 30);add(txtBjName);txtBjName.setEditable(false);btnOk = new JButton("确定");btnOk.setBounds(520, 400, 80, 30);add(btnOk);btnOk.addActionListener(new ActionListener() {@SuppressWarnings("null")@Overridepublic void actionPerformed(ActionEvent e) {/*BjBean bjBean = (BjBean )jComboBox.getSelectedItem();System.out.println(bjBean.getBjID()+","+bjBean.getBjname());*/if (txtSelID.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "学生ID不能为空", "错误", JOptionPane.ERROR_MESSAGE);return;}/*if (txtName.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "课程名称不能为空", "错误", JOptionPane.ERROR_MESSAGE);return;}*/StudentBean studentBean = new StudentBean();studentBean.setStudentID(txtSelID.getText());//StudentBean.setStudentName(txtName.getText());StudentBean rtn = StudentService.studentService.select(studentBean);if (rtn ==null) {JOptionPane.showMessageDialog(null,"查询失败,学生不存在", "错误", JOptionPane.ERROR_MESSAGE);txtSelID.setText("");txtID.setText("");txtName.setText("");txtBjName.setText("");}else {txtBjName.setText(rtn.getBjname());txtID.setText(rtn.getStudentID());txtName.setText(rtn.getStudentname());txtSelID.setText("");}}});btnCancel = new JButton("取消");btnCancel.setBounds(680,400,80,30);add(btnCancel);btnCancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {cancel();}});}protected void cancel(){parent.remove(this);parent.validate();parent. Repaint();}}

课程管理

1.课程添加(cs.practics.course.CouresAddPanel.java)

package cs.practics.course;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;import cs.practics.bean.CourseBean;
import cs.practics.service.CourseService;@SuppressWarnings("serial")
public class CourseAddPanel extends JPanel {private JTextField txtID;private JTextField txtName;private JButton btnOk;private JButton btnCancel;private JFrame parent;public CourseAddPanel(JFrame parent){this.parent = parent;setLayout(null);JLabel jLabel = new JLabel("课程ID:");jLabel.setBounds(500,200,70,30);add(jLabel);txtID = new JTextField();txtID.setBounds(570,200,200,30);add(txtID);JLabel jLabel2 = new JLabel("课程名:");jLabel2.setBounds(500,250,70,30);add(jLabel2);txtName = new JTextField();txtName.setBounds(570,250,200,30);add(txtName);btnOk = new JButton("确定");btnOk.setBounds(520,300,80,30);add(btnOk);btnOk.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if(txtID.getText().isEmpty()){JOptionPane.showMessageDialog(null,"课程ID不能为空","错误",JOptionPane.ERROR_MESSAGE);return;}if(txtName.getText().isEmpty()){JOptionPane.showMessageDialog(null,"课程名不能为空","错误",JOptionPane.ERROR_MESSAGE);return;}CourseBean courseBean = new CourseBean();courseBean.setCourseID(txtID.getText());courseBean.setCourseName(txtName.getText());Integer rtn = CourseService.courseService.add(courseBean);if(rtn != 1){JOptionPane.showMessageDialog(null,txtID.getText()+"."+txtName.getText()+"添加失败,课程ID已经存在","错误",JOptionPane.ERROR_MESSAGE);}else {JOptionPane.showMessageDialog(null,"添加成功!");txtID.setText("");txtName.setText("");}}});btnCancel = new JButton("取消");btnCancel.setBounds(680,300,80,30);add(btnCancel);btnCancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {cancel();}});}protected void cancel(){parent.remove(this);parent.validate();parent. Repaint();}}

2.课程查询(cs.practics.course.CouresSelectPanel.java)

package cs.practics.course;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;import cs.practics.MainApp;
import cs.practics.bean.CourseBean;
//import cs.practics.bean.StudentBean;
import cs.practics.service.CourseService;public class CourseSelectPanel extends JPanel {private static final long serialVersionUID = 3254423774866407987L;private JTextField txtSelID;private JTextField txtID;private JTextField txtName;//private JTextField txtCourseName;private JButton btnOk;private JButton btnCancel;private JFrame parent;public CourseSelectPanel(JFrame parent) {this.parent = parent;setLayout(null);JLabel jLabel = new JLabel("查询的课程ID:");jLabel.setBounds(500, 200, 70, 30);add(jLabel);txtSelID = new JTextField();txtSelID.setBounds(570, 200, 200, 30);add(txtSelID);JLabel jLabel2 = new JLabel("课程ID:");jLabel2.setBounds(500, 250, 70, 30);add(jLabel2);txtID = new JTextField();txtID.setBounds(570, 250, 200, 30);add(txtID);txtID.setEditable(false);JLabel jLabel21 = new JLabel("课程名:");jLabel21.setBounds(500, 300, 70, 30);add(jLabel21);txtName = new JTextField();txtName.setBounds(570, 300, 200, 30);add(txtName);txtName.setEditable(false);btnOk = new JButton("确定");btnOk.setBounds(520, 400, 80, 30);add(btnOk);btnOk.addActionListener(new ActionListener() {@SuppressWarnings("null")@Overridepublic void actionPerformed(ActionEvent e) {/*BjBean bjBean = (BjBean )jComboBox.getSelectedItem();System.out.println(bjBean.getBjID()+","+bjBean.getBjname());*/if (txtSelID.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "课程ID不能为空", "错误", JOptionPane.ERROR_MESSAGE);return;}/*if (txtName.getText().isEmpty()) {JOptionPane.showMessageDialog(null, "课程名称不能为空", "错误", JOptionPane.ERROR_MESSAGE);return;}*/CourseBean courseBean = new CourseBean();courseBean.setCourseID(txtSelID.getText());//StudentBean.setStudentName(txtName.getText());CourseBean rtn = CourseService.courseService.select(courseBean);if (rtn ==null) {JOptionPane.showMessageDialog(null,"查询失败,课程不存在", "错误", JOptionPane.ERROR_MESSAGE);txtSelID.setText("");txtID.setText("");txtName.setText("");//txtCourseName.setText("");}else {//txtCourseName.setText(rtn.getCourseName());txtID.setText(rtn.getCourseID());txtName.setText(rtn.getCourseName());txtSelID.setText("");}}});btnCancel = new JButton("取消");btnCancel.setBounds(680,400,80,30);add(btnCancel);btnCancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {cancel();}});}protected void cancel(){parent.remove(this);parent.validate();parent. Repaint();}}

服务

1.班级服务(cs.practics.service.BjService.java)

package cs.practics.service;import java.beans.beancontext.BeanContext;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import cs.practics.bean.BjBean;
import cs.practics.bean.StudentBean;public class BjService {public static final String dz1 = "E:/java实训/bj/data/data.data";private List<BjBean> list = null;public static BjService bjService = new BjService();private  BjService(){try{list = FileUtil.loadData(dz1);}catch (ClassNotFoundException| IOException e){e.printStackTrace();}if(list==null)list = new ArrayList<>();}public BjBean searchByBjID(String bjID){for(BjBean bjBean:list){if(bjBean.getBjID().equals(bjID)) return bjBean;}return null;}public int add(BjBean bean){try {BjBean tmp = searchByBjID(bean.getBjID());if (tmp !=null) return -2;list.add(bean);FileUtil.writeData(list,dz1);return 1;}catch (Exception e){e.printStackTrace();return -1;}}public List<BjBean> list() {// TODO Auto-generated method stubreturn list;}public Integer add(StudentBean studentBean) {// TODO Auto-generated method stubreturn add(studentBean);}public BjBean select(BjBean bjBean) {// TODO Auto-generated method stubBjBean rtn = searchByBjID(bjBean.getBjID());if(rtn != null) {return rtn;}else {return null;}}
}

2.课程服务(cs.practics.service.CourseService.java)

package cs.practics.service;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import cs.practics.bean.BjBean;
import cs.practics.bean.CourseBean;public class CourseService {public static final String dz = "E:/java实训/course/data/data.data";private List<CourseBean> list = null;public static CourseService courseService = new CourseService();private  CourseService(){try{list = FileUtil.loadData(dz);}catch (ClassNotFoundException| IOException e){e.printStackTrace();}if(list==null)list = new ArrayList<>();}public CourseBean searchByCourseID(String courseID){for(CourseBean courseBean:list){if(courseBean.getCourseID().equals(courseID)) return courseBean;}return null;}public int add(CourseBean bean){try {CourseBean tmp = searchByCourseID(bean.getCourseID());if (tmp !=null) return -2;list.add(bean);FileUtil.writeData(list,dz);return 1;}catch (Exception e){e.printStackTrace();return -1;}}public List<CourseBean> list() {// TODO Auto-generated method stubreturn list;}public CourseBean select(CourseBean courseBean) {// TODO Auto-generated method stubCourseBean rtn = searchByCourseID(courseBean.getCourseID());if(rtn != null) {return rtn;}else {return null;}}}

3.成绩服务(cs.practics.service.MarkService.java)

package cs.practics.service;import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import cs.practics.bean.CourseBean;
import cs.practics.bean.MarkBean;
import cs.practics.bean.StudentBean;public class MarkService {private List<MarkBean> list = null;public final String PATH = "E:/java实训/mark/data/data.data";public static MarkService markService = new MarkService();private MarkService() {try {list = FileUtil.loadData(PATH);} catch (ClassNotFoundException | IOException e) {e.printStackTrace();}if (list == null) list = new ArrayList<>();}/*** 从mark库找出对应课程和班级的分数列表* @param classID* @param courseID* @return*/public List<MarkBean> searchByBjIDAndCourseID(String bjID, String courseID) {List<MarkBean> marks = new ArrayList<>();for (MarkBean markBean: list) {if (markBean.getBjID().equals(bjID) && markBean.getCourseID().equals(courseID)) {marks.add(markBean);}}return marks;}/*** 从学生库找出该班级的学生,并且以List<MarkBean>返回* @param classID* @return*/public List<MarkBean> searchByBjIDAndCourseID(String bjID, CourseBean courseBean){List<MarkBean> marks = new ArrayList<>();List<StudentBean> students = StudentService.studentService.getByBjID(bjID);if (students != null && students.size() > 0) {for (StudentBean studentBean: students) {MarkBean markBean = new MarkBean();markBean.setBjID(studentBean.getBjID());markBean.setBjName(studentBean.getBjname());markBean.setCourseID(courseBean.getCourseID());markBean.setCourseName(courseBean.getCourseName());markBean.setStudentName(studentBean.getStudentname());markBean.setStudentID(studentBean.getStudentID());marks.add(markBean);}}return marks;}public List<MarkBean> searchByCourseAndClass(String courseID, String bjID){List<MarkBean> markList = new ArrayList<>();for (MarkBean markBean : list) {if (markBean.getBjID().equals(bjID) && markBean.getCourseID().equals(courseID)) {markList.add(markBean);}}return markList;}public List<MarkBean> searchByStuID(String studentID){List<MarkBean> marks =new ArrayList<>();for (MarkBean markBean:list){if (markBean.getStudentID().equals(studentID)){marks.add(markBean);}}return marks;}public List<MarkBean> search(String bjID, CourseBean courseBean){List<MarkBean> marks;marks = searchByBjIDAndCourseID(bjID, courseBean.getCourseID());if (marks == null || marks.size() == 0) {marks = searchByBjIDAndCourseID(bjID, courseBean);}return marks;}public  void sumbit(List<MarkBean> marks){for (MarkBean markBean:marks){MarkBean tmp = null;for (int i=0;i<list.size();i++){tmp = list.get(i);if (markBean.getStudentID().equals(tmp.getStudentID())&&markBean.getCourseID().equals(tmp.getCourseID())){break;}tmp = null;}if (tmp == null){list.add(markBean);}else {tmp.setMark(markBean.getMark());}}try{FileUtil.writeData(list,PATH);}catch (IOException e){e.printStackTrace();}}@SuppressWarnings("deprecation")public Map<String, String> counter(String courseID, String bjID) {List<MarkBean> list = searchByCourseAndClass(courseID, bjID);if (list == null || list.size() == 0) return null;Map<String, String> map = new HashMap<>();BigDecimal max = null;BigDecimal min = null;BigDecimal sum = new BigDecimal(0);for (MarkBean mark: list) {if (mark.getMark() == null) continue;if (max == null) {max = mark.getMark();min = mark.getMark();}if (mark.getMark().compareTo(max) > 0) {max = mark.getMark();}if (mark.getMark().compareTo(min) < 0) {min = mark.getMark();}sum = sum.add(mark.getMark());}sum = sum.divide(new BigDecimal(list.size()),1,BigDecimal.ROUND_DOWN);map.put("最高分", max.toString());map.put("最低分", min.toString());map.put("平均分", sum.toString());return map;}public List<MarkBean> list(){return list;}
}

4.学生服务(cs.practics.service.StudentService.java)

package cs.practics.service;import java.util.ArrayList;
import java.util.List;import cs.practics.bean.BjBean;
import cs.practics.bean.CourseBean;
import cs.practics.bean.MarkBean;
import cs.practics.bean.StudentBean;
import cs.practics.bj.MarkInputPanel;@SuppressWarnings("unused")
public class StudentService {private List<StudentBean> list = null;public static StudentService studentService = new StudentService();private StudentService() {try {list = FileUtil.loadData("E:/java实训/student/data/data.data");} catch (Exception e) {e.printStackTrace();}// TODO Auto-generated constructor stubif(list == null) list = new ArrayList<>();}public StudentBean searchByStudentID(String studentID) {for(StudentBean studentBean: list) {if (studentBean.getStudentID().equals(studentID)) return studentBean;}return null;}public int add(StudentBean studentBean,BjBean bjBean) {try {StudentBean tmp = searchByStudentID(studentBean.getStudentID());if(tmp!=null) return -2;studentBean.setBjID(bjBean.getBjID());studentBean.setBjName(bjBean.getBjName());list.add(studentBean );FileUtil.writeData(list,"E:/java实训/student/data/data.data");return 1;} catch (Exception e) {e.printStackTrace();return -1;}}public List<MarkBean> searchByBjID(String bjID, CourseBean courseBean) {// TODO Auto-generated method stubreturn searchByBjID(bjID, courseBean);}public List<StudentBean> getByBjID1(String classID) {// TODO Auto-generated method stubreturn list;}public List<StudentBean> getByBjID(String bjID) {// TODO Auto-generated method stubreturn list;}public StudentBean select(StudentBean studentBean) {// TODO Auto-generated method stubStudentBean rtn = searchByStudentID(studentBean.getStudentID());if(rtn != null) {return rtn;}else {return null;}}}

5.工具类(cs.practics.service.FileUtil.java)

提供IO包进行流数据处理

package cs.practics.service;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;@SuppressWarnings("serial")
public class FileUtil implements Serializable{@SuppressWarnings("unchecked")public static <T> T loadData(String path) throws IOException,ClassNotFoundException{File f = new File(path);FileInputStream fis = new FileInputStream(f);ObjectInputStream ois = new ObjectInputStream(fis);T t = (T)(ois.readObject());ois.close();return t;}public static void writeData(Object obj,String path) throws IOException{File f = new File(path);FileOutputStream fos = new FileOutputStream(f);ObjectOutputStream oos = new ObjectOutputStream(fos);oos.writeObject(obj);oos.flush();oos.close();}
}

该程序的书写目前没有写完,还是很基础的一个系统,后续会跟进更新代码

 


http://chatgpt.dhexx.cn/article/QCYsvxqn.shtml

相关文章

Linux两台服务器之间直接传输文件和文件件

Linux两台服务器之间直接传输文件和文件夹 今天遇到一个需求&#xff0c;因公司有四台服务器&#xff0c;在老服务器上有一个音频文件夹大约为5个G大小&#xff0c;现在要拷贝到另外一台服务器上。 如果把文件夹打包下载到本地&#xff0c;再上传到目标服务器上&#xff0c;感…

FTP连接树莓派(Linux)进行文件传输

1. 在Linux上安装和启动FTP服务 在使用FTP功能之前&#xff0c;树莓派需要安装FTP Server&#xff0c;请输入以下命令安装vsftpd sudo apt-get install vsftpd 使用以下命令启动FTP服务 sudo service vsftpd start 2. 在主机上下载FlashFXP 然后按照如下方式配置&#xff1…

Linux学习(2)——传输文件

承接上一篇&#xff0c;这一篇文章也是基于《Linux从入门到精通》 何明编著 中国水利水电出版社 这本书写的&#xff0c;在写这篇文章的时候也查阅了一些相关资料&#xff0c;也自己动手实践了一下&#xff0c;不得不说&#xff0c;这本书讲得实在是通俗易懂&#xff0c;只要愿…

【Linux】基于TCP实现的大型文件(超过2G)传输项目——总结

文章目录 【1】实现的功能【2】项目框架【3】源代码【4】运行截图 【1】实现的功能 文件的上传、下载&#xff08;包括超过2G的大文件&#xff09;、断点续传、秒传、删除等等。 【2】项目框架 整个项目是在Linux环境下用C语言开发的&#xff0c;基于TCP协议&#xff0c;采用…

两台linux之间传输文件的方法

scp传输 当两台Linux主机之间要互传文件时可使用SCP命令来实现 scp传输速度较慢,但使用ssh通道保证了传输的安全性 复制文件 将本地文件拷贝到远程 scp 文件名 –用户名计算机IP或者计算机名称:远程路径 从远程将文件拷回本地 scp –用户名计算机IP或者计算机名称:文件名 …

Linux实现两台机器文件互传(SCP命令)

文章目录 SCP命令的注意事项下载文件和目录上传文件和目录 SCP命令的注意事项 scp命令的主要作用是实现Linux与Linux系统之间的文件传输 SCP传输要求&#xff1a; 两台计算机都的操作系统都必须是Linux操作系统SCP命令是基于SSH协议&#xff0c;所以两台服务器的sshd服务必须…

Linux这么在两个服务器直接传文件?

文章目录 概念1.当从一个远程服务器传输文件到另一个服务器上(你想传给别人文件)2.在本地服务器&#xff0c;从另一个服务器中获取文件(你想从别人获取文件)总结 概念 scp是secure copy的简写&#xff0c; 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 是加密…

快速实现两台Linux系统之间的传输文件

文章目录 前言一、ssh协议介绍1、什么是ssh协议&#xff1f;2、ssh协议使用介绍3、scp指令使用介绍 二、实验步骤1、安装虚拟机&#xff0c;分别安装linux2、开启ssh协议3、查看ip地址4、文件传输 总结 前言 最近开始用linux做实验啦&#xff0c;实现了用ssh协议的两个liunx系统…

两台Linux系统之间传输文件的几种方法

scp传输 当两台LINUX主机之间要互传文件时可使用SCP命令来实现 scp传输速度较慢,但使用ssh通道保证了传输的安全性 复制文件 将本地文件拷贝到远程 scp 文件名 –用户名计算机IP或者计算机名称:远程路径 从远程将文件拷回本地 scp –用户名计算机IP或者计算机名称:文件名 …

Linux之两个Linux服务器之间互传文件

1.当从一个Linxu服务器传输文件到另一个服务器上 现在有128和129两个文件夹&#xff0c;128服务其中有m文件夹以及其中对应的文件 128服务器 129服务器&#xff08;没有m文件夹及其中文件&#xff09; 把aaa.java文件传输到129的opt目录下 //scp 文件名称 root服务器ip&…

Linux(传输层二继续讲TCP)

文章目录 0. 前言1. 流量控制2. 滑动窗口2-1 基础2-2 重传 3. 拥塞控制4. 延迟应答5. 捎带应答6. 面向字节流7. 粘包问题8. TCP异常情况9. TCP小结10. 基于TCP应用层协议11. TCP/UDP对比 0. 前言 上一章我们主讲了TCP,本章我们继续 链接&#xff1a;https://blog.csdn.net/Din…

Linux(传输层二)

文章目录 0. 前言1. TCP协议1-1 TCP协议段格式1. TCP如何解包&#xff1f;2. TCP协议如何交付&#xff08;应用层- - 客户&#xff09;&#xff1f;3. 如何理解报文本身&#xff1f;4. 如何理解报文字段&#xff1f; 1-2 确认应答(ACK)机制1-3 超时重传机制1-4 连接管理机制1. …

两台linux服务器之间传输文件的几种方法

打开powershell, 开始连接服务器 ssh root192.168.7.204 然后输入密码后就进来了&#xff0c;进入之后找到你要传输文件的位置 接下来我要将这个包传到另一个环境中去&#xff0c;有以下几种方法 scp 示例&#xff1a; 将本地服务器的文件传向另一个服务器 wget 【用法】 wget是…

操作:FTP服务器的搭建

实验目的&#xff1a; 掌握FTP服务器的配置方法、掌握FTP配置基于虚拟用户的服务器搭建方法 实验要求&#xff1a; 以学号和姓名为虚拟用户的FTP服务器搭建实现利用不同虚拟用户登录FTP服务器实现不同用户的权限控制 实验步骤&#xff1a; 一、 搭建一台FTP服务器&#xf…

虚拟机上CentOS 7 架设ftp服务器 最新版系统超详细!!

被这玩意弄的死去活来&#xff0c;搞了这么长时间终于通了。。。看了很多教程感觉说的都不错&#xff0c;但对像我这样的菜鸟还是不够照顾啊。。。还是觉得自己写一篇入门级的更好一些&#xff0c;也希望能方便大家&#xff01; 我们假定此时CentOS刚刚在虚拟机上安装好&#…

办公室服务器安装系统,教你如何架设办公室FTP服务器以Serv-U为例

Scrv-U是Windows平台上最流行的FTP服务器软件&#xff0c;可以从官方网站下载&#xff0c;也可以从其他软件下载网站下载。下面&#xff0c;脚本之家小编就以现在局域网中最流行的FTP服务器软件Serv-U为例&#xff0c;向您讲解一下如何架设FTP服务器。 [1]下载并准备安装Serv-U…

Serv-U 15 架设FTP文件服务器 图文教程

&#xfeff;&#xfeff; 轉自solar的博客:无心阁 solar 转自&#xff1a;http://blog.163.com/zoulei154126/blog/static/4645500220093831019355/ FTP&#xff1a;意思就是&#xff1a;文件传输协议。说白了&#xff0c;就是提供一个服务&#xff0c;让网上的人&#xff…

搭建FTPserver

默认情况下FTP协议使用TCP端口中的 20和21这两个端口&#xff0c;其中20用于传输数据&#xff0c;21用于传输控制信息。但是&#xff0c;是否使用20作为传输数据的端口与FTP使用的传输模式有关&#xff0c;如果采用主动模式&#xff0c;那么数据传输端口就是20&#xff1b;如果…

FTP搭建

FTP FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09; 是 TCP/IP 协议组中的协议之一。FTP 协议包括两个组成部分&#xff0c;其一为 FTP 服务器&#xff0c;其二为 FTP 客户端。其中FTP 服务器用来存储文件&#xff0c;用户可以使用FTP 客户端通过…

基于vsftpd搭建ftp服务器

作者&#xff1a;【吴业亮】 博客&#xff1a;https://wuyeliang.blog.csdn.net/ 1、FTP的传输有两种方式 ASCII传输方式  假定用户正在拷贝的文件包含的简单ASCII码文本&#xff0c;如果在远程机器上运行的不是UNIX&#xff0c;当文件传输时ftp通常会自动地调整文件的内容以…