面向对象程序设计(Java)课程设计——学生信息管理系统(GUI+文件)小组汇报

目录

一、团队成员及任务

二、项目简介

三、功能设计图

四、运行结果

五、核心源码 

六、课程设计总结与感想


一、团队成员及任务


组长:宗庆亮  计科(智能)22-1  20220320021
负责模块:静态登录界面实现以及学生信息系统管理界面的创建

面向对象程序设计(Java)课程设计——学生信息管理系统(GUI+文件)_ql 丶的博客-CSDN博客


组员:郑金洲  计科(智能)22-1  20220320022
负责模块:增加,删除,修改以及查询功能的实现

面向对象程序设计(Java)课程设计——学生信息管理系统(GUI+文件)个人部分_WayneZ16的博客-CSDN博客

二、项目简介

  本项目由我们二人共同合作完成,该系统可实现学生信息的增加,删除,修改,查询,筛选的功能。并将学生信息存储在文件txt 中,不会覆盖原数据。该系统没有利用数据库,是使用文件来存储学生数据,有基本的 UI 界面,操作友好,项目运行没有问题。

三、功能设计图

四、运行结果

运行代码,系统弹出静态登录页面,点击页面中的登录按钮登入学生信息管理系统。

学生管理系统中包含学生的学号、姓名、性别、年龄、电话、家庭住址等个人信息,方便全面细致的对学生信息进行管理。

本系统中主要有增加学生信息、查询符合条件的学生信息、修改学生信息、删除学生信息等功能,下面我们将大体介绍基本功能。

首先进入显示全部”界面,在本界面中,我们可以看到已经输入系统的学生信息,以图表的形式呈现,清晰可见。

本系统的一个特色功能是可以根据需要的不同,点击表头进行升序降序的排序,系统默认以学号大小进行升序。例如,我们点击“年龄”旁边的三角按钮,即可根据年龄大小进行重新排序,如图:

 接下来我们进行学生信息添加,将需要录入的学生信息填入系统,点击“录入信息”即可录入信息,如图所示:

 弹出消息框,证明信息录入成功。

删除学生信息同理,输入学生学号即可删除该生信息,如图所示:

 接下来进行查询信息功能,按照系统提示,输入某生学号,点击“查询信息”按钮即可查询,如图:

 使用完本系统后点击“返回登录”即可安全退出系统。

五、核心源码 

package Student_Manage;

public class Main {
    public static void main(String[] args) {
        new Login();
    }
}
package Student_Manage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Login extends JFrame implements ActionListener {

    //定义组件
    JFrame frame=new JFrame();
    JPanel jp1,jp2,jp3;//面板
    JLabel jlb1;//标签
    JButton jb1;//按钮


    //构造函数
    public Login(){
        //创建面板
        jp1=new JPanel();
        jp2=new JPanel();
        jp3=new JPanel();

        //创建标签
        jlb1=new JLabel("学生信息管理系统");

        //创建按钮
        jb1=new JButton("登录");

        //设置布局管理
        frame.setLayout(new GridLayout(3, 1));//网格式布局

        //加入各个组件
        jp1.add(jlb1);
        jp3.add(jb1);


        //加入到JFrame
        frame.add(jp2);
        frame.add(jp1);
        frame.add(jp3);

        //设置窗体
        frame.setTitle("用户登录界面");//窗体标签
        frame.setSize(450, 350);//窗体大小
        frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFrame
        frame.setVisible(true);//显示窗体

        //锁定窗体
        //this.setResizable(false);

        jb1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                frame.setVisible(false);
                new ManagerLogin();
            }
        });


    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    }
}
package Student_Manage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.function.Function;

public class ManagerLogin extends JFrame implements ActionListener {
    function fun = new function();

    //定义组件
    JLabel lb1 = new JLabel("学生信息管理系统");//JLabel 对象显示文本
    JLabel lb2 = new JLabel("提示:录入前请先输入学号,修改、删除根据学号修改信息");

    JTextField 学号, 姓名, 年龄, 电话, 宿舍号,家庭住址;//输入学生基本信息文本
    JRadioButton 男, 女;//声明单选项对象,性别选择
    ButtonGroup group = null;//声明按钮组
    JButton 录入, 查询, 删除, 修改, 显示, 返回;//声明相应的操作的按钮
    JPanel p0, p1, p2, p3, p4, p5, p6, p7, pv, ph, pb;//调节布局的通道

    public ManagerLogin() {       //负责管理员登录的主窗口
        super("学生信息管理系统");
        学号 = new JTextField(10);//创建文本信息的的对象
        姓名 = new JTextField(10);
        电话 = new JTextField(15);
        年龄 = new JTextField(8);
        宿舍号 = new JTextField(15);
        家庭住址 = new JTextField(15);


        group = new ButtonGroup();
        男 = new JRadioButton("男");
        女 = new JRadioButton("女");
        group.add(男);//把按钮添加到按钮组
        group.add(女);
        录入 = new JButton("录入信息");//创建按钮对象
        查询 = new JButton("查询信息");
        删除 = new JButton("删除信息");
        修改 = new JButton("修改信息");
        显示 = new JButton("显示全部");
        返回 = new JButton("返回登录");

        pb = new JPanel();
        pb.add(lb1, JLabel.CENTER);

        p0 = new JPanel();
        p0.add(lb2, JLabel.CENTER);

        p1 = new JPanel();//创建一个面板
        p1.add(new JLabel("学  号:", JLabel.CENTER));//JLabel.CENTER是指JLabel的中心点。CENTER是中心点的坐标
        p1.add(学号);

        p2 = new JPanel();
        p2.add(new JLabel("姓  名:", JLabel.CENTER));
        p2.add(姓名);

        p3 = new JPanel();
        p3.add(new JLabel("性  别:", JLabel.CENTER));
        p3.add(男);
        p3.add(女);

        p4 = new JPanel();
        p4.add(new JLabel("年    龄:", JLabel.CENTER));
        p4.add(年龄);

        p5 = new JPanel();
        p5.add(new JLabel("电      话:", JLabel.CENTER));
        p5.add(电话);

        p6 = new JPanel();
        p6.add(new JLabel("宿 舍 号 :", JLabel.CENTER));
        p6.add(宿舍号);

        p7 = new JPanel();
        p7.add(new JLabel("家庭住址:", JLabel.CENTER));
        p7.add(家庭住址);

        pv = new JPanel();//面板
        pv.setLayout(new GridLayout(8, 1));   //把pv组件设置成第七行1列的网格布局

        pv.add(p0);//把面板放到容器中,add()代表容器
        pv.add(p1);
        pv.add(p2);
        pv.add(p3);
        pv.add(p4);
        pv.add(p5);
        pv.add(p6);
        pv.add(p7);

        ph = new JPanel();
        ph.add(录入);
        ph.add(查询);
        ph.add(修改);
        ph.add(删除);
        ph.add(显示);
        ph.add(返回);

        Container con = getContentPane();//建立容器对象con,取得容器面板
        con.setLayout(new BorderLayout());//设置布局为边框布局,边框布局分东南西北中5个方位来添加控件。
        //若没有指定方位,将添加到中间,上下左右都可以扩展
        con.add(pb, BorderLayout.NORTH);//pb在北边
        con.add(pv, BorderLayout.CENTER);//pv在中间
        con.add(ph, BorderLayout.SOUTH);//ph在南边
        setDefaultCloseOperation(EXIT_ON_CLOSE);//关闭操作
        setBounds(100, 100, 900, 450);//setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点 width:组件的长度 height:组件的高度
        setVisible(true);//目的是使控件可以显示出来,如果该控件已经被显示出来

        student_information stu = new student_information();
        ArrayList<student_information> arry = new ArrayList<student_information>();
        //添加监听
        //点击录入按钮  学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码"
        录入.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String sID = 学号.getText();    //获取文本框中内容
                if (fun.find(sID) != -1) {
                    JOptionPane.showMessageDialog(null, "该学号对应的学生已经存在!!!\n\n请重新输入或者修改已经录入的学生");
                    //清空文本框
                    学号.setText("");
                    姓名.setText("");
                    年龄.setText("");
                    电话.setText("");
                    宿舍号.setText("");
                    家庭住址.setText("");

                    return;
                }
                String sName = 姓名.getText();
                //先判断学号和姓名是否为空,如果为空,直接退出
                if (sID.equals("") || sName.equals("")) {
                    JOptionPane.showMessageDialog(null, "录入的学生学号或姓名为空!!!\n\n请重新输入");
                    return;
                }
                String sAge = 年龄.getText();
                if (sAge.equals(""))//年龄为空,没有输入
                    sAge = "--";
                String sPhone = 电话.getText();
                if (sPhone.equals(""))
                    sPhone = "--";
                String sRoom = 宿舍号.getText();
                if (sRoom.equals(""))
                    sRoom = "--";
                String sHome = 家庭住址.getText();
                if (sHome.equals(""))
                    sHome = "--";

                String sSex = null;
                if (男.isSelected()) {//选择男女
                    sSex = 男.getText();
                } else {
                    sSex = 女.getText();
                }

                stu.setStuID(sID);
                stu.setAge(sAge);
                stu.setName(sName);
                stu.setSex(sSex);
                stu.setPhoneNumber(sPhone);
                stu.setHome_place(sHome);
                stu.setRoomNumber(sRoom);

                //arry.clear();//	清除原数组列表中的数据
                // Input input=new Input(stu);

                System.out.println("信息管理员");
                System.out.println(stu.fileString());

                fun.add(stu);
                fun.writeFile();

                JOptionPane.showMessageDialog(null, "录入成功!!!");
                //dispose();
                setVisible(false);
                new ManagerLogin();


            }
        });


        //显示全部学生信息
        显示.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //show_stuall all=new show_stuall();
                new show_stuall();
            }
        });

        //查询某个学生信息
        查询.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String sID = 学号.getText();    //获取文本框中内容
                if (sID.equals(""))
                    sID = "--";
                String sName = 姓名.getText();
                if (sName.equals(""))
                    sName = "--";
                String sAge = 年龄.getText();
                if (sAge.equals(""))             //年龄为空,没有输入
                    sAge = "--";
                String sPhone = 电话.getText();
                if (sPhone.equals(""))
                    sPhone = "--";
                String sRoom = 宿舍号.getText();
                if (sRoom.equals(""))
                    sRoom = "--";
                String sHome = 家庭住址.getText();
                if (sHome.equals(""))
                    sHome = "--";

                String sSex = null;
                if (男.isSelected()) {//选择男女
                    sSex = 男.getText();
                } else {
                    if (女.isSelected())
                        sSex = 女.getText();
                    else {
                        sSex = "--";
                    }
                }
                //将要查询的符合条件的写入文件
                FileWriter fw = null;
                BufferedWriter out = null;//学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码" };
                try {
                    fw = new FileWriter("查询时暂时存放的文件.txt");
                    out = new BufferedWriter(fw);
                    //姓名学号等中间隔一个空格
                    out.write(sID + "  ");
                    out.write(sName + "  ");
                    out.write(sSex + "  ");
                    out.write(sAge + "  ");
                    out.write(sPhone + "  ");
                    out.write(sRoom + "  "); //每次覆盖写入,无需全部保存
                    out.write(sHome + "  ");

                    out.close();
                    fw.close();

                } catch (IOException e1) {
                    e1.printStackTrace();

                }
                //开始查询
                new showones();

                //清空文本框
                学号.setText("");
                姓名.setText("");
                年龄.setText("");
                电话.setText("");
                宿舍号.setText("");
                家庭住址.setText("");
                group.clearSelection();

            }
        });


        //删除学生信息,按学号删除
        删除.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String sID = 学号.getText();    //获取文本框中内容
                int flag = fun.find(sID);
                if (flag == -1) {
                    JOptionPane.showMessageDialog(null, "未查找到该学号的学生!!!\n\n请重新输入");
                } else {
                    fun.delete(sID);
                    fun.writeFile();
                    JOptionPane.showMessageDialog(null, "删除成功!!!\n");
                }

                //清空文本框
                学号.setText("");
                姓名.setText("");
                年龄.setText("");
                电话.setText("");
                宿舍号.setText("");
                家庭住址.setText("");

                group.clearSelection();

            }
        });

        //修改学生信息
        修改.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String sID = 学号.getText();    //获取文本框中内容
                int flag = fun.find(sID);    //查找是否存在
                if (flag == -1) {
                    JOptionPane.showMessageDialog(null, "未查找到该学号的学生!!!\n\n请重新输入");
                    return;
                } else
                    JOptionPane.showMessageDialog(null, "该系统中存在该学生数据\n\n,确认返回后请输入需要修改后的数据");

                String sAge = 年龄.getText();
                if (sAge.equals(""))//年龄为空,没有输入
                    sAge = "--";
                String sPhone = 电话.getText();
                if (sPhone.equals(""))
                    sPhone = "--";
                String sRoom = 宿舍号.getText();
                if (sRoom.equals(""))
                    sRoom = "--";
                String sHome = 家庭住址.getText();
                if (sHome.equals(""))
                    sHome = "--";
                String sSex = null;
                if (男.isSelected()) {//选择男女
                    sSex = 男.getText();
                } else {
                    sSex = 女.getText();
                }
                String sName = 姓名.getText();
                //先判断学号和姓名是否为空,如果为空,直接退出
                if (sName.equals("")) {
                    JOptionPane.showMessageDialog(null, "录入的学生姓名为空!!!\n\n请重新输入");
                    return;
                }
                // student_information stu=new student_information();
                stu.setStuID(sID);
                stu.setAge(sAge);
                stu.setName(sName);
                stu.setSex(sSex);
                stu.setPhoneNumber(sPhone);
                stu.setHome_place(sHome);
                stu.setRoomNumber(sRoom);

                fun.update(stu);       //修改
                fun.writeFile();
                JOptionPane.showMessageDialog(null, "修改成功!!!");
                //清空文本框
                学号.setText("");
                姓名.setText("");
                年龄.setText("");
                电话.setText("");
                宿舍号.setText("");
                家庭住址.setText("");
                group.clearSelection();
            }
        });

        返回.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setVisible(false);      //目的是使控件不可以显示出来
                new Login();
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

    }

}

 以上为主函数与登陆界面的源码。

package Student_Manage;

import java.io.*;
import java.util.ArrayList;

public class function {
    //本程序学生数量不多,用数组列表ArrayList,  当学生数据多的时候,考虑用链表
    ArrayList<student_information> arry=new ArrayList<student_information>();
    public function()           //读文件,将文件中的学生信息存放在数组列表
    {
        this.readFile();
    }
    //根据学号查找学生信息,找到返回学号,找不到返回-1
    public int find(String str)
    {
        for (int i = 0; i<arry.size(); i++)
            if (arry.get(i).getStuID().equals(str))
                return i;//等于在数组列表的位置
        return -1;
    }

    //修改学生信息
    public void update(student_information stu) {
        int flag=find(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+");
                student_information st=new student_information(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(student_information stu)
    {
        System.out.println();
        System.out.println("要添加的学生");
        System.out.println(stu.fileString());
        System.out.println();
        if (find(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=find(s);
        if (pos==-1)
            return false;

        arry.remove(pos);
        return true;
    }

}

package Student_Manage;

public class student_information {
    private String stuID;    /*  学生学号  */
    private String name;     /* 学生姓名 */
    private String sex;     /* 学生性别  */
    private String age;        /*  学生年龄  */
    private String phoneNumber;   /* 学生电话号码   */
    private String home_place;   /* 学生家庭住址,籍贯 */
    private String roomNumber;   /* 宿舍号 */
    private String politics_status;

    /*无参构造函数*/
    public student_information() {

    }
    /*有参构造函数 */
    public student_information(String stuID,String name,String sex,String age,String phoneNumber,String roomNumber,String home_place) {
        super();
        this.stuID=stuID;
        this.name=name;
        this.sex=sex;
        this.age=age;
        this.phoneNumber=phoneNumber;
        this.home_place=home_place;
        this.roomNumber=roomNumber;
    }
    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 getPhoneNumber() {
        return this.phoneNumber;
    }
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber=phoneNumber;
    }

    public String getHome_place() {
        return this.home_place;
    }
    public void setHome_place(String home_place) {
        this.home_place=home_place;
    }

    public String getRoomNumber() {
        return this.roomNumber;
    }
    public void setRoomNumber(String roomNumber) {
        this.roomNumber=roomNumber;
    }



    //从文件中录入的数据格式    "学号  姓名  性别  年龄  电话  宿舍号  政治面貌  家庭住址"
    public String fileString()
    {
        return stuID+" "+name+" "+sex+" "+age+"  "+phoneNumber+"  "+roomNumber+"  "+home_place;
    }

}
package Student_Manage;

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;

public class show_stuall {
    JTable table = null;
    DefaultTableModel model = null;
    //显示全部学生信息
    public show_stuall() {
        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(400, 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);

        // 第一列列宽设置为40
        table.getColumnModel().getColumn(0).setPreferredWidth(40);

        // 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)
        table.setPreferredScrollableViewportSize(new Dimension(900, 320));

        //排序器
        RowSorter sorter = new TableRowSorter(model);
        table.setRowSorter(sorter);
        JScrollPane pane = new JScrollPane(table);

        // 把 表格 放到 滚动面板 中(表头将自动添加到滚动面板顶部)
        JScrollPane scrollPane = new JScrollPane(table);

        // 添加 滚动面板 到 内容面板
        panel.add(scrollPane);
        // JScrollPane pane = new JScrollPane(table);
        // 设置 内容面板 到 窗口
        jf.setContentPane(panel);
        jf.pack();
        jf.setSize(900, 600);
        jf.add(scrollPane, BorderLayout.CENTER);

        //数据居中显示
        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);
        }
    }

    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;
    }
}
package Student_Manage;

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Vector;

public class showones {
    //读取学生信息,展示在窗口

    ArrayList<student_information> arry=new ArrayList<student_information>();
    student_information stu=new student_information();
    JTable table = null;
    DefaultTableModel model = null;
    //显示全部学生信息
    public showones() {
        JFrame jf = new JFrame("显示符合条件的学生信息(点击表头可以按照升序降序排序");
        //jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        // 创建内容面板
        JPanel panel = new JPanel();
        // 表头(列名)
        //  String[] columnNames ={"序号","学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码" };
        Vector columnNames=createColumnNames();
        //需要查询的符合条件的,用字符串数组f记录
        String [] f = new String [7];
        try{
            FileReader f1 = new FileReader("查询时暂时存放的文件.txt");
            BufferedReader br=new BufferedReader(f1);
            //arry.clear();//	清除原数组列表中的数据
            String t=null;
            while ((t= br.readLine())!= null)
            {
                f=t.split("\\s+");			//要查询的学生信息
            }


            f1.close();
            br.close();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

        //记得清空,否则下次查询没有筛选条件时,查询的是上一次的条件
        File file =new File("查询时暂时存放的文件.txt");
        try {
            if(!file.exists()) {
                file.createNewFile();
            }
            FileWriter fileWriter =new FileWriter(file);
            fileWriter.write("");
            fileWriter.flush();
            fileWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //判断需要查询的是那些条件
        ArrayList List = new ArrayList();
        for(int i=0;i<7;i++) {
            if(!f[i].equals("--"))     //需要满足的条件
                List.add(i);
        }
        //将满足查询条件的学生信息录入系统
        for(int i=0;i<List.size();i++)
            System.out.println(List.get(i));
        try{
            FileReader f1 = new FileReader("student.txt");
            BufferedReader br=new BufferedReader(f1);
            String t=null;
            int flag=0;
            int t1=0;

            arry.clear();//	清除原数组列表中的数据
            while ((t= br.readLine())!= null)
            {
                String [] s=t.split("\\s+");
                for(int i=0;i<List.size();i++)
                {
                    t1=(int) List.get(i);
                    if(f[t1].equals(s[t1])) {
                        flag=flag+1;
                    }
                }
                if(flag==List.size()) {
                    student_information st=new student_information(s[0],s[1],s[2],s[3],s[4],s[5],s[6]);//注意若该文件每行没有七个字符串,则会出错
                    arry.add(st);
                }
                flag=0;

            }
            f1.close();
            br.close();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

        Vector data=createTableModelData();

        // 创建一个默认的表格模型
        model = new DefaultTableModel(data, columnNames);
        table = new JTable(model);
        table.setPreferredScrollableViewportSize(new Dimension(400, 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);

        // 第一列列宽设置为40
        table.getColumnModel().getColumn(0).setPreferredWidth(40);

        // 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)
        table.setPreferredScrollableViewportSize(new Dimension(900, 320));
        //排序器
        RowSorter sorter = new TableRowSorter(model);
        table.setRowSorter(sorter);
        JScrollPane pane = new JScrollPane(table);

        // 把 表格 放到 滚动面板 中(表头将自动添加到滚动面板顶部)
        JScrollPane scrollPane = new JScrollPane(table);

        // 添加 滚动面板 到 内容面板
        panel.add(scrollPane);
        // JScrollPane pane = new JScrollPane(table);
        // 设置 内容面板 到 窗口
        jf.setContentPane(panel);
        jf.pack();
        jf.setSize(900, 600);
        jf.add(scrollPane, BorderLayout.CENTER);
        //数据居中显示
        DefaultTableCellRenderer r = new DefaultTableCellRenderer();
        r.setHorizontalAlignment(JLabel.CENTER);
        table.setDefaultRenderer(Object.class, r);

        jf.setLocationRelativeTo(null);
        int t=arry.size();
        //int t=table.getRowCount();
        if(t<=0){
            JOptionPane.showMessageDialog(null, "该系统中没有符合条件的学生!!!");
            jf.setVisible(false);
        }
        else {
            jf.setVisible(true);
        }
    }
    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();
        for(int i=0;i<arry.size();i++) {
            Vector<String> rowData=new Vector<>();
            rowData.add(arry.get(i).getStuID());
            rowData.add(arry.get(i).getName());
            rowData.add(arry.get(i).getSex());
            rowData.add(arry.get(i).getAge());
            rowData.add(arry.get(i).getPhoneNumber());
            rowData.add(arry.get(i).getRoomNumber());
            rowData.add(arry.get(i).getHome_place());

            data.add(rowData);

        }
        return data;
    }
}

以上为实现系统功能的源码。

六、课程设计总结与感想

本次课程设计任务意义非凡,真正的让我们把所学内容用于了实践。通过我们两位长达十天的努力,终于完成本项目。但是我们的项目还不够完美,一些功能有待优化,比如我们可以加入学生登陆页面,使其拥有个人信息的查看权,同时,我们的界面设计有些简陋,程序外观有待优化。但本次项目为我们积累了宝贵的经验,对未来的项目开发有极大的帮助。

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值