项目8任务8.3 设计图书借阅记录快速查询器_第1页
项目8任务8.3 设计图书借阅记录快速查询器_第2页
项目8任务8.3 设计图书借阅记录快速查询器_第3页
项目8任务8.3 设计图书借阅记录快速查询器_第4页
项目8任务8.3 设计图书借阅记录快速查询器_第5页
已阅读5页,还剩16页未读, 继续免费阅读

下载本文档

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

文档简介

任务8.3设计图书借阅记录快速查询器主讲:陈静目录必备知识:文件指针定位函数任务实施与代码实现教学总结010203教学目标知识目标1.掌握fseek函数定位文件指针的用法,理解三种定位基准(SEEK_SET开头、SEEK_CUR当前、SEEK_END结尾)的区别。2.掌握ftell函数获取当前文件指针位置、rewind函数重置指针到文件开头的用法。3.理解文件随机访问的原理——通过定长记录和偏移量计算直接定位,无需顺序遍历。能力目标1.能根据记录编号计算偏移量,使用fseek直接定位到指定记录并读取。2.能运用fseek+ftell获取文件总大小并计算记录条数,运用rewind重置指针实现顺序读取。3.能独立设计图书借阅记录快速查询器,实现定长记录的随机访问、文件信息统计及全记录遍历。素养目标1.培养"精准定位"的务实作风,精确计算偏移量、选择合适寻址模式,做到差之毫厘亦不可。2.树立"效率优先"的优化意识,在大数据场景下主动选择随机访问而非顺序扫描,提升查询效率。3.学习《永乐大典》"用韵统字、用字系事"的索引智慧,培养在信息海洋中快速定位、精准捕捞的能力。树立"效率优先"的优化意识教学重难点fseek函数掌握fseek函数的使用方法,能够移动文件指针到指定位置ftell函数掌握ftell函数的使用方法,能够获取文件指针当前位置rewind函数掌握rewind函数的使用方法,能够重置文件指针到文件开头综合应用能够综合运用文件指针定位技术实现图书借阅记录的快速查询fseek三种定位基准SEEK_SET、SEEK_CUR、SEEK_END随机访问原理根据记录编号计算偏移量定长记录与随机访问理解定长记录与随机访问的关系精确计算偏移量精确计算偏移量实现精准定位任务导入问题场景图书馆管理系统中,成千上万条借阅记录保存在文件中如果每次查询某条记录都要从头读到尾,效率非常低解决方案核心方案每条记录长度相同,根据记录编号直接计算出它在文件中的位置然后用

fseek

跳转到那里,只读取这一条记录技术价值这种随机访问方式极大提高了查询效率是文件处理的核心技术之一必备知识:文件指针定位函数01使用fseek定位文件指针函数原型fpos_tnewPos=100;fseek(file,newPos,SEEK_SET);函数作用移动文件指针到文件中的特定位置参数说明file指向FILE对象的指针,指定要定位的文件newPos新位置,相对于定位基准的偏移量定位基准确定偏移量的起始参考点SEEK_SET文件开头SEEK_CUR当前位置SEEK_END文件结尾使用ftell获取文件指针位置函数作用获取当前文件指针的位置参数说明file指向FILE对象的指针,指定要获取位置的文件返回值文件指针的当前位置典型应用配合

fseek(fp,0,SEEK_END)

使用,可获取文件总大小Cfpos_tcurrPos=ftell(file);printf("Currentposition:%zu\n",currPos);ftell返回文件指针当前偏移量使用rewind重置文件指针将文件指针重置到文件开头函数原型rewind(file);参数说明file:指向FILE对象的指针,指定要重置的文件典型应用在顺序读取所有记录前,确保指针位于文件开头课堂互动:文件指针定位思考题若文件中有

100

条定长记录,每条记录占

60

字节,如何快速定位到第

50

条记录?定长记录·随机访问讨论要点互动核心偏移量如何计算?应使用哪种定位基准?如何验证定位是否正确?关键提示核心公式offset=(id-1)×

记录长度代入:offset=(50-1)×60=2940任务实施与代码实现02实施思路设计C语言程序,实现图书借阅记录的快速查询PROGRAMOBJECTIVE定义结构体定义借阅记录结构体

Record,包含:编号、书名、借阅人、已借天数初始化记录初始化

10条借阅记录,写入二进制文件(定长记录存储)交互菜单提供菜单:按编号查询、查看文件信息、显示所有记录演示fseek演示

fseek

的三种定位基准用法:SEEK_SET/SEEK_CUR/SEEK_END定长记录优势定长记录便于随机访问,每条记录占用固定字节数,无需顺序遍历即可直接定位到任意记录位置,实现O(1)时间复杂度的快速查询123...10偏移量计算通过公式计算目标记录在文件中的精确字节位置://核心计算公式offset=(id-1)×sizeof(structRecord)id:目标记录编号|sizeof:单条记录字节数任务分析:功能模块设计模块一:初始化记录文件函数声明:voidinitRecords(constchar*filename)功能:创建10条记录(编号1~10),写入文件实现:打开文件,循环生成记录,fwrite写入,关闭文件模块二:按编号查询函数声明:voidqueryById(constchar*filename,intid)功能:计算偏移量,用fseek定位,用fread读取并显示实现:偏移量=(id-1)×sizeof(Record),fseek跳转后fread读取模块三:显示文件信息函数声明:voidshowFileInfo(constchar*filename)功能:用fseek+ftell获取文件总大小及记录条数实现:fseek到文件末尾,ftell得字节数,除以单条记录大小得条数模块四:顺序显示所有记录函数声明:voidshowAllRecords(constchar*filename)功能:用rewind重置指针,循环读取并输出实现:rewind重置到开头,while循环fread读取直至EOF核心代码:结构体定义与初始化//结构体定义struct

Record{int

id;char

bookName[30];char

borrower[20];int

days;};核心逻辑:打开文件使用

wb

模式创建或覆盖二进制文件,准备写入数据定义10条记录数组声明结构体数组并填充模拟借阅数据,包含书号、书名、借阅人、天数使用fwrite批量写入一次性将数组数据写入文件,效率高且保持二进制格式关闭文件确保缓冲区数据落盘,释放文件句柄,完成初始化流程核心代码:按编号查询1校验编号有效性确保编号在1~10有效范围内2计算偏移量offset=(id-1)×sizeof(structRecord)3fseek定位文件指针fseek(fp,offset,SEEK_SET)4fread读取记录从当前位置读取一条完整记录5输出查询结果显示借阅记录的完整信息偏移量计算原理通过编号减1得到前面有多少条记录,再乘以单条记录的字节大小,即可精确定位到目标记录在二进制文件中的存储位置,实现O(1)时间复杂度的随机访问偏移量计算公式offset=(id-1)×sizeof(structRecord)第id条记录在文件中的起始位置核心代码:显示文件信息1打开文件(rb

模式)2移动指针到末尾:fseek(fp,0,SEEK_END)3获取总字节数:longsize=ftell(fp)4计算记录条数:longcount=size/sizeof(structRecord)5输出文件总大小、记录条数、每条记录字节数技术要点fseek+ftell

组合可快速获取文件大小无需遍历整个文件,效率更高核心代码:顺序显示所有记录1打开文件rb模式(二进制只读)2重置指针到开头rewind(fp)3循环读取记录while(fread(&r,sizeof(structRecord),1,fp)==1)4输出每条记录信息格式化打印借阅记录字段5关闭文件释放文件资源,结束操作技术要点rewind确保从头开始将文件指针强制重置到开头位置,保证顺序读取的完整性避免指针位置错误防止因指针位置不确定导致的读取错误或数据遗漏训练项目:拓展练习基础练习修改程序,支持用户添加新的借阅记录到文件末尾实现思路:以追加模式打开文件,将新记录格式化后写入入门进阶练习实现记录删除功能:将指定编号的记录标记为"已删除",查询时跳过已删除记录实现思路:添加删除标记字段,查询时过滤带标记的记录进阶挑战练习设计一个索引文件,存储每条记录的编号与文件偏移量的映射关系,进一步提升查询效率挑战实现思路:建立编号→偏移量索引表,查询时直接定位无需遍历教学总结03知识回顾核心知识点关键技术应用场景fseek移动文件指针到指定位置,支持三种定位基准ftell获取文件指针当前位置,常用于获取文件大小rewind重置文件指针到文件开头定长记录实现随机访问通过固定长度的记录结构,实现数据的快速定位与读取偏移量计算公式offset=(id-1)×sizeof(Record)图书馆管理系统图书借阅记录快速检索与定位学生信息管理学籍档案的高效查询与维护库存记录查询仓储物资数据的实时检索素养提升:精准定位与工匠精神工程思维精准定位:fseek允许直接跳转到指定位置,无需

温馨提示

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

评论

0/150

提交评论