图书信息管理系统设计教学教材Word文档下载推荐.docx
《图书信息管理系统设计教学教材Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统设计教学教材Word文档下载推荐.docx(32页珍藏版)》请在冰豆网上搜索。
评定教师
摘要:
随着当今社会发展,信息化水平逐步提高,对图书管理有了新的要求,因此,编写一个信息管理系统是十分必要的。
为了满足图书管理的要求,通过计算机技术给图书管理人员带来便利。
使用C语言编写图书管理系统,其中主要运用了结构化设计与链表结构。
本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。
实现了图书馆内管理的一般功能,包括图书信息录入、浏览、排序、删除和修改等功能。
所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理。
图书信息包括登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、删除和修改等基本操作。
关键字:
图书信息管理C语言链表结构
1.设计的目的与要求-------------------------------------------------4
2.分析-------------------------------------------------------------4
3.总体设计---------------------------------------------------------5
4.主要功能算法-----------------------------------------------------5
5.完整程序及注释---------------------------------------------------8
6.调试分析--------------------------------------------------------24
7.总结------------------------------------------------------------28
8.答辩记录--------------------------------------------------------29
9.教师意见--------------------------------------------------------29
1.设计的目的与要求
1.1设计的目的
使用链表和结构等结构数据,编写一C语言程序,实现图书信息管理的功能,通过此系统可对图书馆图书信息进行管理和维护等操作,给图书管理人员带来便利。
1.2设计的要求
图书信息包括:
(1)系统以菜单方式工作
(2)图书信息录入功能(图书信息用文本文件形式保存)
(3)图书信息浏览功能
(4)查询和排序功能:
按书名查找
按作者名查找
(5)图书信息删除功能
(6)图书信息修改功能
2.分析
根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;
在程序中需实现图书信息录入,浏览,查询,排序,删除和修改等功能的操作,所以需要建立相应的函数模块来实现;
另外还需提供键盘式选择菜单实现功能,在运行时达到所要目的。
3.总体设计
根据题目要求,我们经过分析和讨论后,决定将此系统分为十个功能模块:
(1)菜单选择模块
(2)图书信息录入功能模块
(3)图书信息浏览功能模块
(4)图书信息查询功能模块
(5)图书信息排序功能模块
(6)图书信息删除功能模块
(7)图书信息修改功能模块
(8)图书数据保存功能模块
(9)信息文件打开功能模块
(10)退出系统功能模块
4.主要功能的算法
4.1录入函数算法
4.2按书名查找算法(按作者名与此类似)
4.3删除图书信息算法(修改与此类似)
4.4显示函数算法
5.完整程序及注释
#include<
iostream.h>
/*引用库函数*/
#include<
stdio.h>
#include<
string.h>
conio.h>
stdlib.h>
windows.h>
typedefstructbook_info//定义图书信息的结构体变量并声明新的类型名
{
charAN[10];
/*登录号*/
charname[20];
/*书名*/
charauthor[20];
/*作者名*/
charclc[10];
/*分类名*/
charcompany[20];
/*出版单位*/
chardate[20];
/*出版日期*/
charprice[10];
/*价格*/
structbook_info*next;
}Booklist,*Pointer;
intnum=0;
//全局变量的定义
PointerHead=NULL;
//头指针为空
FILE*fp;
//指向文件的指针
/*声明函数*/
intmenu_select();
/*主菜单函数*/
voidInsert(Pointer*Head);
/*录入函数*/
voidScan(PointerHead);
/*显示函数*/
voidSearch_name(PointerHead);
/*按书名查找函数*/
voidSearch_author(PointerHead);
/*按作者名查找函数*/
voidListbyname(Pointer*Head);
/*按书名排序函数*/
voidDelete(Pointer*Head);
//删除函数
voidUpdate(PointerHead);
//修改函数
voidSave();
//用文本文件形式保存函数
voidRead();
//读入文本文件函数
voidExit();
//退出函数
voidmain()//主函数
system("
cls"
);
/*运行前清屏*/
for(;
;
)
{
switch(menu_select())
case1:
Insert(&
Head);
break;
case2:
Scan(Head);
case3:
Search_name(Head);
case4:
Search_author(Head);
case5:
Listbyname(&
Head);
case6:
Delete(&
case7:
Update(Head);
case8:
Save();
case9:
Read();
case0:
Exit();
default:
putchar('
\a'
}
}
menu_select()//主菜单函数
inta;
printf("
\n\t\t\t欢迎使用图书信息管理系统\n\n\n\n\n\t\t*****请按任意键进入系统菜单!
*****\n"
getch();
\t\t********************MENU*********************\n"
//主菜单
\t\t1.录入图书信息\n"
\t\t2.浏览图书信息\n"
\t\t3.按书名查询图书信息\n"
\t\t4.按作者名查询图书信息\n"
\t\t5.图书信息排序\n"
\t\t6.删除图书信息\n"
\t\t7.修改图书信息\n"
\t\t8.图书数据保存\n"
\t\t9.图书信息文件打开\n"
\t\t0.退出\n"
\t\t***********************************************\n"
do
\n\t请选择您所需要的服务:
"
scanf("
%d"
&
a);
while(a<
0||a>
9);
returna;
voidInsert(Pointer*Head)//录入图书信息函数
charAN[10];
charc;
Pointerp,q,r;
printf("
\n\t\t****************请输入图书信息****************\n"
/*交互输入*/
\n\t\t请输入登录号:
scanf("
%s"
AN);
p=q=*Head;
//检测登录号是否重复
while(p!
=NULL)
if(strcmp(p->
AN,AN)==0)
printf("
已经有相同的登录号:
return;
else
{q=p;
p=p->
next;
r=(Pointer)malloc(sizeof(Booklist));
r->
next=NULL;
if(r==NULL)
{printf("
分配空间失败!
if(q==NULL)
*Head=r;
else
{q->
next=r;
strcpy(r->
AN,AN);
\n\t\t输入书名:
//录入图书信息
r->
name);
getchar();
\n\t\t输入作者名:
author);
\n\t\t输入分类号:
clc);
\n\t\t输入出版单位:
company);
\n\t\t输入出版日期:
gets(r->
date);
\n\t\t输入价格:
price);
\n\t\t录入成功!
!
num++;
选择是否继续录入(Y/N)?
:
/*连续录入图书信息*/
getchar();
%c"
c);
if(c=='
y'
||c=='
Y'
Insert(Head);
else
n'
N'
return;
printf("
\n\t\t输入错误,请重新输入!
while(c!
='
&
c!
voidScan(PointerHead)//显示图书信息函数
Pointerp;
p=Head;
if(p==NULL)
记录为空"
//检测是否有图书信息
\n\t共有%d条记录"
num);
\n\n\t\t登录号:
%-10s"
p->
AN);
//显示图书信息
\n\t\t书名:
%-20s"
\n\t\t作者名:
\n\t\t分类号:
%-10s"
clc);
\n\t\t出版单位:
%-20s"
company);
\n\t\t出版时间:
date);
\n\t\t价格:
¥%-10s"
p=p->
\n\t\t请按任意键回到主菜单"
voidSearch_name(PointerHead)//按书名查找函数
intflag=0;
//标记变量的初值
charname[10];
printf("
\n请输入需要查询的书名:
name);
\n\t\t*************以下是您查找的信息***************"
{
if(strcmp(p->
name,name)==0)//查找符合的图书
{
\n\t登录号:
\n\t书名:
\n\t作者名:
\n\t分类号:
\n\t出版单位:
\n\t出版时间:
\n\t价格:
flag=1;
//找到标记变量设为1
p=p->
//指针走到下一个节点
if(flag==0)
\n\t\t没有相同书名纪录"
\n\t\t请按任意键返回主菜单"
voidSearch_author(PointerHead)//按作者名查找函数
charauthor[10];
\n请输入需要查询的作者名:
author);
=NULL)//查找符合的图书
author,author)==0)/*找到图书显示信息*/
\n\t\t没有相同作者名纪录"
getch();
voidListbyname(Pointer*Head)//按书名排序函数
Pointerp,q;
inti,j;
chart[10];
if(Head==NULL)
\n\t\t没有任何资料!
\n"
if(num==0)//检查是否存在数据可供排序
\n\t\t图书信息记录为空!
!
请按任意键返回主菜单。
p=q=*Head;
for(i=0;
i<
num;
i++)//排序
for(j=i+1;
j<
j++)
q=p;
//使指针指向下一个结点
if(strcmp(q->
name,p->
name)>
0)//检查二者排序先后
{//p指针对应数据应排于q指针对应数据后,p,q进行数据交换
strcpy(t,p->
strcpy(p->
AN,q->
strcpy(q->
AN,t);
author,q->
author,t);
clc,q->
clc,t);
company,q->
company,t);
date,q->
date,t);
name,q->
name,t);
price,q->
price,t);
q=*Head;
p=*Head;
do
\n\t排序完成,是否显示(Y/N)?
/*询问是否显示排序结果*/
Scan(*Head);
//显示排序结果
//返回主菜单
//错误则继续询问
voidDelete(Pointer*Head)/*删除函数*/
{intflag=1;
charAN[10];
charc,z;
\n\t\t*******************图书删除*******************\n"
\t请输入要删除图书的信息的登录号:
/*查找符合条件的图书*/
=NULL&
flag)
AN,AN)==0)/*找到该图书*/
\t\n登录号:
//显示即将要删除的图书的信息
\t\n书名:
\t\n作者名:
\t\n分类号:
\t\n出版单位:
\t\n出版时间:
\t\n价格:
¥%-10s\n"
确定删除?
确定请输Y,其它则不删除"
//询问是否删除
z);
if(z=='
||z=='
{if(p==*Head)
{*Head=p->
free(p);
}/*删除图书信息*/
{q->
next=p->
flag=0;
else
{printf("
图书信息未删除,返回主菜单。
}/*指针走到下一个节点*/
\t\t删除成功!
if(flag)
\t没有找到可以删除的数据!
选择是否继续删除(Y/N)?
/*连续删除图书信息*/
Delete(Head);
/*继续删除*/
if(c=='
/*不删除返回主菜单*/
voidUpdate(PointerHead)/*图书信息修改函数*/
intflag=1;
\n\t\t*****************图书信息修改*****************\n"
\t请输入要修改的图书的登录号:
/*修改图书信息*/