设计与实现图书超市收银系统中售书历史清单数据的统计与分析
设计与实现图书超市收银系统中售书历史清单数据的统计与分析,查看售书历史记录时能进行信息统计与汇总,并且能以曲线图的形式呈现售书历史信息。
实现步骤:
(1) 在查看售书历史记录时,按日期统计销售量,记录在num数组中,days用于保存售书的时间。
system("cls");
printf("售书历史记录\n\n");
FILE *fp;
//days与num分别是用来记录天数和当天的销售量的
//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 图书销售历史曲线图