h>
#include〈string.h〉
structbook{
intnum;
charbname[50];
charwname[20];
charpress[50];
charsort[50];
inttime;
floatprice;
structbook*next;
};
structbook*creatbook();//创建链表
structbook*addbook(structbook*head);//添加图书
intyanzheng(structbook*head,intm);//验证新添加的图书编码是否已存在
voiddeletebook(structbook*head);//删除图书
voidfprint(structbook*head);//将链表写入文件
structbook*load();//从文件中读取信息并建成链表
voidprint_book(structbook*head);//将链表信息输出
voidchaxun(structbook*head);//查询图书信息
voidnum_chaxun(structbook*head);//按图书编号查询图书
voidwname_chaxun(structbook*head);//按作者名查询图书
voidsort_chaxun(structbook*head);//按类别查询图书
voidtime_chaxun(structbook*head);//按出版时间查询图书
voidbname_chaxun(structbook*head);//按图书名查询图书
voidxiugai(structbook*head);//修改图书信息
voidpaixu(structbook*head);//对图书进行排序
voidnum_paixu(structbook*head);//按图书编号排序
voidtime_paixu(structbook*head);//按图书出版时间排序
voidprice_paixu(structbook*head);//按图书价格排序
voidbname_paixu(structbook*head);//按图书名排序
voidwname_paixu(structbook*head);//按作者名排序
intmain()
{
intchoice,n,x,y=1,c,c1=1;
chara,d,b[10],b1[10]="1”;
structbook*head=NULL;
while(y){
system(”cls");
printf(”\n\n\n\n\n");
printf("—--—-------—-———--——-——--—-—-——----—--——-——-—---—--——--—----———--——---\n");
printf(”—--||-—---—-——————||---————图书信息管理系统--—-——--||———-—--—---||-—-\n");
printf("—-—||-—-—---———--—||—————-—登陆界面—--————-||--—--——————||-—-\n”);
printf("——--———-——-——————----————--—-—-------—-----——-—-———----——-------————-—\n");
printf("\n");
printf("============1-进入系统===========\n”);
printf(”============0—退出系统===========\n”);
printf("-——--————---———---———-——---——--——-—--—-——--———-———-——--—-----————--—--\n");
printf("请输入选择:
”);
scanf(”%d”,&n);
printf("\n”);
getchar();
switch(n){
case0:
y=0;
break;
case1:
printf("请输入您的用户名(输入1即可):
”);
gets(b);
printf("\n");
printf("请输入您的密码(输入1即可):
");
scanf("%d",&c);
printf(”\n");
if(strcmp(b,b1)!
=0||c!
=c1){
printf("验证失败,请重新输入!
\n”);
scanf(”%c",&d);
getchar();
system(”cls”);
}
else{
printf("验证通过!
请按Enter键进入!
\n");
scanf(”%c",&d);
getchar();
x=1;
while(x){
system("cls”);
system(”color1F”);
printf(”--——-——-—---———----—---—-——----———-—-———-—-------——-—--——-——---———————\n\n");
printf("—-—||--—-——-—--——-||-—--———图书信息管理系统—--——-—-||--——————---||———\n\n”);
printf("——-||-—-—-—--——-——||------—--—-操作界面—--—-—-—--——||----——————-||———\n\n”);
printf(”———---———-—--————--——-—-——————--—-—-———-———--—--——--——--—-—-———-——---—\n\n");
printf("—--——--———--——-——-—--———-——-———----——-————-—--\n");
printf(”—---||——-———----—系统菜单选项—---——--——-||—---\n");
printf(”-——--—-———--—-—--—--————----——-----—-—————--—-\n”);
printf("-||1-添加图书删除图书-2||-\n\n");
printf("-||3—图书列表图书排序-4||-\n\n”);
printf(”—||5-查询图书修改图书-6||-\n\n");
printf(”-||7—录入数据退出系统-0||—\n\n");
printf("---—-—-——---——-———---—--——-———--—--—-—-—---——-\n”);
printf(”—--—--——--———--——----——--—-————-—————-—-—-—-——\n\n”);
printf(”请输入所选择的序号:
”);
scanf("%d",&choice);
getchar();
system("cls");
switch(choice)
{
case0:
x=0;break;
case1:
head=load();
if(head==NULL){
printf(”文件为空,请先录入数据!
\n”);
getchar();
break;
}
else{
head=addbook(head);
printf("添加成功!
\n");
printf("是否将新信息保存到文件?
(y/n)\n”);
scanf(”%c",&a);
getchar();
switch(a){
case’n’:
break;
case'y':
fprint(head);
printf("保存成功!
\n”);
getchar();
break;
}
break;
}
case2:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n”);
getchar();
break;
}
else{
deletebook(head);
getchar();
break;
}
break;
case3:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n”);
getchar();
break;
}
else{
print_book(head);
getchar();
break;
}
case4:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n”);
getchar();
break;
}
else{
paixu(head);
getchar();
}
break;
case5:
head=load();
if(head==NULL){
printf(”文件为空,请先录入数据!
\n");
getchar();
break;
}
else{
chaxun(head);
getchar();
}
break;
case6:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n");
getchar();
break;
}
else{
xiugai(head);
getchar();
break;
}
break;
case7:
printf("注意:
输入图书编码为0时结束!
\n”);
head=creatbook();
printf("是否将输入的信息保存到文件以覆盖文件中已存在的信息?
(y/n)\n”);
getchar();
scanf("%c”,&a);
getchar();
switch(a){
case’0’:
break;
case’y':
fprint(head);
printf("保存成功!
\n”);
getchar();
break;
}
break;
default:
printf(”输入有误,请重新输入!
\n”);
getchar();
break;
}
}
}
break;
default:
printf("输入有误,请重新输入!
\n”);
getchar();
break;
}
}
}
//录入数据并形成链表
structbook*creatbook()
{
structbook*head,*tail,*p;
intnum,time,n;
charbname[50],wname[20],press[50],sort[50];
floatprice;
intsize=sizeof(structbook);
head=tail=NULL;
printf("请输入图书编号:
");
scanf(”%d",&num);
printf(”请输入图书名:
");
scanf(”%s”,bname);
getchar();
printf(”请输入作者名:
”);
scanf("%s”,wname);
getchar();
printf(”请输入出版社:
”);
scanf("%s",press);
getchar();
printf(”请输入类别:
”);
scanf(”%s",sort);
getchar();
printf("请输入出版时间:
”);
scanf("%d”,&time);
getchar();
printf("请输入价格:
”);
scanf("%f”,&price);
getchar();
while
(1){
p=(structbook*)malloc(size);
p—〉num=num;
strcpy(p-〉bname,bname);
strcpy(p-〉wname,wname);
strcpy(p->press,press);
strcpy(p—>sort,sort);
p—>time=time;
p—〉price=price;
p->next=NULL;
if(head==NULL)
head=p;
else
tail—>next=p;
tail=p;
do{
printf(”请输入图书编号:
");
scanf("%d”,&num);
n=yanzheng(head,num);
if(n==0)
break;
else
printf(”您输入的编号已存在,请重新输入!
\n");
}while
(1);
if(num==0)
break;
else
{
printf("请输入图书名:
");
scanf("%s”,bname);
getchar();
printf(”请输入作者名:
");
scanf(”%s",wname);
getchar();
printf("请输入出版社:
");
scanf(”%s",press);
getchar();
printf(”请输入类别:
");
scanf(”%s”,sort);
getchar();
printf("请输入出版时间:
”);
scanf("%d",&time);
getchar();
printf(”请输入价格:
");
scanf("%f”,&price);
getchar();
}
}
returnhead;
}
//插入结点,并且插入后仍按一定顺序
structbook*addbook(structbook*head)
{
structbook*ptr,*p1,*p2,*p;
charbname[50],wname[20],press[50],sort[50];
intsize=sizeof(structbook);
intnum,time,n=1;
floatprice;
do{
printf(”请输入图书编号:
");
scanf("%d”,&num);
n=yanzheng(head,num);
if(n==0)
break;
else
printf(”您输入的编号已存在,请重新输入!
\n");
}while
(1);
printf(”请输入图书名:
");
scanf("%s”,bname);
getchar();
printf(”请输入作者名:
”);
scanf("%s”,wname);
getchar();
printf(”请输入出版社:
");
scanf("%s",press);
getchar();
printf(”请输入类别:
”);
scanf(”%s”,sort);
getchar();
printf(”请输入出版时间:
”);
scanf(”%d”,&time);
getchar();
printf(”请输入价格:
”);
scanf("%f",&price);
getchar();
p=(structbook*)malloc(size);
p—〉num=num;
strcpy(p—〉bname,bname);
strcpy(p—〉wname,wname);
strcpy(p-〉press,press);
strcpy(p->sort,sort);
p—〉time=time;
p—〉price=price;
p2=head;
ptr=p;
while((ptr-〉num>p2—〉num)&&(p2->next!
=NULL)){
p1=p2;
p2=p2—〉next;
}
if(ptr->num<=p2—>num){
if(head==p2)
head=ptr;
else{
p1-〉next=ptr;
p—>next=p2;
}
}
else{
p2—>next=ptr;
p->next=NULL;
}
returnhead;
}
//验证添加的图书编号是否已存在
intyanzheng(structbook*head,intm)
{
structbook*p;
p=head;
while(p!
=NULL){
if(p-〉num==m)
break;
p=p->next;
}
if(p==NULL)
return0;
else
return1;
}
//将新链表写入文件中
voidfprint(structbook*head)
{
FILE*fp;
charch='1';
structbook*p1;
if((fp=fopen("f1。
txt",”w”))==NULL){
printf("Fileopenerror!
\n");
exit(0);
}
fputc(ch,fp);
for(p1=head;p1;p1=p1-〉next){
fprintf(fp,"%d%s%s%s%s%d%f\n”,p1—>num,p1—〉bname,p1—>wname,p1->press,p1->sort,p1—〉time,p1->price);
}
fclose(fp);
}
//从文件中读取图书信息
structbook*load()
{
FILE*fp;
charch;
structbook*head,*tail,*p1;
head=tail=NULL;
if((fp=fopen(”f1.txt","r”))==NULL){
printf("Fileopenerror!
\n");
exit(0);
}
ch=fgetc(fp);
if(ch==’1'){
while(!
feof(fp)){
p1=(structbook*)malloc(sizeof(structbook));
fscanf(fp,”%d%s%s%s%s%d%f\n”,&p1—〉num,p1->bname,p1—〉wname,p1—>press,p1—〉sort,&p1—〉time,&p1—〉price);
if(head==NULL)
head=p1;
else
tail—〉next=p1;
tail=p1;
}
tail—〉next=NULL;
fclose(fp);
returnhead;
}
else
returnNULL;
}
//将整个链表的信息输出
voidprint_book(structbook*head)
{
structbook*ptr;
if(head==NULL){
printf(”\n没有信息!
\n”);
return;
}
printf("图书信息列表如下\n”);
printf(”============================================================================\n");
printf(”编号图书名作者名出版社类别出版时间价格\n");
for(ptr=head;ptr;ptr=ptr—>next)
printf("%3d%—12s%—8s%—14s%-2s%-4d%。
2f\n”,
ptr—>num,ptr->bname,ptr—>wname,ptr—〉press,ptr—〉sort,ptr—〉time,ptr—〉price);
printf(”============================================================================\n");
}
//删除图书信息
voiddeletebook(structbook*head)
{
inta;
charb,ch='1';
structbook*p1,*p2;
FILE*fp;
printf("请输入要删除的图书编号:
");
scanf(”%d”,&a);
p1=head;
if(p1-〉num==a&&p1-〉next==NULL){//对于文件中只有一组数据
printf(”是否清空文件!
(y/n)\n”);
getchar();
scanf(”%c”,&b);
getchar();
switch(b){
case’n’:
break;
case’y':
if((fp=fopen(”f1。
txt","w"))==NULL){
printf(”Fileopenerror!
\n");
exit(0);
}
fclose(fp);
printf("文件已清空!
\n");
}
}
else{
while(p1-〉num!
=a&&p1—>next!
=NULL){
p2=p1;
p1=p1—>next;
}
if(p1—>next==NULL){
if(p1—〉num==a){
p2->next=NULL;
printf("是否确定从文件中彻底删除该图书?
(y/n)\n");
getchar(