个人书籍管理系统的程序设计报告-正文_第1页
个人书籍管理系统的程序设计报告-正文_第2页
个人书籍管理系统的程序设计报告-正文_第3页
个人书籍管理系统的程序设计报告-正文_第4页
个人书籍管理系统的程序设计报告-正文_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

XXXX大学

课程设计说明书课程名称数据结构课程设计个人书籍管理系统的设计与实现院系XXXX学院班级计算机科学与技术10?学生姓名指导教师-日期—2012.6.1—2012・6・19_

数据结构课程设计任务书课程设计题目个人书籍管理系统的设计与实现姓名学号专业班级组别组长同组成员指导教师课程设计目的进步理解杳找和排序在实际系统中使用的数据结构,以及施加在这些数据结构上的算法,锻炼学生运用所学知识来解决实际问题的能力.课程设计环境386以上的微机上进行,运行环境为TurboC课程设计任务和要求设计个人书籍管理系统,要求系统具备如下功能:存储书籍的各种相关信息提供查找功能,按照各种关键码查找需要的书籍,查找成功可以修改记录的相关项.3提供排序的功能:按照各种关键码对所有的书籍进行排序.参考文献1、严蔚敏等.数据结构(C语言版).清华大学出版社20042、谭浩强.C语言程序设计.清华大学出版社.20023、李春保.数据结构教程上机实验指导.清华大学出版社.2005时间进度安排序号起止日期工作内容12012.6.1〜2012.6.5下达课程设计任务、查阅资料、确定方案22012.6.6〜2012.6.14编写程序、调试、运行32012.6.15验收42012.6.16〜2012.6.18撰写课程设计报告52012.6.19提交文档教研室主任签字:2012年5月29日个人书籍管理系统的设计与实现―、简介1设计目的:进一步理解査找和排序在实际系统要使用的数据结构以及施加在这些数据结构上的算法,锻炼学生运用所学数据结构的知识来解决实际问题的综合能力。2•问题的描述:学生在自己的学习和生活中会拥有很多的书籍,对所购买的书籍进行分类和统计是一种良好的习惯。可以便于对这些知识资料的整理和查找使用。如果用文件来存储相关书籍的各种信息,包括分类、购买日期、价格、简介等等,辅之以程序来使用这些文件对里面的书籍信息进行统计和査询的工作将使得这种书籍管理工作变的轻松而有趣。简单个人书籍管理系统的开发就是为了解决这个实际问题的。这个系统具备如下的功能:1存储书籍各种相关信息。提供查找功能,按照多种关键码查找需要的书籍,查找成功可以修改记录的相关项。提供排序功能,按照多种关键码对所有的书籍进行排序,例如按照购买日期进行排序。其他辅助的维护工作。二、数据结构的设计:1存储书籍各种信息的结构体typedefstruct{intyear,month,day;//具体的购买日期}DATE;typedefstruct{DATEdate;〃购买日期charname[20];〃书的名字charauthor[8];〃书的作者inttype;//存放书的种类(0计算机1物理2英语3数学intnum;〃存放书的位置编号intprice;〃书的价格}B0OK;BOOKbook[200];2表示书架该位置是否有书的存在intmark[200]={0};//初始化为0将所有的mark[i]全部初始化为0(0表示此书架处没有存放书籍,还可以存储书籍),如果有书籍存储到此位置处,则将其赋值为1(1表示此书架处已经存放上书籍,不可以再存)。三、功能(函数)设计:程序整体的模块如下所示各个功能模块的含义如下:1・“文件”模块file()此模块循环显示“文件操作”命令菜单,接收键盘输入的命令,检查命令是否合法,若合法则调用相应下层函数。命令菜单中应包含“返回上一层菜单”命令。2•“编辑”模块edit()此模块循环显示“编辑操作”命令菜单,接收键盘输入命令,如命令合法则调用相应下层函数。命令菜单中应包含“返回上一级菜单”命令。3•“插入”模块insert()此模块接收从键盘输入的一条新的记录,按“购买日期”顺序插入到books数组中。插入时应考虑到books数组中无数据情况下的处理。4•“删除”模块del()此模块接收从键盘输入的一条记录的“购买日期”和“书名”,在books数组中査找,如找到则从books数组中删除该记录,否则显示“未找到”。5•“显示”模块printO此模块显示类别名称和编号,提示用户输入类别编号,显示books数组中指定类别的书籍记录,或输入“all”显示全部书籍记录。6•“排序”模块sort()此模块对books数组中所有记录按“类别”排序,类别相同的按“书名”排序(字典序),显示排序结果(最好不要改变books数组中数据的原顺序,将books中的数据复制到另一工作数组中再排序)。7•"统计”模块sta()此模块统计每类书籍的数量,显示统计结果。对界面进行一定的调整,使其看起来整齐、规范和美观,容易看出操作所需要的步骤和所需要输入的指令代码。五、程序设计:1各函数功能(1)主函数main<1>主函数主要作用是1〉对相关的数据进行初始化2〉当选择所要执行的功能时,调用相关的函数来实现所需要的功能。3〉建立文件,使得当关闭调试框时,如果再次打开,上次录入的书籍信息仍然存在。<2>主函数流程图开始开始开始开始(2)插入函数insert()<1>函数作用该函数主要用于向系统中增加书籍的信息<2>函数流程图

结束3打印函数print()<1>函数功能该函数主要用于以不同方式打印出系统中所存放的书籍的信息。可以打印出某一类别的所有书籍(如计算机类、物理类、英语类及数学类),也可以将系统中所存放的所有书籍全部打印出来。<2>函数流程图开始—4删除操作del()<1>函数功能该函数主要用于删除操作。可以通过不同放入关键字(所要删除书籍的名称、书籍作者名和书籍的购买日期)对书籍进行删除操作。<2>函数流程图

开始开始strcmp(book[i].name,name)==0?strcmp(book[i].name,name)==0?K++strcmp(book[i

].author,autho

r)==0?厂FK++(book[i].date.year==year)&&(book[i].datK=0?K=0?K=0?K=0?rMark[i]=0Mark[i]=0书籍不存在书籍不存Mark[i]=Of开始开始strcmp(book[i].name,name)==0?strcmp(book[i].name,name)==0?K++strcmp(book[i

].author,autho

r)==0?厂FK++(book[i].date.year==year)&&(book[i].datK=0?K=0?K=0?K=0?rMark[i]=0Mark[i]=0书籍不存在书籍不存Mark[i]=Of、书籍不存在书籍不存在Mark[i]=O纟口束5查询函数(1)函数功能该函数主要用于查询书籍信息。可以通过不同的关键字(所要查询的书籍的名称、书籍作者名和书籍的购买日期)对书籍进行查结束结束询操作。6编辑函数edit()(1)函数功能该函数主要用于对已经存入的书籍的信息进行修改。可以分为两种形式:<1>如果知道所要修改的书籍的存放位置编号,可以直接对该书籍信息进行修改;<2>如果不知道所要修改书籍的存放位置编号,可以通过查询得到所要修改书籍的存放位置编号,然后通过位置编号对该书籍的信息进行修改操作。<2>函数流程图开始7排序函数sort()(1)函数功能该函数主要用于对系统中存放的书籍进行排序,以便于对系统中的书籍进行查看。排序方式为:首先按书籍类别计算机、物理、英语、数学进行排序,在同一类别中又以字典中的字母顺序进行排序操作。(2)函数流程图开始打印书籍信息打印书籍信息打印书籍信息打印书籍信息结束n[i].type==0?n[i].type==2?将结构体数组开始打印书籍信息打印书籍信息打印书籍信息打印书籍信息结束n[i].type==0?n[i].type==2?将结构体数组book复制到结构体数组n对结构体数组n循环将结构体数组n按字母顺序进行排序n[i].type==1?n[i].type==3?00008统计函数sta()(1)函数功能该函数用于统计并输出该系统所存放的书籍中各类书籍

的本书和系统中所村书籍的总册数。(2)函数流程图结构体数组book循环e++输出计算机类书籍输出不存在计算机类书籍的语句结构体数组book循环输出物理类书籍输出不存在物理类书籍的

语句输出英语类书籍输出不存在英语类书籍的

语句结构体数组book循环2调试中遇到的问题问题1:如何比较两个字符串是否相同?解决方案:不能够使用类似于“if(book[i].name二二name)”的结构,比较两个字符串是否相等有专门的函数“strcmp”。如:

strcmp(book[i].name,name)=O,则说明两个字符串相同。问题2在进行插入操作时,不能够找到所需要的k值,也就是第一个mark!=O的存储位置。具体问题如图:0\"D:\123\DebuE\123.eze*桶退出程序1増加书籍信息/删I桶退出程序1増加书籍信息/删I4打印该累统中所存放的所有的书籍的信1你将要加入的书的存馭位置编号为2itMH请鼬為密要加几的书的价格七12请喻入你盼要加2$的书的购买SMf:12,12,12_,一KJCKJCKJCKJCKJCKJCNJCNJCNJCNJCNxj冃j先J|Tj?pfr井彳~T旳扌霁r0退岀程序1增加书籍信息厂;-八4打印该累统中所存放的所有的书齬的信1你将要加入的书的存馭位囂编号为2洁蜡1\斬西力「i扎閃甘热1左襯.解决方案:最初代码如下:请选择你所要进行的操乍i********W****—舎点3查询书籍信息髏书籍更3查询书齬信息for(inti=0;i<200;i++){if(mark[i]!=O){k++;}break;}此时,由于每次break语句的存在,每次的for循环都只能执行一次,因此不能够得到所想要的k值。最终修改代码为:while(book[k]・type!=O)k++;问题三:执行完sort函数后,其他的函数不能够正确的执行,而如果不执行sort函数,只执行其他的函数,则其他的函数都可以正确的执行。解决方案:此问题的原因是每次执行完后,由于对book[i]数组进行了重新的排序,使得其他的函数在调用数组book[200]时,此时的数组book[200]已经不是原先的数组,其存储的信息已经改变。重新定义一个结构体数组n将book结构体数组的全部信息复制给新的结构体数组n,这样对结构体数组n的操作就相当于对结构体数组book的操作,而且结构体数组book所存储的信息也不会改变,在重新调用结构体数组book时不会对其他的函数造成影响。问题4:在进行sort函数操作时,书在书架上的存储位置会发生变化,但是在实际情况中,我们只是对书籍按种类进行了排序,并没有改变书籍在书架上的位置。解决方案:此问题的原因是在其他函数中使用存放位置变量时,并没有使用结构体数组中的num变量,而是使用了变量i来表示,虽然这样仍然可以输出存放位置,但是在以后的引用中却无法引用。将使用i的地方换成book[i].num。例:printf("书的存放位置编号为:%d\n",i+l);改为printf("书的存放位置编号为:%d\n",book[i].num);问题5:每次打印出来的price都是0解决方案:在定义结构体数组时,将price定义为了float形,而在输入price变量时,所输入的只全是int形,由于int型数字不可以直接赋给float,这就导致了输出时的price全为0。问题6:每次执行完删除函数后,再执行增加函数,不能够在预想的位置(第一个没有存放书籍的位置)上添加书籍,而是总是在最后一个位置上增加书籍信息。解决方案:此问题的原因是执行完删除函数后,存储时将mark赋值错误,按顺序将mark的值进行标记,而不是按是否有存书籍进行标志,也即是相当于遇到mark为0,则往前移动。将原来的代码:for(mar=0;mar<number+1;mar++){putw(1,fp);for(mar二number+l;mar<200;mar++){putw(0,fp);}改为:for(mar=0;mar<200;mar++){putw(mark[mar],fp);}问题7:文件的建立。六、运行与测试:1、测试的数据及其结果测试的数据:(1)书名:aa,作者名:ZZ,价格:11,书的类别:0计算机类,购买日期:2001年3月12日(2)书名:SS,作者名:XX,价格:34,书的类别:1物理类,购买日期:2010年12月3日;(3)书名:dd.作者名:CC,价格:19,书的类别:2英语类,购买日期:2007年4月21日;(4)书名:ff,作者名:VV,价格:67,书的类别:3数学类,购买日期:2003年11月13日;号.为号.为62003年3月15日号.为号.为62003年3月15日书名:gg,作者名:bb,价格:54,书的类别:0计算机类,购买日期:2005年6月24日;书名:hh,作者名:nn,价格:99,书的类别:1物理类,购买日期:2003年3月15日;书名:jj,作者名:mm,价格:332,书的类别:2英语类,购买日期:2010年9月12日;书名:kk,作者名11,价格:2,书的类别:3数学类,购买日期:2007年10月1日;书名:qq,作者名:ww,价格:76,书的类别:0计算机类,购买日期:2006年3月10日;书名:ee,作者名:rr,价格:754,书的类别:1物理类,购买日期:2001年12月12日;测试的结果:<1>打印功能:E:1\Debug\l.exeIHJE:1\Debug\l.exeIHJ—2打印岀英语类的书籍3打印岀数学类的书籍鲁塁类书籍共有色本卫面4—2打印岀英语类的书籍3打印岀数学类的书籍鲁塁类书籍共有色本卫面4打印岀所有书籍日期为20佃年12月3日22222

第第第第第类类类类类rm22222

第第第第第类类类类类rm一m-一rru一m-一TT---E--E--E--E--E-----------------THTTTHTT为置期hh字99位日为名諮买宀晉的nn<2>查询功能(仅列出按书名查询):号为号为42003年11月13日号为号为42003年11月13日扃冲.\丄\ueDug\i.exe白勺j旬片工INNlOOOOCmOOOtlOOCK亍查询3按购买日期进行查询ioootioocmoootioocK?g充i十第昔•■佶,息.,mooootmcmoooooc7ff启、rT查讶1字名j-t-t■・豐1WWWWloocmoootioocmoooticj青j先扌牟十|•;1按书名进行查询2扌B13用14E1:■ttrjp-3^~-xK警3机:2薯书所的:6:u为^g你ff書类盂ff<3>修改功能:4*****若知道你所要修改*********否则请按2查询你1请输入你所要修改的书籍的编号:自3.亠一一R划&3籍:的号五口英机算FF计3:2改编f杳存:d^^购新入入入入诲ffi-WTT维请请请请请【aa字.<0的息的I■的的:2的的的改改改改專c918>要要:c:1为日入||A®所要修改的书的购买日期:2010^2,12<4>排序功能:ZZ碧为置期aa字11位日为名棗买宀頁土..4>|<一..匡._|<一.._|<一--.也--.^^JJJJJgg厂厂厂匚A下IM1IM1IM1IM1B1uut为置期ff字67位日为名翦列宀rH^话的Hi、m-TTTr、rrm类类类类类矶矶矶矶矶、厂厂厂厂TT22222

第第第第第歸号为歸号为8为20即年10月1日歸号为歸号为8为20即年10月1日为置期g:字76位日为名象买bb碧为置期阴字54位日为名諮买■^^£-的的9Hno44444第第第第第类类类类类矶矶矶矶矶»晟晟晟鼻LLLLL类类类类类矶矶矶矶矶LLLLL6£为阴号20nn勢为置期hh字99位日为名諮买土..^Ffe.l.^.l.^l.^FKp.S曰里討自.-^wf自<1胛如理理理理理J_,E11111物下第第第第第XX縮号为2为胡10年12月3日FF编号为3瞬20佃年空月12日号为720109^12^8033333第第第第第为置期SS字34位日为名畫头的HS类

温馨提示

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

评论

0/150

提交评论