学生管理系统,怎么说呢,还是没做完,有几个问题需要解决一下。
主要问题集中在null的使用,和输入类(Scanner)的使用,都是各种报错,看来还是要再研究一下
话虽如此,鸽了2天的代码也不能说不给就不给,这是目前比较好的版本:
package test5;
import java.util.Scanner;
class student
{
public String name="不明";
public String code="不明";
public double math=0,chinese=0,english=0,bio=0,fullscore=0;
public student next=null;
public student() {}
public student(String a,String f,double b,double c,double d,double e){
name=a;code=f;math=b;chinese=c;english=d;bio=e;
fullscore=b+c+d+e;
}
public void showme()
{
System.out.print("目标学号:"+code+"
");
System.out.print("目标姓名:"+name+"
");
System.out.print("数学成绩:"+math+"
");
System.out.print("语文成绩:"+chinese+"
");
System.out.print("英语成绩:"+english+"
");
System.out.print("生物成绩:"+bio+"
");
System.out.print("总分:"+fullscore+"
");
}
};
class namelist extends student
{
public student headNode;
public student position;
public namelist(String a,String f,double b,double c,double d,double e)
{
headNode=new student(a,f,b,c,d,e);
position=headNode;
position.next=new student(a,f,b,c,d,e);
position=position.next;
position.next=null;
position=headNode.next;
}
public namelist(){}
public int getSize()
{
int count=0;
student p=headNode;
while (p.next!=null)
{
p=p.next;
count++;
}
return count;
}
public void showall()
{
student p=headNode;
for(int i=0;i<=getSize();i++)
{
System.out.print(p.code+" "+p.name+" "+p.math+" "+p.chinese+" "+p.english+" "+p.bio+" "+p.fullscore+"
");
p=p.next;
}
}
public void setstudent(int n)
{
Scanner input=new Scanner(System.in);
student p=headNode;
String a,b;
double c,d,e,f;
for(int i=1;i<=n;i++)
{
System.out.print("请输入第"+i+"个学生的信息:
");
System.out.print("学号:");
a=input.next();
System.out.print("姓名:");
b=input.next();
System.out.print("数学成绩:");
c=input.nextInt();
System.out.print("语文成绩:");
d=input.nextInt();
System.out.print("英语成绩:");
e=input.nextInt();
System.out.print("生物成绩:");
f=input.nextInt();
p=new student(b,a,c,d,e,f);
p=p.next;
}
System.out.print("录入完成
");
input.close();
}
public boolean ssn(String n)
{
position=headNode.next;
for(;position!=null;position=position.next) /*遍历节点*/
{
if(position.name==n)
{
return true; /*返回值便于if等函数判定条件*/
}
}
return false;
}
public boolean ssc(String n)
{
position=headNode.next;
for(;position!=null;position=position.next)
{
if(position.code==n)
{
return true;
}
}
return false;
}
public void cuika()
{
Scanner input11=new Scanner(System.in);
student p=headNode;
String a,b;
double d,e,f,c;
System.out.print("请输入此学生的信息:
");
System.out.print("学号:");
a=input11.next();
System.out.print("姓名:");
b=input11.next();
System.out.print("数学成绩:");
c=input11.nextInt();
System.out.print("语文成绩:");
d=input11.nextInt();
System.out.print("英语成绩:");
e=input11.nextInt();
System.out.print("生物成绩:");
f=input11.nextInt();
for(;p.next!=null;){p=p.next;}
p.next=new student(b,a,c,d,e,f);
System.out.print("录入完成
");
input11.close();
}
};
public class Classnext {
public static void main(String[] args) {
int sel,doki;
System.out.print("欢迎来到学生成绩管理系统,请选择您想要的操作:
");
namelist ti=new namelist();
for(int pooi=0;pooi==0;){
Scanner input1=new Scanner(System.in);
System.out.print("1 创建
");
System.out.print("2 添加
");
System.out.print("3 汇总
");
System.out.print("4 排序
");
System.out.print("5 查询
");
System.out.print("6 显示
");
System.out.print("7 退出
");
sel=input1.nextInt();
if(sel==1)
{
System.out.print("请问想要输入几位学生的名单呢?
");
int c;
c=input1.nextInt();
ti.setstudent(c);
}
else if(sel==2)
{
ti.cuika();
}
else if(sel==3)
{
double k=0;
int c=0;
System.out.print("已录入学生的平均成绩(总分)如下
");
student p=ti.headNode;
for(;p.next!=null;p=p.next) /*遍历全部结点*/
{
k=k+p.fullscore;
c++;
}
System.out.print(k/c+"
");
}
else if(sel==4)
{
student o;
student p=ti.headNode;
for(int i=0;i<=ti.getSize();i++)
{
for(int c=0;c<=ti.getSize();c++)
{
o=p.next;
if(p.fullscore<o.fullscore)
{
p.next=o.next;
o.next=p; /*若o大于p,交换p和o的位置*/
}
}
}
System.out.print("排序完成!
");
}
else if(sel==5)
{
String poi;
int ll=0;
System.out.print("请问您想用什么方式查询信息?
");
System.out.print("1 学号
");
System.out.print("2 姓名
");
doki=input1.nextInt();
student p=ti.headNode;
switch(doki)
{
case 1:
System.out.print("请输入待查询学号
");
poi=input1.next();
for(;p.next!=null;p=p.next)
{
if(p.code==poi)
{
p.showme();
ll++;
}
}
System.out.print("检索完成,共检索到以上"+ll+"条符合条件的对象
");
break;
case 2:
System.out.print("请输入待查询姓名
");
poi=input1.next();
for(;p.next!=null;p=p.next)
{
if(p.name==poi)
{
p.showme();
ll++;
}
}
System.out.print("检索完成,共检索到以上"+ll+"条符合条件的对象
");
}
}
else if(sel==6)
{
System.out.print("正在按照学号 姓名 数学 语文 英语 生物 总分的格式输出名单
");
ti.showall();
}
else if(sel==7)
{
System.out.print("正在准备退出……
");
System.out.print("感谢您的使用
");
pooi=2;
}
System.out.print("您的操作已经完成
");
input1.close();
}
}
}
运行时会如下报错:

可以看到是可以录入但循环之后Scanner就会报错

输出名单在getsize()方法处报错。其他的问题都大同小异。
