1《计算机程序设计基础》课程设计报告项目名称小型图书购销管理系统学生姓名李晞月学院信息科学与工程学院指导教师穆帅1目录目录.................................................1第一章系统描述......................................2第二章功能模块结构..................................3第三章数据结构设计..................................6第四章主要模块的算法说明............................7第五章运行结果......................................9第六章课程设计总结.................................13参考文献............................................15附录................................................162第一章系统描述系统说明本程序采用VisualC++6.0编译器编译。系统运行之前需要保证在“c:\C-design\”目录下有以下四个txt文件,名为:《jibenxinxi.txt》、《kucunxinxi.txt》、《buy.txt》、《sell.txt》系统的基本功能用户界面采用文本菜单界面,设有欢迎界面。各级菜单层次分明,切换方便。系统的功能可实现循环连续操作,直至用户选择返回或退出。重要操作之前会有确认提示。若输入不合法,有出错原因提示。出错提示以及查询结果输出后可按任意键继续,以便用户有停顿时间来阅读。系统采用四个文件分别保存以下信息:图书基本信息、库存信息、采购纪录、出售纪录。实现图书基本信息的录入及保存。信息录入时可限制编号不重复。可查询文件中保存的图书基本信息。输入书名(或编号、作者、价格)可调出符合的信息,也可全部显示。其中按价格查询时,输入一个范围可将在范围内的信息都显示出来。具有图书采购功能:输入要采购的图书编号能自动把该书的基本信息显示出来,输入采购数量能自动得出采购所需金额,确认采购后,显示购买成功。执行完采购功能后可实现对库存信息的添加和修改,以及向文件中添加采购纪录。可随时查询保存在文件中的采购纪录。具有图书出售功能:输入要采购的图书编号能显示出该书信息及库存数量,输入出售数量能自动得出出售所得金额,确认出售后,显示出售成功。执行完出售功能后可实现对库存信息的删除和修改,以及向文件中添加出售纪录。可随时查询保存在文件中的出售纪录。利润统计功能,可动态显示运行系统以来的采购总金额、销售总金额及总利润。有库存信息查询功能,可将库存中的全部书籍信息逐条显示出来。3第二章功能模块结构功能模块划分本系统主要由六大模块构成:图书基本信息录入模块,图书基本信息查询模块,图书采购模块,图书销售模块,利润统计模块,库存信息查询模块。大模块下再划分小的模块。其中图书基本信息查询模块下又分为五个查询模块,图书采购模块下又分为购书和历史查询两个模块,图书销售模块同样也由售书和历史查询两部分组成。功能模块结构图小型图书购销管理系统基本信息录入基本信息查询库存信息查询利润统计按书名查找按编号查找按作者查找按价格查找图书采购历史购书纪录购书图书销售历史售书纪录售书全部显示4各模块的功能描述(一)图书基本信息录入模块1)在主菜单选择“1”后出现欢迎辞并要求输入图书编号,当输入的编号已经存在则提示另输入一个编号。2)编号输入合法时则依次提示输入后面的信息,输入结束后将信息保存入文件。3)输入完后询问是否继续录入下一本书的信息,是则继续,否则返回主菜单。(二)图书基本信息查询模块1)在主菜单选择“2”后出现欢迎辞并出现基本信息查询二级菜单,有按书名、按编号、按作者、按价格和全部显示五种查找方式。选择“0”可返回主菜单,有其他非法输入则提示出错,按任意键后可继续进行二级菜单的选择。2)在二级菜单选择“1”后按书名查找,提示输入书名。若基本信息中没有,则提示查无此书并返回二级菜单,否则将符合此书名的书籍信息逐条罗列出来。3)在二级菜单选择“2”或“3”则分别按编号和按作者查找,功能类似2)。4)在二级菜单选择“4”后按价格查找,任意输入两个数字确定一个范围,可将在此价格范围内的书籍信息全部显示出来。5)在二级菜单选择“5”后将全部的图书基本信息以清单形式列出,按任意键返回二级菜单。(三)图书采购模块1)在主菜单选择“3”后出现欢迎辞并出现图书采购二级菜单,有开始购书、历史记录和返回的选择。选择“0”可返回主菜单,有其他非法输入则提示出错,按任意键后可继续进行二级菜单的选择。2)在二级菜单选择“1”后开始购书,提示输入要购买的书的编号。若基本信息中没有,则提示查无此书并返回二级菜单,否则调出该书基本信息并提示输入采购数量。3)输入采购数量后,自动得出采购所需金额,然后询问是否确认购买,若否便询问是否购买其他书,是则提示购买成功,并增加库存量、纪录购买信息,以及修改利润值和总采购金额值,然后询问是否继续购买。若不继续购买则返回二级菜单。4)在二级菜单选择“2”后可查询历史购买纪录,将以往全部的购买纪录以清单形式列出,按任意键返回二级菜单。(四)图书销售模块1)在主菜单选择“4”后出现欢迎辞并出现图书销售二级菜单,有开始售书、历史记录和返回的选择。选择“0”可返回主菜单,有其他非法输入则提示出错,按任意键后可继续进行二级菜单的选择。2)在二级菜单选择“1”后开始售书,提示输入要出售的书的编号。若库存信息中没有,则提示尚无进购并返回二级菜单,否则调出该书基本信息及库存量并提示输入出售数量。53)输入采购数量后,若库存不足则提示不足,然后询问是否继续卖书。若数量合法则自动得出出售所得金额,然后询问是否确认出售,若否便询问是否出售其他书,是则提示出售成功,并减少库存量、纪录销售信息,以及修改利润值和总销售金额值。然后询问是否继续卖书。若不,则返回二级菜单。4)在二级菜单选择“2”后可查询历史出售纪录,将以往全部的出售纪录以清单形式列出,按任意键返回二级菜单。(五)利润统计模块1)在主菜单选择“5”后便可看到系统运行以来的购销情况,显示有购书总支出、售书总收入以及销售总利润。2)程序列出结果后按任意键方继续,返回主菜单。(六)库存信息查询模块1)在主菜单选择“6”后可查询库存信息,系统将库存中的全部书籍信息以清单形式罗列出来,最末一行显示库存总量。2)程序列出结果后按任意键方继续,返回主菜单。6第三章数据结构设计程序采用结构体、文件以及结构体数组实现数据的输入输出、保存和删改。系统采用四个文件保存数据,包括:1)图书基本信息文件:图书编号、书名、作者、出版社、出版日期、定价。2)库存信息文件:图书编号、书名、作者、出版社、出版日期、定价、库存数量。3)历史采购纪录文件:图书编号、采购数量、单价、采购金额。4)历史出售纪录文件:图书编号、销售数量、单价、销售金额。构造了如下两个结构体,分别用于储存图书基本信息和购销信息:structbook{charnum[10];charbookname[30];charauthor[20];charpress[30];chartime[10];floatprice;intamount;};图书基本信息的输入和输出使用了structbook结构体。图书采购模块中,利用structdeal结构体存储购书纪录,用到的计算公式有:本次采购金额=定价*采购数量;库存量+=采购数量;利润-=采购金额;采购总金额+=本次采购金额图书销售模块中,利用structdeal结构体存储售书纪录,用到的计算公式有:本次出售金额=定价*出售数量*150%;库存量-=出售数量;利润+=出售金额;出售总金额+=本次出售金额利润统计中直接将以上计算好的利润、采购总金额和销售总金额打印输出。库存信息查询中,库存总量是库存信息中每部书籍的数量相加的总和。structdeal{charnum[10];floatprice;intamount;floatmoney;};7第四章主要模块的算法说明各模块功能的实现是通过对各函数的调用完成的,每个函数能够完成相应独立的任务,按一定规则顺序调用这些函数就组成了解决问题的模块.因此,模块化的程序设计主要是靠设计和调用函数来实现的.以下按模块对本系统中各函数进行简单介绍。(一)图书基本信息录入模块此模块调用了一个函数add(),此函数用于录入图书基本信息,并保存入文件。定义了一个文件指针变量,指向文件jibenxinxi.txt。先从键盘输入信息存在结构体变量中,再利用fwrite函数将变量的数据存入文件,利用do--while循环实现连续输入。在写文件之前有一个判断语句,将文件中的编号与输入的编号比较,若能找到相同的则用cuntinue跳过此次输入进入下一轮循环,以此实现限制编号不重复的功能。(二)图书基本信息查询模块定义了五个查询函数,通过选择语句分别进行调用。五个查询函数的算法大同小异,就以按价格查询函数加以说明。定义一个文件指针变量并指向文件jibenxinxi.txt,定义一个变量count初值为零,依次输入两个数分别存在min和max变量中,若minmax则交换两变量的值。利用循环语句和fread函数将文件信息依次读出并判断是否符合大于min且小于max的条件,有符合的则向屏幕输出,并使count值为1。若循环结束后count仍为零则打印“查无此书”。显示全部的查询函数则是不做判断,读文件后直接输出。(三)图书采购模块整个模块最主要的函数是buybook()函数。定义了三个文件指针变量,分别控制基本信息文件、库存信息文件和一个临时文件。首先用了strcmp()函数查找与输入编号相符的书籍信息,定义了一个变量用于计算金额。确认购买后,对库存信息文件的修改如下:用两个指针分别指向库存信息文件和临时文件,用for循环将库存文件中的信息逐条读出并且逐条写入临时文件,在for循环过程中利用if语句判断,当读到与输入编号相同的那条信息时,增加库存数量之后再写入临时文件,若未读到与输入编号相同的信息,则在for循环结束后向临时文件添加购买的书籍信息和购买数量,最后以只写方式再次打开库存信息文件并将临时文件的信息写入其中。由此可实现对库存信息文件的修改和添加。(四)图书销售模块此模块最主要的是sellbook()函数。定义了两个文件指针变量,用以控制库存信息文件和临时文件。出售后对库存信息的修改与采购模块的修改方法类似,不同的是当库存为零时可删除库存信息。删除的方法与修改方法类似,依旧利用临时文件,只是当读到与输入编号相同的信息时,库存数量减少后若值为零则直接continue跳过,不写入临时文件,把临时文件的信息重新导回库存信息文件后则可实现删除目的。8(五)利润统计模块由于利润和采购总金额、出售总金额是在采购模块和销售模块就一并计算的,所以此模块只是简单地将这三个变量打印出来。库存信息查询模块此模块是对库存信息文件的查询。定义了一个文件指针变量并指向库存信息文件,利用循环语句和fread函数,将信息逐条存入结构体变量并用printf打印输出。定义一个sum变量存储所有信息数量之和,然后输出sum的值即为库存总量。9第五章运行结果主菜单基本信息录入基本信息查询菜单10图书采购菜单购书界面购书纪录查询11图书销售菜单销售界面利润统计界面12库存信息查询界面退出界面13第六章课程设计总结整个系统的开放过程都是我自己完成的,并未求助于学长,更没有抄袭他人的作品。作为一个初学者,由于技术和经验的不足,在程序开发的过程中遇到了各种各样的问题。在程序编写的初期,编译的时候经常会检查出一连串的错误,而且程序运行以后也会出现很多问题,总是不能按照规定要求进行。这其中有很多是非常低级的错误,比如变量的定义没有放在最开始,又如输入实型数据时错用了“%d”,或