#include<stdio.h>
#include<conio.h>
#include<stdlib.h> /*呼叫exit函式*/
#include<string.h>
#define M 155 /*宏定義*/
void detail();
void foreach();
void menu();
void product();
void readdata();
void seller();
void total();
void choice();
struct ss
{
int sid; //銷售員代號
int pid; //產品代號
int sn; //銷售額
}ss[M];
int n; //紙條數目
int s[4][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}}; //用于保存員工和產品資訊
void main() //入口函式,即主函式
{
readdata(); //讀取檔案資料
foreach(); //根據檔案初始資料初始化便于操作的陣列
menu(); //顯示主選單
}
void readdata() //從檔案讀取資料
{
FILE *fp;
if((fp=fopen("list.txt","w"))==NULL)
{
printf("Can't open the file!\n");
exit(0);
}
else
for(n=0;!feof(fp);n++)
{
fscanf(fp,"%d %d %d\n",&ss[n].sid,&ss[n].pid,&ss[n].sn);
} //保存檔案資料到結構體
fclose(fp);
}
void foreach() //從紙條讀取資料并分類整理
{
int i;
for(i=0;i<n;i++) //遍歷所有紙條
{
switch(ss[i].pid)
//按產品分大類,根據大類分銷售員小類,累加個人各產品銷售數量
{
case 1:
switch(ss[i].sid)
{
case 1:s[0][0]+=ss[i].sn;break;
case 2:s[1][0]+=ss[i].sn;break;
case 3:s[2][0]+=ss[i].sn;break;
case 4:s[3][0]+=ss[i].sn;break;
}
break;
case 2:
switch(ss[i].sid)
{
case 1:s[0][1]+=ss[i].sn;break;
case 2:s[1][1]+=ss[i].sn;break;
case 3:s[2][1]+=ss[i].sn;break;
case 4:s[3][1]+=ss[i].sn;break;
}
break;
case 3:
switch(ss[i].sid)
{
case 1:s[0][2]+=ss[i].sn;break;
case 2:s[1][2]+=ss[i].sn;break;
case 3:s[2][2]+=ss[i].sn;break;
case 4:s[3][2]+=ss[i].sn;break;
}
break;
case 4:
switch(ss[i].sid)
{
case 1:s[0][3]+=ss[i].sn;break;
case 2:s[1][3]+=ss[i].sn;break;
case 3:s[2][3]+=ss[i].sn;break;
case 4:s[3][3]+=ss[i].sn;break;
}
break;
case 5:
switch(ss[i].sid)
{
case 1:s[0][4]+=ss[i].sn;break;
case 2:s[1][4]+=ss[i].sn;break;
case 3:s[2][4]+=ss[i].sn;break;
case 4:s[3][4]+=ss[i].sn;break;
};
break;
}
}
}
void menu()
{
int w,c;
do{
puts("\t\t********************選單*********************\n\n");
puts("\t\t 1.查看每人每種產品的銷售額\n");
puts("\t\t 2.按銷售額對銷售員排序(銷售員代號)\n");
puts("\t\t 3.對每種產品總銷售額從高到低排序(產品代號和銷售額)\n");
puts("\t\t 4.輸出統計報表\n");
puts("\t\t 5.退出\n");
puts("\n\n\t\t*********************************************\n");
printf("請選擇(1-5):[ ]\b\b");
scanf("%d",&c);
if(c<1||c>5) //錯誤輸入則重新獲取輸入
{
w=1;
getchar();
}
else w=0;
} while(w==1);
switch(c) //根據輸入實作相應函式呼叫
{
case 1:
detail();break;//每個銷售員每種產品的銷售額統計
case 2:
seller();break;
case 3:
product();break;
case 4:
total();break;
case 5:
exit(0);
}
}
void detail() //顯示銷售情況
{
int i,j;
for(i=0;i<4;i++) //遍歷銷售員
{
printf("\n\t\t%d號銷售員銷售情況:\n",i+1);
for(j=0;j<5;j++)
//按銷售員分類遍歷所有產品并顯示資訊
printf("\t\t%d號產品銷售數量:%d\n",j+1,s[i][j]);
}
choice();
}
void seller()
{
int i,j,k;
int sp[4]={0,0,0,0};
for(i=0;i<4;i++)
for(j=0;j<5;j++)
sp[i]+=s[i][j];
//計算每單個銷售員所有產品銷售數量
for(i=0;i<4;i++) //比較四次,每次選出最大數
{ k=0; //用于標記單輪最大數
for(j=0;j<4;j++)
if(sp[k]<sp[j])k=j; //獲取最大數標號
printf("\t\t第%d名是%d號銷售員!\n",i+1,k+1);sp[k]=-1;
//輸出最大數和排名,將最大數標記為負
}
choice();}
void product() //與seller()原理一樣,用于對產品進行統計
{ int i,j,k;
int p[5]={0,0,0,0,0};
for(j=0;j<5;j++)
for(i=0;i<4;i++)
p[j]+=s[i][j];
for(j=0;j<5;j++)
{k=0;
for(i=0;i<5;i++)
if(p[k]<p[i])k=i;
printf("\t\t第%d名是%d號產品!\t銷量為%d!\n",j+1,k+1,p[k]);p[k]=-1;}
choice();
}
void total() //輸出報表
{ int i,j;
printf("\n\t銷售員\t產品\t銷量\n");
for(i=0;i<4;i++)
for(j=0;j<5;j++)
printf("\t %d\t %d\t %d\n",i+1,j+1,s[i][j]);
choice();
}
void choice() //用于輸出資訊功能選擇
{
int c;
printf("請選擇接下來想做什么\t1>回傳選單\t2>退出系統 [ ]\b\b");
scanf("%d",&c);
if(c==1)
menu();
else
exit(0);
puts('\n');
}
uj5u.com熱心網友回復:
for(n=0;!feof(fp);n++){
fscanf(fp,"%d %d %d\n",&ss[n].sid,&ss[n].pid,&ss[n].sn);
} //
這里有問題
uj5u.com熱心網友回復:
fscanf(fp,"%d %d %d",&ss[n].sid,&ss[n].pid,&ss[n].sn);試試uj5u.com熱心網友回復:
void choice() //用于輸出資訊功能選擇
{
int c;
printf("請選擇接下來想做什么\t1>回傳選單\t2>退出系統 [ ]\b\b");
scanf("%d",&c);
if(c==1)
menu();
else
exit(0);
//puts('\n');
putchar('\n');
}
建議查一下檔案讀操作~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/61597.html
標籤:C語言
上一篇:想問下怎么加一個比較長度 ...
