C语言图书基础管理系统代码_第1页
C语言图书基础管理系统代码_第2页
C语言图书基础管理系统代码_第3页
C语言图书基础管理系统代码_第4页
C语言图书基础管理系统代码_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

structbook{

intnum;

charbnamel50J;

charwname[20];

charpress[50];

charsort[50];

inttime;

floatprice;

structbook*next;

);

structbook*creatbook();〃创立链表

structbook*addbook(struc1book*head);〃添加图书

intyanzheng(structbook*head,intm);〃验证新添加日勺图书编码与否已存在

voiddeletebook(structbook*head);〃删除图书

voidfprint(structbook*head);〃将链表写入文献

stnictbook*load();〃从文献中读取信息并建成链表

voidprint_book(structbook*head);〃将链表信息输出

voidchaxun(stnictbook*head);〃查询图书信息

voidnum_chaxun(structbook*head);〃按图书编号杳询图书

voidwnamcchaxun(structbook*hcad);〃按作者名查询图书

voidsort_chaxun(structbook*head);〃按类别查询图书

voidtimechaxun(stnictbook+hcad);〃按出版时间查询图书

voidbnamechaxun(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=l,c,c1=1234;

chara,d,b[10],bl[l0]="yjk";

structbook*head=NULL;

while(y){

system("cls");

printfIn\n\n\n\n\n\n\nH);

printfC1**********欢迎光顾**********\n\n");

printff**********************图书信息管理系统

printff\n\n");

printf(n========1-顾客登录一===\n");

printf(H======0.退出系统======3"):

printfC1请输入您的选择门;

scanfC'%d",&n);

printf(H\n");

getchar();

switch(n){

case0:

y=o;

break;

case1:

printfC,请输入您的顾客名:”);

gets(b);

printfW);

printf(H请输入您的密码O;

scana"%d",&c);

printfln\n");

if(strcmp(b,bl)!=0||c!=c1){

printf(u验证失败,请重新输入!W);

scanf("%c”,&d);

getchar();

system("cls");

)

else{

printf("验证通过!请按Enter键进入!\n”);

scanfT%c”,&d);

gctchar();

x=I;

while(x){

case0:

x=0;break;

case1:

head=load();

if(head=NULL){

printf("文献为空,请先录入数据八n");

getchar();

break;

}

else{

head=addbook(head);

printf("添加成功!\n”);

与否将新信息保存到文献?(y/n)\n)

scanfC,%c",&a);

getchar();

switch(a){

case'n':

break;

casey:

fprint(hcad);

printf("保存成功!\n");

getchar();

break;

break;

case2:

head=load();

if(head=NULL){

printf("文献为空,请先录入数据!W”);

getchar();

break;

}

else{

deletebook(head);

getchar();

break;

}

break;

case3:

head=load();

iflhead=NULL){

printf("文献为空,请先录入数据!、n");

getchar();

break;

}

clse{

printbook(head);

getchar();

break;

}

case4:

head=load();

if(head==NULL){

prinlf("文献为空,请先录入数据所)

getchar();

break;

)

else{

paixu(head);

getchar();

)

break;

case5:

head=load();

if(head=NULL){

printf("文献为空靖先录入数据

getchar();

break;

}

else(

chaxun(hcad);

getchar();

}

break;

case6:

head=load();

if(head=NULL){

printf("文献为空,请先录入数据!\n”);

getchar();

break;

}

else(

xiugai(head);

getchar();

break;

}

break;

case7:

prinlf("注意:输入图书编码为0时结束!\n”);

head=creatbook();

与否将输入日勺信息保存到文献以覆盖文献中已存在的信

息?(y/n)\n");

getchar();

scanfi(,,%c",&a);

gelchar();

switch(a){

case'n*:

break;

case'y':

fprint(head);

printff保存成功!\n");

getchar();

break;

}

break;

default:

printff您的输入有误,请重新输入!\n");

getchar();

break;

}

}

)

break;

default:

printf("您口勺输入有误!请重新输入!\n)

gctchar();

break;

〃录入数据并形成链表

structbook*creatbook()

(

structbook*head,*tail,*p;

intnum,time,n;

charbnamel50],wname[20J,pressl50],sort[50];

floatprice;

intsize=sizeofXstructbook);

head=tail=NULL;

printfC请输入图书编号:");

scanff%d”,&num);

primf("请输入图书名:”);

scanf("%s",bname);

getchar();

printf("请输入作者名:");

scan(V%s",wname);

getchar();

primf("请输入出版社

scanf(H%s",press);

getchar();

printf("请输入类别:"):

scanf^,,%s',,sort);

getchar();

print。(”请输入出版时间:");

scanf(H%d",&timc);

getchar();

printf("请输入价格

scanf(H%f,,&price);

getchar();

while(l){

p=(structbook*)malloc(size);

p->num=num;

strcpy(p->bnaine,bnaine);

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",&nuni);

n=yanzhcng(hcad,num);

if(n==0)

break;

else

printf("您输入日勺编号已存在,请重新输入!\n");

}while(l);

if|num==O)

break;

else

printf("请输入图书名:");

scanf(H%s,,,bname);

getchar();

printf("请输入作者名:");

scanR"%s",wname);

getchar();

printf("请输入出版社:");

scanR"%s”,press);

getchar();

printff请输入类别:");

scanf(H%s",sort);

getchar();

printf("请输入出版时间

scanf(n%d",&time);

getchar();

printf("请输入价格:");

scanfT%「',&price);

gctchar();

returnhead;

〃插入结点,并且插入后仍按一定顺序

structbook*addbook(structbook*head)

{

structbook*ptr,*pl,*p2,*p;

charbname[50],wname[20],press[50],sort[50];

intsizc=sizcof(structbook);

intnum,time,n=l;

floatprice;

do{

printff请输入图书编号门;

scanf("%d",&num);

n=yanzhcng(head,num);

if(n==0)

break;

else

printf("您输入的编号已存在,请重新输入!\n");

}while(l);

printff请输入图书名

scanf(,,%s,,,bname);

getchar();

printf("请输入作者名

scanf(M%sH,wname);

getchar();

printf("请输入出版社门;

scanf("%s",press);

getcharO;

printf("请输入类别:"):

scanf(n%s,,,sort);

getchar();

printR”请输入出版时间

scanf(H%d",&time);

getchar();

printf("请输入价格:"):

scan^H%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->nuni>p2->num)&&(p2->next!=NULL)){

pl=p2;

p2=p2->next;

}

if(ptr->num<=p2->num){

iRhead==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=hcad;

while(p!=NULL){

ifi(p->num=m)

break;

p=p->next;

}

iRp=NULL)

return0;

else

return1;

)

〃将新链表写入文献中

voidfprint(structbook*head)

{

FILE*fp;

charch=T;

structbook*pl;

if<(fp-fbpen("fl.txt,,,,,w,'))—NULL)(

printf(,'Fileopenerror!\n");

exit(O);

)

fputc(ch,fp);

fbr(p1-head;pl;pl-pl->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,*pl;

head=tail=NULL;

ia(fp=fbpen("f1.txt","rH))==NULL){

printff'Fileopenerror!\n");

exit(O);

)

ch=fgetc(fp);

if(ch==T){

while(!feof(fp)){

pl-(structbook*)malloc(sizeof(stiuctbook)),

fscanf(fp,,,%d%s%s%s%s%d%f\n",&pl->num,pI->bnaine,p1->\vname,p1->press,pI->sort,&p1->

time,&pl->price);

iRhead—NULL)

head-pl;

else

tail->next=pl;

tail=pl;

tail->next=NULL;

fclose(fp);

returnhead;

}

else

returnNULL;

}

〃将整个链表H勺信息输出

voidprintbook(structbook*head)

(

structbook*ptr;

iRhead=NULL){

printf(H\n没有信息!\n");

return;

)

printf(H图书信息列表如下\n”);

printf(H

==========================\n,');

printfC1编号图书名作者名出版社类别版时间价格

\n");

fbr(ptr=hcad;ptr;ptr=ptr->next)

prints"%d%s%s%s%s

%d%.2f\n,,,ptr->num,ptr->bname,ptr->wnamc,ptr->press,ptr->sort,ptr->time,ptr->price);

printR”

==========================\n'»);

〃删除图书信息

voiddeletebook(structbook*head)

|

inta;

charb,ch=T;

structbook*pl,*p2;

FILE*fp;

printfC请输入要删除的图书编号

scanfT%d”,&a);

pl=head;

iflpI->num==a&&p1->next=NULL){〃对于文献中只有一组数据

printf("与否清空文献!(y/n)\n");

getchar();

scanf(,,%c,,,&b);

getchar();

switch(b){

case'n':

break;

casey:

iR(fp=fbpenC'fi.txt',,,,w"))=NULL){

printf("Fileopenerror!\nH);

exit(O);

}

fclose(fp);

printf("文献己清空!\n”);

else(

while(p1->num!=a&&pl->next!=NULL){

p2=pl;

pl=pl->next;

}

iRp1->next=NULL){

if(pl->num=a){

p2->next=NULL;

printf("与否拟定从文献中彻底删除该图书?(y/n)\n)

getchar();

scanf(H%cH,&b);

switch(b){

case'n':

break;

casey:

fprint(head);

prinlff删除成功!\n”);

gctchar();

break;

else{

prints”没有找到要删除的I数据!\叫;

getchar();

}

)

elseiftpl==head){

head=pl->next;

printf("与否拟定从文献中彻底删除该图书?(y/n)\n");

getchar();

scanfXH%c",&b);

switch(b){

case'n':

break;

case'y':

fprint(head);

printr删除成功!\n”);

getchar();

break;

clse{

p2->next=pl->next;

printf("与否拟定从文献中彻底删除该图书?(y/n)\n");

getchar();

scanff%c”,&b);

switch(b){

case'n*:

break;

casey:

fprint(head);

printff删除成功!\n”);

getchar();

break;

}

}

〃图书查询

voidchaxun(structbook*head)

|

inia;

printf(H

printf(u**1-按图书编号查询2.按图书名查询**\n");

printf(u**3•按图书类别查询4-按作者名查询**\n");

printfT**5-按出版时间查询()-退出查询**\n");

printf(H

printf("请输入所选择li勺编号

scanf1"%d'\&a);

getchar();

switch(a){

case0:

break;

case1:

numchaxun(head);

break;

case2:

bnamechaxun(head);

break;

case3:

sortchaxun(head);

break;

case4:

wnamcchaxun(hcad);

break;

case5:

timechaxun(head);

break;

default:

printf("您的J输入有误!\n”);

break;

}

}

〃按编号查询图书信息

voidnumchaxun(stnictbook*head)

(

inta;

structbook*p;

printf("请选择您要查闻日勺图书编号:");

scanRH%d",&a);

getchar();

p=head;

while(p!=NULL){

ifi(p->nuin=a)

break;

p=p->next;

)

if(p=NULL){

printr没有找到该编号的图书!\n");

else(

printff'你所查询的图书信息如下\n”);

printfC'

=\nM);

printtV1**编号图书名作者名出版社类别出版时间

价格

printH'1*♦%d%s%s%s%s%d

%.2f**\n',,p->num,p->bname,p->vvname,p->press,p->sort,p->time,p->price);

printf(H

=\n");

)

)

〃按图书名查询图书信息

voidbnaine_chaxun(structbook*head)

|

chara[50];

intflag=0;

structbook*p;

printf("请选择您要查泡H勺图书名

gets(a);

p=hcad;

while(p!=NULL){

if(strcinp(p->bname,a)==O){

nag=l;

break;

p=p->next;

if(flag==O){

printf("没有找到该图书名的J图书!\n");

else(

printfC,你所查询的图书信息如下\n”);

printf(u

=\n");

printfC***编号图书名作者名出版社类别出版时间价格

**\n");

while(p!=NULL){

if(strcmp(p->bnaine,a)==O){

printR"**%d%s%s%s%s

%d%.2f**\n,',p->num,p->bname,p->\vname,p->press,p->sort,p->time,p->price);

)

p=p->next;

)

printH'1

、n”);

〃按作者名查询图书信息

voidwname_chaxun(structbook*head)

{

chara(5OJ;

intflag=0;

structbook*p;

printf("请选择您要查询口勺图书作者名:");

gets(a);

p=head;

while(p!=NULL){

if(strcmp(p->wname,a)=O){

flag=l;

break;

}

p=p->next;

}

if(flag=O){

printf("没有找到该图书名日勺图书!\n“);

}

clsc{

printfC,你所查询口勺图书信息如下5)

printfC

==\n");

printfC**编号图书名作者名出版社类别出版时间价格

while(p!=NULL){

if|strcmp(p->wname,a)=O){

printff'**%d%s%s%s%s

%d%.2f**\n,',p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);

flag=l;

}

p=p->next;

}

printf(H

=\nM);

}

}

〃按图书类别查询图书信息

voidsort_chaxun(structbook*head)

|

chara[50];

intflag=O;

structbook*p;

printf("请选择您要查泡日勺图书类别

gets(a);

p=head;

while(p!=NULL){

if(strcmp(p->sort,a)==0){

flag=l;

break;

}

p=p->next;

}

if{flag==O){

printf("没有找到该图书名的图书!\n”);

)

else(

printfC,你所查询的图书信息如下\n”);

printfC,

=\n");

printfC1**编号图书名作者名出版社类别出版时间价格

while(p!=NULL){

if(strcmp(p->sort,a)==0){

printff**%d%s%s%s%s

%d%.2f**\nu,p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);

flag=l;

p=p->next;

printfC,

=\n");

)

)

〃按图书出版时间查询图书信息

voidtime_chaxun(structbook*head)

(

inta,flag=0;

structbook*p;

printf("请选择您要查询W、J图书出版时间

scanf(H%d",&a);

getchar();

p=head;

while(p!=NULL){

if(p->time=a){

flag=l;

break;

}

p=p->ncxt;

if(flag=0){

printfC没有找到该图书名的图书!\n");

else(

printf(H你所查询的图书信息如下\n");

printfC,

=\n");

printfC***编号图书名作者名出版社类别出版时间价格

**\nH);

while(p!=NULL){

if(p->time=a){

printff'**%d%s%s%s%s

%d%.2f**\n,,,p->num,p->bname,p->\vname,p->press,p->sort,p->time,p->price);

flag=i;

}

p=p->next;

}

printf(H

〃修改图书信息

voidxiugai(structbook*hcad)

inta,b;

charc;

structbook*p;

print/请输入要修改的图书编号

scanf1"%d'\&a);

p=head;

while(p!=NULL){

if(p->num=a)

break;

p=p->next;

}

if(p=NULL){

printfC没有找到该编号的图书!");

getchar();

}

else{

printf(H

=\n");

printf(H**1-编号2-图书名3-作

者名*叭n)

printf("**4-出版社5-类别6-出

版时间

prinlff'**7-价格8-修改所有0-放

弃修改

printfC'

.----------——y-----------------=\n“);

printf("请选择你要修改U勺信息编号:");

scanff%d”,&b);

getchar();

switch(b){

case1:

printf(”请输入新编号

scanfT%d”,&p・>num);

printf("修改成功!");

getchar();

break;

case2:

printf("请输入新图书名:)

gets(p->bname);

printf("修改成功成)

break;

case3:

printf(”请输入新作者名:");

gets(p->wname);

printf("修改成功!\n”);

break;

case4:

printf(”请输入新出版社

gcts(p->prcss);

printff修改成功!\n)

break;

case5:

printf("请输入新类别:");

gets(p->sort);

prinlf("修改成功!\n)

break;

case6:

printf(”请输入新出版时间

scanfC%d”,&p・>time);

printf("修改成功!\n)

getchar();

break;

case7:

printf("请输入新价格:");

scanfT%r’,&p->price);

printf("修改成功!\n”);

getchar();

break;

case8:

printf("请输入新图书编号:

scanR"%d",&p->num);

printf("请输入新图书名:");

scann"%s",p->bname);

gctchar();

printf(”请输入新作者名:");

scanfV%s",p->wname);

getchar();

printf("请输入新出版社:");

scanf(H%s",p->press);

getchar();

printf(”请输入新类别:");

scanR"%s",p->sort);

getchar();

printf(”请输入新出版时间

scanf(H%(i",&p->time);

getchar();

printf("请输入新价格:");

scanfT%「',&p->price);

getchar();

printf("修改成功成)

getchar();

break;

case0:

break;

default:

printf("您的输入有误!\n");

break;

printf("与否将修改后日勺信息保存到文献中?(y/n)\n)

scanf("%cH,&c);

getchar();

switch(c){

case'n':

break;

casey:

fprint(head);

prinlf("保存成功!\n)

getchar();

break;

〃图书排序

voidpaixu(structbook*head)

|

inia;

printf(H

----------------------------

printf(H**1-按图书编号排序2.按出版时间排序

**\n");

printf(H**3.按图书价格排序4.按图书名排序

printf(H**5■按作者名排序0•取消排序操作

**\nH);

prints”

============================\n»'|.

printf("请输入您选择的编号:");

scanf(M%d",&a);

getchar();

switch(a){

case0:

break;

case1:

num_paixu(head);

break;

case2:

time_paixu(head);

break;

case3:

price_paixu(head'i;

break;

case4:

bname_paixu(head);

break;

case5:

wnamc_paixu(hcad);

break;

default:

prints您的输入有误!\n”);

break;

〃按图书编号排序

voidnum_paixu(structbook*head)

{

stiuctbook*a[1000],*p,*p1,*temp;

inti,k,index,n=0;

charb;

pl=head;

fbr(p=head;p;p=p->next)

n++;

for(i=0;i<n;i++){

a[i]-pl;

pl=pl->next;

}

for(k=0;k<n-l;k++){

index=k;

fbr(i-k+l;i<n;i++)(

if^a[i]->num<a[index]->nuin)

index=i;

}

temp=a[index];

a[index]=a[k];

a[k]=temp;

printf("排序成功!\n”);

printf("与否显示排序成果?(y/n)\n");

scanf("%s",&b);

getcharO;

switch(b){

case'n*:

break;

casey:

printf(H

\")•

printfC***编号图书名作者名出版社类别出版时间

价格**\nM);

for(i=0;i<n;i++){

prints"**%d%s%s%s%s

%d%.2f

**\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);

)

printf(H

============================\n');

break;

default:

prinlf("您的输入有误!\n)

break;

〃按出版时间排序

voidtime_paixu(structbook*head)

{

structbook*a[1000],*p,*p1,*temp;

inti,k,index,n=0;

charb;

pl=head;

fbr(p=head;p;p=p->next)

n++;

fbr(i=O;i<n;i++){

a[i]=pl;

pl=pl->next;

)

fbr(k=O;k<n-l;k++){

index=k;

fbr(i=k+l;i<n;i++){

if(a[i]->time<a[index]->time)

index=i;

)

temp=a[index];

a[index]=a[k];

a[k]=temp;

printf("排序成功!\n”);

printf("与否显示排序成果?(y/n)\n");

scanf("%s",&b);

getchar();

switch(b){

case'n':

break;

casey:

printf(H

=============================\n");

printfC***编号图书名作者名出版社类别出版时间

价格**\n");

for(i=0;i<n;i++){

prints"**%d%s%s%s%s

%d%.2f

**\n",a[i]->num,a[i]->bnarre,a[i]->wnanie,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);

}

printf(H

===========================\n');

break;

default:

prints您的输入有误!\n");

break;

〃按图书价格排序

voidprice_paixu(structbook*head)

(

structbook*a[l()OO],*p,*pl,*temp;

inti,k,index,n=0;

charb;

pl=head;

fbr(p=head;p;p=p->next)

n++;

fbr(i=O;i<n;i++){

a[i]=pl;

pl=pl->next;

)

fbr(k=O;k<n-l;k++){

index=k;

fbr(i=k+l;i<n;i++){

if(a[i]->price<a[index]->price)

index=i;

)

temp=a[index];

a[indcx]=a[k];

a[k]=temp;

)

print。("排序成功!\n");

printf("与否显示排序成果?(y/n)\n)

scanf("%s",&b);

getchar();

switch(b){

case'n':

break;

casey:

printf(H

============================\n»);

printfC***编号图书名作者名出版社类别出版时间

价格**\nH);

for(i=0;i<n;i++){

prints"**%d%s%s%s%s

%d%.2f

**\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);

)

printf(H

----------------------------------------------------------------------------------

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论