設計與實現圖書超市收銀系統中售書歷史清單數據的統計與分析
設計與實現圖書超市收銀系統中售書歷史清單數據的統計與分析,查看售書歷史記錄時能進行信息統計與匯總,并且能以曲線圖的形式呈現售書歷史信息。
實現步驟:
(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 圖書銷售歷史曲線圖