仲恺农业工程学院实验报告纸
(院、系)专业班组 课
实验1 线性表的操作及其应用
一、 实验目的
二、 实验内容
[核心算法程序及注释]
三、 实验结果
[运行输出结果截屏]
四、 实验总结
[调试和运行程序过程中产生的问题及采取的措施。]
[本次试验的经验和教训(心得和体会)]
Data organization curriculm project
数据结构实验报告
实验题目: 图书管理系统
专业班级: 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<stdlib.h>
#include<conio.h>
typedef struct book
{
int num;/*书号*/
char bookname[20];/*书名*/
char writer[20];/*作者*/
int xchun;/*现存量*/
int kchun;/*库存量*/
struct book *next;
}Book;
typedef struct borrow
{
int number;/*证件号*/
int time;/*期限*/
int num;/*借的书号*/
struct borrow *next;
}Borrow;
/*======本程序所输入的书名与借书人证件号都为整形========*/
Borrow *head1;
Book *head2;
Book *input()/*图书信息输入函数,使用尾插法建立图书链表*/
{
Book *s,*h,*r;
int t,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;
return h;
}
chaibian(Book *h)/*采编入库函数*/
{
int a;
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)/*借书函数*/
{
int x;
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没有这种书,请重新确认书号.");
goto a;
}
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("已完成借书事项!");
}
else printf("此书已被借完,请按任务键继续。");
}
getch();
}
returned(Borrow *h,Book *p)/*还书函数*/
{
int x,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归还成功!");
}
else printf("没有此人借书记录!请按任意键继续。");
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();
}
void welcome()
{
int x,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");
}
void menu()
{
int i;
int x=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("please select the menu:");
}
void main()
{
int a;
head1=NULL;
head2=NULL;
clrscr();
welcome();
getch();
while(1)
{
do
{ clrscr();
menu();
scanf("%d",&a);
system("cls");
}while(a<0||a>5);
switch(a)
{
case 1: head2=input();break;
case 2: chaibian(head2);break;
case 3: borrow(head1,head2);break;
case 4: returned(head1,head2);break;
case 5: scan(head2);break;
case 0: exit(0);
}
getchar();
}
}
七.调试分析
分块测试
1. 采编入库:
没有出错,可以得到正确结果。
2.借阅
运行出错:原因在于输入变量时忘了加&;if判断语句中用的应该是==却用成了赋值语句。改正后得到正确结果。
3.用链表实现
运行出错,出错原因在于:第一个大括号后面忘了加“;”;没有在main()主函数中声明taoshu()函数的话,其定义就必须放在main()主函数前面,修改后,程序能正确运行。
八.测试数据
程序运行界面
1. 程序运行的欢迎界面和初始界面
2.
3.
2、选择1运行界面:
3.选择2运行界面
4.选择3运行界面
5、选择4运行界面
6、
6.选择5运行界面:
九.心得体会
终于挨到了写心得和体会的时候了,也就意味着这个课程设计接近了尾声,的确令人兴奋,看着自己的劳动成果,内心真的很激动。
一开始从一大堆的题目中挑选适合自己和自己感兴趣的,发现自己对好多题都没感觉,关键就是当初基础没打好,即使有思想,也不一定能运行。所以当初就选了猴子吃桃这个简单一点的程序,因为它要用多种方法来实现,而且更接近于基础。
翻书重新学习是我迈开的第一步,经过两三天的努力,我把相关的知识学了一遍,把框架弄出来了,然后分开编程,可是还有一些小问题存在,运行不了,但是一想到自己由完全不会到慢慢的开始懂了,就觉得自己不能放弃,一定会成功。我参照类似程序,改改和添添,终于大功告成,一块块小程序纷纷运行成功。顿时信心倍增,我又废寝忘食的把程序小块整合到一起,看到运行界面,我欢呼雀跃,看到正确结果,我觉得自己真行。
这一个星期以来,我坐在电脑旁,又累又热,可是当程序做出来了之后,那点累那点苦又算得了什么呢。当现在敲打这些字的时候,满足感油然而生,如果有人问我物质和精神哪个更让人满足,那答案一定是精神,那种感觉只有自己体会了才能懂。
这可不是大话,原来一直认为这样一个程序我是不能完成的,就等着在网上搜,可是现在我会很自信的说:没有什么可以难倒我。程序设计提升了我的自信心,真的是受益匪浅啊。
这当然得感谢彭春华老师以及林立新老师还有同学的帮助。
这就是年少轻狂的我——什么都敢做,什么都不怕,就算跌倒了,再爬起来,没有什么大不了。
最后小结:程序设计分为逻辑设计和详细设计两步。逻辑设计指的是,对问题描述中的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义软件模块结构图;详细设计则为定义相应的存储结构,并写出各函数模块的伪码算法。
程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。可得最后结论。
数据结构实验报告格式实验11顺序表的基本操作一实验目的1掌握使用VC上机调试线性表的基本方法2掌握线性表的基本操作插入删除查找等运…
东北大学秦皇岛分校数据结构与算法统计学专业实验报告班级学号7020xx1姓名胡鹏实验日期20xx0929仪器编号A01实验名称实验…
数据结构实验报告格式实验1线性表的基本操作一实验目的1掌握使用VC上机调试线性表的基本方法2掌握线性表的基本操作插入删除查找等运算…
数据结构实验报告书专业班级网133学号139074333姓名江文杰教师王喜凤实验一用栈判断字符串是否回文1实验日期20xx年4月1…
数据结构与算法实验报告专业班级姓名学号实验项目实验一二叉树的应用实验目的1进一步掌握指针变量的含义及应用2掌握二叉树的结构特征以及…
报告格式说明数据结构实验,实验成绩占该科成绩20%。实验报告抄袭者,一经发现实验成绩为0;实验报告不交者,该科成绩为0。参考资料:…
实验报告格式一实验目的二实验内容实验内容包括1程序要求2根据程序要求写出程序源程序两部分内容三程序调试过程记录四实验结果实验结果包…
数据结构实验报告实验名称数据结构与算法专业班级数学与应用数学1201班学号1304120xx6姓名谢伟指导老师陈明0目录1前言22…
本科生实验报告二姓名学院专业班级实验课程名称数据结构实验日期20xx年5月25日指导教师及职称实验成绩开课时间20xx20xx学年…
数据结构实验报告湖南师范大学工程与设计学院数据结构实验报告姓名王新建年级20xx级专业应用电子技术教育学号20xx180320任课…