程序设计大作业代码及说明书图书销售管理系统Word文件下载.docx
- 文档编号:17399532
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:30
- 大小:39.77KB
程序设计大作业代码及说明书图书销售管理系统Word文件下载.docx
《程序设计大作业代码及说明书图书销售管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《程序设计大作业代码及说明书图书销售管理系统Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。
排出输入内容中第一个字符为'
,之后还有别的内容的情况
for(i=0;
a[i]!
;
i++)
b=a[i];
if((b<
48)||(b>
57))
{
printf("
\n\n"
return-1;
}//2:
若含数字外的字符,则返回-1,说明用户输入有误
}
trns=atoi(a);
//排除了1、2的情况后,将字符串转化为整型数,将该整型数返回
returntrns;
}
voidshow(structbook*k)//用于显示图书的相关信息
{
fprintf(stdout,"
%-25s%-10.2f%-5d%-10d%-5c%-30s\n\n"
k->
ISBN,k->
price,k->
store,k->
sale,k->
discount,k->
name);
voidordershow(constcharorder[])//用于提示用户当前所在的命令操作界面
printf("
\n\n---------------------------%s--------------------------------\n\n\n"
order);
voidcolumn(void)//用于显示图书信息表格的表头
ISBN号价格库存销售量是否促销书名\n"
structbook*create(FILE*p)
structbook*mylist,*tempnode,*cursor;
inti;
mylist=(structbook*)malloc(sizeof(structbook));
if(mylist==NULL)
{printf("
error1"
exit
(1);
mylist->
next=NULL;
cursor=mylist;
fscanf(p,"
%d"
&
n);
for(i=0;
i<
n;
tempnode=(structbook*)malloc(sizeof(structbook));
if(tempnode==NULL)
tempnode->
fscanf(p,"
%s%f%d%d%c"
tempnode->
ISBN,&
(tempnode->
price),&
store0),&
store),&
discount));
fgets(tempnode->
name,30,p);
sale=tempnode->
store0-tempnode->
store;
strcpy(bk[i].ISBN,tempnode->
ISBN);
strcpy(bk[i].name,tempnode->
bk[i].price=tempnode->
price;
bk[i].store0=tempnode->
store0;
bk[i].store=tempnode->
bk[i].sale=tempnode->
sale;
bk[i].discount=tempnode->
discount;
//内容录入数组,数组是全局的,无需返回
cursor->
next=tempnode;
cursor=tempnode;
}//创建单链表,对数据进行录入,同时录入数组
cursor=NULL;
tempnode=NULL;
returnmylist;
//返回单链表首地址
voidfreellist(structbook*head)
structbook*ptr;
while(head!
=NULL)//遍历链表
ptr=head;
head=head->
next;
//指向下一节点
ptr->
free(ptr);
//释放结构体
intsearch(char*l)
structbook*booksearch;
for(booksearch=bklist->
booksearch!
=NULL;
booksearch=booksearch->
next)
if(strcmp(l,booksearch->
ISBN)==0)
column();
show(booksearch);
booksearch=NULL;
return0;
}
抱歉,没有找到相应的图书。
booksearch=NULL;
return1;
}//利用单链表进行ISBN查找
voidkeyword(chara[])
inti,j,k;
intlength,lengthi,flag=0,flag1=0,temp,temp0;
length=strlen(a);
//关键词的长度
flag=0;
flag1=0;
column();
for(i=0;
{
lengthi=strlen(bk[i].name);
for(j=0;
j+length<
lengthi;
j++)
{
for(k=0;
k<
length;
k++)
{
temp=a[k];
temp0=bk[i].name[j+k];
flag+=(temp0-temp)*(temp0-temp);
}
if(flag==0)
{
flag1++;
show(&
bk[i]);
break;
elseflag=0;
}
}
if(flag1==0)printf("
}//关键词查找:
查找结果为书名中包含查找内容(作为整体)的相应书籍的全部内容
voidbubblesort(void)
inti;
structbook*a,*b,*c;
ordershow("
销量由高到低排序"
for(a=bklist;
a->
next->
next!
a=a->
b=a->
c=b->
if(b->
sale<
b->
sale)
a->
next=b->
a->
next=b;
b->
next=c;
}
for(c=bklist->
c!
c=c->
show(c);
c=NULL;
b=NULL;
a=NULL;
}//用单链表进行冒泡排序,打印出按照销量由高到低的排行榜
voidselectsort(structbooka[])
inti,j,min;
structbook*pb[50],*tempb;
ordershow("
价格由低到高排行"
for(i=0;
pb[i]=&
a[i];
for(i=0;
min=i;
for(j=i;
j<
if(pb[min]->
price>
pb[j]->
price)
min=j;
tempb=pb[i];
pb[i]=pb[min];
pb[min]=tempb;
column();
show(pb[i]);
tempb=NULL;
49;
pb[i]=NULL;
}//对图书数组进行选择排序,打印出图书价格由低到高的排行榜
voidinsertsort(structbooka[])
inti,j;
structbook*tempc,*pc[50];
库存由低到高排行"
pc[i]=&
for(i=1;
tempc=pc[i];
for(j=i-1;
(j>
=0)&
(tempc->
store<
pc[j]->
store);
j--)
pc[j+1]=pc[j];
pc[j+1]=tempc;
show(pc[i]);
tempc=NULL;
pc[i]=NULL;
}//对图书数组进行选择排序,打印出图书库存由低到高的排行榜
voidmain()
FILE*p;
inti,op,operat,booknum;
charISBN0[100],buy[100],back[100],str[100];
//从左到右依次为:
查询图书的ISBN码,购买图书的ISBN码,退还图书的ISBN码,接受用户输入的操作命令的字符数组。
void(*oper[2])(structbooka[]);
//指向函数的指针,用于控制选择排序和插入排序函数
structbook*bookp;
//用于单链表操作的指针
if((p=fopen("
图书.txt"
"
r"
))==NULL)//打开文件,为了防止中途关闭程序导致文件截为0的情况,首先以可读方式打开
文件打开失败!
\n"
return;
}//判断文件是否打开成功
bklist=create(p);
//创建了一个单链表,对磁盘文件进行存储
rewind(p);
//文件指针返回到文件开头,便于之后的操作
///////////////////////////////初始选择模式/////////////////////////////////////////
while
(1)
\n你好,欢迎使用图书销售管理系统,请选择您想要进行的操作\n\n图书查询请按1;
图书排行请按2;
图书购买请按3;
退货请按4;
\n\n退出程序请按0或者直接按回车键。
\n\n输入数字后以回车键结束\n"
fflush(stdin);
gets(str);
op=judge(str);
if(op==-1)
continue;
//如果有非数字字符,继续循环,重新输入
if(op==0)//输入0或者直接按回车时,op=0,结束程序
printf("
\n\n感谢您的使用!
\n\n\n"
}//程序出口
if((op!
=1)&
(op!
=2)&
=3)&
=4)&
=0))//输入整数要为0,1,2,3,4中的一个
输入操作有误,请输入0-4的某一个数字,以回车键结束\n\n"
}//用于处理用户输入中可能出现的错误,这一部分可以实现的是:
当用户只有输入0,1,2,3,4中的一个数字再回车或者直接回车时,才可以跳出循环
//////////////////////////////////图书查询/////////////////////////////////////////////////
while(op==1)
ordershow("
图书查询"
请输入图书的ISBN号(若查询所有图书信息请按0,若使用关键词查找请按1)\n输入完成后以回车键结束。
fflush(stdin);
gets(ISBN0);
//进行图书查询的操作
if(strcmp(ISBN0,"
0"
)==0)
{
ordershow("
所有图书信息"
column();
for(i=0;
show(&
}//输出全部图书信息
elseif(strcmp(ISBN0,"
1"
ordershow("
关键词查询"
printf("
请输入关键词:
(直接按回车键可查询所有图书)\n"
fflush(stdin);
keyword(str);
//进行关键词查询
}//输入'
或'
1'
时,程序认为是进行全部图书查询或关键词查询
else
ordershow("
ISBN查找"
search(ISBN0);
//ISBN查询
}
while
(1)
继续查询请按1;
结束查询请按0或者直接按回车键。
输入数字后以回车键结束。
fflush(stdin);
operat=judge(str);
if(((operat-1)==0)||(operat==0))break;
输入内容有误\n\n"
}//判断输入是否正确,正确输入后才可以跳出循环。
if(operat==1)
{
operat=0;
continue;
//继续查询
if(operat==0)break;
//退出查询
///////////////////////////////////排行查询/////////////////////////////////
while(op==2)
排行查询"
按销量由高到低排序请按1;
按价格由低到高排序请按2;
按库存量由低到高排序请按3;
\n\n结束排行查询请按0或者直接按回车键;
operat=judge(str);
if(operat==-1)continue;
if((operat!
(operat!
=0))
输入操作有误,请输入0-3的某一个整数,输入数字后以回车键结束。
}//输入错误提醒
if(operat==0)break;
if(operat==1)
{
bubblesort();
//冒泡排序
}
else
oper[0]=selectsort;
oper[1]=insertsort;
//利用指向函数的指针控制
oper[operat-2](bk);
while
(1)
继续排行查询请按1;
结束排行查询请按0或者直接按回车键。
输入数字后以回车键结束\n"
operat=judge(str);
if(operat==-1)continue;
输入内容有误,请输入0-1的某一个整数,输入数字后以回车键结束。
}//判断输入是否正确,正确输入后才可以跳出此循环。
if(operat==1)continue;
//继续查询排行榜
//结束查询排行榜
////////////////////////////////购买图书//////////////////////////////////////
while(op==3)
购买图书"
printf("
请输入您需要购买图书的ISBN号,以回车键结束;
结束购买请输入0,以回车结束。
gets(buy);
if(strcmp(buy,"
)==0)break;
if(strcmp(bk[i].ISBN,buy)==0)break;
}//判断判断存书的ISBN码中是否与有输入的ISBN码相同的
if(i==n)
您所查找的图书不存在,请重新输入\n\n"
}//没有则i=n,重新输入
if(i<
n)
column();
show(&
//有该图书则将该图书的信息打印在屏幕上
while
(1)
printf("
继续购买请输入1,返回上一界面请输入0或者直接按回车键,以回车键结束\n"
fflush(stdin);
operat=judge(str);
if(operat==-1)continue;
if(operat!
=1&
operat!
=0)
printf("
请输入0-1的数字,以回车键结束\n\n"
continue;
//输入错误内容的提示
elsebreak;
}
if(operat==0)continue;
//返回购买图书的ISBN输入界面
}
if(bk[i].store==0)
图书已售空,请购买其他排行靠前的图书\n\n"
}//图书售空提示
if(bk[i].store<
4)//图书余量较少的提示
此图书库存不超过3本,请尽快购买\n\n"
printf("
请输入您需要购买的数量(请输入正整数,若不购买输入0或者直接按回车键)\n"
gets(str);
booknum=judge(str);
if(booknum==-1)continue;
//防止输入了字母或其他符号被强制转化为整型数而引发的错误
if(bk[i].store<
booknum)
此图书库存不足,图书库存%d本\n\n请重新输入购买数量\n"
bk[i].store);
continue;
//图书库存不足的提示
bk[i].sale+=booknum;
bk[i].store-=booknum;
//对数组中数据的更改
for(bookp=bklist->
bookp!
bookp=bookp->
if(strcmp(buy,bookp->
bookp->
sale+=booknum;
store-=booknum;
}
}//对单链表中图书数据的更改
已完成操作!
//////////////////////////退还图书//////////////////////////////////////////////////
while(op==4)
退还图书"
请输入您需要退还图书的ISBN号,以回车键结束;
结束退还请输入0,以回车结束。
gets(back);
if(strcmp(back,"
if(strcmp(bk[i].ISBN,back)==0)break;
您所退还的图书不存在,请重新输入\n\n"
是否需要重新查询?
继续退还请输入1,返回上一界面请输入0或者直接按回车键,以回车键结束\n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 作业 代码 说明书 图书 销售 管理 系统