知识问答

Java课程设计 学生基本信息管理

目录

一、团队成员

二、项目GIT

1.项目地址

2.项目Git提交截图​编辑

三、功能概述及功能架构图

四、程序运行结果截图

1.登录

2.输入错误密码

3.输入正确密码

4.添加学生信息

5.用文件存储信息

6.以学号查询学生信息

7.删除学生信息​编辑

8.文件同步信息

9.修改学生信息

10.同步文件信息​编辑

五、详细代码

1.student类

2.LoginGUI类

3.StudentManageView类

4.StudentService类

 六、心得体会及感悟


一、团队成员

成员姓名任务分配
林兴童(组长)

JavaSwing技术(**器,组件),实现文件存储功能

整合实现代码,进行运行和纠错。

蔡冬灵

登录页面,实现增加、删除、查询、更改功能

实现文件存储功能

二、项目GIT

1.项目地址:林兴童/学生信息管理1 (gitee.com)
2.项目Git提交截图

三、功能概述及功能架构图

用java实现学生信息的管理,其中录入的数据包括:学号、姓名、性别、出生日期、政治面貌、家庭住址、电话、宿舍号,并且能够实现对学生信息的查询、增、删、改功能。

四、程序运行结果截图

1.登录
2.输入错误密码
3.输入正确密码
4.添加学生信息
5.用文件存储信息
6.以学号查询学生信息
7.删除学生信息
8.文件同步信息
9.修改学生信息
10.同步文件信息

五、详细代码

1.student类
package 例;import java.io.Serializable;class User{private String userId;private String password;public String getUserId(){return userId;}public void setUserId(String userId){this.userId=userId;}public String getPassword(){return password;}public void setPassword(String password){this.password=password;}}public class Student extends User implements Serializable{private String id;private String name;private String sex;private String birthday;private String address;//ageprivate String dormitory;//majorprivate String landscape;  //Pc  private String phone;public String getId(){return id;}public void setId(String id){this.id=id;}public String getName(){return name;}public void setName(String name){this.name=name;}public String getSex(){return sex;}public void setSex(String sex){this.sex=sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getDormitory() {return dormitory;}public void setDormitory(String dormitory) {this.dormitory = dormitory;}public String getBirthday(){return birthday;}public void setBirthday(String birthday){this.birthday=birthday;}public String getLandscape() {return landscape;}public void setLandscape(String landscape) {this.landscape = landscape;}public String getPhone(){return phone;}public Student() {// TODO Auto-generated constructor stub}public void setPhone(String phone){this.phone=phone;}public String toString() {    return id + "," + name + "," + sex + "," + birthday + "," + landscape + "," + address + "," + phone + "," + dormitory;}public Student(String id, String name, String sex, String birthday,  String landscape,String address,String phone,String dormitory) {super();this.id = id;this.name = name;this.sex = sex;this.birthday = birthday;this.address = address;this.dormitory = dormitory;this.landscape = landscape;this.phone = phone;}public void fromString(String s) {    String[] parts = s.split(",");      id = parts[0];    name = parts[1];    sex = parts[2];    birthday = parts[3];    landscape = parts[4];    address = parts[5];    phone = parts[6];    dormitory = parts[7];}}
2.LoginGUI类
 
package 例;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.Box;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableModel;import 例.Student;import java.io.*;import java.util.ArrayList;public class LoginGUI{private JFrame jf;//水平boxprivate Box center=Box.createVerticalBox();//学号的JPanelprivate JPanel idPanel=new JPanel();//密码的JPanelprivate JPanel passwordPanel=new JPanel();private JLabel lUserId=new JLabel("用户名");private JTextField tUserId=new JTextField(15);private JLabel lPassword=new JLabel("密   码");private JPasswordField tPassword=new JPasswordField(15);//按钮的JPanelprivate JPanel buttonPanel=new JPanel();private JButton bLogin=new JButton("登录");private JButton bCancel=new JButton("取消");//设置运行时窗口的大小Dimension faceSize=new Dimension(350,150);//获得屏幕的大小Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();public void init(){jf=new JFrame("学生信息管理系统");//设置JFrame的名称jf.setTitle("登录");//将lUserId,tUserId放在idPanel中,idPanel默认水平放置idPanel.add(lUserId);idPanel.add(tUserId);passwordPanel.add(lPassword);passwordPanel.add(tPassword);center.add(idPanel);center.add(passwordPanel);buttonPanel.add(bLogin);buttonPanel.add(bCancel);//登录按钮的**器bLogin.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){String userId=tUserId.getText();String password=String.valueOf(tPassword.getPassword());//开启接受数据的线程if(userId.trim().equals("")||userId==null||password.trim().equals("")||password==null){JOptionPane.showMessageDialog(jf,"用户名或密码不能为空!","提示",JOptionPane.WARNING_MESSAGE);}else{if(userId.equals("课设")&&password.equals("123456")){//真正的账号密码new StudentManageView().inits();}else{loginFailure();}}}});//取消按钮的**器bCancel.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});center.add(buttonPanel);jf.add(center);jf.pack();//设置JFame运行时的大小jf.setSize(faceSize);//设置JFame运行时的位置jf.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2);//设置JFrame不可最大化jf.setResizable(false);//设置JFrame单机X时结束程序jf.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);//设置JFrame可见jf.setVisible(true);}public void loginFailure(){JOptionPane.showMessageDialog(jf, "用户名或密码输入不正确!","提示",JOptionPane.WARNING_MESSAGE);}public static void main(String args[])throws Exception{new LoginGUI().init();}}
3.StudentManageView类
 
package 例;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import javax.swing.Box;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;class MyJTable extends JTable{/** *  */private static final long serialVersionUID = -3083638370004874364L;public MyJTable(TableModel dm){super(dm);}//设置表格不可编辑public boolean isCellEditable(int rowIndex,int columnIndex){return false;}}public class StudentManageView {private JFrame jf=new JFrame("学生信息管理系统");Dimension faceSize=new Dimension(800,600);private Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();//按学号查询private JPanel pSelect=new JPanel();private JLabel lSelect=new JLabel("学号");private JTextField tSelect=new JTextField(15);private JButton bSelect=new JButton("查询");//查询结果放在一个JTableprivate MyJTable table;private DefaultTableModel tableModel;private JScrollPane tableScrollPane;private Object[] tableTitle={"学号","姓名","性别","出生日期:","政治面貌:","家庭住址:","联系方式:","宿舍号:"};private Object[][]tableData={new Object[]{""}};//对学生信息进行管理的添加、删除、修改按钮private JPanel buttonPanel=new JPanel();private JButton insert=new JButton("添加");private JButton delete=new JButton("删除");private JButton update=new JButton("修改");//单机添加、修改时弹出的对话框private JDialog dialog=new JDialog(jf,"学生管理");private Box box=Box.createVerticalBox();private JPanel pId=new JPanel(new FlowLayout(FlowLayout.LEFT));private JPanel pName=new JPanel(new FlowLayout(FlowLayout.LEFT));private JPanel pSex=new JPanel(new FlowLayout(FlowLayout.LEFT));private JPanel pAddress=new JPanel(new FlowLayout(FlowLayout.LEFT));private JPanel pDormitory=new JPanel(new FlowLayout(FlowLayout.LEFT));private JPanel pBirthday=new JPanel(new FlowLayout(FlowLayout.LEFT));private JPanel pLandscape=new JPanel(new FlowLayout(FlowLayout.LEFT));private JPanel pPhone=new JPanel(new FlowLayout(FlowLayout.LEFT));private JLabel lId=new JLabel("学 号");private JLabel lName=new JLabel("姓 名");private JLabel lSex=new JLabel("性 别");private JLabel lBirthday = new JLabel("出生日期:");private JLabel lLandscape = new JLabel("政治面貌:");private JLabel lAddress = new JLabel("家庭住址:");private JLabel lPhone = new JLabel("联系方式:");private JLabel lDormitory = new JLabel("宿舍号:");private JTextField tId=new JTextField(15);private JTextField tName=new JTextField(15);private ButtonGroup bSex=new ButtonGroup();private JRadioButton boy=new JRadioButton("男");private JRadioButton girl=new JRadioButton("女");private JTextField tBirthday=new JTextField(15);private JTextField tLandscape=new JTextField(15);private JTextField tAddress=new JTextField(15);private JTextField tPhone=new JTextField(15);private JTextField tDormitory=new JTextField(15);private JPanel pButton=new JPanel();private JButton confirm=new JButton("确认");private JButton cancel=new JButton("取消");private StudentService service=new StudentService();//用于标记是添加还是修改private String id;void inits(){ readFromFile();pSelect.add(lSelect);pSelect.add(tSelect);pSelect.add(bSelect);//查询按钮的**器bSelect.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){                 String userId=tSelect.getText().trim();if(userId.equals("")){Student[] student=service.selectAll();clearTable();for(Student s:student){insertTable(s);}}else{Student s=service.selectById(userId);if(s!=null){clearTable();insertTable(s);}else{selectFailure();}}}});//tabletableModel=new DefaultTableModel(tableData,tableTitle);table=new MyJTable(tableModel);tableScrollPane=new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED  );//buttonbuttonPanel.add(insert);buttonPanel.add(delete);buttonPanel.add(update);//添加按钮的**器insert.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//id=null;tId.setText("");tId.setEditable(true);tName.setText("");bSex.clearSelection();tAddress.setText("");tDormitory.setText("");tBirthday.setText("");    tLandscape.setText("");tPhone.setText("");dialog.setVisible(true);}});//删除按钮的**器delete.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//获得选择删除的行号数组int[] selected=table.getSelectedRows();//如果selected的长度为0,说明没有选择要删除的if(selected.length==0){JOptionPane.showMessageDialog(jf, "请选择要删除的信息!","提示",JOptionPane.WARNING_MESSAGE );}else{//提示是否要进行删除int flag=JOptionPane.showConfirmDialog(jf, "确认删除吗?","提示",JOptionPane.WARNING_MESSAGE );//如果选择是,则进行删除if(flag==JOptionPane.OK_OPTION ){for(int i=selected.length-1;i>=0;i--){service.delete((String)tableModel.getValueAt(selected[i], 0));tableModel.removeRow(selected[i]);}}}}});//修改按钮的**器 update.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){    int row=table.getSelectedRow();    //如果要进行修改,就将id=要修改的学号    id=String.valueOf(table.getValueAt(row, 0));    //设置tId的内容    tId.setText(id);    //设置tId不可修改    tId.setEditable(false);    tName.setText(String.valueOf(table.getValueAt(row, 1)));    String sex=(String) table.getValueAt(row, 2);    //如果性别是"男",则将单选框中的男选中,否则选中女    if(sex.equals("男")){    bSex.setSelected(boy.getModel(),true);    }else{    bSex.setSelected(girl.getModel(),true);    }    tBirthday.setText(String.valueOf(table.getValueAt(row, 3)));    tLandscape.setText(String.valueOf(table.getValueAt(row, 4)));    tAddress.setText(String.valueOf(table.getValueAt(row, 5)));    tPhone.setText(String.valueOf(table.getValueAt(row, 6)));    tDormitory.setText(String.valueOf(table.getValueAt(row, 7)));    //设置dialog可见    dialog.setVisible(true);    }});jf.setLayout(new BorderLayout());//设置pSelect在jf的北面jf.add(pSelect,BorderLayout.NORTH);//设置pSelect在jf的中心jf.add(tableScrollPane,BorderLayout.CENTER );//设置pSelelct在jf的南面jf.add(buttonPanel,BorderLayout.SOUTH);jf.pack();jf.setSize(faceSize);jf.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2);jf.setResizable(false);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setVisible(true);pId.add(lId);pId.add(tId);pName.add(lName);pName.add(tName);pSex.add(lSex);bSex.add(boy);bSex.add(girl);pSex.add(boy);pSex.add(girl);pBirthday.add(lBirthday);pBirthday.add(tBirthday);pLandscape.add(lLandscape);pLandscape.add(tLandscape);pAddress.add(lAddress);pAddress.add(tAddress);pPhone.add(lPhone);pPhone.add(tPhone);pDormitory.add(lDormitory);pDormitory.add(tDormitory);pButton.add(confirm);pButton.add(cancel);//确定按钮的**器confirm.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Student student=new Student();student.setUserId(tId.getText());student.setPassword(tId.getText());student.setId(tId.getText());student.setName(tName.getText());String sex=null;if(boy.isSelected()){sex="男";}if(girl.isSelected()){sex="女";}student.setSex(sex);student.setBirthday(tBirthday.getText());student.setLandscape(tLandscape.getText());student.setAddress(tAddress.getText());student.setPhone(tPhone.getText());student.setDormitory(tDormitory.getText());if(id!=null){service.update(student);}else{service.insert(student);}dialog.dispose();}});//取消按钮的**器cancel.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dialog.dispose();}});box.add(pId);box.add(pName);box.add(pSex);box.add(pBirthday);box.add(pLandscape);box.add(pAddress);box.add(pPhone);box.add(pDormitory);box.add(pButton);box.add(pButton);dialog.add(box);dialog.setBounds((int)(screenSize.width-280)/2,(int)(screenSize.height-300)/2,280,350);}public void insertTable(Student student){if(student!=null){String[]newCell=new String[9];newCell[0]=student.getId();newCell[1]=student.getName();newCell[2]=student.getSex();newCell[3]=student.getBirthday();newCell[4]=student.getLandscape();newCell[5]=student.getAddress();newCell[6]=student.getPhone();newCell[7]=student.getDormitory();tableModel.addRow(newCell);}}public void clearTable(){int rows=tableModel.getRowCount();for(int i=rows-1;i>=0;i++){tableModel.removeRow(i);}}public void selectFailure(){JOptionPane.showMessageDialog(jf,"不存在该学号的学生!","提示",JOptionPane.WARNING_MESSAGE );}private void readFromFile() {    FileReader fileReader = null;    BufferedReader bufferedReader = null;    int count = 0;    try {        File file = new File("D:\\eclipse-workspace\\jmu\\src\\例\\students.txt");        fileReader = new FileReader(file);        bufferedReader = new BufferedReader(fileReader);        String line;        while ((line = bufferedReader.readLine()) != null) {            String[] data = line.split(" ");            if (data.length == 8) {                String id = data[0];                String name = data[1];                String sex = data[2];                String birthday = data[3];                String landscape = data[4];                String address = data[5];                String phone = data[6];                String dormitory = data[7];                Student student = new Student(id, name, sex, birthday, landscape, address, phone, dormitory);                                                           }        }    } catch (Exception e) {        e.printStackTrace();        JOptionPane.showMessageDialog(null, "读取文件失败!原因:" + e.getMessage(), "提示", JOptionPane.INFORMATION_MESSAGE);    } finally {        try {            if (bufferedReader != null) {                bufferedReader.close();            }            if (fileReader != null) {                fileReader.close();            }        } catch (IOException ioe) {            ioe.printStackTrace();        }    }}}
4.StudentService类
 
package 例;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import javax.swing.JOptionPane;public class StudentService {    private Student[] students = new Student[50];    private int count = 0; // 记录已插入学生数量    private void writeToFile() {        FileWriter fileWriter = null;        BufferedWriter bufferedWriter = null;        try {            File file = new File("D:\\eclipse-workspace\\jmu\\src\\例\\students.txt");            fileWriter = new FileWriter(file, false);            bufferedWriter = new BufferedWriter(fileWriter);            for (int i = 0; i < count; i++) {                Student s = students[i];                if (s != null) {                    bufferedWriter.write(s.getId());                    bufferedWriter.write(" ");                    bufferedWriter.write(s.getName());                    bufferedWriter.write(" ");                    bufferedWriter.write(s.getSex());                    bufferedWriter.write(" ");                    bufferedWriter.write(s.getBirthday());                    bufferedWriter.write(" ");                    bufferedWriter.write(s.getLandscape());                    bufferedWriter.write(" ");                    bufferedWriter.write(s.getAddress());                    bufferedWriter.write(" ");                    bufferedWriter.write(s.getPhone());                    bufferedWriter.write(" ");                    bufferedWriter.write(s.getDormitory());                    bufferedWriter.newLine();                }            }            JOptionPane.showMessageDialog(null, "文件更新成功!", "提示", JOptionPane.INFORMATION_MESSAGE);        } catch (Exception e) {            e.printStackTrace();            JOptionPane.showMessageDialog(null, "文件更新失败!原因:" + e.getMessage(), "提示", JOptionPane.INFORMATION_MESSAGE);        } finally {            try {                if (bufferedWriter != null) {                    bufferedWriter.close();                }                if (fileWriter != null) {                    fileWriter.close();                }            } catch (IOException ioe) {                ioe.printStackTrace();            }        }    }       // 添加学生信息    public void insert(Student s) {        FileWriter fileWriter = null;        BufferedWriter bufferedWriter = null;        try {            // 检查学号是否已存在            for (int i = 0; i < count; i++) {                if (students[i].getId().equals(s.getId())) {                    JOptionPane.showMessageDialog(null, "学号已存在!", "提示", JOptionPane.INFORMATION_MESSAGE);                    return; // 学号已存在,结束方法                }            }                        File file = new File("D:\\eclipse-workspace\\jmu\\src\\例\\students.txt");            fileWriter = new FileWriter(file, true);            bufferedWriter = new BufferedWriter(fileWriter);                        if (count < students.length) {                students[count] = s;                // 写入文件                bufferedWriter.write(s.getId());                bufferedWriter.write(" ");                bufferedWriter.write(s.getName());                bufferedWriter.write(" ");                bufferedWriter.write(s.getSex());                bufferedWriter.write(" ");                bufferedWriter.write(s.getBirthday());                bufferedWriter.write(" ");                bufferedWriter.write(s.getLandscape());                bufferedWriter.write(" ");                bufferedWriter.write(s.getAddress());                bufferedWriter.write(" ");                bufferedWriter.write(s.getPhone());                bufferedWriter.write(" ");                bufferedWriter.write(s.getDormitory());                bufferedWriter.newLine();                                count++;                JOptionPane.showMessageDialog(null, "添加学生成功!", "提示", JOptionPane.INFORMATION_MESSAGE);            } else {                JOptionPane.showMessageDialog(null, "学生数量已达到上限!", "提示", JOptionPane.INFORMATION_MESSAGE);            }        } catch (Exception e) {            e.printStackTrace();            JOptionPane.showMessageDialog(null, "添加学生失败!原因:" + e.getMessage(), "提示", JOptionPane.INFORMATION_MESSAGE);        } finally {            try {                if (bufferedWriter != null) {                    bufferedWriter.close();                }                if (fileWriter != null) {                    fileWriter.close();                }            } catch (IOException ioe) {                ioe.printStackTrace();            }        }    }    // 删除学生信息    public int delete(String userId) {        for (int i = 0; i < count; i++) {            if (students[i] != null && students[i].getUserId().equals(userId)) {                // 将后面的元素向前移动一位                for (int j = i + 1; j < count; j++) {                    students[j - 1] = students[j];                }                students[count - 1] = null; // 最后一个元素设为 null                count--;                JOptionPane.showMessageDialog(null, "删除学生成功!", "提示", JOptionPane.INFORMATION_MESSAGE);                writeToFile(); // 同步至文件                return 1;            }        }        return 0;    }    // 修改学生信息    public void update(Student s) {        String userId = s.getUserId();        for (int i = 0; i < count; i++) {            if (students[i] != null && students[i].getUserId().equals(userId)) {                // 只更新不为空的属性                if (s.getId() != null) {                    students[i].setId(s.getId());                }                if (s.getName() != null) {                    students[i].setName(s.getName());                }                if (s.getSex() != null) {                    students[i].setSex(s.getSex());                }                if (s.getBirthday() != null) {                    students[i].setBirthday(s.getBirthday());                }                if (s.getLandscape() != null) {                    students[i].setLandscape(s.getLandscape());                }                if (s.getAddress() != null) {                    students[i].setAddress(s.getAddress());                }                if (s.getPhone() != null) {                    students[i].setPhone(s.getPhone());                }                if (s.getDormitory() != null) {                    students[i].setDormitory(s.getDormitory());                }                JOptionPane.showMessageDialog(null, "修改学生成功!", "提示", JOptionPane.INFORMATION_MESSAGE);                writeToFile(); // 同步至文件            }        }    }    // 按学号查询    public Student selectById(String userId) {        for (int i = 0; i < count; i++) {            if (students[i] != null && students[i].getUserId().equals(userId)) {                return students[i];            }        }        return null;    }    // 查询所有学生信息    public Student[] selectAll() {            Student[] result = new Student[count];        int index = 0;        for (int i = 0; i < count; i++) {            if (students[i] != null) {                result[index++] = students[i];            }        }        return result;    }}

 六、心得体会及感悟

JAVA面向对象编程不仅仅是一种语法,更是一种思维方式。通过课程设计,逐渐培养对问题的面向对象分析和设计的能力,将问题抽象成对象和类的形式。

团队协作与版本控制: 在实际开发中,团队协作是不可或缺的。学会使用版本控制工具(如Git)来管理代码,合理分工、有效沟通,保持代码库的整洁和更新。

持续学习: Java是一个不断发展的编程语言,不仅要熟练掌握已有的知识,还需要不断学习新的技术和框架。保持持续学习的心态,关注行业动态,是一个成功的Java程序员应有的素养。