Java简单学生管理系统

article/2025/9/28 10:06:38

学习了一段时间了。是时候写一个程序来检验一下学习的成果了。

七夕让我们一起new对象。

ok,首先我们来看一下需求。

简单的学生信息管理系统,通过键盘选择操作进行添加学生(学号,姓名,性别,年龄,成绩)的信息,通过数组存储,同时可以进行查询某个或全体学生信息,修改学生信息,删除学生信息的操作。

到手了需求先来分析一下。要码出这样一个系统,首先我们对整个程序进行分解。

在一个程序中,我们总能把一个大的程序分解成多个小程序,从而将求解整体问题分解为求解部分问题,然后在进行汇总。

 

首先我们需要定义一下我们的学生类。如下

public class Stu {private String stuNum ;//学生学号private String name;//学生姓名private String gender;//学生性别private int age;//学生年龄private int mark;//学生成绩public Stu(String stuNum,String name,String gender,int age,int mark) {this.stuNum = stuNum;this.name = name;this.gender = gender;this.age = age;this.mark = mark;}//构造方法public String getStuNum() {return stuNum;}public void setStuNum(String stuNum) {this.stuNum = stuNum;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {    this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getMark() {return mark;}public void setMark(int mark) {this.mark = mark;}}    

在如上的Stu类中定义了5种不同类型的私有型变量,用于记录学生的不同信息。同时定义了一个构造方法,和对私有变量的访问和修改方法。

好的,对象有了,可是我们现在没有对应的方法来操作他,那我们要对象干什么呢,先把他用数组放起来吧。

public class Hw {public static void main(String[] args) {Stu a[] = new Stu[100];a[0] = new Stu("84G0235","小雅","女",18,89);int count = 1;
}}

好的,我们定义了一个100个长度类型为Stu类的数组,并对数组的第一个元素进行实例化操作。然后定义一个count的整形变量用来记录数组中有多少个被实例化的元素。

OK,安排妥当之后,我们来看看我们要对学生对象进行什么操作:

显示所有学生信息,录入学生信息,查询学生信息,修改学生信息,删除学生信息。

 

我们来一个一个的实现他们,首先是

显示所有学生信息:

    Stu [] putAllStu(Stu a[],int count) {for(int i = 0 ;i < count;i++) {System.out.print(i+1 +":");System.out.print("学号:"+a[i].getStuNum());System.out.print(" 姓名:"+a[i].getName());System.out.print(" 性别:"+a[i].getGender());System.out.print(" 年龄:"+a[i].getAge());System.out.println(" 成绩:"+a[i].getMark());}return a;}

 OK,我们第一了一个叫putAllStu的方法,他有两个参数,一个是Stu类 类型的数组,一个是int型的变量,一个返回值,返回值的类型是一个Stu类 类型的数组。

如果要调用的话实际传入的是存放学生信息的数组和被实例化的元素个数,然后随着 i 的增加,输出所有的学生信息。

 

OK,我们来实现第二个功能:

录入学生信息

    Stu[] inPutStu(Stu a[], int count,Scanner scan) {if (count == a.length) {a = Hw.newArray(a);}System.out.println("请输入录入学生学号:");String newStuNum = scan.next().trim();System.out.println("请输入录入学生姓名:");String newName = scan.next().trim();System.out.println("请输入录入学生性别:");String newGender = scan.next().trim();while (true) {if (newGender.equals("男") || newGender.equals("女")) {break;} else {System.out.println("输入有误,重新输入");newGender = scan.next();}}System.out.println("请输入录入学生年龄:");int newAge = scan.nextInt();System.out.println("请输入录入学生成绩:");int newMake = scan.nextInt();a[count] = new Stu(newStuNum, newName, newGender, newAge, newMake);return a;}// 录入学生信息。

 这个方法的参数调用同上一个函数,根据提示依次输入要录入的学生信息,然后实例化数组元素,返回实例化后的数组,注意这里count(数组中被实例化的个数)的值应该加一 的,但是由于我们返回了数组,所以count+1 的步骤我们放在主函数里面进行实现。

 

OK,我们来实现第三个功能。

查询学生信息

void selectStu(Stu a[],int count, Scanner scan) {System.out.println("请输入要查找的学生姓名:");String name = scan.next();for(int i = 0 ;i < count;i++) {if(a[i].getName().equals(name)) {System.out.print("学号:"+a[i].getStuNum());System.out.print(" 姓名:"+a[i].getName());System.out.print(" 性别:"+a[i].getGender());System.out.print(" 年龄:"+a[i].getAge());System.out.print(" 成绩:"+a[i].getMark());System.out.println(" 在系统中的位置为:"+i);return ;    }}System.out.println("查无此人");return ;}// 查找学生信息。

这里我采用了根据学生姓名查找学生信息的方法,根据学号的方法实现类似,就不写了。这里我们让用户输入学生姓名,采用a[i].getName().equals(name)  的方法判断他们是否相等。这一部分在一开始实现的时候发现,String 类型的变量不能直接采用==和 学生类里面的元素进行比较,后百度得到 equals()  方法。

这里小结一下 == 和 equals() 的区别。== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象,比较的是指针操作。equals单纯的用来比较的是两个对象的内容是否相等。

 

OK,我们来实现第四个功能,

修改学生信息,

Stu [] reSetStu(Stu a[],int count, Scanner scan) {System.out.println("请输入要修改的学生学号:");String stuNum = scan.next();for(int i = 0 ;i < count;i++) {if(a[i].getStuNum().equals(stuNum)) {System.out.println("您将要修改的学生信息如下:");System.out.print("学号:"+a[i].getStuNum());System.out.print(" 姓名:"+a[i].getName());System.out.print(" 性别:"+a[i].getGender());System.out.print(" 年龄:"+a[i].getAge());System.out.println(" 成绩:"+a[i].getMark());System.out.println("请选择您要修改的项目,输入0退出");System.out.println("1.学号:");System.out.println("2.姓名:");System.out.println("3.性别:");System.out.println("4.年龄:");System.out.println("5.成绩:");int flag = 1;//立旗子,如果为零退出修改while (flag!=0) {flag = scan.nextInt();switch(flag) {case 1:System.out.println("请输入新的信息");String newStuNum = scan.next();a[i].setStuNum(newStuNum);break;case 2:System.out.println("请输入新的信息"); String newName = scan.next();a[i].setStuNum(newName);break;case 3:System.out.println("请输入新的信息"); String newGender = scan.next();while(true) {if(newGender.equals("男") || newGender.equals("女")) {break;}else {System.out.println("输入有误,重新输入");newGender = scan.next();}}a[i].setStuNum(newGender);break;case 4:System.out.println("请输入新的信息");int newAge = scan.nextInt();a[i].setAge(newAge);break;case 5:System.out.println("请输入新的信息");int newMark = scan.nextInt();a[i].setMark(newMark);break;default:System.out.println("请输入正确数字");}System.out.println("请继续选择您要修改的项目,输入0退出");}System.out.println("您修改后的学生信息如下:");System.out.print("学号:"+a[i].getStuNum());System.out.print(" 姓名:"+a[i].getName());System.out.print(" 性别:"+a[i].getGender());System.out.print(" 年龄:"+a[i].getAge());System.out.println(" 成绩:"+a[i].getMark());return a;}}System.out.println("系统中无此学生");return a;}// 修改学生信息。

在这个方法中设置的是根据学号来修改学生信息,我们先让他打印了一遍原来的学生信息。然后打印了一个菜单让用户根据菜单上的数字选择要修改的信息,调用类中的set方法进行修改,可以重复进行修改,输入0退出。然后再输出修改后的信息。返回修改后的数组。

OK,最后一个功能,

删除学生信息

 Stu [] delete(Stu a[],int count, Scanner scan) {System.out.println("请输入要删除的学生学号:");String stuNum = scan.next();for(int i = 0 ;i < count;i++) {if(a[i].getStuNum().equals(stuNum)) {for(int j = i+1;j< count ;j++) {a[j-1]=a[j];}return a;} }System.out.println("系统中无此学生");return a;}

在这里我选择了使用查找学生学号的方式进行找到需要删除的学生信息位置,然后让其后面的数组元素前移。这里也应该有一个count--,在主方法里会实现。

 

OK,至此我们的所有功能都实现完了。

emm但还是有些问题,我在前面定义了一个100长度的数组来存放信息。但是如果我要存更多的学生信息呢?

static Stu [] newArray(Stu a[]) {Stu [] newArray = new Stu[a.length+a.length];for(int i = 0 ;i < a.length ; i++)newArray[i] = a[i] ;return newArray;}
}//数组扩容

 OK,我们把a数组里面的信息复制到一个是a数组长度的两倍的数组里面,并返回新数组。我们把他放到 inPutStu 方法里面。在方法的开始判断数组中的被实例化的元素个数是否等于数组的长度本身如果存放学生信息 的数组满了 就调用 newArray 方法对数组扩容。

emm,我们还需要一个菜单来引导用户进行操作。

void putMenu() {System.out.println("<————————————————————>");System.out.println("请输入你所要操作的项目标号");System.out.println("1.显示所有学生信息");System.out.println("2.录入学生信息");System.out.println("3.查询学生信息");System.out.println("4.修改学生信息");System.out.println("5.删除学生信息");System.out.println("0.退出系统");}

 

好的,基本上该有的模块我们都有了。下面我们需要把他们糅合在一起,开始拼图。


import java.util.Scanner;public class Hw {public static void main(String[] args) {int count = 1;int redFlag = 1;Stu a[] = new Stu[1];a[0] = new Stu("84G0235","小雅","女",18,89);Scanner scan = new Scanner(System.in);Hw test = new Hw();System.out.println("欢迎来到学生信息管理系统");while(redFlag==1) {test.putMenu();int data0 = scan.nextInt();switch(data0) {case 0:redFlag = 0;break;case 1:test.putAllStu(a, count); break;case 2:a = test.inPutStu(a, count, scan);count++;break;case 3:test.selectStu(a, count, scan);break;case 4:a = test.reSetStu(a, count,scan);break;case 5:a = test.delete(a, count,scan);count--;break;}}}       

在完善的主方法里面,我们定义了一个颜色更加鲜艳的旗子用来实现用户的循环操作。当在菜单页面输入的数字为0时,redflag就为0,这时系统结束。在每一次的循环中都打印出菜单和等待用户输入操作对应的数字。

 

 

 

好滴,到这里学生信息系统创建完毕了,剩下的就是细节上的优化了,这一部分就不再给出。下面附上完整代码

package com.zzu.heiya.homework;import java.util.Scanner;public class Hw {public static void main(String[] args) {int count = 1;int redFlag = 1;Stu a[] = new Stu[1];a[0] = new Stu("84G0235", "小雅", "女", 18, 89);Scanner scan = new Scanner(System.in);Hw test = new Hw();System.out.println("欢迎来到学生信息管理系统");while (redFlag == 1) {test.putMenu();int data0 = scan.nextInt();switch (data0) {case 0:redFlag = 0;break;case 1:test.putAllStu(a, count);break;case 2:a = test.inPutStu(a, count,scan);count++;// 如果数组中已实例化元素个数等于a的长度,扩容break;case 3:test.selectStu(a, count, scan);break;case 4:a = test.reSetStu(a, count , scan);break;case 5:a = test.delete(a, count, scan);count--;break;}}}void putMenu() {System.out.println("<————————————————————>");System.out.println("请输入你所要操作的项目标号");System.out.println("1.显示所有学生信息");System.out.println("2.录入学生信息");System.out.println("3.查询学生信息");System.out.println("4.修改学生信息");System.out.println("5.删除学生信息");System.out.println("0.退出系统");}// 显示所有学生信息。Stu[] putAllStu(Stu a[], int count) {for (int i = 0; i < count; i++) {System.out.print(i + 1 + ":");System.out.print("学号:" + a[i].getStuNum());System.out.print(" 姓名:" + a[i].getName());System.out.print(" 性别:" + a[i].getGender());System.out.print(" 年龄:" + a[i].getAge());System.out.println(" 成绩:" + a[i].getMark());}return a;}// 显示所有学生信息。Stu[] inPutStu(Stu a[], int count,Scanner scan) {if (count == a.length) {a = Hw.newArray(a);}System.out.println("请输入录入学生学号:");String newStuNum = scan.next().trim();System.out.println("请输入录入学生姓名:");String newName = scan.next().trim();System.out.println("请输入录入学生性别:");String newGender = scan.next().trim();while (true) {if (newGender.equals("男") || newGender.equals("女")) {break;} else {System.out.println("输入有误,重新输入");newGender = scan.next();}}System.out.println("请输入录入学生年龄:");int newAge = scan.nextInt();System.out.println("请输入录入学生成绩:");int newMake = scan.nextInt();a[count] = new Stu(newStuNum, newName, newGender, newAge, newMake);return a;}// 录入学生信息。void selectStu(Stu a[], int count ,Scanner scan) {        System.out.println("请输入要查找的学生姓名:");String name = scan.next().trim();for (int i = 0; i < count; i++) {if (a[i].getName().equals(name)) {System.out.print("学号:" + a[i].getStuNum());System.out.print(" 姓名:" + a[i].getName());System.out.print(" 性别:" + a[i].getGender());System.out.print(" 年龄:" + a[i].getAge());System.out.print(" 成绩:" + a[i].getMark());System.out.println(" 在系统中的位置为:" + i);return ;    }}System.out.println("查无此人");return ;}// 查找学生信息。Stu[] reSetStu(Stu a[], int count,Scanner scan) {System.out.println("请输入要修改的学生学号:");String stuNum = scan.next().trim();for (int i = 0; i < count; i++) {if (a[i].getStuNum().equals(stuNum)) {System.out.println("您将要修改的学生信息如下:");System.out.print("学号:" + a[i].getStuNum());System.out.print(" 姓名:" + a[i].getName());System.out.print(" 性别:" + a[i].getGender());System.out.print(" 年龄:" + a[i].getAge());System.out.println(" 成绩:" + a[i].getMark());System.out.println("请选择您要修改的项目,输入0退出");System.out.println("1.学号:");System.out.println("2.姓名:");System.out.println("3.性别:");System.out.println("4.年龄:");System.out.println("5.成绩:");int flag = 1;while (flag != 0) {flag = scan.nextInt();switch (flag) {case 1:System.out.println("请输入新的信息");String newStuNum = scan.next();a[i].setStuNum(newStuNum);break;case 2:System.out.println("请输入新的信息");String newName = scan.next();a[i].setStuNum(newName);break;case 3:System.out.println("请输入新的信息");String newGender = scan.next();while (true) {if (newGender.equals("男") || newGender.equals("女")) {break;} else {System.out.println("输入有误,重新输入");newGender = scan.next();}}a[i].setStuNum(newGender);break;case 4:System.out.println("请输入新的信息");int newAge = scan.nextInt();a[i].setAge(newAge);break;case 5:System.out.println("请输入新的信息");int newMark = scan.nextInt();a[i].setMark(newMark);break;default:System.out.println("请输入正确数字");}System.out.println("请继续选择您要修改的项目,输入0退出");}System.out.println("您修改后的学生信息如下:");System.out.print("学号:" + a[i].getStuNum());System.out.print(" 姓名:" + a[i].getName());System.out.print(" 性别:" + a[i].getGender());System.out.print(" 年龄:" + a[i].getAge());System.out.println(" 成绩:" + a[i].getMark());return a;}}System.out.println("系统中无此学生");return a;}// 修改学生信息。Stu[] delete(Stu a[], int count,Scanner scan) {System.out.println("请输入要删除的学生学号:");String stuNum = scan.nextLine();for (int i = 0; i < count; i++) {if (a[i].getStuNum().equals(stuNum)) {for (int j = i + 1; j < count; j++) {a[j - 1] = a[j];}return a;}}System.out.println("系统中无此学生");return a;}// 删除学生信息static Stu[] newArray(Stu a[]) {Stu[] newArray = new Stu[a.length + a.length];for (int i = 0; i < a.length; i++)newArray[i] = a[i];return newArray;}
}// 数组扩容public class Stu {private String stuNum ;//学生学号private String name;//学生姓名private String gender;//学生性别private int age;//学生年龄private int mark;//学生成绩public Stu(String stuNum,String name,String gender,int age,int mark) {this.stuNum = stuNum;this.name = name;this.gender = gender;this.age = age;this.mark = mark;}//构造方法public String getStuNum() {return stuNum;}public void setStuNum(String stuNum) {this.stuNum = stuNum;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {if(gender != "男"&&gender != "女") {System.out.println("输入有误,重新操作");return ;}this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getMark() {return mark;}public void setMark(int mark) {this.mark = mark;}}    

一千个人眼里有一千个哈姆雷特,这里只是提供了一种系统的实现方法作为参考学习。大家加油

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/lM1flGxB.shtml

相关文章

用Java实现学生管理系统(附项目详细的介绍和源代码)

前言&#xff1a;最近练习了用Java语言实现简单的学生管理系统小项目&#xff0c;分享一下。 Ps&#xff1a;原创不易&#xff0c;请多多支持&#xff01; 摘要分析如下&#xff1a; 实现的主要功能&#xff1a; 1&#xff0c;添加学生信息。 2&#xff0c;查询学生信息(实现…

Java设计学生成绩管理系统

1.1 题目与要求 设计一个学生成绩排名系统 实现以下功能&#xff1a; (1) 具备对成绩的管理功能&#xff08;添加、删除、排序&#xff09;&#xff1b; (2) 具备对成绩的统计功能&#xff08;最高分&#xff0c;最低分&#xff0c;平均分&#xff0c;及格率等&#xff09;…

Java 学生成绩管理系统

教学管理系统很适合初学者对于所学语言的练习。本文是javaSE 中用文件流写的&#xff0c;这个也可以用数据库写。 分析 这个项目有 1.学生 2.老师 3.教务人员 4.管理员四个角色分别担任不同的任务。 1.学生 有属性 id, 密码&#xff0c;性别&#xff0c;年龄&#xff0c;和一…

Java基础——学生管理系统

用内存存储学生信息。(采用集合的方式&#xff09; 步骤&#xff1a; A. 定义学生类 B. 学生管理系统的主界面的代码编写 C. 学生管理系统的查看所有学生的代码编写 D. 学生管理系统的添加学生的代码编写 E. 学生管理系统的删除学生的代码编写 F. 学生管理系统的修改学生的代码…

学生管理系统(Java版)

学生管理系统&#xff08;Java版&#xff09; 前言&#xff1a;这个是大二做的课设&#xff08;还是学生管理系统…&#xff09;&#xff0c;理论上虽然是4个人一组一起做的&#xff0c;但是&#xff0c;注意这个“但是”&#xff0c;还是我一个人承担了所有…代码和文档基本都…

Java 版学生成绩管理系统,附源码

前言 对于计算机专业的学生来讲&#xff0c;一定对于学生成绩管理系统课程设计十分印象深刻。设计、上机、编码、写报告、答辩等一系列流程&#xff0c;虽然很简单&#xff0c;但也可以综合运用我们所学的一些知识了。 今天就来复习以下这个课题&#xff0c;用 Java SE 来实现…

用Java实现一个学生管理系统(附源码)

目录 一、题目要求 二、设计思路 &#xff08;2&#xff09;代表课程的类——Course类 &#xff08;3&#xff09;具体功能实现类——Function类 &#xff08;4&#xff09;测试类——Test类 三、代码实现 &#xff08;1&#xff09;Student.java文件 &#xff08;2&…

Java实现学生管理系统(完整代码)

案例需求 完成一个综合案例&#xff1a;学生管理系统&#xff01;该系统主要功能如下&#xff1a; 添加学生&#xff1a;通过键盘录入学生信息&#xff0c;添加到集合中 删除学生&#xff1a;通过键盘录入要删除学生的学号&#xff0c;将该学生对象从集合中删除 修改学生&…

Java学生信息管理系统

一、选题设计思想 学生信息管理系统是典型的信息管理系统(MIS)&#xff0c;其开发主要包括后台数据库的建立和维护以及前端应用程序的开发。对于前者要求建立起数据一致性和完整性强、安全性高的数据库&#xff1b;对于后者则要求应用程序具有功能完备、易使用、易维护等特点。…

学生管理系统(Java实现)

一、学生信息管理程序 基本要求&#xff1a; 1&#xff0e;要求实现学生信息的使用添加、查找、删除、修改等几个功能&#xff0c;每个功能模块均能实现从模块中退出&#xff0c;从而完成一个学生管理系统所需功能。 2&#xff0e;要使用结构体来实现对学生信息的存储。 3&am…

【JAVA】学生信息管理系统

目录 前言 一、环境搭建 二、功能实现 1.学生信息类的创建 2.学生信息的添加功能 3.学生信息的删除功能 4.学生信息的修改功能 5.学生信息的查看功能 三、主类的调用 1.界面的搭建 2.学生端和教师端 3.系统和功能的选择 总结 前言 JAVA实现的学生信息管理…

Java 学生管理系统(详解)

文章目录 学生类main方法首界面登录功能选择界面添加学生信息删除学生信息修改学生信息查看学生信息 学号遍历 和 清空控制台方法附&#xff1a;学生管理系统代码Student .JavaMain.JavaFunctionModule.javaExtents.Java 总结 下面会分享我在做这个练习时的一些方法以及程序代码…

【超详细】Java实现学生信息管理系统

项目介绍&#xff1a;用java实现学生信息的管理&#xff0c;其中录入的数据包括&#xff1a;学号、姓名、年龄、居住地等&#xff0c;并且能够实现对学生信息的添加、修改、删除、查看功能。 一、创建项目 1、项目名称&#xff1a;myStudentManager 二、创建包 1、包名称&a…

基于JAVA实现的简易学生信息管理系统(附源码)

一、前言 最近在学习JAVA&#xff0c;这几天跟着网上的视频学完基础知识之后&#xff0c;做了一个学生信息管理系统&#xff0c;写的比较普通&#xff0c;没太大亮点&#xff0c;希望可以给初学者一些参考经验&#xff0c;另外&#xff0c;如有不恰当的地方还请各位指正&am…

java学生管理系统(简单版)

简单实现学生信息添加、删除&#xff0c;修改、查询功能。根据需求&#xff0c;创建一个学生类和学生管理类&#xff0c;用容器存储学生信息&#xff0c;这里用到ArrayList<E>(ArrayList类是一个可动态修改的数组&#xff0c;使用之前需要导包import java.util.ArrayList…

Keil打开工程时,解决“Loading PDSC Debug Description Failed”错误

网上搜到一个方法是&#xff0c;把Keil.STM32Lxxx_DFP.pdsc文件中&#xff0c;删除行“Message(2, "Not a genuine ST Device! Abort connection.");”&#xff0c; 这个方法属于掩耳盗铃&#xff0c;只是不让他弹出错误而已。 正确的解决方法是&#xff0c;安装与…

STM32 Keil新建工程报错“Loading PDSC Debug Description Failed for STMicroelectronics STM32Lxxxxxxx”

在使用STM32L0xx系列和STM32L4xx系列的单片机时都遇到了打开keil工程报“Loading PDSC Debug Description Failed for STMicroelectronics STM32Lxxxxxxx”错误的问题&#xff0c;具体现象和解决方法如下图文所示&#xff1a; 找到keil的Build Output窗口提示的File路径&#x…

解决Keil安装Pack包的“Loading PDSC Debug Description Failed”错误

vision Loading PDSC Debug Description failed for STMicroelectronics STM32F103ZE Disabling usage of PDSC Debug DescriptionSee Build Output for details. connection.");" 具体的错误信息&#xff0c;可以在Build Output中查看&#xff0c;如下图所示。这个…

Disabling usage of PDSC Debug Description

STM32 Keil新建工程报错“Loading PDSC Debug Description Failed for STMicroelectronics STM32Lxxxxxxx” 在使用STM32L0xx系列和STM32L4xx系列的单片机时都遇到了打开keil工程报“Loading PDSC Debug Description Failed for STMicroelectronics STM32Lxxxxxxx”错误的问题…

Loading PDSC Debug Description failed for STMicroelectronics STM32F103ZF Disabling usage of PDSC Deb

用 STM32F103 软件仿真 &#xff0c;还需要下载安装 STM32F103 pack 文件&#xff0c;如果在 MDK 中下载较慢&#xff0c;也可以点击此处下载&#xff0c;下载后双击安装即可。 当Keil新建或者打开工程出现“ Loading PDSC Debug Description failed for STMicroelectronics S…