图书信息管理系统.docx

上传人:b****8 文档编号:9437477 上传时间:2023-02-04 格式:DOCX 页数:22 大小:410.20KB
下载 相关 举报
图书信息管理系统.docx_第1页
第1页 / 共22页
图书信息管理系统.docx_第2页
第2页 / 共22页
图书信息管理系统.docx_第3页
第3页 / 共22页
图书信息管理系统.docx_第4页
第4页 / 共22页
图书信息管理系统.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

图书信息管理系统.docx

《图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统.docx(22页珍藏版)》请在冰豆网上搜索。

图书信息管理系统.docx

图书信息管理系统

黑龙江东方学院

题目:

教材管理系统设计

学生姓名张珂

学号

专业软件工程

班级软件一班

学部计算机科学与电气工程学部

目  录

第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.numdata.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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1