图书信息管理系统.docx
- 文档编号:9437477
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:22
- 大小:410.20KB
图书信息管理系统.docx
《图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统.docx(22页珍藏版)》请在冰豆网上搜索。
图书信息管理系统
黑龙江东方学院
题目:
教材管理系统设计
学生姓名张珂
学号
专业软件工程
班级软件一班
学部计算机科学与电气工程学部
目 录
第1章绪论1
1.1设计目的1
1.2内容与要求1
第2章系统总体设计2
2.1系统框图2
2.2系统功能描述2
2.3开发环境介绍2
第3章系统详细设计3
3.1系统流程图3
3.2各个模块功能描述3
3.3主要算法描述4
3.4后台数据库设计4
第4章系统使用与测试6
4.1系统使用说明6
4.2系统运行结果6
第5章结论11
5.1系统主要知识点11
5.2系统难点与解决办法11
5.3编程总结11
5.4系统分工11
5.5自评成绩12
第1章绪论
1.1设计目的
设计目的本程序是为了课程设计准备。
在熟悉C语言和数据结构的基础下,完成了教材管理系统。
本程序中涉及了结构体,和C语言文件等方面的知识。
通过本程序的训练,可以进一步了解C语言在文件操作有更深刻的了解,掌握单链表存储实现对教材管理的原理,为进一步学习和进步打下基础。
设计的不同之处在这次的程序设计中,我研究了图书馆的一些基本情况,例如,教材的作者,出版社,现存量等的输入,输出,同时我还在设计中进行了插入,修改等操作等,让学习到的知识更加运用到实践中。
1.2内容与要求
1.了解教材的各种信息,然后确定教材管理系统要实现的功能,并对这些功能能否实现进行详细的分析
2.对要完成的教材的系统进行信息采集和分析。
对教材信息包括教材名、教材编号、所用册数、所用班级等各项信息进行详细分析。
3.对教材管理系统的各个模块进行划分,确定各个模块所要实现的功能。
4.对教材管理系统模块进行描述,确定各个模块之间的关系。
5.使用函数调用方式完成各模块调用,采用文件读取的方式完成数组存储。
程序在系统中以菜单方式工作,总体分为4个模块。
在设计中,运用了单链表。
在单链表中进行了各种操作,包括,删除,查找,修改。
将所输入的信息和记录保存到与此程序同目录下的library文件夹下。
第2章系统总体设计
2.1系统设计的组成框图
。
信息增加。
2.2功能描述
利用图书信息主函数分别调用添加图书信息子函数、删除图书信息子函数、查找图书信息子函数、显示所有图书子函数
2.3开发环境介绍
在熟悉C语言和数据结构的基础下,完成了教材管理系统。
本程序中涉及了结构体,和C语言文件等方面的知识。
通过本程序的训练,可以进一步了解C语言在文件操作有更深刻的了解,掌握单链表存储实现对图书信息管理的原理,为进一步学习和进步打下基础。
设计的不同之处在这次的程序设计中,我研究了图书的一些基本情况,例如,教材名、教材编号、所用册数、所用班级等的输入,输出,同时我还在设计中进行了插入,修改等操作等,让学习到的知识更加运用到实践中。
第3章系统详细设计
3.1程序设计流程图
3.2功能模块设计
所用数据结构:
线性表、查找、排序
链表:
用一组地址任意的存储单元存放线性表中的数据元素。
以元素(数据元素的映象)+指针(指示后继元素存储位置)
=结点(表示数据元素或数据元素的映象)
以“结点的序列”表示线性表称作线性链表(单链表)
单链表是一种链式存取的结构,为找第i个数据元素必须先找到第i-1个数据元素。
因此,查找第i个数据元素的基本操作为:
移动指针,比较j和i。
(1)malloc(size)
在内存的动态存储区申请一个长度为size字节的连续空间。
(2)calloc(n,size)
在内存的动态存储区申请n个长度为size字节的连续空间,函数返回值为分配空间的首地址。
若此函数未被成功执行,函数返回值为0。
(3)free(p)
释放由指针p所指向的存储单元,而存储单元的大小是最近一次调用malloc()或calloc()函数时所申请的存储空间。
运用了单链表的插入、删除、排序、修改等一些操作!
3.3主要算法描述
在这个程序中,我运用了结构体,c语言文件读写,删除,查询和修改函数。
在这个程序中,我使用了while循环,if…else…和选择语句swicth。
我借鉴了一些书上的函数,用来完成某个功能模块的实现。
在这个教材管理系统,只有一些相对简单的数据结构的知识。
只是在c语言的文件上,有一些问题,对这个文件的读写上我还有很多的不足。
主函数的执行步骤是有很多的缺陷,需要在以后的中逐步的改善一下。
第4章系统使用与测试
4.1使用说明
本教材管理系统执行的过程是它首先以读写的方式打开数据文件,文件默认为在C盘下的people,若该文件不存在,则需要重新输入文件。
当进入教材管理系统的目录中,按键操作,从键盘中输入0到6之间任何按键的数值,进行操作,就可检测所有的程序了。
4.2系统运行结果
主菜单显示
运行结果
第5章结论
5.1系统中主要的知识点
本程序中涉及了结构体,和C语言文件等方面的知识。
5.2系统难点以及解决办法
在整个的测试中,开始是遇到了很多的错误,起初是一些表达式,语法的错误。
我进行了修改工作。
这些工作是简单修改。
但是在后来操作中又出现了{}没对齐的错误。
我还经常出现字符数组的问题。
最后在老师提醒下改正了。
5.3编程总结
在这个程序中,我运用了结构体,c语言文件读写,删除,查询和修改函数。
在这个程序中,我使用了while循环,if…else…和选择语句swicth。
我借鉴了一些书上的函数,用来完成某个功能模块的实现。
在这个教材管理系统,只有一些相对简单的数据结构的知识。
只是在c语言的文件上,有一些问题,对这个文件的读写上我还有很多的不足。
主函数的执行步骤是有很多的缺陷,需要在以后的中逐步的改善一下。
5.4系统的分工
图书管理系统管理信息录入模块、信息浏览模块、更新记录模块、信息查询模块。
信息录入模块又分为从文件中提取和从键盘中读入两个部分。
信息浏览模块分为输出至屏幕和输出至文件。
更新记录模块分为删除记录修改记录。
信息查询模块分为按图书号查询和按学历查询。
5.5自评成绩
通过本程序的训练,可以进一步了解C语言在文件操作有更深刻的了解,掌握单链表存储实现对图书信息管理的原理,为进一步学习和进步打下基础。
设计的不同之处在这次的程序设计中,我研究了图书的一些基本情况,例如,图书学历,工资,住址等的输入,输出,同时我还在设计中进行了插入,修改等操作等,让学习到的知识更加运用到实践中。
在这个教材管理系统,只有一些相对简单的数据结构的知识。
只是在c语言的文件上,有一些问题,对这个文件的读写上我还有很多的不足。
主函数的执行步骤是有很多的缺陷,需要在以后的中逐步的改善一下。
附录
(1)基本思想:
(2)图书信息录入、图书信息的查询、图书信息的排序、图书信息的修改、图书信息的删除、图书的借阅、图书的归还、退出图书管理系统。
(3)程序中的主要函数有:
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)//归还
/*程序源代码*/
#include
#include
#include
#include
typedefstruct{
intnum;
charname[20];
charauthor[20];
charpress[20];
intcount;
charprice[10];
}ElemType;
typedefstructLNode//定义单链表结点类型
{
ElemTypedata;
structLNode*next;
}LinkList;
voidInitList(LinkList*L)//初始化线性表
{
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;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; } 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"); scanf("%d",&c); if(c>4||c<1){ 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)//查找图书作者 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; 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++; } } if(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.num q=q->next;//在有序表中找插入*p的直接前驱结点*q的位置 p->next=q->next;//将*p插入到*q之后 q->next=p; p=r;//扫描原单链表余下的结点 } } return0; } voidDisplay(LinkList*L)//输出排序结果 { 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"); return0; } 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; } voidBorrow(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) printf("此图书不存在! \n"); elseif(p->data.count<1) printf("此书已借完! \n"); elseif(strcmp(name1,p->data.name)==0){ printf("借书成功! \n"); p->data.count--; } } voidReturn(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) printf("错误! 此图书不存在! \n"); elseif(strcmp(name1,p->data.name)==0){ printf("该书归还成功! \n"); p->data.count++; } } voidmenu(){//菜单函数 printf("----------------------------------------------------------\n"); printf("欢迎光临图书管理系统! \n"); printf("-----------------------------------------------------------\n"); printf("1.图书信息录入添加功能: \n"); printf("2.图书信息查询功能: \n"); printf("3.图书信息排序功能: \n"); printf("4.图书的修改功能: \n"); printf("5.图书的删除功能: \n"); printf("6.图书借阅功能: \n"); printf("7.图书归还功能: \n"); printf("0.退出系统: \n"); printf("请选择你需要的操作: \n"); } intmain()//主函数 { ints; LinkList*L; L=(LinkList*)malloc(sizeof(LinkList)); InitList(L); menu(); printf("请输入编号: \n"); scanf("%d",&s); while(s! =0){ switch(s){ case1: CreateListR(L); break; case2: LocateElem(L); break; case3: Sort(L); Display(L); break; case4: ModifyList(L); break; case5: ListDelete(L); break; case6: Borrow(L); break; case7: Return(L); break
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 信息管理 系统