我这有图书管理系统,估计和你的差不多吧
链表做的
# include <stdio.h>
# include <stdlib.h>
#include<malloc.h>
#include <string.h>
f1();f2();f3();f4();f5();f6();f7();f7_price();f7_page();output();foutput();//函数申明;
struct book
{
char name[20];//书名;
int page;//页数;
int price;//价格;
int total;//数量库存;
struct book *next;
};
struct book *head,*end,*p,*head2,*end2,*p2,*q1,*q2;//全局变量,方便后面的使用;
main()
{
int n;
n=1;
printf("\t
欢迎使用金洋家庭图书管理系统\n\n");
while(n!=0)
{
printf("\t
家庭图书管理系统程序\n\n");
printf("================我的菜单====================\n");
printf("\t
1.图书信息批量录入\n");
printf("\t
2.图书信息修改\n");
printf("\t
3.图书损坏、遗失\n");
printf("\t
4.图书出借\n");
printf("\t
5.图书归还\n");
printf("\t
6.单个图书信息插入\n");
printf("\t
7.排序输出\n");
printf("\t
0.退出\n");
printf("============================================\n");
printf("\t\t请选择:");
scanf("%d",&n);
switch(n)
{
case 1:f1();break;
case 2:f2();break;
case 3:f3();break;
case 4:f4();break;
case 5:f5();break;
case 6:f6();break;
case 7:f7();break;
case 0:break;
default :printf("选择错误!!!");
}
printf("\n\n");
}
printf("感谢您的使用!!!\n\n");
}
//------------------------------------ 图书信息批量录入 ------------------------------
output(struct book *head1)
{
struct book *q;
printf("书名\t\t页数\t\t价格\t\t库存\n\n");
q=head1->next;
while(q!=NULL&&(q->price!=1000)&&(q->page!=1000))
{
printf("%s\t\t%d\t\t%d\t\t%d\n",q->name,q->page,q->price,q->total);
q=q->next;
}
printf("\n");
}
foutput(struct book *head1)
{
FILE *fp1;
struct book *q;
fp1=fopen("家庭图书信息.txt","w");
if(fp1==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
q=head->next;
while(q!=NULL)
{
fprintf(fp1,"%s\t\t%d\t\t%d\t\t%d\n",q->name,q->page,q->price,q->total);
q=q->next;
}
fclose(fp1);
}
f1()
{
FILE *fp;
fp=fopen("家庭图书信息.txt","r"); //以只读方式打开当前目录下的家庭图书信息.txt
if(fp==NULL)
{
printf("无法打开文件");
exit(0);
//-------- 终止程序 ---------
}
head=(struct book *)malloc(sizeof(struct book));
end=head;
end->next=NULL;
while(!feof(fp)) //------!feof(fp)值为0,不在执行循环语句
------
{
p=(struct book *)malloc(sizeof(struct book));
fscanf(fp,"%s%d%d%d\n",&p->name,&p->page,&p->price,&p->total);
p->next=NULL;
end->next=p;
end=p;
}
output(head);
fclose(fp);
//----关闭文件-----
}
//--------------------------------------
图书信息修改 --------------------------
f2()
{
char name[20];
int m;
m=0;
f1();
printf("请输入您要修改的书名");
scanf("%s",name);
p=head->next;
while(p!=NULL)
{
if(strcmp(name,p->name)==0)//比较两个字符串是否相同
{
printf("请输入你要修改后的书名:");
scanf("%s",p->name);
printf("请输入你要修改后的页数:");
scanf("%d",&p->page);
printf("请输入你要修改后的书价:");
scanf("%d",&p->price);
printf("请输入你要修改后的数量:");
scanf("%d",&p->total);
m++;
}
p=p->next;
}
if(m==0)printf("\n没有找到所要修改的书!请重新输入!\n\n");
else foutput(head);
output(head);
}
//------------------------------------- 图书损坏遗失-------------------------
f3()
{
int m;
char name[20];
struct book *q;
f1();
m=0;
printf("请输入你损坏或遗失的书名");
scanf("%s",name);
q=head;
p=q->next;
while(q!=NULL)
{
if(strcmp(name,p->name)==0)//比较两个字符串是否相同
{
q->next=p->next;
free(p);
p=q->next;
m++;
}
q=q->next;
}
if(m==0)
printf("\n图书库内没有您损坏或遗失的书\n");
else foutput(head);
output(head);
}
//-------------------------------------- 图书出借--- ---------------------------
f4()
{
int m,n;
char name[20];
m=0;
f1();
printf("请您输入您要借阅的书名");
scanf("%s",name);
p=head->next;
while(p!=NULL)
{
if(strcmp(name,p->name)==0)
{
printf("请问您要借几本?请输入:");
scanf("%d",&n);
if(p->total==0)
printf("\n您要的书已经借光\n");
if(n>p->total)
printf("\n您要借的书籍库存不够\n");
else
{
p->total=p->total-n;
printf("\n欢迎您的借阅\n");
}
m++;
}
p=p->next;
}
if(m==0) printf("\n对不起,图书库内没有您要借阅的书\n");
else foutput(head);
output(head);
}
//-------------------------------- 图书归还 -------------------------
f5()
{
int m,n;
char name[20];
f1();
m=0;
printf("请输入您要归还的书名:");
scanf("%s",name);
p=head->next;
while(p!=NULL)
{
if(strcmp(name,p->name)==0)
{
printf("请输入您要归还的数量:");
scanf("%d",&n);
p->total=p->total+n;
m++;
}
p=p->next;
}
if(m==0)
printf("\n对不起,此书未借出or书名错误!!!\n");
else foutput(head);
output(head);
}
//------------------------------ 单个图书信息插入 -----------------------
f6()
{
f1();
p=(struct book *)malloc(sizeof(struct book));
printf("请输入你要增加的书名:");
scanf("%s",&p->name);
printf("请输入你要增加的书的页数:");
scanf("%d",&p->page);
printf("请输入你要增加的书的价格:");
scanf("%d",&p->price);
printf("请输入你要增加的书的库存:");
scanf("%d",&p->total);
p->next=NULL;
end->next=p;
end=p;
foutput(head);
output(head);
}
//-------------------------------- 排序输出 -----------------------------
f7()
{
int n;
n=1;
while(n!=0)
{
printf("
请选择排序方式\n");
printf("=====================================\n");
printf("
1、 按书的价格排序输出\n");
printf("
2、 按书的页数排序输出\n");
printf("
0、 返回主菜单\n");
printf("=====================================\n");
printf("
请选择:");
scanf("%d",&n);
switch(n)
{
case 1:f7_price();break;
case 2:f7_page();break;
case 0:break;
default:printf("选择错误!!!\n");
}
}
}
//----------------------------- 按书的价格排序 -------------------
f7_price()
{
printf("排序之前:\n");
f1();
//----------------------头结点---------------------
head2=(struct book *)malloc(sizeof(struct book));
head2->price=0;
end2=head2;
end2->next=NULL;
//---------------------尾结点----------------------
p2=(struct book *)malloc(sizeof(struct book));
p2->price=1000;
p2->next=NULL;
end2->next=p2;
end2=p2;
p=head->next;
while(p!=NULL)
{
q1=head2;
while(q1!=NULL)
{
q2=q1->next;
p2=(struct book *)malloc(sizeof(struct book));
p2->price=p->price;
p2->total=p->total;
p2->page=p->page;
strcpy(p2->name,p->name);//strcpy函数:字符串的复制;
p2->next=NULL;
if((p2->price)>=(q1->price)&&(p2->price)<=(q2->price)&&(q2!=NULL))
{
q1->next=p2;
p2->next=q2;
break;
}
else
q1=q1->next;
}
p=p->next;
}
printf("按书的价格排序:\n");
output(head2);
}
//------------------------------ 按书的页数排序 -----------------------
f7_page()
{
printf("排序之前:\n");
f1();
//----------------------头结点---------------------
head2=(struct book *)malloc(sizeof(struct book));
head2->page=0;
end2=head2;
end2->next=NULL;
//---------------------尾结点----------------------
p2=(struct book *)malloc(sizeof(struct book));
p2->page=1000;
p2->next=NULL;
end2->next=p2;
end2=p2;
p=head->next;
while(p!=NULL)
{
q1=head2;
while(q1!=NULL)
{
q2=q1->next;
p2=(struct book *)malloc(sizeof(struct book));
p2->price=p->price;
p2->total=p->total;
p2->page=p->page;
strcpy(p2->name,p->name);//strcpy函数:字符串的复制;
p2->next=NULL;
if((p2->page)>=(q1->page)&&(p2->page)<=(q2->page)&&(q2!=NULL))
{
q1->next=p2;
p2->next=q2;
break;
}
else
q1=q1->next;
}
p=p->next;
}
printf("按书的页数排序:\n");
output(head2);
}