程序设计大作业代码及说明书图书销售管理系统.docx

上传人:b****1 文档编号:12476143 上传时间:2023-04-19 格式:DOCX 页数:41 大小:39.80KB
下载 相关 举报
程序设计大作业代码及说明书图书销售管理系统.docx_第1页
第1页 / 共41页
程序设计大作业代码及说明书图书销售管理系统.docx_第2页
第2页 / 共41页
程序设计大作业代码及说明书图书销售管理系统.docx_第3页
第3页 / 共41页
程序设计大作业代码及说明书图书销售管理系统.docx_第4页
第4页 / 共41页
程序设计大作业代码及说明书图书销售管理系统.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

程序设计大作业代码及说明书图书销售管理系统.docx

《程序设计大作业代码及说明书图书销售管理系统.docx》由会员分享,可在线阅读,更多相关《程序设计大作业代码及说明书图书销售管理系统.docx(41页珍藏版)》请在冰豆网上搜索。

程序设计大作业代码及说明书图书销售管理系统.docx

程序设计大作业代码及说明书图书销售管理系统

 

程序设计说明书

 

(图书销售管理系统)

 

图书销售系统:

程序代码

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

structbook

{

charISBN[50];//ISBN号

charname[50];//图书名称

floatprice;//价格

intstore0;//最初书店中的库存

intstore;//当前存货量

intsale;//销售量

chardiscount;//是否促销

structbook*next;//单链表中指向下一结构体首地址的指针

};

intn;//图书数量,需要在录入时从文件第一行读取

staticstructbook*bklist,bk[100];//图书单链表的首地址,和图书数组

intjudge(chara[])//要考虑到输入非数字的的影响,若输入的是正确的非负整数则返回该数,否则返回-1。

在main函数中,将输入内容转化为字符串

{

inti,b,trns;

if(a[0]=='0'&&a[1]!

='\0')

{

printf("请输入正整数或0。

");

return-1;

}//1:

排出输入内容中第一个字符为'0',之后还有别的内容的情况

for(i=0;a[i]!

='\0';i++)

{

b=a[i];

if((b<48)||(b>57))

{

printf("请输入正整数或0。

\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)//用于显示图书信息表格的表头

{

printf("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

{

tempnode=(structbook*)malloc(sizeof(structbook));

if(tempnode==NULL)

{printf("error1");exit

(1);}

tempnode->next=NULL;

fscanf(p,"%s%f%d%d%c",tempnode->ISBN,&(tempnode->price),&(tempnode->store0),&(tempnode->store),&(tempnode->discount));

fgets(tempnode->name,30,p);

tempnode->sale=tempnode->store0-tempnode->store;

strcpy(bk[i].ISBN,tempnode->ISBN);strcpy(bk[i].name,tempnode->name);

bk[i].price=tempnode->price;

bk[i].store0=tempnode->store0;bk[i].store=tempnode->store;

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->next=NULL;

free(ptr);//释放结构体

}

}

intsearch(char*l)

{

structbook*booksearch;

for(booksearch=bklist->next;booksearch!

=NULL;booksearch=booksearch->next)

{

if(strcmp(l,booksearch->ISBN)==0)

{

column();

show(booksearch);

booksearch=NULL;

return0;

}

}

printf("抱歉,没有找到相应的图书。

\n\n");

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;i

{

lengthi=strlen(bk[i].name);

for(j=0;j+length

{

for(k=0;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("抱歉,没有找到相应的图书。

\n\n");

}//关键词查找:

查找结果为书名中包含查找内容(作为整体)的相应书籍的全部内容

voidbubblesort(void)

{

inti;

structbook*a,*b,*c;

ordershow("销量由高到低排序");

for(i=0;i

for(a=bklist;a->next->next!

=NULL;a=a->next)

{

b=a->next;c=b->next->next;

if(b->salenext->sale)

{

a->next=b->next;

a->next->next=b;

b->next=c;

}

}

column();

for(c=bklist->next;c!

=NULL;c=c->next)

{

show(c);

}

c=NULL;b=NULL;a=NULL;

}//用单链表进行冒泡排序,打印出按照销量由高到低的排行榜

voidselectsort(structbooka[])

{

inti,j,min;

structbook*pb[50],*tempb;

ordershow("价格由低到高排行");

for(i=0;i

pb[i]=&a[i];

for(i=0;i

{

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();

for(i=0;i

show(pb[i]);

tempb=NULL;

for(i=0;i<49;i++)

pb[i]=NULL;

}//对图书数组进行选择排序,打印出图书价格由低到高的排行榜

voidinsertsort(structbooka[])

{

inti,j;

structbook*tempc,*pc[50];

ordershow("库存由低到高排行");

for(i=0;i

pc[i]=&a[i];

for(i=1;i

{

tempc=pc[i];

for(j=i-1;(j>=0)&&(tempc->storestore);j--)

pc[j+1]=pc[j];

pc[j+1]=tempc;

}

column();

for(i=0;i

show(pc[i]);

tempc=NULL;

for(i=0;i<49;i++)

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的情况,首先以可读方式打开

{

printf("文件打开失败!

\n");return;

}//判断文件是否打开成功

bklist=create(p);//创建了一个单链表,对磁盘文件进行存储

rewind(p);//文件指针返回到文件开头,便于之后的操作

///////////////////////////////初始选择模式/////////////////////////////////////////

while

(1)

{

printf("\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");break;

}//程序出口

if((op!

=1)&&(op!

=2)&&(op!

=3)&&(op!

=4)&&(op!

=0))//输入整数要为0,1,2,3,4中的一个

{

printf("输入操作有误,请输入0-4的某一个数字,以回车键结束\n\n");

continue;

}//用于处理用户输入中可能出现的错误,这一部分可以实现的是:

当用户只有输入0,1,2,3,4中的一个数字再回车或者直接回车时,才可以跳出循环

//////////////////////////////////图书查询/////////////////////////////////////////////////

while(op==1)

{

ordershow("图书查询");

printf("请输入图书的ISBN号(若查询所有图书信息请按0,若使用关键词查找请按1)\n输入完成后以回车键结束。

\n");

fflush(stdin);gets(ISBN0);//进行图书查询的操作

if(strcmp(ISBN0,"0")==0)

{

ordershow("所有图书信息");

column();

for(i=0;i

show(&bk[i]);

}//输出全部图书信息

elseif(strcmp(ISBN0,"1")==0)

{

ordershow("关键词查询");

printf("请输入关键词:

(直接按回车键可查询所有图书)\n");

fflush(stdin);gets(str);

keyword(str);//进行关键词查询

}//输入'0'或'1'时,程序认为是进行全部图书查询或关键词查询

else

{

ordershow("ISBN查找");

search(ISBN0);//ISBN查询

}

while

(1)

{

printf("继续查询请按1;结束查询请按0或者直接按回车键。

输入数字后以回车键结束。

\n");

fflush(stdin);gets(str);

operat=judge(str);

if(((operat-1)==0)||(operat==0))break;

printf("输入内容有误\n\n");

}//判断输入是否正确,正确输入后才可以跳出循环。

if(operat==1)

{

operat=0;continue;//继续查询

}

if(operat==0)break;//退出查询

}

///////////////////////////////////排行查询/////////////////////////////////

while(op==2)

{

ordershow("排行查询");

printf("按销量由高到低排序请按1;按价格由低到高排序请按2;按库存量由低到高排序请按3;\n\n结束排行查询请按0或者直接按回车键;输入数字后以回车键结束。

\n\n");

fflush(stdin);gets(str);

operat=judge(str);

if(operat==-1)continue;

if((operat!

=1)&&(operat!

=2)&&(operat!

=3)&&(operat!

=0))

{

printf("输入操作有误,请输入0-3的某一个整数,输入数字后以回车键结束。

\n\n");

continue;

}//输入错误提醒

if(operat==0)break;

if(operat==1)

{

bubblesort();//冒泡排序

}

else

{

oper[0]=selectsort;

oper[1]=insertsort;//利用指向函数的指针控制

oper[operat-2](bk);

}

while

(1)

{

printf("继续排行查询请按1;结束排行查询请按0或者直接按回车键。

输入数字后以回车键结束\n");

fflush(stdin);gets(str);

operat=judge(str);

if(operat==-1)continue;

if(((operat-1)==0)||(operat==0))break;

printf("输入内容有误,请输入0-1的某一个整数,输入数字后以回车键结束。

\n\n");

}//判断输入是否正确,正确输入后才可以跳出此循环。

if(operat==1)continue;//继续查询排行榜

if(operat==0)break;//结束查询排行榜

}

////////////////////////////////购买图书//////////////////////////////////////

while(op==3)

{

ordershow("购买图书");

printf("请输入您需要购买图书的ISBN号,以回车键结束;结束购买请输入0,以回车结束。

\n");

fflush(stdin);gets(buy);

if(strcmp(buy,"0")==0)break;

for(i=0;i

{

if(strcmp(bk[i].ISBN,buy)==0)break;

}//判断判断存书的ISBN码中是否与有输入的ISBN码相同的

if(i==n)

{

printf("您所查找的图书不存在,请重新输入\n\n");continue;

}//没有则i=n,重新输入

if(i

{

column();

show(&bk[i]);//有该图书则将该图书的信息打印在屏幕上

while

(1)

{

printf("继续购买请输入1,返回上一界面请输入0或者直接按回车键,以回车键结束\n");

fflush(stdin);gets(str);

operat=judge(str);

if(operat==-1)continue;

if(operat!

=1&&operat!

=0)

{

printf("请输入0-1的数字,以回车键结束\n\n");

continue;//输入错误内容的提示

}

elsebreak;

}

if(operat==0)continue;//返回购买图书的ISBN输入界面

}

while

(1)

{

if(bk[i].store==0)

{

printf("图书已售空,请购买其他排行靠前的图书\n\n");break;

}//图书售空提示

if(bk[i].store<4)//图书余量较少的提示

printf("此图书库存不超过3本,请尽快购买\n\n");

printf("请输入您需要购买的数量(请输入正整数,若不购买输入0或者直接按回车键)\n");

fflush(stdin);gets(str);

booknum=judge(str);

if(booknum==-1)continue;//防止输入了字母或其他符号被强制转化为整型数而引发的错误

if(bk[i].store

{

printf("此图书库存不足,图书库存%d本\n\n请重新输入购买数量\n",bk[i].store);

continue;//图书库存不足的提示

}

bk[i].sale+=booknum;

bk[i].store-=booknum;//对数组中数据的更改

for(bookp=bklist->next;bookp!

=NULL;bookp=bookp->next)

{

if(strcmp(buy,bookp->ISBN)==0)

{

bookp->sale+=booknum;

bookp->store-=booknum;

}

}//对单链表中图书数据的更改

printf("已完成操作!

\n\n");break;

}

}

//////////////////////////退还图书//////////////////////////////////////////////////

while(op==4)

{

ordershow("退还图书");

printf("请输入您需要退还图书的ISBN号,以回车键结束;结束退还请输入0,以回车结束。

\n");

fflush(stdin);gets(back);

if(strcmp(back,"0")==0)break;

for(i=0;i

{

if(strcmp(bk[i].ISBN,back)==0)break;

}

if(i==n)

{

printf("您所退还的图书不存在,请重新输入\n\n");continue;

}

if(i

{

show(&bk[i]);

while

(1)

{

printf("是否需要重新查询?

继续退

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1