c语言图书管理系统开发实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.2.2
数据结构
年份的值可以处理为4位整数,可以存储在16位二进制数中 ;月份和日子都可以处理为2位整数,都可以存储在8位 二进制数中:因此,可以将时间数据类型TimeInfor处理 为位域类型,声明如下: 01 typedef struct { 02 unsigned year : 16; /* 年*/ 03 unsigned month : 8; /* 月*/ 04 unsigned day : 8; /* 日*/ 05 } TimeInfor; /* 时间信息类型*/
辅助模块:全局配置模块。在这个模块中,会包含一些全局 使用的信息,比如全局变量的定义,const变量、具名常 量、枚举常量的定义等。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.2.1
Байду номын сангаас
系统架构
根据以上功能模块的划分,本系统的软件结构设计如下图所 示。
北京源智天下科技有限公司
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.1
需求分析
整理以上的需求分析,可以得出本图书管理系统需要实现的 功能主要包括以下三点:
提供友好的用户交互界面; 提供书籍的增加、删除、查询、批量创建等操作; 提供历史日志以记录操作信息。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
menu_add函数提供了增加书籍的交互命令,从标准输入获 取书籍信息,并调用数据管理模块中的书籍增加函数 book_add,最后调用日志模块中的记录功能。进入 menu_main函数后,当出现图21-4后,如果选择选项1 ,则会触发memu_add函数。由于该菜单函数只在用户 界面模块中调用,并只在menu.c函数中调用,因此可以 将其定义为static函数。
21.2
系统设计
系统设计阶段可以理解为程序的概要设计,需要完成对系统 结构的分析和设计,以及设计系统需要的主要数据结构 。本小节将基于需求分析的结果,依次讨论了图书管理 系统的系统架构和数据类型。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.2.1
系统架构
根据需求分析的结果,本系统至少要分为以下几个模块: main函数模块、用户界面管理模块、数据管理模块和历 史日志模块。其中: main函数模块的主要功能为提供程序入口、前期环境设置 、调用主要的执行函数和程序结束前的数据处理。
第21章
图书管理系统开发实例
前面的章节系统地介绍了C语言的基本概念和重要知识点, 并通过大量的范例来实现演示它们的使用方法和特性。 为了使读者能够掌握C语言开发的基本步骤和熟练使用C 语言的一些特性,下面以图书管理系统为例来介绍的应 用程序开发过程。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.2.2
数据结构
本系统中的书籍数据是大批量数据,因此需要选择使 用数组或者链表保存书籍数据。考虑到图书管理系 统会很频繁地访问书籍信息,而增加和删除的操作 相对较少,因此选择使用数组来保存。而又由于书 籍数目是不可预期的,因此最好使用动态数组来处 理数据。 注意:数据结构要考虑时间复杂度和空间复杂度,同 时还要考虑实现的复杂度。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.2
代码实现
menu_batch_del函数,输出批量删除书籍的二级 菜单,并选择下一操作。 menu_advanced_sear函数,输出高级搜索书籍 的二级菜单,并选择下一操作。 menu_reload函数,输出载入书籍数据的二级菜 单,并选择下一操作。 menu_exit函数,退出操作所有二级菜单,在这里 给出提示信息,并退出程序。 menu_error函数,提示错误信息,并触发下一操 作。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.7
编写menu_search函数:输出搜索书 籍的二级菜单
menu_search函数与menu_delete函数类似。它提供了搜 索书籍的交互界面。同样地,本系统提供了多种搜索书 籍的功能,包括按照书名搜索、按作者搜索、按出版社 搜索等,因此本函数需要提供二级菜单,以供用户选择 ;同样地,提供二级菜单后,需要提供一个选择结构以 触发数据管理模块中的各种相应搜索操作;最后,同样 要提供日志记录和回到本级目录的功能。由于本函数功 能和逻辑都与menu_search类似,由于篇幅限制,在此 不多做介绍。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.3
main模块
main模块包含在main.c文件中,其主题有三个函数:main 函数、configure函数和clean函数。main函数即为读者 早已熟悉的程序入口函数,其负责调用系统执行时的各 个主要函数。而configure函数的功能为在程序开始时初 始化或配置各种必须的变量和环境。
联系方式:http://www.rzchina.net
21.4
用户界面模块
用户界面模块的主要功能为图书管理系统的使用提供一个命 令选择和导航的功能。现在流行的管理软件基本都是基 于图形界面的,C语言也可以实现图形界面,但由于篇幅 的限制,本系统只提供一个基于命令行的交互界面。具 体地讲,本系统提供的交互方式与现行的电话服务系统 类似:先列出一些以数字引导的命令选项,再由使用者 输入选项编号实现命令选择。
代码实现
用户界面模块功能的代码实现都包含在menu.c文件中, menu.h文件包含了menu.c文件的接口信息。menu.c中 需要含有所有的菜单打印函数和选择命令后触发下一操 作的过程。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.2
代码实现
因此,menu.c文件需要包括以下函数: menu_main函数,打印主界面和第一级菜单,并选择 下一操作。 menu_add函数,打印增加书籍的二级菜单,并选择 下一操作。 menu_delete函数,输出删除书籍的二级菜单,并选 择下一操作。 menu_search函数,输出搜索书籍的二级菜单,并选 择下一操作。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.3
编写menu_main函数:打印主界面和 第一级菜单
menu_main函数分为两部分,第一部分为主菜单内容,第 二部分为输入选择,第三部分为根据选择触发对应的选 项。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.1
需求分析
对于图书管理系统而言,其最重要的功能是管理图书,包括 增加书籍、删除书籍和查询书籍。其中,删除书籍和查 询书籍的功能又可以细化为很多功能,比如删除某一个 时间段内增加的书籍、删除某个作者的书籍、显示某个 作者的所有书籍、显示书名带某个关键字的书籍等等。 其次,需要提供一个友好的交互界面,这是用户接触到 的最直接的东西,其设计必须人性化;然后还需要一些 辅助功能,比如日志功能,它可以将所有的操作都记录 在案。实际上,一个完整的图书系统还需要包括另外两 个重要的功能:用户管理和数据库系统。由于篇幅有限 ,本系统将不考虑这两个功能。
用户界面管理模块主要提供用户交互界面,并在用户选择命 令后触发相应模块。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.2.1
系统架构
数据管理模块的功能为本系统的核心模块,提供所有对书籍 数据的操作请求的处理,包括增加书籍、删除书籍、搜 索书籍、批量删除书籍、高级搜索书籍等等。 历史日志模块主要提供用户行为记录、系统信息记录、异常 信息记录等功能。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.1
程序流程
根据以上功能要求的描述设计出本系统的菜单导航示意图如 下图所示。该图同时也是本模块主要函数以及函数间调 用的程序流程图。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.2
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.6
编写menu_delete函数:输出删除书 籍的二级菜单
menu_delete函数提供了删除书籍的交互界面。本系统提供 了多种删除书籍的功能,包括按照书名删除、按作者删 除、按出版社删除等,因此本函数需要提供二级菜单, 以供用户选择;与menu_main函数类似,提供二级菜单 后,需要提供一个选择结构以触发数据管理模块中的各 种相应删除操作;最后,同样要提供日志记录和回到本 级目录的功能。
联系方式:http://www.rzchina.net
21.2.2
数据结构
本图书管理系统的核心数据对象是书籍。书籍信息中包含很 多信息,包括:书名、作者、出版社、出版日期、入库 日期、入库编号和页数等。因此,处理书籍信息的数据 类型必须为结构体,将其命名为BookInfor。其中,书名 、作者和出版社的数据类型为字符数组;入库编号和页 数选择使用整型;而出版日期和入库日期由于包含年、 月、日信息,因此需要使用另一个结构体,将其命名为 TimeInfor。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.1
程序流程
将以上本模块的功能具体化并整理为如下: (1)进入用户界面模块(其方式为在main函数中调用该模 块的主菜单)。 (2)打印出主菜单,要求含有系统名称和第一级菜单,该 第一级菜单的内容要求包括主要的功能选择:增加书籍 、删除书籍、搜索书籍、批量删除、高级搜索和退出。 (3)提示用户根据菜单选择要执行的功能。 (4)进入选择的功能模块;如果该功能模块又含有多个选 择,要求输出下一级菜单。所有的下层菜单选项中,要 求都含有返回上级菜单的选项。
21.4.4
编写menu_choice函数
此函数只在menu.c中使用,因此可声明为static函数。其功 能为从键盘输入一个大于0并且小于指定数值的整数。
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.5
编写menu_add函数:打印增加书籍的 二级菜单,
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.3
main模块
clean函数的作用与configure函数相对应,其负责程序结束 前的清理工作,比如清除程序中分配的堆内存等。本模 块的程序流程图如下图所示,这也就是main函数的程序 流程图。
北京源智天下科技有限公司
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.2.2
数据结构
因此,书籍信息类型可以声明如下: 01 typedef struct { 02 char name[LEN_BOOK_NAME]; /* 书名*/ 03 char author[LEN_AUTHER_NAME]; /* 作者*/ 04 char publisher[LEN_PUBLISHER_NAME]; /* 出 版社*/ 05 int serial; /* 编号*/ 06 int page; /* 页数*/ 07 TimeInfor time_pub; /* 出版日期*/ 08 TimeInfor time_in; /* 入库日期*/ 09 } BookInfor; /* 书籍信息类型 */
北京源智天下科技有限公司
联系方式:http://www.rzchina.net
21.4.2
代码实现
在这些函数中,除了menu_main函数会被外部调用外 ,其他函数暂时都只需要在本文件内使用,因此 menu.h文件中只需包含menu_main这个函数的声 明,同时其余函数都声明为static函数。若在以后需 要在其他文件中调用这些static函数,再回来修改它 的声明即可。 注意:把所有不允许外部使用的函数都定义为static函 数,以增强模块封装性。
相关文档
最新文档