課程設(shè)計(jì)報(bào)告書 -基于文件系統(tǒng)的自定義數(shù)據(jù)庫(kù)_第1頁(yè)
課程設(shè)計(jì)報(bào)告書 -基于文件系統(tǒng)的自定義數(shù)據(jù)庫(kù)_第2頁(yè)
課程設(shè)計(jì)報(bào)告書 -基于文件系統(tǒng)的自定義數(shù)據(jù)庫(kù)_第3頁(yè)
課程設(shè)計(jì)報(bào)告書 -基于文件系統(tǒng)的自定義數(shù)據(jù)庫(kù)_第4頁(yè)
課程設(shè)計(jì)報(bào)告書 -基于文件系統(tǒng)的自定義數(shù)據(jù)庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGEPAGE1課程設(shè)計(jì)報(bào)告書題目:基于文件系統(tǒng)的自定義數(shù)據(jù)庫(kù)目錄(要求目錄頁(yè)碼與正文正確對(duì)應(yīng))HSHTOC\o"1-3"\u1系統(tǒng)分析 51.1背景 51.2主要問(wèn)題 51.3設(shè)計(jì)思路 52系統(tǒng)設(shè)計(jì) 52.1程序框架: 52.2主函數(shù)流程圖: 62.3道路建設(shè)程序框架 93系統(tǒng)編碼設(shè)計(jì) 103.1main函數(shù) 103.2CreateDataBase函數(shù) 163.3OpenDataBase函數(shù) 193.4SwitchToChar函數(shù) 203.5SwitchToInt函數(shù) 213.6AppendData函數(shù) 213.7Save_DataBase函數(shù) 233.8Save_as_DataBase函數(shù) 233.9BrowsDataBase函數(shù) 243.10Sort_a函數(shù) 253.11Sort_d函數(shù) 273.12LocatedFor函數(shù) 303.13DeleteFor函數(shù) 323.14ChangeFor函數(shù) 353.15Zap函數(shù) 373.16TestFunction函數(shù) 383.17DosHelp函數(shù) 383.18BuildRode.c 404系統(tǒng)調(diào)試運(yùn)行 454.1幫助命令界面: 454.2creat命令創(chuàng)建新的數(shù)據(jù)庫(kù)并打開(kāi) 454.3append命令,添加數(shù)據(jù)項(xiàng) 464.4brows命令查看數(shù)據(jù)庫(kù)全部數(shù)據(jù) 464.5locate查找定位命令,搜索數(shù)據(jù)庫(kù),查找關(guān)鍵字 474.6sort_asort_d根據(jù)關(guān)鍵字排序命令 474.7delete命令刪除帶有關(guān)鍵字的數(shù)據(jù) 484.8change_for命令修改數(shù)據(jù)庫(kù)中某項(xiàng)數(shù)據(jù) 484.9save保存命令 494.10save_as另存為命令 504.11use打開(kāi)新的數(shù)據(jù)庫(kù)命令 514.12普里姆算法計(jì)算建設(shè)的最短道路 524.13附加功能 525系統(tǒng)實(shí)用性檢驗(yàn) 545.1搭建商場(chǎng)商品管理信息系統(tǒng): 545.1.1添加數(shù)據(jù)庫(kù)基本項(xiàng)目: 545.1.2添加商品數(shù)據(jù) 545.1.3瀏覽數(shù)據(jù): 555.1.4根據(jù)價(jià)格排序:升序和降序 565.1.5修改價(jià)格: 565.1.6刪除項(xiàng)目: 565.1.7保存文件: 575.1.8另存為: 585.1.9關(guān)閉現(xiàn)有數(shù)據(jù)庫(kù),打開(kāi)新的數(shù)據(jù)庫(kù): 595.1.10用戶輸入出錯(cuò)時(shí)程序的自動(dòng)判斷: 606課程設(shè)計(jì)總結(jié) 61附錄1學(xué)到的東西 62附錄2計(jì)算器源程序 63參考文獻(xiàn) 70

基于文件系統(tǒng)的自定義數(shù)據(jù)庫(kù)1系統(tǒng)分析 1.1背景在選擇課程設(shè)計(jì)的題目時(shí),發(fā)現(xiàn)大多題目都可以用基于文件系統(tǒng)的操作實(shí)現(xiàn),而題目所需的操作也都類似,如插入數(shù)據(jù)、查找數(shù)據(jù)、排列數(shù)據(jù)、刪除數(shù)據(jù)、保存數(shù)據(jù)等。在之前模仿過(guò)數(shù)據(jù)庫(kù)的構(gòu)建后(參考《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》P34-57DBMS數(shù)據(jù)庫(kù)管理系統(tǒng)),我想自己搭建一個(gè)可自定義的數(shù)據(jù)庫(kù),可由用戶自己定義自己的數(shù)據(jù)庫(kù),并且管理不同的數(shù)據(jù)庫(kù),實(shí)現(xiàn)了FoxBASE數(shù)據(jù)庫(kù)的基本功能。 1.2主要問(wèn)題實(shí)現(xiàn)模擬命令符的識(shí)別、文件的準(zhǔn)確讀寫、排序、查找、插入、刪除 1.3設(shè)計(jì)思路基于以前自己用單片機(jī)搭建的遙控智能小車的經(jīng)驗(yàn),明白了在程序設(shè)計(jì)前搭建好系統(tǒng)框架的重要性,本課程設(shè)計(jì)在主函數(shù)中使用一個(gè)大while循環(huán)語(yǔ)句,和if判斷語(yǔ)句實(shí)現(xiàn)字符命令的控制,在此基礎(chǔ)上實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的基本操作、程序的調(diào)試。2系統(tǒng)設(shè)計(jì)2.1程序框架:操作函數(shù)函數(shù)實(shí)現(xiàn)區(qū)操作函數(shù)函數(shù)實(shí)現(xiàn)區(qū)基本基本變量區(qū)主函數(shù)測(cè)試主函數(shù)測(cè)試變量區(qū)命令符控制命令符控制區(qū)程序調(diào)試程序調(diào)試區(qū)外部文件附加功能區(qū)數(shù)據(jù)庫(kù)文件區(qū)外部文件附加功能區(qū)數(shù)據(jù)庫(kù)文件區(qū)2.2主函數(shù)流程圖:creat命令use命令append命令creat命令use命令append命令sort_a命令sort_d命令locate命令brows命令delete命令change_for命令save命令save_as命令NNNNNNNNNNYYYYYYwhile((ch=getchar())!=EOF)創(chuàng)建XXX.txt并寫入字段、保存保存XXX.txt刪除XX數(shù)據(jù)所在行的全部數(shù)據(jù),并用最后一行代替將數(shù)據(jù)庫(kù)的數(shù)據(jù)(如排列好的數(shù)據(jù))另外保存定位找到XX數(shù)據(jù)將XX數(shù)據(jù)重新修改定位XX數(shù)據(jù)所在位置并輸出該行所有數(shù)據(jù)對(duì)字段XX下的數(shù)據(jù)進(jìn)行升序排列并輸出瀏覽數(shù)據(jù)庫(kù)全部數(shù)據(jù)對(duì)字段XX下的數(shù)據(jù)進(jìn)行降序排列并輸出保存數(shù)據(jù)庫(kù),打開(kāi)新的XXX.txt進(jìn)行其他操作添加新的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)YYYYzap命令quit命令help命令cls命令test命令open_browser命令Open_calculator命令NNNNNN附加功能:打開(kāi)VB寫的瀏覽器,可添加各種功能清空屏幕退出數(shù)據(jù)庫(kù)管理系統(tǒng)打開(kāi)時(shí)基電路計(jì)算器,方便電路信號(hào)分析分析時(shí)的計(jì)算用于程序內(nèi)部的調(diào)試(此命令不在幫助文檔中,僅用于管理員調(diào)試)輸出命令幫助文檔,提示所有命令刪除文件交換數(shù)組的全部數(shù)據(jù),便于創(chuàng)建新的數(shù)據(jù)庫(kù)YYYYYYY附加功能可自定義加入想要打開(kāi)的文件、軟件等,可擴(kuò)展出很多功能。如搭建小區(qū)管理系統(tǒng),數(shù)據(jù)庫(kù)管理小區(qū)住戶的信息,拓展功能區(qū)可加入攝像頭、溫度管理系統(tǒng)(隨時(shí)查看安全隱患處的溫度,提前預(yù)警)

2.3道路建設(shè)程序框架使用鄰接矩陣表示的無(wú)向圖:宏定義宏定義圖的數(shù)據(jù)結(jié)構(gòu)圖的數(shù)據(jù)結(jié)構(gòu)初始化函數(shù)初始化函數(shù)定位函數(shù)定位函數(shù)普里姆算法普里姆算法道路生成函數(shù)道路生成函數(shù)道路數(shù)據(jù)文件道路數(shù)據(jù)文件

3系統(tǒng)編碼設(shè)計(jì)DataBase[]數(shù)組的結(jié)構(gòu):DataBase[0]DataBase[1]DataBase[2]DataBase[3]DataBase.data編號(hào)\t\0字段1\t\0字段2\t\0字段3\t\0DataBase.DataTypechar自定義自定義自定義File_Read_Write[][]數(shù)組的結(jié)構(gòu):File_Read_Write[0][0].dataFile_Read_Write[0][1].dataFile_Read_Write[0][2].dataFile_Read_Write[0][3].dataFile_Read_Write[1][0].dataFile_Read_Write[1][1].dataFile_Read_Write[1][2].dataFile_Read_Write[1][3].dataFile_Read_Write[2][0].dataFile_Read_Write[2][1].dataFile_Read_Write[2][2].dataFile_Read_Write[2][3].dataFile_Read_Write[3][0].dataFile_Read_Write[3][1].dataFile_Read_Write[3][2].dataFile_Read_Write[3][3].data其中*DataLength=5*DataCom=4每個(gè)空格代表大小為charch[20];的字符數(shù)組所占的內(nèi)存大小 3.1main函數(shù)實(shí)現(xiàn)字符命令的控制,以及程序調(diào)試,數(shù)據(jù)庫(kù)讀寫等操作命令intmain(){ charFirstInput[100];//記錄輸入的字符 charSecondInput[100];//記錄二次輸入如文件名等 charOpenFileName[100];//記錄要打開(kāi)的文件的名字 charSaveAsName[100];//記錄另存為的文件名字 charSortName[100];//記錄排序的字段名 charLocateName[100]; charDeleteName[100]; charCharName[100]; charChangeName[100]; charOldCharName[100]; charNewCharName[100]; char*cmd1="瀏覽器3.0.exe";//修改瀏覽器時(shí)要該動(dòng)名字 char*cmd2="計(jì)算器.exe";// inthandle; intTypeNum=1; intDataLength=0; intDataCom=0; inti; FILE*fp; DataLinkList*DataBase[10]; //測(cè)試用的變量區(qū)/////////////////////////////////////////////////////////////////// //charch[10]; //Switch(ch,1234); //printf("%s",ch); //system("pause"); //inttest;//用于測(cè)試Switch函數(shù) //////////////////////////////////////////////////////////////////////////////// system("color64");//改變顏色 DosHelp();//顯示幫助界面 //system("pause"); //printf("***********************************************************\n"); while(scanf("%s",FirstInput)!=EOF) { if(strcmp(FirstInput,"creat")==0) { scanf("%s",SecondInput);//SecondInput可寫XXX.txt或者XXX.doc handle=creat(SecondInput,S_IREAD|S_IWRITE);//創(chuàng)建數(shù)據(jù)庫(kù)文件 CreateDataBase(DataBase,&TypeNum); for(i=0;i<TypeNum;i++) { write(handle,DataBase[i]->data,strlen(DataBase[i]->data));//寫入數(shù)據(jù)庫(kù) } printf("\n"); OpenDataBase(SecondInput,&DataLength,&DataCom); } //elseif(strcmp(FirstInput,"另存為")==0) elseif(strcmp(FirstInput,"use")==0)//還要修改 { scanf("%s",OpenFileName);//SecondInput可寫XXX.txt或者XXX.doc if(DataLength!=0&&DataCom!=0) { Save_DataBase(SecondInput,&DataLength,&DataCom); printf("原數(shù)據(jù)庫(kù)已經(jīng)保存\n"); } Zap(&DataLength,&DataCom);//數(shù)組初始化 OpenDataBase(OpenFileName,&DataLength,&DataCom); strcpy(SecondInput,OpenFileName);//將新打開(kāi)的文件名復(fù)制給二次輸入數(shù)組方便交換操作等 } elseif(strcmp(FirstInput,"append")==0) { AppendData(&DataLength,&DataCom); } elseif(strcmp(FirstInput,"sort_a")==0) { scanf("%s",SortName);//SortName Sort_a(SortName,&DataLength,&DataCom); } elseif(strcmp(FirstInput,"sort_d")==0) { scanf("%s",SortName);//SortName Sort_d(SortName,&DataLength,&DataCom); } elseif(strcmp(FirstInput,"locate")==0) { scanf("%s",LocateName); scanf("%s",CharName); LocatedFor(LocateName,CharName,&DataLength,&DataCom); } elseif(strcmp(FirstInput,"brows")==0) { BrowsDataBase(&DataLength,&DataCom); } elseif(strcmp(FirstInput,"delete")==0) { scanf("%s",DeleteName); scanf("%s",CharName); DeleteFor(DeleteName,CharName,&DataLength,&DataCom); } elseif(strcmp(FirstInput,"change_for")==0) { scanf("%s",ChangeName); scanf("%s",OldCharName); scanf("%s",NewCharName); ChangeFor(ChangeName,OldCharName,NewCharName,&DataLength,&DataCom); } elseif(strcmp(FirstInput,"save")==0) { Save_DataBase(SecondInput,&DataLength,&DataCom); } elseif(strcmp(FirstInput,"save_as")==0) { scanf("%s",SaveAsName);//SecondInput可寫XXX.txt或者XXX.doc Save_as_DataBase(SaveAsName,&DataLength,&DataCom); } elseif(strcmp(FirstInput,"zap")==0) { Zap(&DataLength,&DataCom); printf("數(shù)組清空完畢!\n"); } elseif(strcmp(FirstInput,"quit")==0) { system("cls"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("謝謝使用!?。n");///////////////可加入退出聲明!加入退出動(dòng)畫 printf("by電信3班鄭浩東\n"); printf("\n"); Sleep(1000);//延時(shí)退出 break; } elseif(strcmp(FirstInput,"help")==0) { DosHelp(); } //elseif(strcmp(FirstInput,"use")==0) //{ // scanf("%s",SecondInput);//輸入文件名稱 // if((fp=fopen(SecondInput,"r"))==NULL)//判斷數(shù)據(jù)庫(kù)是否存在,存在則打開(kāi) // { // printf("數(shù)據(jù)庫(kù)不存在?。?!\n"); // printf("."); // continue; // } // else // { // printf("數(shù)據(jù)庫(kù)成功打開(kāi)?。?!\n"); // //dosomething! // } //} elseif(strcmp(FirstInput,"cls")==0) { system("cls"); } elseif(strcmp(FirstInput,"test")==0) { system("cls"); printf("現(xiàn)在進(jìn)入程序測(cè)試模塊!??!\n"); BuildRode(); //SwitchToInt("1235\t\0",&test); //printf("%d\n",test); //CreateDataBase(DataBase,&TypeNum); } elseif(strcmp(FirstInput,"open_browser")==0) { system(cmd1); printf("瀏覽器已經(jīng)打開(kāi)?。。n"); } elseif(strcmp(FirstInput,"open_calculator")==0) { system(cmd2); printf("計(jì)算器已經(jīng)打開(kāi)?。?!\n"); } else { printf("語(yǔ)法錯(cuò)誤!請(qǐng)重新輸入命令(如需幫助請(qǐng)輸入help命令)\n"); } /* elseif(strcmp(FirstInput,"XXXXX")==0) { dosomething; }*/ } //system("pause"); return0;} 3.2CreateDataBase函數(shù)建立新的數(shù)據(jù)庫(kù),通過(guò)用戶自定義數(shù)據(jù)庫(kù)的數(shù)據(jù)類型,名稱等,搭建適用用戶的數(shù)據(jù)庫(kù)。voidCreateDataBase(DataLinkList*DataBase[],int*TypeNum){ chartou[]="編號(hào)\t\0";//建立數(shù)據(jù)庫(kù)時(shí)自動(dòng)添加編號(hào)字段 charch[150],type[150]; intchlen; inti; DataBase[0]=(DataLinkList*)malloc(sizeof(DataLinkList)); strcpy(DataBase[0]->data,tou);//建立編號(hào)字段 strcpy(DataBase[0]->DataType,"char");//類型 printf(".請(qǐng)輸入字段%d的名稱以'$'結(jié)束輸入\n",*TypeNum); printf("."); scanf("%s",ch); printf(".請(qǐng)輸入字段%d的類型(string,int,double)\n",*TypeNum); scanf("%s",type); while(1) { if(strcmp(type,"string")==0||strcmp(type,"int")==0||strcmp(type,"double")==0) { break; } else { printf(".您輸入的類型非法!請(qǐng)重新輸入\n"); printf(".請(qǐng)輸入字段%d的類型(string,int,double)\n",*TypeNum); scanf("%s",type); } } while(1) { if(strcmp(ch,"$")==0) { break; } chlen=strlen(ch); ch[chlen]='\t';//添加制表符 ch[chlen+1]='\0';//結(jié)尾添加結(jié)束符防止出錯(cuò) DataBase[*TypeNum]=(DataLinkList*)malloc(sizeof(DataLinkList)); strcpy(DataBase[*TypeNum]->data,ch);//講數(shù)據(jù)類型名稱復(fù)制進(jìn)去 strcpy(DataBase[*TypeNum]->DataType,type);//復(fù)制類型標(biāo)志 *TypeNum=*TypeNum+1; printf(".請(qǐng)輸入字段%d的名稱以'$'結(jié)束輸入\n",*TypeNum); printf("."); scanf("%s",ch); if(strcmp(ch,"$")==0) { break; } printf(".請(qǐng)輸入字段%d的類型(string,int,double)\n",*TypeNum); scanf("%s",type); while(1) { if(strcmp(type,"string")==0||strcmp(type,"int")==0||strcmp(type,"double")==0) { break; } else { printf(".您輸入的類型非法!請(qǐng)重新輸入\n"); printf(".請(qǐng)輸入字段%d的類型(string,int,double)\n",*TypeNum); scanf("%s",type); } } } for(i=0;i<*TypeNum;i++)//輸出數(shù)據(jù)庫(kù)的字段和類型 { printf("%s(%s)",DataBase[i]->data,DataBase[i]->DataType);//可能字體有問(wèn)題 } printf("\n");} 3.3OpenDataBase函數(shù)打開(kāi)建立好的數(shù)據(jù)庫(kù),并把數(shù)據(jù)庫(kù)的信息全部讀取在特定數(shù)組中,方便操作。voidOpenDataBase(charFileName[],int*DataLength,int*DataCom)//打開(kāi)數(shù)據(jù)庫(kù),并把數(shù)據(jù)讀取出來(lái),放在數(shù)組中,開(kāi)始長(zhǎng)寬都為0{ FILE*fp; charFileData[110]; charch; intlie=0; inti; memset(FileData,'\0',sizeof(FileData)); fp=fopen(FileName,"r+");//打開(kāi)文件 ch=fgetc(fp); while(ch!=EOF) { if(ch=='\t') { strcpy(File_Reda_Write[*DataLength][*DataCom].data,FileData); i=strlen(File_Reda_Write[*DataLength][*DataCom].data); File_Reda_Write[*DataLength][*DataCom].data[i]='\t';//向文件交流數(shù)組寫入制表符,方便寫入和讀取等 File_Reda_Write[*DataLength][*DataCom].data[i+1]='\0'; memset(FileData,'\0',sizeof(FileData));//復(fù)制完成后數(shù)組初始化 *DataCom=*DataCom+1; lie=0; //printf("fuzhichenggong!!!\n");//fortest } elseif(ch=='\n') { *DataLength=*DataLength+1; *DataCom=0; } else { FileData[lie]=ch; lie++; } ch=fgetc(fp); } *DataLength=*DataLength+1; printf("數(shù)據(jù)庫(kù)成功打開(kāi)?。?!\n");} 3.4SwitchToChar函數(shù)voidSwitchToChar(charch[],intnum)//將數(shù)字轉(zhuǎn)換為字符{ inti,j; charfanch[10]; memset(fanch,'\0',sizeof(fanch));//初始化數(shù)組 for(i=0;num!=0;i++) { j=num%10; fanch[i]=j+'0'; num=num/10; } for(j=0;j<i;j++) { ch[j]=fanch[i-j-1]; } ch[i]='\0';} 3.5SwitchToInt函數(shù)voidSwitchToInt(charch[],int*num)//可以去除最后含有制表符的字符串{ inti; intchlen; charcharcopy[MAXCHARNUM]; chlen=strlen(ch); for(i=0;i<chlen;i++) { charcopy[i]=ch[i]; } if(charcopy[chlen-1]=='\t') { charcopy[chlen-1]='\0'; chlen=chlen-1; } *num=0; for(i=0;i<chlen;i++) { *num=*num*10+(charcopy[i]-'0'); }} 3.6AppendData函數(shù)voidAppendData(int*DataLength,int*DataCom)//追加數(shù)據(jù)函數(shù){ inti,j,k=1; intsum=0; charbianhao[10]; memset(bianhao,'\0',sizeof(bianhao));//初始化數(shù)組 if(*DataLength>1)//自動(dòng)生成編號(hào),并寫入數(shù)組。 { j=strlen(File_Reda_Write[*DataLength-1][0].data); File_Reda_Write[*DataLength-1][0].data[j-1]='\0';//上一行的制表符用結(jié)束符代替,避免計(jì)算出錯(cuò) for(i=j-2;i>=0;i--) { sum=sum+(File_Reda_Write[*DataLength-1][0].data[i]-'0')*k; k*=10; } sum++; SwitchToChar(bianhao,sum); File_Reda_Write[*DataLength-1][0].data[j-1]='\t';//講改變的上一行的編號(hào)字符再次添加回來(lái) File_Reda_Write[*DataLength-1][0].data[j]='\0'; } else { SwitchToChar(bianhao,1); } j=strlen(bianhao); bianhao[j]='\t';//添加制表符 bianhao[j+1]='\0'; strcpy(File_Reda_Write[*DataLength][0].data,bianhao); j=0; for(i=1;i<*DataCom;i++) { printf("請(qǐng)輸入:%s",File_Reda_Write[0][i].data); scanf("%s",File_Reda_Write[*DataLength][i].data); j=strlen(File_Reda_Write[*DataLength][i].data); File_Reda_Write[*DataLength][i].data[j]='\t';//添加制表符 File_Reda_Write[*DataLength][i].data[j+1]='\0'; } *DataLength=*DataLength+1; printf("數(shù)據(jù)成功添加到數(shù)據(jù)庫(kù)中?。?!\n");} 3.7Save_DataBase函數(shù)voidSave_DataBase(charFileName[],int*DataLength,int*DataCom)//關(guān)閉數(shù)據(jù)庫(kù),并把數(shù)組中的數(shù)據(jù)寫入文件中。{ inti,j; FILE*fp; //intTypeLength[MAXDATATYPE]; fp=fopen(FileName,"w+"); for(i=0;i<*DataLength-1;i++) { for(j=0;j<*DataCom;j++) { fprintf(fp,"%s",File_Reda_Write[i][j].data); // fputc('\t',fp); } fputc('\n',fp);//添加回車符 } for(i=0;i<*DataCom;i++)//最后一行單獨(dú)添加進(jìn)去 { fprintf(fp,"%s",File_Reda_Write[*DataLength-1][i].data); } fclose(fp); //*DataLength=0; //*DataCom=0; printf("保存成功?。?!\n");} 3.8Save_as_DataBase函數(shù)voidSave_as_DataBase(charFileName[],int*DataLength,int*DataCom){ inti,j; FILE*fp; //intTypeLength[MAXDATATYPE]; fp=fopen(FileName,"w+"); for(i=0;i<*DataLength-1;i++) { for(j=0;j<*DataCom;j++) { fprintf(fp,"%s",File_Reda_Write[i][j].data); // fputc('\t',fp); } fputc('\n',fp);//添加回車符 } for(i=0;i<*DataCom;i++)//最后一行單獨(dú)添加進(jìn)去 { fprintf(fp,"%s",File_Reda_Write[*DataLength-1][i].data); } fclose(fp); //*DataLength=0; //*DataCom=0; printf("成功另存為%s\n",FileName);} 3.9BrowsDataBase函數(shù) 瀏覽數(shù)據(jù)庫(kù)的全部信息voidBrowsDataBase(int*DataLength,int*DataCom){ inti,j; for(i=0;i<*DataLength;i++) { for(j=0;j<*DataCom;j++) { printf("%s",File_Reda_Write[i][j].data); } printf("\n"); }} 3.10Sort_a函數(shù)voidSort_a(charSortName[],int*DataLength,int*DataCom){ inti; intj; //intk; intforExchangeSort; intforExchangeTag; intsort[MAXDATANUM];//儲(chǔ)存要排序的列的所有數(shù)據(jù) inttag[MAXDATANUM];//記錄排序好后輸出的下標(biāo)順序 for(i=0;i<MAXDATANUM;i++) { tag[i]=i; } j=strlen(SortName);//為字段添加標(biāo)準(zhǔn)格式符,便于搜索 SortName[j]='\t'; SortName[j+1]='\0'; j=0; for(i=0;i<*DataCom;i++) { if(strcmp(SortName,File_Reda_Write[0][i].data)==0) { j=i;//記錄字段的位置 //printf("testsuccess!!!\n"); } } if(strcmp(SortName,File_Reda_Write[0][j].data)!=0) { printf("沒(méi)有找到相應(yīng)字段!請(qǐng)檢查是否輸入錯(cuò)誤,以下是數(shù)據(jù)庫(kù)的字段:\n"); for(i=0;i<*DataCom;i++) { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); } for(i=0;i<*DataLength-1;i++) { SwitchToInt(File_Reda_Write[i+1][j].data,&sort[i]); } for(i=*DataLength-1;i>=0;i--)//冒泡排序從小到大排列 { for(j=0;j<i;j++) { if(j!=*DataLength-2&&sort[j]>sort[j+1]) { forExchangeSort=sort[j]; sort[j]=sort[j+1]; sort[j+1]=forExchangeSort; forExchangeTag=tag[j]; tag[j]=tag[j+1]; tag[j+1]=forExchangeTag; } } /* for(j=0;j<*DataLength-1;j++) { printf("%d",tag[j]+1); } printf(""); for(j=0;j<*DataLength-1;j++) { printf("%d",sort[j]); } printf("\n");*/ } for(j=0;j<*DataCom;j++) { printf("%s",File_Reda_Write[0][j].data); } printf("\n"); for(i=0;i<*DataLength;i++) { for(j=0;j<*DataCom;j++) { printf("%s",File_Reda_Write[tag[i]+1][j].data); } printf("\n"); } /*for(i=0;i<*DataLength-1;i++) { printf("%d",sort[i]); }*/}3.11Sort_d函數(shù)voidSort_d(charSortName[],int*DataLength,int*DataCom){ inti; intj; //intk; intforExchangeSort; intforExchangeTag; intsort[MAXDATANUM];//儲(chǔ)存要排序的列的所有數(shù)據(jù) inttag[MAXDATANUM];//記錄排序好后輸出的下標(biāo)順序 for(i=0;i<MAXDATANUM;i++) { tag[i]=i; } j=strlen(SortName);//為字段添加標(biāo)準(zhǔn)格式符,便于搜索 SortName[j]='\t'; SortName[j+1]='\0'; j=0; for(i=0;i<*DataCom;i++) { if(strcmp(SortName,File_Reda_Write[0][i].data)==0) { j=i;//記錄字段的位置 //printf("testsuccess!!!\n"); } } if(strcmp(SortName,File_Reda_Write[0][j].data)!=0) { printf("沒(méi)有找到相應(yīng)字段!請(qǐng)檢查是否輸入錯(cuò)誤,以下是數(shù)據(jù)庫(kù)的字段:\n"); for(i=0;i<*DataCom;i++) { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); } for(i=0;i<*DataLength-1;i++) { SwitchToInt(File_Reda_Write[i+1][j].data,&sort[i]); } for(i=*DataLength-1;i>=0;i--)//冒泡排序從大到小排列 { for(j=0;j<i;j++) { if(j!=*DataLength-2&&sort[j]<sort[j+1]) { forExchangeSort=sort[j]; sort[j]=sort[j+1]; sort[j+1]=forExchangeSort; forExchangeTag=tag[j]; tag[j]=tag[j+1]; tag[j+1]=forExchangeTag; } } /* for(j=0;j<*DataLength-1;j++) { printf("%d",tag[j]+1); } printf(""); for(j=0;j<*DataLength-1;j++) { printf("%d",sort[j]); } printf("\n");*/ } for(j=0;j<*DataCom;j++) { printf("%s",File_Reda_Write[0][j].data); } printf("\n"); for(i=0;i<*DataLength;i++) { for(j=0;j<*DataCom;j++) { printf("%s",File_Reda_Write[tag[i]+1][j].data); } printf("\n"); }}3.12LocatedFor函數(shù)voidLocatedFor(charLocateName[],charCharName[],int*DataLength,int*DataCom)//locateName記錄要搜索的字段名CharName記錄具體字段名稱{ inti=0; intj=0; intk=0; intforExchangeLocateName; intforExchangeTag; intsort[MAXDATANUM];//儲(chǔ)存要排序的列的所有數(shù)據(jù) inttag[MAXDATANUM];//記錄排序好后輸出的下標(biāo)順序 for(i=0;i<MAXDATANUM;i++) { tag[i]=i; } ////////////////////////////////////為字段添加標(biāo)準(zhǔn)格式符,便于搜索////////// j=strlen(LocateName); LocateName[j]='\t'; LocateName[j+1]='\0'; j=0; j=strlen(CharName); CharName[j]='\t'; CharName[j+1]='\0'; j=0; ////////////////////////////////////////////////////////////////////////// for(i=0;i<*DataCom;i++) { if(strcmp(LocateName,File_Reda_Write[0][i].data)==0) { j=i;//記錄字段的位置 //printf("testsuccess!!!\n"); } } if(strcmp(LocateName,File_Reda_Write[0][j].data)!=0) { printf("沒(méi)有找到相應(yīng)字段!請(qǐng)檢查是否輸入錯(cuò)誤,以下是數(shù)據(jù)庫(kù)的字段:\n"); for(i=0;i<*DataCom;i++) { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); } for(i=1;i<*DataLength;i++)//測(cè)試時(shí)搜索最后一條信息查看是否正確 { if(strcmp(CharName,File_Reda_Write[i][j].data)==0) { k=i;//記錄所在行的位置 } } if(strcmp(CharName,File_Reda_Write[k][j].data)!=0) { printf("沒(méi)有找到相應(yīng)字段!請(qǐng)檢查是否輸入錯(cuò)誤,以下是數(shù)據(jù)庫(kù)的字段:\n"); for(i=0;i<*DataCom;i++) { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); } else { for(i=0;i<*DataCom;i++)//輸出頭行 { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); for(i=0;i<*DataCom;i++)//輸出搜索到的對(duì)應(yīng)行 { printf("%s",File_Reda_Write[k][i].data); } printf("\n"); }}3.13DeleteFor函數(shù)voidDeleteFor(charDeleteName[],charCharName[],int*DataLength,int*DataCom)//刪除該行后由最后一行覆蓋{ inti=0; intj=0; intk=0; intcharlength=0; intforExchangeDeleteName; intforExchangeTag;//交換標(biāo)簽 intsort[MAXDATANUM];//儲(chǔ)存要排序的列的所有數(shù)據(jù) inttag[MAXDATANUM];//記錄排序好后輸出的下標(biāo)順序 //charbianhao[MAXCHARNUM]; for(i=0;i<MAXDATANUM;i++) { tag[i]=i; } ////////////////////////////////////為字段添加標(biāo)準(zhǔn)格式符,便于搜索////////// j=strlen(DeleteName); DeleteName[j]='\t'; DeleteName[j+1]='\0'; j=0; j=strlen(CharName); CharName[j]='\t'; CharName[j+1]='\0'; j=0; ////////////////////////////////////////////////////////////////////////// for(i=0;i<*DataCom;i++) { if(strcmp(DeleteName,File_Reda_Write[0][i].data)==0) { j=i;//記錄字段的位置 //printf("testsuccess!!!\n"); } } if(strcmp(DeleteName,File_Reda_Write[0][j].data)!=0) { printf("沒(méi)有找到相應(yīng)字段!請(qǐng)檢查是否輸入錯(cuò)誤,以下是數(shù)據(jù)庫(kù)的字段:\n"); for(i=0;i<*DataCom;i++) { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); } for(i=1;i<*DataLength;i++)//測(cè)試時(shí)搜索最后一條信息查看是否正確 { if(strcmp(CharName,File_Reda_Write[i][j].data)==0) { k=i;//記錄所在行的位置 } } if(strcmp(CharName,File_Reda_Write[k][j].data)!=0) { printf("沒(méi)有找到相應(yīng)字段!請(qǐng)檢查是否輸入錯(cuò)誤,以下是數(shù)據(jù)庫(kù)的字段:\n"); for(i=0;i<*DataCom;i++) { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); } else { printf("以下數(shù)據(jù)將被刪除:\n"); for(i=0;i<*DataCom;i++)//輸出頭行 { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); for(i=0;i<*DataCom;i++)//輸出搜索到的對(duì)應(yīng)行 { printf("%s",File_Reda_Write[k][i].data); } printf("\n"); }//k為所在的行 //for(i=0;i<strlen(File_Reda_Write[k][0].data);i++)//保存該行編號(hào)刪除其他的字段測(cè)試時(shí)查看保存后的結(jié)果 //{ // bianhao[i]=File_Reda_Write[k][0].data[i]; //} //i=strlen(bianhao); //bianhao[i]='\0';//按標(biāo)準(zhǔn)格式修改字符便于操作 for(i=1;i<*DataCom;i++) { charlength=strlen(File_Reda_Write[*DataLength-1][i].data); for(j=0;j<charlength;j++)// { File_Reda_Write[k][i].data[j]=File_Reda_Write[*DataLength-1][i].data[j]; } File_Reda_Write[k][i].data[charlength]='\0';//格式化 } //最后刪除最后一行 for(i=0;i<*DataCom;i++) { memset(File_Reda_Write[*DataLength-1][i].data,'\0',sizeof(File_Reda_Write[*DataLength-1][i].data)); } *DataLength=*DataLength-1;//長(zhǎng)度減一}3.14ChangeFor函數(shù)voidChangeFor(charChangeName[],charOldCharName[],charNewCharName[],int*DataLength,int*DataCom){ inti=0; intj=0; intk=0; intcharlength=0; intforExchangeDeleteName; intforExchangeTag;//交換標(biāo)簽 intsort[MAXDATANUM];//儲(chǔ)存要排序的列的所有數(shù)據(jù) inttag[MAXDATANUM];//記錄排序好后輸出的下標(biāo)順序 //charbianhao[MAXCHARNUM]; for(i=0;i<MAXDATANUM;i++) { tag[i]=i; } ////////////////////////////////////為字段添加標(biāo)準(zhǔn)格式符,便于搜索////////// j=strlen(ChangeName); ChangeName[j]='\t'; ChangeName[j+1]='\0'; j=0; j=strlen(OldCharName); OldCharName[j]='\t'; OldCharName[j+1]='\0'; j=0; ////////////////////////////////////////////////////////////////////////// for(i=0;i<*DataCom;i++) { if(strcmp(ChangeName,File_Reda_Write[0][i].data)==0) { j=i;//記錄字段的位置 printf("testsuccess!!!\n"); } } if(strcmp(ChangeName,File_Reda_Write[0][j].data)!=0) { printf("沒(méi)有找到相應(yīng)字段!請(qǐng)檢查是否輸入錯(cuò)誤,以下是數(shù)據(jù)庫(kù)的字段:\n"); for(i=0;i<*DataCom;i++) { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); } for(i=0;i<*DataLength;i++)//測(cè)試時(shí)搜索最后一條信息查看是否正確 { if(strcmp(OldCharName,File_Reda_Write[i][j].data)==0) { k=i;//記錄所在行的位置 } } if(strcmp(OldCharName,File_Reda_Write[k][j].data)!=0) { printf("沒(méi)有找到相應(yīng)字段!請(qǐng)檢查是否輸入錯(cuò)誤,以下是數(shù)據(jù)庫(kù)的字段:\n"); for(i=0;i<*DataCom;i++) { printf("%s",File_Reda_Write[0][i].data); } printf("\n"); } //k為行數(shù)j為列數(shù) i=strlen(NewCharName); NewCharName[i]='\t'; NewCharName[i+1]='\0'; for(i=0;i<strlen(NewCharName);i++) { File_Reda_Write[k][j].data[i]=NewCharName[i]; } File_Reda_Write[k][j].data[strlen(NewCharName)]='\0';}3.15Zap函數(shù)voidZap(int*DataLength,int*DataCom){ inti,j; for(i=0;i<*DataLength;i++) { for(j=0;j<*DataCom;j++) { memset(File_Reda_Write[i][j].data,'\0',sizeof(File_Reda_Write[i][j].data));//文件交換數(shù)組初始化 } } *DataLength=0; *DataCom=0;}3.16TestFunction函數(shù)voidTestFunction(){ charFileName[20]; charchtest[]={'1','2','3','4','\n','5','\t','6','\0'}; FILE*fp; printf("輸入文件名:"); scanf("%s",FileName); printf("\n"); fp=fopen(FileName,"w+"); //scanf("%s",chtest); fprintf(fp,"%s",chtest); fclose(fp);}3.17DosHelp函數(shù)voidDosHelp()//幫助界面{printf("\n");printf("數(shù)據(jù)庫(kù)命令(可創(chuàng)建自定義數(shù)據(jù)庫(kù)):\n");printf("命令\t\t");printf("例子\t\t\t\t");printf("功能\t\t");printf("\n"); printf("creat\t\t");printf("creat工資.txt\t\t\t");printf("創(chuàng)建數(shù)據(jù)庫(kù)\t");printf("\n"); printf("append\t\t");printf("append回車\t\t\t");printf("追加字段\t");printf("\n"); printf("brows\t\t");printf("brows回車\t\t\t");printf("瀏覽數(shù)據(jù)庫(kù)\t");printf("\n"); printf("locate_for\t");printf("locate_for工資1200\t\t");printf("按條件定位\t");printf("\n"); printf("delete_for\t");printf("delete_for工資1200\t\t");printf("按條件刪除\t");printf("\n"); printf("change_for\t");printf("change_for工資12004000\t");printf("按條件修改命令\t");printf("\n"); printf("sort_a\t\t");printf("sort_a工資\t\t\t");printf("升序排列\(zhòng)t\t");printf("\n"); printf("sort_d\t\t");printf("sort_d工資\t\t\t");printf("降序排列\(zhòng)t\t");printf("\n"); printf("save\t\t");printf("save回車\t\t\t");printf("保存數(shù)據(jù)庫(kù)\t\t");printf("\n"); printf("save_as\t\t");printf("save_as工資2.txt\t\t");printf("另存為數(shù)據(jù)庫(kù)\t\t");printf("\n"); printf("use\t\t");printf("use工資.txt\t\t\t");printf("打開(kāi)存在的數(shù)據(jù)庫(kù)\t");printf("\n"); printf("cls\t\t");printf("cls回車\t\t\t");printf("清空屏幕\t\t");printf("\n"); printf("zap\t\t");printf("zap回車\t\t\t");printf("全部刪除\t");printf("\n"); printf("help\t\t");printf("help回車\t\t\t");printf("打開(kāi)幫助文檔\t");printf("\n"); printf("quit\t\t");printf("quit回車\t\t\t");printf("退出系統(tǒng)\t");printf("\n"); printf("\n"); printf("附加功能命令:\n"); printf("open_browser\t");printf("open_browser回車\t\t");printf("打開(kāi)瀏覽器\t");printf("\n"); printf("open_calculator\t");printf("open_calculator回車\t\t");printf("打開(kāi)時(shí)基電路計(jì)算器\t");printf("\n"); printf("read_temp\t");printf("read_temp回車\t\t\t");printf("打開(kāi)溫度傳感器測(cè)量環(huán)境溫度\t");printf("\n");}3.18BuildRode.c普里姆算法實(shí)現(xiàn)最短道路的規(guī)劃,合理規(guī)劃路線,使得總的費(fèi)用最少,且可以沿路線到達(dá)所有地點(diǎn),使用無(wú)向圖,鄰接矩陣表示#defineMAXVEX30//最大頂點(diǎn)數(shù)#defineMAXNAME20//頂點(diǎn)信息最大長(zhǎng)度#defineMAX32767//若頂點(diǎn)間無(wú)路徑,則最大值表示不通typedefcharVexType[MAXNAME];//頂點(diǎn)信息typedeffloatAdjType;//邊權(quán)值typedefstruct//邊的結(jié)構(gòu){ intstart_vex,stop_vex;//邊的起點(diǎn)和終點(diǎn) AdjTypeweight;//邊的權(quán)值}Edge;typedefstruct{ intvexNum;//頂點(diǎn)數(shù) intedgeNum;//邊數(shù) Edgemst[MAXVEX-1];//用于保存最小生成樹(shù)的邊數(shù)組,用到n-1條邊 VexTypevexs[MAXVEX];//頂點(diǎn)信息 AdjTypearcs[MAXVEX][MAXVEX];//鄰接矩陣}GraphMatrix;intLocateVex(GraphMatrix*g,VexTypeu)//查找頂點(diǎn)在圖中的序號(hào),并返回{ inti; for(i=0;i<g->vexNum;i++) { if(strcmp(u,g->vexs[i])==0) { returni; } } returnERROR;}voidGraphInit(GraphMatrix*g)//從地圖文件minumtree.txt中讀入圖的頂點(diǎn)數(shù)和邊數(shù),讀入頂點(diǎn)信息,讀入頂點(diǎn)的距離{//fscanf函數(shù)讀入空格或者回車會(huì)停止。 inti,j,t; floatw;//邊的權(quán)值 VexTypeva,vb;//用于定位頂點(diǎn)在圖中的位置(矩陣的下標(biāo)) FILE*fp; fp=fopen("RodeData.txt","r"); fscanf(fp,"%d",&g->vexNum);//讀入頂點(diǎn)數(shù)和邊數(shù) fscanf(fp,"%d",&g->edgeNum); for(i=0;i<g->vexNum;i++)//邊的初始化 { for(j=0;j<=i;j++) { g->arcs[i][j]=g->arcs[j][i]=MAX; } } for(i=0;i<g->vexNum;i++)//讀入邊的名稱 { fscanf(fp,"%s",g->vexs[i]); } for(t=0;t<g->edgeNum;t++)//邊名邊名權(quán)值 { fscanf(fp,"%s%s%f",va,vb,&w); i=LocateVex(g,va); j=LocateVex(g,vb); g->arcs[i][j]=g->arcs[j][i]=w; } fclose(fp);}voidPrim(GraphMatrix*pgraph)//普里姆算法,求最小生成樹(shù),并講生成樹(shù)的各邊的信息儲(chǔ)存在數(shù)組mst中{ inti,j,min; intvx,vy;//起始點(diǎn),終止點(diǎn) floatweight,minweight; Edgeedge;//用于交換邊 for(i=0;i<pgraph->vexNum-1;i++)//初始化數(shù)組的邊 { pgraph->mst[i].start_vex=0; pgraph->mst[i].stop_vex=i+1; pgraph->mst[i].weight=pgraph->arcs[0][i+1];//各邊為頂點(diǎn)0到其他n-1條邊的信息 } for(i=0;i<pgraph->vexNum-1;i++) { minweight=MAX; min=i; for(j=i;j<pgraph->vexNum-1;j++)//找出最短的邊,加入最小樹(shù)中 { if(pgraph->mst[j].weight<minweight) { minweight=pgraph->mst[j].weight; min=j; } } edge=pgraph->mst[min];//最短的邊 pgraph->mst[min]=pgraph->mst[i]; pgraph->mst[i]=edge;//交換邊,使得邊從最短到最長(zhǎng)排列 vx=pgraph->mst[i].stop_vex; for(j=i+1;j<pgraph->vexNum-1;j++) { vy=pgraph->mst[j].stop_vex; weight=pgraph->arcs[vx][vy];//weight為i,j之間的邊的權(quán)值 if(weight<pgraph->mst[j].weight)//如果第j條邊的權(quán)值比i,j之間的邊的權(quán)值大的話,交換邊,使得最小樹(shù)的長(zhǎng)度最短。 { pgraph->mst[j].weight=weight; pgraph->mst[j].start_vex=vx; } } }}voidBuildRode(){ inti; floattotallen=0; GraphMatrixgraph; GraphInit(&graph);//初始化圖 Prim(&graph);//普里姆算法求最小生成樹(shù)以下地跌路線 printf("\n應(yīng)該建設(shè)以下路線?。?!\n\n"); for(i=0;i<graph.vexNum-1;i++) { printf("%s<->%s段,%.2f米)\n",graph.vexs[graph.mst[i].start_vex],graph.vexs[graph.mst[i].stop_vex],graph.mst[i].weight); totallen+=graph.mst[i].weight; } printf("\n總路線長(zhǎng)度%f米\n",totallen);}

4系統(tǒng)調(diào)試運(yùn)行4.1幫助命令界面:4.2creat命令創(chuàng)建新的數(shù)據(jù)庫(kù)并打開(kāi)4.3append命令,添加數(shù)據(jù)項(xiàng)4.4brows命令查看數(shù)據(jù)庫(kù)全部數(shù)據(jù)4.5locate查找定位命令,搜索數(shù)據(jù)庫(kù),查找關(guān)鍵字4.6sort_asort_d根據(jù)關(guān)鍵字排序命令4.7delete命令刪除帶有關(guān)鍵字的數(shù)據(jù)4.8change_for命令修改數(shù)據(jù)庫(kù)中某項(xiàng)數(shù)據(jù)4.9save保存命令4.10save_as另存為命令4.11use打開(kāi)新的數(shù)據(jù)庫(kù)命令4.12普里姆算法計(jì)算建設(shè)的最短道路4.13附加功能(自己用VB寫的瀏覽器)5系統(tǒng)實(shí)用性檢驗(yàn)5.1搭建商場(chǎng)商品管理信息系統(tǒng):5.1.1添加數(shù)據(jù)庫(kù)基本項(xiàng)目: 5.1.2添加商品數(shù)據(jù)5.1.3瀏覽數(shù)據(jù):5.1.4根據(jù)價(jià)格排序:升序和降序5.1.5修改價(jià)格:5.1.6刪除項(xiàng)目:5.1.7保存文件:5.1.8另存為:5.1.9關(guān)閉現(xiàn)有數(shù)據(jù)庫(kù),打開(kāi)新的數(shù)據(jù)庫(kù):測(cè)試成功!5.1.10用戶輸入出錯(cuò)時(shí)程序的自動(dòng)判斷:

6課程設(shè)計(jì)總結(jié)在模擬數(shù)據(jù)庫(kù)仿真系統(tǒng)(基于文件系統(tǒng)的自定義數(shù)據(jù)庫(kù))的設(shè)計(jì)過(guò)程中,我學(xué)到不少東西,無(wú)論是對(duì)數(shù)據(jù)庫(kù)的認(rèn)識(shí),還是編寫代碼的能力,都有了較好的提高。在此過(guò)程中,犯過(guò)許多錯(cuò)誤,使得程序崩潰或操作出錯(cuò),也收獲了不少經(jīng)驗(yàn),在此總結(jié)為以下幾點(diǎn):1.在編寫程序之前不能盲目編寫函數(shù),因先總體構(gòu)思系統(tǒng)框架,搭建好系統(tǒng)的基本功能,包括調(diào)試模塊,事先留下代碼調(diào)試區(qū)很重要,大多數(shù)程序不可能一次編寫成功,留下高效、邏輯清晰的代碼調(diào)試區(qū),調(diào)試手段非常重要,這使得程序的編寫高效有序,事半功倍。2.由于之前沒(méi)有寫過(guò)較長(zhǎng)的關(guān)于文件系統(tǒng)的程序,在開(kāi)始犯了一些錯(cuò)誤,使得對(duì)文件的讀寫出現(xiàn)差錯(cuò),數(shù)據(jù)讀取出錯(cuò)。在做文件系統(tǒng)之前,應(yīng)該先規(guī)定好文件的格式,包括每個(gè)字符串最大長(zhǎng)度,是否添加空格、制表符、結(jié)束符等,規(guī)定好統(tǒng)一格式才能準(zhǔn)確讀取文件,準(zhǔn)確寫入。 3.程序的效率,在編寫結(jié)構(gòu)體時(shí)應(yīng)該合理安排變量的順序、大小,根據(jù)內(nèi)存對(duì)齊知識(shí),可減少內(nèi)存的分配,提高程序的效率,可修改系統(tǒng)的對(duì)齊參數(shù),但是當(dāng)數(shù)據(jù)量較大時(shí),就要考慮時(shí)間、空間的分配問(wèn)題了,要衡量犧牲效率節(jié)省空間和犧牲空間提高效率的優(yōu)劣。4.在編寫程序過(guò)程中,查找各種資料,學(xué)會(huì)了不少函數(shù)的使用,如文件系統(tǒng)的fprintf(),fput(),fscanf()等,初始化數(shù)組的memset()函數(shù),系統(tǒng)函數(shù)system();合理使用庫(kù)函數(shù)能較好提高文件讀取速度。第一次寫比較長(zhǎng)的關(guān)于文件系統(tǒng)的程序,先后用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論