c语言图书管理系统课程设计报告_第1页
c语言图书管理系统课程设计报告_第2页
c语言图书管理系统课程设计报告_第3页
c语言图书管理系统课程设计报告_第4页
c语言图书管理系统课程设计报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

沈航北方科技学院沈航北方科技学院 课程设计说明书课程设计说明书 课程名称课程名称 c c 语言课程设计语言课程设计 教教 学学 部部 机械工程系机械工程系 专专 业业 数控数控 班班 级级 B042111B042111 学学 号号 B04211123B04211123 学生姓名学生姓名 田文田文 指导教师指导教师 赵小磊赵小磊 20122012 年年 6 6 月月 链表实现图书信息操作链表实现图书信息操作 田文田文 目录 摘摘 要要 1 1 1 1 绪论绪论 1 1 2 2 系统分析系统分析 1 1 功能需求 1 数据需求 2 性能需求 2 3 3 总体设计总体设计 2 2 功能模块设计 2 系统设计方案 6 4 4 详细设计详细设计 7 7 登录模块 7 借书管理模块 8 还书管理模块 9 5 5 调试与测试调试与测试 1010 调试 10 测试 11 6 6 结论结论 1212 结束语结束语 1212 参考文献参考文献 1212 附录附录 1 1 用户手册 用户手册 另起一页 另起一页 1313 附录附录 2 2 源程序 源程序 另起一页 另起一页 1515 摘摘 要要 经过对程序设计题目的分析可知 整个程序的设计实现大致分为五个模块 其中每一个模块对应一个函数 他们的功能分别是 图书信息输入函数 input 借阅图书函数 borrow 增加删除图书函数 adddelet 图书查询函数 search 以及归还图书信息函数 giveback 在这些函数当中 这四个函数的实现严格 按照题目的要求 1 图书信息输入函数 主要功能是从键盘输入图书信息并将其写入文件中 作为图书馆的书库 以便对下面的函数进行运行 此函数是基础 2 图书借阅函数 主要借阅图书的功能和录入学生应该还书的时间 3 图书归还函数 主要实现借阅图书后 归还图书的功能 并把应该还书的时 间和实际还书的时间进行比较过期时输出学生的信息 也是该程序的的 一个重点 4 增加删除图书函数 实现的功能是实现对图书的删除 5 图书查询函数 允许按照图书编号 书名 作者 出版社进行查询 并将查 询信息输出 6 退出函数 该函数主要实现退出运行界面的功能 除上面介绍的功能之外 程序还具有退出功能 可以在程序的一次运行当 中循环执行所有的功能 并根据需要终止程序的执行 每一个图书记录都包含 图书编号 名称 出版社 作者 现有数量和总量在程序当 中 将图书记录类型定义为结构体类型 并把它写入 d 中 其他函数每次对 图书记录的访问 其数据来源都是 d 文件 这样做不但可以保证图书数据的 一致性 而且可以对图书数据进行永久保存 保证每次运行程序都可以采用原 来的数据 1 1 绪论绪论 整个程序的设计实现大致分为五个模块 其中每一个模块对应一个函数 他们的功能分别是 图书信息输入函数 input 借阅图书函数 borrow 增加 删除图书函数 adddelet 图书查询函数 search 以及归还图书信息函数 giveback 在这些函数当中 这四个函数的实现严格按照题目的要求 2 2 系统分析系统分析 功能需求功能需求 设计一个通过链表实现对图书信息进行管理的程序 要求完成以下功能 1 建立一个链表 每个结点应包含以下信息 图书号 书名及出版社 价 格 ISBN 作者 册数 2 将输入信息按图书号进行从小到大的排序 3 实现查询功能 输入书名 查询输出相关信息 4 实现插入功能 输入图书信息并插入有序链表中 5 实现删除功能 输入书名或书号 可将其信息从链表中删除 6 统计链表中图书总价值 并在屏幕上输出 7 统计该链表中价值超过某一数目的图书总数 并在屏幕上输出 8 有界面友好易于使用的菜单 数据需求数据需求 需要向系统输入图书号 书名及出版社 价格 ISBN 作者 册数 性能需求性能需求 在运行本程序时只要按照正确的操作方法不会出现无法运行的情况 系统 稳定性好 安全 可靠 3 3 总体设计总体设计 功能模块设计功能模块设计 根据分析整个系统主要划分为 4 个功能模块 分别执行要求中的功能 该系统需要有 添加 删除 查询 修改 累加 循环显示主菜单 保存信息功能 能将会员卡进行注销 利用显示函数将会员卡内所有信息显示 要求有循环显示菜单工能 功能模块图如图 1 所 示 1 输入读者 输入相关读者信息至内存中 2 输入书籍 输入书籍号 对已存的书籍信息进行查询 3 书籍管理模块 输入相应代码 对相关信息进行查询 4 退出管理模块 主菜单中输入 0 退出系统登录 图书管理系统 输 入 读 者 输 入 书 籍 书 籍 管 理 退 出 系 统 登 录 图图 1 1 图书管理系统流程图图书管理系统流程图 管管理理员员版版图图书书管管理理系系统统 新新 书书 入入 库库 查查 询询 借借 书书 登登 记记 书书 籍籍 数数 量量 书书 籍籍 信信 息息 修修 改改 还还 书书 管管 理理 书书 籍籍 信信 息息 查查 询询 图图 2 2 管理员版图书管理系统流程图管理员版图书管理系统流程图 退退 出出 查查 询询 按按 照照 读读 者者 姓姓 名名 查查 询询 按按 照照 读读 者者 编编 号号 查查 询询 按按 照照 图图 书书 作作 者者 查查 询询 按按 照照 图图 书书 名名 查查 询询 按按 照照 图图 书书 编编 号号 查查 询询 图图书书查查询询系系统统主主界界面面 图图 3 3 图书查询主界面流程图图书查询主界面流程图 系统设计方案系统设计方案 设计一个总菜单 1 登录信息 2 查询管理 3 书籍管理系统 4 退出系统 基本功能的实现都将体现在这几个菜单选项中 struct reader next RD BK h book RD h reader void Login 登陆 int Menu 主菜单 void Menu select 主菜单选择函数 void Init 初始化 void Init reader 初始化读者 void Init book 初始化图书 void Insert New Book 新书入库 int Find 查找菜单 void Find Select 查找菜单选择函数 void Find Reader 查找读者信息 void Find Book 查找图书信息 void Print reader 打印读者信息 void Print book 打印图书信息 void Borrow Book 借书函数 void Return Book 还书函数 void Save 保存信息 void Save Reader 保存读者信息 void Save Book 保存图书信息 void Load 加载信息 void Load Reader 加载读者信息 void Load Book 加载图书信息 void Login 登陆 system cls printf n n n t t t 欢迎登陆本系统 n printf n n t t 系统版权所有 n n n n n n n printf n n n t t 按 任 意 键 进 入 系 统 getchar system cls int Menu 主菜单 int sn printf n t t 图书管理系统主菜单 n printf n printf t0 退出系统 n printf t1 新书入库 n printf t2 查询 n printf t3 借书登记 n printf t4 还书管理 n printf n printf 请选择相应代码 4 4 详细设计详细设计 登录模块登录模块 开始 intj 1 m m 1 InsertLinklist Linklist L printf t输入下一个读者信息 n printf 内存已满 n exit OVERFLOW 结束 图图 4 4 输入读者信息 输入读者信息 开始 intj 1 m m 1 InsertLinklist Linklist L printf 内存已满 n exit OVERFLOW 结束 printf t输入下一个书籍信息 n 图图 5 5 输入书籍信息 输入书籍信息 借书管理模块借书管理模块 主菜单中输入读者和书籍信息后 对已存的书籍进行借阅 程序流程如图 4 所示 开开始始 读读方方式式打打开开文文件件不不成成功功 输输入入你你的的学学号号和和要要借借书书的的名名 循循环环变变量量 i i0 输输出出 borrow success 和和输输入入应应还还书书的的日日期期 输输入入应应书书日日期期 关关闭闭文文件件 结结束束 borrow failed return Y N N Y Y N N N N Y Y 图图 6 6 借书模块流程图借书模块流程图 还书管理模块还书管理模块 对于已还书籍进行管理 程序流程如图 4 所示 开开始始 以以读读取取方方式式打打开开 文文件件不不成成功功 输输入入读读者者信信息息 输输入入书书籍籍信信息息 循循环环变变量量i i i i 1 10 00 00 0 输输入入编编号号与与书书库库编编号号一一 致致 输输出出还还书书成成功功 关关闭闭文文件件 结结束束 b br re ea ak k r re et tu ur rn n 图图 7 7 还书模块流程图还书模块流程图 5 5 调试调试与测试与测试 调试调试 调试是软件开发过程中的一个重要环节 也是最复杂 对软件开发者者来 说也是最艰巨的任务 调试的任务是及时改正测试过程中发现的软件错误 具 体地说 调试过程由两个步骤组成 它从表示程序中存在错误的某迹象开始 首先确定错误的准确位置 也就是找出哪个模块或哪个语句引起的错误 然后 仔细研究推断代码以确定问题的原因 并设法改正 调试过程主要是运行编制好的程序 然后遇到错误后根据系统的提示 找 到相关的问题所在 本系统调试过程中遇到问题 原因和解决方法如下面介绍 1 程序只能在当前运行时才能实现自动生成书籍信息 而关闭系统 再次打开添加新读者又从 0 开始与之前的读者重复 导致借还信息程序管理混 乱 无法正确运行 原因 在执行后系统没有记录当前的读者信息 因为读者信息自动按 1 2 3 4 依次递增生成系统 应该记录最后所生成的读者信息 在下次运行 程序时系统会接着上次记录的读者信息自动依次生成 2 运行完程序一次有错误提醒 原因 上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示 解决方法 将上一次运行时的操作界面关闭 3 设计过程中的想法与程序中的不足 总的来说这个程序大致实现了题目的要求 但是这套程序仍然存在着很多 的问题与不足 比如 程序中主函数写的有点繁琐 有太多的嵌套 不是那么井 然有序 条理清晰 程序注释也不是很完善 对信息处理功能还有些不足之处 提示信息不明确 还有就是没能做到模糊查询 这个系统主要是参照课本手机通讯录模版编写的 同时也得到了老师和同 学的一些帮助 我在做系统的过程中也遇到了很多问题 有的是知识不足 有 的是考虑不够周全 事实证明 只靠自己的知识面还是很窄 独立处理问题能 力不是很强 以后还要加强对 c 语言的学习 我认为对于 C 语言编写的程序来说 使用方法大致都是一样的 所以如果 要改进的话 就是要改进一些算法 尽量把界面编写清楚 提示信息全面 方便易用 测试测试 软件测试是软件生存期中的一个重要阶段 是软件质量保证的关键步骤从 用户的角度来看 普遍希望通过软件测试暴露软件中隐藏的错误和缺陷 所以 软件测试应该是 为了发现错误而执行程序的过程 或者说 软件测试应该根 据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例 即 输入数据及其预期的输出结果 并利用这些测试用例去运行程序 以发现程序 错误或缺陷 过度测试则会浪费许多宝贵的资源 到测试后期 即使找到了错 误 然而付出了过高的代价 测试数据过程如下 1 登陆功能测试 输入数据 1 读者编号 23 读者姓名 tianwen 书籍编号 01 书名 xyz 作者 xxx 数量 10 预期结果 数据输入到系统中 运行结果 出现图书管理系统主菜单 说明 登陆功能实现 2 借书功能测试 3 还书功能测试 6 6 结论结论 计算机综合训练顺利完成 任务书中所提出的要求全部实现 可以对会员 信息进行添加 修改 删除以及按各种信息查找 可将会员本次消费金额累加 到会员卡上 能够自动生成会员卡号并且将各种信息保存到文本文件中 不过 这个程序还有些不够完善 例如 在添加新会员时当会员信息全部输入之后系 统中的全部会员信息自动显示 这样非常占用操作界面 使操作不是十分清晰 再一个就是系统无法正确识别身份证号和电话好码只能靠会员卡管理员的认真 细心才能减少出错 改进方式 调用一个可以判断号码位数的函数 如果输入 位数不合法则提出警告重新输入 结束语结束语 在这一个星期的实践中 通过编写这个图书管理系统 我体会到了 c 语言 学习的实用性 将理论和实践结合在一起 用先进的计算机工具方便人们的生 活 C 语言程序的编写首先要从大局考虑 把自己编写整个程序的思想都写在 草稿上 这样有助于自己编写程序 在编写时要完善注释 方便其他人理解程 序 编写的程序从理论上来说并没有错 但一上机就问题不断 甚至有些课本 上的知识照搬不变 也不能得到正确的结果 有时一个程序改了一遍又一遍 但就是不能成功 编程显得枯燥乏味 看似简单的程序题 在调试时却屡屡出 错 经反复的修改后 结果正确了 这时所有的乏味都显得那么无力 一切都 是值得的 我认为 开发一套系统 最重要的是细心 并且思考要全面 结合实际 充分考虑到客户的需求和现实意义 不管什么系统 只用运用到实际应用 中 才具有现实意义 所以 c 语言程序的实用性很强 我们以后还要更加 努力认真地学习编程语言 参考文献参考文献 附录附录 1 1 用户手册 用户手册 点击运行 首先出现的是菜单界面 选择菜单选项进行操作 可进行如图 8 所示 系统主界面 选择数字进入 退出系统 图图 8 8 菜单界面菜单界面 选择 1 进入系统 然后出现功能菜单 图图 9 9 登陆功能登陆功能 输入读者和书籍 然后出现功能菜单 图图 1010 图书管理系统主菜单图书管理系统主菜单 附录附录 2 2 源程序 源程序 include include include define Max 3 typedef struct book char book num 10 char book name 20 char book writer 10 int book kc int book xy struct book next BK typedef struct borrow char borrow book num 10 char limit date 8 BO typedef struct reader char reader num 10 char reader name 10 int right BO borrow Max struct reader next RD BK h book RD h reader void Login 登陆 int Menu 主菜单 void Menu select 主菜单选择函数 void Init 初始化 void Init reader 初始化读者 void Init book 初始化图书 void Insert New Book 新书入库 int Find 查找菜单 void Find Select 查找菜单选择函数 void Find Reader 查找读者信息 void Find Book 查找图书信息 void Print reader 打印读者信息 void Print book 打印图书信息 void Borrow Book 借书函数 void Return Book 还书函数 void Save 保存信息 void Save Reader 保存读者信息 void Save Book 保存图书信息 void Load 加载信息 void Load Reader 加载读者信息 void Load Book 加载图书信息 void Login 登陆 system cls printf n n n t t t 欢迎登陆本系统 n printf n n t t 系统版权所有 n n n n n n n printf n n n t t 按 任 意 键 进 入 系 统 getchar system cls int Menu 主菜单 int sn printf n t t 图书管理系统主菜单 n printf n printf t0 退出系统 n printf t1 新书入库 n printf t2 查询 n printf t3 借书登记 n printf t4 还书管理 n printf n printf 请选择相应代码 for scanf d fflush stdin if sn4 printf n 错误 请重新输入 else break return sn void Menu select 主菜单选择函数 for 循环调用模式 保证能进行重复操作 switch Menu 功能选择 case 0 system cls 清楚屏幕先前的显示内容 Save printf n n t 文件保存成功 n printf n n t 欢迎下次使用本系统 n getchar exit 0 case 1 Insert New Book break case 2 Find Select break case 3 Borrow Book break case 4 Return Book break default printf n 错误 exit 0 void Init 初始化 Init reader Init book void Init reader 初始化读者信息 RD p0 int i printf n 读者初始化开始 请输入读者信息 n 包括编号 姓名 n p0 RD malloc sizeof RD h reader p0 printf n 请输入读者的信息 n printf ReaderNo 输入读者编号 唯一 scanf s p0 reader num printf ReaderName 输入读者姓名 不唯一 scanf s p0 reader name p0 right 0 for i 0 iborrow i borrow book num 0 所借图书直接置为 0 即没有借书 strcpy p0 borrow i limit date 0 p0 next NULL printf n 读者信息初始化完毕 按任意键继续下一步操作 n getchar system cls void Init book 初始化图书信息 BK p0 printf n 图书初始化开始 请输入图书信息 n 包括编号 书名 数量 n p0 BK malloc sizeof BK h book p0 printf n 请输入图书信息 n printf BookNo 输入图书编号 唯一 scanf s p0 book num printf BookName 输入图书名称 scanf s p0 book name printf BookWriter 输入图书作者 scanf s p0 book writer printf Number 输入图书数量 scanf d p0 book xy p0 book kc 开始时图书现有量和库存量相等 p0 next NULL printf n 图书信息初始化完毕 按任意键继续下一步操作 n getchar system cls void Insert New Book 新书入库 BK p p0 p1 p p1 h book printf n 新书入库模块 n printf n 请输入新书信息 n 包括书号 书名 数量 n p0 BK malloc sizeof BK printf BookNo scanf s p0 book num while strcmp p0 book num p1 book num 0 if strcmp p0 book num p1 book num 0 此处分两种情况 若图书编号存在 则 直接进库 只须输入书的数量 printf n 此编号图书已存在 直接入库 n printf Number scanf d p1 book kc p0 book kc p1 book xy p0 book kc else 若不存在 则需要输入其他的信息 然后在进行插入操作 printf BookName scanf s p0 book name printf BookWriter scanf s p0 book writer printf Number scanf d while p next p p next if h book NULL h book p0 此处分两种情况 链表中没有数据 head 直接指向 p0 处 else p next p0 此处分两种情况 链表中有数据 链表中最后元素 的 next 指向 p0 处 p0 next NULL p0 book xy p0 book kc printf n 新书入库完毕 按任意键继续下一步操作 n getchar system cls int Find 查找菜单 int sn printf n t t 信息查询菜单 n printf n printf t0 返回上级 t n printf t t n printf t1 查找图书 2 查找读者 t n printf t t n printf t3 打印图书 4 打印读者 t n printf n printf 请选择相应代码 for 循环调用模式 保证能进行重复操作 scanf d fflush stdin if sn4 printf n 错误 请重新输入 else break return sn void Find Select 查找菜单选择函数 system cls for 循环调用模式 保证能进行重复操作 switch Find 功能选择 case 0 system cls Menu select break case 1 Find Book break case 2 Find Reader break case 3 Print book break case 4 Print reader break default printf n 错误 exit 0 void Find Reader 查找读者信息 RD p int i char find reader 10 p h reader printf n 读者信息查询模块 n printf n 请输入你要查询读者编号 scanf s find reader while strcmp p reader num find reader 0 if strcmp p reader num find reader 0 printf n 读者编号 s 的信息为 n find reader printf ReaderNo tReaderName 此处这样处理 是为了能实现一个读者能借多本 书 Max 可以改 printf n printf t s t t s p reader num p reader name for i 0 iborrow i borrow book num printf t t s p borrow i limit date printf n else printf n 此读者编号不存在 请核对 按任意键返回 getchar system cls void Find Book 查找图书信息 BK p char find book 10 功能很简单 读者编号唯一 查找只须一次遍历 p h book printf n 图书信息查询模块 n printf n 请输入你要查询图书编号 scanf s find book while strcmp p book num find book 0 if strcmp p book num find book 0 找到了就打印 否则提示不存在 或出错 printf n 图书编号 s 的信息为 n find book printf nBookNo t tBookName tBookWriter tXianYou tKuCun n printf s t t s t t s t t d t t d n p book num p book name p book writer p book xy p book kc else printf n 此图书编号不存在 请核对 按任意键返回 getchar system cls void Print reader 打印读者信息 RD p int i p h reader printf n 读者信息如下 n n printf ReaderNo tReaderName 此处这样处理 是为了能实现一个读者能借多本书 Max 可以改 printf n while p NULL 遍历链表一次就可以了 printf t s t t s p reader num p reader name for i 0 iborrow i borrow book num printf t t s p borrow i limit date printf n p p next printf n 读者信息打印完毕 按任意键继续下一步操作 getchar system cls void Print book 打印图书信息 BK p p h book printf n 图书信息如下 n n printf BookNo t tBookName tBookWriter tXianYou tKuCun n 直接打印所有图书的信息 遍历链表一次就可 while p NULL printf s t t s t t s t t d t t d n p book num p book name p book writer p book xy p book kc p p next printf n 图书信息打印完毕 按任意键继续下一步操作 getchar system cls void Borrow Book 借书模块 BK p0 RD p1 char bo num 10 rea num 10 lim date 8 int i p0 h book p1 h reader printf n 借书模块 n printf n 请输入借书的读者编号 先输入借书的读者信息 scanf s rea num while p1 next NULL if p1 next NULL goto END printf n 请输入你要借的书的编号 scanf s bo num while strcmp bo num p0 book num 0 if p0 next NULL else if p0 book xyright Max 判断此读者借书权限是否已达最大 printf n 不好意思 借书数目已满 不能借书 n 按任意键返回 else if strcmp p1 borrow 0 borrow book num 0 0 此读者若已经 借书 再判断此读者是否要借两本一样的书 for i 0 iborrow i borrow book num bo num 0 printf n 抱歉 同一个读者不能同借两本相同的书 n else if strcmp p1 borrow i borrow book num 0 0 如果没有重复 printf n 请输入你要归还图书的日期 scanf s lim date strcpy p1 borrow p1 right borrow book num bo num 记录 所借书号 并且借书数目加一 现存量减一 strcpy p1 borrow p1 right 1 limit date lim date p0 book xy printf n 读者编号 s 借书完毕 按任意键继续下步操作 p1 reader num else 此读者从未借过书 printf n 请输入你要归还图书的日期 scanf s lim date strcpy p1 borrow p1 right borrow book num bo num 记录所借书号 并 且借书数目加一 现存量减一 strcpy p1 borrow p1 right 1 limit date lim date p0 book xy printf n 读者编号 s 借书完毕 按任意键继续下步操作 p1 reader num END getchar system cls void Return Book 还书模块 BK p RD q int i j find 0 char return book num 10 return reader num 10 p h book q h reader printf n 还书模块 n printf n 请输入要还书的读者编号 基本同上 scanf s return reader num 注意 数组的输入没有 if q next NULL 设置标志 用于判断读者是否借了此书或是否出错提前结束 若提前出错 则 find 2 若 借了 则 find 1 若没借为 find 0 printf n 此读者编号不存在 按任意键返回 n goto end printf n 请输入读者还书的编号 scanf s return book num while p next NULL if p next NULL 设置标志 用于判断读者是否借了此书或是否出错提前结束 若提前出错 则 find 2 若借了 则 find 1 若没借为 find 0 printf n 错误 此图书编号不存在 按任意键返回 n goto end for i 0 iborrow i borrow book num 0 如果此读者 借了此书 find 1 设置标志 用于判断读者是否借了此书或是否出错提前结束 若提前 出错 则 find 2 若借了 则 find 1 若没借为 find 0 for j i jborrow j borrow book num q borrow j 1 borrow book num strcpy q borrow j limit date q borrow j 1 limit date strcpy q borrow Max 1 borrow book num 0 strcpy q borrow Max 1 limit date 0 p book xy q right printf n 编号 s 的读者还书完毕 按任意键继续下步操作 return reader num if find 0 为什么有个 find 0 因为遍历时循环 Max 次 如循环

温馨提示

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

评论

0/150

提交评论