图书信息管理系统设计.docx
《图书信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《图书信息管理系统设计.docx(32页珍藏版)》请在冰点文库上搜索。
图书信息管理系统设计
东南大学
C语言课程设计报告
课程名称:
计算机综合课程设计
学院:
土木工程学院
设计题目:
图书信息管理系统设计
级别:
A级
学生姓名:
学号:
同组学生:
学号:
指导教师:
2012年09月05日
课程报告任务书
题目
图书信息管理系统
主要内容
图书信息包括:
登录号,书名,作者名,分类号,出版单位,出版时间,价格等。
试设计一图书信息管理系统,使之提供以下功能:
1)系统以菜单方式工作;
2)图书信息录入功能(图书信息用文本文件形式保存);
3)图书信息浏览功能;
4)查询和排序功能:
按书名查找;
按作者名查找;
5)图书信息删除功能;
6)图书信息修改功能。
任务要求
采用模块化程序设计;
鼓励可视化编程;
源程序中应有足够的注释;
学生可自行增加新功能模块(视情况可另外加分);
必须上机调试通过;
注重算法运用,优化存储效率与运算效率;
需提交源程序(含有注释)及相关文件(数据或数据库文件);
(cpp文件、txt或dat文件等)
提交设计报告书
成绩评定
评定教师
摘要:
随着当今社会发展,信息化水平逐步提高,对图书管理有了新的要求,因此,编写一个信息管理系统是十分必要的。
为了满足图书管理的要求,通过计算机技术给图书管理人员带来便利。
使用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/*引用库函数*/
#include
#include
#include
#include
#include
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);
break;
case3:
Search_name(Head);
break;
case4:
Search_author(Head);
break;
case5:
Listbyname(&Head);
break;
case6:
Delete(&Head);
break;
case7:
Update(Head);
break;
case8:
Save();
break;
case9:
Read();
break;
case0:
Exit();
default:
putchar('\a');
}
}
}
menu_select()//主菜单函数
{
inta;
printf("\n\t\t\t欢迎使用图书信息管理系统\n\n\n\n\n\t\t*****请按任意键进入系统菜单!
*****\n");
getch();
system("cls");
printf("\t\t********************MENU*********************\n");//主菜单
printf("\t\t1.录入图书信息\n");
printf("\t\t2.浏览图书信息\n");
printf("\t\t3.按书名查询图书信息\n");
printf("\t\t4.按作者名查询图书信息\n");
printf("\t\t5.图书信息排序\n");
printf("\t\t6.删除图书信息\n");
printf("\t\t7.修改图书信息\n");
printf("\t\t8.图书数据保存\n");
printf("\t\t9.图书信息文件打开\n");
printf("\t\t0.退出\n");
printf("\t\t***********************************************\n");
do
{
printf("\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");/*交互输入*/
printf("\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("分配空间失败!
");return;}
if(q==NULL)
*Head=r;
else
{q->next=r;}
strcpy(r->AN,AN);
printf("\n\t\t输入书名:
");//录入图书信息
scanf("%s",r->name);
getchar();
printf("\n\t\t输入作者名:
");
scanf("%s",r->author);
getchar();
printf("\n\t\t输入分类号:
");
scanf("%s",r->clc);
getchar();
printf("\n\t\t输入出版单位:
");
scanf("%s",r->company);
getchar();
printf("\n\t\t输入出版日期:
");
gets(r->date);
printf("\n\t\t输入价格:
");
scanf("%s",r->price);do
{
printf("\n\t\t录入成功!
!
!
!
");
num++;
printf("选择是否继续录入(Y/N)?
:
");/*连续录入图书信息*/
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
Insert(Head);
else
{
if(c=='n'||c=='N')
return;
else
printf("\n\t\t输入错误,请重新输入!
!
!
");
}
}
while(c!
='y'&&c!
='n'&&c!
='Y'&&c!
='N');
}
voidScan(PointerHead)//显示图书信息函数
{
Pointerp;
p=Head;
if(p==NULL)
printf("记录为空");//检测是否有图书信息
else
{
printf("\n\t共有%d条记录",num);
while(p!
=NULL)
{
printf("\n\n\t\t登录号:
%-10s",p->AN);//显示图书信息
printf("\n\t\t书名:
%-20s",p->name);
printf("\n\t\t作者名:
%-20s",p->author);
printf("\n\t\t分类号:
%-10s",p->clc);
printf("\n\t\t出版单位:
%-20s",p->company);
printf("\n\t\t出版时间:
%-20s",p->date);
printf("\n\t\t价格:
¥%-10s",p->price);
p=p->next;
}
printf("\n\t\t请按任意键回到主菜单");
return;
}
}
voidSearch_name(PointerHead)//按书名查找函数
{
intflag=0;//标记变量的初值
charname[10];
Pointerp;
printf("\n请输入需要查询的书名:
");
scanf("%s",name);
printf("\n\t\t*************以下是您查找的信息***************");
p=Head;
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)//查找符合的图书
{
printf("\n\t登录号:
%-10s",p->AN);
printf("\n\t书名:
%-20s",p->name);
printf("\n\t作者名:
%-20s",p->author);
printf("\n\t分类号:
%-10s",p->clc);
printf("\n\t出版单位:
%-20s",p->company);
printf("\n\t出版时间:
%-20s",p->date);
printf("\n\t价格:
¥%-10s",p->price);
flag=1;//找到标记变量设为1
p=p->next;//指针走到下一个节点
}
else
p=p->next;
}
if(flag==0)
printf("\n\t\t没有相同书名纪录");
printf("\n\t\t请按任意键返回主菜单");
getchar();
}
voidSearch_author(PointerHead)//按作者名查找函数
{
intflag=0;
charauthor[10];
Pointerp;
printf("\n请输入需要查询的作者名:
");
scanf("%s",author);
printf("\n\t\t*************以下是您查找的信息***************");
p=Head;
while(p!
=NULL)//查找符合的图书
{
if(strcmp(p->author,author)==0)/*找到图书显示信息*/
{
printf("\n\t登录号:
%-10s",p->AN);
printf("\n\t书名:
%-20s",p->name);
printf("\n\t作者名:
%-20s",p->author);
printf("\n\t分类号:
%-10s",p->clc);
printf("\n\t出版单位:
%-20s",p->company);
printf("\n\t出版时间:
%-20s",p->date);
printf("\n\t价格:
¥%-10s",p->price);
flag=1;
p=p->next;
}
else
p=p->next;
}
if(flag==0)
printf("\n\t\t没有相同作者名纪录");
printf("\n\t\t请按任意键返回主菜单");
getch();
}
voidListbyname(Pointer*Head)//按书名排序函数
{
Pointerp,q;
inti,j;
chart[10];
charc;
if(Head==NULL)
{
printf("\n\t\t没有任何资料!
\n");
return;
}
if(num==0)//检查是否存在数据可供排序
{
printf("\n\t\t图书信息记录为空!
!
请按任意键返回主菜单。
");
getchar();
return;
}
p=q=*Head;
for(i=0;i{
for(j=i+1;j{
q=p;
p=p->next;//使指针指向下一个结点
if(strcmp(q->name,p->name)>0)//检查二者排序先后
{//p指针对应数据应排于q指针对应数据后,p,q进行数据交换
strcpy(t,p->AN);
strcpy(p->AN,q->AN);
strcpy(q->AN,t);
strcpy(t,p->author);
strcpy(p->author,q->author);
strcpy(q->author,t);
strcpy(t,p->clc);
strcpy(p->clc,q->clc);
strcpy(q->clc,t);
strcpy(t,p->company);
strcpy(p->company,q->company);
strcpy(q->company,t);
strcpy(t,p->date);
strcpy(p->date,q->date);
strcpy(q->date,t);
strcpy(t,p->name);
strcpy(p->name,q->name);
strcpy(q->name,t);
strcpy(t,p->price);
strcpy(p->price,q->price);
strcpy(q->price,t);
}
}
q=*Head;p=*Head;}
do
{
printf("\n\t排序完成,是否显示(Y/N)?
:
");/*询问是否显示排序结果*/
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
Scan(*Head);//显示排序结果
else
{
if(c=='n'||c=='N')
return;//返回主菜单
else
printf("\n\t\t输入错误,请重新输入!
!
!
");//错误则继续询问
}
}
while(c!
='y'&&c!
='n'&&c!
='Y'&&c!
='N');
}
voidDelete(Pointer*Head)/*删除函数*/
{intflag=1;
charAN[10];
charc,z;
Pointerp,q;
printf("\n\t\t*******************图书删除*******************\n");
printf("\t请输入要删除图书的信息的登录号:
");
scanf("%s",AN);
p=q=*Head;/*查找符合条件的图书*/
while(p!
=NULL&&flag)
{
if(strcmp(p->AN,AN)==0)/*找到该图书*/
{
printf("\t\n登录号:
%-10s",p->AN);//显示即将要删除的图书的信息
printf("\t\n书名:
%-20s",p->name);
printf("\t\n作者名:
%-20s",p->author);
printf("\t\n分类号:
%-10s",p->clc);
printf("\t\n出版单位:
%-20s",p->company);
printf("\t\n出版时间:
%-20s",p->date);
printf("\t\n价格:
¥%-10s\n",p->price);
printf("确定删除?
确定请输Y,其它则不删除");//询问是否删除
getchar();
scanf("%c",&z);
if(z=='Y'||z=='y')
{if(p==*Head)
{*Head=p->next;free(p);}/*删除图书信息*/
else
{q->next=p->next;free(p);}
flag=0;
}
else
{printf("图书信息未删除,返回主菜单。
");
return;
}
}
else
{q=p;p=p->next;}/*指针走到下一个节点*/
printf("\t\t删除成功!
!
!
\n");
}
if(flag)
printf("\t没有找到可以删除的数据!
!
!
");
do
{
printf("选择是否继续删除(Y/N)?
:
");/*连续删除图书信息*/
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
Delete(Head);/*继续删除*/
else
{
if(c=='n'||c=='N')
return;/*不删除返回主菜单*/
else
printf("\n\t\t输入错误,请重新输入!
!
!
");
}
}
while(c!
='y'&&c!
='n'&&c!
='Y'&&c!
='N');
}
voidUpdate(PointerHead)/*图书信息修改函数*/
{
intflag=1;
charAN[10];
charc;
Pointerp;
printf("\n\t\t*****************图书信息修改*****************\n");
printf("\t请输入要修改的图书的登录号:
");
scanf("%s",AN);/*查找符合条件的图书*/
p=Head;
while(p!
=NULL&&flag)
{
if(strcmp(p->AN,AN)==0)
{
printf("\n\t\t请输入登录号:
");/*修改图书信息*/
scanf("%s",