#C语言图书系统代码.docx
- 文档编号:17326186
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:45
- 大小:20.65KB
#C语言图书系统代码.docx
《#C语言图书系统代码.docx》由会员分享,可在线阅读,更多相关《#C语言图书系统代码.docx(45页珍藏版)》请在冰点文库上搜索。
#C语言图书系统代码
#include
#include
#include
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=1234。
chara,d,b[10],b1[10]="yjk"。
structbook*head=NULL。
while(y>{
system("cls">。
printf("\n\n\n\n\n\n\n">。
printf("**********欢迎光临**********\n\n">。
printf("**********************图书信息管理系统************************\n\n\n">。
printf("\n\n">。
printf("============1-用户登录===========\n">。
printf("============0-退出系统===========\n">。
printf("请输入您的选择:
">。
scanf("%d",&n>。
printf("\n">。
getchar(>。
switch(n>{
case0:
y=0。
break。
case1:
printf("请输入您的用户名:
">。
gets(b>。
printf("\n">。
printf("请输入您的密码:
">。
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">。
printf("------------------\n">。
printf("*图书信息管理系统*\n">。
printf("------------------\n\n">。
printf("**********************************************\n\n">。
printf("**********************************************\n\n">。
printf("||1-添加图书2-删除图书||\n\n">。
printf("||3-图书列表4-图书排序||\n\n">。
printf("||5-查询图书6-修改图书||\n\n">。
printf("||7-录入数据0-退出系统||\n\n">。
printf("**********************************************\n\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'n':
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("%d%s%s%s%s%d%.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(>。
scanf("%c",&b>。
switch(b>{
case'n':
break。
case'y':
fprint(head>。
printf("删除成功!
\n">。
getchar(>。
break。
}
}
else{
printf("没有找到要删除的数据!
\n">。
getchar(>。
}
}
elseif(p1==head>{
head=p1->next。
printf("是否确定从文件中彻底删除该图书?
(y/n>\n">。
getchar(>。
scanf("%c",&b>。
switch(b>{
case'n':
break。
case'y':
fprint(head>。
printf("删除成功!
\n">。
getchar(>。
break。
}
}
else{
p2->next=p1->next。
printf("是否确定从文件中彻底删除该图书?
(y/n>\n">。
getchar(>。
scanf("%c",&b>。
switch(b>{
case'n':
break。
case'y':
fprint(head>。
printf("删除成功!
\n">。
getchar(>。
break。
}
}
}
}
//图书查询
voidchaxun(structbook*head>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 图书 系统 代码