欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    课程设计报告书 --基于文件系统的自定义数据库.docx

    • 资源ID:893417       资源大小:469.15KB        全文页数:74页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计报告书 --基于文件系统的自定义数据库.docx

    课程设计报告书题目:基于文件系统的自定义数据库1 3L1312JziI可313"VIAli32.Il-32. 1程序框架:33. 2主函数流程图:44. 3道路建设程序框架63.系统编码73. 1main函数73. 2CreateDataBase函数133. 3OPenDataBaSe函数163. 4SwitchToChar函数173. 5SwitchToInt函数173. 6AppendData函数183. 7Save_DataBase函数193. 8Save_as_DataBase函数203. 9BrowsDataBase函数213. 10Sort_a函数213. 11Sort_d函数243. 12LocatedFor函数263. 13DeleteFor函数283. 14ChangeFor函数313. 15ZaP函数343. 16TestFunction函数343. 17DosHelp函数355. 18BuildRode.c364系统调试运行414.1帮助命令界面:414. 2creat命令创建新的数据库并打开414. 3append命令,添加数据项424 .4brows命令查看数据库全部数据425 .51。Cate查找定位命令,搜索数据库,查找关键字434 .6sort_asort_d根据关键字排序命令435 .7delete命令删除带有关键字的数据444 .8Change_for命令修改数据库中某项数据445 .9SaVe保存命令454 .10save_as另存为命令465 .11use打开新的数据库命令474. 12普里姆算法计算建设的最短道路486. 13附加功能485系统实用性检验507. 1搭建商场商品管理信息系统:505.Ll添加数据库基本项目:505.L2添加商品数据505.L3浏览数据:515.1.4根据价格排序:升序和降序525.L5修改价格:525.L6删除项目:525.L7保存文件:535.L8另存为:545.L9关闭现有数据库,打开新的数据库:555.L10用户输入出错时程序的自动判断:566课程设计总结57附录1学到的东西58附录2计算器源程序59参考文献67外部文件基于文件系统的自定义数据库1系统分析1.1 背景在选择课程设计的题目时,发现大多题目都可以用基于文件系统的操作实现,而题目所需的操作也都类似,如插入数据、查找数据、排列数据、删除数据、保存数据等。在之前模仿过数据库的构建后(参考数据结构课程设计P34-57DBMS数据库管理系统),我想自己搭建一个可自定义的数据库,可由用户自己定义自己的数据库,并且管理不同的数据库,实现了FoXBASE数据库的基本功能。1.2 主要问题实现模拟命令符的识别、文件的准确读写、排序、查找、插入、删除1.3 3设计思路基于以前自己用单片机搭建的遥控智能小车的经验,明白了在程序设计前搭建好系统框架的重要性,本课程设计在主函数中使用一个大WhiIe循环语句,和if判断语句实现字符命令的控制,在此基础上实现了数据库的基本操作、程序的调试。2系统设计2.1程序框架:函数实现区基本变量区测试变量区命令符控制区程序调试区数据库文件区附加功能区2.2主函数流程图:附加功能可自定义加入想要打开的文件、软件等,可扩展出很多功能。如搭建小区管理系统,数据库管理小区住户的信息,拓展功能区可加入摄像头、温度管理系统(随时查看安全隐患处的温度,提前预警)使用邻接矩阵表示的无向图:宏定义图的数据结构初始化函数定位函数普里姆算法道路生成函数道路数据文件3系统编码设计DataBase数组的结构:DataBase0DataBase1DataBase2DataBase3DataBase.data编号t0字段lt0字段2t0字段3t0DataBase.DataTypechar自定义自定义自定义File_Read_Write数组的结构:File_Read_WriteFile_Read_WriteFile_Read_WriteFile_Read_Write00.data01.data02.data03.dataFile_Read_WriteFile_Read_WriteFile_Read_WriteFile_Read_Write10.data11.data12.data13.dataFile_Read_WriteFile_Read_WriteFile_Read_WriteFile_Read_Write20.data21.data22.data23.dataFile_Read_WriteFile_Read_WriteFile_Read_WriteFile_Read_Write30.data31.data32.data33.data其中*DataLength=5*DataCom=4每个空格代表大小为CharCh20;的字符数组所占的内存大小3.1main函数实现字符命令的控制,以及程序调试,数据库读写等操作命令intmain()(charFirStlnPUt100;记录输入的字符charSeCondInPUt100;记录二次输入如文件名等charOpenFileNametlOO;记录要打开的文件的名字charSaVeASName100;记录另存为的文件名字charSortNametlOO;记录排序的字段名charLocateName100;charDeleteNameElOO;charCharName100;charChangeNameElOO;char01dCharName100;charNewCharNametlOO;char*cmdl=浏览器3.0.exe”;修改浏览器时要该动名字char*cmd2="计算器.exe”;/inthandle;intTypeNum=I;intDataLength=O;intDataCom=O;inti;FILE*fp;DataLinkList*DataBase10;测试用的变量区Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii/charch10;/Switch(ch,1234);/printf(,%sz,ch);SySten("pause");/inttest;用于测试SWitCh函数IiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiIiiiiiiiiiiiiiisystem(z,color64);改变颜色DosHelpO;显示帮助界面SySteni("pause");/printfCwhile(scanf(z,%szz,FirstInput)!=EOF)SCanf('%s”,SecondInput);/SecondInput可写XXX.txt或者XXX.dochandle=creat(SecondInput,S_IREADS_IWRiTE);创建数据库文件CreateDataBase(DataBase,&TypeNum);for(i=0;i<TypeNum;i+)(write(handle,DataBasei->data,strlen(DataBasei->data);写入数据库printf(n);OpenDataBase(SecondInput,&DataLength,DataCom);)/elseif(strcmp(FirstInput,另存为)=0)elseif(strcmp(FirstInput,"use")=0)还要修改(SCanf('%s”,OpenFileName);/SecondInput可写XXX.txt或者XXX.docif(DataLength!=0&&DataCom!=0)(Save_DataBase(SecondInput,&DataLength,&DataCom);Printf(原数据库已经保存n);)Zap(&DataLength,&DataCom);数组初始化OpenDataBase(OpenFileName,&DataLength,&DataCom);strcpy(SecondInput,OpenFileName);将新打开的文件名复制给二次输入数组方便交换操作等)elseif(strcmp(FirstInput,“append")=0)AppendDataDataLength,&DataCom);scanf(%s,SortName);/SortNameSort_a(SortName,&DataLength,&DataCom);elseif(strcmp(FirstInput,sort_d)=0)(scanf(s,SortName);/SortNameSort_d(SortName,&DataLength,&DataCom);)elseif(strcmp(FirstInput,“locate")=。)(SCanf('%s”,LocateName);scanf(,%sz,CharName);LocatedFor(LocateName,CharName,&DataLength,&DataCom);)elseif(strcmp(FirstInput,brows)=0)(BrowsDataBase(&DataLength,&DataCom);)elseif(strcmp(FirstInput,deletez,)=O)(scanf(z,%szz,DeleteName);scanf(,%szz,CharName);DeleteFor(DeleteName,CharName,&DataLength,&DataCom);)elseif(strcmp(FirstInput,change-forz,)=0)(scanfChangeName);scanf(/,%szz,OldCharName);SCanf('%s”,NewCharName);ChangeFor(ChangeName,OldCharName,NewCharName,DataLength,WataCom);Save_DataBase(SecondInput,&DataLength,&DataCom);)elseif(strcmp(FirstInput,"save_as")=0)(SCanf('%s”,SaveAsName);/SecondInput可写XXX.txt或者XXX.docSave_as_DataBase(SaveAsName,&DataLength,&DataCom);)elseif(strcmp(FirstInput,"zap")=。)(ZapGDataLength,&DataCom);Printf(数组清空完毕!n);)elseif(strcmp(FirstInput,"quit")=0)system(z,clsz");printf(n);printf119;Printf("n");printf(n);printfnzz);printf(n);printf(n);printf119;printf(",谢谢使用!n);/可加入退出声明!加入退出动画printf(z,by电信3班郑浩东11,z);printf(n);SIeeP(Ioo0);延时退出break;DosHelpO;)/elseif(strcmp(FirstInput,"use")=。)/SCanf("%s”,SeCOndInPUt);输入文件名称/if(fp=fopen(SecondInput,r)=NULL)判断数据库是否存在,存在则打开/Printf(数据库不存在!n);/Printf/continue;/else/Printf(数据库成功打开!n);/dosomething!/)/)elseif(strcmp(FirstInput,"cls")=O)(system(zzclsz,);)elseif(strcmp(FirstInput,"test")=0)system(z,clsz,);Printf(现在进入程序测试模块!n);BuildRodeO;/SwitchToInt(,1235t0zz,&test);/printf(/,%dn,z,test);/CreateDataBase(DataBase,&TypeNum);)system(cmdl);Printf(浏览器已经打开!n);)elseif(strcmp(FirstInput,“opencalculator")=0)(system(cmd2);Printf("计算器已经打开!!n");)else(Printf(语法错误!请重新输入命令(如需帮助请输入help命令)n);)/*elseif(strcmp(FirstInput,“XXXXX")=O)dosomething;*/SySten1("pause");return0;)3. 2CreateDataBase函数建立新的数据库,通过用户自定义数据库的数据类型,名称等,搭建适用用户的数据库。voidCreateDataBase(DataLinkList"DataBase口,int*TypeNum)(chartou二编号t0”;建立数据库时自动添加编号字段charch150,type150;intchlen;inti;DataBase0=(DataLinkList*)malIoc(sizeof(DataLinkList);strcpy(DataBase0->data,tou);建立编号字段Strcpy(DataBase0->DataT>e,"char");类型Printf(".请输入字段%d的名称以$'结束输入n”,*TypeNum);printf(.);scanfch);Printf(".请输入字段%d的类型(String,int,double)n”,*TypeNum);SCanftype);whiIe(I)(if(strcmp(type,“string")=0strcmp(type,"int")=0strcmp(type,“doub1e)-0)(break;)else(Printf(.您输入的类型非法!请重新输入n);Printf(".请输入字段%d的类型(string,int,double)nzz,*TypeNum);scanf("%s",type);)while(l)(if(strcmp(ch,$)=0)break;)chlen=strlen(ch);chchlen='t'添加制表符chchlen+l=,0,;结尾添加结束符防止出错DataBase*TypeNum二(DataLinkList*)malloc(sizeof(DataLinkList);strcpy(DataBase*TypeNum->data,ch);讲数据类型名称复制进去strcpy(DataBase*TypeNum->DataType,type);复制类型标志*TieNum=*TypeNum+1;Printf(".请输入字段d的名称以'$'结束输入n”,*TypeNum);printf(.);scanf(,%szz,Ch);if(strcmp(ch,$)二二0)(break;)Printf(.请输入字段%d的类型(String,int,double)n,*TypeNum);scanf(z,%s,type);whiIe(I)if(strcmp(type,“string")=0strcmp(type,int)=0strcmp(type,“double")=0)break;)else(printf(.您输入的类型非法!请重新输入n);printf(.请输入字段%d的类型(string,int,double)nzz,*TypeNum);SCanftype);)for(i=0;i<*TypeNum;i+)输出数据库的字段和类型(printf(z,%s(%s)”,DataBasei->data,DataBasei->DataType);/可能字体有问题printfnz,);3. 3OpenDataBase函数打开建立好的数据库,并把数据库的信息全部读取在特定数组中,方便操作。voidOpenDataBase(charFiIeName,int*DataLength,int*DataCom)打开数据库,并把数据读取出来,放在数组中,开始长宽都为0(FILE*fp;charFileDataEllO;charch;intIie=O;inti;memset(FileData,'0,sizeof(FileData);fp-fopen(FiIeName,z,r+zz);打开文件ch=fgetc(fp);while(ch!=EOF)if(Ch='t')(strcpy(File_Reda_WriteWataLength*DataCom.data,FileData);i=strlen(File_Reda_Write*DataLength*DataCom.data);File_Reda_Write*DataLength*DataCom.datai三,t,;/向文件交流数组写入制表符,方便写入和读取等File_Reda_Write*DataLength*DataCom.datai+l三,0'memset(FileData,0,Sizeof(FileData);复制完成后数组初始化*DataCom=*DataCom+1;Iie=O;/printf(z,fuzhichenggong!n,z);/fortest)elseif(Ch='n,)*DataLength=*DataLength+l;*DataCom=0;elseFiIeData1ie=ch;lie+;)ch=fgetc(fp);*DataLength=*DataLength+l;Printf(数据库成功打开!n);)3.4SwitchToChar函数voidSwitchToChar(charch,intnum)将数字转换为字符(inti,j;charfanch10;memset(fanch,0,sizeof(fanch);初始化数组for(i=0;num!=O;i+)j=num%10;fanchi=j÷,0,;num=num10;)for(j=0;j<i;j+)chj=fanchi-j-l;)chi>,0,;)3.5SwitchToInt函数voidSwitchToInt(charch,int*num)可以去除最后含有制表符的字符串inti;intchlen;charcharcopyMAXCHARNUM;chlen=strlen(ch);for(i=0;i<chlen;i+)charcopyi=chi;if(charcopych1en-1=-t,)(charcopychlen-1=,0,;chlen=chlen-l;)*num=0;for(i=0;i<chlen;i+)(*num=*num*10+(charcopyi,0,);)3. 6AppendData函数voidAppendData(intWataLength,int*DataCom)追加数据函数(inti,j,k=l;intSUnI=0;charbianhao10;memset(bianhao,'0',sizeof(bianhao);初始化数组if(*DataLength>l)自动生成编号,并写入数组。(j=strlen(File_Reda_Write*DataLength-l0.data);File_Reda_Write*DataLength-l0.dataj-l三,0'上一行的制表符用结束符代替,避免计算出错for(i=j-2;i>=0;i-)sum=sum+(File_Reda_Write*DataLength-l0.datai-,0,)*k;k*=10;sum+;SwitchToChar(bianhao,sum);File_Reda_Write*DataLength-10.dataj-l,t'讲改变的上一行的编号字符再次添加回来File_Reda_Write*DataLength-l0.dataj=,0'else(SwitchToChar(bianhao,1);)j=strlen(bianhao);bianhaoj=,t'添加制表符bianhaoj+l三,0,;strcpy(File_Reda_Write*DataLength0.data,bianhao);j=0;for(i=l;i<*DataCom;i+)(Printf("请输入:%s”,File_Reda_WriteOi.data);scanf(z,%szz,File_Reda_Write*DataLengthi.data);j=strlen(File_Reda_Write*DataLengthi.data);File_Reda_Write*DataLengthi.dataj=,t'添加制表符File_Reda_Write*DataLengthi.dataj+l三,0,;)WataLength=WataLength+1;Printf("数据成功添加到数据库中!!n);4. 7SaVe.DataBase函数voidSave_DataBase(charFiIeName,intWataLength,intWataCom)/关闭数据库,并把数组中的数据写入文件中。(inti,j;FILE*fp;/intTypeLengthNfAXDATATYPE;fp-fopen(FileName,“w+);for(i=0;i<*DataLength-l;i+)(for(j=0;j<*DataCom;j+)(fprintf(fp,"%s”,File_Reda_Writeij.data);/fputc(,t,fp);fputc(,n,fp);添加回车符)for(i=0;i<*DataCom;i+)最后一行单独添加进去(fprintf(fp,s,File_Reda_Write*DataLength-li.data);fclose(fp);Il*DataLength=O;/*DataCom=0;Printf("保存成功!n");)3. 8Save_as_DataBase函数voidSave_as_DataBase(charFiIeName,int*DataLength,int*DataCom)(inti,j;FILE*fp;/intTypeLengthMAXDATATYPE;fp-fopen(FileName,w+);for(i=0;i<*DataLength-l;i+)(for(j=0;j<*DataCom;j+)(fprintf(fp,s,File_Reda_Writeij.data);/fputc(,t,fp);)fputc(,n,fp);添加回车符for(i=0;i<*DataCom;i+)最后一行单独添加进去fprintf(fp,s,File_Reda_Write*DataLength-li.data);)fclose(fp);/*DataLength=O;/*DataCom=0;Printf("成功另存为%snzz,FileName);)3.9BroWSDataBaSe函数浏览数据库的全部信息voidBrowsDataBase(int*DataLength,int*DataCom)inti,j;for(i=0;i<*DataLength;i÷+)for(j=0;j<*DataCom;j+÷)(printf%szz,File_Reda_Writeij.data);)printf(n);)3.10Sort_a函数voidSort_a(charSortName,intWataLength,int*DataCom)(inti;intj;/intk;intfOrExchangeSort;intfOrExchangeTag;intsortMAXDATANUM;储存要排序的列的所有数据inttagMAXDATANUM;记录排序好后输出的下标顺序for(i=0;i<MAXDATANUM;i+)tagi=i;)J=Strlen(SortName);为字段添加标准格式符,便于搜索SortNamej=,t'SortNamej+l三,0,;户0;for(i=0;i<*DataCom;i+)(if(strcmp(SortName,File_RedaWrite0iLdata)=O)(j=i;记录字段的位置/printf(z,testsuccess!n,z);)if(strcmp(SortName,File_Reda_WriteOj.data)!=O)(Printf(没有找到相应字段!请检查是否输入错误,以下是数据库的字段:n);for(i=0;i<*DataCom;i÷+)(printf(/,%szz,File_Reda_WriteOi.data);)printf(n);for(i=0;i<*DataLength-l;i+)(SwitchToInt(File_Reda_Writei+lj.data,sorti);)for(i=*DataLength-l;i>=0;i-)冒泡排序从小到大排列for(j=0;j<i;j+)if(j!=*DataLength-2&&sortj>sortj+l)fOrExchangeSort=Sortj;sortj=sortj÷l;sortj+l=fOrExchangeSort;forExchangeTag=tagj;tagj=tagj+l;tagj+l=fOrExchangeTag;*for(j=0;j<*DataLengthl;j+)printf%d,tagj+l);)printf);for(j=0;j<*DataLength-l;j+)(printf(,%d”,sortj);)printfnz,);*/)for(j=0;j<*DataCom;j+)printf(,z%sz,File_Reda_WriteOj.data);)printfnz,);for(i=0;i<*DataLength;i+)(for(j=0;j<*DataCom;j+)printf(,%s,>File_Reda_Writetagi+lj.data);printf(,n*);*for(i=0;i<*DataLengthl;i+)Printf(%d,sorti);*/)3.11Sort_d函数voidSort_d(charSortName,int*DataLength,int*DataCom)(inti;intj;/intk;intfOrExchangeSort;intfOrExchangeTag;intsortMAXDATANUM;储存要排序的列的所有数据inttagMAXDATANUM;记录排序好后输出的下标顺序for(i=0;i<MAXDATANUM;i+)tagi=i;)J=Strlen(SortName);为字段添加标准格式符,便于搜索SortNamej=,t'SortNamej+l三,0,;J=O;for(i=0;i<*DataCom;i+)(if(strcmp(SortName,File_Reda_WriteOi.data)=O)(j=i;记录字段的位置/printf(z,testsuccess!n,z);if(strcmp(SortName,File_Reda_WriteOj.data)!=O)Printf(没有找到相应字段!请检查是否输入错误,以下是数据库的字段:n);for(i=0;i<*DataCom;i÷+)(printf(z,%szFile_Reda_WriteOi.data);printf(n);)for(i=0;i<*DataLength-l;i+)(SwitchToInt(File_Reda_Writei+lj.data,&sorti);for(i=*DataLength-l;i>=0;i)冒泡排序从大到小排列(for(j=0;j<i;j+)(if(j!=*DataLength_2&&sortj<sortj+l)fOrExchangeSort=Sortj;sortj=sortj+l;sortj+l=forExchangeSort;forExchangeTag=tagj;tagj=tagj+l;tagj+l=fOrExchangeTag;*for(j=0;j<*DataLengthl;j+÷)printf(,z%d,tagj+l);printf);for(j=0;j<*DataLength-l;j+÷)(Printf(%d,sortj);)printf(,11,z);*/)for(j=0;j<*DataCom;j+)(printf(,%sz,FileRedaWrite0j.data);)printf(n);for(i=0;i<*DataLength;i+)(for(j=0;j<*DataCom;j+)printf(,%s,z,File_Reda_Writetagi+lj.data);)printfnz,);)3.12LocatedFor函数voidLocatedFor(charLocateName,charCharName,int*DataLength,int*DataCom)/IocateName记录要搜索的字段名CharName记录具体字段名称inti=0;intj=0;intk-0;intfOrExchangeLocateName;intfOrExchangeTag;intsortMAXDATANUM;储存要排序的列的所有数据inttagMAXDATANUM;记录排序好后输出的下标顺序for(i=o;Kmaxdatanum;i+)tagi=i;为字段添加标准格式符,便于搜索Iiiiiiiiiij=strlen(LocateName);LocateNamej=,t'LocateNamej+l三,0,;J=O;j=strlen(CharName);Ch

    注意事项

    本文(课程设计报告书 --基于文件系统的自定义数据库.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开