某公司有四個銷售員(編號:1-4),負責銷售五種產品(編號:1-5).每個銷售員都將當天出售的每種產品各寫一張便條交上來.每張便條包含內容:(選做)
1)銷售員的代號
2)產品的代號
3)這種產品的當天的銷售額
每位銷售員每天可能上繳0-5張便條.假設,收集到了上個月的所有便條,編寫一個處理系統,讀取上個月的銷售情況(自己設定),進行如下處理.
1)計算上個月每個人每種產品的銷售額.
2)按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)
3)統計每種產品的總銷售額,對這些產品按從高到底的順序,輸出排序結果(需輸出產品的代號和銷售額)
4)輸出統計報表
銷售統計報表
產品代號 銷售之和
創作不易,感謝支持!!!(這只是比較簡易的,還能繼續添加!)
代碼:
#define _CRT_SECURE_NO_DEPRECATE/*在比較高版本的vs添加由於支持scanf和fopen等函數*/
#include <iostream>
#include <stdlib.h>
#define M 150
using namespace std;
int n;//小紙條數目
class Menu //菜單
{
public:
static void MainMenu();//主菜單
};
class Scrip//紙條類
{
private:
int id;//銷售員代號
int num;//產品代號
int sale;//銷量
public:
static void readdata();//讀取
static void collating();//整理讀取的信息
static void detail();//查看銷售情況
static void seller_sort();//針對銷售員銷量排序
static void product_sort();//針對產品銷量,對產品排序
static void total();//統計報表
}note[M];
class ElySale
{
public:
int sale[5];
}Ely[4];//保存各產品銷量
功能的實現:
void Scrip::readdata()
{
FILE* fp = 0;
if ((fp = fopen("list.txt", "r")) == NULL)
{
printf("Feil opening falling!\n");
exit(0);
}
else
for (n = 0; !feof(fp); n++)
{
fscanf(fp, "%d %d %d\n", ¬e[n].id, ¬e[n].num, ¬e[n].sale);//保存文件數據到結構體
}
fclose(fp);
}
void Scrip::collating()//整理讀取的信息並分類
{
int i;
for (i = 0; i < n; i++)//遍歷所有紙條
{
switch (note[i].num)//按產品分大類,銷售員分小類,累加每個人各類產品銷售量
{
case 1://產品1
switch (note[i].id)//銷售員代號
{
case 1:
Ely[0].sale[0] += note[i].sale; break;
case 2:
Ely[1].sale[0] += note[i].sale; break;
case 3:
Ely[2].sale[0] += note[i].sale; break;
case 4:
Ely[3].sale[0] += note[i].sale; break;
}
break;
case 2: //產品2
switch (note[i].id)//銷售員代號
{
case 1:
Ely[0].sale[1] += note[i].sale; break;
case 2:
Ely[1].sale[1] += note[i].sale; break;
case 3:
Ely[2].sale[1] += note[i].sale; break;
case 4:
Ely[3].sale[1] += note[i].sale; break;
}
break;
case 3://產品3
switch (note[i].id)//銷售員代號
{
case 1:
Ely[0].sale[2] += note[i].sale; break;
case 2:
Ely[1].sale[2] += note[i].sale; break;
case 3:
Ely[2].sale[2] += note[i].sale; break;
case 4:
Ely[3].sale[2] += note[i].sale; break;
}
break;
case 4://產品4
switch (note[i].id)//銷售員代號
{
case 1:
Ely[0].sale[3] += note[i].sale; break;
case 2:
Ely[1].sale[3] += note[i].sale; break;
case 3:
Ely[2].sale[3] += note[i].sale; break;
case 4:
Ely[3].sale[3] += note[i].sale; break;
}
break;
case 5://產品5
switch (note[i].id)//銷售員代號
{
case 1:
Ely[0].sale[4] += note[i].sale; break;
case 2:
Ely[1].sale[4] += note[i].sale; break;
case 3:
Ely[2].sale[4] += note[i].sale; break;
case 4:
Ely[3].sale[4] += note[i].sale; break;
}
break;
}
}
}
void Scrip::detail()//顯示銷售情況
{
int i, j;
for (i = 0; i < 4; i++)//遍歷銷售員
{
cout << "\n\t\t" << i + 1 << "號銷售員銷售情況:" << endl;
for (j = 0; j < 5; j++)/*按銷售員分類遍歷所有產品並顯示信息*/
cout << "\t\t" << j + 1 << "號產品銷售數量:" << Ely[i].sale[j] << endl;
}
}
void Scrip::seller_sort()//按銷量對銷售員排序
{
int i, j, k;
int a[4] = { 0,0,0,0 };//用於儲存四個銷售員各自的銷售總量
for (i = 0; i < 4; i++)
for (j = 0; j < 5; j++)
a[i] += Ely[i].sale[j];//統計每個銷售員所有產品總銷售量
for (i = 0; i < 4; i++)
{
k = 0;//用於標記本輪最大數
for (j = 0; j < 4; j++)
if (a[k] < a[j])
k = j;
cout << "銷量第" << i + 1 << ";" << "\t" << k + 1 << "號銷售員" << "\t銷量: " << a[k] << endl;
a[k] = -1;///*輸出最大數和排名,將最大數標記爲負*/
}
}
void Scrip::product_sort()//按產品銷量對該類產品排序
{
int i, j, k;
int b[5] = { 0,0,0,0,0 };//存放五種產品總銷量
for (i = 0; i < 5; i++)
for (j = 0; j < 4; j++)
b[i] += Ely[j].sale[i];//統計每件產品的總銷量
for (i = 0; i < 5; i++)
{
k = 0;//用於標記本輪最大數
for (j = 0; j < 5; j++)
if (b[k] < b[j])
k = j;
cout << "銷量第" << i + 1 << "的產品:" << "\t" << k + 1 << "號產品" << "\t銷量: " << b[k] << endl;
b[k] = -1;///*輸出最大數和排名,將最大數標記爲負*/
}
}
void Scrip::total()//輸出報表
{
int i, j;
printf("\n\t銷售員\t產品\t銷量\n");
for (i = 0; i < 4; i++)
for (j = 0; j < 5; j++)
cout << "\t " << i + 1 << "\t " << j + 1 << "\t" << Ely[i].sale[j] << endl;
}
void Menu::MainMenu()
{
cout << "\t\t********************菜單*********************\n" << endl;
cout << "\t\t 1.查看每人每種產品的銷售額" << endl;
cout << "\t\t 2.按銷售額對銷售員排序(銷售員代號)" << endl;;
cout << "\t\t 3.對每種產品總銷售額從高到低排序(產品代號和銷售額)" << endl;
cout << "\t\t 4.輸出統計報表" << endl;
cout << "\t\t 5.導入前一個月銷售情況" << endl;
cout << "\t\t 0.退出" << endl;
cout << "\n\n\t\t*********************************************" << endl;
cout << "請選擇(1-5):[ ]\b\b";
}
void start()
{
int select;
while (true)
{
Menu::MainMenu();
cin >> select;
switch (select)
{
case 1://查看每人每種產品的銷售額
Scrip::detail();
break;
case 2://按銷售額對銷售員排序(銷售員代號)
Scrip::seller_sort();
break;
case 3://對每種產品總銷售額從高到低排序(產品代號和銷售額)
Scrip::product_sort();
break;
case 4://輸出統計報表
Scrip::total();
break;
case 5://導入前一個月銷售情況
{
Scrip::readdata();//讀取文件
Scrip::collating();//對信息整理分類
}
break;
case 0://退出系統
cout << "歡迎下次使用" << endl;
system("pause");
exit(0);
default:
cout << "輸入錯誤!" << endl;
break;
}
system("pause");
system("cls");
}
}
int main()
{
start();
system("pause");
return 0;
}