朋友们啊,请仔细看博客哦

0 说明

1、关于项目运行

这个项目我完成的时候,确实是可以跑起来的,所有功能和效果基本都写在博客里了,代码资源也给上了,是免费的!!!免费的!!!免费的!!!(遇到好几个朋友私信问代码,我也是无奈了)。

如果运行不起来,出现各种问题可能是因为版本,电脑环境等原因,这些可以在评论区讨论(我盲猜我爱莫能助),或者根据报错自行搜索。这个项目对于我来说有点久远了,当时做好后就写了这个博客,很多细节可能不太记得了,另外,我要转前端了哈哈哈(*^▽^*)(现在主要是做react前端开发),所以搞Java的同学自己加油吧~

遇到问题没什么,多百度,多看教程,你可以的!


2、关于项目代码下载

这个项目的代码是免费开源的!可以直接使用~

你能从这里面学到东西,做得更好,那就是你的收获~我当初也是看了很多人的博客才写出这的,虽然还是做得不是很好。。。。。

(1)项目代码资源下载地址:Student_Manage.zip
在这里插入图片描述

(2)

因为CSDN的积分是自动调整的,且很多同学都没有积分,补充上了码云的代码仓库地址(这个是免费的,不需要积分)https://gitee.com/huan2515/student-manage.git

在这里插入图片描述
附上“如何在码云Gitee中部署个人静态网站?git提交网站”地址:https://www.bilibili.com/read/cv6506359?share_medium=android&share_source=qq&bbid=XYA0AA2A7669743DD029D12A5C0A0B24B7524&ts=1608258917421

有精力的同学可以使用git、gitee或者github 自己搭建自己的仓库啥的,更方便~


3、关于项目结构和优化

我写的时候是用的eclipse,JDK8。

这个项目只是当初我的一个很简陋的课程设计,还有很多可以提升的空间,很多的重复性源码也可以整理成为工具类,方便调用。参考借鉴的同学可以参考我这个项目,以节省时间和精力,多优化。

最终项目结构:
在这里插入图片描述
我这简陋的成果只是给有需要的同学参考,希望同学们可以自己多动手,练练实践能力,编码能力是要自己去踩坑才能有提升的呀。

另外,大部分项目是需要操作数据库的,但我当时做项目的时候,老师要求的是操作文件,需要操作数据库的朋友,自行研究一下吧,附上我的数据库学习博客:Java操作数据库-JDBC数据库


4、关于私信和评论区回复

现在可能很少看CSDN的私信和评论区了,所以回复可能不是那么及时。如果是私信问的话,也麻烦说清楚是哪个博客哪个项目,具体是什么问题,我知道的话,就尽量解答~

主要也是这个项目是很久之前做的课程设计,历史太久远了,加上我现在主要做的是react前端开发,所以可能很多问题就爱莫能助了,评论区讨论的朋友如果知道怎么解决可以回一下哈~


1. 课程设计要求,需求说明

该系统可实现学生信息的增加,删除,修改,查询,筛选的功能。并将学生信息存储在文件txt 中,不会覆盖原数据。

该系统没有利用数据库,是使用文件来存储学生数据,有基本的 UI 界面,操作友好,项目运行没有问题。

学生的数据用数组存放,ArrayList。

2. 主函数

package Student_Manage;

public class Main {

	 public static void main(String[] args) {
		new Login();
	    }
}

学生类

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

   
}

3. 静态登录界面实现

  登录界面还有完善的空间,可增加密码验证,通过管理员和学生账号的不同验证其身份,还可增加注册功能
package Student_Manage;

/**
 * 功能:学生成绩管理系统
 * 步骤1、登录界面的静态实现
 * author:ywq
 */
import java.awt.*;
import javax.swing.*;

import java.awt.event.*;

public  class Login extends JFrame implements  ActionListener{
	//定义组件
	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);//显示窗体
		
		//锁定窗体
		//this.setResizable(false);
				
		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
		
	}
}

效果图
效果图

4. 信息管理员登录界面

该界面的标签,文本框等的位置还可以调整,使其更美观。
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{
	
	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;//调节布局的通道
    
    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();
        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();
      		 
      		  //清空文本框
      		 /*
			学号.setText("");
			姓名.setText("");
			年龄.setText("");
			电话号码.setText("");
		    家庭住址.setText("");
			身份证号码.setText("");
			group.clearSelection();   //清空按钮已选状态
			*/
    	   }   	   
       });
        
                   
       //显示全部学生信息
          显示.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
		
	}

}

效果图
在这里插入图片描述

5. 学生登录界面

	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 StudentLogin extends JFrame implements  ActionListener{
		
		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
			
		}
}

效果图
在这里插入图片描述

6. 增加,删除,修改功能

package Student_Manage;

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


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

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;
	}
	
		
/*
	//删除学生信息,并且重写文件内容					
	 public boolean delete(String s) {	
		        File file =new File("student.txt");
		        try {
		            if(!file.exists()) {
		                file.createNewFile();
		            }
		            FileWriter fileWriter =new FileWriter(file);
		            fileWriter.write("");
		            fileWriter.flush();
		            fileWriter.close();		            
	    			int flag=find(s);		    		
		    		System.out.print(flag);
		    		arry.remove(flag);  		    		
		    		writefile();
		    		return true;	            
		        } catch (IOException e) {
		            e.printStackTrace();
		            return false;
		        }				
		    }
		    */		
}			

增加功能的效果图
在这里插入图片描述
删除功能的效果图
在这里插入图片描述
修改功能的效果图

  修改,输入某个学生的学号及修改之后的信息,按照学号查找该学生并且将修改之后的信息录入系统
  修改功能还可以进一步完善,例如只修改某个条件,而无需输入所有信息

在这里插入图片描述
在这里插入图片描述
删除功能的效果图

删除功能是通过输入学号,按照学号查找,查找到之后在系统中删除该学生

在这里插入图片描述

7. 查询和筛选功能

  • 显示系统中所有学生的信息
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;

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

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.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;


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).getCallnumber());
	    	 rowData.add(arry.get(i).getHome_place());
	    	 rowData.add(arry.get(i).getIdentityID());			    	 		    					  
    		 data.add(rowData);
    					  	    							   
		  }	   
         return data;
	  }  
    
}

例如查询名字为Q的男生
效果图

在这里插入图片描述
在这里插入图片描述

 当没有输入任何条件时,点击该筛选按钮,即显示所有的学生信息

PS:插件推荐 windowbuilder

该插件对于GUI设计有很大帮助,具体安装和下载可以查看别的教程

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐