📄 liti2_2 - 复制.java
字号:
import java.util.LinkedList;
import java.io.*;
class StudNode{
//1属性定义
String name;
int studentNo;
double score;
StudNode next;//指针
public StudNode(){}
public StudNode(String name,int studentNo,double score){
this.name=name;
this.studentNo=studentNo;
this.score=score;
}
public void setNext(StudNode node){
this.next=node;
}
public StudNode getNext(){return next;}
public void setName(String name){
this.name=name;
}
public void setStudentNo(int studentNo){
this.studentNo=studentNo;
}
public void setScore(double score){
this.score=score;
}
public String getName(){
return name;
}
public int getStudentNo(){
return studentNo;
}
public double getScore(){
return score;
}
public String toString(){
return studentNo+","+name+","+score;
}
}
class StudLinkedList extends LinkedList{//单链表
private StudNode head;//链表头
private int count;//记录计数器
StudLinkedList(){
head=null;
count=0;
}
public void add(StudNode node){ //在单链表的尾部添加一个学生的记录
StudNode current=head,pre=head;
if(head==null)
head=node;
else{//寻找新节点的插入位置
while(current!=null)//寻找尾结点
if(current.studentNo>node.studentNo)
break;//找到插入位置
else{
pre=current;
current=current.getNext();
}
//将node插入到current接点的前面。分3种情况
if(current==null)
pre.next=node;
else if(current==head) {
head=node;
node.next=current;
}
else{
pre.next=node;
node.next=current;
}
}
count++; //记录计数器+1
}
public void listAll(){ //遍历单链表表中所有学生的记录
StudNode current=head;
while(current!=null){
System.out.println(current);
current=current.getNext();
}
System.out.println("共有记录"+count+"条");
}
public void search(String name){ //按姓名查询某个学生的信息并输出。
StudNode current=head;//定义变量current 作为循环变量,初值为head
int flag=-1;//定义查找标志flag,初值为-1
while(current!=null)//循环语句
if(current.name.equals(name)){//比较current.name 和name ,如果相同,表示找到要找的人,置查找标志为1,退出循环。
flag=1;
break;
}else //否则,将current指向下一个结点,继续查找
current=current.next;
if(flag==1) //循环结束后,根据查找标志输出是否找到信息。
System.out.println("您找的人是:"+current);
else
System.out.println("没有您找的人!!");
}
public void delete(String name){
StudNode pre=head,current=head;//定义变量current 作为循环变量,初值为head
int flag=-1;//定义查找标志flag,初值为-1
while(current!=null)//循环语句
if(current.name.equals(name)){//比较current.name 和name ,如果相同,表示找到要找的人,置查找标志为1,退出循环。
flag=1;
break;
}else {//否则,将current指向下一个结点,继续查找
pre=current;
current=current.next;
}
if(flag==1){ //循环结束后,根据查找标志输出是否找到信息。
System.out.println("您找的人是:"+current);
//对要删除的结点进行判断,它有三种情形 ,分别进行指针修改
if(current==head)//1 删除的是头结点
head=current.next;
else if(current.next==null)//2 删除的是尾结点
pre.next=null;
else
pre.next=current.next;
//3 删除的是中间结点
}
else
System.out.println("没有您找的人!!");
}
}
class User{
public static void main(String args[])throws IOException{
StudLinkedList stud=new StudLinkedList();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while (true){
System.out.print("********学生成绩管理程序**********\n" );
System.out.print("1 增加记录\n" );
System.out.print("2 显示所有信息\n");
System.out.print("3 查询记录\n");
System.out.print("4 删除记录\n");
System.out.print("0 退出\n\n");
System.out.print("请输入你的选择:");
int choice = Integer.parseInt(br.readLine());
switch(choice){
case 0:
System.exit(0);
case 1:
System.out.print("\n请输入学号:");
int sNum=Integer.parseInt(br.readLine());
System.out.print("请输入姓名:");
String sName=br.readLine();
System.out.print("请输入成绩:");
double sScore=Double.parseDouble(br.readLine());
StudNode snode=new StudNode(sName,sNum,sScore);
stud.add(snode);
System.out.println();
break;
case 2:
stud.listAll();
System.out.println();
break;
case 3:
System.out.print("请输入要查找的姓名:");
sName=br.readLine();
stud.search(sName);
break;
case 4:
System.out.print("请输入要删除的姓名");
sName=br.readLine();
stud.delete(sName);
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -