Java编写学籍信息管理系统,完整代码

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

  利用链表结构存储学生姓名、宿舍、班级、专业四个信息,student类存储信息,ListNode类为结点,StudentLinkedList类为存储一个个学生的链表,CreatList类在每次录入一个学生的信息创建一个student类,将StudentLinkedList设置为静态,所以每次录入时都存进该链表里录入界面可以进入,点确认confirm键录入清除文本框内容功能不能实现,以及查询功能附在文本框里显示内容实现不了。

public class Student {
     String name;
     String Dept;
     String Major;
     String Class;
     public Student(String name, String Dept, String Major,String Class) {
            this.name = name;
            this.Dept = Dept;
            this.Major= Major;
            this.Class= Class;
     }
     
     public void setname(String name) {
        this.name=name;
    }
     
     public String returnname() {
        return name;
    }
     
     public void setDept(String Dept) {
        this.Dept=Dept;
    }
         
     public String returnDept() {
        return Dept;
    }
     
     public void setMajor(String Major) {
        this.Major=Major;
    }
     
    public String returnMajor() {
        return Major;
    }
    
    public void setClass(String Class) {
        this.Class=Class;
    }
     
    public String returnClass() {
        return Class;
    }     
}
 
 
 
public class ListNode {
    Student student;
    ListNode next;
 
    public ListNode(Student student) {
        this.student = student;
        this.next = null;
    }
}
 
 
public class StudentLinkedList {
        protected ListNode head;
 
        public StudentLinkedList() {
            this.head = null;
        }
 
        // 向链表添加学生对象的方法
        public void addStudent(Student student) {
            ListNode newNode = new ListNode(student);
            if (head == null) {
                head = newNode;
            }
            else {
                ListNode current = head;
                while (current.next != null) {
                    current = current.next;
                }
                current.next = newNode;
            }
        }
        public ListNode returnHead() {
            return(this.head);
        }
}
 
 
public class CreateList {
         public static StudentLinkedList StudentList; // 作为成员变量
 
            public CreateList(String n, String d, String m, String c) {
                Student student = new Student(n, d, m, c);
                StudentList = new StudentLinkedList(); // 初始化成员变量
                StudentList.addStudent(student);
            }
            
}
 
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
 
public class ManagerWindow extends JFrame{
     private CreateList list;
     public JTextField jte;
     public ManagerWindow(){
     Container cp=this.getContentPane();
     JPanel p1=new JPanel(new GridLayout(2,1,5,5));
     JLabel jl=new JLabel("学生学籍管理系统");
     setLayout(new BorderLayout());
     cp.add(BorderLayout.NORTH,p1);
     p1.add(jl);
     jl.setHorizontalAlignment(SwingConstants.CENTER);
     JMenuBar mb = new JMenuBar();
     JMenu InputMenu=new JMenu ();
     JMenuItem  menu1=new JMenuItem ("学生信息录入");
     mb.add(menu1);
     JMenu InqueMenu=new JMenu ();
     JMenuItem  menu2=new JMenuItem ("学生信息查询");
     mb.add(menu2);
     p1.add(mb);
     JPanel p4=new JPanel(new GridLayout(3,1,10,10));
     JPanel p2=new JPanel(new FlowLayout(FlowLayout.LEFT));
     jte=new JTextField(15);
     JPanel p3=new JPanel(new FlowLayout(FlowLayout.LEFT));
     JButton Input=new JButton("录入");
     JButton Ique=new JButton("查询姓名");
     p2.add(jte); 
     p2.add(p3);
     p3.add(Ique); 
     p3.add(Input); 
 
     JPanel jp2=new JPanel(new GridLayout(2,4,5,3));
     cp.add(BorderLayout.CENTER,jp2);
     JLabel lName1=new JLabel("姓名");
     JLabel lDept1 = new JLabel("宿舍");
     JLabel lMajor1 = new JLabel("专业");
     JLabel lClass1= new JLabel("班级");
     jp2.add(lName1);
     jp2.add(lDept1);
     jp2.add(lMajor1);
     jp2.add(lClass1);
     JTextField tname1=new JTextField(15);
     JTextField tDept1=new JTextField(15);
     JTextField tMajor1=new JTextField(15);
     JTextField tClass1=new JTextField(15);
         jp2.add(tname1);
         jp2.add(tDept1);
        jp2.add(tMajor1);
     jp2.add(tClass1);
     p4.add(p2);
     p4.add(p3);
     p4.add(jp2);
     cp.add(BorderLayout.CENTER,p4);
     
      Input.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e) {
         
              JDialog dialog=new JDialog(ManagerWindow.this,"学生录入",true);
              dialog.setLayout(new GridLayout(5,1,5,5));
              JLabel lName=new JLabel("姓名");
              JTextField tname=new JTextField(15);
              JLabel lDept = new JLabel("宿舍");
              JTextField tDept=new JTextField(15);
              JLabel lMajor = new JLabel("专业");
              JTextField tMajor=new JTextField(15);
              JLabel lClass = new JLabel("班级");
                 JTextField tClass=new JTextField(15);
                 JPanel pname=new JPanel(new FlowLayout(FlowLayout.LEFT));
               JPanel pDept=new JPanel(new FlowLayout(FlowLayout.LEFT));
               JPanel pMajor=new JPanel(new FlowLayout(FlowLayout.LEFT));
               JPanel pClass=new JPanel(new FlowLayout(FlowLayout.LEFT));
               JPanel pButton=new JPanel(new FlowLayout(FlowLayout.LEFT));
               JButton Confirm=new JButton("确认");
               pButton.add(Confirm);
               pname.add(lName);
               pname.add(tname);
               pDept.add(lDept);
               pDept.add(tDept);
               pMajor.add(lMajor);
               pMajor.add(tMajor);
               pClass.add(lClass);
               pClass.add(tClass); 
               dialog.add(pname);
               dialog.add(pDept);
               dialog.add(pMajor);
               dialog.add(pClass);
               dialog.add(pButton);
                 dialog.setVisible(true);
                 dialog.setSize(300,400);
              Confirm.addActionListener(new ActionListener(){
                  public void actionPerformed(ActionEvent e) {
                       String n=tname.getText();
                       String d=tDept.getText();
                       String m=tMajor.getText();
                       String c=tClass.getText();
                       tname.setText("");
                      tDept.setText("");
                      tMajor.setText("");
                      tClass.setText("");
                    
         }
 
      });
 
     
     Ique.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e) {
 
                 String stname=jte.getText();
                 ListNode head=list.StudentList.returnHead();
                 if(head.student.returnname().equals(stname)) {
                     tname1.setText(stname);
                 }
                 else {
                     ListNode current=head.next;
                     while(current.next!=null && current.student.returnname().equals(stname)) {
                         current=current.next;    
                         tname1.setText(stname); 
                     }
                 }
              
     }
   });
     
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setSize(400,500);
     setVisible(true);
    }
     
    public static void main(String args[]) {
        new ManagerWindow();
     }

如上问题有来自我自身项目开发,有的收集网站,有的来自读者,如有侵权,立马删除。

解决方案

  如下是上述问题的解决方案,仅供参考:

  在您提供的Java Swing应用程序中,存在几个问题需要解决:

  1. 确认键无法清除文本框内容
    Confirm按钮的ActionListener中,您需要确保在设置文本框内容为空之前,先获取到用户输入的信息,并使用CreateList类将新的Student对象添加到链表中。

  2. 查询功能无法实现
    查询功能需要遍历链表,检查每个Student对象的姓名是否与查询条件匹配,并相应地更新UI。

以下是修改后的代码示例:

// ... [您的其他代码] ...

Confirm.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String n = tname.getText();
        String d = tDept.getText();
        String m = tMajor.getText();
        String c = tClass.getText();
        
        // 创建新的Student对象并添加到链表
        if (!n.isEmpty() && !d.isEmpty() && !m.isEmpty() && !c.isEmpty()) {
            CreateList studentInfo = new CreateList(n, d, m, c);
            tname.setText("");
            tDept.setText("");
            tMajor.setText("");
            tClass.setText("");
        }
    }
});

// ... [您的其他代码] ...

Ique.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        String stname = jte.getText();
        Student foundStudent = searchStudentByName(stname);
        if (foundStudent != null) {
            tname1.setText(foundStudent.returnname());
            tDept1.setText(foundStudent.returnDept());
            tMajor1.setText(foundStudent.returnMajor());
            tClass1.setText(foundStudent.returnClass());
        } else {
            JOptionPane.showMessageDialog(ManagerWindow.this, "未找到学生:" + stname, "查询结果", JOptionPane.INFORMATION_MESSAGE);
        }
    }
});

// ... [您的其他代码] ...

// 新增搜索学生的方法
public Student searchStudentByName(String name) {
    ListNode current = StudentList.returnHead();
    while (current != null) {
        if (current.student.returnname().equals(name)) {
            return current.student;
        }
        current = current.next;
    }
    return null;
}

// ... [您的其他代码] ...

public class CreateList {
    public static StudentLinkedList StudentList; // 作为静态成员变量

    public CreateList(String n, String d, String m, String c) {
        Student student = new Student(n, d, m, c);
        if (StudentList == null) {
            StudentList = new StudentLinkedList(); // 初始化静态成员变量
        }
        StudentList.addStudent(student);
    }
}

// ... [您的其他代码] ...

  请注意,我在CreateList类中添加了一个静态初始化块,以确保StudentList在第一次使用时被正确初始化。同时,我添加了一个名为searchStudentByName的方法来搜索具有指定姓名的学生,并在查询按钮的事件监听器中使用这个方法。

  此外,我修改了查询功能,使其在找到学生时填充所有文本字段,在未找到时显示一个对话框。

  这些更改应该解决您提到的两个问题。如果还有其他问题或需要进一步的帮助,请随时告诉我。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解答》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/755379.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于香农编码的图像压缩算法实现,聊聊!

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

【语言模型】探索AI模型、AI大模型、大模型、大语言模型与大数据模型的关系与协同

一、引言 随着人工智能(AI)技术的飞速发展,各种AI模型如雨后春笋般涌现,其中AI模型、AI大模型、大模型、大语言模型以及大数据模型等概念在学术界和工业界引起了广泛关注。这些模型不仅各自具有独特的特点和应用场景,…

我关于Excel使用点滴的笔记

本篇笔记是我关于Excel使用点滴的学习笔记,摘要和地址链接列表。临时暂挂,后面可能在不需要时删除。 (笔记模板由python脚本于2024年06月28日 12:23:32创建,本篇笔记适合初通Python,熟悉六大基本数据(str字符串、int整型、float浮…

有人问周鸿祎: 学历不重要,为什么360只要985和211?

关注、星标公众号,直达精彩内容 有人问周鸿祎:你说学历不重要,为什么360招聘的人才只要985和211?他说这个事情,我专门问了我们的人力资源,我们的干品分为校园招聘和社会招聘 校园招聘的话会看文凭 社会招聘的话&#x…

es学习初步总结

看api看麻了不知道意义在哪里,所以就简单总结点我觉得有用的东西 基本数据结构解析 分为了文档,索引和映射 索引可以理解为一张表,映射描述了索引的数据结构,而文档就是一个个具体的行 所以一般我们需要在申明索引的时候同时申…

[数据库]事务的隔离级别存储引擎

事务的隔离级别 存储引擎 举例 myisam 进行回滚操作后可以发现有一个警告没有行受到影响 memory 比如用于qq的在线离线状态

EE trade:贵金属投资的优点及缺点

贵金属(如黄金、白银、铂金和钯金)一直以来都是重要的投资和避险工具。它们具有独特的物理和化学特性,广泛应用于各种行业,同时也被视为财富储备。在进行贵金属投资时,了解其优点和缺点对于做出明智的投资决策至关重要。 一、贵金属投资的优…

一个CentOS“倒下去”,更多开源创新服务器操作系统站起来

“一切过往,皆为序章。” ——出自莎士比亚的戏剧《暴风雨》 CentOS 7将在2024年6月30日正式停更,这在某种程度上宣告了国外开源操作系统一个时代的结束。那么,这是不是必然意味着,一个属于我国自主创新的开源操作…

人工智能设备pbootcms网站模板源码

模板介绍 人工智能行业发展趋势不断攀升逐渐成为了新业态,小编精心为大家收集整理了一款HTML5人工智能设备pbootcms网站模板整站源码下载,可帮助您快速建站以展示企业的产品与业务,响应式自适应设计也会适配所有浏览设备。 模板截图 源码下…

社群知识数据管理平台,为VISA合作银行实现私域社群提质降本 | 创新场景

ITValue 痛点 在银行私域社群运营领域,随着社群规模的迅速扩张,管理复杂度和人力成本同步攀升。同时,社群中的数据和知识内容分散,缺乏有效的整合和利用。 解决方案 在提供给VISA合作银行的解决方案中,基于摹小仙AI营销…

Python学习路线图:120天系统学习,你也能成大神!

学Python,切忌今天这学一点,明天那里学一点,零零散散没有系统的学习。这样不仅耽搁大家时间,久而久之也会消磨大家学习的兴致!这里给大家总结了一张系统的Python学习路线图!希望大家共勉! Pyth…

【Python】已解决:TypeError: Object of type JpegImageFile is not JSON serializable

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:TypeError: Object of type JpegImageFile is not JSON serializable 一、分析问题背景 在进行Python编程时,特别是处理图像数据和JSON序列化时&…

LabVIEW航空用电缆检测

系统通过集成LabVIEW平台,实现了航空用电缆检测过程中的自动数据收集、处理和报告生成,显著提升了检测效率和数据准确性,降低了人工干预,提高了电缆检测的可靠性。 项目背景 在航空领域,电缆的质量检测对确保飞机及其…

单片机使用printf在串口输出字符串

把字符串使用printf输出的本质 实际上调用了putchar和串口字符输出函数,参考 以51单片机中的程序为例 在主函数中使用printf函数向串口发送字符串,当然保证已经定义好串口的波特率等参数 while(1){//uart0SendString("start....\n");prin…

Animate软件基础:删除图层或文件夹

Animate软件中,图层或者图层文件夹同样可以进行删除操作,不过需要注意的是,删除图层或者删除文件夹,都会将其中所有的内容删除。 要选择图层或文件夹,可以单击时间轴中该图层或文件夹的名称,或者单击图层中…

黄子韬直播风暴揭秘经济人风波

黄子韬直播风暴:揭秘经纪人风波,真诚道歉小马丁6月27日晚,娱乐圈再次掀起波澜,黄子韬在直播中罕见地谈及了去年那场业界的经纪人风波,并意外地再次回应了与DJ小马丁的演出争议,这无疑让广大粉丝和网友们热血…

古装短视频配乐:成都柏煜文化传媒有限公司

古装短视频配乐:穿越千年的音韵之美 在短视频盛行的当下,各种题材的视频层出不穷,其中古装短视频以其独特的韵味和魅力,吸引了大量观众的眼球。而古装短视频的配乐,更是为这些视频增添了无尽的魅力,让观众…

Spring Boot中 CommandLineRunner 与 ApplicationRunner作用、区别

CommandLineRunner 和 ApplicationRunner 是 Spring Boot 提供的两种用于在应用程序启动后执行初始化代码的机制。这两种接口允许你在 Spring 应用上下文完全启动后执行一些自定义的代码,通常用于执行一次性初始化任务,如数据库预填充、缓存预热等。 Co…

服务器巡查脚本

脚本编程步骤 脚本编程一般分为以下几个步骤: 需求分析:根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命令与语句等; 命令测试,将要用到的命令逐个进行测试,以决定使用的选项要设置…

Chrome导出cookie的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…