重庆交通大学毕业课程设计报告.docx

上传人:b****3 文档编号:27006994 上传时间:2023-06-25 格式:DOCX 页数:12 大小:37.09KB
下载 相关 举报
重庆交通大学毕业课程设计报告.docx_第1页
第1页 / 共12页
重庆交通大学毕业课程设计报告.docx_第2页
第2页 / 共12页
重庆交通大学毕业课程设计报告.docx_第3页
第3页 / 共12页
重庆交通大学毕业课程设计报告.docx_第4页
第4页 / 共12页
重庆交通大学毕业课程设计报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

重庆交通大学毕业课程设计报告.docx

《重庆交通大学毕业课程设计报告.docx》由会员分享,可在线阅读,更多相关《重庆交通大学毕业课程设计报告.docx(12页珍藏版)》请在冰豆网上搜索。

重庆交通大学毕业课程设计报告.docx

重庆交通大学毕业课程设计报告

重庆交通大学信息科学与工程

学院课程设计报告

 

班级:

通信工程二班

姓名:

学号:

实验项目名称:

图书管理系统

实验室(中心):

信息科学与工程学院

技术实验室

指导教师:

实验完成时间:

2012年6月28日

目录

一、题目.............................................1

二、功能描述........................................1

三、概要设计........................................1

四、详细设计

1、主函数(数组)................................3

2、各功能模块设计................................11

3、各功能模块设计................................

五、测试结果及存在的问题.............................

六、课程设计心得体会.................................

七、附录.............................................

题目

分别用数组和链表编程实现图书信息的简单管理。

要求用函数实现以下各功能并在主函数中进行调用。

功能描述

1、存储10本以上图书的基本数据(包括图书编号、图书名称、图书单价、数量、出版社)。

2、按要求输出图书信息(按图书价格降序排列,按书名首字母升序排列)。

3、查找指定图书的信息。

4、修改指定图书的信息。

5、删除指定图书的信息。

6、在指定的图书前或后再插入一个图书的信息。

7、统计指定出版社的图书数量。

概要设计

详细设计

1、主函数(数组)

对于主函数的描述,我选择用流程图来详细展示。

流程图如下:

[程序]

voidmain()

{

intselect,n;

printf("请输入你要存储的图书本数:

");

scanf("%d",&n);

printf("\t==============存储图书的信息================\n\n");

inputdata(n);

printf("============================================\n");

while(5)

{

printf("********************图书信息的简单管理********************\n\n");

printf("*1.按要求输出图书信息*\n");

printf("*2.查找指定图书的信息*\n");

printf("*3.修改指定图书的信息*\n");

printf("*4.删除指定图书的信息*\n");

printf("*5.插入图书的信息*\n");

printf("*6.统计指定出版社的图书数量*\n");

printf("*0.退出系统*\n\n");

printf("***********************************************************\n\n");

printf("请选择<0-6>:

\t");

scanf("%5d",&select);

printf("\n\n");

switch(select)

{

case1:

outputnews(n);break;

case2:

search(n);break;

case3:

modify(n);break;

case4:

dele(&n);break;

case5:

insert(n);break;

case6:

add(n);break;

}

if(select==0)break;

}

}

2、各功能模块设计(数组)

(1)公共函数在很多函数中都有调用

structBook//定义书的类型

{

charbooknum[12];//图书编号

charbookname[12];//图书名称

floatbookprice;//图书单价

intnumber;//图书数量

charpublish[12];//出版社.共五个成员项组成数据域

}b[M];

(2)输入函数

在输入函数接收到主函数中输入的n后,会循环n次输入图书的基本信息即系统就存储了n本图书的基本信息。

(3)输出模块

价格降序排列程序流程图

(4)查找模块

在查找一本图书的信息时,调用库函数strcmp查找图书的信息,找到后再输出该图书的基本信息。

程序:

(5)修改模块

在修改图书信息时先调用库函数找到要修改的图书,然后重新输入该图书的基本信息,然后在调用自定义函数print打印出修改后的图书信息。

(6)删除模块

在设计删除模块时,要考虑到删除后打印图书信息的本数问题,为了让图书能够准确的被打印出来,我采用了用指针的方法来编写删除函数,用传地址的方法来更改图书的数量。

程序如下:

voiddele(int*n)

{

charbooknum[20];

printf("\t========删除指定图书的信息===========\n");

printf("请输入要删除的图书的编号:

\t");

scanf("%s",booknum);

for(inti=0;i<*n;i++)

if(strcmp(booknum,b[i].booknum)==0)break;

if(strcmp(booknum,b[i].booknum)==0)

{

for(intj=i;j<*n;j++)

{b[j]=b[j+1];}

*n=*n-1;

printf("\n\t\t删除后\n");print(*n);

}

else

printf("\t没有你要删除的图书!

!

!

!

\n\n");

}

(7)插入模块

在插入图书时,先根据图书的编号来找到插入的位置,找到插入位置后,如果是在指定图书前插入,for(intj=*n;j>i;j--)若在指定图书后for(intj=*n;j>i+1;j--),这些都是对b[j]=b[j-1]来循环,把位置腾出后再输入插入图书的信息。

如其中一个程序:

voidinsert1(int*n)

{

charbooknum[20];

printf("=========在指定图书前插入一个图书的信息===========\n");

printf("请输入指定图书的编号:

\t");

scanf("%s",booknum);

for(inti=0;i<*n;i++)

if(strcmp(booknum,b[i].booknum)==0)break;

if(strcmp(booknum,b[i].booknum)==0)

{for(intj=*n;j>i;j--)

{b[j]=b[j-1];}

printf("请输入要插入的图书的信息:

\n\n");

printf("图书编号\t图书名称\t图书单价\t数量\t\t出版社\n\n");

scanf("%s%s%f%d%s",&b[i].booknum,&b[i].bookname,&b[i].bookprice,&b[i].number,&b[i].publish);

*n=*n+1;

printf("\n\t\t插入后\n");

print(*n);}

else

printf("没有你指定的图书\n");}

(8)统计模块

3、各功能模块设计(链表)

(1)公共函数

structBook

{charbooknum[20];

charbookname[20];

floatbookprice;

intnumber;

charbookpublish[20];

structBook*next;

};前五个成员项组成数据域,而后一个成员项next构成指针域,它是一个指向Book类型结构的指针变量。

(2)输入模块

对于用链表存储图书的基本信息,就是建立一个有n个结点的链表来存放图书的基本信息。

建立链表的程序流程图:

(3)输出模块

输出模块流程图和数组一样,但是在排序时有很大的不同。

在交换两个链表时,要把每个结点中的数据都交换.调用排序函数后,再调用一个输出链表的函数打印出排序后的图书信息。

排序的程序流程图:

输出链表程序流程图

(4)查找模块

structBook*search(structBook*head)

{

structBook*pb,*pf;

charbooknum[20];

printf("请输入你要查询的书的编号:

\n");

scanf("%s",&booknum);

if(head==NULL)

{

printf("空表!

!

\n");

return0;

}

pb=head;

while(strcmp(pb->booknum,booknum)!

=0&&pb->next!

=NULL)

{

pf=pb;

pb=pb->next;

}//pf指向当前结点,pb指向下一个结点//

if(strcmp(pb->booknum,booknum)==0)

{

printf("图书编号\t图书名称\t图书单价\t数量\t\t出版社\n");

printf("%5s\t",pb->booknum);

printf("\t%5s\t",pb->bookname);

printf("\t%5f\t",pb->bookprice);

printf("\t%5d\t",pb->number);

printf("\t%5s\t",pb->bookpublish);

printf("\n");

}

else

printf("没有要查询的图书。

\n");

returnhead;

}

(5)修改模块

(6)删除模块

structBook*dele(structBook*head)

{

charbooknum[20];

printf("======删除指定图书=======\n\n");

printf("请输入要删除的图书的编号:

\n");

scanf("%s",&booknum);

structBook*pf,*pb;

if(head==NULL)

{

printf("emptylist!

\n");

return0;

}

pb=head;

while(strcmp(pb->booknum,booknum)!

=0&&pb->next!

=NULL)//当不是要删除的结点,而且也不是最后一个结点时,继续循环//

{

pf=pb;

pb=pb->next;

}//pf指向当前结点,pb指向下一个结点//

if(strcmp(pb->booknum,booknum)==0)

{

if(pb==head)

{

head=pb->next;

}

else

pf->next=pb->next;

free(pb);

}//如果找到被删结点,且为第一结点,则使head指向第二个结点,否则使pf所指结点的指针指向下一结点//

else

printf("没有你要删除的图书\n");

returnhead;

}

(7)插入模块

在指定图书后插入图书的函数的程序流程图:

(8)统计模块

因为流程图原理一样就不再画了。

其程序为

structBook*add(structBook*head)

{printf("=======统计指定出版社的图书数量=========\n\n");

charbookpublish[20];

intnum=0;

printf("请输入出版社的名称:

\t");

scanf("%s",bookpublish);

structBook*p;

for(p=head;p!

=NULL;p=p->next)

if(strcmp(p->bookpublish,bookpublish)==0)

{num=num+p->number;}

printf("\n该出版社的图书数量为:

%d\n\n",num);

returnhead;}

测试结果及存在的问题

主函数模块

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1