版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
/~瀏水浮蕓QQ632069015《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告一元稀疏多項(xiàng)式計算器、迷宮問題、成績分析問題、圖的基本操作與實(shí)現(xiàn)以及背包問題的求解學(xué)院(系):計算機(jī)班級:軟件工程4班學(xué)生姓名:江志偉學(xué)號10803080409指導(dǎo)教師:時間:從2010年01月11日到2010年01月15日一、課程設(shè)計概述:本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計共完成五個題:一元稀疏多項(xiàng)式計算器、迷宮問題、成績分析問題、圖的基本操作與實(shí)現(xiàn)以及背包問題的求解使用語言:C 編譯環(huán)境:TC3.0二、課程設(shè)計題目一[實(shí)驗(yàn)內(nèi)容]一元稀疏多項(xiàng)式計算器[問題描述]設(shè)計一個一元稀疏多項(xiàng)式簡單計算器.[基本要求]一元稀疏多項(xiàng)式簡單計算器的基本功能是:輸入并建立多項(xiàng)式;輸出多項(xiàng)式,輸出形式為整數(shù)序列:n,c1,e1,c2,e2,,,,,,,cn,en,其中n是多項(xiàng)式的項(xiàng)數(shù),ci,ei,分別是第i項(xiàng)的系數(shù)和指數(shù),序列按指數(shù)降序排序;多項(xiàng)式a和b相加,建立多項(xiàng)式a+b;多項(xiàng)式a和b相減,建立多項(xiàng)式a—b;計算多項(xiàng)式在x處的值。計算器的仿真界面。(選做)[概要設(shè)計]—=ADT=-Test1:主類,程序的啟動Item:項(xiàng),表示多項(xiàng)式中的某一項(xiàng)Ploynomial:多項(xiàng)式類[存儲結(jié)構(gòu)]Item屬性: privatedoublec;//系數(shù) privateinte;//指數(shù)Item方法: publicvoidsetC(doublec){//設(shè)置系數(shù)? }?publicvoidsetE(inte){//設(shè)置指數(shù) } publicdoublegetC(){//獲取系數(shù) ??}??publicintgetE(){//獲取指數(shù)?? }? publicdoubleresultItem(doublex){//在x處Item的值???}??privatedoublefac(doublex,inte){//求x的e次方,當(dāng)e為整數(shù)時?} Polynomial屬性:privateLinListlist;//單鏈表Polynomial方法:publicPolynomial(){}publicPolynomial(Item[]item)throwsException{//構(gòu)造函數(shù)}privatevoidinitItem(Item[]item){//初始化Item數(shù)組,使其是按降序排序?}publicintgetItemNum(){//獲取項(xiàng)數(shù)}publicvoidprint()throwsException{//打印多項(xiàng)式不空行?}publicvoidprintln()throwsException{//打印多項(xiàng)式空行}publicLinListgetLinList(){//獲取單鏈表?}publicvoidprintPolynomial()throwsException{//只打印項(xiàng)數(shù)、系數(shù)和指數(shù)}publicPolynomialadd(Polynomialother)throwsException{//多項(xiàng)式相加?}}publicPolynomialsubtraction(Polynomialother)throwsException{//多項(xiàng)式相減}publicdoubleresult(doublex)throwsException{}[詳細(xì)設(shè)計]Item類:publicclassItem{?privatedoublec;//系數(shù)?privateinte;//指數(shù)??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次方,當(dāng)e為整數(shù)時 if(e==0)return1; ?returnx*fac(x,e—1);?? }? }Polynomial類:importjava。util.*;publicclassPolynomial{//多項(xiàng)式類privateLinListlist;//單鏈表publicPolynomial(){ list=newLinList(0,null);}publicPolynomial(Item[]item)throwsException{//構(gòu)造函數(shù)?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數(shù)組,使其是按降序排序 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(){//獲取項(xiàng)數(shù) Objecttemp=list.head.getElement();?intn=-1; if(tempinstanceofInteger){ ?Integeri=(Integer)temp;? n=i。intValue(); }?returnn;}publicvoidprint()throwsException{//打印多項(xiàng)式不空行 intn=getItemNum();//?System。out.println(n);?if(n==-1)return;?if(n==0){??System.out.print("0");? return; }?booleanflag=true;//是不是輸出第一項(xiàng)的標(biāo)志 for(inti=0;i<n;i++){ ?Itemtemp=(Item)list.getDat(yī)a(i);?? doublec=temp.getC(); ? ?if(c==0)continue;//系數(shù)為0時不輸出 if(flag&&temp.getE()?。?){? ?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{//打印多項(xiàng)式空行 print(); System.out.println();}publicLinListgetLinList(){//獲取單鏈表 returnlist;}publicvoidprintPolynomial()throwsException{//只打印項(xiàng)數(shù)、系數(shù)和指數(shù)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{//多項(xiàng)式相加 LinListotherList=other。getLinList(); intn1=getItemNum();//該多項(xiàng)式的項(xiàng)數(shù)?intn2=other.getItemNum();//另一個多項(xiàng)式的項(xiàng)數(shù)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。getDat(yī)a(j); doublec1=item1.getC();//獲得系數(shù) doublec2=item2。getC(); inte1=item1.getE();//獲得指數(shù) inte2=item2.getE();?if(e1==e2){//相等時? doublec=c1+c2;??item.setC(c); ?item.setE(e1);? i++; j++; } elseif(e1<e2){//不相等時指數(shù)的大的增加item=item2; j++; ??} else{item=item1; ?i++; ? } try{ ?if(item.getC()==0)//當(dāng)?shù)玫巾?xiàng)的系數(shù)為0時就沒有必要加入 ?continue; temp.getLinList().insert(temp。getLinList().size(),item); }catch(Exceptione){} }//將沒有參加比較的項(xiàng)加進(jìn)去,注意比較之后有且只有一個有多余的項(xiàng)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());//設(shè)置項(xiàng)數(shù)returntemp;}publicPolynomialsubtraction(Polynomialother)throwsException{//多項(xiàng)式相減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);//設(shè)置項(xiàng)數(shù) returnadd(temp);}publicdoubleresult(doublex)throwsException{ doublesum=0; intn=getItemNum();//該多項(xiàng)式的項(xiàng)數(shù)?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)輸出多項(xiàng)式\n”+?"2)多項(xiàng)式相加\n"+"3)多項(xiàng)式相減\n”+"4)計算多項(xiàng)式在x處的值\n"+”5)退出”);Strings=scanner1.next();intt=—1;try{?t=Integer.parseInt(s);}cat(yī)ch(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;}? ?} }?privat(yī)evoidprintPolynomial()throwsException{//選擇1時 System.out.println(”請輸入要輸出的多項(xiàng)式的信息:");Item[]item=creatItemShuZu();Polynomialp=newPolynomial(item);p。printPolynomial();???} privatevoidadd()throwsException{//選擇2時 System。out.println("請輸入第一個多項(xiàng)式的信息:");Item[]item1=creatItemShuZu();Polynomialp1=newPolynomial(item1); System.out。println(”請輸入第二個多項(xiàng)式的信息:");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(”請輸入第一個多項(xiàng)式的信息:”);Item[]item1=creatItemShuZu();Polynomialp1=newPolynomial(item1);?System.out。println("請輸入第二個多項(xiàng)式的信息:");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("請輸入要輸出的多項(xiàng)式的信息:");Item[]item=creatItemShuZu();Polynomialp=newPolynomial(item); System.out。println(”請輸入x=”);doublex=scanner.nextDouble();?System.out。println(p。result(x)); }?? privateItem[]creatItemShuZu()throwsException{//構(gòu)造多項(xiàng)式數(shù)組??System。out.print(”項(xiàng)數(shù)n="); ?intn=scanner。nextInt(); ?double[]c=newdouble[n]; ?int[]e=newint[n]; ?Item[]item=newItem[n]; System.out。print(”請輸入各項(xiàng)的系數(shù):"); for(inti=0;i〈n;i++) ?c[i]=scanner。nextDouble(); System.out.print(”請輸入各項(xiàng)的指數(shù):");??for(inti=0;i〈n;i++) e[i]=scanner。nextInt();??for(inti=0;i<n;i++){?item[i]=newItem(c[i],e[i]); }returnitem; ?}}[調(diào)試分析]?本程序主要的操作對象是記錄數(shù)組,使用的存儲結(jié)構(gòu)是結(jié)構(gòu)體數(shù)組。另外還有對C語言中關(guān)于文件的操作,這是本程序中的一個重點(diǎn)也是難點(diǎn),是此程序出現(xiàn)問題的主要原因之一:問題一:?現(xiàn)象:輸出的成績不是正確的數(shù)字,而是一些類似于地址值的數(shù)字。 原因:程序中對各數(shù)組的下標(biāo)操作不統(tǒng)一。因?yàn)槌绦蛞謩e對三個科目的成績進(jìn)行統(tǒng)計,所以程序中就要有一個臨時數(shù)組來存放成績值,然而在將學(xué)科成績存放在臨時數(shù)組的過程中如果出現(xiàn)了下標(biāo)不統(tǒng)一的情況,即在原記錄數(shù)組中是1…n號元素存放數(shù)據(jù),在臨時數(shù)組中卻是0…n-1號元素存放數(shù)據(jù)。就會引起程序的錯誤。解決的方法是將整個程序中相互有關(guān)的數(shù)組使用統(tǒng)一的下標(biāo)存放數(shù)據(jù),就可以避免這種問題。問題二: 現(xiàn)象:這是一個關(guān)于文件操作的問題。在將記錄存入文件以后再從文件中讀取時就出現(xiàn)錯誤。 原因:在使用fwrite和fread命令的時候函數(shù)的參數(shù)沒有寫正確。fwrite和fread命令的第一個參數(shù)是存儲數(shù)據(jù)的首地址,如果沒有地址沒有正確,那么就不能正常地將數(shù)據(jù)存到文件中也不能正常地讀取.[運(yùn)行結(jié)果及分析]1.初始界面:2.輸出多項(xiàng)式測試:輸入數(shù)據(jù):輸出結(jié)果:3、多項(xiàng)式相加測試:輸入2后:輸入第一個多項(xiàng)式后:輸入第二個多項(xiàng)式后:結(jié)果:4、多項(xiàng)式相減與相加類似,這里就不舉例。5、計算多項(xiàng)式在x處的值測試:輸入4后:輸完多項(xiàng)式和x的值后結(jié)果:?三、課程設(shè)計題目二2迷宮問題[問題描述]以一個m*n的長方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設(shè)計一個程序,對任意設(shè)定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結(jié)論.[基本要求]實(shí)現(xiàn)一個以鏈表作存儲結(jié)構(gòu)的棧類型,然后編寫一個求解迷宮的非遞歸程序.求得的通路以三元組(i,j,d)的形式輸出,其中:(i,j)指示迷宮中的一個坐標(biāo),d表示走到下一坐標(biāo)的方向。編寫遞歸形式的算法,求得迷宮中所有可能的通路;以方陣形式輸出迷宮及其通路.(選做)[概要設(shè)計]publicclassInterSection{//路口類//行列指定路口的位置?introw;//行下標(biāo)?intcol;//列下標(biāo) intw;//0和1分別表示迷宮中的通路和障礙? publicInterSection(intr,intc,intw1){ }}Maze:publicclassMaze{?}?publicInterSectiongetFirstNeighbor(InterSectionp){??//取路口point的第一個鄰結(jié)點(diǎn)若不存在返回null類似于圖的下一個鄰結(jié)點(diǎn)??//只要有一個路口的w值為那么這兩個路口就不相通 }?publicInterSectiongetNext(InterSectionp1,InterSectionp2){//按順時針獲取的? } publicbooleandepthSearch(InterSectionpoint)throwsException{//遞歸?? }publicStringanswer(InterSectionp)throwsException{//非遞歸通過堆棧來實(shí)現(xiàn)?}? publicvoidprintMaze(){//打印迷宮 }}[詳細(xì)設(shè)計]publicclassMaze{?InterSection[][]point;//路口的二維數(shù)組 InterSectionexit;//出口的那個路口?introw;//迷宮的行數(shù) intcol;//迷宮的列數(shù) boolean[][]visited;? //構(gòu)造迷宮 publicMaze(int[][]p,intr,intc){//r行數(shù)c列數(shù)?row=r+1;?col=c+1;? point=newInterSection[row][col];?//將0列的全部設(shè)為阻礙?for(intk=0;k<r;k++) point[k][0]=newInterSection(k,0,1); //將0行的全部設(shè)為阻礙 ?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的第一個鄰結(jié)點(diǎn)若不存在返回null類似于圖的下一個鄰結(jié)點(diǎn)??//只要有一個路口的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在該點(diǎn)上方時 ?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){//在該點(diǎn)右方時 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){//在該點(diǎn)下方時 ???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){//在該點(diǎn)左方時?? 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?。絥ull){ ? ?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{//非遞歸通過堆棧來實(shí)現(xiàn)??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;//行下標(biāo)?intcol;//列下標(biāo)?intw;//0和1分別表示迷宮中的通路和障礙?publicInterSection(intr,intc,intw1){ row=r; col=c; w=w1;?}}[運(yùn)行結(jié)果及分析]1。初始界面及結(jié)果:四、課程設(shè)計題目三成績分析問題[問題描述]錄入、保存一個班級學(xué)生多門課程的成績,并對成績進(jìn)行分析.[基本要求](1)通過鍵盤輸入各學(xué)生的多門課程的成績,建立相應(yīng)的文件input.dat(yī).(2)對文件input。dat中的數(shù)據(jù)進(jìn)行處理,要求具有如下功能:按各門課程成績排序,并生成相應(yīng)的文件輸出。計算每人的平均成績,按平均成績排序,并生成文件.求出各門課程的平均成績、最高分、最低分、不及格人數(shù)、60~69分人數(shù)、70~79分人數(shù)、80~89分人數(shù)、90分以上人數(shù)。根據(jù)姓名或?qū)W號查詢某人的各門課成績,重名情況也能處理。(3)界面美觀。[概要設(shè)計]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=”"; ?mat(yī)h=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.a(chǎn)wt.event.*;importjava.awt。*;importjava.awt.Color;importjava。util。*;importjava.io.*;publicclassTest5extendsJFrameimplementsActionListener,MouseListener{//組件privateJTabletable;privateJScrollBarscrollBar;privateJToolBartoolBar;privateJTextFieldtextField;privateJButtonbutton;privateJScrollPanescrollPane;?privat(yī)eJMenuBarmenuBar;?privateJMenufile;?privateJMenusort; privateJMenuItemadd;? privateJMenuItemremove;?privateJMenuItemfile1; privateJMenuItemfile2; privateJMenuItemfile3; privateJMenuItemsort1;?privateJMenuItemsort2; privateJMenuItemsort3;?privateJMenuItemsort4; privat(yī)eJMenuItemsort5; privateJPopupMenupop;?privateJMenuItemcancel;??//其它屬性?privateArrayListarrayList;?privateStudentstudent;?//數(shù)學(xué) privateintmathNoPass=0;//不及格人數(shù)?privateintcountMat(yī)h1=0;//60到69人數(shù)?privateintcountMath2=0;//70到79人數(shù)?privateintcountMath3=0;//80到90人數(shù) privateintcountMath4=0;//90以上人數(shù) //英語?privateintengNoPass=0;//不及格人數(shù) privateintcountEnglish1=0;//60到69人數(shù)?privateintcountEnglish2=0;//70到79人數(shù)?privat(yī)eintcountEnglish3=0;//80到90人數(shù)?privateintcountEnglish4=0;//90以上人數(shù)? //計算機(jī) privateintcomNoPass=0;//不及格人數(shù)?privateintcountComputer1=0;//60到69人數(shù)?privateintcountComputer2=0;//70到79人數(shù)?privateintcountComputer3=0;//80到90人數(shù)?privateintcountComputer4=0;//90以上人數(shù)?privatebooleanflag=false;//標(biāo)志量? ?? ?? ??? ?publicTest5(){ }??privatevoidupdateTabel(){//更新表格?}?privatevoidinitFile(){//初始化文件即給文件賦值?} privatevoidreadFile(){ //讀文件? ? }? //排序 ?publicvoidsortSum(){//按總成績 }???publicvoidsortMath(){//按數(shù)學(xué)??? ?} publicvoidsortEnglish(){//按英語?publicvoidsortComputer(){//按計算機(jī)?}? //文件的其他操作 publicintgetMaxMath(){//數(shù)學(xué)的最大值 }??publicintgetMaxEnglish(){//英語的最大值 }?publicintgetMaxComputer(){//計算機(jī)的最大值 }?publicdoublegetMathAverage(){//獲得數(shù)學(xué)的平均成績?} publicdoublegetEnglishAverage(){//獲得英語的平均成績 }?? publicdoublegetComputerAverage(){//獲得計算機(jī)的平均成績 }? publicintgetMinMath(){//數(shù)學(xué)的最小值;?}??publicintgetMinEnglish(){//英語的最小值?} publicintgetMinComputer(){//計算機(jī)的最小值 } privatevoidgetNumber(){//求各段的人數(shù)? } //查找?publicvoidfind(){ } //刪除 publicvoiddelete(){?}? //增加 publicvoidadd(){ } publicvoidactionPerformed(ActionEventae){?} publicvoidmouseReleased(MouseEvente){ }?publicvoidmouseClicked(MouseEvente){}?publicvoidmouseEntered(MouseEvente){}??publicvoidmouseExited(MouseEvente){}?publicvoidmousePressed(MouseEvente){}? publicstat(yī)icvoidmain(String[]args){??newTest5(); }}[詳細(xì)設(shè)計]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;??privat(yī)eJMenuItemfile3; privateJMenuItemsort1;?privateJMenuItemsort2;?privateJMenuItemsort3; privateJMenuItemsort4;?privat(yī)eJMenuItemsort5; privateJPopupMenupop;?privat(yī)eJMenuItemcancel;?//其它屬性 privateArrayListarrayList; privateStudentstudent;?//數(shù)學(xué) privateintmat(yī)hNoPass=0;//不及格人數(shù)?privat(yī)eintcountMath1=0;//60到69人數(shù) privateintcountMath2=0;//70到79人數(shù) privateintcountMat(yī)h3=0;//80到90人數(shù) privateintcountMath4=0;//90以上人數(shù)?//英語 privateintengNoPass=0;//不及格人數(shù) privateintcountEnglish1=0;//60到69人數(shù)?privateintcountEnglish2=0;//70到79人數(shù)?privateintcountEnglish3=0;//80到90人數(shù) privateintcountEnglish4=0;//90以上人數(shù)??//計算機(jī) privateintcomNoPass=0;//不及格人數(shù)?privat(yī)eintcountComputer1=0;//60到69人數(shù) privateintcountComputer2=0;//70到79人數(shù) privateintcountComputer3=0;//80到90人數(shù) privat(yī)eintcountComputer4=0;//90以上人數(shù)? privatebooleanflag=false;//標(biāo)志量 ? ? ??? ???? ?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(”數(shù)學(xué)”); ???sort4=newJMenuItem(”英語”);? sort5=newJMenuItem("計算機(jī)");??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={"序號","學(xué)號”,"姓名”,"數(shù)學(xué)","英語",”計算機(jī)”,"總成績","平均成績"};? ?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);? //添加監(jiān)聽器 ?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.a(chǎn)ddActionListener(this);??sort5。addActionListener(this); ?//添加關(guān)閉窗口監(jiān)聽器? ? addWindowListener(newWindowAdapter(){? ?publicvoidwindowClosing(WindowEventwe){? System.exit(0); ??} });? ?? initFile();//初始化文件 ? ? updateTabel();//更新表格 ?flag=true; this.add(table);? this.setJMenuBar(menuBar); ? this.setVisible(true);?}?privat(yī)evoidupdateTabel(){//更新表格 student=newStudent();? //讀文件readFile();?? ??intn=arrayList.size(); if(n==0)return;? ? try{//當(dāng)記錄為空時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.mat(yī)h,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; //其他數(shù)據(jù) 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。mat(yī)hNoPass+"”,n+5,3); table.setValueAt(this。engNoPass+”",n+5,4);?table。setValueANoPass+””,n+5,5); ?table。setValueAt("60~69",n+6,2); table.setValueAt(countMat(yī)h1+"",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);//這是為刪除做準(zhǔn)備??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”,"張強(qiáng)”,89,67,88),??newStudent(”003","李浩”,56,66,78),??newStudent(”004”,"黃小兵",89,86,85), newStudent("005”,"李浩”,67,88,76), newStudent("006”,”陳利風(fēng)",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(”communicat(yī)ion。dat"));fout.writeObject(arrayList);//arrayList寫入communication.dat文件中}catch(Exceptione){}?}? privatevoidreadFile(){?//讀文件? ? try{?? ObjectInputStreamfin=newObjectInputStream(new("communication。dat(yī)"));??arrayList=(ArrayList)fin.readObject();//從ObjectInputStream讀取對象。? fin.close();//關(guān)閉對象輸入流 }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?。剑?{??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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年食堂炊事員應(yīng)急管理與服務(wù)合同范本3篇
- 2025年蟹塘養(yǎng)殖基地承包與品牌授權(quán)協(xié)議3篇
- 二零二五版美容院美容設(shè)備研發(fā)與技術(shù)支持采購合同4篇
- 2025年高速公路停車場租賃及旅游導(dǎo)覽服務(wù)合同3篇
- 2025年星巴克綠色環(huán)保包裝材料采購合同2篇
- 二零二五年度面包磚生產(chǎn)設(shè)備租賃合同4篇
- 2025年度采礦權(quán)出讓合同范本:礦業(yè)權(quán)收益分配機(jī)制3篇
- 2025年度特色菜品研發(fā)廚師合作合同4篇
- 2025版吸糞車租賃合同范本(含保險條款)3篇
- 2025版售樓部裝修工程防水防潮合同3篇
- 湖北省黃石市陽新縣2024-2025學(xué)年八年級上學(xué)期數(shù)學(xué)期末考試題 含答案
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報告
- 央視網(wǎng)2025亞冬會營銷方案
- 《無砟軌道施工與組織》 課件 第十講雙塊式無砟軌道施工工藝
- 江蘇省南京市、鹽城市2023-2024學(xué)年高三上學(xué)期期末調(diào)研測試+英語+ 含答案
- 2024新版《藥品管理法》培訓(xùn)課件
- 《阻燃材料與技術(shù)》課件 第7講 阻燃橡膠材料
- 爆炸物運(yùn)輸安全保障方案
- 江蘇省南京市2025屆高三學(xué)業(yè)水平調(diào)研考試數(shù)學(xué)試卷(解析版)
- 鉗工考試題及參考答案
- 移動商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)五 引發(fā)用戶共鳴外部條件的把控
評論
0/150
提交評論