图书管理系统C语言实现源代码.docx
《图书管理系统C语言实现源代码.docx》由会员分享,可在线阅读,更多相关《图书管理系统C语言实现源代码.docx(18页珍藏版)》请在冰豆网上搜索。
![图书管理系统C语言实现源代码.docx](https://file1.bdocx.com/fileroot1/2022-12/31/96373b17-b4ad-4c0a-8e01-f871e3e10d0e/96373b17-b4ad-4c0a-8e01-f871e3e10d0e1.gif)
图书管理系统C语言实现源代码
#include
#include
#include
#defineN15//图书编号位数
#defineM20//图书名字节数
#defineL20//作者名字节数
#defineK20//出版社字节数
#defineE10//书的类型字节数
#defineF15//图书时间字节数
structbook*chu_jian();//建立链表
structbook*load();//从文件中读取图书信息
voidbaocun(structbook*);//保存链表
structbook*shanchu(structbook*);//删除数据
voidnum_chaxun(structbook*);//根据图书的编号查询图书的信息,并输出数据
inttongji(structbook*);//统计图书的总数目
voidprintf_(structbook*);//输出连表中的图书信息
structbook*paixu(structbook*);//用选择法根据价格排序
voidxiugai(structbook*);//修改图书信息
structbook*charu(structbook*);//插入图书的信息
structbook{
charnum[N];
charname[M];
charautor[L];
chardizhi[K];
charleixing[E];
chartime[F];
floatprice;
structbook*next;
};
intmain(void)
{
intx=1,n,k;
structbook*head;
charch;
/*charmima[12];
printf("请输入密码\n");
for(i=1;i<=3;i++)
{
scanf("%s",mima);
if(strcmp(mima,"201046830904")==0)
{
x=1;
break;
}
else
printf("密码输入有误,请重新输入!
\n");
}*/
while(x)
{system("cls");
printf("*******************************************************************************\n");
printf("图书管理系统\n");
printf("0---退出系统1---录入数据\n");
printf("2---保存文件3---输出信息\n");
printf("4---根据编号查询信息5---插入数据\n");
printf("6---删除数据7---修改数据\n");
printf("8---统计图书数目9---根据价格排序\n");
printf("10--从文件读取数据\n");
printf("*******************************************************************************\n");
scanf("%d",&n);
getchar();
switch(n)
{
case0:
x=0;
break;
case1:
head=chu_jian();
break;
case2:
if(head==NULL||head->next==NULL)
{
printf("请先录入图书的数据!
");
getchar();
break;
}
else
{
baocun(head);
break;
}
case3:
if(head==NULL||head->next==NULL)
{
printf("请先录入图书的数据!
");
getchar();
break;
}
else
{
printf_(head);
break;
}
case4:
if(head==NULL||head->next==NULL)
{
printf("请先录入图书的数据!
");
getchar();
break;
}
else{
num_chaxun(head);
getchar();
break;
}
case5:
if(head==NULL||head->next==NULL)
{
printf("请先录入图书的数据!
");
getchar();
break;
}
else{
head=charu(head);
break;
}
case6:
if(head==NULL||head->next==NULL)
{
printf("请先录入图书的数据!
");
getchar();
break;
}
else{
head=shanchu(head);
break;
}
case7:
if(head==NULL||head->next==NULL)
{
printf("请先录入图书的数据!
");
getchar();
break;
}
else
{
xiugai(head);
getchar();
break;
}
case8:
if(head==NULL||head->next==NULL)
{
printf("请先录入图书的数据!
");
getchar();
break;
}
else
{
k=tongji(head);
printf("总共有%3d本图书",k);
getchar();
break;
}
case9:
if(head==NULL||head->next==NULL)
{
printf("请先录入图书的数据!
");
getchar();
break;
}
else
{
head=paixu(head);
printf("是否显示排序结果Y/N");
ch=getchar();
getchar();
if(ch=='y'||ch=='Y')
{
printf("\n");
printf_(head);
}
break;
}
case10:
head=load();
if(head==NULL||head->next==NULL){
printf("请先录入图书的数据!
");
getchar();
break;
}
else
break;
default:
printf("输入有误,请重新输入!
\n");
getchar();
break;
}
}
return0;
}
//建立链表,并输入数据
structbook*chu_jian()
{
structbook*head,*tail,*p;
charnum[N],name[M],autor[L],dizhi[K],leixing[E],time[F];
floatprice;
head=tail=NULL;
printf("当输入价格为0时则结束\n");
printf("输入编号书名作者出版社类型时间价格\n");
scanf("%s%s%s%s%s%s%f",num,name,autor,dizhi,leixing,time,&price);
while(price!
=0)
{
p=(structbook*)malloc(sizeof(structbook));
strcpy(p->num,num);
strcpy(p->name,name);
strcpy(p->autor,autor);
strcpy(p->dizhi,dizhi);
strcpy(p->leixing,leixing);
strcpy(p->time,time);
p->price=price;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
scanf("%s%s%s%s%s%s%f",num,name,autor,dizhi,leixing,time,&price);
}
getchar();
returnhead;
}
//保存链表至文件
voidbaocun(structbook*head)
{
structbook*ptr;
FILE*fp;
if((fp=fopen("图书管理系统.txt","w"))==NULL)
{
printf("文件图书管理系统.txt打开失败!
");
exit(0);
}
for(ptr=head;ptr;ptr=ptr->next)
fprintf(fp,"%10s%10s%10s%10s%10s%10s%20f\n",ptr->num,ptr->name,ptr->autor,ptr->dizhi,ptr->leixing,ptr->time,ptr->price);
fclose(fp);
printf("文件成功保存到图书管理系统.txt中\n");
getchar();
}
//输出图书的信息
voidprintf_(structbook*head)
{
structbook*p;
p=head;
if(head!
=NULL)
{
do
{
printf("编号:
");
puts(p->num);
printf("书名:
");
puts(p->name);
printf("作者:
");
puts(p->autor);
printf("出版社:
");
puts(p->dizhi);
printf("类型:
");
puts(p->leixing);
printf("时间:
");
puts(p->time);
printf("价格:
");
printf("%f",p->price);
printf("\n");
p=p->next;
}while(p!
=NULL);
}
getchar();
}
//根据图书的编号查询图书的信息,并输出数据
voidnum_chaxun(structbook*head)
{
chara[N];
structbook*p;
printf("输入要查询的图书的编号:
");
gets(a);
p=head;
while(p!
=NULL){
if(strcmp(p->num,a)==0)
break;
p=p->next;
}
if(p==NULL)
printf("没有找到编号为%s的图书!
\n",a);
else{
printf("%10s%10s%10s%10s%10s%10s%20f\n",p->num,p->name,p->autor,p->dizhi,p->leixing,p->time,p->price);
}
}
//删除数据
structbook*shanchu(structbook*head)
{
chara[N];
structbook*p1,*p2,*p3;
printf("输入要删除的图书的编号:
");
gets(a);
p1=head;
p2=p1;
while(p2!
=NULL&&(strcmp(p2->num,a)!
=0))
{
p3=p2;
p2=p2->next;
}
if(p2==NULL)
printf("没有找到要删除的数据!
\n");
elseif(p2==head){
head=p2->next;
printf("删除成功\n");
}
else{
p3->next=p2->next;
printf("删除成功\n");
}
getchar();
returnhead;
}
//统计图书的总数目
inttongji(structbook*head)
{
intx=0;
structbook*p;
for(p=head;p!
=NULL;p=p->next)
x++;
returnx;
}
//根据价格排序
structbook*paixu(structbook*head)
{
structbook*p1,*p2,*p3,*p4,*p5,*p6,*p7;
intx=1;
for(p1=head;p1->next!
=NULL;p4=p1,p1=p1->next)
{
p3=p1;
for(p2=p1->next,p5=p7=p2;p2!
=NULL;p7=p2,p2=p2->next)
{
if(p3->price>p2->price)
{
p3=p2;
p5=p7;
}
}
if(p3!
=p1)
{
if(x&&p1==head)
{
p6=p1->next;
p1->next=p3->next;
p3->next=p6;
p5->next=p1;
head=p3;
p1=p3;
x=0;
}
else
{
p6=p1->next;
p1->next=p3->next;
p3->next=p6;
p4->next=p3;
p5->next=p1;
p1=p3;
}
}
}
printf("排序成功!
\n");
returnhead;
}
//从文件中读入图书信息
structbook*load()
{
FILE*fp;
structbook*p1,*tail,*head;
head=tail=NULL;
if((fp=fopen("图书管理系统.txt","r"))==NULL)
{
printf("文件图书管理系统.txt打开失败!
");
exit(0);
}
while(!
feof(fp))
{
p1=(structbook*)malloc(sizeof(structbook));
fscanf(fp,"%10s%10s%10s%10s%10s%10s%20f\n",&p1->num,&p1->name,&p1->autor,&p1->dizhi,&p1->leixing,&p1->time,&p1->price);
if(head==NULL)
head=p1;
else
tail->next=p1;
tail=p1;
}
tail->next=NULL;
fclose(fp);
returnhead;
}
//修改图书信息
voidxiugai(structbook*head)
{
chara[N];
structbook*p;
floatprice;
charnum[N],name[M],autor[L],dizhi[K],leixing[E],time[F];
intk;
printf("输入要修改的图书的编号");
gets(a);
p=head;
while(p!
=NULL)
{
if(strcmp(p->num,a)==0)
break;
p=p->next;
}
if(p==NULL)
{
printf("没有要找的图书信息\n");
getchar();
}
else
{
printf("***********************************************************\n");
printf("0--放弃修改1--修改编号\n");
printf("2--修改书名3--修改作者\n");
printf("4--修改出版社5--修改类型\n");
printf("6--修改出版时间7--修改价格\n");
printf("8--修改全部\n");
printf("***********************************************************\n");
scanf("%d",&k);
getchar();
switch(k)
{
case0:
break;
case1:
printf("请输入新的编号:
");
gets(p->num);
printf("修改成功!
");
getchar();
break;
case2:
printf("请输入新的书名:
");
gets(p->name);
printf("修改成功!
");
getchar();
break;
case3:
printf("请输入新的作者:
");
gets(p->autor);
printf("修改成功!
");
getchar();
break;
case4:
printf("请输入新的出版社:
");
gets(p->dizhi);
printf("修改成功!
");
getchar();
break;
case5:
printf("请输入新的类型:
");
gets(p->leixing);
printf("修改成功!
");
getchar();
break;
case6:
printf("请输入新的出版时间:
");
gets(p->time);
printf("修改成功!
");
getchar();
break;
case7:
printf("请输入新的价格:
");
scanf("%f",&price);
p->price=price;
printf("修改成功!
");
getchar();
break;
case8:
printf("请输入编号书名作者出版社类型出版时间价格\n");
scanf("%s%s%s%s%s%s%f",num,name,autor,dizhi,leixing,time,&price);
strcpy(p->num,num);
strcpy(p->name,name);
strcpy(p->autor,autor);
strcpy(p->dizhi,dizhi);
strcpy(p->leixing,leixing);
strcpy(p->time,time);
p->price=price;
printf("修改成功!
");
getchar();
break;
default:
printf("您的输入有误!
");
getchar();
break;
}
}
}
//插入图书的信息
structbook*charu(structbook*head)
{
structbook*p1,*p2,*p3;
floatprice;
charnum[N],name[M],autor[L],dizhi[K],leixing[E],time[F];
printf("请输入编号书名作者出版社类型出版时间价格\n");
scanf("%s%s%s%s%s%s%f",num,name,autor,dizhi,leixing,time,&price);
p1=(structbook*)malloc(sizeof(structbook));
strcpy(p1->num,num);
strcpy(p1->name,name);
strcpy(p1->autor,autor);
strcpy(p1->dizhi,dizhi);
strcpy(p1->leixing,leixing);
strcpy(p1->time,time);
p1->price=price;
p3=head;
while((strcmp(p1->num,p3->num)>0)&&(p3->next!
=NULL)){
p2=p3;
p3=p3->next;
}
if(strcmp(p1->num,p3->num)<=0){
if(head==p3)
head=p1;
else
p2->next=p1;
p1->next=p3;
}
else{
p3->next=p1;
p1-