您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 房地产 > 程序设计大作业代码及说明书-图书销售管理系统
程序设计说明书(图书销售管理系统)图书销售系统:程序代码#includestdio.h#includestdlib.h#includestring.hstructbook{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((b48)||(b57)){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;in;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;in;i++){lengthi=strlen(bk[i].name);for(j=0;j+lengthlengthi;j++){for(k=0;klength;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;in;i++)for(a=bklist;a-next-next!=NULL;a=a-next){b=a-next;c=b-next-next;if(b-saleb-next-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;in;i++)pb[i]=&a[i];for(i=0;in;i++){min=i;for(j=i;jn;j++){if(pb[min]-pricepb[j]-price)min=j;}tempb=pb[i];pb[i]=pb[min];pb[min]=tempb;}column();for(i=0;in;i++)show(pb[i]);tempb=NULL;for(i=0;i49;i++)pb[i]=NULL;}//对图书数组进行选择排序,打印出图书价格由低到高的排行榜voidinsertsort(structbooka[]){inti,j;structbook*tempc,*pc[50];ordershow(库存由低到高排行);for(i=0;in;i++)pc[i]=&a[i];for(i=1;in;i++){tempc=pc[i];for(j=i-1;(j=0)&&(tempc-storepc[j]-store);j--)pc[j+1]=pc[j];pc[j+1]=tempc;}column();for(i=0;in;i++)show(pc[i]);tempc=NULL;for(i=0;i49;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;in;i++)show(&bk[i]);}//输出全部图书信息elseif(strcmp(ISBN0,1)==0){ordershow(关键词查询);printf(请输入关键词:(直接按回车键可查询所有图书)\n);fflu
本文标题:程序设计大作业代码及说明书-图书销售管理系统
链接地址:https://www.777doc.com/doc-2150941 .html