朋友们啊,请仔细看博客哦。
文章目录
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设计有很大帮助,具体安装和下载可以查看别的教程
今天的文章Java+学生信息管理系统+GUI+文件分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/29526.html