学生管理系统,怎么说呢,还是没做完,有几个问题需要解决一下。
主要问题集中在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()方法处报错。其他的问题都大同小异。