程序课程设计图书管理系统.docx
《程序课程设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《程序课程设计图书管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
![程序课程设计图书管理系统.docx](https://file1.bdocx.com/fileroot1/2023-6/11/bb13078b-f114-466a-9a96-11e283b7c3e6/bb13078b-f114-466a-9a96-11e283b7c3e61.gif)
程序课程设计图书管理系统
程序设计课程设计报告
图书管理系统
专业
计算机科学与技术
学生姓名
于露
班级
B计123
学号
指导教师
张静林
完成日期
2013年6月
1.课程设计的目的
1.加强对《c语言程序设计》课程知识的理解,掌握c语言应用程序的开发方法和步骤
2.进一步掌握和利用c语言进行程序设计的能力
3.进一步理解和运用结构化程序设计的思想和方法
4.初步掌握开发一个小型实用系统的基本方法
5.学会调试一个较长程序的基本方法
6.学会利用流程图或N-S图表示算法
7.掌握书写程序设计开发文档的能力(书写课程设计报告)
2.课程设计任务
3.课程设计课题
课题1:
图书管理系统
总体程序框图
系统的总体流程图
程序
#include
#include
#include
structlist{
charnum[20];/*图书编号*/
charname[40];/*书名*/
charauthor[40];/*作者*/
charpublish[40];/*出版社*/
doubleprice;/*价格*/
};
structlistb[40];
intw=0;/*定义一个全局变量,用来记录bookinfo.txt文件中的数据个数*/
voidsearch_allinformation(structlistb[]);/*查看全部图书信息*/
voidcheck_bookinformation(structlistb[]);/*查找图书信息*/
voidadd_bookinformation(structlistb[]);/*添加图书信息*/
voiddelete_bookinformation(structlistb[]);/*删除图书信息*/
voidborrow_book(structlistb[]);/*借阅图书*/
intmain()
{
inti=0;
intchoice1;
FILE*fp;
printf("********************************\n");
printf("*欢迎进入图书馆信息管理系统*\n");
printf("********************************\n");
fp=fopen("e:
\\BookInfo.txt","r");
if(fp==NULL)
{printf("Cannotopenthefile!
\n");
exit(0);
}
while(!
feof(fp))
{
fscanf(fp,"%s%s%s%s%lf",/*调用函数将文件中的数据读入结构变量中*/
b[i].num,b[i].name,b[i].author,b[i].publish,&b[i].price);
i++;
}
w=i-1;
fclose(fp);
do{
printf("################################################################################");
printf("功能选项:
\n");
printf("1:
查看全部图书信息\n");
printf("2:
查找图书信息\n");
printf("3:
添加图书信息\n");
printf("4:
删除图书信息\n");
printf("5:
借阅图书\n");
printf("0:
退出系统\n");
printf("################################################################################");
printf("请选择操作:
");
scanf("%d",&choice1);
switch(choice1)
{
case1:
search_allinformation(b);
break;
case2:
check_bookinformation(b);
break;
case3:
add_bookinformation(b);
break;
case4:
delete_bookinformation(b);
break;
case5:
borrow_book(b);
break;
case0:
break;
}
}while(choice1!
=0);
printf("谢谢使用!
\n");
return0;
}
/*查看全部图书信息*/
voidsearch_allinformation(structlistb[])
{
inti;
printf("####################################\n");
printf("#查看全部图书信息!
#\n");
printf("####################################\n");
printf("图书的相关信息:
编号书名作者出版社价格\n");
for(i=0;i{
printf("%s%s%s%s%.2f\n",/*将数据输出到屏幕中*/
b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price);
}
printf("%d",w);
printf("################################################################################\n");
}
/*查找图书信息*/
voidcheck_bookinformation(structlistb[])
{
inti,flag=0;
chars[20];
printf("输入编号:
\n");/*提示输入图书编号*/
scanf("%s",s);
printf("#####################################\n");
printf("#查找图书信息!
#\n");
printf("#####################################\n");
for(i=0;iif(strcmp(s,b[i].num)==0)
{
printf("该图书的相关信息:
编号书名作者出版社价格\n");
printf("%s%s%s%s%.2f\n",
b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price);
flag=1;
break;
}
if(flag==0)
{
printf("该图书编号不存在!
\n");
printf("是否要继续查找?
y:
是;n:
否\n");
getchar();
switch(getchar())
{
case'y':
check_bookinformation(b);/*调用函数本身继续查找*/
case'n':
break;
}
}
printf("################################################################################\n");
}
/*添加图书信息*/
voidadd_bookinformation(structlistb[])
{
inti,count=0,choice3;
structlistp;
FILE*fp2;
printf("#####################################\n");
printf("#添加图书信息!
#\n");
printf("#####################################\n");
printf("请输入该图书的相关信息:
\n");
printf("编号书名作者出版社价格\n");
scanf("%s%s%s%s%lf",
p.num,p.name,p.author,p.publish,&p.price);
printf("添加成功!
\n");
printf("是否显示添加后的信息?
1:
是;2:
否\n");
printf("请选择:
");
scanf("%d",&choice3);
switch(choice3)
{
case1:
{
for(i=0;iif(strcmp(p.num,b[i].num)>0)
count++;
for(i=w;i>count;i--)
b[i]=b[i-1];
b[i]=p;
w++;/*每添加一本图书,图书数目都会增加一个*/
fp2=fopen("e:
\\BookInfo.txt","w");
if(fp2==NULL)
{
printf("Cannotopenthefile!
\n");
exit(0);
}
for(i=0;ifprintf(fp2,"%s%s%s%s%.2f\n",
b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price);
fclose(fp2);
for(i=0;iprintf("%s%s%s%s%.2f\n",
b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price);
}
case2:
break;
}
printf("################################################################################\n");
}
/*删除图书信息*/
voiddelete_bookinformation(structlistb[])
{
inti,flag=0,choice4;
chars[20];
printf("#####################################\n");
printf("#删除图书信息#\n");
printf("#####################################\n");
printf("请输入图书编号:
");
scanf("%s",s);
for(i=0;iif(strcmp(s,b[i].num)==0)
{
printf("删除成功!
\n");
printf("是否显示删除后的信息?
1:
是;2:
否\n");
printf("请选择:
");
scanf("%d",&choice4);
switch(choice4)
{
case1:
{
printf("删除后的图书信息:
编号书名作者出版社价格\n");
for(i=0;i{
if(strcmp(s,b[i].num)!
=0)
printf("%s%s%s%s%.2f\n",
b[i].num,b[i].name,b[i].author,b[i].publish,b[i].price);
}
case2:
break;
}
}
flag=1;
break;
}
if(flag==0)
printf("该图书编号不存在!
\n");
printf("################################################################################\n");
}
/*借阅图书*/
voidborrow_book(structlistb[])
{
inti=0,n=0,flag=0,x=0;
intm;/*定义一个变量用来记录sendinfo.txt文件中的数据个数*/
structlistq;
structstudent{
charname[20];
charnumber[40];
};
structstudentstu[50];
FILE*fp;
FILE*fp4;
printf("#####################################\n");
printf("#借阅图书#\n");
printf("#####################################\n");
A:
printf("输入图书编号:
");
scanf("%s",q.num);
fp=fopen("e:
\\BookInfo.txt","a");
if(fp==NULL)
{printf("Cannotopenthefile!
\n");
exit(0);
}
for(i=0;i{
if(strcmp(q.num,b[i].num)==0)
flag=1;
}
if(flag==0)
{
printf("该图书编号不存在,请重新输入!
\n");
borrow_book(b);
}
fclose(fp);
if(flag==1)
{
fp4=fopen("e:
\\SentInfo.txt","r");
if(fp4==NULL)
{
printf("Cannotopenthefile!
\n");
exit(0);
}
while(!
feof(fp4))
{
fscanf(fp4,"%s%s",/*调用函数将文件中的数据读入结构变量中*/
stu[i].number,stu[i].name);
i++;
}
n=i-1;
fclose(fp4);
fp=fopen("e:
\\SentInfo.txt","a");
if(fp==NULL)
{
printf("Cannotopenthefile!
\n");
exit(0);
}
for(i=0;iif(strcmp(q.num,stu[i].number)==0)
{
printf("该图书已借出!
");
printf("是否继续续借?
yorn\n");
getchar();
if(getchar()=='y')
gotoA;
elsex=1;
}
}
if(x==0)/*若该图书未借出,则执行以下操作*/
printf("请输入学号:
");
scanf("%d",&m);
if((fp=fopen("e:
\\SendInfo.txt","a"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
fprintf(fp,"%s%d",q.num,m);
fclose(fp);
printf("借阅成功!
\n");
printf("################################################################################\n");
}
功能模块的调试及测试
主菜单运行界面
图4.1主菜单运行界面图
查询所有图书信息模块运行界面
按1操作查询所有图书信息,
(1)打开源程序,编译程序,单击Compile按钮,出现错误,如图:
(2)错误均指向55行,经检查发现调用函数时调用的是整个结构体,而非某一个,所以应该为search_allinformation(b).
(3)改正后重新运行,即的如下所示的界面如下:
图4.2查询所有图书信息模块界面
查找某一本图书信息模块运行界面
按2选择按书名查询某一本图书信息,
若图书编号存在则界面如下:
图4.3按编号查询图书信息界面
若图书编号不存在,
(1)输入y,没有进行继续查找的操作
(2)调试程序,可查出输入的y对程序无影响,由于输入的是一个字符,而”\0”本身也是一个字符,则可将scanf(“%s”,&a)改为getchar()即可。
该后则界面如下
图4.4图书编号查询图书界面
添加图书信息模块运行界面
按3选择,输入编号,界面如下:
图4.5按图书编号添加图书界面
删除图书信息模块运行界面
按4选择,输入编号,
如果编号不存在,界面如下:
图4.6按图书编号删除图书界面
如果编号存在,界面如下:
图4.7按图书编号删除图书界面
借阅图书模块信息运行界面
按5选择,输入编号,
出现如下界面:
图4.8借阅图书界面(有错误)
调试后找出错误为文件SendInfo.txt扩展名是隐藏的,应将文件名改为SendInfo,得到如下正确界面:
图4.9借阅图书界面
如果编号不存在,界面如下:
图4.10借阅图书界面