当前位置:文档之家› 商品销售管理系统设计(doc 41页)

商品销售管理系统设计(doc 41页)

问题描述:已知一公司有10种产品(产品编号,产品名称,产品价格,产品产地,库存数量(最开始为1000个)),设计一程序,完成以下功能:1)1)销售:从键盘输入顾客姓名,销售数量、销售日期,实现销售功能。

需要判断产品是否存在,销售数量是否小于库存数量,销售日期格式是否合法(格式为:YYYY-MM-DD,如2009-01-02))2)2)能根据产品编号查询产品的销售历史3)3)计算时间段内各个产品的销售总额4)4)能根据顾客姓名,查询购买历史5)5)能显示所有顾客的姓名提示:●●定义一个日期结构体保存日期,具体信息为:年、月、日●●判断存款日期和取款日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。

判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。

●●定义一个结构体数组保存10种产品信息,具体信息为:产品编号,产品名称,产品价格,产品产地,库存数量(最开始为1000个)●●定义一个链表,保存销售信息,具体为:顾客代码,销售数量、销售日期。

●●定义一个链表保存顾客信息,具体为:顾客代码,顾客姓名●●当输入销售信息时查询顾客链表,如果在链表中存在该姓名的顾客记录,则将其代码在该销售链表中插入一条记录,如果不存在,则在顾客链表中插入一条记录,#include "stdlib.h" /*标准库函数*/#include "string.h"/*字符串函数*/#include "ctype.h" /*字符操作函数*/#include "time.h" /*时钟函数*/#include "cstdlib"#include "conio.h"int x,k;/*定义全局变量用于保存当前商品种类*/struct product /*定义商品数据结构*/{int num;/*商品编号*/char name[20];/*商品名称*/float price;/*商品售价*/char place[10];/*商品名称*/int storage;/*商品库存*/}_product[10],product1[10];//定义主结构体数组和备用结构体数组struct data//定义日期结构体{int year,month,day;};struct sell /*定义销售数据结构*/{int cus;/*顾客代码*/int num;/*商品编号*/float sells;/*销售数量*/char data1[12];/*日期*/struct sell *next;}*head_s,*pp,*tail_s;//定义头指针操、作指针以及尾指针struct customer /*定义销售数据结构*/{int cus;/*顾客代码*/char name[10];/*顾客姓名*/struct customer *next;}*head_c,*qq,*tail_c;//定义头指针操、作指针以及尾指针void load();//读取文件函数void add();//添加销售信息函数int search_num();//根据商品编号查询商品的销售历史void cal();//计算时间段内各个商品的销售总额int search_name();//根据顾客姓名,查询购买历史void list_name();//显示所有顾客的姓名void main();//主函数int judge();//主体判断函数int judge_data(char*data1);//细节判断函数,用于判断日期是否合法void download_s();//写入销售信息(顾客代码,销售数量、销售日期)文件void download_c();//导出顾客购买记录void display();//显示现在的商品信息//主函数void main(){int choice;struct customer * head;//定义结构指针head=malloc(sizeof(struct customer));//申请动态存储空间head->next=NULL;do{printf("***********************欢迎使用商品销售管理系统!!!*******************\n\n");printf("1. 导入商品信息\n");printf("2. 显示商品信息\n");printf("3. 输入销售记录记录\n");printf("4. 按编号查寻商品销售历史\n");printf("5. 计算时间段内各个销售总额\n");printf("6. 按顾客姓名查找购买历史\n");printf("7. 显示顾客姓名\n");printf("8. 导出销售信息(顾客代码,销售数量、销售日期)文件\n");printf("9. 导出顾客信息文件\n");printf("0. 退出\n");printf("************************************* **********************************\n");printf("请选择不同功能输入0----9的数字\n 若输入其它值会提前退出\n");scanf("%d",&choice);system("cls");switch(choice){case1:load();system("cls");break;case2:display();break;case3:add();break;case4:search_num();break;case5:cal();break;case6:search_name();break;case7:list_name(head);break;case8:download_s();break;case9:download_c();break;case0:printf("\n\n\n\n");printf("*************谢谢使用************\n\n\n\n");break;}}while(choice>0&&choice<=9);}void display(){int code,i=0;pp=(struct sell *)malloc(sizeof(struct sell));//申请动态存储空间并将指针转变为结构类型qq=(struct customer *)malloc(sizeof(struct customer));//申请动态存储空间并将指针转变为结构类型pp->next=NULL;qq->next=NULL;system("cls");/*清屏*/printf("**************************商品信息**************************\n\n\n");printf(" 商品编号商品名称商品价格商品产地库存数量\n");while(i<10){//输出商品记录printf("%8d%12s %12.2f%10s%14d\n",_product[ i].num,_product[i].name,_product[i].price,_product[i].place,_product[i].sto rage);i++;}printf("\n\n查询完毕,请按任意键继续......");getch();system("cls");}void load(){//读取文件函数int i=0,n=0,a,b,j;FILE *fp;//指向文件的指针do{printf("请选择导入商品信息的方法\n1:通过键盘输入\n2:通过文件导入\n");scanf("%d",&a);if(a==2){if((fp=fopen("商品信息.txt","rb"))==NULL)//打开文件{printf("不能打开文件,请检查文件路径\n");//不能打开exit(0);//退出*/}printf("*****************88商品信息88*******************\n");printf("编号名称价格产地库存数量\n");while(!feof(fp)){//读入文件fscanf(fp,"%d%s%f%s%d",&_product[i].num,_prod uct[i].name,&_product[i].price,_product[i].place,&_product[i].storage );printf("%-10d%-10s %-10.2f%-12s%-12d\n",_prod uct[i].num,_product[i].name,_product[i].price,_product[i].place,_prod uct[i].storage);i++;}for(i=0;i<10;i++)product1[i]=_product[i];//对备用结构体数组赋值fclose(fp);//关闭文件printf("\t\t数据读入成功!按任意键继续......\n");}if(a==1){if((fp=fopen("商品信息1.txt","w"))==NULL)//打开文件{printf("不能打开文件,请检查文件路径\n");//不能打开exit(0);//退出*/}printf("请输入商品种数");scanf("%d",&b);printf("*************商品信息***************\n");printf("编号名称价格产地库存数量\n");for(j=1;j<=b;j++){scanf("%d%s%f%s%d",&_product[i].num,_product[i].name,&_ product[i].price,_product[i].place,&_product[i].storage);fprintf(fp,"%-6d%-6s%-6.2f%-6s%-6d\n",_product[i].num,_ product[i].name,_product[i].price,_product[i].place,_product[i].stora ge);}fclose(fp);//关闭文件printf("\t\t数据读入成功!按任意键继续......\n");}}while(a!=1&&a!=2);}//细节判断函数,用于判断日期是否合法int judge_data(char*data1){intn=1,m,year=(data1[0]-48)*1000+(data1[1]-48)*100+(data1[2]-48)*10+(dat a1[3]-48),month=(data1[5]-48)*10+(data1[6]-48),day=(dat a1[8]-48)*10+(data1[9]-48);m=strlen(data1);if(m!=10)n=0;if(data1[4]!='-'||data1[7]!='-')n=0;if(year>10000||year<1000||month>12||month<1||day>31||day< 1) n=0;if(((year%4==0&&year%100!=0)||(year%400==0))&&month==2)if(day>30) n=0;if(month==2&&day>=29) n=0;if(month==4||month==6||month==9||month==11)if(day>30) n=0;return n;}//判断函数int judge()//判断商品编号数量日期是否正确{int i,j=0,k,temp;for(i=0;i<10;i++)if(pp->num==_product[i].num){j++;x=k=i;temp=_product[k].storage;if((_product[k].storage-(int)pp-> sells)>=0)_product[k].storage-= (int)pp->sells;//判断计算剩余量break;}if(j==0)return3;//判断是否存在输入编号的商品else if(temp-(int)pp->sells<0)return2;//判断输入量是否大于剩余库存量elseif(pp->sells-(int)pp->sells>=1e-6)return4;//商品量elseif(judge_data(pp->data1)==0)return0;//判断日期else return1;//完全正确}//添加销售信息函数void add(){int code,i=0,n,m;pp=(struct sell *)malloc(sizeof(struct sell));//申请动态存储空间并将指针转变为结构类型qq=(struct customer *)malloc(sizeof(struct customer));//申请动态存储空间并将指针转变为结构类型srand(time(0));code=rand();pp->next=NULL;qq->next=NULL;system("cls");/*清屏*/printf("请输入销售记录\n\n\n");/*提示输入记录*/printf("顾客姓名商品编号销售数量销售日期\n");printf("-----------------------------------------------------------\n");scanf("%s%d%f%s",qq->name,&pp->num,&pp->sells,pp->data1);/*输入记录*/n=(int)pp->sells;if(n<=0){printf("商品数量有误!!!请从新输入");scanf("%f",&pp->sells);}while(1){m=judge();//判断商品编号数量日期是否正确if(m==1){// pp=(struct sell *)malloc(sizeof(struct sell));//申请动态存储空间并将指针转变为结构类型// qq=(struct customer *)malloc(sizeof(struct customer));pp->cus=qq->cus=code;//随机数if(head_s==NULL)head_s=pp;elsetail_s->next=pp;tail_s=pp;if(head_c==NULL) head_c=qq;else tail_c->next=qq;tail_c=qq;printf("\t\t销售信息输入成功!按任意键继续......\n");getch();system("cls");break;}else if(m==2){system("cls");printf("销售数量已大于库存数量,请重新输入:\n\n\n");printf("请输入销售数量\n\n\n");/*提示输入记录*/printf("销售数量 \n");scanf("%f",&pp->sells );/*输入记录*/continue;}else if(m==3){system("cls");printf("无此商品,请重新输入:\n\n\n");printf("请输入销售记录\n\n\n");/*提示输入记录*/printf(" 商品编号\n");scanf("%d",&pp->num);/*输入记录*/continue;}else if(m==4){system("cls");printf("商品数量输入错误,请重新输入商品数量:\n\n\n");printf("请输入销售记录\n\n\n");/*提示输入记录*/printf("销售数量:\n");scanf("%f",&pp->sells );/*输入记录*/continue;}else if(m==0){system("cls");printf("销售日期不合法,请重新输入销售日期:\n\n\n");/*提示输入记录*/printf("销售日期\n");scanf("%s",pp->data1) ;/*输入记录*/continue;}k++;}}//根据商品编号查询商品的销售历史search_num(){int i,num,k=0,flag=1,n=0;struct sell * ptr;system("cls");printf("请输入商品编号:\n");scanf("%d",&num);for(i=0;i<10;i++)if(num==_product[i].num){flag=0;break;}if(flag==1){ system("cls");printf("无此商品,请查实商品编号后按任意键准备重新输入!!!");getch();system("cls");return0;}for(ptr=head_s;ptr;ptr=ptr->next)if(num==ptr->num){if(k==0){printf("商品编号销售数量销售总额销售日期\n");printf("-----------------------------------------------------------\n");k++;}printf("%5d%20d%20.2f%15s\n",pt r->num,(int)ptr->sells,(int)ptr->sells*_pr oduct[i].price,ptr->data1);}if(k==0){printf("该商品记录为空!!!按任意键继续......");getch();system("cls");return0;}else{printf("\n\n查询完毕,请按任意键继续......");getch();system("cls");return0;}}//计算时间段内各个商品的销售总额void cal(){int i,n=0;struct sell s1,s2,*p=&s1,*q=&s2,*ptr;system("cls");printf("请输入开始日期:");scanf("%s",p->data1);system("cls");do{if(judge_data(pp->data1)!=1){ printf("输入日期不合法,请重新输入:");scanf("%s",p->data1);system("cls");n=1;}elsen=0;}while(n==1);printf("请输入结束日期:");scanf("%s",q->data1);system("cls");do{if(judge_data(q->data1)!=1){ printf("输入日期不合法,请重新输入:");scanf("%s",q->data1);system("cls");n=1;}elsen=0;}while(n==1);printf("销售记录如下:\t\t时间:%s至%s\n",p->data1,q->data1);printf("\n\n\t\t商品编号销售总额\n");printf("\t\t---------------------------\n\n");for(ptr=head_s;ptr;ptr=ptr->next){for(i=0;i<10;i++)if(product1[i].num==p tr->num)break;product1[i].storage-=(int)ptr->se lls;}for(i=0;i<10;i++)printf("\t\t%2d\t\t%.2f\n",product1[i].num,pr oduct1[i].price*(1000-product1[i].storage));printf("\n\n查询完毕,请按任意键继续......");getch();system("cls");}//根据顾客姓名,查询购买历史int search_name(){int i,k=1;char name[10];struct customer * ptr1;struct sell * ptr2;system("cls");printf("请输入顾客姓名:\n");scanf("%s",name);for(ptr1=head_c;ptr1;ptr1=ptr1->next){for(ptr2=head_s;ptr2;ptr2=ptr2->next)if(ptr1->cus==ptr2->cus)break;for(i=0;i <10;i++)if(ptr2->num==_product[i].num)break;if(strcmp(name,ptr1->name)==0){// if(k==0||k%8==0){printf("顾客姓名顾客代码商品编号购买数量购买总额购买日期\n");--------------------------------------------------------------------------------\n");}printf("%2s%15d%15d%10d%15.2f%1 5s\n",ptr1->name,ptr1->cus,ptr2->num,(int)ptr2->sells,((int)ptr2->sel ls)*product1[i].price,ptr2->data1);//k++;}k=0;}if(k==0){printf("不存在此顾客!!!按任意键继续......");system("c ls");return0;}else{printf("\n\n查询完毕,请按任意键继续......");getch();system("cls");return0;}}//显示所有顾客的姓名void list_name(){int n=1;struct customer * ptr;system("cls");if(head_c!=NULL)//判断链表是否为空{printf("顾客姓名如下:\n");//用来显示所有顾客的姓名for(ptr=head_c;ptr;ptr=ptr->next){ printf("\t\t%s\n",ptr->name);n++;}printf("\n\n顾客姓名查询完毕,请按任意键继续......");getch();system("cls");}else{printf("顾客链表为空!!!请按任意键继续......");getch();system("cls");}}void download_s()//写入销售信息(顾客代码,销售数量、销售日期)文件{int i=0;FILE *fp;struct customer *ptr1;struct sell *ptr2;system("cls");if((fp=fopen("销售信息文件.txt","w"))==NULL){ printf("销售信息文件无法生成!\n");exit(0);}if(qq!=NULL){fprintf(fp," 顾客代码销售数量购买日期\n");for(ptr1=head_c;ptr1;ptr1=ptr1->next){for(ptr2=head_s;ptr2;ptr2=ptr2->ne xt)if(ptr1->cus==ptr2->c us){for(i=0;i< 10;i++)if(ptr2->num==_product[i].num)break;break;}fprintf(f p,"%8d%10d %10s\n",ptr1->cus,(int)ptr2->sells,ptr2->da ta1);}fclose(fp);printf("文件保存完毕!“销售信息文件.txt”文件.\n");printf("按任意键继续......\n");getch();system("cls");}else{printf("顾客记录为空!!!按任意键继续......");getch();system("cls");}}void download_c()//导出顾客购买记录{int i=0;FILE *fp;struct customer *ptr1;struct sell *ptr2;system("cls");if((fp=fopen("顾客信息文件.txt","w"))==NULL){ printf("顾客信息文件无法生成!\n");exit(0);}if(qq!=NULL){fprintf(fp,"顾客姓名顾客代码\n");for(ptr1=head_c;ptr1;ptr1=ptr1->next){for(ptr2=head_s;ptr2;ptr2=ptr2->ne xt)if(ptr1->cus==ptr2->c us){for(i=0;i< 10;i++)if(ptr2->num==_product[i].num)break;break;}fprintf(f p,"%5s%10d\n",ptr1->name,ptr1->cus);}fclose(fp);printf("文件保存完毕!“顾客信息文件.txt”文件.\n");printf("按任意键继续......\n");getch();。

相关主题