c语言图书管理系统Word下载.docx

上传人:b****7 文档编号:22350695 上传时间:2023-02-03 格式:DOCX 页数:28 大小:2.61MB
下载 相关 举报
c语言图书管理系统Word下载.docx_第1页
第1页 / 共28页
c语言图书管理系统Word下载.docx_第2页
第2页 / 共28页
c语言图书管理系统Word下载.docx_第3页
第3页 / 共28页
c语言图书管理系统Word下载.docx_第4页
第4页 / 共28页
c语言图书管理系统Word下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

c语言图书管理系统Word下载.docx

《c语言图书管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《c语言图书管理系统Word下载.docx(28页珍藏版)》请在冰豆网上搜索。

c语言图书管理系统Word下载.docx

系统完成情况(30分)

答辩情况(40分)

总分

20分

规范程度

5分

程序测试

基本功能20分

扩展功能10分

自述情况10分

答辩情况

30分

成绩评定教师:

1需求分析

图书管理系统

图书的信息包括:

序号,名称,作者,价格,出版社,出版时间。

设计图书管理系统有以下功能:

1、系统以菜单形式工作;

2、图书信息录入功能(用文件保存图书信息);

3、图书信息浏览功能;

4、图书的删除功能;

可根据图书的序号,名称,作者,名称和作者就行删除。

5、图书的排序和查询功能;

可根据图书的序号和价格排序,按照图书的名称,作者,出版时间进行查询。

6、图书信息的修改;

7、图书的增添;

在该部分中叙述:

对题目中要求的功能进行的简单的叙述分析,把题目内容给介绍一下。

2概要设计

(1)数据结构

数组用结构体实现

结构类型的层次结构:

structbook_node{intnum;

//图书序号整型

charname[20];

//图书名称字符串

charauther[20];

//作者字符串

chartype[20];

//类型字符串

intprice;

//价格整型

charpress[20];

//出版社字符串

charpublishdate[20];

//出版时间字符串

structbook_node*next;

//节点

}

#include<

stdio.h>

string.h>

stdlib.h>

(2)模块划分

voidmain()

{intb;

structbook_node*head;

head=NULL;

while

(1){showmeau();

scanf("

%d"

&

b);

switch(b){case1:

head=inputbook();

break;

//录入图书

case2:

if(head==NULL)printf("

请先录入图书"

);

elsehead=deletebook(head);

//删除图书,可根据图书序号,名称,作者,名称和作者进行删除。

case3:

elseinsertbook(head);

//增添图书。

case4:

elsemodifybook(head);

//修改图书信息。

case5:

elseserchbook(head);

//查询图书。

case6:

elserank(head);

//为图书排序。

case7:

elseshowall(head);

break;

//图书的遍历。

case0:

printf("

byebye\n"

exit(0);

//退出系统。

default:

输入有误!

"

}

}

函数名:

showmeau

参数:

功能:

显示菜单

save

structbook_node*head

将链表存入文件

showall

structbook_node*pl

显示链表

inputbook

创建链表,并将信息存入链表

deletebynum

structbook_node*head

按序号删除图书

deletebookbyname

按书名删除图书

deletebookbyauther

按作者删除

deletebookbynameandauther

按书名和作者删除

searchbyname

按书名查找

searchbyauther

按作者查找

searchbypress

按出版社查询

serachbypress

按类别查询

insertbook

增添图书

modifybook

修改图书信息

swap

structbook_node*p1,structbook_node*p2

交换p1和p2所指向的图书的所有信息。

deletebook

删除图书

searchbook

查找图书

rank

图书排序

(3)程序总体框架

该程序需要实现众多功能,需要一个一个的执行程序,所以需要将程序分成几个模块,有选择的执行程序。

大致框架如图所示:

Main

7

图书库

6

5

4

修改图书

3

2

1

录入图书

退出

3详细设计

菜单函数:

(1)函数名:

showmeau()

(2)源程序:

voidshowmeau()

{printf("

\n"

printf("

欢迎使用图书管理系统\n"

**************************************************************\n"

*1:

录入图书*\n"

*2:

删除图书*\n"

*3:

增添图书*\n"

*4:

修改图书*\n"

*5:

查询图书*\n"

*6:

图书排序*\n"

*7:

图书库*\n"

*0:

取消*\n"

文件写入功能

(1)函数名称:

voidsave(structbook_node*pl)

{FILE*fp;

if((fp=fopen("

a.txt"

"

w"

))==NULL)

{printf("

cannotopenfile"

}

while(pl->

next!

=NULL){

fprintf(fp,"

%d%s%s%lf%s%s\n"

pl->

num,pl->

name,pl->

auther,pl->

price,pl->

press,pl->

publishdate);

pl=pl->

next;

fclose(fp);

交换功能

voidswap(structbook_node*p1,structbook_node*p2)

{intk;

doublel;

chara[20];

k=p1->

num;

p1->

num=p2->

p2->

num=k;

strcpy(a,p1->

name);

strcpy(p1->

name,p2->

strcpy(p2->

name,a);

l=p1->

price;

price=p2->

price=l;

auther);

auther,p2->

auther,a);

strcpy(a,p1->

type);

type,p2->

type,a);

strcpy(a,p1->

publishdate,p2->

publishdate,a);

press);

press,p2->

press,a);

输入功能

structbook_node*inputbook()

{structbook_node*p1,*head;

注意:

当图书序号为0时输入结束\n\n"

p1=(structbook_node*)malloc(sizeof(structbook_node));

//为链表的节点申请内存空间

head=p1;

Whlie(pl->

num!

=0)

请输入图书的序号:

scanf("

p1->

num);

if(p1->

num==0)

break;

printf("

请输入图书的名称:

%s"

p1->

请输入图书作者:

请输入类型:

请输入图书价格:

%lf"

price);

请输入出版社:

请输入出版时间:

\n"

p1->

next=(structbook_node*)malloc(sizeof(structbook_node));

p1=p1->

next=NULL;

图书录入输入结束!

save(head);

returnhead;

读取功能

voidshowall(structbook_node*pl)

{structbook_node*p;

图书序号名称作者类别价格出版社出版时间\n"

for(p=pl;

p->

=NULL;

p=p->

next)

%6d%13s%8s%6s%.2lf%17s%8s\n"

p->

num,p->

name,p->

auther,p->

type,p->

price,p->

press,p->

增添功能

voidinsertbook(structbook_node*head)

{structbook_node*p,*p1;

intn=0;

p=head;

while(p->

=NULL)p=p->

//找到链表的尾指针

当图书学号为0时输入结束\n\n"

p1=p;

do

while

(1);

删除功能

structbook_node*deletebookbyauther(structbook_node*head)(暂取一例,其他略)

源程序:

structbook_node*deletebookbyauther(structbook_node*head)

{structbook_node*p,*q;

charauther[20];

intcount=0;

intflag=0;

//标志是否找到

p=head->

q=head;

请输入要删除图书的作者:

scanf("

auther);

if(strcmp(head->

auther,auther)==0){while(strcmp(head->

auther,auther)==0){

head=head->

//判断头指针是否为要删除的节点

}

flag=1;

else{

while(p!

=NULL){//遍历链表,删除符合条件的记录

if(strcmp(p->

auther,auther)==0){

flag=1;

q->

next=p->

free(p);

}

p=p->

q=q->

}}

if(flag==0)//没有找到要删除的结点

printf("

\n对不起,没有符合条件的记录!

\n\n"

else{//找到要删除的结点

删除成功!

}

save(head);

//保存链表

returnhead;

修改功能

voidmodifybook(structbook_node*head)

{inta;

structbook_node*p;

请输入您要修改的图书序号:

a);

while(p!

=NULL){if(p->

num==a){printf("

请重新输入图书的名称:

请重新输入图书作者:

请重新输入类型:

scanf("

printf("

请重新输入图书价格:

printf("

请重新输入出版社:

请重新输入出版时间:

break;

}

p=p->

}

查询功能

voidserchbyname(structbook_node*head)//(暂取一例,其他略)

voidserchbyname(structbook_node*head)

charname[20];

voidsearchbook(structbook_node*head);

请输入书名:

name);

图书序号名称作者价格出版社出版时间\n"

=NULL){if(strcmp(p->

name,name)==0){printf("

flag=1;

}

p=p->

}

if(flag==0)printf("

对不起,找不到您要查询的图书\n"

serchbook(head);

//重新查询

排序功能

voidrankbynum(structbook_node*head)//排序

{

structbook_node*p,*p1,*p2;

inti,j;

=NULL){n++;

}//统计链表中元素个数

for(i=1;

i<

n;

i++)

{p1=head;

for(j=0;

j<

n-i;

j++)

{

p2=p1->

if((p1->

num)>

(p2->

num))//按照序号

{

swap(p1,p2);

//利用冒泡排序法来排序

showall(head);

4调试分析

(1)刚开始时不知道整个程序该怎样做,就听从老师的提醒,一个一个模块的做,一个一个的调试,最终将这些模块组合在一起,又经过不断的调试,终于将调试成功,消除错误。

(2)没有错误不代表程序就完美啦,在运行中我发现存在着诸多问题,譬如删除函数,最初是我设计的删除函数返回值为空,这时我发现链表的头指针所指向的内容不能删除,后来我将函数值的返回值改为头指针,又经过进一步的修改,调试,最终解决了这个问题,但我又发现,如果两本书的名字或者作者一样,那么如果使用按名称或作者删除就会同时把两本书删掉,故我又增加了一个按名称和作者删除,最终解决了删除函数的问题。

(3)在设计过程中遇到的另一个棘

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

当前位置:首页 > 工作范文 > 行政公文

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

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