首页  >  六六互联  >  设计与实现图书超市收银系统中售书历史清单数据的统计与分析

设计与实现图书超市收银系统中售书历史清单数据的统计与分析

作者:zhushican  丨  时间:2022年09月04日  丨  分类:六六互联

设计与实现图书超市收银系统售书历史清单数据的统计与分析,查看售书历史记录时能进行信息统计与汇总,并且能以曲线图的形式呈现售书历史信息

设计与实现图书超市收银系统中售书历史清单数据的统计与分析

实现步骤:

(1)  在查看售书历史记录时,按日期统计销售量,记录在num数组中,days用于保存售书的时间。

system("cls");

        printf("售书历史记录\n\n");

        FILE *fp;

        //daysnum分别是用来记录天数和当天的销售量的

        //day是用来记录当前加载到第几天了

        //today是用来记录现在处理的天数(用于比较之前的天数,因为如果现在处理的天数与上一天一致,那么我们的day是不需要++的)

        int num[9]={0},day=0;

        char days[9][6]={"00/00","00/00","00/00","00/00","00/00","00/00","00/00","00/00","00/00"},today[6]="00/00";

        fp=fopen("data.txt","a+");

        for(int k=0;;k++){

            char str[100];

            fscanf(fp,"%s",str);

            if(feof(fp)){

            //这里的k用来记入是第几次读取数据,因为我们要判断如果第一次读入就为空就要退出

                if(k){

                    fclose(fp);

                    break;

                }else{

                    printf("没有售书历史记录,赶快去购买几本图书吧O(_)O~\n\n");

                    fclose(fp);

                    break;

                }

            }          

            printf("%s\n",str);//日期是在这里获取

            for(intci=0,cj=15;cj<20;ci++,cj++){

                today[ci]=str[cj];//我们先让today保存现在的日期

            }

            //这里比较上一天与今天是否相同

            if(strcmp(days[day],today)){

                //如果不相同但是上次天数是默认值那么我们则覆盖

                if(!strcmp(days[day],"00/00")){

                    strcpy(days[day],today);

                }else{

            //如果不相同并且上次天数不是默认值那么我们将day++表示这是一个全新的天数

                    day++;

        //因为我们统计的是近9天的日销售量,所以当超过9天的时候我们需要替换掉前面的天数

                    if(day>8){

        //这个方法的时间效率低,但是因为我们只有9次循环所以这样的代码影响并不大

                        for(intzi=0;zi<8;zi++){

                            num[zi]=num[zi+1];

                            strcpy(days[zi],days[zi+1]);

                        }

                        day--;

                        num[day]=0;

                    }

                    strcpy(days[day],today);

                }

            }

            fscanf(fp,"%s",str);

            printf("%s\n",str);

            for(inti=1;fscanf(fp,"%s",str);i++){

           if(strcmp(str,"---------------------------------------------")){

                    printf("%s",str);

                    //这里我们要获取数量,以便计算日销售量

                    if(i%6==0&&strcmp(str,"数量")){

                        int t=0;

                        for(int zi=0;str[zi]!='\0';zi++){

                            t=t*10+str[zi]-48;

                        }

                        num[day]+=t;

                    }

                }

                else

                    break;

                if(i==6){

                    printf("\n");

                    i=0;

                }else

                    printf("\t");

            }

            printf("%s\n",str);

            fscanf(fp,"%s",str);

            printf("%s\n\n",str);

        }

        OutTable(num,days);

        system("pause");

        fclose(fp);

        break;


2)根据售书日期与每天的售书量参数,绘制出图书销售历史的曲线图。

void OutTable(int num[9],char days[9][6])

{

    initgraph(640, 480); // 初始化640x480的绘图屏幕

    setcolor(RED);

    line(100,0,100,480);

    line(0,380,640,380);

    line(0,480,100,380);

    setcolor(LIGHTGRAY);

    outtextxy(5,400,"销售量");

    outtextxy(50,450,"日期");

    int i,k;

    for(i =350,k=1;i>0;i-=30,k++){

        char a[3];

        a[0]=k/2+48;

        if(k%2==0){

            a[1]='0';

        }

else{

            a[1]='5';

        }

        a[2]='\0';

        outtextxy(50,i-8,a);

        line(100,i,640,i);

    }

    int stax=100,stay=380;

    for(i =130,k=0;i<640;i+=60,k++){

        outtextxy(i-10,430,days[k]);

        setcolor(LIGHTBLUE);

        line(stax,stay,i,380-num[k]*6);

        stax=i;

        stay=380-num[k]*6;

        circle(stax,stay,3);       

        setcolor(LIGHTGRAY);

    }

    getch();    // 按任意键

closegraph();    // 关闭绘图屏幕

}


运行效果如图9-10所示:

设计与实现图书超市收银系统中售书历史清单数据的统计与分析

9-10 图书销售历史曲线图


  评论