数据结构实验报告格式模板

仲恺农业工程学院实验报告纸

(院、系)专业班组 课

实验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运行界面:

九.心得体会

终于挨到了写心得和体会的时候了,也就意味着这个课程设计接近了尾声,的确令人兴奋,看着自己的劳动成果,内心真的很激动。

一开始从一大堆的题目中挑选适合自己和自己感兴趣的,发现自己对好多题都没感觉,关键就是当初基础没打好,即使有思想,也不一定能运行。所以当初就选了猴子吃桃这个简单一点的程序,因为它要用多种方法来实现,而且更接近于基础。

翻书重新学习是我迈开的第一步,经过两三天的努力,我把相关的知识学了一遍,把框架弄出来了,然后分开编程,可是还有一些小问题存在,运行不了,但是一想到自己由完全不会到慢慢的开始懂了,就觉得自己不能放弃,一定会成功。我参照类似程序,改改和添添,终于大功告成,一块块小程序纷纷运行成功。顿时信心倍增,我又废寝忘食的把程序小块整合到一起,看到运行界面,我欢呼雀跃,看到正确结果,我觉得自己真行。

这一个星期以来,我坐在电脑旁,又累又热,可是当程序做出来了之后,那点累那点苦又算得了什么呢。当现在敲打这些字的时候,满足感油然而生,如果有人问我物质和精神哪个更让人满足,那答案一定是精神,那种感觉只有自己体会了才能懂。

这可不是大话,原来一直认为这样一个程序我是不能完成的,就等着在网上搜,可是现在我会很自信的说:没有什么可以难倒我。程序设计提升了我的自信心,真的是受益匪浅啊。

这当然得感谢彭春华老师以及林立新老师还有同学的帮助。

这就是年少轻狂的我——什么都敢做,什么都不怕,就算跌倒了,再爬起来,没有什么大不了。

最后小结:程序设计分为逻辑设计和详细设计两步。逻辑设计指的是,对问题描述中的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义软件模块结构图;详细设计则为定义相应的存储结构,并写出各函数模块的伪码算法。

程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。可得最后结论。

相关推荐