您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C语言课程设计(图书管理系统)
课程报告课程名称:程序设计实践专业班级:学生姓名:******学号:20104683****任课教师:学期:2010-2011学年第二学期课程报告任务书题目图书信息管理系统主要内容开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入(2)图书信息浏览功能--输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):①按书名查询②按作者名查询③按照价钱排序④按出版时间排序等等(4)图书信息的删除与修改扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理(2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。(4)模糊查询(5)综合查询(6)统计功能比如统计处某一类别的图书信息或筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。任务要求一、提交材料应包括:(1)系统源代码(2)课程报告二、整个设计过程具体要求(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分答辩情况30分成绩评定教师:1需求分析经过大一上学期的理论学习,在基础实验的基础上,本学期我们继续开设了C语言程序设计实践课。课程要求我们对已经学习的基础实验进行整合与衔接处理,并最终形成一个系统性质的规模较大的程序。本次课程设计要求我们达到能独立完成一个图书管理系统,完成后要求实现的功能有对图书信息的录入、删除、修改,浏览(即输出),按某种方式查询(要求至少一种查询方式),按某种方式排序(要求至少一种排序方式)。当然,我们可以根据自己的能力对系统进行完善性的拓展,例如自己加入简单的权限处理,统计功能,模糊查询等,甚至可以拓展为图书借阅系统。通过整个程序的开发过程,最终使我们掌握利用计算机解决实际问题的基本方法,熟悉C语言开发的全过程,提高综合应用C语言的能力、编程和调试能力,为学习计算机和通信专业的后续课程打好专业基础。2概要设计(1)图书信息及数据格式图书信息:图书信息包括图书编号、图书类别、图书书名、作者、出版社、出版时间、图书价格。数据格式:本系统采用单向链表来对图书信息进行各项操作。其中图书的编号为整型数据,价格为双精度浮点型,其余的类别、书名、作者、出版社与出版时间均为字符串类型structtushu_node{intnum;charleibie[20];charname[30];charauthor[20];charpress[20];chartime[20];doubleprice;structtushu_node*next;};一个结点的示意图如下图所示:numleibienameauthorpresstimepricenext(2)程序的整体框架(3)模块划分1、intquanxian();核查权限的函数2、intinputchioce();显示主菜单的函数3、voidsave();保存链表为文件的函数覆盖以前的信息4、voidsave1();保存链表为文件的函数不覆盖以前的信息只在创建时调用5、structtushu_node*wjtolb();从文件中读取数据并建立图书信息的链表的函数6、intluruxinxi();录入学生信息的函数7、structtushu_node*luruxinxi_chuangjian();创建图书信息的函数8、structtushu_node*luruxinxi_charu();插入图书信息的函数主菜单按不同方式查询浏览按不同方式排序统计图书数目帮助录入(删除修改)退出创建删除修改书名编号价格价格出版时间子菜单9、structtushu_node*luruxinxi_shanchu();删除图书信息的函数10、structtushu_node*luruxinxi_xiugai();修改图书信息的函数11、intliulantushu();浏览图书信息的函数12、intchaxuntushu();查询图书信息的函数13、voidchaxuntushu_num();按编号查询图书14、voidchaxuntushu_name();按书名查询图书15、voidchaxuntushu_price();按价格查询图书16、voidpaixutushu();为图书排序的函数17、structtushu_node*paixutushu_price();为图书按价格排序的函数18、structtushu_node*paixutushu_time();为图书按出版时间排序的函数19、voidsfjx();写个函数判断是否继续排序中使用20、inttongjitushu_shumu();统计图书数目的函数21、voidshiyongshuoming();使用说明的函数3详细设计程序的主体设计思想是根据结构化程序设计思想分模块进行设计,有一个主函数和多个自定义函数构成。主函数对于本程序来说,主函数很简单,就是定义了一个变量chioce用来接受核查用户是否有使用该管理系统的权限的函数quanxian()函数返回的值,若为1(即用户获得了使用权限),则调出显示主菜单的函数进行具体操作intmain(){intchioce;chioce=quanxian();核查用户是否有使用该管理系统的权限的函数if(chioce==1)若取得权限则返回值为1{system(cls);inputchioce();用来显示主菜单的函数}exit(0);}权限函数核查用户权限的函数使用do-while语句来限制用户输入密码的次数仅为三次,并且为了使界面更具亲切感,会在用户输入密码错误时进行提示引起用户注意及提示剩余输入次数。intquanxian(){intm=1,n=3,flag=0;charmima[20];do{printf(\n\n你好,欢迎使本图书信息管理系统!\n);printf(\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n);printf(【现在进行权限核查】\n--------------------友情提醒:你共有3次输入密码的机会!\n);printf(\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n);if(n==2||n==1){printf(注意:你已输入错误%d次剩余输入次数:%d请输入密码:,3-n,n);}if(n==3)printf(剩余输入次数:%d请输入密码:,n);scanf(%s,mima);//第一次输入和输错密码后再次输入显示的也卖弄不同if(strcmp(mima,chenbo0916)==0){flag=1;returnflag;}m++;n--;system(cls);}while(strcmp(mima,chenbo0916)!=0&&m=3);//限制输入次数在3次之内printf(\n\n对不起,你连续三次输入密码错误,没有使用该图书管理系统的权限!\n);exit(0);}显示主菜单的函数本程序将主菜单单独作为一个函数是为了让用户进入一次系统可以进行多项操作(即为在每次用户完成一个具体的操作后,都会有对是否继续或返回主菜单有相应的询问,让用户在想退出系统时才退出),基本思路是通过函数的嵌套调用来实现多项操作。这个函数的功能就是显示主菜单并对用户进行的选择调用不同的子菜单函数或进入具体功能intinputchioce()/*主菜单*/{intmychioce,x=-1;printf(\n++++++++++++++欢迎你++++++++++++++++++\n\n);printf(**+++++++++++++主菜单+++++++++++++++++++++**\n);printf(**1--录入(删除修改)图书信息****2--(按规则)查询图书信息**\n);printf(**3--浏览图书信息****4--为图书(按规则)排序**\n);printf(**5--统计图书(数目)****6--帮助**\n);printf(**0--退出系统******\n);printf(**++++++++++++++++++++++++++++++++++++++++++++++++++++++++**\n);printf(\n恭喜你获得使用权限,请你选择:);scanf(%d,&mychioce);switch(mychioce){case1:{luruxinxi();break;}case2:{chaxuntushu();break;}case3:{liulantushu();break;}case4:{paixutushu();break;}case5:{tongjitushu_shumu();printf(\n\n是否继续操作?请选择(继续-1/退出-0));scanf(%d,&x);if(x==1){system(cls);inputchioce();}if(x==0){printf(\n\n谢谢你的使用!再见\n);exit(0);}if(x!=1&&x!=0){system(cls);printf(选择有误,默认返回主菜单,请重新选择:\n);inputchioce();}break;}case6:{shiyongshuoming();break;}case0:{printf(\n\n谢谢你的使用!!再见\n\n);break;}default:{system(cls);printf(\n选择有误,请重新选择:\n);inputchioce();}break;}}关于一些录入(删除修改)、查询、排序等子菜单的原理及实现方法与主菜单那类似创建(插入)函数算法如下图:结束输入控制条件Num!=0将链表数据保存为文件的函数首先打开文件以可读写(也可以只写的方式打开区别在于是否覆盖以前的信息)的方式,p1作为形参来接受实参head,只要不为空,写入p1后,下移一个节点voidsave1(structtushu_node*p1){/*将链表保存为文件的函数不覆盖前面信息*/if((fpp=fopen(1.txt,a))==NULL){printf(打开文件失败!);exit(0);}while(p1!=NULL)numLeibieNameAuthorPressTimepricep-nump-leibiep-namep-authorp-pressp-timep-priceHead为空Head=pHead不为空Tail-next=p保存为文件Save(){fprintf(fpp,%d%s%s%s%s%s%lf\n,p1-num,p1-leibie,p1-name,p1-author,p1-press,p1-time,p1-price);p1=p1-next;}if(fclose(fpp)){printf(关闭文件失败!\n);exit(0);}}从文件中读出数据并创建链表的函数在调用从文件读取数据创建链表的函数前,先定义head链表指针并赋值为空作为实参。打开文件后,从文件中读取一组数据赋给已经被动态分配内存的结点指针p第一次head为空时Headp1第二次以后headheadp2p1headp2p1PnextP1-nextPnextP1-ne
本文标题:C语言课程设计(图书管理系统)
链接地址:https://www.777doc.com/doc-3422196 .html