123图书信息管理系统.docx
《123图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《123图书信息管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
123图书信息管理系统
东南大学
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)退出系统功能模块
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);/*按作者名查找函数*/
voidDelete(Pointer*Head);//删除函数
voidUpdate(PointerHead);//修改函数
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:
Delete(&Head);
break;
Case6:
Update(Head);
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\t7.修改图书信息\n");
printf("\t\t0.退出\n");
printf("\t\t***********************************************\n");
do
{
printf("\n\t请选择您所需要的功能:
");
scanf("%d",&a);
}
while(a<0||a>6);
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();
}
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",p->AN);
printf("\n\t\t输入书名:
");
scanf("%s",p->name);
getchar();
printf("\n\t\t输入作者名:
");
scanf("%s",p->author);
getchar();
printf("\n\t\t输入分类号:
");
scanf("%s",p->clc);
getchar();
printf("\n\t\t输入出版单位:
");
scanf("%s",p->company);
getchar();
printf("\n\t\t输入出版日期:
");
gets(p->date);
printf("\n\t\t输入价格:
");
scanf("%s",p->price);
flag=0;
printf("修改成功!
!
\n");
}
else
p=p->next;/*指针走到下一个节点*/
}
if(flag)
printf("\n\t\t没有该图书记录!
!
!
");
do
{
printf("选择是否继续修改(Y/N)?
:
");/*连续修改图书信息*/
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
Update(Head);/*继续修改*/
else
{if(c=='n'||c=='N')
return;//不修改,返回菜单
else
printf("\n\t\t输入错误,请重新输入!
!
!
");
}
}
while(c!
='y'&&c!
='n'&&c!
='Y'&&c!
='N');//输入错误则继续询问
}
voidExit()/*退出程序的函数*/
{charc;
do
{printf("\n\t\t退出中......是否保存到文件(Y/N)?
");/*询问是否保存图书信息,防止丢失*/
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
{Save();exit(0);
}
else
{if(c=='n'||c=='N')
{exit(0);
}
else
printf("\n\t\t输入错误,请重新输入!
!
!
");
}
}
while(c!
='y'&&c!
='n'&&c!
='Y'&&c!
='N');//错误则继续询问
}
6.调试分析
主菜单界面
录入信息页面
浏览图书信息页面
按书名查询图书信息页面
按作者查询图书信息页面
删除图书信息页面
(1)选择不删除
(2)选择删除
修改图书信息页面
保存文本文件界面
打开文本文件界面
写入界面写入后浏览界面
退出程序界面
由程序的的调试结果可以看出,程序的各个功能运行正确无误,能达到要求。
7.总结
为了达到图书管理系统的要求,我们对各个功能分别设计一个函数,来完成特定的功能要求,再逐个进行编写,把复杂的程序简单化。
最终,我们很好的编写了该图书信息管理系统,实现了图书馆内管理的一般功能,包括图书信息录入、浏览、查询、排序、删除、修改和保存文本文件等功能。
只是我们的程序略显繁琐,还有待改进。
C语言编程是一件很有趣的事,看着自己编写的程序能执行复杂的功能,有一种成就感。
可是编程和调试的过程却是枯燥、繁琐的,特别是大的程序。
但这其中不断发现问题,解决问题的过程,让我对C语言有了更深的了解,也