Java 学生管理系统 GUI txt文件存储

小白第一次写学生管理系统,参考自博客https://blog.csdn.net/H200102/article/details/94744641,感谢作者H.千面

实现功能:首先进入登陆页面通过输入用户名和密码进行登陆,登陆之后进行权限选择,根据选择的权限及进行所选权限下的操作。

整体是在Main.java中创建一个LoginFirst对象,实现登录界面,在Login类的实现中,通过判断是否进入权限选择界面,由Login类实现。将需要的学生信息写到一个student_information类中,实现如下

目测登录界面实现之后,应如下图所示:
用户登录界面

首先实现最开始的账号密码登陆:
LoginFirst.java

package Student_Manage;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class LoginFirst extends JFrame implements ActionListener{
	//想要实现监听功能就要重写接口ActionListener
	/**
	 * author:cj
	 * date:2019.11.26
	 */
	private static final long serialVersionUID = 1L;
	private JPanel jp1,jp2,jp3;
	private JButton jb1,jb2;
	private JLabel jl1,jl2;
	private JTextField jtf;
	private JPasswordField jpf;
	private Icon welcomeIcon=new ImageIcon("welcome.png");
	private JLabel lbWelcome=new JLabel(welcomeIcon);
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Login();
	}
	public LoginFirst(){
		
		this.add(lbWelcome);
		this.setTitle("用户登录");
		//Box.createVerticalStrut(100);
		this.setSize(700,800);  //通过这里可以调整界面的大小
		this.setLocation(100,100);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setLayout(new GridLayout(4,1));
		jp1 = new JPanel();
		jl1 = new JLabel("用户名:");
		jtf = new JTextField(20);
		jp1.add(jl1);jp1.add(jtf);
		this.add(jp1);
		
		
		jp2 = new JPanel();
		jl2 = new JLabel("密 码:");
		jpf = new JPasswordField(20);
		jp2.add(jl2);jp2.add(jpf);
		this.add(jp2);
		
		jp3 = new JPanel();
		jb1 = new JButton("登录");
		jb2 = new JButton("退出");
		jp3.add(jb1);jp3.add(jb2);
		this.add(jp3);
		
		this.setVisible(true);
		System.out.println(jtf.getText().toString());
		//增加监听
		jb1.addActionListener((ActionListener) this);
		jb2.addActionListener((ActionListener) this);
		
	}
	public void actionPerformed(ActionEvent e) {
		
       if(e.getSource()==jb1) {//如果点击的是"登陆"的button,则对账号密码进行判断
            String account=jtf.getText();
            String password = new String(jpf.getPassword());
            //FileOpe.getInfoByAccount(account);
            if(account.equals("123")&&password.equals("123456")) {
                JOptionPane.showMessageDialog(this,"登录成功");
                this.dispose();
                new Login();
            }
            else {
            	JOptionPane.showMessageDialog(this,"登录失败");
            	System.out.println(account+password);
            	return;
            }
        }
        else if(e.getSource()==jb2){//如果点击的是"退出"的button那么就直接退出程序
            JOptionPane.showMessageDialog(this,"谢谢光临");
            System.exit(0);
        }
    }
}

在Main.java中设置界面的入口,进入时首先看到的是登录界面,即new LoginFirst();

Main.java

package Student_Manage;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new LoginFirst();//LoginFirst定义为登陆的界面
	}

}

然后现在准备实现Login类,这个类准备实现选择权限的功能,它的实现和LogFirst在思想上差不多,先创建好Button等,然后创建监听,点击权限后就进入新的界面,因为这次我想在选择之后的界面创建一个Button,可以返回权限选择界面,frame.setVisible用到了这个,即监听到选择了“学生”的Button就设置之前的界面不可见。

Login.java

package Student_Manage;

/**
 * author:陈娟
 * 功能:权限选择界面
 */
import java.awt.*;
import javax.swing.*;

import java.awt.event.*;

public  class Login extends JFrame implements  ActionListener{
	//重写接口实现监听
	private static final long serialVersionUID = 1L;
	//定义组件
	JFrame frame=new JFrame();
	JPanel jp1,jp2,jp3;//面板
	JLabel jlb1,jlb2;//标签
	JButton jb1,jb2;//按钮
	
	//构造函数
	public Login(){
		//创建面板
		jp1=new JPanel();
		jp2=new JPanel();
		jp3=new JPanel();
		//创建标签
		jlb1=new JLabel("选择使用权限");
		
		//创建按钮
		jb1=new JButton("老师(或信息管理人员)");
		jb2=new JButton("学生");
				
		//设置布局管理
		frame.setLayout(new GridLayout(3, 1));//网格式布局
		
		//加入各个组件
		jp1.add(jlb1);
			
		jp3.add(jb1);
		jp3.add(jb2);
		
		//加入到JFrame
		frame.add(jp2);
		frame.add(jp1);
		//this.add(jp2);
		frame.add(jp3);
		
		//设置窗体
		frame.setTitle("用户登录界面");//窗体标签
		frame.setSize(400, 300);//窗体大小
		frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFrame
		frame.setVisible(true);//显示窗体
		
		//增加监听
				
		jb1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			   frame.setVisible(false);
				new ManagerLogin();//老师权限的界面
			}
		});
		
		jb2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			   frame.setVisible(false);
				new StudentLogin();//学生权限的界面  
			}
		});
		
		
	}

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

下面是student信息的类
student_information.java

package Student_Manage;

public class student_information {
	private String stuID;    /*  学生学号  */
	private String name;     /* 学生姓名 */
	private String sex;     /* 学生性别  */
    private String age;        /*  学生年龄  */
    private String callnumber;   /* 学生电话号码   */
    private String home_place;   /* 学生家庭住址,籍贯 */
    private String identityID;   /* 学生身份证号码 */
    
    /*无参构造函数*/
    public student_information() {
    
    }
    /*有参构造函数 */
    public student_information(String stuID,String name,String sex,String age,String callnumber,String home_place,String identityID) {
    	super();
    	this.stuID=stuID;
    	this.name=name;
    	this.sex=sex;
    	this.age=age;
    	this.callnumber=callnumber;
    	this.home_place=home_place;
    	this.identityID=identityID;
    }
    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;
	}

   
}

StudentLogin.java

package Student_Manage;
	
//学生登陆后的界面
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

public  class StudentLogin extends JFrame implements  ActionListener{

	private static final long serialVersionUID = 1L;
		Function fun=new Function();		
		//定义组件 
		JLabel lb1=new JLabel("当前是学生登录界面" );//JLabel 对象可以显示文本、图像
		JLabel lb2=new JLabel("提示:录入前请先输入学号,修改、删除根据学号修改信息");
	    JTextField 学号,姓名,年龄,电话号码,家庭住址,身份证号码;//输入学生基本信息得文本
	    JRadioButton 男,;//声明单选项对象,性别选择
	    ButtonGroup group=null;//声明按钮组
	    JButton 录入,查询,删除,修改,显示,返回;//声明相应的操作的按钮
	    JPanel p1,p2,p3,p4,p5,p6,p7,pv,ph,pb;//调节布局的通道
	    
	    student_information stu=new student_information();
	    ArrayList<student_information> arry=new ArrayList<>();
	    
	    public StudentLogin(){       //负责管理员登录的主窗口
	        super("学生信息管理系统");
	        学号=new JTextField(10);//创建文本信息的的对象
	        姓名=new JTextField(10);
	        电话号码=new JTextField(15);
	        年龄=new JTextField(5);
	        家庭住址=new JTextField(15);
	        身份证号码=new JTextField(18);
	        
	        group=new ButtonGroup();=new JRadioButton("男");//初始化单选框,=new JRadioButton("女");
	        group.add();//把按钮添加到按钮组
	        group.add();
	        //录入=new JButton("增加学生信息");//创建按钮对象
	        查询=new JButton("查询某个学生信息");
	        //删除=new JButton("删除学生信息");
	       // 修改.setEnabled(false);   //设置修改控件不可用
	        //修改=new JButton("修改学生信息"); 
	        显示=new JButton("显示全部学生信息");
	        返回=new JButton("返回");
	    
	        pb=new JPanel();
	        pb.add(lb1,JLabel.CENTER);
	                
	        p1=new JPanel();//创建一个面板     
	        //p1.setLayout(new GridLayout(3,0));
	        p1.add(lb2,JLabel.CENTER);
	        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(7,1));   //把pv组件设置成第七行1列的网格布局
	            
	        pv.add(p1);//把面板放到容器中,add()代表容器
	        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);//Frame对象lb调用方法add(),lb放在最北上方     
	        con.add(pv, BorderLayout.CENTER);//pv在中间
	        con.add(ph, BorderLayout.SOUTH);//ph在南边
	        setDefaultCloseOperation(EXIT_ON_CLOSE);//置一个默认的关闭操作,也就是你的JFrame窗口的关闭按钮,点击它时,退出程序
	        setBounds(100,100,900,450);//setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点 width:组件的长度 height:组件的高度
	        setVisible(true);//目的是使控件可以显示出来,如果该控件已经被显示出来
	          
	        //添加监听        
	       //显示全部学生信息
	          显示.addActionListener(new ActionListener() {
	     	   public void actionPerformed(ActionEvent e) {     		   
	     		  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 scall = 电话号码.getText();
	              	 if(scall.equals(""))
	              			  scall="--";
	              		 String shome = 家庭住址.getText();
	              		if(shome.equals(""))
	              		    shome="--";
	              		 String siden = 身份证号码.getText();
	              		if(siden.equals(""))
	              		   siden="--";
	              		 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(scall+"  ");
	      					 out.write(shome+"  ");
	      					 out.write(siden+"  "); //每次覆盖写入,无需全部保存
	      				   					 
	      					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) {
				setVisible(false);      //目的是使控件不可以显示出来
				new Login();
			}
		});
  }

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

ManagerLogin.java

package Student_Manage;

//信息管理人员登陆后的界面
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;/*ArrayList;
import java.util.Hashtable;
*/
public class ManagerLogin extends JFrame implements  ActionListener{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	Function fun=new Function();
	
	//定义组件 
	JLabel lb1=new JLabel("当前是信息管理人员登录界面" );//JLabel 对象可以显示文本、图像
	JLabel lb2=new JLabel("提示:录入前请先输入学号,修改、删除根据学号修改信息\n");
	
    JTextField 学号,姓名,年龄,电话号码,家庭住址,身份证号码;//输入学生基本信息得文本
    JRadioButton 男,;//声明单选项对象,性别选择
    ButtonGroup group=null;//声明按钮组
    JButton 录入,查询,删除,修改,显示,返回;//声明相应的操作的按钮
    JPanel p1,p2,p3,p4,p5,p6,p7,pv,ph,pb;//调节布局的通道
    
    public ManagerLogin(){       //负责管理员登录的主窗口
        super("学生信息管理系统");
        学号=new JTextField(10);//创建文本信息的的对象
        姓名=new JTextField(10);
        电话号码=new JTextField(15);
        年龄=new JTextField(5);
        家庭住址=new JTextField(15);
        身份证号码=new JTextField(18);
        
        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);
                
        p1=new JPanel();//创建一个面板     
       
        p1.add(lb2,JLabel.CENTER);
        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(7,1));   //把pv组件设置成第七行1列的网格布局
            
        pv.add(p1);//把面板放到容器中,add()代表容器
        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);//Frame对象lb调用方法add(),lb放在最北上方     
        con.add(pv, BorderLayout.CENTER);//pv在中间
        con.add(ph, BorderLayout.SOUTH);//ph在南边
        setDefaultCloseOperation(EXIT_ON_CLOSE);//置一个默认的关闭操作,也就是你的JFrame窗口的关闭按钮,点击它时,退出程序
        setBounds(100,100,900,450);//setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点 width:组件的长度 height:组件的高度
        setVisible(true);//目的是使控件可以显示出来,如果该控件已经被显示出来
          
        student_information stu=new student_information();
        @SuppressWarnings("unused")
		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 scall = 电话号码.getText();
      		 if(scall.equals(""))
      			  scall="--";
      		 String shome = 家庭住址.getText();
      		if(shome.equals(""))
      		    shome="--";
      		 String siden = 身份证号码.getText();
      		if(siden.equals(""))
      		   siden="--";
      		 String ssex=null;
             if(.isSelected()){//选择男女
                ssex=.getText();
             }
             else{
                 ssex=.getText();
             }   
            
      		 stu.setStuID(sID);
      		 stu.setAge(sage);
      		 stu.setName(sname);
      		 stu.setSex(ssex);
      		 stu.setCallnummber(scall);
      		 stu.setHome_place(shome);
      		 stu.setIdentityID(siden);
      		 
      		 //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 scall = 电话号码.getText();
            	 if(scall.equals(""))
            			  scall="--";
            		 String shome = 家庭住址.getText();
            		if(shome.equals(""))
            		    shome="--";
            		 String siden = 身份证号码.getText();
            		if(siden.equals(""))
            		   siden="--";
            		 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(scall+"  ");
    					 out.write(shome+"  ");
    					 out.write(siden+"  "); //每次覆盖写入,无需全部保存
    				   					 
    					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 scall = 电话号码.getText();
          		 if(scall.equals(""))
          			  scall="--";
          		 String shome = 家庭住址.getText();
          		if(shome.equals(""))
          		    shome="--";
          		 String siden = 身份证号码.getText();
          		if(siden.equals(""))
          		   siden="--";
          		 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.setCallnummber(scall);
          		 stu.setHome_place(shome);
          		 stu.setIdentityID(siden);
         		 
          		 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
		
	}

}

Function.java

package Student_Manage;

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


//修改,删除,增加某个学生信息

class Function {
	//使用数组存储
    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;
	}
		
}			

showstuall.java

package Student_Manage;

import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

import java.io.*;

import java.util.ArrayList;
import java.util.Vector;

//读取学生信息,展示在窗口

@SuppressWarnings("unused")
public class show_stuall {	
	
	JTable table = null;
    DefaultTableModel model = null;
	//显示全部学生信息
   @SuppressWarnings("unchecked")
public show_stuall() {
	    JFrame jf = new JFrame("显示全部学生信息(点击表头可以按照升序降序排序)");	   
	    // 创建内容面板
	     JPanel panel = new JPanel();
	    // 表头(列名)
	   @SuppressWarnings("rawtypes")
	Vector columnNames=createColumnNames();
	   @SuppressWarnings("rawtypes")
	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));
	        
	        //排序器	        
	        @SuppressWarnings({ "rawtypes" })
			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);
	        }	 
	    }
    
     @SuppressWarnings({ "rawtypes", "unchecked" })
	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;
   }
   
     @SuppressWarnings({ "rawtypes", "unchecked" })
	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;
     }   
}
	       

showones.java

package Student_Manage;

import javax.management.modelmbean.ModelMBean;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

import java.awt.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Vector;


@SuppressWarnings("unused")
public class showones {	
	//读取学生信息,展示在窗口
		
		ArrayList<student_information> arry=new ArrayList<student_information>();
		student_information stu=new student_information();
		JTable table = null;
	    DefaultTableModel model = null;
		//显示全部学生信息
	   @SuppressWarnings("unchecked")
	public showones() {
		    JFrame jf = new JFrame("显示符合条件的学生信息(点击表头可以按照升序降序排序");
		    //jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		    // 创建内容面板
		     JPanel panel = new JPanel();
		    // 表头(列名)
		  //  String[] columnNames ={"序号","学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码" };  	
		    @SuppressWarnings("rawtypes")
			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) {
								
					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();			         
			        }		
			    
				//判断需要查询的是那些条件				
				@SuppressWarnings("rawtypes")
				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();				
						}	
		    	 				
				@SuppressWarnings("rawtypes")
				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));
		        //排序器	        
		        @SuppressWarnings("rawtypes")
				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();
				 
			        if(t<=0){
			        	JOptionPane.showMessageDialog(null, "该系统中没有符合条件的学生!!!");
			        	jf.setVisible(false);
			        }
			        else {
			        	jf.setVisible(true);
			        }
		    }
     @SuppressWarnings({ "rawtypes", "unchecked" })
	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;
       }

     @SuppressWarnings({ "unchecked", "rawtypes" })
	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).getCallnumber());
	    	 rowData.add(arry.get(i).getHome_place());
	    	 rowData.add(arry.get(i).getIdentityID());			    	 		    					  
    		 data.add(rowData);
    					  	    							   
		  }	   
         return data;
	  }  
    
}

  • 26
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Java学生信息管理系统GUI(图形用户界面)是基于Java编程语言,利用图形界面技术实现的学生信息管理系统。 该系统主要包括学生信息的增加、删除、修改和查询等功能。通过GUI界面,用户可以方便地进行操作,大大提高了系统的易用性。 系统的主界面以窗口形式展现,以便用户能够直观地了解系统的功能和操作方式。在主界面上,通常会有菜单栏、工具栏以及各种操作按钮。通过菜单栏,用户可以选择相应的功能模块,例如添加学生信息、删除学生信息等。而通过工具栏和操作按钮,用户可以快速进行一些常用操作,例如保存数据、导出数据等。 在学生信息的管理方面,系统提供了以下功能: 1.添加学生信息:用户可以输入学生的基本信息,如姓名、性别、年龄、学号等,并可以上传照片等相关文件。 2.删除学生信息:用户可以根据学生的学号或其他特定属性,进行删除操作。 3.修改学生信息:用户可以修改学生的各个信息字段,以及上传新的照片等。 4.查询学生信息:用户可以根据学号、姓名等条件,进行学生信息的查询,并可以进行高级筛选,以获取满足特定条件的学生信息。 5.统计学生信息:系统可以自动对学生信息进行统计,如班级人数、男女比例等。 为了增强系统的安全性,系统还可以提供登录功能,只有经过授权的用户才能访问和操作系统。同时,系统还可以提供数据的备份和恢复功能,以防止数据丢失。 总之,Java学生信息管理系统GUI可以为学校或机构提供方便、高效、安全的学生信息管理服务。它的图形化用户界面使得用户可以更直观地进行操作,提高了用户体验,同时也极大地简化了系统使用的难度。这种系统的设计和实现需要具备一定的Java编程技术以及图形界面开发技术的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值