学生信息管理系统简易版(文件IO代替数据库)

一.设计任务及要求

  1. 设计并实现一个学生信息管理系统
  2. 要求使用图形用户界面同时用数据库建立1或2个学生信息表。并且能连接数据库并实现查、增、删、改等功能。(这里使用TXT文件代替数据库)

二.需求分析

要求有完整的图形用户界面,界面应该能显示完整的学生信息表格,同时要能对学生信息完成添加、修改、查询、删除四个基本功能。学生信息表格的数据应该保存在数据库里,每次登录系统时即对数据库进行访问和修改,可以考虑用TXT文本代替数据库,在本地包里创建TXT文本,通过IO流进行访问。

三.总体设计

  1. 界面设计:初步规划为三个界面,一个登陆界面,一个主界面和一个添加信息的界面。登录界面通过在文本框中输入用户名和密码,点击登陆跳转到主界面,点击退出结束程序。主界面显示学生信息的列表,同时具有通过学号查询,修改和删除信息的功能。点击添加和修改,都会跳转到添加信息界面,添加信息界面包含对学生类的七种信息的添加和修改(覆盖)功能。点击返回即返回到主界面。
  2. 功能实现:封装一个学生信息类,具有学号、姓名、性别、年龄、电话号码、家庭住址、身份证号码等七种属性。编写一个function类,类里包含会用到的增删改查方法,以及读文件和写文件的方法,通过IO流与文件交互。主界面单独编写一个类,在本页面即可完成查找和删除的功能,添加和修改按钮则链接到信息添加界面。在主界面中,学生信息以表格的形式显示出来,表头设置为醒目的颜色便于观察,同时将表格放到滚动面板中,可以避免设置翻页的功能。使用学号进行查找,修改和删除功能时,若无与输入学号相对应的信息,则提示未查找到该学生,请重新输入。若成功执行,则提示修改或删除成功。执行添加功能时,自动跳转到添加页面,对七个信息进行输入,输入完成后点击保存则写入到文件中,同时刷新主界面,如果有信息未录入则默认用“–”代替。

四.代码详细实现

1.启动界面代码,程序唯一的main方法,单独独立出来,养成好习惯
/*** @ClassName: StudentMessageControlSystem* @Auther: Drawin* @Date: 2021/12/25 22:25* @Description:学生信息管理系统* 要求:* 使用图形用户界面* 用数据库建立 1或 2个学生信息表。 (可以使用 txt 文件代替数据库* 能连接数据库并实现查询、增、删、改等功能。*/public class StudentMessageControlSystem {public static void main(String[] args) {new LoginGUi();}
}
2.Student类代码
public class Student {private String stuID;    /*  学生学号  */private String name;     /* 学生姓名 */private String sex;     /* 学生性别  */private String age;        /*  学生年龄  */private String callnumber;   /* 学生电话号码   */private String home_place;   /* 学生家庭住址,籍贯 */private String identityID;   /* 学生身份证号码 */public Student(String stuID,String name,String sex,String age,String callnumber,String home_place,String identityID) {this.stuID=stuID;this.name=name;this.sex=sex;this.age=age;this.callnumber=callnumber;this.home_place=home_place;this.identityID=identityID;}public Student() {}public String getStuID() {return this.stuID;}public void setStuID(String stuID) {this.stuID=stuID;}public String getName() {return name;}public void setName(String name) {this.name=name;}public String getSex() {return this.sex;}public void setSex(String sex) {this.sex=sex;}public String getAge() {return this.age;}public void setAge(String age) {this.age=age;}public String getCallnumber() {return this.callnumber;}public void setCallnummber(String callnumber) {this.callnumber=callnumber;}public String getHome_place() {return this.home_place;}public void setHome_place(String home_place) {this.home_place=home_place;}public String getIdentityID() {return this.identityID;}public void setIdentityID(String identityID) {this.identityID=identityID;}//从文件中录入的数据格式    "学号  姓名  性别  年龄  电话号码  家庭住址  身份证号码"public String fileString(){return stuID+" "+name+" "+sex+" "+age+"  "+callnumber+"  "+home_place+"  "+identityID;}
}
3.MainView主界面代码,包括四个功能按钮,和完整的查找,删除功能
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;/*** @ClassName: MainView* @Auther: Drawin* @Date: 2021/12/26 19:01* @Description:主界面,四个功能按钮,和完整的查找,删除功能*/public class MainView extends JFrame implements ActionListener {JTable table = null;DefaultTableModel model = null;JPanel jPanelNorth;JTextField search;JButton add,delete,modify,seek;Function act =new Function();//显示全部学生信息public MainView() {//顶部JLabel jLabel = new JLabel("请输入学号");jPanelNorth=new JPanel();jPanelNorth.setLayout(new GridLayout(1, 6));search =new JTextField(10);add =new JButton("添加");delete =new JButton("删除");modify =new JButton("修改");seek =new JButton("查找");jPanelNorth.add(jLabel);jPanelNorth.add(search);jPanelNorth.add(seek);jPanelNorth.add(add);jPanelNorth.add(modify);jPanelNorth.add(delete);//中间的表格JFrame jf = new JFrame("学生信息管理系统");// 创建内容面板JPanel panel = new JPanel();// 表头(列名)Vector columnNames=createColumnNames();Vector data=createTableModelData();// 创建一个默认的表格模型model = new DefaultTableModel(data, columnNames);table = new JTable(model);table.setPreferredScrollableViewportSize(new Dimension(500, 80));JScrollPane tablePanel = new JScrollPane(table);// 设置表格内容颜色table.setForeground(Color.BLACK);                   // 字体颜色table.setFont(new Font(null, Font.PLAIN, 14));      // 字体样式table.setSelectionForeground(Color.DARK_GRAY);      // 选中后字体颜色table.setSelectionBackground(Color.LIGHT_GRAY);     // 选中后字体背景table.setGridColor(Color.GRAY);                     // 网格颜色// 设置表头table.getTableHeader().setFont(new Font(null, Font.BOLD, 14));  // 设置表头名称字体样式table.getTableHeader().setForeground(Color.RED);                // 设置表头名称字体颜色table.getTableHeader().setResizingAllowed(false);               // 设置不允许手动改变列宽table.getTableHeader().setReorderingAllowed(false);             // 设置不允许拖动重新排序各列// 设置行高table.setRowHeight(40);// 第一列列宽设置为40table.getColumnModel().getColumn(0).setPreferredWidth(60);// 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)table.setPreferredScrollableViewportSize(new Dimension(640, 320));// 把表格放到滚动面板中(表头将自动添加到滚动面板顶部)JScrollPane scrollPane = new JScrollPane(table);// 添加 滚动面板 到 内容面板panel.add(scrollPane);// JScrollPane pane = new JScrollPane(table);// 设置 内容面板 到 窗口jf.setContentPane(panel);jf.pack();jf.setSize(800, 500);jf.add(jPanelNorth,BorderLayout.NORTH);jf.add(scrollPane, BorderLayout.CENTER);jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//数据居中显示DefaultTableCellRenderer r = new DefaultTableCellRenderer();r.setHorizontalAlignment(JLabel.CENTER);table.setDefaultRenderer(Object.class, r);jf.setLocationRelativeTo(null);int t=table.getRowCount();if(t<=0){JOptionPane.showMessageDialog(null, "该系统中还没有录入学生信息!!!");jf.setVisible(false);}else {jf.setVisible(true);}//监听开始add.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {jf.setVisible(false);new AddView();}});modify.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {new AddView();}});seek.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String sID= search.getText();int flag=act.seek(sID);if (flag==-1){JOptionPane.showMessageDialog(null, "未查找到该学号的学生!!!\n\n请重新输入");return;}else{JOptionPane.showMessageDialog(null,act.find(sID));}search.setText("");}});delete.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String sID = search.getText();    //获取文本框中内容int flag=act.seek(sID);if(flag==-1){JOptionPane.showMessageDialog(null, "未查找到该学号的学生!!!\n\n请重新输入");}else {act.delete(sID);act.writefile();JOptionPane.showMessageDialog(null, "删除成功!!!\n");}new MainView();search.setText("");}});}private Vector createColumnNames() {Vector columnNames = new Vector();//columnNames.add("序号");columnNames.add("学号");columnNames.add("姓名");columnNames.add("性别");columnNames.add("年龄");columnNames.add("电话号码");columnNames.add("家庭住址");columnNames.add("身份证号码");return columnNames;}private Vector createTableModelData() {Vector data = new Vector();String t=null;try{FileReader f1 = new FileReader("student.txt");BufferedReader br=new BufferedReader(f1);//arry.clear();//  清除原数组列表中的数据int i=0;while ((t= br.readLine())!= null){String [] s=t.split("\\s+");        //通过空格分割字符串数组Vector rowData = new Vector();//rowData.add("i");rowData.add(s[0]);rowData.add(s[1]);rowData.add(s[2]);rowData.add(s[3]);rowData.add(s[4]);rowData.add(s[5]);rowData.add(s[6]);data.add(rowData);// System.out.print(s[6]);i++;}f1.close();br.close();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}return data;}@Overridepublic void actionPerformed(ActionEvent e) {}
}
4.登录界面LoginGUI
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;/*** @ClassName: LoginGUi* @Auther: Drawin* @Date: 2021/12/26 16:34* @Description:*/public class LoginGUi extends JFrame implements ActionListener {public LoginGUi(){JFrame jFrame = new JFrame("登录");JLabel jLabel1 = new JLabel("  用户名");JLabel jLabel2 = new JLabel("  密码");JTextField jTextField1 = new JTextField(10);JTextField jTextField2 = new JTextField(10);JButton jButton1 = new JButton("登录");JButton jButton2 = new JButton("退出");JPanel jPanel1 = new JPanel();JPanel jPanel2 = new JPanel();jPanel1.setLayout(new GridLayout(3,2));jPanel2.setLayout(new GridLayout(1,2));jPanel1.add(jLabel1);jPanel1.add(jTextField1);jPanel1.add(jLabel2);jPanel1.add(jTextField2);jPanel2.add(jButton1);jPanel2.add(jButton2);jFrame.add(jPanel1, BorderLayout.NORTH);jFrame.add(jPanel2,BorderLayout.SOUTH);jFrame.setVisible(true);jFrame.setSize(350,150);jFrame.setLocationRelativeTo(null);//在屏幕中间显示jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFramejButton1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {jFrame.setVisible(false);new MainView();}});jButton2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.exit(0);}});}@Overridepublic void actionPerformed(ActionEvent e) {}
}
5.Function类,增删改查功能实现(通过IO)
import java.io.*;
import java.util.ArrayList;/*** @ClassName: Function* @Auther: Drawin* @Date: 2021/12/26 21:11* @Description:*/public class Function {ArrayList<Student> arry=new ArrayList<Student>();public Function()           //读文件,将文件中的学生信息存放在数组列表{this.readfile();}//根据学号查找学生信息,找到返回学号,找不到返回-1public int seek(String str){for (int i = 0; i<arry.size(); i++)if (arry.get(i).getStuID().equals(str))return i;//等于在数组列表的位置return -1;}public String find(String str){for (int i = 0; i<arry.size(); i++)if (arry.get(i).getStuID().equals(str))return arry.get(i).fileString();//等于在数组列表的位置return null;}//修改学生信息public void modify(YYX.Smcs.Student stu) {int flag=seek(stu.getStuID());    //查找是否存在arry.set(flag, stu);          //替换 flag 处的学生信息}// 读文件public boolean readfile() {String t=null;try{FileReader f1 = new FileReader("student.txt");BufferedReader br=new BufferedReader(f1);arry.clear();    //  清除原数组列表中的数据while ((t= br.readLine())!= null){String [] s=t.split("\\s+");YYX.Smcs.Student st=new Student (s[0],s[1],s[2],s[3],s[4],s[5],s[6]);arry.add(st);System.out.println("读取文件:");System.out.println(s[0]);}f1.close();br.close();return true;} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();return false;}}//添加学生信息public boolean add(YYX.Smcs.Student stu){System.out.println();System.out.println("要添加的学生");System.out.println(stu.fileString());System.out.println();if (seek(stu.getStuID())!=-1)return false;arry.add(stu);return true;}//写,注意每行必须有七个元素,否则读取文件并判断是否存在时会出错时会出错,没有输入的用---代替public boolean writefile() {FileWriter fw=null;BufferedWriter out=null;try {fw = new FileWriter("student.txt");out = new BufferedWriter(fw);//姓名学号等中间隔一个空格for(int i=0;i<arry.size();i++){String s=arry.get(i).fileString();System.out.println("数组列表数据:");System.out.println(arry.get(i).fileString());out.write(s);out.newLine();}out.close();fw.close();return true;} catch (IOException e) {e.printStackTrace();return false;}}//删除学生信息,并且文件中的内容也要修改public boolean delete(String s) //添加学生记信息{int pos=seek(s);if (pos==-1)return false;arry.remove(pos);return true;}
}
6.AddView 添加修改页面,第三个界面
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;/*** @ClassName: AddView* @Auther: Drawin* @Date: 2021/12/26 19:52* @Description:添加,修改功能*/public class AddView extends JFrame {private JPanel jPanelCenter, jPanelSouth;private JButton addButton, exitButton,modiButton;private JTextField stuID,name,sex,age,callnumber,home_place,identityID;Function act =new Function();public AddView(){//centerjPanelCenter = new JPanel();jPanelCenter.setLayout(new GridLayout(7, 2));jPanelCenter.add(new JLabel("  学号"));stuID=new JTextField();jPanelCenter.add(stuID);jPanelCenter.add(new JLabel("  姓名"));name = new JTextField();jPanelCenter.add(name);jPanelCenter.add(new JLabel("  性别"));sex = new JTextField();jPanelCenter.add(sex);jPanelCenter.add(new JLabel("  年龄"));age = new JTextField();jPanelCenter.add(age);jPanelCenter.add(new JLabel("  电话号码"));callnumber = new JTextField();jPanelCenter.add(callnumber);jPanelCenter.add(new JLabel("  家庭住址"));home_place = new JTextField();jPanelCenter.add(home_place);jPanelCenter.add(new JLabel("  身份证号码"));identityID = new JTextField();jPanelCenter.add(identityID);//southjPanelSouth = new JPanel();jPanelSouth.setLayout(new GridLayout(1, 3));addButton=new JButton("添加");exitButton=new JButton("返回");modiButton=new JButton("修改");jPanelSouth.add(addButton);jPanelSouth.add(modiButton);jPanelSouth.add(exitButton);this.add(jPanelCenter, BorderLayout.CENTER);this.add(jPanelSouth, BorderLayout.SOUTH);//监听exitButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {setVisible(false);new MainView();}});Student s1=new Student();ArrayList<Student> arry=new ArrayList<Student>();addButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String sID = stuID.getText();    //获取文本框中内容if(act.seek(sID)!=-1){JOptionPane.showMessageDialog(null, "该学号对应的学生已经存在!");//清空文本框stuID.setText("");name.setText("");age.setText("");callnumber.setText("");home_place.setText("");identityID.setText("");return;}String sname = name.getText();//先判断学号和姓名是否为空,如果为空,直接退出if(sID.equals("")||sname.equals("")){JOptionPane.showMessageDialog(null, "请重新输入");return;}String sage = age.getText();if(sage.equals(""))//年龄为空,没有输入sage="--";String scall = callnumber.getText();if(scall.equals(""))scall="--";String shome = home_place.getText();if(shome.equals(""))shome="--";String siden = identityID.getText();if(siden.equals(""))siden="--";String ssex=sex.getText();if (ssex.equals(""))ssex="--";s1.setStuID(sID);s1.setAge(sage);s1.setName(sname);s1.setSex(ssex);s1.setCallnummber(scall);s1.setHome_place(shome);s1.setIdentityID(siden);System.out.println(s1.fileString());act.add(s1);act.writefile();JOptionPane.showMessageDialog(null, "录入成功!!!");setVisible(false);new MainView();}});modiButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String sID =stuID.getText();    //获取文本框中内容int flag=act.seek(sID);    //查找是否存在if (flag==-1){JOptionPane.showMessageDialog(null, "未查找到该学号的学生!!!\n\n请重新输入");return;}else {JOptionPane.showMessageDialog(null, "确认返回后请输入需要修改后的数据");}String sage = age.getText();if(sage.equals(""))//年龄为空,没有输入sage="--";String scall = callnumber.getText();if(scall.equals(""))scall="--";String shome = home_place.getText();if(shome.equals(""))shome="--";String siden = identityID.getText();if(siden.equals(""))siden="--";String ssex=sex.getText();if (ssex.equals(""))ssex="--";String sname = name.getText();//先判断学号和姓名是否为空,如果为空,直接退出if(sname.equals("")){JOptionPane.showMessageDialog(null, "录入的学生姓名为空!!!\n\n请重新输入");return;}s1.setStuID(sID);s1.setAge(sage);s1.setName(sname);s1.setSex(ssex);s1.setCallnummber(scall);s1.setHome_place(shome);s1.setIdentityID(siden);act.modify(s1);       //修改act.writefile();JOptionPane.showMessageDialog(null, "修改成功!!!");}});setDefaultCloseOperation(DISPOSE_ON_CLOSE);setBounds(500, 300, 400, 270);setVisible(true);}
}

五.功能实现截图

1.登录界面

2.管理系统主界面

3.添加修改界面

4.查找功能

5.反馈信息

6.提示信息

六.参考文献

Java课程设计【学生信息管理系统】——振华OPPO
Java+学生信息管理系统+GUI+文件——H千面
学生信息管理系统–(Java+MySQL实现)——__Mzzz

【Java课设】学生信息管理系统简易版(文件IO代替数据库)相关推荐

  1. 学生信息管理系统简易版(文件读写操作)

    功能模块 具体功能如下: 添加学生信息 修改学生信息(按学号) 排序(分别按总分升序.降序.以及按姓名升序) 查找学生(按学号) 删除学生 查看所有学生信息 数据结构体设计 本表设计一个学生信息的结构 ...

  2. java课设 学生信息管理系统

    一.软件环境及开发工具 Windows10 eclipse sqlite 二.课程设计功能要求 1.添加学生功能:姓名.学号.性别.出生年月日.(注意:学号自动生成,学号必须唯一) 2.添加学生成绩功 ...

  3. 学生信息管理系统c语言课设,学生信息管理系统C语言课设.doc

    学生信息管理系统C语言课设 目录 一.需求分析2 二.概要设计2 三.详细设计4 四.调试分析9 五.用户手册9 六.测试数据9 七.附录10 一.需求分析学生学籍管理系统用数据文件存放学生的学籍,可 ...

  4. C++课设-学生信息管理系统

    前言:上学期的一个简单的C++课设项目(代码在后面,附github项目链接) 一.问题描述: 建立学生信息数据,包括学号.姓名.性别.三科成绩.出生时间.年龄(必须计算得到). 使用继承的方法构造至少 ...

  5. c语言实现学生二科成绩的单链表,c++链表实现学生成绩管理系统(简易版)

    #include using namespace std; typedef struct student{ int id;//学号 string sex; string name; int cpp;/ ...

  6. Java实训学生信息_(java实训)学生信息管理系统.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspJava (java实训)学生信息管理系统.doc9页 本文档一 ...

  7. Java Swing Mysql学生信息管理系统

    通过对Swing的理解 此篇为大家推荐基于JAVA Swing Mysql学生信息管理系统 本视频教程一共分为四个阶段,每个阶段都会是上一个阶段的扩展,每一个阶段的系统都可独立作为一个完整的系统 第一 ...

  8. Java课程设计-基于Java Swing的学生信息管理系统-版本二

    Java课程设计-基于Java Swing的学生信息管理系统-版本二 1.介绍 2.相关技术 3. 代码仓库 4.所需环境 5.安装教程 6.运行截图 7.相关博客 1.介绍 设计一个简单学生个人信息 ...

  9. java毕业生设计学生信息管理系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计学生信息管理系统计算机源码+系统+mysql+调试部署+lw java毕业生设计学生信息管理系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开 ...

  10. Java课程设计——学生信息管理系统

    一.项目简介 二.项目构架图 三.团队成员任务简介 四.代码 五.项目运行图片 一.项目简介: 实现一个功能简单的学生信息管理系统,该系统具有按照账户名密码登录功能,登录后,可以添加,删除,修改.查询 ...

最新文章

  1. MATLAB的fft2和OpeCV的cvDFT的结果应该是一样的,但为什么有时候会相差255倍呢?
  2. python学习笔记---字符串
  3. IMX6ULL的GPIO操作方法
  4. Docker源码分析(二):Docker Client创建与命令执行
  5. 指纹图谱相似度评价软件_基于指纹图谱和网络药理学对当归四逆汤中桂枝的Qmarker预测分析...
  6. ubuntu20.04中安装划词翻译_教你轻松玩转免安装的网页翻译插件“有道网页翻译2.0”...
  7. 噪声调频 matlab,如何用matlab编写噪声调频干扰信号
  8. html鼠标悬停效果_【开发小技巧】023—如何使用HTML和CSS实现3D文字效果
  9. Ubuntu系统opencv4.4 opencv_contribute安装常见问题
  10. python写文件格式转换程序_python实现txt文件格式转换为arff格式
  11. c#项目 java项目_c#项目转Java项目!!!!!
  12. 转化关系模型外键_网站数据分析:流量运营分析模型拯救你的广告流量
  13. 关于php后台的知识,xfplay影音先锋画面声音不同步的处理教程 爱狐网 (‾◡◝)...
  14. 十九个国内外主流的三维GIS软件(转)
  15. github上传代码步骤
  16. 2015年ps计算机试题,2015年计算机一级考试《PS》模拟试题及答案(一)(2)
  17. 华为快应用 阻止事件冒泡
  18. OneNote同步错误记录
  19. [转] ubuntu上安装 ibus Google拼音输入法
  20. 跟开涛学SpringMVC...

热门文章

  1. 使用selenium自动登录126/163邮箱并自动发送邮件
  2. 游戏音效制作初学者的福音—入门级软件介绍
  3. 【20保研】天津大学智能与计算学部2020级研究生招生夏令营活动通知
  4. python中字典keys、values、items的使用_Python学习笔记字典之keys()、values()和 items()方法...
  5. 为什么计算机连不上无线网络,笔记本为什么连不上无线网|笔记本电脑无法连接WiFi的多种解决方法...
  6. win7旗舰版/专业版黑屏后怎样再次永久激活?
  7. SQL省市区三级表 脚本
  8. 组网 三层交换机配置
  9. 浏览器内核(引擎)及css前缀
  10. 常见物理量的量纲在OpenFOAM中的表示