您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 数据结构图书管理系统课程设计报告
一、设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。【基本要求】(1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;(2)对书号建立索引表(线性表)以提高查找效率;(3)系统主要功能如下:①采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;②借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;③归还:注销对借阅者的登记,改变该书的现存量。二、小组分工小组成员:小组分工:图书初始化、新书入库、登记读者信息、文件保存借书系统、还书系统图书信息查询、读者信息查询三、需求分析图书管理系统共需要八个模块,分别是1图书初始化、2新书入库、3添加读者信息、4借书模块、5还书模块、6查询图书信息、7查询读者信息、8退出。我负责其中的四个模块,如下所示:1)图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。2)新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。3)添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书4)退出和文件保存退出读书管理系统并保存读者和图书信息。四、概要设计图书信息和读者信息都采用结构体类型保存。图书信息里面包括:图书编号、图书名称、作者、现有量、库存量、指向下一节点的指针。读者信息里面包括:读者编号、读者姓名、借书数量、可借图书数量、指向下一节点的指针。所有图书和读者都分别以链表的形式存储,并以编号为唯一主键。采用链表形式便于数据的添加与删改。主要的操作为:系统初始化,图书入库,读者信息登记,图书信息和读者信息文件的保存。五、详细设计数据结构的定义:图书信息:typedefstructbook{图书管理系统图书管理模块理读者管理模块借阅操作模块查询操作模块初始化图书信息采编入库输入读者信息借书系统还书系统读者信息查询图书信息查询charbook_num[10];charbook_name[20];charbook_writer[10];intbook_xy;intbook_kc;structbook*next;}BK;读者信息:typedefstructreader{charreader_num[10];charreader_name[10];intright;BOborrow[Max];structreader*next;}RD;算法描述:进入系统后首先进行图书初始化,输入图书的信息。1)初始化初始化之后,进入系统,显示功能列表,可选择任意系统,但在借书之前先要输入读者信息。开始输入图书编号、名称、作者和图书数量进入系统2)采编入库否录入图书信息判断是否有此图书在原有的纪录上加上现有的图书数量向系统中加入新纪录开始输入功能所对应的数字错误!请重新输入执行所选功能输入的数字小于0大于6采编入库是3)输入读者信息是5)退出和文件保存登记读者输入读者信息:读者书证号向系统中添加新记录结束判断是否存在此读者重新输入读者信息否退出系统保存文件判断是否保存成功退出系统是错误!请重新登陆系统六、程序源代码#include#include#include#include#defineMax4typedefstructbook{charbook_num[10];charbook_name[20];charbook_writer[10];intbook_xy;名.数量\n);p0=(BK*)malloc(sizeof(BK));h_book=p0;printf(\n请输入图书信息:\n);printf(图书编号:);/*输入图书编号(唯一)*/scanf(%s,p0-book_num);printf(图书名称:);/*输入图书名称*/scanf(%s,p0-book_name);printf(图书作者:);/*输入图书作者*/scanf(%s,p0-book_writer);printf(图书数量:);/*输入图书数量*/scanf(%d,&p0-book_kc);p0-book_xy=p0-book_kc;/*开始时图书现有量和库存量相等*/p0-next=NULL;printf(\n图书信息初始化完毕!按任意键继续下一步操作\n);getch();system(cls);}voidInsert_New_Book()/*新书入库*/{BK*p,*p0,*p1;p=p1=h_book;printf(\n新书入库模块\n);printf(\n请输入新书信息\n包括书号.书名.数量\n);p0=(BK*)malloc(sizeof(BK));printf(图书编号:);scanf(%s,p0-book_num);while(strcmp(p0-book_num,p1-book_num)!=0&&p1-next!=NULL)p1=p1-next;if(strcmp(p0-book_num,p1-book_num)==0)/*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/{printf(\n此编号图书已存在!!直接入库!\n);printf(图书数量:);scanf(%d,&p0-book_kc);p1-book_kc+=p0-book_kc;p1-book_xy+=p0-book_kc;}else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/{printf(图书名称:);scanf(%s,p0-book_name);printf(图书作者:);scanf(%s,p0-book_writer);printf(图书数量:);scanf(%d,&p0-book_kc);n包括书证号.姓名..\n);if(p==NULL){p0=(RD*)malloc(sizeof(RD));/*申请新结点存储空间*/h_reader=p0;p=h_reader;printf(读者书证号:);scanf(%s,p0-reader_num);printf(读者姓名:);scanf(%s,p0-reader_name);p0-right=0;for(i=0;iMax;i++){strcpy(p0-borrow[i].borrow_book_num,0);/*所借图书直接置为(即没有借书)*/strcpy(p0-borrow[i].limit_date,0);}p0-next=NULL;}else{p0=(RD*)malloc(sizeof(RD));p1=h_reader;printf(\n请输入读者的信息:\n);printf(读者书证号:);scanf(%s,p0-reader_num);for(;;){while(strcmp(p0-reader_num,p1-reader_num)!=0&&p1-next!=NULL)p1=p1-next;if(strcmp(p0-reader_num,p1-reader_num)==0){printf(\n此读者编号已存在,请重新输入!\n);printf(读者书证号:);scanf(%s,p0-reader_num);p1=h_reader;}else{printf(读者姓名:);scanf(%s,p0-reader_name);break;}}p0-right=0;for(i=0;iMax;i++){strcpy(p0-borrow[i].borrow_book_num,0);/*所借图书直接置为(即没有借书)*/strcpy(p0-borrow[i].limit_date,0);}p1-next=p0;p1=p1-next;p1-next=NULL;}printf(\n读者信息初始化完毕!按任意键继续下一步操作..\n);getch();system(cls);}voidSave()/*保存信息*/{Save_Reader();Save_Book();}voidSave_Reader()/*保存读者信息*/{FILE*fp_reader;RD*p,*p0;p=h_reader;if((fp_reader=fopen(,wb))==NULL)/*创建文件,进行保存*/{printf(\n文件保存失败!\n请重新启动本系统\n);exit(0);}while(p!=NULL){if(fwrite(p,sizeof(RD),1,fp_reader)!=1)/*将链表中的信息写入文件中*/printf(\n写入文件失败!\n请重新启动本系统!\n);p0=p;p=p-next;free(p0);/*释放所有结点*/}h_reader=NULL;fclose(fp_reader);/*关闭文件*/}voidSave_Book()/*保存图书信息*/{FILE*fp_book;/*创建文件型指针*/BK*p,*p0;p=h_book;if((fp_book=fopen(,wb))==NULL)/*创建文件,进行保存*/{printf(\n文件保存失败!\n请重新启动本系统\n);exit(0);}while(p!=NULL){if(fwrite(p,sizeof(BK),1,fp_book)!=1)/*将链表中的信息写入文件中*/printf(\n写入文件失败!\n请重新启动本系统!\n);p0=p;p=p-next;free(p0);}h_book=NULL;fclose(fp_book);/*关闭文件*/}voidLoad()/*加载信息*/{Load_Reader();Load_Book();}voidLoad_Reader()/*加载读者信息*/{RD*p1,*p2,*p3;FILE*fp;/*创建文件型指针*/fp=fopen(,rb);/*打开文件*/p1=(RD*)malloc(sizeof(RD));fread(p1,sizeof(RD),1,fp);h_reader=p3=p2=p1;while(!feof(fp))/*读出信息,重新链入链表*/{p1=(RD*)malloc(sizeof(RD));fread(p1,sizeof(RD),1,fp);p2-next=p1;p3=p2;p2=p1;}p3-next=NULL;free(p1);fclose(fp);/*关闭文件*/}voidLoad_Book()/*加载图书信息*/{BK*p1,*p2,*p3;FILE*fp;/*创建文件型指针*/fp=fopen(,rb);/*打开文件*/p1=(BK*)malloc(sizeof(BK));fread(p1,sizeof(BK),1,fp);h_book=p3=p2=p1;while(!feof(fp))/*读出信息,重新链入链表*/{p1=(BK*)malloc(sizeof(BK));fread(p1,sizeof(BK),1,fp);p2-next=p1;p3=p2;p2=p1;}p3-next=NULL;free(p1);fclose(fp);/*关闭文件*/}voidmain(){FILE*fp_book,*fp_reader;/*创建文件型指针*/Login();if((fp_book=fopen(,rb))==NULL||(fp_reader=fopen(,rb))==NULL){Init();}elseLoad();Menu_select();/*调用主菜单*/}七、运行结果和调试分析八、课程设计总结通过这次的实验,我了解了图书管理系统的流程,之前以用户的角度去认识图书管理,现在站在设计者的角度去考虑问题,并且根据实际情况设计了图书管理系统的模块,对此有了更深刻的理解。对数据的管理、存储、完整性约束等也有了全面的认识。在设计过程中,出现了一些问题,主要是功能的划分,后来将图书管理系统的功能进行一一细分,归纳安排,才使整个系统的结构完善且冗余小。在
本文标题:数据结构图书管理系统课程设计报告
链接地址:https://www.777doc.com/doc-6212404 .html