一元稀疏多项式简单计算器_第1页
一元稀疏多项式简单计算器_第2页
一元稀疏多项式简单计算器_第3页
一元稀疏多项式简单计算器_第4页
一元稀疏多项式简单计算器_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/~浏水浮芸QQ632069015《数据结构》课程设计报告一元稀疏多项式计算器、迷宫问题、成绩分析问题、图的基本操作与实现以及背包问题的求解学院(系):计算机班级:软件工程4班学生姓名:江志伟学号10803080409指导教师:时间:从2010年01月11日到2010年01月15日一、课程设计概述:本次数据结构课程设计共完成五个题:一元稀疏多项式计算器、迷宫问题、成绩分析问题、图的基本操作与实现以及背包问题的求解使用语言:C 编译环境:TC3.0二、课程设计题目一[实验内容]一元稀疏多项式计算器[问题描述]设计一个一元稀疏多项式简单计算器.[基本要求]一元稀疏多项式简单计算器的基本功能是:输入并建立多项式;输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,,,,,,,cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序;多项式a和b相加,建立多项式a+b;多项式a和b相减,建立多项式a—b;计算多项式在x处的值。计算器的仿真界面。(选做)[概要设计]—=ADT=-Test1:主类,程序的启动Item:项,表示多项式中的某一项Ploynomial:多项式类[存储结构]Item属性: privatedoublec;//系数 privateinte;//指数Item方法: publicvoidsetC(doublec){//设置系数ﻩ }ﻩpublicvoidsetE(inte){//设置指数 } publicdoublegetC(){//获取系数 ﻩﻩ}ﻩﻩpublicintgetE(){//获取指数ﻩﻩ }ﻩ publicdoubleresultItem(doublex){//在x处Item的值ﻩﻩﻩ}ﻩﻩprivatedoublefac(doublex,inte){//求x的e次方,当e为整数时ﻩ} Polynomial属性:privateLinListlist;//单链表Polynomial方法:publicPolynomial(){}publicPolynomial(Item[]item)throwsException{//构造函数}privatevoidinitItem(Item[]item){//初始化Item数组,使其是按降序排序ﻩ}publicintgetItemNum(){//获取项数}publicvoidprint()throwsException{//打印多项式不空行ﻩ}publicvoidprintln()throwsException{//打印多项式空行}publicLinListgetLinList(){//获取单链表ﻩ}publicvoidprintPolynomial()throwsException{//只打印项数、系数和指数}publicPolynomialadd(Polynomialother)throwsException{//多项式相加ﻩ}}publicPolynomialsubtraction(Polynomialother)throwsException{//多项式相减}publicdoubleresult(doublex)throwsException{}[详细设计]Item类:publicclassItem{ﻩprivatedoublec;//系数ﻩprivateinte;//指数ﻩﻩpublicItem(){}ﻩ publicItem(doublec,inte){ﻩﻩthis.c=c;ﻩﻩthis。e=e;ﻩ} publicvoidsetC(doublec){ ﻩthis。c=c; }ﻩﻩpublicvoidsetE(inte){ ﻩthis.e=e;ﻩ} publicdoublegetC(){ﻩ returnc;ﻩ} publicintgetE(){ﻩﻩreturne; }ﻩpublicdoubleresultItem(doublex){ﻩﻩreturngetC()*fac(x,getE()); }ﻩprivatedoublefac(doublex,inte){//求x的e次方,当e为整数时 if(e==0)return1; ﻩreturnx*fac(x,e—1);ﻩﻩ }ﻩ }Polynomial类:importjava。util.*;publicclassPolynomial{//多项式类privateLinListlist;//单链表publicPolynomial(){ list=newLinList(0,null);}publicPolynomial(Item[]item)throwsException{//构造函数ﻩintn=item。length;ﻩlist=newLinList(n,null); if(n==0){ ﻩﻩ return; }ﻩinitItem(item); ﻩtry{for(inti=0;i<n;i++)ﻩlist.insert(i,item[i]);ﻩ}catch(Exceptione){}}privatevoidinitItem(Item[]item){//初始化Item数组,使其是按降序排序 intn=item.length; intmax; for(inti=0;i〈n;i++){ﻩ max=i; for(intj=i+1;j〈n;j++) ﻩif(item[j]。getE()>item[max].getE())max=j;ﻩﻩif(max!=i){ Itemtemp=item[i];ﻩﻩﻩitem[i]=item[max]; item[max]=temp; } }ﻩ }publicintgetItemNum(){//获取项数 Objecttemp=list.head.getElement();ﻩintn=-1; if(tempinstanceofInteger){ ﻩIntegeri=(Integer)temp;ﻩ n=i。intValue(); }ﻩreturnn;}publicvoidprint()throwsException{//打印多项式不空行 intn=getItemNum();//ﻩSystem。out.println(n);ﻩif(n==-1)return;ﻩif(n==0){ﻩﻩSystem.out.print("0");ﻩ return; }ﻩbooleanflag=true;//是不是输出第一项的标志 for(inti=0;i<n;i++){ ﻩItemtemp=(Item)list.getData(i);ﻩﻩ doublec=temp.getC(); ﻩ ﻩif(c==0)continue;//系数为0时不输出 if(flag&&temp.getE()!=0){ﻩ ﻩSystem。out。print(c+”x^"+temp。getE()); } elseif(flag&&temp.getE()==0)ﻩ System。out.print(temp。getC()); else{ ﻩ if(c〉0) ﻩSystem.out.print(”+"+c+”x^”+temp.getE()); ﻩelseif(c<0)ﻩ System。out。print(c+"x^”+temp.getE());ﻩﻩ ﻩ }ﻩ ﻩflag=false; }}publicvoidprintln()throwsException{//打印多项式空行 print(); System.out.println();}publicLinListgetLinList(){//获取单链表 returnlist;}publicvoidprintPolynomial()throwsException{//只打印项数、系数和指数intn=getItemNum();if(n==0)return;System.out。print(n+”,");for(inti=0;i<n;i++){ﻩItemitem=(Item)this。getLinList()。getData(i);ﻩif(i!=n—1){ ﻩ ﻩSystem。out.print("c”+i+"="+item.getC()+","+"e"+i+"="+item。getE()+","); }ﻩelse{ﻩﻩSystem.out.print("c”+i+"="+item。getC()+",”+"e”+i+"="+item.getE());ﻩﻩﻩ}}System。out。println();}publicPolynomialadd(Polynomialother)throwsException{//多项式相加 LinListotherList=other。getLinList(); intn1=getItemNum();//该多项式的项数ﻩintn2=other.getItemNum();//另一个多项式的项数if(n2==0)returnthis;if(n1==0)returnother;Polynomialtemp=newPolynomial();inti=0,j=0;while(+i〈n1&&j<n2){ Itemitem=newItem(); Itemitem1=(Item)list.getData(i);ﻩItemitem2=(Item)otherList。getData(j); doublec1=item1.getC();//获得系数 doublec2=item2。getC(); inte1=item1.getE();//获得指数 inte2=item2.getE();ﻩif(e1==e2){//相等时ﻩ doublec=c1+c2;ﻩﻩitem.setC(c); ﻩitem.setE(e1);ﻩ i++; j++; } elseif(e1<e2){//不相等时指数的大的增加item=item2; j++; ﻩﻩ} else{item=item1; ﻩi++; ﻩ } try{ ﻩif(item.getC()==0)//当得到项的系数为0时就没有必要加入 ﻩcontinue; temp.getLinList().insert(temp。getLinList().size(),item); }catch(Exceptione){} }//将没有参加比较的项加进去,注意比较之后有且只有一个有多余的项while(i〈n1){ﻩItemitem1=(Item)list。getData(i);ﻩtry{ﻩﻩtemp.getLinList().insert(temp.getLinList().size(),item1);ﻩ}catch(Exceptione){}ﻩi++;ﻩ }while(j〈n2){ Itemitem1=(Item)otherList。getData(j);ﻩtry{ﻩﻩtemp.getLinList().insert(temp.getLinList()。size(),item1); }catch(Exceptione){}ﻩj++; }temp。getLinList().head。setElement(temp.getLinList().size());//设置项数returntemp;}publicPolynomialsubtraction(Polynomialother)throwsException{//多项式相减intn=other。getItemNum();if(n==0)returnthis;Polynomialtemp=newPolynomial();LinListl=temp。getLinList();for(inti=0;i〈n;i++){ Itemitem=(Item)other.getLinList().getData(i);ﻩdoublec=-1*item。getC();//取反 l。insert(i,newItem(c,item.getE()));}l。head。setElement(n);//设置项数 returnadd(temp);}publicdoubleresult(doublex)throwsException{ doublesum=0; intn=getItemNum();//该多项式的项数ﻩif(n==0)return0;ﻩfor(inti=0;i<n;i++){ ﻩItemitem=(Item)list.getData(i); ﻩsum+=item。resultItem(x); }ﻩreturnsum;}}Test1类:importjava.io.*;importjava.util.Scanner;publicclassTest1{ﻩ Scannerscanner=newScanner(System.in);ﻩ publicstaticvoidmain(String[]args)throwsException{ Test1test1=newTest1(); Scannerscanner1=newScanner(System.in); ﻩwhile(true){ﻩSystem.out.println("请输入你要操作的系号:\n"+ "1)输出多项式\n”+ﻩ"2)多项式相加\n"+"3)多项式相减\n”+"4)计算多项式在x处的值\n"+”5)退出”);Strings=scanner1.next();intt=—1;try{ﻩt=Integer.parseInt(s);}catch(Exceptione){}switch(t){ case1:test1.printPolynomial();break;ﻩcase2:test1。add();break; case3:test1.subtraction();break;ﻩcase4:test1.resultOfPolynomia();break; case5:System。exit(0);break;ﻩﻩ default:System.out.println(”你输入的操作有误,请重试\n");continue;}ﻩ ﻩ} }ﻩprivatevoidprintPolynomial()throwsException{//选择1时 System.out.println(”请输入要输出的多项式的信息:");Item[]item=creatItemShuZu();Polynomialp=newPolynomial(item);p。printPolynomial();ﻩﻩﻩ} privatevoidadd()throwsException{//选择2时 System。out.println("请输入第一个多项式的信息:");Item[]item1=creatItemShuZu();Polynomialp1=newPolynomial(item1); System.out。println(”请输入第二个多项式的信息:");Item[]item2=creatItemShuZu();Polynomialp2=newPolynomial(item2);Polynomialp=p1。add(p2);System.out.print(”(");p1。print();System.out.print(")+(");p2.print();System。out.print(”)=");p。print();System.out。println(); }ﻩﻩ privatevoidsubtraction()throwsException{//选择3时 System。out.println(”请输入第一个多项式的信息:”);Item[]item1=creatItemShuZu();Polynomialp1=newPolynomial(item1);ﻩSystem.out。println("请输入第二个多项式的信息:");Item[]item2=creatItemShuZu();Polynomialp2=newPolynomial(item2);Polynomialp=p1.subtraction(p2);System.out.print("(");p1.print();System。out。print(")—(");p2.print();System.out.print(")=");p。print();System.out。println(); }ﻩprivatevoidresultOfPolynomia()throwsException{//选择4时ﻩSystem.out。println("请输入要输出的多项式的信息:");Item[]item=creatItemShuZu();Polynomialp=newPolynomial(item); System.out。println(”请输入x=”);doublex=scanner.nextDouble();ﻩSystem.out。println(p。result(x)); }ﻩﻩ privateItem[]creatItemShuZu()throwsException{//构造多项式数组ﻩﻩSystem。out.print(”项数n="); ﻩintn=scanner。nextInt(); ﻩdouble[]c=newdouble[n]; ﻩint[]e=newint[n]; ﻩItem[]item=newItem[n]; System.out。print(”请输入各项的系数:"); for(inti=0;i〈n;i++) ﻩc[i]=scanner。nextDouble(); System.out.print(”请输入各项的指数:");ﻩﻩfor(inti=0;i〈n;i++) e[i]=scanner。nextInt();ﻩﻩfor(inti=0;i<n;i++){ﻩitem[i]=newItem(c[i],e[i]); }returnitem; ﻩ}}[调试分析]ﻩ本程序主要的操作对象是记录数组,使用的存储结构是结构体数组。另外还有对C语言中关于文件的操作,这是本程序中的一个重点也是难点,是此程序出现问题的主要原因之一:问题一:ﻩ现象:输出的成绩不是正确的数字,而是一些类似于地址值的数字。 原因:程序中对各数组的下标操作不统一。因为程序要分别对三个科目的成绩进行统计,所以程序中就要有一个临时数组来存放成绩值,然而在将学科成绩存放在临时数组的过程中如果出现了下标不统一的情况,即在原记录数组中是1…n号元素存放数据,在临时数组中却是0…n-1号元素存放数据。就会引起程序的错误。解决的方法是将整个程序中相互有关的数组使用统一的下标存放数据,就可以避免这种问题。问题二: 现象:这是一个关于文件操作的问题。在将记录存入文件以后再从文件中读取时就出现错误。 原因:在使用fwrite和fread命令的时候函数的参数没有写正确。fwrite和fread命令的第一个参数是存储数据的首地址,如果没有地址没有正确,那么就不能正常地将数据存到文件中也不能正常地读取.[运行结果及分析]1.初始界面:2.输出多项式测试:输入数据:输出结果:3、多项式相加测试:输入2后:输入第一个多项式后:输入第二个多项式后:结果:4、多项式相减与相加类似,这里就不举例。5、计算多项式在x处的值测试:输入4后:输完多项式和x的值后结果:ﻩ三、课程设计题目二2迷宫问题[问题描述]以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论.[基本要求]实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序.求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。编写递归形式的算法,求得迷宫中所有可能的通路;以方阵形式输出迷宫及其通路.(选做)[概要设计]publicclassInterSection{//路口类//行列指定路口的位置ﻩintrow;//行下标ﻩintcol;//列下标 intw;//0和1分别表示迷宫中的通路和障碍ﻩ publicInterSection(intr,intc,intw1){ }}Maze:publicclassMaze{ﻩ}ﻩpublicInterSectiongetFirstNeighbor(InterSectionp){ﻩﻩ//取路口point的第一个邻结点若不存在返回null类似于图的下一个邻结点ﻩﻩ//只要有一个路口的w值为那么这两个路口就不相通 }ﻩpublicInterSectiongetNext(InterSectionp1,InterSectionp2){//按顺时针获取的ﻩ } publicbooleandepthSearch(InterSectionpoint)throwsException{//递归ﻩﻩ }publicStringanswer(InterSectionp)throwsException{//非递归通过堆栈来实现ﻩ}ﻩ publicvoidprintMaze(){//打印迷宫 }}[详细设计]publicclassMaze{ﻩInterSection[][]point;//路口的二维数组 InterSectionexit;//出口的那个路口ﻩintrow;//迷宫的行数 intcol;//迷宫的列数 boolean[][]visited;ﻩ //构造迷宫 publicMaze(int[][]p,intr,intc){//r行数c列数ﻩrow=r+1;ﻩcol=c+1;ﻩ point=newInterSection[row][col];ﻩ//将0列的全部设为阻碍ﻩfor(intk=0;k<r;k++) point[k][0]=newInterSection(k,0,1); //将0行的全部设为阻碍 ﻩfor(intk=0;k〈r;k++)ﻩ{ InterSectiontemp=newInterSection(0,k,1);ﻩ point[0][k]=temp;ﻩﻩ} ﻩﻩfor(inti=0;i〈r;i++)ﻩfor(intj=0;j<c;j++) {ﻩpoint[i+1][j+1]=newInterSection(i+1,j+1,p[i][j]);ﻩ} visited=newboolean[row][col]; for(inti=0;i〈row;i++)ﻩfor(intj=0;j<col;j++) visited[i][j]=false; } publicInterSectiongetFirstNeighbor(InterSectionp){ //取路口point的第一个邻结点若不存在返回null类似于图的下一个邻结点ﻩﻩ//只要有一个路口的w值为那么这两个路口就不相通ﻩﻩintr=p。row;ﻩﻩintc=p.col;ﻩ intw=p。w; ﻩvisited[r][c]=true;ﻩﻩif(w==1)returnnull;// ﻩif(c+1<col&&point[r][c+1].w==0&&!visited[r][c+1])returnpoint[r][c+1];//向左即东 ﻩif(r+1〈row&&point[r+1][c]。w==0&&!visited[r+1][c])returnpoint[r+1][c];//向下即南 ﻩif(c—1>=0&&point[r][c—1].w==0&&!visited[r][c—1])returnpoint[r][c-1];//向右即西ﻩ if(r-1>=0&&point[r-1][c].w==0&&!visited[r-1][c])returnpoint[r-1][c];//向上即北 returnnull;//连通不到下一个路口 }ﻩpublicInterSectiongetNext(InterSectionp1,InterSectionp2){//按顺时针获取的ﻩ intr1=p1。row;ﻩ intc1=p1.col;ﻩﻩintr2=p2。row; intc2=p2。col;ﻩ if(r2〈r1&&c1==c2){//p2在该点上方时 ﻩif(c2+1<col&&point[r1][c2+1].w==0){ ﻩ ﻩ returnpoint[r1][c2+1];ﻩﻩﻩ ﻩﻩ } if(r2—2>=0&&point[r2-2][c2].w==0){ﻩ returnpoint[r2—2][c2]; ﻩ}ﻩ ﻩif(r2-1>=0&&c2-1〉=0&&point[r2-1][c2—1].w==0){ returnpoint[r2—1][c2-1]; ﻩ } ﻩ}ﻩ if(r2==r1&&c1<c2){//在该点右方时 if(r2+1〈row&&point[r2+1][c1]。w==0) ﻩreturnpoint[r2+1][c1];ﻩ if(c2-2>=0&&point[r1][c2-2]。w==0) ﻩreturnpoint[r1][c2—2]; ﻩﻩﻩif(c2-1>=0&&r1—1〉=0&&point[r1-1][c2-1].w==0)ﻩﻩreturnpoint[r1-1][c2-1];ﻩﻩ ﻩ } ﻩif(r2〉r1&&c1==c2&&c2—1〉col){//在该点下方时 ﻩﻩﻩif(c2-1>=0&&point[r1][c2—1]。w==0) returnpoint[r1][c2—1]; ﻩ if(r2-2>=0&&point[r2-2][c2].w==0) ﻩ returnpoint[r2-2][c2];ﻩ if(r2-1〉=0&&c2+1<col&&point[r1—1][c2+1]。w==0) ﻩreturnpoint[r1-1][c2+1]; ﻩ} if(r2==r1&&c1〉c2&&r2-1>col){//在该点左方时ﻩﻩ if(r2—1>=0&&point[r2—1][c1].w==0)ﻩﻩreturnpoint[r2-1][c1]; ﻩif(c2+2〈col&&point[r2][c2+2].w==0) ﻩreturnpoint[r2][c2+2]; ﻩif(r2+1<row&&point[r2+1][c1]。w==0)ﻩﻩreturnpoint[r2+1][c1];ﻩ ﻩ ﻩ}ﻩﻩreturnnull;ﻩ }ﻩﻩpublicbooleandepthSearch(InterSectionpoint)throwsException{//递归 ﻩﻩ intr=point.row;ﻩﻩintc=point.col;ﻩ//ﻩSystem.out。print("(”+point.row+",”+point.col+")”);ﻩﻩif(r==exit.row&&c==exit.col){//出口 ﻩﻩSystem。out.print("(”+point.row+","+point.col+")"); returntrue;ﻩ }ﻩ visited[r][c]=true; InterSectiontemp=getFirstNeighbor(point);ﻩ while(temp!=null){ ﻩ ﻩif(!visited[temp.row][temp。col])ﻩﻩ if(depthSearch(temp)){ ﻩ System.out.print("(”+point。row+","+point.col+")"); ﻩﻩﻩreturntrue; ﻩﻩ}ﻩ ﻩtemp=getNext(point,temp); ﻩ}ﻩ returnfalse; }publicStringanswer(InterSectionp)throwsException{//非递归通过堆栈来实现ﻩﻩSeqStackstack=newSeqStack(50);ﻩﻩStrings1=""; ﻩStrings2="”;ﻩ visited[p.row][p.col]=true; ﻩstack。push(p);ﻩ while(stack.notEmpty()){ﻩﻩ ﻩ ﻩInterSectiontemp=(InterSection)stack.pop();ﻩ visited[temp.row][temp。col]=true; ﻩs1+="(”+temp.row+",”+temp.col+")"; if(temp.row==exit.row&&temp.col==exit.col) returns1; ﻩs2=s1; ﻩ ﻩ ﻩInterSectionu=getFirstNeighbor(temp); while(u!=null&&!visited[u.row][u.col]){ﻩ ﻩﻩif(!visited[u。row][u。col]){ ﻩﻩﻩﻩs2+=”("+u.row+","+u.col+”)"; ﻩ ﻩvisited[u。row][u.col]=true; ﻩﻩﻩif(u.row==exit。row&&u.col==exit。col)ﻩ ﻩﻩ returns2;ﻩﻩ stack。push(u); ﻩﻩ } u=getNext(temp,u); ﻩ} } ﻩreturn”没有通路”;ﻩ}ﻩpublicvoidprintMaze(){//打印迷宫ﻩfor(inti=1;i<10;i++) {ﻩ for(intj=1;j<9;j++) ﻩSystem.out。print(point[i][j]。w+""); ﻩSystem。out.println();ﻩ}ﻩ}}/**********************************************/publicclassInterSection{//路口类//行列指定路口的位置ﻩintrow;//行下标ﻩintcol;//列下标ﻩintw;//0和1分别表示迷宫中的通路和障碍ﻩpublicInterSection(intr,intc,intw1){ row=r; col=c; w=w1;ﻩ}}[运行结果及分析]1。初始界面及结果:四、课程设计题目三成绩分析问题[问题描述]录入、保存一个班级学生多门课程的成绩,并对成绩进行分析.[基本要求](1)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat.(2)对文件input。dat中的数据进行处理,要求具有如下功能:按各门课程成绩排序,并生成相应的文件输出。计算每人的平均成绩,按平均成绩排序,并生成文件.求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数。根据姓名或学号查询某人的各门课成绩,重名情况也能处理。(3)界面美观。[概要设计]Student类:publicclassStudent{ﻩStringnumber; Stringname;ﻩintmath; intenglish;ﻩintcomputer;ﻩ publicStudent(Stringnum,Stringn,intm,inte,intc){ﻩ number=num; name=n; math=m;ﻩﻩenglish=e; ﻩcomputer=c; } publicStudent(){ name="";ﻩ number=”"; ﻩmath=0; ﻩenglish=0;ﻩﻩcomputer=0;ﻩ}ﻩﻩpublicintgetSum(){ returnmath+english+computer;ﻩ}ﻩ publicdoublegetAverage(){ ﻩdoubled=getSum()/3。0; ﻩd=(int)(d*100)*0。01; returnd;ﻩ}}Test5类:importjavax。swing.*;importjavax。swing.JScrollPane;importjava.awt.event.*;importjava.awt。*;importjava.awt.Color;importjava。util。*;importjava.io.*;publicclassTest5extendsJFrameimplementsActionListener,MouseListener{//组件privateJTabletable;privateJScrollBarscrollBar;privateJToolBartoolBar;privateJTextFieldtextField;privateJButtonbutton;privateJScrollPanescrollPane;ﻩprivateJMenuBarmenuBar;ﻩprivateJMenufile;ﻩprivateJMenusort; privateJMenuItemadd;ﻩ privateJMenuItemremove;ﻩprivateJMenuItemfile1; privateJMenuItemfile2; privateJMenuItemfile3; privateJMenuItemsort1;ﻩprivateJMenuItemsort2; privateJMenuItemsort3;ﻩprivateJMenuItemsort4; privateJMenuItemsort5; privateJPopupMenupop;ﻩprivateJMenuItemcancel;ﻩﻩ//其它属性ﻩprivateArrayListarrayList;ﻩprivateStudentstudent;ﻩ//数学 privateintmathNoPass=0;//不及格人数ﻩprivateintcountMath1=0;//60到69人数ﻩprivateintcountMath2=0;//70到79人数ﻩprivateintcountMath3=0;//80到90人数 privateintcountMath4=0;//90以上人数 //英语ﻩprivateintengNoPass=0;//不及格人数 privateintcountEnglish1=0;//60到69人数ﻩprivateintcountEnglish2=0;//70到79人数ﻩprivateintcountEnglish3=0;//80到90人数ﻩprivateintcountEnglish4=0;//90以上人数ﻩ //计算机 privateintcomNoPass=0;//不及格人数ﻩprivateintcountComputer1=0;//60到69人数ﻩprivateintcountComputer2=0;//70到79人数ﻩprivateintcountComputer3=0;//80到90人数ﻩprivateintcountComputer4=0;//90以上人数ﻩprivatebooleanflag=false;//标志量ﻩ ﻩﻩ ﻩﻩ ﻩﻩﻩ ﻩpublicTest5(){ }ﻩﻩprivatevoidupdateTabel(){//更新表格ﻩ}ﻩprivatevoidinitFile(){//初始化文件即给文件赋值ﻩ} privatevoidreadFile(){ //读文件ﻩ ﻩ }ﻩ //排序 ﻩpublicvoidsortSum(){//按总成绩 }ﻩﻩﻩpublicvoidsortMath(){//按数学ﻩﻩﻩ ﻩ} publicvoidsortEnglish(){//按英语ﻩpublicvoidsortComputer(){//按计算机ﻩ}ﻩ //文件的其他操作 publicintgetMaxMath(){//数学的最大值 }ﻩﻩpublicintgetMaxEnglish(){//英语的最大值 }ﻩpublicintgetMaxComputer(){//计算机的最大值 }ﻩpublicdoublegetMathAverage(){//获得数学的平均成绩ﻩ} publicdoublegetEnglishAverage(){//获得英语的平均成绩 }ﻩﻩ publicdoublegetComputerAverage(){//获得计算机的平均成绩 }ﻩ publicintgetMinMath(){//数学的最小值;ﻩ}ﻩﻩpublicintgetMinEnglish(){//英语的最小值ﻩ} publicintgetMinComputer(){//计算机的最小值 } privatevoidgetNumber(){//求各段的人数ﻩ } //查找ﻩpublicvoidfind(){ } //删除 publicvoiddelete(){ﻩ}ﻩ //增加 publicvoidadd(){ } publicvoidactionPerformed(ActionEventae){ﻩ} publicvoidmouseReleased(MouseEvente){ }ﻩpublicvoidmouseClicked(MouseEvente){}ﻩpublicvoidmouseEntered(MouseEvente){}ﻩﻩpublicvoidmouseExited(MouseEvente){}ﻩpublicvoidmousePressed(MouseEvente){}ﻩ publicstaticvoidmain(String[]args){ﻩﻩnewTest5(); }}[详细设计]Student类:publicclassStudent{ﻩﻩStringnumber;ﻩStringname; intmath;ﻩintenglish; intcomputer;ﻩﻩpublicStudent(Stringnum,Stringn,intm,inte,intc){ number=num;ﻩﻩname=n;ﻩﻩmath=m;ﻩﻩenglish=e; computer=c; }ﻩﻩpublicStudent(){ ﻩname="”;ﻩ number="”; math=0;ﻩﻩenglish=0; computer=0; }ﻩﻩpublicintgetSum(){ﻩ returnmath+english+computer; }ﻩpublicdoublegetAverage(){ ﻩdoubled=getSum()/3。0; ﻩd=(int)(d*100)*0.01;ﻩ returnd;ﻩ}}Test5类:importjavax.swing。*;importjavax.swing.JScrollPane;importjava.awt.event。*;importjava.awt。*;importjava.awt.Color;importjava.util.*;importjava.io.*;publicclassTest5extendsJFrameimplementsActionListener,MouseListener{//组件privateJTabletable;privateJScrollBarscrollBar;privateJToolBartoolBar;privateJTextFieldtextField;privateJButtonbutton;privateJScrollPanescrollPane;ﻩprivateJMenuBarmenuBar; privateJMenufile; privateJMenusort; privateJMenuItemadd;ﻩ privateJMenuItemremove;ﻩprivateJMenuItemfile1;ﻩprivateJMenuItemfile2;ﻩﻩprivateJMenuItemfile3; privateJMenuItemsort1;ﻩprivateJMenuItemsort2;ﻩprivateJMenuItemsort3; privateJMenuItemsort4;ﻩprivateJMenuItemsort5; privateJPopupMenupop;ﻩprivateJMenuItemcancel;ﻩ//其它属性 privateArrayListarrayList; privateStudentstudent;ﻩ//数学 privateintmathNoPass=0;//不及格人数ﻩprivateintcountMath1=0;//60到69人数 privateintcountMath2=0;//70到79人数 privateintcountMath3=0;//80到90人数 privateintcountMath4=0;//90以上人数ﻩ//英语 privateintengNoPass=0;//不及格人数 privateintcountEnglish1=0;//60到69人数ﻩprivateintcountEnglish2=0;//70到79人数ﻩprivateintcountEnglish3=0;//80到90人数 privateintcountEnglish4=0;//90以上人数ﻩﻩ//计算机 privateintcomNoPass=0;//不及格人数ﻩprivateintcountComputer1=0;//60到69人数 privateintcountComputer2=0;//70到79人数 privateintcountComputer3=0;//80到90人数 privateintcountComputer4=0;//90以上人数ﻩ privatebooleanflag=false;//标志量 ﻩ ﻩ ﻩﻩﻩ ﻩﻩﻩﻩ ﻩpublicTest5(){ﻩ ﻩsuper(”某班的成绩分析”);ﻩﻩthis。setSize(800,600); this.setLayout(null); ﻩ ﻩ//添加菜单组件 menuBar=newJMenuBar();ﻩ ﻩJMenu("文件”);//给文件添加JMenuItemﻩ JMenuItem("增加”);ﻩ JMenuItem("删除");ﻩﻩJMenuItem(”退出”);ﻩﻩ(file1); (file2); (file3); ﻩmenuBar。add(file); ﻩﻩsort=newJMenu("排序");//给文件添加JMenuItemﻩ sort1=newJMenuItem(”总成绩”);ﻩﻩsort2=newJMenuItem(”平均分”);ﻩﻩﻩ sort3=newJMenuItem(”数学”); ﻩﻩﻩsort4=newJMenuItem(”英语”);ﻩ sort5=newJMenuItem("计算机");ﻩﻩsort.add(sort1);ﻩ sort.add(sort2); ﻩsort.add(sort3);ﻩﻩsort.add(sort4); ﻩsort。add(sort5);ﻩﻩmenuBar。add(sort);ﻩﻩﻩﻩ//工具栏 ﻩtextField=newJTextField(30);ﻩ button=newJButton(”搜索"); ﻩtoolBar=newJToolBar();ﻩ textField。setSize(30,30);ﻩ button。setSize(20,30);ﻩﻩtoolBar.add(textField);ﻩﻩtoolBar。add(button);ﻩﻩ toolBar。setBounds(0,0,getWidth(),30); ﻩﻩthis.add(toolBar); ﻩ //添加表格 ﻩﻩObject[]obj={"序号","学号”,"姓名”,"数学","英语",”计算机”,"总成绩","平均成绩"};ﻩ ﻩtable=newJTable(1000,obj.length); for(inti=0;i<obj.length;i++) ﻩtable.setValueAt(obj[i],0,i);ﻩ table.setSelectionMode(2);//支持间隔多选 table.setBounds(0,30,this。getWidth(),this。getHeight());ﻩ ﻩﻩ//弹出式菜单 ﻩpop=newJPopupMenu();ﻩﻩadd=newJMenuItem("增加"); ﻩremove=newJMenuItem("删除");ﻩﻩcancel=newJMenuItem("取消"); pop。add(add); ﻩpop。add(remove); pop。add(cancel); ﻩﻩ //滚动条 ﻩscrollPane=newJScrollPane(table); ﻩscrollPane。show(true);ﻩ this。add(scrollPane);ﻩ //添加监听器 ﻩtable.addMouseListener(this);ﻩﻩbutton.addActionListener(this);ﻩ cancel。addActionListener(this);ﻩﻩadd.addActionListener(this); remove.addActionListener(this); ﻩ(this); ﻩ(this);ﻩ ﻩ(this); sort1.addActionListener(this); sort2.addActionListener(this);ﻩ sort3。addActionListener(this);ﻩ sort4.addActionListener(this);ﻩﻩsort5。addActionListener(this); ﻩ//添加关闭窗口监听器ﻩ ﻩ addWindowListener(newWindowAdapter(){ﻩ ﻩpublicvoidwindowClosing(WindowEventwe){ﻩ System.exit(0); ﻩﻩ} });ﻩ ﻩﻩ initFile();//初始化文件 ﻩ ﻩ updateTabel();//更新表格 ﻩflag=true; this.add(table);ﻩ this.setJMenuBar(menuBar); ﻩ this.setVisible(true);ﻩ}ﻩprivatevoidupdateTabel(){//更新表格 student=newStudent();ﻩ //读文件readFile();ﻩﻩ ﻩﻩintn=arrayList.size(); if(n==0)return;ﻩ ﻩ try{//当记录为空时al.size()=0,此时会抛出异常 ﻩ ﻩﻩfor(inti=1;i<=n;i++){ ﻩ student=(Student)arrayList.get(i-1);ﻩﻩﻩtable。setValueAt(i,i,0);ﻩ ﻩtable.setValueAt(student.number,i,1);ﻩﻩ table.setValueA,i,2); ﻩ table.setValueAt(student.math,i,3); ﻩtable.setValueAt(student.english,i,4); table。setValueAputer,i,5); ﻩtable.setValueAt(student.getSum(),i,6);ﻩ ﻩtable.setValueAt(student.getAverage(),i,7); ﻩ ﻩﻩ}ﻩﻩﻩ}catch(Exceptione){}ﻩif(flag)return; //其他数据 getNumber();ﻩ//空一行 table。setValueAt(”",n+1,2); table。setValueAt("",n+1,3); table。setValueAt("",n+1,4);ﻩ table.setValueAt(””,n+1,5); ﻩ ﻩﻩtable.setValueAt("各科平均分”,n+2,2);ﻩtable.setValueAt(this。getMathAverage()+"”,n+2,3); table.setValueAt(this.getEnglishAverage()+"",n+2,4); ﻩtable.setValueAt(this.getComputerAverage()+"",n+2,5);ﻩ table.setValueAt(”最高分",n+3,2);ﻩtable。setValueAt(this。getMaxMath()+””,n+3,3);ﻩtable。setValueAt(this。getMaxEnglish()+"",n+3,4);ﻩtable.setValueAt(this.getMaxComputer()+"”,n+3,5); table.setValueAt(”最低分",n+4,2); table.setValueAt(this。getMinMath()+"",n+4,3); table。setValueAt(this。getMinEnglish()+"",n+4,4); table。setValueAt(this。getMinComputer()+"",n+4,5);ﻩtable。setValueAt("不及格",n+5,2);ﻩtable。setValueAt(this。mathNoPass+"”,n+5,3); table.setValueAt(this。engNoPass+”",n+5,4);ﻩtable。setValueANoPass+””,n+5,5); ﻩtable。setValueAt("60~69",n+6,2); table.setValueAt(countMath1+"",n+6,3);ﻩtable.setValueAt(countEnglish1+"”,n+6,4);ﻩtable.setValueAt(countComputer1+””,n+6,5); table.setValueAt("70~79",n+7,2);ﻩtable.setValueAt(countMath2+””,n+7,3);ﻩtable。setValueAt(countEnglish2+"",n+7,4);ﻩtable.setValueAt(countComputer2+"",n+7,5);ﻩtable。setValueAt("80~89",n+8,2);ﻩtable。setValueAt(countMath3+"",n+8,3); table。setValueAt(countEnglish3+"",n+8,4); table。setValueAt(countComputer3+””,n+8,5); ﻩtable。setValueAt(">=90”,n+9,2); table.setValueAt(countMath4+”",n+9,3); table.setValueAt(countEnglish4+”",n+9,4); table.setValueAt(countComputer4+””,n+9,5); table.setValueAt(”",n+10,2);//这是为删除做准备ﻩﻩtable.setValueAt("",n+10,3); table.setValueAt("",n+10,4); ﻩtable。setValueAt("",n+10,5); ﻩ ﻩ} privatevoidinitFile(){//初始化文件即给文件赋值ﻩarrayList=newArrayList(); ﻩStudent[]temp={newStudent("001","王放",78,77,90),ﻩﻩnewStudent("002”,"张强”,89,67,88),ﻩﻩnewStudent(”003","李浩”,56,66,78),ﻩﻩnewStudent(”004”,"黄小兵",89,86,85), newStudent("005”,"李浩”,67,88,76), newStudent("006”,”陈利风",45,54,67),ﻩﻩnewStudent("007",”尚晓",78,76,70),ﻩﻩ};readFile();for(inti=0;i〈temp.length;i++)arrayList.add(i,temp[i]);ﻩtry{ObjectOutputStreamfout=newObjectOutputStream(new(”communication。dat"));fout.writeObject(arrayList);//arrayList写入communication.dat文件中}catch(Exceptione){}ﻩ}ﻩ privatevoidreadFile(){ﻩ//读文件ﻩ ﻩ try{ﻩﻩ ObjectInputStreamfin=newObjectInputStream(new("communication。dat"));ﻩﻩarrayList=(ArrayList)fin.readObject();//从ObjectInputStream读取对象。ﻩ fin.close();//关闭对象输入流 }catch(Exceptione){} }ﻩ //排序 publicvoidsortSum(){//按总成绩 intn=arrayList。size();inti,j,max;for(i=0;i〈n-1;i++){ max=i;ﻩfor(j=i+1;j<n;j++){ﻩﻩStudents1=(Student)arrayList。get(j);ﻩﻩStudents2=(Student)arrayList.get(max); ﻩintsum1=s1.getSum(); intsum2=s2.getSum();ﻩﻩif(sum1>sum2)max=j; }ﻩif(max!=i){ﻩﻩStudenttemp1=(Student)arrayList.get(i); Studenttemp2=(Student)arrayList.get(max);ﻩ ﻩ arrayList。set(i,temp2); ﻩarr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论