C语言图书馆管理系统课程设计.docx

上传人:b****5 文档编号:6593597 上传时间:2023-01-08 格式:DOCX 页数:20 大小:117.93KB
下载 相关 举报
C语言图书馆管理系统课程设计.docx_第1页
第1页 / 共20页
C语言图书馆管理系统课程设计.docx_第2页
第2页 / 共20页
C语言图书馆管理系统课程设计.docx_第3页
第3页 / 共20页
C语言图书馆管理系统课程设计.docx_第4页
第4页 / 共20页
C语言图书馆管理系统课程设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言图书馆管理系统课程设计.docx

《C语言图书馆管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《C语言图书馆管理系统课程设计.docx(20页珍藏版)》请在冰豆网上搜索。

C语言图书馆管理系统课程设计.docx

C语言图书馆管理系统课程设计

 

一、需求分析

1.程序以菜单的方式工作,具备图书的添加、删除、修改、查询、统计操作,数据存储采用文件形式。

2.定义结构体数组structlibrarybookinf[30],用以存储ISBN、书名、作者名、图书类别、出版单位、出版时间、价钱、数量信息。

利用文件开辟并将信息保存在“bookinf.txt〞中。

3.用户从键盘输入需要的操作,其中“ISBN、书名、作者名、图书类别、出版单位〞需使用字符输入,“出版时间、价格、数量〞采用数字输入。

4.测试数据:

〔1〕查找:

假设找到了所要查找的书本,那么打印出书本信息;假设没有找到,那么打印“没有找到您要找的书本〞

〔2〕删除:

假设找到了所要查找的书本,按下y确认删除后,打印出“该书已删除〞;假设没有找到要删除的书本,那么打印“没有找到该书,退出操作〞

〔3〕修改:

假设找到了要修改的书本,打印“请输入你要修改的信息〞并开始修改;假设没有找到要修改的书本,那么打印“没有找到要修改的书本〞

5.程序执行命令为:

〔1〕创立“bookinf.txt〞文件

〔2〕将图书信息用添加操作加进“bookinf.txt〞文件中

〔3〕用户选择所需操作

〔4〕搜索结果

二、概要设计

1.定义结构体数组structlibrarybookinf[50]。

bookinf[i].ISBN//ISBN

bookinf[i].name//书名

bookinf[i].author//作者名

bookinf[i].vari//图书类别

bookinf[i].pubplace//出版单位

bookinf[i].pubtime//出版时间

bookinf[i].price//价格

bookinf[i].num//数量

/*用以下程序开辟存储文件"bookinf.txt"*/

FILE*fp;

if((fp=fopen("bookinf.txt","r+"))==NULL)

{

printf("无法翻开文件!

\n");

return;

}

2.程序构造

add()

通过此函数将输入的书本信息添加存储进"bookinf.txt"文件中,用于下一次的查询或删、改、统操作的调用。

del()

通过此函数完成对"bookinf.txt"文件中书本信息的删除,“printf("确定要删除该书吗?

(y/n)\n");〞键盘输入y/n确定书本信息的删除,删除后将不再有该书记录

modify()

通过此函数完成对书本信息的修改,修改内容包括:

ISBN、书名、作者名、图书类别、出版单位、出版时间、价格、数量。

search()

此函数为查询书本信息操作,可查询"bookinf.txt"文件中存储的书本信息。

count()

此操作为统计操作,用于统计"bookinf.txt"文件中存储书本的总数量及金额数。

main()

通过对上述函数的调用,将所得信息打印出来

3.主程序流程

主函数

增加模块

删除模块

修改模块

查询模块

统计模块

三、详细设计

1.图书馆管理的数据类型

structlibrary{

charISBN[20];//ISBN

charname[30];//书名

charauthor[30];//作者名

charvari[10];//图书类别

charpubplace[50];//出版单位

intpubtime;//出版时间

intprice;//价格

intnum;//数量

};

//----------根本操作的算法描述--------------------

1.文件局部

FILE*fp;

if((fp=fopen("bookinf.txt","r+"))==NULL)//检查翻开的操作是否出错

{

printf("无法翻开文件!

\n");//假设出错那么打印该行文字

return;

}

2.查询操作局部

printf("\n请输入您要查找的书名\n");

scanf("%s",bookname);//输入想查询的书名

while(!

feof(fp))//循环直到文件尾部,函数值为真

{fread(&bookinf,sizeof(structlibrary),1,fp);//从fp中读入1个长度为sizeof(structlibrary)的数据,存到bookinf[]中

if(strcmp(bookinf.name,bookname)==0)//比拟输入的书名和文件中保存的书名,假设相同

{printf("ISBN书名作者名图书类别出版单位出版时间价格数量\n");

printf("%s%s%s%s%s%d%d%d\n",bookinf.ISBN,bookinf.name,bookinf.author,

bookinf.vari,bookinf.pubplace,bookinf.pubtime,bookinf.price,bookinf.num);//假设相同,那么打印出书本的信息

i=1;break;}

}

if(i!

=1)//假设没有找到该书

{printf("没有找到您要找的书本\n");}

3.删除局部

strcpy(bookinf[flag].ISBN,bookinf[flag+1].ISBN);//将后一本书的ISBN复制给前一本书的ISBN

strcpy(bookinf[flag].name,bookinf[flag+1].name);//将后一本书的书名复制给前一本书的书名

strcpy(bookinf[flag].author,bookinf[flag+1].author);//将后一本书的作者名复制给前一本书的作者名

strcpy(bookinf[flag].vari,bookinf[flag+1].vari);//将后一本书的图书种类复制给前一本书的图书类别

strcpy(bookinf[flag].pubplace,bookinf[flag+1].pubplace);//将后一本书的出版单位复制给前一本书的出版单位

bookinf[flag].pubtime=bookinf[flag+1].pubtime;//将后一本书的出版时间复制给前一本书的出版时间

bookinf[flag].price=bookinf[flag+1].price;//将后一本书的价格复制给前一本书的价格

bookinf[flag].num=bookinf[flag+1].num;//将后一本书的数量复制给前一本书的数量

4.修改局部

if(strcmp(bookinf[i].ISBN,nbook)==0)//如果输入的书本nbook与文件中存储的ISBN相同,那么开始修改

5.统计局部

inttn,total=0,alprice=0;//初始化总数和总价格的值为0

for(i=0;i<=tn;i++){

total=total+bookinf[i].num;//运用递归,新的总数和为上一次的总数值加上这一次的值

alprice=alprice+(bookinf[i].num)*(bookinf[i].price);//运用递归,新的总价钱和为上一次的总价钱值加上这一次的价钱

}

printf("图书总册书为%d总金额数为%d\n",total,alprice);//打印出图书总册书和总金额数

6.菜单局部

printf("欢送登录图书管系统\n");

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

printf("*1.添加图书2.删除图书*\n");

printf("*3.修改图书4.查询图书*\n");

printf("*5.统计图书0.退出系统*\n");

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

7.选择局部

switch(b){

case1:

add();break;//选择1时,执行添加操作

case2:

del();break;//选择2时,执行删除操作

case3:

modify();break;//选择3时,执行修改操作

case4:

search();break;//选择4时,执行查询操作

case5:

count();break;//选择5时,执行统计操作

case0:

flag=1;break;//选择0时,执行退出操作

default:

printf("您输入的选择错误!

\n");//否那么,打印输入错误

四.调试局部

1.开始写程序时,没有运用文件保存函数,导致输入的书本信息不能被查看

2.程序删除函数局部产生左值方面的错误,后运用strcmp()解决

3.程序删除函数局部,开始不管找到还是没找到要删除的书本,都会打印循环外的"该书已删除!

",后运用i=n,解决了这个问题。

五.用户手册

1.本程序执行文件为“bookinf.txt〞.

2.进入菜单局部,会出现一下选择菜单

1.添加图书2.删除图书

3.修改图书4.查询图书

5.统计图书0.退出系统

并提示"请输入你的选择!

",用户仅需选择0~5运行该程序

3.添加、修改图书局部,其中ISBN、name、author、vari、pubplace、需输入字符〔即字母或数字〕,pubtime、price、num需输入数字。

4.添加、修改图书局部,输入的信息不可超标,需遵循ISBN为20字节,name、author为30字节,vari为10字节,pubplace为50字节。

六、测试局部

欢送登录图书管系统************************************

*1.添加图书2.删除图书*

*3.修改图书4.查询图书*

*5.统计图书0.退出系统*

************************************

请输入你的选择!

1

请输入需要添加的书本书以及您要添加的书本数信息

1

ISBN:

1

书名:

1

1

图书类别:

1

出版单位:

1

出版时间:

1

价钱:

1

数量:

1

欢送登录图书管系统************************************

*1.添加图书2.删除图书*

*3.修改图书4.查询图书*

*5.统计图书0.退出系统*

************************************

请输入你的选择!

3

请输入您要修改的书号

2

没有找到要修改的书本

欢送登录图书管系统************************************

*1.添加图书2.删除图书*

*3.修改图书4.查询图书*

*5.统计图书0.退出系统*

************************************

请输入你的选择!

3

请输入您要修改的书号

1

ISBN:

2

书名:

2

2

图书类别:

2

出版单位:

2

出版时间:

2

价钱:

2

数量:

2

修改成功!

欢送登录图书管系统************************************

*1.添加图书2.删除图书*

*3.修改图书4.查询图书*

*5.统计图书0.退出系统*

************************************

请输入您的选择!

4

请输入您要查找的书名

2

ISBN书名作者名图书类别出版单位出版时间价格数量

22222222

欢送登录图书管系统************************************

*1.添加图书2.删除图书*

*3.修改图书4.查询图书*

*5.统计图书0.退出系统*

************************************

请输入您的选择!

2

请输入您要删除的书本名

2

22222222

确定要删除该书吗?

〔y/n〕

y

该书已删除!

欢送登录图书管系统************************************

*1.添加图书2.删除图书*

*3.修改图书4.查询图书*

*5.统计图书0.退出系统*

************************************

请输入您的选择!

0

pressanykeytocontinue!

七、附录

#include"stdio.h"

#include"string.h"

#include"struct.h"

#include"conio.h"

structlibrarybookinf[30];

intn;

structlibrary{

charISBN[20];

charname[30];

charauthor[30];

charvari[10];

charpubplace[50];

intpubtime;

intprice;

intnum;

};//结构体局部

voidmain(){//主函数局部

intb,flag=0;

while

(1){//菜单局部

printf("欢送登录图书管系统\n");

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

printf("*1.添加图书2.删除图书*\n");

printf("*3.修改图书4.查询图书*\n");

printf("*5.统计图书0.退出系统*\n");

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

printf("请输入你的选择!

\n");

scanf("%d",&b);

switch(b){

case1:

add();break;//选择1,执行添加操作

case2:

del();break;//选择2,执行删除操作

case3:

modify();break;//选择3,执行修改操作

case4:

search();break;//选择4,执行查询操作

case5:

count();break;//选择5,执行统计操作

case0:

flag=1;break;//选择0,退出程序操作

default:

printf("您输入的选择错误!

\n");//否那么,打印该句

}

}

}

voidadd(){/*添加函数*/

inti;

charx;

printf("\n请输入需要添加的书本书以及您要添加的书本数信息\n");

scanf("%d",&n);//输入要添加的书本数

for(i=0;i

printf("ISBN:

");

scanf("%s",bookinf[i].ISBN);

printf("书名:

");

scanf("%s",bookinf[i].name);

printf("");

scanf("%s",bookinf[i].author);

printf("图书类别:

");

scanf("%s",bookinf[i].vari);

printf("出版单位:

");

scanf("%s",bookinf[i].pubplace);

printf("出版时间:

");

scanf("%d",&bookinf[i].pubtime);

printf("价钱:

");

scanf("%d",&bookinf[i].price);

printf("数量:

");

scanf("%d",&bookinf[i].num);

}

x=getch();//按任意键返回菜单

save();/*调用保存函数*/

}

voiddel(){//删除函数

inti=0,flag,t=0,tn=0;//tn为保存文件内的书本数

chara,bookname[20];

FILE*fp;

if((fp=fopen("bookinf.txt","r"))==NULL)//如果无法翻开文件

{

printf("无法翻开文件!

\n");

return;

}

printf("\n请输入您要删除的书本名\n");

scanf("%s",bookname);

rewind(fp);

while(!

feof(fp))/*没有结束时进行循环*/

{fread(&bookinf[tn],sizeof(structlibrary),1,fp);tn++;

}

fclose(fp);

for(i=0;i

{if(strcmp(bookinf[i].name,bookname)==0)//如果输入的书名与文件内保存的书名相同

{

printf("%s%s%s%s%s%d%d%d\n",bookinf[i].ISBN,bookinf[i].name,bookinf[i].author,bookinf[i].vari,bookinf[i].pubplace,bookinf[i].pubtime,bookinf[i].price,bookinf[i].num);

getch();

flag=i;t=1;

printf("确定要删除该书吗?

(y/n)\n");

scanf("%s",&a);

if(a=='y')

{

for(flag;flag

{strcpy(bookinf[flag].ISBN,bookinf[flag+1].ISBN);//将后一本书的ISBN复制给前一本书的ISBN

strcpy(bookinf[flag].name,bookinf[flag+1].name);//将后一本书的书名复制给前一本书的书名

strcpy(bookinf[flag].author,bookinf[flag+1].author);//将后一本书的作者名复制给前一本书的作者名

strcpy(bookinf[flag].vari,bookinf[flag+1].vari);//将后一本书的图书类别复制给前一本书的图书类别

strcpy(bookinf[flag].pubplace,bookinf[flag+1].pubplace);//将后一本书的出版单位复制给前一本书的出版单位

bookinf[flag].pubtime=bookinf[flag+1].pubtime;//将后一本书的出版时间复制给前一本书的出版时间

bookinf[flag].price=bookinf[flag+1].price;//将后一本书的价格复制给前一本书的价格

bookinf[flag].num=bookinf[flag+1].num;//将后一本书的数量复制给前一本书的数量

tn--;//删除后书的数量减一

}

printf("\n该书已删除!

\n");break;

}

}

getch();

}

if(t!

=1)//如果没有找到要删除的书

{

printf("\n没有找到该书,退出操作\n");

}

save();

}

voidsearch(){//查询函数

inti=0;

FILE*fp;//文件翻开

structlibrarybookinf;

charbookname[20];

if((fp=fopen("bookinf.txt","r"))==NULL)

{

printf("无法翻开文件!

\n");

return;

}

printf("\n请输入您要查找的书名\n");

scanf("%s",bookname);

while(!

feof(fp))//循环直到文件尾部,函数值为真

{fread(&bookinf,sizeof(structlibrary),1,fp);//从fp中读入1个长度为sizeof(structlibrary)的数据,存到bookinf[]中

if(strcmp(bookinf.name,bookname)==0)/*比拟输入的书名和文件中保存的书名*/

{printf("ISBN书名作者名图书类别出版单位出版时间价格数量\n");

printf("%s%s%s%s%s%d%d%d\n",bookinf.ISBN,bookinf.name,bookinf.author,

bookinf.vari,bookinf.pubplace,bookinf.pubtime,bookinf.price,bookinf.num);

i=1;break;}

}

if(i!

=1)//如果没有找到要查询的书

{printf("没有找到您要找的书本\n");}

printf("\n按任意键返回菜单\n");

getch();

}

voidmodify(){//修改函数

inti=0,n=0;

charnbook[20];

FILE*fp;//文件翻开

charbookname[20];

printf("\n请输入您要修改的书号\n");

scanf("%s",nbook);

 

if((fp=fopen("bookinf.txt","r+"))==NULL)

{

printf("无法翻开文件!

\n");

return;

}

while(!

feof(fp))/*没有结束时进行循环*/

{fread(&bookinf[n],sizeof(structlibrary),1,fp);n++;

}

for(i=0;i

{

if(strcmp(bookinf[i].ISBN,nbook)==0)//如果输入的nbook与文件内保存的ISBN相同

{

printf("请输入你要修改的信息\n");

printf("ISBN:

")

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

当前位置:首页 > 高等教育 > 理学

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

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