1)按銷售額對銷售員進行排序,並輸出排序結果(銷售員代碼)
2)統計每個產品的總銷售額,並對這些產品按從高到低的順序輸出排序結果(需要輸出產品代碼和銷售額)
3)輸出統計報表如下:*/
#include < stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define Z 5
#define R 4 /*定義宏常量,便於程序泛化*/ /*R代表銷售人員的數量*/
typedef struct /*縮短結構變量名*/
{
int shangpin[Z];/*定義結構便於信息的存儲和讀寫識別*//*R為數字類型,最後壹位為營業員商品總數*/
}data;
void menu()
{ printf(" *******************************************************\n");
printf(" 0.End operation\n");
printf(" 1.計算每個人上個月每種產品的銷售額 (n");
printf(" 2. 按銷售額對銷售人員進行排序,輸出排序結果 (n");
printf(" 3. 統計每種產品的總銷售額,輸出排序結果 (n");
printf(" 4.輸出統計報告/n");
printf(" ******************************************************\n");
}
void data_read(data *x) /* 讀取函數,使程序簡潔 */
{
FILE *fp;
char fname[10];
int i;
printf("Which month would you like to query?\n");
printf("請輸入月份:");/* 輸入文件名以便讀取每個月份的信息*/
scanf("%s",fname);
strcat(fname,".txt");/* 連接文件屬性*/
if((fp= fopen(fname, "rb"))==NULL) /* 打開文件**
{
printf("can not open the file\n");
exit(0);
}
for(i=0;i<R;i++) /* 讀取信息*/
if(fread(x+i,sizeof(data),1,fp)!=1)
printf("Error reading in information!\n");
}
void data_count(data *x) /*計算上個月每人每種產品的銷售額*/
{
FILE *fp;
char fname[10];
int j,t;/*用於控制循環 */
int i,k,s; /* 用於定義員工序列號、產品序列號、產品數量 */
system("cls");
printf("Which month do you want to calculate?\n");
printf("請輸入月份:"); /* 輸入文件名,以便寫入每個月的信息 */
scanf("%s",fname);
strcat(fname,".txt");
if((fp=fopen( fname, "wb"))==NULL) /*打開文件**
{
printf("can not open the file\n");
exit(0);
}
for(j=0;j<R.;j++) /*項目數清零 */
for(t=0;t<Z;t++)
(x+j)->shangpin[t]=0;
printf("please put the information about the employee number, product number, sales quantity\n");/* 寫入信息 */
for(j=0;;j++)
{
scanf("%d%d%d",&i,&k,&s);
if(i==0) /* 當輸入雇員為 0 時結束信息輸入 */
break;
if(i >R||i<0||k>Z||k<0)
{
printf("the information error!\n"); /*避免輸入信息錯誤 */
continue;
}
else
< p> (x+i-1)->shangpin[k-1]=(x+i-1)->shangpin[k-1]+s;/* 計算每個人的產品數量,-1 以便與數組中的序列號匹配 */}
for(j=0;j<R;j++)
if(fwrite((x+j),sizeof(data),1,fp)!=1) /* 將信息寫入文件,以便以後調用*/
printf("write error!\n");
fclose(fp); /* 關閉文件,避免丟失信息*/
}
void range_sxy(data *x) /* 按銷售額對銷售人員進行排序,輸出排序結果。按銷售額排序,輸出排序結果 */
{
FILE *fp;
char fname[10];
int i,k,j,t,bianhao[R]={0},z;
system("cls");
printf("you want which month?\n");
printf("請輸入月份:");/* 輸入文件名,以便讀取每個月份的信息*
scanf("%s",fname);
strcat(fname,".txt");
if ((fp=fopen( fname, "rb"))==NULL) /* 打開文件**/
{
printf("can not open the file\n");
exit(0);
}
for(i=0;i<R;i++) /*讀出信息**/< /p>
if(fread(x+i,sizeof(data),1,fp)!=1)
printf("Error reading information!") ; /* 讀取信息提示 */
for(i=0;i<R;) /* 用於存儲員工編號 */
bianhao[i]=i++;
printf("Please enter the product by which to sort \n");
scanf("%d",&k);
k=k-1; /*易於與結構中的數組值相對應 */
for(i=0;i<;R;i++) /* 按 K 種產品對業務員進行排序,排序方式為選擇方式 */
{
t=i;
for(j=i+1;j<R;j++)
if((x +bianhao[t])->;shangpin[k]<(x+bianhao[j])->shangpin[k])/*調用工人各自對應結構中的產品數量*
t=j;
if(t!=i)
{
z= bianhao[i];
bianhao[i]=bianhao[t];
bianhao[t]=z;
}
}
printf("Sorting the salesmen by %d products is:\n",k+1);
for(i=0;i& lt;R;i++)
printf("%5d",bianhao[i]+1);
getch();
fclose(fp);
}
void range_shangpin(data *x) /*統計各產品的銷售總額,輸出排序結果 */
{
FILE *fp;
char fname[10];
int i,j,sum[Z]={0},bianhao[Z]={0},z,t,k;
system("cls");
printf("Which month do you want to calculate?\n");
printf("Please enter the month:"); /* 輸入文件名,以便讀取每個月的信息 */
scanf("%s",fname);
strcat(fname,".txt");
if ((fp=fopen( fname, "rb"))==NULL) /*打開文件**/
{
printf("can not open the file\n");
exit(0);
}
for(i=0;i<R;i++) /*讀出信息**/< /p>
if(fread(x+i,sizeof(data),1,fp)!=1)
printf("Error reading information!") )
for(i=0;i<Z;i++) /* 用於求各種商品的總和 */
for(j=0;j<R;j++)
sum[i]=sum[i]+(x+j)->shangpin[i];
for(i=0;i<Z;) /* 用於存儲項目編號 */
bianhao[i]=i++;
for(i=0;i<Z;i++)
printf("%3d",bianhao[i]);
for(i=0;i<Z;i++) /* 對產品從高到低進行排序,即選擇法排序*/
{
t=i;
for(j=i+1;j<Z;j++) /* 當產品發生變化時,產品編號也隨之變化,以便於輸出*/
if(sum[t]<sum[j])
t=j;
if(t!=i )
{
k=sum[i];
sum[i]=sum[t];
sum[t]=k;
z=bianhao[i];
bianhao[i]=bianhao[t];
bianhao[t]=z ;
}
}
printf("Output product sorting\n");
printf("Product number Quantity\n");
for(i=0;i<Z;i++)
printf("%-10d%-10d\n", bianhao[i]+1,sum[i]);
getch();
fclose(fp);
}
{ FILE *fp; char fname[10]; int i,j,sum[Z+1]={0}; system("cls"); printf("Which month do you want to calculate?\n"); printf("請輸入月份:"); /* 輸入文件名,以便讀取每個月的信息 */ scanf("%s",fname); strcat(fname,".txt"); if ((fp=fopen( fname, "rb"))==NULL) /*打開文件**/ { printf("can not open the file\n"); exit(0); } for(i=0;i<R;i++) /*讀出信息**/< /p> if(fread(x+i,sizeof(data),1,fp)!=1) printf("Error reading information!") ) for(i=0;i<Z;i++) /* 各種商品的總和 */ for(j=0;j<R;j++) sum[i]=sum[i]+(x+j)->shangpin[i]; for(i=0;i<Z;i ++) /* 求貨物總和 */ sum[Z]=sum[Z]+sum[i]; printf("Output the statistical report as follows:\n"); /* 按要求輸出統計表 */ printf("Product Code Sum of Sales Salesman Code \n"); for(i=0;i<R;i++); /* 按要求輸出統計表 * printf("Product Code Salesman Code \n"); for(i=0;i <R;i++) for(j=0;j<Z;j++) printf("%-10d%-10d%-10d\n",j+1,(x+i)->shangpin[j],i+1); printf("************** *********************\n"); for(i=0;i<Z;i++) { if(i==0) printf("%d sum of products %-10d sum %-10d\n",i+1,sum[i],sum[Z]) ; else printf("%d sum of products %-10d\n",i+1,sum[i]); } getch(); } void main() { int i,choice;< data sxy[R]; /*R表示工人數,前面是宏常量*/ for(i=0;;i++) { system("cls"); /*清頻命令*/ menu(); /*菜單函數提示用戶如何做出選擇*/ printf("What do you want to do?\n"); printf("Please choose:"); /* 輸入要執行的操作*/ scanf("%d",&choice); if(choice==0) /* 退出程序*/ break; else switch(choice) { case 1 :data_count(sxy);break; /*計算每個人在上個月每個產品的銷售額*/ case 2 :range_sxy(sxy);break; /*按銷售額對銷售人員進行排序,輸出排序結果*/ case 3 : range_shangpin(sxy);break; /*計算每個產品的總銷售額,輸出排序結果*/ case 4 : data_out(sxy);break; /*輸出統計報告*/ } } }