数据结构课程设计报告.docx
- 文档编号:24724971
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:15
- 大小:40.71KB
数据结构课程设计报告.docx
《数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告
数据结构与算法课程论文
题目:
图书管理系统
院(系):
专业:
信息管理与信息系统
课程名称:
数据结构与算法
姓名:
学号:
指导老师:
2011年12月
图书管理系统
【设计目的】
现如今,图书的种类越来越多,并且增长速度越来越快,如何快速在海量的信息里查询出自己想要的信息,成为计算机软件科学研究的重点,图书管理系统旨在方便、快捷的录入图书信息,方便、快捷、准确的查询我们想得到的图书信息,为我们的学习、生活提供方便。
【设计思路】
根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;在程序中需实现图书信息录入,浏览,查询,删除和修改等功能的操作,所以需要建立相应的模块来实现;另外还需提供键盘式选择菜单实现功能,在运行时达到所要目的。
【总体设计】
根据题目要求,可以将系统分为六个模块:
(1)图书信息录入功能。
(2)图书信息查询功能。
(3)图书信息修改功能。
(4)图书信息删除功能。
(5)图书信息浏览功能。
图1系统功能模块图
【详细设计】
1.主函数
主函数设计要求简洁,只提供部分提示语和函数的调用。
【程序】
图2.主函数流程图
2.引入库函数和定义变量
#include
#include
#include
#include
#defineNsizeof(structbook)
#definePT"%-5d%10s%6s%6s%8s%3d\n",p->num,p->name,p->where,p->author,p->pub,p->count
3.图书信息结构体
structbook
{
intnum;/*书号*/
charname[10];/*书名*/
charwhere[10];/*所在书库*/
charauthor[15];/*作者*/
charpub[20];/*出版社*/
intcount;/*数量*/
structbook*next;
};
4.图书信息输出模块
voidprint(structbook*p0)
{
structbook*p;
p=p0->next;
printf("\n\n\t\t^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^");
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
while(p!
=NULL)
{
printf(PT);
p=p->next;
}
getch();
}
5.图书信息输入模块
structbook*creat()
{
structbook*head,*p1,*p2;
inti=0;
head=p2=(structbook*)malloc(N);
head->next=NULL;
printf("\n\n\t\t录入图书信息");
printf("\n\t---------------------------------------");
while
(1)
{
p1=(structbook*)malloc(N);
printf("\n请输入图书编号(书号为0结束):
");
scanf("%d",&p1->num);
if(p1->num!
=0)
{
printf("\n\n书名所在书库作者出版社图书数量\n");
scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count);
p2->next=p1;
p2=p1;
i++;
}
else
break;
}
p2->next=NULL;
free(p1);
printf("\n\t\t----------------------------------------");
printf("\n\t\t%d种书录入完毕",i);
getch();
returnhead;
}
6.图书信息查找模块
voidfind(structbook*p0)
{
charname[10];
intflag=1;
structbook*p;
p=p0->next;
printf("请输入要查找的书名:
\n");
scanf("%s",name);
for(p=p0;p;p=p->next)
if(strcmp(p->name,name)==0)
{
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
printf(PT);
flag=0;
break;
}
if(flag)
printf("\n暂无此图书信息\n");
getch();
}
7.删除图书模块
voiddel(structbook*p0)
{
charname[10];
intflag=1;
structbook*p;
p=p0;
printf("请输入要删除的书名:
\n");
scanf("%s",name);
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)
{
p0->next=p->next;/*后续节点连接到前驱节点之后*/
free(p);
printf("\t该书资料已删除.");
flag=0;
break;
}
p0=p;
p=p->next;
}
if(flag)printf("\n\t无此图书信息。
");
getch();
}
8.添加图书模块
voidinsert(structbook*p0)
{
structbook*p;
p=(structbook*)malloc(N);
while
(1)
{
printf("\n请输入要增加的图书编号(书号为0退出):
");
scanf("%d",&p->num);
if(p->num!
=0)
{
if(p0->next!
=NULL&&p0->next->num==p->num)/*找到重号*/
{
p=p->next;
free(p);
printf("\t该书已存在");
}
else
{
printf("\n\n书名所在书库作者出版社图书数量\n");
scanf("%s%s%s%s%d",p->name,p->where,p->author,p->pub,&p->count);
p->next=p0->next;
p0->next=p;
printf("\t已成功插入.");
}
}
else
break;
}
getch();
}
9.修改图书信息模块
voidmodify(structbook*p0)
{
charname[10];
intflag=1;
intchoice;
structbook*p;
p=p0->next;
printf("请输入要修改的书名:
\n");
scanf("%s",name);
while(p!
=NULL&&flag==1)
{
if(strcmp(p->name,name)==0)
{
printf("\n\t请选择要修改的项:
");
printf("\n\t1.修改图书编号\n");
printf("\n\t2.修改图书所在书库\n");
printf("\n\t3.修改图书作者\n");
printf("\n\t4.修改图书出版社\n");
printf("\n\t5.修改图书库存量\n");
scanf("%d",&choice);
switch(choice)
{
case1:
{
printf("\n请输入新的图书编号:
");
scanf("%d",p->num);break;
}
case2:
{
printf("\n请输入新的图书书库:
");
scanf("%s",p->where);break;
}
case3:
{
printf("\n请输入新的图书作者:
");
scanf("%s",p->author);break;
}
case4:
{
printf("\n请输入新的图书出版社:
");
scanf("%s",p->pub);break;
}
case5:
{
printf("\n请输入新的图书库存量:
");
scanf("%d",p->count);break;
}
}
printf("\n\t该项已成功修改。
\n\t新的图书信息:
");
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
printf(PT);
flag=0;
}
p0=p;
p=p0->next;
}
if(flag)printf("\n\t暂无此图书信息。
");
getch();
}
10.读取文件
structbook*read_file()
{
inti=0;
structbook*p,*p1,*head=NULL;
FILE*fp;
if((fp=fopen("library.txt","rb"))==NULL)
{
printf("\n\n\n\n\n\t********数据文件不存在,请创建!
**********");
getch();
returnNULL;
}
head=(structbook*)malloc(N);
p1=head;
head->next=NULL;
printf("\n已有图书信息:
");
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
while(!
feof(fp))
{
p=(structbook*)malloc(N);/*开辟空间以存放的取得信息*/
while(fscanf(fp,"%d%s%s%s%s%d",&p->num,p->name,p->where,p->author,p->pub,&p->count)!
=EOF)
{
printf(PT);
i++;
}
p1->next=p;
p1=p;
}
p1->next=NULL;
fclose(fp);
printf("\n共种%d图书信息",i);
printf("\n\n\n文件中的信息以正确读出。
按任意键进入主菜单。
");
getch();
return(head);
}
11.保存文件
voidsave(structbook*head)
{
FILE*fp;
structbook*p;
fp=fopen("library.txt","wb");/*以只写方式打开二进制文件*/
if(fp==NULL)/*打开文件失败*/
{
printf("\n=====>打开文件失败!
\n");
getch();
return;
}
else
for(p=head->next;p!
=NULL;p=p->next)
fprintf(fp,"%d%s%s%s%s%d\n",p->num,p->name,p->where,p->author,p->pub,p->count);
fclose(fp);
printf("\n\t保存文件成功!
\n");
}
12.主程序
voidmain()
{
structbook*head=NULL;
intchoice=1;
head=read_file();
if(head==NULL)
{
printf("\n\t\t**********");
getch();
head=creat();
}
do
{
system("cls");
printf("\t\t----------Welcome---------\n");
printf("\n\n\t欢迎您,图书管理员.\n");
printf("\n\n");
printf("\n\t请选择:
");
printf("\n\t1.查询图书信息\n");
printf("\n\t2.修改图书信息\n");
printf("\n\t3.增加图书信息\n");
printf("\n\t4.删除图书信息\n");
printf("\n\t5.显示所有图书信息\n");
printf("\n\t0.退出系统\n");
printf("\n请输入选择操作的编号:
");
scanf("%d",&choice);
switch(choice)
{
case1:
find(head);break;
case2:
modify(head);break;
case3:
insert(head);break;
case4:
del(head);break;
case5:
print(head);break;
case0:
system("cls");
printf("\n\n\n\n\n\t^^^^^^^^^^谢谢使用,再见^^^^^^^^^^!
\n\n");
break;
}
}while(choice!
=0);
save(head);
}
【设计体会】
这次课程设计让我掌握了许多的有用知识。
首先通过不断地学习和锻炼更加熟练地掌握应用软件MicrosoftVisualC++6.0了。
设计正确及合适的程序对于我们初学者来说是很大的难题,出现一丁点儿错误就得非很大的努力去修改,正式者一步步一点点的努力让我对C语言游乐更深的认识。
同时我掌握了解决问题的方法,这无论是对以后的学习、生活都有无比重要的价值。
在设计中,每个同学都会遇到一些困难,或多或少,这些困难常常让我心情烦躁,比如不能清晰的建立设计模块,不会修改出现的错误等等,然后我向同学寻求帮助,向他们学习,最终通过自己努力建立了模块。
不可避免地程序中肯定依然存在者某些问题,我希望在以后的学习和应用中不断提高自己的能力,攻克遇到的困难。
【参考文献】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告