C语言大作业 图书管理.docx
《C语言大作业 图书管理.docx》由会员分享,可在线阅读,更多相关《C语言大作业 图书管理.docx(15页珍藏版)》请在冰豆网上搜索。
C语言大作业图书管理
c语言图书管理系统
主要功能:
1.新进图书基本信息的输入。
2.显示全部记录
3.按图书名称查询图书基本信息。
4.根据图书名称对撤消的图书信息进行删除。
5.按图书名称从小到大排序。
6.统计某价格以上的图书数量。
7.列出所有未借出去的图书信息。
基本信息:
图书编号、图书名称、单价、作者、存在状态、借书人姓名、性别、学号等
#include
#include
#include
#include
typedefintBOOL;
typedefstructbookinfo
{
charnumber[15];/*产品编号*/
charname[30];/*产品名称*/
floatprice;/*单价*/
charauther[20];/*作者*/
BOOLisExit;/*存在状态*/
charlendername[20];/*借书人姓名*/
charlendersex[2];/*借书人性别*/
charlendernum[15];/*借书人学号*/
}BOOKINFO;
voidmenu()
{
printf("\n\n\n\n\n\n\n");
printf("\t\t\t图书管理系统\n");
printf("\t\t\t1:
新进图书基本信息的输入\n");
printf("\t\t\t2:
显示全部记录\n");
printf("\t\t\t3:
根据图书名称查询图书基本信息\n");
printf("\t\t\t4:
根据图书名称对撤销的图书信息进行删除\n");
printf("\t\t\t5:
按照图书名称从小大到排序\n");
printf("\t\t\t6:
统计某价格以上的图书数量\n");
printf("\t\t\t7:
列出所有未借出去的图书信息\n");
printf("\t\t\t8:
退出\n");
}
voidchoice_1_input_new()/*输入新进的图书信息*/
{
charchoice;
FILE*p;
BOOKINFOnewbook;
system("cls");
while
(1)
{
printf("输入图书编号:
");
gets(newbook.number);
printf("输入图书名称:
");
gets(newbook.name);
printf("输入图书单价:
");
scanf("%f",&newbook.price);
while(getchar()!
='\n');
printf("输入图书的作者:
");
gets(newbook.auther);
printf("输入借书人姓名:
");
gets(newbook.lendername);
printf("输入借书人性别:
");
gets(newbook.lendersex);
printf("输入借书人学号:
");
gets(newbook.lendernum);
printf("是否保存该条书目?
(Y/N)\n");
choice=getch();
while(choice!
='Y'&&choice!
='y'&&choice!
='N'&&choice!
='n')
choice=getch();
if(choice=='Y'||choice=='y')
{
newbook.isExit=1;/*将图书状态设置成1,表示没有借出*/
p=fopen("c:
\\bookinfo.data","ab");
fwrite(&newbook,sizeof(BOOKINFO),1,p);
fclose(p);
printf("\n该条书目已添加到c:
\\bookinfo.data文件中!
\n");
}
else
{
printf("\n本条书目未保存!
\n");
}
printf("\n是否继续添加书目?
(Y/N)\n");
choice=getch();
while(choice!
='Y'&&choice!
='y'&&choice!
='N'&&choice!
='n')
choice=getch();
if(choice=='Y'||choice=='y')
continue;
else
break;
}
}
voidchoice_2_display_all()/*显示全部图书信息*/
{
FILE*p;
intn;
BOOKINFObookinfo[100];
intbooknumber=0;
system("cls");
p=fopen("c:
\\bookinfo.data","rb");
while(!
feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
booknumber--;
if(booknumber==0)
{
printf("没有任何图书信息!
\n\n");
}
else
{
n=0;
printf("图书信息如下\n");
printf("图书信息|借书人信息\n");
printf("编号名称单价作者图书状态|姓名
性别学号\n");
while(n{
printf("%-6s%-12s%-8.1f%-8s%-9d|%-12s%-8s%-8s\n",
bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
bookinfo[n].lendersex,bookinfo[n].lendernum);
n++;
}
}
printf("\n\n按任意键回到主菜单!
\n");
getch();
}
voidchoice_3_search_according_name()/*根据图书名称显示图书的信息*/{
charsearch[20]="";/*search用来存放要查询的书名*/
intn;
FILE*p;
charchoice;
BOOKINFObookinfo[100];
intbooknumber=0;
system("cls");
p=fopen("c:
\\bookinfo.data","rb");
while(!
feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while
(1)
{
printf("输入要查询的书本名称:
");
gets(search);
if(booknumber==0)
{
printf("书库中没有任何信息!
\n\n");
printf("按任意键回到主菜单!
\n\n");
getch();
break;
}/*if结束*/
else
{
for(n=0;nif(strcmp(bookinfo[n].name,search)==0)
{
printf("该书的详细信息如下:
\n");
printf("图书信息|
借书人信息\n");
printf("编号名称单价作者图书状态|姓名
性别学号\n");
printf("%-6s%-12s%-8.1f%-8s%-9d|%-12s%-8s%-8s\n",bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
bookinfo[n].lendersex,bookinfo[n].lendernum);
break;
}
if(n>=booknumber)
printf("没有查找该书的任何信息!
\n");
printf("\n\n是否继续查询?
(Y/N)\n");
choice=getch();
while(choice!
='Y'&&choice!
='y'&&choice!
='N'&&choice!
='n')
choice=getch();
if(choice=='Y'||choice=='y')
continue;
else
break;
}/*else结束*/
}/*while
(1)结束*/
}
voidchoice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/{
charsearch[20]="";/*search用来存放要删除的书名*/
intn,i;
FILE*p;
charchoice;
BOOKINFObookinfo[100];
intbooknumber;
system("cls");
while
(1)
{
printf("输入要删除的书本名称:
");
gets(search);
p=fopen("c:
\\bookinfo.data","rb");
booknumber=0;
while(!
feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if(booknumber==0)
{
printf("书库中没有任何信息!
\n\n");
printf("按任意键回到主菜单!
\n\n");
getch();
break;
}/*if结束*/
else
{
for(n=0;nif(strcmp(bookinfo[n].name,search)==0)
{
break;
}
if(n>=booknumber)
printf("没有查找该书的任何信息!
\n");
else
{
printf("是否确认需要删除该条书目?
(Y/N)");
choice=getch();
while(choice!
='Y'&&choice!
='y'&&choice!
='N'&&choice!
='n')
choice=getch();
if(choice=='Y'||choice=='y')
{
for(i=n;ibookinfo[i]=bookinfo[i+1];
booknumber--;
p=fopen("c:
\\bookinfo.data","wb");
for(n=0;nfwrite(&bookinfo[n],sizeof(BOOKINFO),1,p);
fclose(p);
printf("删除成功!
\n");
}
else
printf("\n\n该条书目没有被删除!
");
}
printf("\n\n是否继续进行删除操作?
(Y/N)\n");
choice=getch();
while(choice!
='Y'&&choice!
='y'&&choice!
='N'&&choice!
='n')
choice=getch();
if(choice=='Y'||choice=='y')
continue;
else
break;
}/*else结束*/
}/*while
(1)结束*/
}
voidchoice_5_sort_according_name()/*根据图书名称排序*/
{
FILE*p;
intm,n;
BOOKINFOtemp;
BOOKINFObookinfo[100];
intbooknumber;
p=fopen("c:
\\bookinfo.data","rb");
booknumber=0;
system("cls");
while(!
feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if(booknumber==0)
{
printf("没有任何图书信息!
\n\n");
}
else
{
for(m=0;mfor(n=m+1;nif(strcmp(bookinfo[m].name,bookinfo[n].name)>0)
{
temp=bookinfo[m];
bookinfo[m]=bookinfo[n];
bookinfo[n]=temp;
}
p=fopen("c:
\\bookinfo.data","wb");
for(m=0;mfwrite(&bookinfo[m],sizeof(BOOKINFO),1,p);
fclose(p);
printf("\n\n完成排序!
\n\n");
}
printf("按任意键回到主菜单!
\n");
getch();
}
voidchoice_6_display_high_price()/*根据价格列出图书信息*/{
floatprice;
FILE*p;
intn;
intcount=0;
BOOKINFObookinfo[100];
intbooknumber;
system("cls");
printf("请输入价格:
");
scanf("%f",&price);
p=fopen("c:
\\bookinfo.data","rb");
booknumber=0;
while(!
feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if(booknumber==0)
{
printf("没有任何图书信息!
\n\n");
}
else
{
for(n=0;n{
if(bookinfo[n].price>=price)
count++;
}
if(count==0)
printf("书库中没有比%.1f$价格高的图书!
",price);
else
{
printf("价格高于%.1f$的图书信息如下\n",price);
printf("图书信息|借书人信息\n");
printf("编号名称单价作者图书状态|姓名
性别学号\n");
for(n=0;n{
if(bookinfo[n].price>=price)
printf("%-6s%-12s%-8.1f%-8s%-9d|%-12s%-8s%-8s\n",bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
bookinfo[n].lendersex,bookinfo[n].lendernum);
}
}
}
printf("\n\n按任意键回到主菜单!
\n");
getch();
}
voidchoice_7_display_according_exitflag()/*根据存在状态列出图书信息*/{
FILE*p;
intn;
intcount=0;
BOOKINFObookinfo[100];
intbooknumber;
system("cls");
booknumber=0;
p=fopen("c:
\\bookinfo.data","rb");
while(!
feof(p))
{
fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
booknumber++;
}
booknumber--;
fclose(p);
if(booknumber==0)
{
printf("书库中没有任何书目存在!
\n");
}
else
{
for(n=0;nif(bookinfo[n].isExit==1)
count++;
if(count==0)
printf("书库中的书籍全部借出!
\n");
else
{
printf("书库中未被借出的图书信息如下:
\n\n");
printf("图书信息|借书人信息\n");
printf("编号名称单价作者图书状态|姓名
性别学号\n");
for(n=0;nif(bookinfo[n].isExit==1)
{
printf("%-6s%-12s%-8.1f%-8s%-9d|%-12s%-8s%-8s\n",bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
bookinfo[n].lendersex,bookinfo[n].lendernum);
}
}
}
printf("\n按任意键返回主菜单!
\n");
getch();
}
voidmain()
{
charchoice;
clock_ttm;
FILE*p;
if((p=fopen("c:
\\bookinfo.data","rb"))==NULL)
{
p=fopen("c:
\\bookinfo.data","wb");
fclose(p);
}
while
(1)
{
system("cls");
menu();
choice=getch();
switch(choice)
{
case'1':
choice_1_input_new();break;/*输入新进的图书信息*/
case'2':
choice_2_display_all();break;/*显示全部图书信息*/
case'3':
choice_3_search_according_name();break;/*根据图书名称显示图书的信息*/
case'4':
choice_4_delete_according_name();break;/*根据图书名称对图书信息进行删除*/
case'5':
choice_5_sort_according_name();break;/*根据图书名称排序*/
case'6':
choice_6_display_high_price();break;/*根据价格列出图书信息*/
case'7':
choice_7_display_according_exitflag();break;/*根据存在状态列出图书信息*/
case'8':
printf("\n\n\t\t\t谢谢使用,再见!
\n\t\t\t按任意键退
出!
\n");getch();return;
default:
printf("\n\n\t\t\t请输入菜单中的数字!
(1~8)");
tm=clock();
while(clock()break;
}
}
}