数据结构实验报告模板.docx
- 文档编号:9701179
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:19
- 大小:253.28KB
数据结构实验报告模板.docx
《数据结构实验报告模板.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告模板.docx(19页珍藏版)》请在冰豆网上搜索。
数据结构实验报告模板
Dataorganizationcurriculmproject
数据结构实验报告
实验题目:
图书管理系统
专业班级:
09信管5班
学生学号:
学生姓名:
指导老师:
叶妙老师
完成时间:
2011/5/20
目录
1.问题描述……………………………………………….1页
2.基本要求………………………………………………..1页
3.程序设计思想………………………………………1---2页
4.软件模块结构图………………………………………..2页
5.程序流程图……………………………………………..3页
6.源程序………………………………………………4---7页
7.调试分析……………………………………………8---9页
8.测试数据…………………………………………..9---10页
9.心得体会…………………………………………11---12页
一.问题描述
设计一个计算机管理系统完成图书管理基本业务。
二.基本要求
1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;
2)对书号建立索引表(线性表)以提高查找效率;
3)系统主要功能如下:
*采编入库:
新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;
*借阅:
如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;
*归还:
注销对借阅者的登记,改变该书的现存量。
三.程序设计思想
1.分析题目。
每天吃当前桃子数目的一半再加一个,所以桃子数目肯定为偶数。
用我们所熟悉的函数来表示,即:
f(x+1)=f(x)/2-1;其中x代表第多少天。
:
猴子摘桃子的那天也就是第一天就吃了所摘桃子的一半加一个,所以桃子总数应该为第一天加1再乘以2,等效为f(0)。
2.实现方法。
最容易想到的也是最简单的就是运用函数的递归。
给出了边界条件与递归函数,直接调用就可以了。
用数组实现,先定义一个一维数组,然后结合循环,也可以求解。
如果用链表的话,相对来说要复杂点。
先要构建一个动态链表,将头指针赋值给p,p赋值给q,使p,q同时指向链表头,将第十天的桃子数放在链表第一个数据域中,然后移动p,q使后一个数据域中存放的是前一个加1的2倍,即倒过来存放数据。
四.软件模块结构图
五.程序流程图
六.源程序
#include"stdio.h"
#include
#include
typedefstructbook
{
intnum;/*书号*/
charbookname[20];/*书名*/
charwriter[20];/*作者*/
intxchun;/*现存量*/
intkchun;/*库存量*/
structbook*next;
}Book;
typedefstructborrow
{
intnumber;/*证件号*/
inttime;/*期限*/
intnum;/*借的书号*/
structborrow*next;
}Borrow;
/*======本程序所输入的书名与借书人证件号都为整形========*/
Borrow*head1;
Book*head2;
Book*input()/*图书信息输入函数,使用尾插法建立图书链表*/
{
Book*s,*h,*r;
intt,tag;
printf("输入结束标志:
");
scanf("%d",&tag);
h=(Book*)malloc(sizeof(Book));
r=h;
printf("继续输入请按任意键,若想结束请输入结束标志:
");
scanf("%d",&t);
while(t!
=tag)
{
s=(Book*)malloc(sizeof(Book));
printf("\n请输入书号:
");
scanf("%d",&s->num);
printf("\n请输入书名:
");
scanf("%s",s->bookname);
printf("\n请输入作者:
");
scanf("%s",s->writer);
printf("\n请输入图书现存量:
");
scanf("%d",&s->xchun);
printf("\n请输入图书库存量:
");
scanf("%d",&s->kchun);
r->next=s;
r=s;
printf("继续输入请按任意键,若想结束请输入结束标志:
");
scanf("%d",&t);
}
r->next=NULL;
returnh;
}
chaibian(Book*h)/*采编入库函数*/
{
inta;
Book*s,*p,*r;
s=(Book*)malloc(sizeof(Book));
printf("\n输入新书的书号:
");
scanf("%d",&a);
p=h;
while(p->num!
=a&&(p!
=NULL))
{
r=p;
p=p->next;
}
if(p==NULL)
{
printf("\n这种书是一种新书,请输入这种书的其他信息:
");
s->num=a;
printf("\n请输入书名:
");
scanf("%s",s->bookname);
printf("\n请输入作者:
");
scanf("%s",s->writer);
printf("\n请输入图书现存量:
");
scanf("%d",&s->xchun);
printf("\n请输入图书库存量:
");
scanf("%d",&s->kchun);
r->next=s;
s->next=NULL;
}
else
{
printf("\n这种书已存在,现更新这种书的现有量与库存量......\n更新信息完成!
");
p->xchun++;
p->kchun++;
}
getch();
}
borrow(Borrow*h,Book*p)/*借书函数*/
{
intx;
Book*t;
Borrow*m,*g;
a:
printf("\n请输入要借的书的书号:
");/*设置返回标志a*/
scanf("%d",&x);
t=p;
g=h;
while(t->num!
=x&&(t!
=NULL))
{
t=t->next;
}
if(t==NULL)
{
printf("\n没有这种书,请重新确认书号.");
gotoa;
}
else
{
while(g->next!
=NULL)
{g=g->next;}
if(t->xchun>=1)
{
m=(Borrow*)malloc(sizeof(Borrow));
printf("\n请输入借书人的证件号:
");
scanf("%d",&m->number);
printf("\n请输入归还期限(天数):
");
scanf("%d",&m->time);
m->num=t->num;
g->next=m;
m->next=NULL;
t->xchun--;
printf("已完成借书事项!
");
}
elseprintf("此书已被借完,请按任务键继续。
");
}
getch();
}
returned(Borrow*h,Book*p)/*还书函数*/
{
intx,y;
Book*t;
Borrow*m,*n;/*设置两个Borrow指针变量m、n,用以删除结构体Borrow中,已还完书人的结点*/
m=h;
t=p;
n=m->next;
printf("\n请输入还书人的证件号:
");
scanf("%d",&x);
printf("请输入要还的书的书号:
");
scanf("%d",&y);
while(n->number!
=x&&n->num!
=y&&n!
=NULL)
{
m=m->next;
n=n->next;
}
if(n!
=NULL)
{
x=n->num;
while(t->num!
=y&&t!
=NULL)
{t=t->next;}
if(t!
=NULL)
{
t->xchun++;
}
m->next=n->next;
printf("\n归还成功!
");
}
elseprintf("没有此人借书记录!
请按任意键继续。
");
getch();
}
scan(Book*h)/*浏览图书总体信息函数*/
{
Book*t;
t=h;
printf("书号\t书名\t作者\t现存量\t库存量");
while(t!
=NULL)
{
printf("\n%d\t%s\t%s\t%d\t%d",t->num,t->bookname,t->writer,t->xchun,t->kchun);
t=t->next;
}
getch();
}
voidwelcome()
{
intx,y;
gotoxy(x,y++);printf("☆★☆★☆★☆****************(^o^)***************☆★☆★☆★☆\n");
gotoxy(x,y++);printf("【书*库*管*理*系*统】\n");
gotoxy(x,y++);printf("\n");
gotoxy(x,y++);printf("\n");
gotoxy(x,y++);printf("@@@@@@@@@\n");
gotoxy(x,y++);printf("@@@@@@\n");
gotoxy(x,y++);printf("@@@@@\n");
gotoxy(x,y++);printf("@欢@迎使用@\n");
gotoxy(x,y++);printf("@@@\n");
gotoxy(x,y++);printf("@@@@\n");
gotoxy(x,y++);printf("@@@@\n");
gotoxy(x,y++);printf("@@\n");
gotoxy(x,y++);printf("\n");
gotoxy(x,y++);printf("第12组\n");
gotoxy(x,y++);printf("\n");
gotoxy(x,y++);printf("【学院】:
管理学院\n");
gotoxy(x,y++);printf("【专业班级】:
09信息管理与信息系统5班\n");
gotoxy(x,y++);printf("【组员】:
林森旭、李宏波、林营、陈洁华\n");
gotoxy(x,y++);printf("王广浩、刘振琪\n");
gotoxy(x,y++);printf("\n");
gotoxy(x,y++);printf("\n");
gotoxy(x,y++);printf("\n");
gotoxy(x,y++);printf("\n");
gotoxy(x,y++);printf("〓〓〓〓〓〓〓〓O(∩_∩)O〓〓O(∩_∩)O〓〓〓〓〓〓〓〓〓\n");
}
voidmenu()
{
inti;
intx=20,y=5;
gotoxy(10,3);
for(i=0;i<13;i++)
{
printf("⊙o⊙");
}
gotoxy(x,y++);printf("1.输入基本的图书信息");
gotoxy(x,y++);printf("2.新采购一种书");
gotoxy(x,y++);printf("3.借书");
gotoxy(x,y++);printf("4.还书");
gotoxy(x,y++);printf("5.浏览图书总体情况");
gotoxy(x,y++);printf("0.退出");
gotoxy(10,23);
for(i=0;i<13;i++)
{
printf("⊙o⊙");
}
gotoxy(x,17);printf("pleaseselectthemenu:
");
}
voidmain()
{
inta;
head1=NULL;
head2=NULL;
clrscr();
welcome();
getch();
while
(1)
{
do
{clrscr();
menu();
scanf("%d",&a);
system("cls");
}while(a<0||a>5);
switch(a)
{
case1:
head2=input();break;
case2:
chaibian(head2);break;
case3:
borrow(head1,head2);break;
case4:
returned(head1,head2);break;
case5:
scan(head2);break;
case0:
exit(0);
}
getchar();
}
}
七.调试分析
分块测试
1.采编入库:
没有出错,可以得到正确结果。
2.借阅
运行出错:
原因在于输入变量时忘了加&;if判断语句中用的应该是==却用成了赋值语句。
改正后得到正确结果。
3.用链表实现
运行出错,出错原因在于:
第一个大括号后面忘了加“;”;没有在main()主函数中声明taoshu()函数的话,其定义就必须放在main()主函数前面,修改后,程序能正确运行。
八.测试数据
程序运行界面
1.程序运行的欢迎界面和初始界面
2.
3.
2、选择1运行界面:
3.选择2运行界面
4.选择3运行界面
5、选择4运行界面
6、
6.选择5运行界面:
九.心得体会
终于挨到了写心得和体会的时候了,也就意味着这个课程设计接近了尾声,的确令人兴奋,看着自己的劳动成果,内心真的很激动。
一开始从一大堆的题目中挑选适合自己和自己感兴趣的,发现自己对好多题都没感觉,关键就是当初基础没打好,即使有思想,也不一定能运行。
所以当初就选了猴子吃桃这个简单一点的程序,因为它要用多种方法来实现,而且更接近于基础。
翻书重新学习是我迈开的第一步,经过两三天的努力,我把相关的知识学了一遍,把框架弄出来了,然后分开编程,可是还有一些小问题存在,运行不了,但是一想到自己由完全不会到慢慢的开始懂了,就觉得自己不能放弃,一定会成功。
我参照类似程序,改改和添添,终于大功告成,一块块小程序纷纷运行成功。
顿时信心倍增,我又废寝忘食的把程序小块整合到一起,看到运行界面,我欢呼雀跃,看到正确结果,我觉得自己真行。
这一个星期以来,我坐在电脑旁,又累又热,可是当程序做出来了之后,那点累那点苦又算得了什么呢。
当现在敲打这些字的时候,满足感油然而生,如果有人问我物质和精神哪个更让人满足,那答案一定是精神,那种感觉只有自己体会了才能懂。
这可不是大话,原来一直认为这样一个程序我是不能完成的,就等着在网上搜,可是现在我会很自信的说:
没有什么可以难倒我。
程序设计提升了我的自信心,真的是受益匪浅啊。
这当然得感谢彭春华老师以及林立新老师还有同学的帮助。
这就是年少轻狂的我——什么都敢做,什么都不怕,就算跌倒了,再爬起来,没有什么大不了。
最后小结:
程序设计分为逻辑设计和详细设计两步。
逻辑设计指的是,对问题描述中的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义软件模块结构图;详细设计则为定义相应的存储结构,并写出各函数模块的伪码算法。
程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:
首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。
可得最后结论。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 模板