数据结构图书管理系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据结构课程设计说明书学生姓名:学号:学院:专业:题目:成绩指导教师年月日11设计目的(小标题黑体五号字)设计一个计算机管理系统完成图书管理基本业务(数据可以存储在一个数据文件中,数据结构、具体数据自定)。2.设计内容和要求具体功能有:1)每种书的登记内容包括书号、书名、著作者、出版单位、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;4)借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;5)归还:注销对借阅者的登记,改变该书的现存量。3.本设计所采用的数据结构所用数据结构:线性表、查找、排序链表:用一组地址任意的存储单元存放线性表中的数据元素。以元素(数据元素的映象)+指针(指示后继元素存储位置)=结点(表示数据元素或数据元素的映象)以“结点的序列”表示线性表称作线性链表(单链表)单链表是一种链式存取的结构,为找第i个数据元素必须先找到第i-1个数据元素。因此,查找第i个数据元素的基本操作为:移动指针,比较j和i。(1)malloc(size)在内存的动态存储区申请一个长度为size字节的连续空间。(2)calloc(n,size)在内存的动态存储区申请n个长度为size字节的连续空间,函数返回值为分配空间的首地址。若此函数未被成功执行,函数返回值为0。(3)free(p)2释放由指针p所指向的存储单元,而存储单元的大小是最近一次调用malloc()或calloc()函数时所申请的存储空间。运用了单链表的插入、删除、排序、修改等一些操作!4.功能模块详细设计4.1详细设计思想(一)基本思想:(二)图书信息录入、图书信息的查询、图书信息的排序、图书信息的修改、图书信息的删除、图书的借阅、图书的归还、退出图书管理系统。(三)程序中的主要函数有:voidmain()//主函数intCreateListR(LinkList*L)//尾插法建表voidLocateElem(LinkList*L)//查询intSort(LinkList*L)//递增有序排序(直接插入排序法)voidDisplay(LinkList*L)//输出排序结果ModifyList(LinkList*L)//修改intListDelete(LinkList*L)//删除voidBorrow(LinkList*L)//借阅voidReturn(LinkList*L)//归还34.2核心代码#includestdio.h#includestring.h#includestdlib.h#includemalloc.htypedefstruct{intnum;charname[20];charauthor[20];charpress[20];intcount;charprice[10];}ElemType;typedefstructLNode//定义单链表结点类型{图书信息的录入添加图书信息的查询模块图书信息的排序模块图书信息的修改模块图书信息的删除模块图书的借阅模块图书的归还模块退出图书管理系统图书管理系统主程序模块4ElemTypedata;structLNode*next;}LinkList;voidInitList(LinkList*L)//初始化线性表{L=(LinkList*)malloc(sizeof(LinkList));//创建头结点L-next=NULL;}intCreateListR(LinkList*L)//尾插法建表{inti,n;LinkList*s,*q,*p;p=L;while(p-next!=NULL)p=p-next;printf(请输入需要录入的图书信息的个数:n=);scanf(%d,&n);for(i=1;in+1;i++){s=(LinkList*)malloc(sizeof(LinkList));printf(书号书名作者出版社名称存馆数量定价\n);scanf(%d%s%s%s%d%s,&s-data.num,s-data.name,s-data.author,s-data.press,&s-data.count,s-data.price);q=L-next;if(q==NULL){p-next=s;p=s;p-next=NULL;printf(录入成功!\n);continue;5}while(q!=NULL){if(strcmp(s-data.name,q-data.name)==0){printf(此图书已存在!);printf(请重新输入:\n);scanf(%d%s%s%s%d%s,&p-data.num,p-data.name,p-data.author,p-data.press,&p-data.count,p-data.price);}q=q-next;}p-next=s;p=s;p-next=NULL;printf(录入成功!\n);}return0;}voidLocateElem(LinkList*L)//查询{LinkList*p=L-next;//p指向第一个数据结点intc;intx=0;charname1[10],author1[10],press1[10];printf(1按书名查询:\n);printf(2按作者名查询:\n);printf(3按出版社名称:\n);printf(4返回\n);printf(请选择1--4进行操作:\n);6scanf(%d,&c);if(c4||c1){printf(您的输入有误!\n);scanf(%d,&c);}switch(c){case1:printf(请输入图书书名:\n);scanf(%s,name1);while(p!=NULL){if(strcmp(name1,p-data.name)!=0)//查找图书书名p=p-next;else{printf(书号书名作者出版社名称存馆数量定价\n);printf(%d\t%s\t%s\t%s\t%d\t%s,p-data.num,p-data.name,p-data.author,p-data.press,p-data.count,p-data.price);printf(\n);p=p-next;x++;}}if(p==NULL&&x==0)printf(对不起,不存在此图书!\n);break;case2:printf(请输入图书作者:\n);scanf(%s,author1);while(p!=NULL){if(strcmp(author1,p-data.author)!=0)//查找图书作者7p=p-next;else{printf(书号书名作者出版社名称存馆数量定价\n);printf(%d\t%s\t%s\t%s\t%d\t%s,p-data.num,p-data.name,p-data.author,p-data.press,p-data.count,p-data.price);printf(\n);p=p-next;x++;}}if(p==NULL&&x==0)printf(对不起,不存在此图书!\n);break;case3:printf(请输入图书的出版社名称:\n);scanf(%s,press1);while(p!=NULL){if(strcmp(press1,p-data.press)!=0)//查找图书出版社名称p=p-next;else{printf(书号书名作者出版社名称存馆数量定价\n);printf(%d%s%s%s%d%s,p-data.num,p-data.name,p-data.author,p-data.press,p-data.count,p-data.price);printf(\n);p=p-next;x++;}}8if(p==NULL&&x==0)printf(对不起!不存在此图书\n);break;case4:break;}}intSort(LinkList*L)//递增有序排序(直接插入排序法){LinkList*p=L-next,*q,*r;//p指向第一个数据结点if(p!=NULL)//若原单链表中有一个或以上的数据结点{r=p-next;//r保存*p结点直接后继结点的指针p-next=NULL;//构造只含一个数据结点的有序表p=r;while(p!=NULL){r=p-next;//r保存*p结点的直接后继结点的指针q=L;while(q-next!=NULL&&q-next-data.nump-data.num)q=q-next;//在有序表中找插入*p的直接前驱结点*q的位置p-next=q-next;//将*p插入到*q之后q-next=p;p=r;//扫描原单链表余下的结点}}return0;}voidDisplay(LinkList*L)//输出排序结果9{LinkList*p=L-next;while(p!=NULL){printf(书号书名作者出版社名称存馆数量定价\n);printf(%d\t%s\t%s\t%s\t%d\t%s,p-data.num,p-data.name,p-data.author,p-data.press,p-data.count,p-data.price);printf(\n);p=p-next;}}intModifyList(LinkList*L)//修改{LinkList*p=L;charname1[10];printf(请输入要修改的图书的书名:\n);scanf(%s,name1);while(p!=NULL){if(strcmp(name1,p-data.name)==0)//查找所要修改的书名{printf(请输入修改后的信息!\n);printf(书号书名作者出版社名称存馆数量定价\n);scanf(%d%s%s%s%d%s,&p-data.num,p-data.name,p-data.author,p-data.press,&p-data.count,p-data.price);printf(修改成功!\n);return0;}p=p-next;}printf(不存在此图书\n);10return0;}intListDelete(LinkList*L)//删除{LinkList*p=L-next,*q=L;charname1[10];if(p!=NULL){printf(请输入要删除的书名:);scanf(%s,name1);}while(p-next!=NULL&&strcmp(p-data.name,name1)!=0){p=p-next;q=q-next;}if(p-next!=NULL)//如果p此时不是最后一个节点,说明此时已经找到书{q-next=p-next;printf(删除成功!\n);return0;}if(p-next==NULL&&strcmp(name1,p-data.name)!=0)//如果p此时为最后一个结点并且没有找到与之相符的书名{printf(你输入的书名不存在,请核实后重新输入!\n);}else{q-next=NULL;printf(删除成功!\n);}return0;}11voidBorrow(LinkList*L)//借阅{LinkList*p=L-next;charname1[10];printf(请输入要借阅的图书的书名:\n);scanf(%s,name1);while(p-next!=NULL&&strcmp(name1,p-data.name)!=0)p=p-next;if(p-next==NULL&&strcmp(name1,p-data.name)!=0)

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功