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

下载本文档

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

文档简介

HUBEIUNIVERSITYOFAUTOMOTIVETECHNOLOGYC语言程序设计课程设计报告课设题目图书销售管理系统专业电气工程及其自动化班级KT12231姓名成绩完成日期2012年12月28日2013年1月11日指导教师目录目录1课程设计目的22需求分析221要求222任务描述223运行环境324开发工具33总体设计331系统流设计332系统模块设计44详细设计541数据结构设计542模块接口设计643以下是几个主要模块的流程图75运行结果1151主菜单界面1152图书信息查询界面1253图书销售界面1454图书信息整体浏览界面1955图书信息删除界面1956图书信息保存界面2257退出程序2358图书信息新建界面2359修改密码236程序调试与测试2361程序调试2362程序测试277问题与不足308建议319编程体会3110程序源代码3111参考文献5612用户使用手册571课程设计目的1通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。2通过课程设计,进一步掌握C语言中重要的数据结构。掌握并熟练运用指针、链表、结构体、文件等数据结构。3通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。4通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。5通过课程设计,加强了自己的程序分析能力。2需求分析21要求1遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。2运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。3学会利用数组、结构体、链表进行相关信息表示。4功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。11C语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。22任务描述此系统以图书销售为背景,支持书店管理人员对图书信息进行新建、查询、整体列表浏览、删除(需要密码),同时也支持图书购买者进行图书信息的查询。图书信息从文件中载入,当图书信息变动过时,亦可实现保存。具体功能实现如下1)图书信息载入系统自动从文件中读入书库信息,以便操作者可以实现相关需求。2)新建功能当书库进了不同的新书回来时,可通过此功能将新书加入书库。3)图书信息整体浏览功能实现对书库信息的整体浏览,使书库管理人员对书库信息有一个整体的了解。4)图书信息查询功能实现对图书按书号、书名或作者名进行查询。5)图书信息删除功能实现对已卖完的图书进行清理。6)修改密码功能书店管理人员可以拥有密码,进行图书删除。通过修改密码,确保书库信息安全23运行环境1WINDOWSXP/7系统2VC60编译环境24开发工具C语言3总体设计31系统流设计本系统的功能模块如图1所示,主要有以下模块图1系统功能模块图32系统模块设计1课程名称界面构造函数VOIDAUTHER,实现软件名称以及作者的显示。2系统欢迎界面构造函数VOIDWELCOME,实现欢迎使用图书销售管理系统的显示。课程名称界面程序欢迎界面主菜单界面自动导入书库信息图书信息新建图书信息查询销售图书图书信息删除图书信息保存修改密码退出程序图书信息整体浏览退出查询按书号查询按书名查询按书号查询按书号删除按书名删除按书号删除退出删除按书号查询3主菜单界面构造函数INTMENU,实现系统主菜单的显示。4图书信息自动导入构造函数VOIDLOADREC,实现系统自动导入图书信息。5图书信息新建构造函数VOIDCREATE,实现新建图书信息。6图书信息查询构造函数VOIDSEARCH,实现查询界面的显示。并通过对按按书号查询函数SEARCH_BY_BNUM、按书名查找函数SEARCH_BY_BNAME、按作者查找函数SEARCH_BY_AUTHOR的调用,实现对图书信息的查询。7图书信息整体浏览构造函数VOIDLIST,显示当前书库所有书的信息。8图书销售构造函数VOIDBUY,实现通过书号购书,并可调用查询功能,实现从其他途径找到书号。9图书信息删除构造函数VOIDDELET,实现对已售完的图书进行清理,并通过对按书号删除函数DELET_BY_BNUM、按书名删除函数DELET_BY_BNAME、按作者删除函数DELET_BY_AUTHOR的调用,实现对图书信息的删除。10图书信息保存构造函数VOIDSAVE,实现对图书信息变动后的保存。11修改密码构造函数VOIDREDEF,实现修改密码。12退出系统构造函数VOIDEXIT0,实现退出系统。4详细设计41数据结构设计根据系统要求,系统中需要保存的数据信息,其结构如下数据项名称数据项系统表示数据类型数据长度备注书号BNUMCHAR21书名BNAMECHAR41作者AUTHORCHAR11售价BPAYFLOAT4书存在状态BENSHUINT4为了充分利用内存空间和实现不受限制的新建、载入图书信息,采用链表的结构保存图书信息,在新建或导入一本图书信息时,创建一个图书信息的节点,将其插入到链表中,示意图如下。图书信息1图书信息2通讯录信息1221图书信息3图书信息4为此,需声明一个类型为STRUCTBOOK的结构体,其成员为图书的基本信息。然后通过对指针、链表、文件等数据结构的操作,实现对图书信息信息的载入、新建、查询、整体浏览、删除、保存,销售图书入,等一系列操作。其中,结构体定义如下STRUCTBOOKCHARBNUM21CHARBNAME41CHARAUTHOR11FLOATBPAYINTBENSHUSTRUCTBOOKNEXT42模块接口设计1所有函数模块声明如下VOIDAUTHER/显示课程名称/VOIDWELCOME/显示欢迎界面/VOIDMENU/主菜单函数,显示主菜单,并返回用户的选择/VOIDLOADREC/自动导入书库信息/VOIDCREATE/新建图书信息/VOIDLIST/图书信息整体浏览/VOIDBPAY/销售图书/VOIDDELET/删除已售完的图书信息/VOIDDELET_BY_BNUM/通过书号删除/VOIDDELET_BY_BNAME/通过书名删除/VOIDDELET_BY_AUTHOR/通过作者删除/VOIDSEARCH/查询书存在状态/VOIDSEARCH_BY_BNUM/通过书号查询/VOIDSEARCH_BY_BNAME/通过书名查询/VOIDSEARCH_BY_AUTHOR/通过作者查询/VOIDSAVE/保存记录/VOIDREDEF/修改密码/VOIDEXIT0/退出/2并定义14个全局变量INTSAVE_FLAG0/图书信息是否保存标志/STRUCTBOOKHEADNULL,P1,P2,P3/用于新建和导入图书信息/HEAD2NULL,P4,P5,P6/用于销售图书/INTBUY_FLAG0/买书时,是否调用过查询功能标志/INTSHAN_FLAG0/删书时,是否调用过显示已售完书功能标志/INTT0/记录导入的书本数/CHARMIMA11“123456“/初始密码/3主要模块的实现系统以主函数INTMAIN为入口,首先通过调用VOIDAUTHOR显示软件名称及技术开发者、调用VOIDWELCOME显示欢迎界面,再调用LOADREC函数导入书库信息,然后通过SWITCHMENU,显示主菜单,并利用INTMENU接受用户的返回值返回个主函数,再调用相关的函数进入到下一级菜单进行相关操作。43以下是几个主要模块的流程图1主函数N主函数调用VOIDAUTHER、VOIDWELCOME、VOIDLOADREC()调用INTMENU接受INTMENU的返回值YYN图2主函数流程图2导入书库信息函数YNNY图3导入书库信息函数流程图打开文件是否成功申请一个空间文件是否结束结束将信息放入空间中关闭文件提示打开文件失败是否为0是否合法退出系统调用相关函数需要修改的学生学号是否存在修改界面是选择修改内容实现修改回主菜单图3信息浏览流程图3删除图书信息函数YYNNNYYNYY输入密码是否正确重新输入是否正确N结束选择一种删除方式通过书号删除通过书号删除通过书号删除按选择的删除方式输入是否存在提示不存在是否售完不能删除删除是否继续删除是否显示已售完书结束是否继续删除N2NYN图4删除图书信息函数流程图4销售图书NYYNNYNYN申请一个空间输入书号是否存在是否售完将信息放入空间重新输入书号显示已购图书是否结束购书是否确认购买撤销购买是否调用查询显示收费提示售完是否为0申请一个空间Y图5销售(购买)图书函数流程图5运行结果51主菜单界面图6主菜单界面输入功能选择,系统自动进入相应功能界面。52图信息查找界面图7图书信息查找界面输入选择进入相应查询方式图8进入书号查询界面也可选其他选项进入相应查询界面图9通过书号查询输入书号错误,按回车又返回查询菜单图10通过书号查找结果显示一本书只有一个书号图11通过书名查找结果显示同种书名的书可以有多本53图书销售界面图12图书销售界面默认操作者知道书号图13书号输入有误不知道书号可以选择Y调用查询功能通过其他方式找到所要购买的书的书图14通过书名查找后界面调用查询后可以查到你要购买的书的书号图15通过调用查询购买了图书界面此时可按N结束购书,按任意键继续购书图16不调用查询图17购买图书界面通过书作者找到了想要的图书图18图书购买后,已购图书显示界面图19确认购买界面图20购买成功此时确认了购买54图书信息整体浏览界面图21图书信息整体浏览55图书信息删除界面图22图书信息删除界面图23密码错误界面有3次输密码的机会,防止恶意试密码图24密码多次错误界面此时按回车会返回到主菜单图25图书删除界面此时是密码真确后进入备注接下来选择相应删除方式进入图书删除后和图书购买操作相似,同样可以调用其它函数(已售完图书显示函数)以方便删除,在此就不在重复操作演示。56图书信息保存界面图26图书信息保存界面此时是图书信息变动过图27重复保存界面图书信息未变动时进入保存也是此界面57退出程序界面图28退出程序界面此时图书信息变动过,未变动时直接结束程序58图书信息新建界面(略)备注图书信息新建功能为附加的功能,程序本身没有要求要有此项功能,在此就不演示。59修改密码界面(略)备注修改密码功能为附加的功能,程序本身没有要求要有此项功能,在此就不演示。6程序调试与测试61程序调试(1)各模块分别调试过程及结果。(1)程序欢迎界面和程序名称界面做起来比较容易,没有出错。题目显示是老师临时加的一个要求,做起来也没出错。(2)主菜单界面我是按照老师给的一个参考程序做的,后来自己又优化了一下,没有出问题。(3)书库信息导入函数VOIDLOADREC。书库信息导入到程序中,我是用的链表。最难得地方就是建立链表,刚开始时,我用两个指针进行操作。但是存储空间必须刚开始就要申请一个,然后根据文件中的数据,进行循环,动态申请。这样就会多出一个结点,当最后释放这个节点时,两个指针就操作不了。后来参考老师的程序,用三个指针,很顺利的就解决了。如果文件打开失败的话,释放结点就会出错。比如我的程序导入书库信息中的P3NEXTNULL,因为文件打开失败,这样就不会进入动态申请存储空间,这样P3NEXTNULL就会没有意义。解决办法进入导入书库函数(VOIDLOADREC)时,执行P3HEAD即使P3有所指向,就可以解决。(4)查询函数VOIDSEARCH。通过书号查询时实现比较容易,找不到时就直接显示找不到,找到就输出,因为一个书号只会对应一本书,循环好做。而通过书名和作者查询时,可以有多本同名的书或有多本同作者的书。这时,就需要先做一个循环,看操作者要查询的书名或作者是否存在,若在,就再弄一个循环,从刚才找到的结点后面再开始查找,将与刚才找到的结点相同的信息的结点再输出,直到结点全部检查完。5图书销售函数VOIDBUY,为了购买(任何操作者对管理系统来说都是图书购买者)图书操作简便,我将程序限定在只能通过书号来购买图书,因为一个书号只会对应一本书。但这样就会产生一个问题,如果购买者不知道书号,但知道书名或作者,那他就购买不成图书了。解决办法程序首先默认购买者知道书号,当没有找到购买者所找的书号时,程序就会提示,是否要调用查询功能,当执行调用时,购买者就可以根据自己知道的图书信息(书名或作者),选择相应的查询渠道,这样购买者就可以查看自己要找的书在不在,若在,就可以看着列表信息,重新输入书号进行购买,这样就间接支持了多渠道购买。为了满足多次购买,我用了一个循环,当购买者想结束购买时,执行相应按键,才可结束购买。当在最后结束购买时,程序也会提示购买者是否确认购买,此时亦可确认,也可撤销,这样就比较符合实际要就和人性化。(6)图书信息整体浏览函数VOIDLIST,实现起来较简单,直接输出结点,直至结束。(7)图书信息删除函数VOIDDELET,进入图书删除需要密码,没有密码者不能进行删除操作,为了防止有人恶意试密码,程序限制了密码输入次数,超过了3次,程序就会返回到主菜单。程序要求支持通过书号、书名、作者,三种删除方式,没卖完的书不能删除。通过书号删除时实现起来比较简单,而通过书名和作者删除就很麻烦,因为同一个书名或作者的书可以有多本,而这多本里面可能一部份已尽卖完,有些又没卖完,要删除的结点还可能不止一个。为了解决这个问题,在通过书号删除时,我通过WHILE()循环,找到要删除的图书书号,找到该结点直接删除,但是通过书名和作者删除时,这种方式就行不通了,由于再删除过程中需要判断要删除的结点的位置,这样就不能同时删除已售完的多本同书名或作者的书。于是再通过书名和作者删除时,我先创建一个链表,将满足删除要求的图书储存在一起,然后将做一个循环判断,将书库中与该链表储存的相同的图书信息一个个删除(删除方式同通过书号删除),直至该链表中的结点走完。这种方式实现起来简单,但比较耗费程序运行的速度,解决思路不容易想到。再删除过程中,为了便于删除,防止操作者不知道有哪些书已经卖完,程序可以调用函数VOIDBOVER,显示已经售完的书,看着列表信息进行删除。(8)保存记录函数VOIDSAVE,实现比较简单。(9)退出VOIDEXIT0,退出时,为了防止操作者忘记保存记录,在退出程序时,程序会提醒操作者是否需要保存,这时操作者可以以选择保存或不保存,这样在操作者操作失误时,在退出时,也避免了强制保存。(10)新建书库信息函数和修改密码函数,题目并未作要求,在此就不再介绍。(2)集成调试过程及结果。在各模块协调操作时,几乎各个功能模块都需要得到头指针(HEAD),为此我将1保存导入书库信息的链表中需要用到的指针定义成全局的,这样便于操作,可防止头指针传错。为了使在退出和记录保存函数中,在不同的情况下给出不同的提示信息,我定义2了一个标志性全局变量INTSAVE_FLAG0/信息变动标志/。在可使书库信息变动的函数中,当书库信息变动成功时,就执行SAVE_FLAG1,这样在退出或保存过程中就知道书库信息是否变动过,以便实现相应功能。在购书过程中,为了间接支持多渠道购书,可以调用查询函数VOIDSEARCH,3在主菜单中也可执行查询功能,但是在这两种调用过程中,要求却不是一样的,在购书函数中调用时,查询功能是分次调用的,不能连续执行查询,而且显示的查询信息是不能清屏的,因为操作者需要看着查询得到的列表信息输入书号。在主函数中执行此项功能时,是要支持连续查询的,而且需要清屏上次执行查询时显示的信息。为了实现这个要求我定义了一个全局变量INTBUY_FLAG0,在菜单中执行查询时,首先执行BUY_FLAG0,在购买图书函数中调用查询功能时,首先执行BUY_FLAG1然后通过判断BUY_FLAG的值,在查询功能中实现相应功能。在删除图书时,在要删除的图书信息没找到时,程序会提醒操作者,是否要显示4已售完的图书VOIDBOVER,在调用VOIDBOVER后,操作者可以看着列表图书信息进行删除,此时程序就不能再可以返回到删除方式菜单,为此我定义了一个全局变量INTSHAN_FLAG0,当调用了VOIDBOVER后执行SHAN_FLAG1,当删除操作成功后,执行SHAN_FLAG0,这样在显示删除菜单时根据SHAN_FLAG的值,就可以完成相应的功能。结合这些全局变量会使界面变得更流畅和美观。密码我将其定义成全局变量,这样当我修改密码(题目未作要求,是我自己加的)5时,进行删除操作的密码就会跟着改变。导入书库信息时,程序读文件时会将下一行的回车符读进来,这样就会出现乱码。6如果我删掉文件中的最后一个回车符,导入和整体浏览图书信息会正常,但是当我执行新建图书信息(题目为做要就,是我自己加的)或者图信息变动过后,保存信息时,文件自身又会在数据最后加上一个回车符,后来我上网搜到资料,弄懂了是咋回事。我们一般读取文件方式HEADP3P1STRUCTBOOKMALLOCLEN/开辟一个新单元/P1NEXTNULLWHILEFEOFFPNFSCANFFP,“SSSFD“,P1BNUM,P1BNAME,P1AUTHOR,P2STRUCTBOOKMALLOCLEN/继续开辟一个新单元,直到文件读完/P1NEXTP2P3P1P1P2P1NEXTNULLFREEP2P3NEXTNULL/释放多申请的一个单元/这样,当FSCANF读到最后一个回车符时,发现文件结束,但这时,信息已经读入。真确读取HEADP3P1STRUCTBOOKMALLOCLEN/开辟一个新单元/P1NEXTNULLP7STRUCTBOOKMALLOCLENFSCANFFP,“SSSFD“,P7BNUM,P7BNAME,P7AUTHOR,WHILEFEOFFPNP1P7P2STRUCTBOOKMALLOCLEN/继续开辟一个新单元,直到文件读完/P1NEXTP2P3P1P1P2P1NEXTNULLFSCANFFP,“SSSFD“,P7BNUM,P7BNAME,P7AUTHOR,FREEP2P3NEXTNULL/释放多申请的一个单元/利用中间的一个变量P7做一个临时存储空间,文件没结束,再将其信息给P1。(3)功能调试过程及结果。首先根据题目,新建一个文件,执行程序,看程序是否能够正常读取文件。读取1正常。分别执行不同的函数看,是否能正常运行。各个程序单独执行正常。2在运行一次的情况下,连续执行不同函数,检查是否有逻辑错误。3在执行了相应的函数后,对比文件,看文件是否按程序操作的结果,正确改变了。4将文件删除,看程序是否会给出正确提示,并且限制某些没有文件不能实现的功5能。将文件置空,看是否会给出相应提示以及程序是否运行正常。662程序测试各模块测试用例数据及结果显示结果一致(图书整体浏览函数)与文件结果一致(图书查询函数)通过书名查找结果调用查询功能购买图书购买成功后与前面文件内容对比,确实少了一题本(鬼谷子)通过书名删除删除成功后与前面的文件对比,显示确实删除了测试中出现的问题的原因和分析在测试数据过程中,若发现测试结果与文件中结果不相符检查在执行相关操作后,是否确认了该操作,比如在购书过程中,最后你是否确1认了购买。检查在退出程序时是否保存了修改记录。2检查文件是否一直没关过,因为信息变动后,文件如果一直没关,文件中显示的3依旧是操作前的结果。7问题与不足(1)需求分析中存在的问题和分析该程序不支持插入新图书,不支持统计销售收入,不支持修改图书信息,与实际不符。程序最后我虽然加了一个图书信息新建功能和修改密码功能,但图书新建功能,不能完全识别操作者输入的错误信息。(2)概要设计中存在的问题和分析全局标志性变量用的太多,在主体函数中定义变量时,容易与全局标志性产生混淆。全局指针也用的太多,虽然这样避免了传指针出错,但没有锻炼我们传参数的能力。(3)详细设计中存在的问题和分析在图书购买过程中,不能够直接支持通过书名和作者购买图书,而且也不支持一次性购买多本,购买多本只能通过连续购买。(4)代码编制中存在的问题和分析由于程序中用了较多的循环和判断,花括弧()较多,容易缺少或多出花括弧。ALTF8不仅能将代码自动整理成微软的CPP文件格式,而且它还是检查花括弧是否缺少或多出的有力工具。(5)调试和测试中存在的问题和分析在编写程序代码是,要注意全局变量和局部变量,防止二者混淆。当文件打开失败时要注意指针是否还有确定的指向,比喻在导入书库信息函数VOIDLOADREC中,当文件打开失败时,P3NEXTNUU就没有意义,在这之前就需要为P3申请一个空间。8建议课设题目有些地方自相矛盾(不是我的题目),建议老师能花点时间将课设题目中有些不合理的地方改正一下。时间安排上,刚开始时觉得很不合理,因为有考试,哪有时间做课设,但后来就发现这样很好,因为我们可以慢慢做,有时间考虑程序中的问题,避免抄袭,对自己的编程能力的提高有好处,因为所有的都是自己写的。建议以后也这样。9编程体会刚开始准备编代码时,感觉很茫然,不知道从何写起。后来先看懂老师的程序,没事时就时不时的想一下自己的课设题目。经过一两天的思考,整个课设的框架基本建好了,现在感觉其实做课设最难的地方就是基本框架的建立,只要建好了基本框架,动起手来就会发现其实课设不是非常困难。做完课设学到了很多编程方面的技巧,比喻在编写程序时,不要将整个程序放在一起检查语法错误,那样非常难操作,可以保留主函数,然后将主体函数一个个的检查错误,这样便于错误的查找和改正。以前见到一大堆的语法错误,就头痛,总是想放弃,其实有时候就一个地方出了一点小错,现在检查逻辑错误的能力也比以前有提高,以前遇到错误找了一会找不出来就不想找了,最主要的原因是以前没有毅力,并不是自己找不出错误。全局变量的巧妙运用会给程序减少不少麻烦,对全局变量的运用也是这次课设的一大收获。这次还学到了一些课外知识,比喻GETCH,GOTO,CONTINUE,INTAIFAGETCH27(按【ESC】可以退出循环),的运用,还有读文件时应注意的一些问题等。这些老师在课堂上没提过或提及较少的东西在这次课设中基本上都掌握了。课设将这半年学的东西串联了起来,是对这半年来学的C语言的一个总结。很多东西别人讲,你听懂了是一回事,但自己做出来又是一回事,只有通过自己做出来了,才算是真正的学会了,课设就起了这个作用。10程序源代码INCLUDEINCLUDEINCLUDEINCLUDEINCLUDEDEFINELENSIZEOFSTRUCTBOOK/结构体定义/STRUCTBOOKCHARBNUM12/书号/CHARBNAME41/书名/CHARAUTHOR21/作者/FLOATBPAY/书价/INTBENSHU/书存在本数/STRUCTBOOKNEXT/函数声明/VOIDLOADREC/自动读入书库信息/VOIDCREATE/新建书库/VOIDSEARCH/查询书存在状态/VOIDSEARCH_BY_BNUM/通过书号查询/VOIDSEARCH_BY_BNAME/通过书名查询/VOIDSEARCH_BY_AUTHOR/通过作者查询/VOIDAUTHER/软件名称及开发者显示/VOIDWELCOME/欢迎界面显示/VOIDBUY/购买书籍/VOIDLIST/列出书库信息/VOIDDELET/删除书目/VOIDDELET_BY_BNUM/通过书号删除/VOIDDELET_BY_BNAME/通过书名删除/VOIDDELET_BY_AUTHOR/通过作者删除/VOIDSAVE/保存记录/VOIDREDEF/修改密码/VOIDBOVER/显示已售完的书/VOIDEXIT0/退出/INTMENU/主菜单/VOIDJIANJIE/程序要求简介/VOIDPRINT2/显示查询菜单/VOIDPRINT3/显示删除菜单/STRUCTBOOKHEADNULL,HEAD2NULL/HEAD和HEAD2分别用于书库的头指针和已购书的头指针/STRUCTBOOKP1,P2,P3,P4,P5,P6/P1、P2、P3用于操作书库图书,P4、P5、P6用于操作已购书/INTSAVE_FLAG0/图书信息变动标志/INTBUY_FLAG0/买书时,是否调用过查询功能标志/INTSHAN_FLAG0/删书时,是否调用过显示已售完书功能标志/INTT0/记录导入的书本数/CHARMIMA11“123456“/初始密码/主函数/INTMAINAUTHER/软件名称及开发者显示/WELCOME/欢迎界面显示/LOADREC/自动导入书库信息/WHILE1SWITCHMENUCASE1BUY_FLAG0SYSTEM“CLS“SEARCHBREAKCASE2SYSTEM“CLS“BUYBREAKCASE3SYSTEM“CLS“LISTBREAKCASE4SYSTEM“CLS“DELETBREAKCASE5SYSTEM“CLS“SAVEBREAKCASE6SYSTEM“CLS“CREATEBREAKCASE7SYSTEM“CLS“REDEFBREAKCASE8SYSTEM“CLS“JIANJIEBREAKCASE0SYSTEM“CLS“EXIT0BREAKDEFAULTPRINTF“N选择错误,请按主菜单提示输入您的正确选择08N“PRINTF“按任意键返回继续“REWINDSTDIN/清空缓冲区/GETCHRETURN0/菜单/INTMENUINTCHOICESYSTEM“CLS“PRINTF“N主菜单NN“PRINTF“1查询图书信息NN“PRINTF“2购买图书NN“PRINTF“3列出图书信息NN“PRINTF“4删除图书NN“PRINTF“5保存记录NN“PRINTF“6新建书库NN“PRINTF“7修改密码NN“PRINTF“8程序要求简介NN“PRINTF“0退出NNN“PRINTF“请输入您的选择(08)“REWINDSTDIN/清空缓冲区/SCANF“D“,RETURNCHOICE/返回用户的选择/程序要求简介/VOIDJIANJIEPRINTF“TTTT程序要求简介“PRINTF“N20图书销售管理系统“PRINTF“题目描述N“PRINTF“图书租借信息包括书号、书名、作者名、书价、存在状态(每个书名有5本书)、销售价格为总费用在50元以内,95折收费,超过100元按90折收费,超过200元按80折收费,超过300元,按75折收费,超过500元以上,一律按70折收费,售书时,显示该书存在情况,并显示收费标准及总费。N“PRINTF“试设计一图书销售管理系统,使之能提供以下功能N“PRINTF“(1)系统以菜单方式工作(用键盘输入16之间的数来选择功能,其中6为退出)N“PRINTF“(2)图书信息录入功能(图书信息用文件保存)N“PRINTF“(3)图书信息整体浏览功能(包括书号、书名、作者名、书价、存在状态)N“PRINTF“(4)查询功能按书号、书名、作者名状况查询(至少一种查询方式)N“PRINTF“(5)图书的销售功能售书时显示存在状态及收费标准,为0的不能销售N“PRINTF“(6)图书信息的删除(给定密码,按书号、书名或作者进行删除,未销售完的图书信息不能删除)N“PRINTF“(7)所有数据符合实际应用要求N“PRINTF“题目要求N“PRINTF“(1)按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。N“PRINTF“(2)图书销售信息应该包括书号、书名、作者名、书价、存在状态等。N“PRINTF“(3)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。N“PRINTF“(4)每个功能操作中,不应有原则性的错误出现;N“PRINTF“(5)对输入值用测试用例测试,不应有错误出现;N“PRINTF“(6)界面应友好,操作应流畅。N“PRINTF“输入要求N“PRINTF“应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,一般应有相应的子菜单,或有相应的提示信息,根据提示信息的要求,从键盘或文件输入相应的信息。N“PRINTF“输出要求N“PRINTF“(1)应用程序运行后,要在屏幕上显示一个菜单。N“PRINTF“(2)要求用户输入数据时,要给出清晰、明确的的提示信息,包括输入的数据内容、格式及结束方式等。N“PRINTF“提示N“PRINTF“设计一个结构体类型和一维数组类型,用来存放图书信息。N“PRINTF“扩展功能N“PRINTF“将所有图书信息存储在一个文件中,并实现文件读写的操作。NN“PRINTF“TTT按任意键继续“REWINDSTDIN/清空缓冲区/GETCH/软件名称及开发者显示/VOIDAUTHERPRINTF“NNNNNNNNNTTT软件名称图书销售管理系统NN“PRINTF“TTT技术开发王启峰NN“PRINTF“TTT按回任意键进入系统“GETCH/欢迎界面显示/VOIDWELCOMESYSTEM“CLS“PRINTF“NNTT欢迎使用图书销售管理系统NN“/开始导入书库信息/VOIDLOADRECFILEFPSTRUCTBOOKP7IFFPFOPEN“WTXT“,“R“NULL/打开文件/PRINTF“NN文件打开失败或文件不存在N“PRINTF“NN按回车键继续“GETCHARRETURNHEADP3P1STRUCTBOOKMALLOCLEN/开辟一个新单元/P1NEXTNULLP7STRUCTBOOKMALLOCLEN/作为一个临时存储空间,避免读取文件最后的回车符/FSCANFFP,“SSSFD“,P7BNUM,P7BNAME,P7AUTHOR,WHILEFEOFFPTP1P7/文件没结束就将P7中的信息给P1/P2STRUCTBOOKMALLOCLEN/继续开辟一个新单元,直到文件读完/P1NEXTP2P3P1P1P2P1NEXTNULLFSCANFFP,“SSSFD“,P7BNUM,P7BNAME,P7AUTHOR,FREEP2P3NEXTNULL/释放多申请的一个单元/PRINTF“NNTTTD项图书信息已经由系统自动载入NNTTT按任意键显示主菜单“,TREWINDSTDIN/清空缓冲区/GETCHIFFCLOSEFPPRINTF“文件关闭失败N“EXIT0/查询书库信息/VOIDSEARCHINTCHOICEP1HEADIFP1NULL|T0/文件不存在或书库中没书/PRINTF“NNNNTTTT当前书库没书“PRINTF“NNTT按任意键返回“REWINDSTDIN/清空缓冲区/GETCHRETURNWHILE1PRINTF“N查询方式NN“PRINTF“1通过书号查找NN“PRINTF“2通过书名查找NN“PRINTF“3通过作者查找NN“PRINTF“0退出图书查询NN“PRINTF“NN请选择一种查询方式03“REWINDSTDIN/清空缓冲区/SCANF“D“,WHILECHOICE3SYSTEM“CLS“PRINT2/调用显示查询方式菜单/PRINTF“NTTT输入错误NN“PRINTF“TTT请重新输入“REWINDSTDIN/清空缓冲区/SCANF“D“,SWITCHCHOICECASE1SYSTEM“CLS“SEARCH_BY_BNUMBREAKCASE2SYSTEM“CLS“SEARCH_BY_BNAMEBREAKCASE3SYSTEM“CLS“SEARCH_BY_AUTHORBREAKCASE0RETURNPRINTF“NTTTT按回车键继续“REWINDSTDIN/清空缓冲区/GETCHARIFBUY_FLAG1/购书调用此函数时,要提前结束,不能执行清屏,以便看着列表输入书号/BREAKSYSTEM“CLS“/查询方式菜单/VOIDPRINT2PRINTF“N查询方式NN“PRINTF“1通过书号查找NN“PRINTF“2通过书名查找NN“PRINTF“3通过作者查找NN“PRINTF“0退出图书查询NN“/通过书号查询/VOIDSEARCH_BY_BNUMCHARBNUM11PRINTF“NNNNNNNNNNTTTT请输入书号“REWINDSTDIN/清空缓冲区/SCANF“S“,BNUMP1HEADWHILEP1NULLIFSTRCMPP1BNUM,BNUM0/有相同书号,循环提前结束/BREAKELSEP1P1NEXTIFP1NULLPRINTF“NNT对不起该书库没有您要找的书NN“ELSESYSTEM“CLS“PRINTF“NN当前查找状态显示NN“PRINTF“NN书号书名作者售价存在状态NN“PRINTF“15S25S15S2FDN“,P1BNUM,P1BNAME,P1AUTHOR,P1BPAY,P1BENSHU/通过书名查询/VOIDSEARCH_BY_BNAMECHARBNAME40PRINTF“NNNNNNNNNNTTTT请输入书名“REWINDSTDIN/清空缓冲区/SCANF“S“,BNAMEP1HEADWHILEP1NULLIFSTRCMPP1BNAME,BNAME0/有相同书名,循环提前结束/BREAKELSEP1P1NEXTIFP1NULLPRINTF“NNT对不起该书库没有您要找的书NN“ELSEP2P1/同种书名的书/SYSTEM“CLS“PRINTF“NN当前查找状态显示NN“PRINTF“NN书号书名作者售价存在状态NN“WHILEP2NULLIFSTRCMPP1BNAME,P2BNAME0PRINTF“15S25S15S2FDN“,P2BNUM,P2BNAME,P2AUTHOR,P2BPAY,P2BENSHUP2P2NEXT/通过作者查询/VOIDSEARCH_BY_AUTHORCHARAUTHOR20PRINTF“NNNNNNNNNNTTTT请输入作者“REWINDSTDIN/清空缓冲区/SCANF“S“,AUTHORP1HEADWHILEP1NULLIFSTRCMPP1AUTHOR,AUTHOR0/有相同作者,循环提前结束/BREAKELSEP1P1NEXTIFP1NULLPRINTF“NNT对不起该书库没有您要找的书NN“ELSEP2P1/同一个作者/SYSTEM“CLS“PRINTF“NN当前查找状态显示NN“PRINTF“NN书号书名作者售价存在状态NN“WHILEP2NULLIFSTRCMPP1AUTHOR,P2AUTHOR0PRINTF“15S25S15S2FDN“,P2BNUM,P2BNAME,P2AUTHOR,P2BPAY,P2BENSHUP2P2NEXT/买书/VOIDBUYCHARBNUM11CHARCHINTI0FLOATSUM0/保存所购买书的总费/P1HEADIFP1NULL|T0/文件不存在或书库中没书/PRINTF“NNNNNNNNNNTTTT当前书库没书“PRINTF“NNTTTT按任意键返回“REWINDSTDIN/清空缓冲区/GETCHRETURNP5P4HEAD2STRUCTBOOKMALLOCLENP4NEXTNULLPRINTF“NNTT收费标准050元不打折50100元打95折100200元打90折NNTTT200300元打85折300500元打75折500元打70折“DOPRINTF“NN请输入所需购买的书的书号图书编号“/书号唯一/REWINDSTDIN/清空缓冲区/GETSBNUMP1HEADWHILEP1NULLIFSTRCMPP1BNUM,BNUM0BREAKELSEP1P1NEXTIFP1NULLSYSTEM“CLS“PRINTF“NNNNNNNNNNT没有找到该书信息,可能书号输入有误,是否调用查询功能确认书号NN“PRINTF“NNTTT输入Y调用N不调用“REWINDSTDIN/清空缓冲区/CHGETCHARIFCHY|CHYSYSTEM“CLS“BUY_FLAG1/防止在此函数中调用时,SEARCH函数执行了清屏/SEARCH/调用查询,通过其他途径确定书号/WHILE1PRINTF“NNTTT提示若没有您要找的书,可按0结束“PRINTF“NNTTTT请重新输入书号“REWINDSTDIN/清空缓冲区/GETSBNUMIFSTRCMPBNUM,“0“0BREAK/没有需要的书,结束输入书号/P1HEADWHILEP1NULLIFSTRCMPP1BNUM,BNUM0BREAKELSEP1P1NEXTIFP1NULLBREAKSYSTEM“CLS“IFP1NULLIFP1BENSHU0PRINTF“NNTTTT该书已售完“WHILEP1NULLIFSTRCMPP1BNUM,BNUM0/有相同书号,循环提前结束/BREAKELSEP1P1NEXTIFP1NULLSUMSUMP4BPAYP5STRUCTBOOKMALLOCLENP4NEXTP5P6P4P4P5P4NEXTNULLI/记录买的本数I,/P1BENSHUP1BENSHU1/减去售过的书本数/P4HEAD2SYSTEM“CLS“PRINTF“NNT当前已选购书状态“PRINTF“NN书号书名作者售价存在状态总费NN“WHILEP4NEXTNULL/显示已买过的书/PRINTF“15S25S15S2FD2FN“,P4BNUM,P4BNAME,P4AUTHOR,P4BPAY,P4BENSHU,SUMP4P4NEXTPRINTF“NNTT提示可按N结束购书,按任意键继续购书“REWINDSTDIN/清空缓冲区/CHGETCHARSYSTEM“CLS“WHILECHN/结束购书/FREEP4P5NEXTNULLIFHEAD2NEXTNULLPRINTF“NNNNNNNNNNTTTT您当前没有购书NN“ELSEPRINTF“NNNNNNNNNNTTT确认购买这D本书吗N“,IPRINTF“NNTTT按任意键确认,按N撤销购书“/不想购买时,亦可撤销/REWINDSTDIN/清空缓冲区/CHGETCHARIFCHN|CHNFORP4HEAD2P4NULLP4P4NEXTFORP1HEADP1NULLP1P1NEXTIFSTRCMPP1BNUM,P4BNUM0P1BENSHUP1BENSHU1/书未销售,本数加上/PRINTF“NNTTTT撤销完毕“ELSEPRINTF“NNTTT您所购买的书的总费为2FNN“,SUMIFSUM50SAVE_FLAG1/书库信息变动标志/REWINDSTDIN/清空缓冲区/PRINTF“NNTTT按回车键返回主菜单“GETCHAR/显示已售完的书/VOIDBOVERSTRUCTBOOKP9INTPRINT_FLAG0P9HEADWHILEP9NULLIFP9BENSHU0IFPRINT_FLAG0PRINTF“NNTTTT当前已售完的图书NN“PRINTF“15S25S15S62F5DN“,P9BNUM,P9BNAME,P9AUTHOR,P9BPAY,P9BENSHUPRINT_FLAG1/“当前已售完的图书”与“当前书库没有已售完的图书”只能显示一个/P9P9NEXTIFPRINT_FLAG0PRINTF“NNNNNNNNNNTTTT当前书库没有已售完的图书“PRINTF“NNTTTT按回车键继续“REWINDSTDIN/清空缓冲区/显示删除菜单/VOIDPRINT3PRINTF“N删除方式NN“PRINTF“1通过书号删除NN“PRINTF“2通过书名删除NN“PRINTF“3通过作者删除NN“PRINTF“0退出图书删除NN“/删除图书信息/VOIDDELETCHARPASSWORD10,CHINTN0,CHOICEINTMIMA_FLAG0/密码是否正确标志/PRINTF“NNNNNNNNNNTTTT默认密码123456“PRINTF“NNTTTT请输入密码“REWINDSTDIN/清空缓冲区/GETSPASSWORDIFSTRCMPPASSWORD,MIMA0/核对密码/WHILE1SYSTEM“CLS“PRINTF“NNNNNNNNNNTTTT密码错误NNTTTT重新输入密码“REWINDSTDIN/清空缓冲区/GETSPASSWORDIFSTRCMPPASSWORD,MIMA0MIMA_FLAG1/密码正确标志/BREAKELSEN/防止非管理人员试密码/IFN2PRINTF“NNTT对不起,您密码尝试次数过多“PRINTF“NNTTTT按回车键返回“REWINDSTDIN/清空缓冲区/GETCHARBREAKELSEMIMA_FLAG1/密码正确标志/IFMIMA_FLAG1IFHEADNULL|T0/文件不存在或书库中没书/PRINTF“NNTT图书信息为空,无法删除NNTT按回车键返回“REWINDSTDIN/清空缓冲区/GETCHARELSEDOIFSHAN_FLAG0SYSTEM“CLS“PRINTF“N删除方式NN“PRINTF“1通过书号删除NN“PRINTF“2通过书名删除NN“PRINTF“3通过作者删除NN“PRINTF“0退出图书删除NN“PRINTF“NN请

温馨提示

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

评论

0/150

提交评论