數(shù)據(jù)庫(kù)第一章實(shí)驗(yàn)_第1頁(yè)
數(shù)據(jù)庫(kù)第一章實(shí)驗(yàn)_第2頁(yè)
數(shù)據(jù)庫(kù)第一章實(shí)驗(yàn)_第3頁(yè)
數(shù)據(jù)庫(kù)第一章實(shí)驗(yàn)_第4頁(yè)
數(shù)據(jù)庫(kù)第一章實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

針對(duì)每一項(xiàng)功能,有著相應(yīng)的實(shí)現(xiàn)方法。第一項(xiàng)功能,實(shí)現(xiàn)對(duì)兩個(gè)文件數(shù)據(jù)進(jìn)行合并,生成新文件3.txt。調(diào)用函數(shù)Unitedfile()來(lái)實(shí)現(xiàn),函數(shù)以讀的方式打開(kāi)1.txt文件,以寫(xiě)的方式打開(kāi)3.txt文件,從1.txt讀入一個(gè)數(shù)據(jù)并寫(xiě)入3.txt文件,直到遇到1.txt文件結(jié)束。關(guān)閉1.txt文件,再以讀的方式打開(kāi)2.txt文件,用上述方式直到遇到2.txt文件結(jié)束。關(guān)閉2.txt,3.txt文件。實(shí)現(xiàn)對(duì)于文件的合并。voidUnitedfile()//合并1.txt和2.txt為3.txt{ FILE*fp,*p; Studentstudd; fp=fopen("1.txt","r");//以讀的方式打開(kāi)1.txt p=fopen("3.txt","w");//以寫(xiě)的方式打開(kāi)3.txt while(fscanf(fp,"%s%s%d%d%d",,studd.id,&studd.chinese,&studd.math,&studd.english)!=EOF) { fprintf(p,"%-6s%-6s%-6d%-6d%-6d\n",,studd.id,studd.chinese,studd.math,studd.english); }//讀取1.txt的數(shù)據(jù)進(jìn)入結(jié)構(gòu)體中,寫(xiě)入3.txt,繼續(xù)讀取直結(jié)束 fclose(fp);//關(guān)閉文件1.txt fp=fopen("2.txt","r");//以寫(xiě)的方式打開(kāi)2.txt while(fscanf(fp,"%s%s%d%d%d",,studd.id,&studd.chinese,&studd.math,&studd.english)!=EOF) { fprintf(p,"%-6s%-6s%-6d%-6d%-6d\n",,studd.id,studd.chinese,studd.math,studd.english); } fclose(fp); fclose(p);}第二項(xiàng)功能,抽取出三科成績(jī)中有補(bǔ)考的學(xué)生并保存在一個(gè)新文件4.txt。調(diào)用函數(shù)findout()來(lái)實(shí)現(xiàn)。函數(shù)以讀的方式打開(kāi)3.txt文件,以寫(xiě)的方式打開(kāi)4.txt文件。讀入3.txt文件的一個(gè)數(shù)據(jù)到結(jié)構(gòu)體studd中,判斷學(xué)生信息中語(yǔ)、數(shù)和英語(yǔ)中是否具有不及格的,如果有,則將數(shù)據(jù)寫(xiě)入4.txt中,直至遇到3.txt文件結(jié)束。voidfindout()//抽取出三科成績(jī)中有補(bǔ)考的學(xué)生并保存在一個(gè)新文件4.txt{ FILE*fp,*p; Studentstudd; fp=fopen("3.txt","r"); p=fopen("4.txt","w");//從3.txt中讀入學(xué)生數(shù)據(jù)進(jìn)結(jié)構(gòu)體,判斷是否有不及格的課程,如果有,則寫(xiě)入文件4.txt中 while(fscanf(fp,"%s%s%d%d%d",,studd.id,&studd.chinese,&studd.math,&studd.english)!=EOF) { if(studd.chinese<60||studd.english<60||studd.math<60) { fprintf(p,"%-6s%-6s%-6d%-6d%-6d\n",,studd.id,studd.chinese,studd.math,studd.english); } } fclose(fp); fclose(p);}第三項(xiàng)功能,對(duì)合并后的文件3.txt中的數(shù)據(jù)按總分降序排序。調(diào)用函數(shù)sortfile()來(lái)實(shí)現(xiàn)。函數(shù)提供了兩種排序方法,通過(guò)調(diào)用函數(shù)kuaisu()來(lái)實(shí)現(xiàn)快速排序,通過(guò)調(diào)用函數(shù)xuanze()來(lái)實(shí)現(xiàn)選擇排序。voidsortfile()//提供兩種排序方法{ charc; cout<<"請(qǐng)選擇排序方法:"<<endl; cout<<"1.選擇排序"<<endl; cout<<"2.快速排序"<<endl; cin>>c; switch(c) { case'1': xuanze();//選擇排序 break; case'2': kuaisu();//快速排序 break; }}選擇排序voidxuanze()//對(duì)合并后的文件3.txt中的數(shù)據(jù)按總分降序排序{ intj,k,max1,sum1,sum2,q; i=0; Studenttemp; FILE*fp; fp=fopen("3.txt","r"); i=0; while(fscanf(fp,"%s%s%d%d%d",stud[i].name,stud[i].id,&stud[i].chinese,&stud[i].math,&stud[i].english)!=EOF) { i++; }//從3.txt中讀入數(shù)據(jù)進(jìn)結(jié)構(gòu)體數(shù)組stud中 fclose(fp); for(j=0;j<i-1;j++)//對(duì)結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)進(jìn)行選擇排序 { max1=j; sum1=stud[j].math+stud[j].english+stud[j].chinese; for(k=j+1;k<i;k++) { sum2=stud[k].math+stud[k].english+stud[k].chinese; if(sum1<sum2) { max1=k; sum1=sum2; } } if(max1!=j) { temp=stud[max1]; stud[max1]=stud[j]; stud[j]=temp; } stud[j].sum=sum1; } fp=fopen("3.txt","w");//將排序后的數(shù)據(jù)寫(xiě)入3.txt中 for(q=0;q<i;q++) { fprintf(fp,"%-8s%-8s%-8d%-8d%-8d%-8d\n",stud[q].name,stud[q].id,stud[q].chinese,stud[q].math,stud[q].english,stud[q].sum); } fclose(fp);}快速排序intPartition(intlow,inthigh){ intpivotkey; Studenttemp; temp=stud[low]; pivotkey=stud[low].sum; while(low<high) { while(low<high&&stud[high].sum<=pivotkey)--high; stud[low]=stud[high]; while(low<high&&stud[low].sum>=pivotkey)++low; stud[high]=stud[low]; } stud[low]=temp; returnlow;}voidQSort(intlow,inthigh)//快速排序{ intprivotloc; if(low<high) { privotloc=Partition(low,high); QSort(low,privotloc-1); QSort(privotloc+1,high); }}voidkuaisu()//讀取文件,快速排序,將結(jié)果寫(xiě)入3.txt{ inti,low,high; FILE*fp; fp=fopen("3.txt","r"); i=0; while(fscanf(fp,"%s%s%d%d%d",stud[i].name,stud[i].id,&stud[i].chinese,&stud[i].math,&stud[i].english)!=EOF) { stud[i].sum=stud[i].english+stud[i].chinese+stud[i].math; i++; }//從文件3.txt中讀入數(shù)據(jù)進(jìn)結(jié)構(gòu)體數(shù)組stud中 fclose(fp); low=0; high=i-1; QSort(low,high);//快速排序 fp=fopen("3.txt","w");//將排序后的數(shù)據(jù)寫(xiě)入3.txt中 for(intj=0;j<i;j++) { fprintf(fp,"%-8s%-8s%-8d%-8d%-8d%-8d\n",stud[j].name,stud[j].id,stud[j].chinese,stud[j].math,stud[j].english,stud[j].sum); } fclose(fp);}第四項(xiàng)功能,輸入一個(gè)學(xué)生姓名后,能查找到此學(xué)生的信息并輸出結(jié)果。調(diào)用函數(shù)findoutstudent()來(lái)實(shí)現(xiàn)。函數(shù)也提供了兩種查找方法,通過(guò)調(diào)用函數(shù)derectfindoutstudent()實(shí)現(xiàn)從文件從3.txt中逐個(gè)讀入數(shù)據(jù),再進(jìn)行查找判斷,如果找到所需要的數(shù)據(jù),則查找結(jié)束,否則繼續(xù)查找直至文件結(jié)束。autofindoutstudent()在進(jìn)行第三步的過(guò)程中,已經(jīng)把3.txt中的學(xué)生數(shù)據(jù)讀入了結(jié)構(gòu)體數(shù)組當(dāng)中,調(diào)用函數(shù)autofindoutstudent()直接從結(jié)構(gòu)體中進(jìn)行查找。voidderectfindoutstudent()//輸入一個(gè)學(xué)生姓名,查找到此學(xué)生的信息并輸出結(jié)果{ charNAME[30]; intflag=0; FILE*fp; fp=fopen("3.txt","r"); cin>>NAME; while(fscanf(fp,"%s%s%d%d%d%d",stud[1].name,stud[1].id,&stud[1].chinese,&stud[1].math,&stud[1].english,&stud[1].sum)!=EOF) { if(strcmp(stud[1].name,NAME)==0) { flag=1; cout<<"-------姓名-------學(xué)號(hào)-------語(yǔ)文-------數(shù)學(xué)-------英語(yǔ)-------總分--------"<<endl; cout<<""<<stud[1].name<<""<<stud[1].id<<""; cout<<stud[1].chinese<<""<<stud[1].math<<""<<stud[1].english<<""<<stud[1].sum<<endl; break; } } if(flag==0) cout<<"無(wú)此學(xué)生相關(guān)信息"<<endl; fclose(fp);}voidautofindoutstudent()//從結(jié)構(gòu)體數(shù)組中查找{ intn,flag=0,k; charName[30]; n=i-1; cin>>Name; for(k=1;k<=n;k++) { if(strcmp(stud[k].name,Name)==0) { flag=1; cout<<"-------姓名-------學(xué)號(hào)-------語(yǔ)文-------數(shù)學(xué)-------英語(yǔ)-------總分--------"<<endl; cout<<""<<stud[k].name<<""<<stud[k].id<<""; cout<<stud[k].chinese<<""<<stud[k].math<<""<<stud[k].english<<""<<stud[k].sum<<endl; break; } }if(flag==0) cout<<"無(wú)此學(xué)生相關(guān)信息"<<endl;}voidfindoutstudent()//提供兩種查找方法{ charc; cout<<"請(qǐng)選擇查找方法"<<endl; cout<<"1.從文件3中直接查找"<<endl; cout<<"2.在運(yùn)行第三步的基礎(chǔ)上查找"<<endl; cin>>c; cout<<"請(qǐng)輸入學(xué)生姓名:"; if(sign1==0&&c=='2') { cout<<"請(qǐng)執(zhí)行操作3后再執(zhí)行此項(xiàng)操作!"<<endl; return; } switch(c) { case'1': derectfindoutstudent();//從文件3中直接查找 break; case'2': autofindoutstudent();//從結(jié)構(gòu)體數(shù)據(jù)中直接查找 break; }}第五項(xiàng)功能,通過(guò)調(diào)用函數(shù)exit()退出。main()Unitedfile()fmain()Unitedfile()findoutstudent()sortfile()derectfindoutstudent()findout()exit(0)autofindoutstudent()xuanze()kuaisu()4調(diào)試問(wèn)題在調(diào)用derectfindoutstudent()實(shí)現(xiàn)查找的功能時(shí),出現(xiàn)錯(cuò)誤信息:原因,文件名使用錯(cuò)誤:voidderectfindoutstudent()//輸入一個(gè)學(xué)生姓名,查找到此學(xué)生的信息并輸出結(jié)果{ c

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論