設(shè)計(jì)與實(shí)現(xiàn)圖書超市收銀系統(tǒng)中售書歷史清單數(shù)據(jù)的統(tǒng)計(jì)與分析
設(shè)計(jì)與實(shí)現(xiàn)圖書超市收銀系統(tǒng)中售書歷史清單數(shù)據(jù)的統(tǒng)計(jì)與分析,查看售書歷史記錄時(shí)能進(jìn)行信息統(tǒng)計(jì)與匯總,并且能以曲線圖的形式呈現(xiàn)售書歷史信息。
(1) 在查看售書歷史記錄時(shí),按日期統(tǒng)計(jì)銷售量,記錄在num數(shù)組中,days用于保存售書的時(shí)間。
system("cls");
printf("售書歷史記錄\n\n");
FILE *fp;
//days與num分別是用來記錄天數(shù)和當(dāng)天的銷售量的
//day是用來記錄當(dāng)前加載到第幾天了
//today是用來記錄現(xiàn)在處理的天數(shù)(用于比較之前的天數(shù),因?yàn)槿绻F(xiàn)在處理的天數(shù)與上一天一致,那么我們的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用來記入是第幾次讀取數(shù)據(jù),因?yàn)槲覀円?a href="http://m.lengzuo.cn/tags/263/">判斷如果第一次讀入就為空就要退出
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保存現(xiàn)在的日期
}
//這里比較上一天與今天是否相同
if(strcmp(days[day],today)){
//如果不相同但是上次天數(shù)是默認(rèn)值那么我們則覆蓋
if(!strcmp(days[day],"00/00")){
strcpy(days[day],today);
}else{
//如果不相同并且上次天數(shù)不是默認(rèn)值那么我們將day++表示這是一個(gè)全新的天數(shù)
day++;
//因?yàn)槲覀兘y(tǒng)計(jì)的是近9天的日銷售量,所以當(dāng)超過9天的時(shí)候我們需要替換掉前面的天數(shù)
if(day>8){
//這個(gè)方法的時(shí)間效率低,但是因?yàn)槲覀冎挥?/span>9次循環(huán)所以這樣的代碼影響并不大
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);
//這里我們要獲取數(shù)量,以便計(jì)算日銷售量
if(i%6==0&&strcmp(str,"數(shù)量")){
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)根據(jù)售書日期與每天的售書量參數(shù),繪制出圖書銷售歷史的曲線圖。
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(); // 關(guān)閉繪圖屏幕
}
運(yùn)行效果如圖9-10所示:
圖9-10 圖書銷售歷史曲線圖