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程序员应有的素养。