图书管理系统C语言.docx
《图书管理系统C语言.docx》由会员分享,可在线阅读,更多相关《图书管理系统C语言.docx(19页珍藏版)》请在冰豆网上搜索。
![图书管理系统C语言.docx](https://file1.bdocx.com/fileroot1/2022-12/12/29b95f55-fae3-4d04-b4c1-597014ca5ec2/29b95f55-fae3-4d04-b4c1-597014ca5ec21.gif)
图书管理系统C语言
图书管理系统设计
目录
1.前言;
2.题目要求;
3.系统总框图;
4.每个模块的设计分析和所有定义的函数及说明;
5.举例说明1、2个比较有特点的算法;
6.数据分析;
7.存在的问题与不足及对策;
8.使用说明(操作手册);
9.学习心得。
前言
计算机科学技术的发展,不仅极大地促进了整个科学技术的发展,而且明显地加快了经济信息化和社会信息化的进程。
因此,计算机教育在全国备受重视,计算机知识与能力已成为21世纪人才素质的基本要素之一。
如今,高等教育的计算机教育发展十分迅速。
十多年前,只有部分理工科专业开设计算机课程。
今天,几乎所有高校的所有专业都开设了程度不同的计算机课程。
人们已经认识到,计算机知识已成为当代知识分子知识结构中不可缺少的重要组成部分。
而除了掌握计算机的基础知识和操作的基本能力外,掌握一门高级编程语言,并可以熟练运用它,已成为当代大学生综合能力必要组成。
计算机技术发展如此迅猛,计算机应用如此广泛,需要学习的东西愈来愈多,而我们的总学时是有限的。
一般来说,计算机课程学习可以分为两部分:
一部分是理论课程学习,一部分是上机应用实习。
根据我们专业的性质和要求,则应侧重于上机操作运用。
为此,学校特意在寒假最后一星期安排了上机实习。
现将两星期的实习内容及结果分析分列如下:
图书管理系统设计
一.题目要求:
图书管理信息包括:
图书名称、单价、作者、借书人姓名、性别、学号等。
程序还有以下功能:
新近图书基本信息的输入;图书基本信息的查询;对撤销图书信息的删除。
二.系统总框图
图书管理系统
管理系统
查阅图书
按作者找
按书名找
图书统计
会员管理
删除图书
增加图书
修改图书
三.每个模块的设计分析和所有定义的函数及说明
1、数据结构
//图书的数据结构:
structbook
{
intbooknum;//书号
charbookname[20];//书名
charbookcreat[10];//书的作者
}book[1000];//定义一个比较大的1000本书
//定义学生类型,用于存放借出的书籍
structstudent
{
intcarnum;//卡号
charlendbook[10];//借出的书数
}student[1000];//定义一千个学生
2、main()主函数模块
主函数是程序入口,采用模块化设计。
首先在主程序中打印欢迎界面,定义一些必要变量,作一无限循环程序,循环体为一开关语句,该语句设置一个断点,其条件值是通过调用主菜单函数得到的返回值,根据该值,调用相应的功能函数,同时设置一个断点,当返回值为一定条件时结束程序。
3、chabook()查询图书函数模块
在这个模块中又分为两个子模块:
按书名查找模块和按作者查找。
1)按书名查找模块:
在这个子函数里使用指向文件的指针变量,定义指针变量fp,fp指向文件名为“book.txt”的首地址,如果不存在,则自动建立。
从键盘输入书名,依次移动指针地址,直到找到输入的文件名,找到后显示图书信息,再判断状态值是否为1,真的话就显示“此书现在无人借阅”,假就显示“这本书已经有人借出!
”,关闭文件,然后按任意键返回。
如果找到最后一个地址仍没找到,就显示“没有你要查询的书籍!
”。
关闭文件。
2)按作者查找,原理同按书名查找。
4、addbook()增加图书函数模块
定义指向文件的指针变量fp,使其指向“book.txt”
并以追加的方式打开文件,依次从键盘读入图书的各个信息,写入文件,然后关闭文件。
11、delbook()删除图书函数模块
定义两个文件指针,fp,fp2.从键盘输入图书名字。
然后在文件中查找,找到后删除掉有关记录,找不到则报错。
12、changebook()修改图书信息函数模块
定义两个文件指针,fp,fp2.从键盘输入要修改的图书名。
然后从文件中找一致的,找到后询问修改哪一部分。
在进入修改。
完成后关闭文件。
13、bookcount()图书统计函数模块
定义文件指针fp,并使之指向“book.txt”依次从里面读取数据,并输出。
14、end()结束函数模块定义退出界面。
四.举例说明2个比较有特点的算法
算法一:
查询图书函数
在这个算法的特点在于:
模块中又分为两个子模块:
按书名查找模块和按作者查找,以满足读者的不同需求。
算法二:
图书统计函数模
特点在于:
能够统计借出的图书的信息。
定义指向文件的指针变量fp,并使fp指向“record.txt”,以只写的方式打开文件,从首地址读取,找到图书信息,就把统计借出图书个数的变量i的值加1。
并显示借出的每一本图书的信息。
五:
数据分析
#include
#include
#include
#include
#include
#defineSTACK_INIT_SIZE10
#defineOK1
#defineTRUE1
#defineERROR0
/*定义学生类型,用于存放借出的书籍*/
structstudent{
intbooknum;
}student[1000];
/*定义书的类型*/
structbook
{
intbooknum;
charbookname[20];
charbookcreat[20];
intturefalse;/*用于借书和还书模块判断一本书是否借出的条件*/
}book[1000];
/*借书卡的数据类型*/
structbook1
{
intbooknum;
charbookname[20];
charbookcreat[20];
}book1[1000];
//////////////////////////////////查询图书信息模块//////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
//////
(1)按书名查找
findbook()
{
FILE*fp;
charbookname[10];
inti;
fp=fopen("book.txt","r");
printf("请输入你要查找的书名:
\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].turefalse==1)
{
printf("书号书名作者\n%d%s%s\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
printf("此书现在无人借阅\n按任意键返回\n");}
else{printf("这本书已经有人借出\n");fclose(fp);return0;}
fclose(fp);
return0;
}
}
printf("没有你要查询的书籍!
\n");
fclose(fp);
return0;
}
//////////
(2)按作者查找
findbook1()
{
FILE*fp;
charbookcreat[10];
inti;
fp=fopen("book.txt","r");
printf("请输入你要查找的作者名:
\n");
scanf("%s",bookcreat);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookcreat,book[i].bookcreat)==0)
{
if(book[i].turefalse==1)
{
printf("书号书名作者\n%d%s%s\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
printf("此书现在无人借阅\n按任意键返回\n");
}
else{printf("这本书已经有人借出!
\n");
fclose(fp);
return0;
}
fclose(fp);
return0;
}
}
printf("没有你要查询的书籍\n");
fclose(fp);
return0;
}
chabook()/////查找图书主模块
{
charch5;
do
{printf("\n");printf("\n");printf("\n");
printf("**********欢迎进入图书查询系统**********\n");
printf("\n");
printf("\t1:
按书名查找\n");
printf("\n");
printf("\t2:
按作者查找\n");
printf("\n");
printf("\t0:
返回\n");
printf("\n");
printf("\t请输入0━2:
\n");
printf("\n");
ch5=getch();
switch(ch5)
{
case'1':
findbook();getch();break;
case'2':
findbook1();getch();break;
case'0':
break;
default:
printf("无此操作!
\n");getch();break;
}
}while(ch5!
='0');
return0;
}
//////////////////////////////////图书管理模块/////
//////////
(1).增加图书
addbook()
{
FILE*fp;
inti=0;
fp=fopen("book.txt","a+");
printf("书号:
\n");
scanf("%d",&book[i].booknum);
printf("书名:
\n");
scanf("%s",book[i].bookname);
printf("作者:
\n");
scanf("%d",&book[i].bookcreat);
fwrite(&book[i],sizeof(structbook),1,fp);
fclose(fp);
printf("输入完毕,任意键返回...\n");
getch();
}
//////////
(2).删除图书
delbook()
{
FILE*fp,*fp2;
inti;
intbooknum;
charchoice;
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
printf("要删除的卡号(不存在则不作改动):
\n");
scanf("%d",&booknum);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(book[i].booknum!
=booknum)
{
fwrite(&book[i],sizeof(structbook),1,fp2);
}
}
fclose(fp);
fclose(fp2);
system("colore");
printf("确认删除?
(Y/N)!
\n");
scanf("%s",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen("bookl.txt","w");
fclose(fp2);
printf("操作成功!
\n按任意键返回...\n");
getch();
return0;
}
else
{
printf("操作已取消!
\n按任意键返回...\n");
getch();
return0;
}
}
////////////////////////////////////////////////////////
/////////////////图书管理模块///////////////////////////
//////////
(1).增加图书信息
addbook2()
{
FILE*fp;
inti=0;
charchoice='y';
fp=fopen("book.txt","a+");
while(choice=='y'||choice=='Y')
{system("color6e");
printf("书号:
\n");
scanf("%d",&book[i].booknum);
printf("书名:
\n");
scanf("%s",book[i].bookname);
printf("作者:
\n");
scanf("%s",book[i].bookcreat);
printf("请你设定书的状态(1在架/0不在):
\n");
scanf("%d",&book[i].turefalse);
fwrite(&book[i],sizeof(structbook),1,fp);
printf("是否要输入下本书(y/n)\n");
scanf("%s",&choice);
}
fclose(fp);
}
/////////////
(2).删除图书信息
delbook3()
{
FILE*fp,*fp2;
inti;
charbookname[10],choice;
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
printf("书名:
\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookname,book[i].bookname)!
=0)
{
fwrite(&book[i],sizeof(structbook),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf("确认删除(y/n)?
\n");
scanf("%s",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen("bookl.txt","w");
fclose(fp2);
printf("按任意键返回...\n");
getch();
return0;
}
else
{
printf("按任意键返回...\n");
getch();
return0;
}
}
////////////(3).图书统计
bookcount()
{
FILE*fp;
inti,n=0;
fp=fopen("book.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(book[i].booknum!
=0&&strlen(book[i].bookname)!
=0&&strlen(book[i].bookcreat)!
=0)
{
printf("第%d本书\n序号书名作者状态\n",i+1);
printf("%d%10s",book[i].booknum,book[i].bookname);
printf("%15s%4.2f%d(1在/0不在)\n",book[i].bookcreat,book[i].turefalse);
n=n+1;
}
}
fclose(fp);
printf("目前共有%d本书.\n",n);
printf("按任意键返回...\n");
}
//////////////////////结束界面函数
end()
{system("cls");
printf("\t\t\t┏┳━━━━━━━━━━━━┳┓\n");
printf("\t\t\t┣╋━━━━━━━━━━━━╋┫\n");
printf("\t\t\t┃┃谢谢使用本系统,再见!
┃┃\n");
printf("\t\t\t┣╋━━━━━━━━━━━━╋┫\n");
printf("\t\t\t┗┻━━━━━━━━━━━━┻┛\n");
}
/////////////////////////////////////////////////////////////
////////////////////主函数///////////////////////////
main()
{
charch1,ch2;
system("colore");
do
{system("cls");
printf("\n");
printf("\t\t\t┏┳━━━━━━━━━━━━┳┓\n");
printf("\t\t\t┣╋━━━━━━━━━━━━╋┫\n");
printf("\t\t\t┃┃欢迎进入图书管理系统┃┃\n");
printf("\t\t\t┣╋━━━━━━━━━━━━╋┫\n");
printf("\t\t\t┗┻━━━━━━━━━━━━┻┛\n");
printf("\n");
printf("\t请选择:
\n");
printf("\n");
printf("\t1:
查阅图书\n");
printf("\n");
printf("\t2:
管理系统\n");
printf("\n");
printf("\t0:
退出\n");
printf("\n");
printf("\t请输入0━2:
\n");
ch1=getch();
switch(ch1)
{
case'1':
chabook();break;
case'2':
{
do
{system("colore");
system("cls");
printf("\n");
printf("\t\t**********欢迎进入管理系统**********\n");
printf("\n");
printf("1:
增加图书\n");
printf("\n");
printf("2:
删除图书\n");
printf("\n");
printf("3:
修改图书\n");
printf("\n");
printf("4:
图书统计\n");
printf("\n");
printf("5:
会员管理系统\n");
printf("\n");
printf("0:
返回\n");
printf("\n");
printf("请输入0━5:
\n");
printf("\n");
ch2=getch();
switch(ch2)
{
case'1':
addbook();break;
case'2':
delbook();break;
case'0':
break;
default:
printf("无此操作!
\n");getch();break;
}
}while(ch1!
='0');
}break;
case'0':
break;
default:
printf("无此操作!
\n");getch();break;
}
}while(ch1!
='0');
}
六.存在的问题与不足及对策
本程序存在的问题有:
如果第一次运行程序时没有存入书籍信息,则程序运行时只会显示出错,而不会显示出错原因。
我们可以通过先阅读使用说明来操作,这样就可以避免出错时不知道原因。
很容易就会忘记了分号,导致出错。
七.使用说明
1、主函数运行界面:
2、输入1,进入查阅图书界面:
3、输入2,进入管理系统:
4、输入1,进入增加图书界面:
5、输入2,进入删除图书界面:
进入所选的界面后,按提示操作即可。
注意事项:
第一次运行该程序时,要先输入新图书信息