C语言编写销售管理系统 某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1)销售员的代号 +2)产品的代号 3)这种产品的当天的销售额 每位销售员每天可能上缴 0-5张便条。假设,收集到了上个月的所有便条,编写一个处理系统,读取上个月的销售情况,进行如下处理。" 1)计算上个月每个人每种产品的销售额。+ 2)按销售额对销售员进行排序,输出排序结果(销售员代号)及每个销售员的销售排名。- 3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额) 4)输出统计报表
时间: 2024-02-17 17:02:13 浏览: 69
好的,这是一个比较典型的销售管理系统。您需要使用C语言编写一段程序来处理这些数据。下面是一个可能的解决方案:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SALES 5
#define MAX_SALESMEN 4
struct Salesman {
int id;
float sales[MAX_SALES];
float total_sales;
int rank;
};
struct Product {
int id;
float total_sales;
};
void read_sales(struct Salesman *salesmen, struct Product *products) {
int salesman_id, product_id;
float amount;
FILE *fp = fopen("sales.txt", "r");
if (fp == NULL) {
printf("Error: cannot open sales.txt\n");
exit(1);
}
while (fscanf(fp, "%d %d %f", &salesman_id, &product_id, &amount) == 3) {
salesmen[salesman_id - 1].sales[product_id - 1] += amount;
salesmen[salesman_id - 1].total_sales += amount;
products[product_id - 1].total_sales += amount;
}
fclose(fp);
}
void compute_rank(struct Salesman *salesmen) {
int i, j;
for (i = 0; i < MAX_SALESMEN; i++) {
salesmen[i].rank = 1;
for (j = 0; j < MAX_SALESMEN; j++) {
if (salesmen[j].total_sales > salesmen[i].total_sales) {
salesmen[i].rank++;
}
}
}
}
int compare_salesmen(const void *a, const void *b) {
const struct Salesman *sa = (const struct Salesman *)a;
const struct Salesman *sb = (const struct Salesman *)b;
if (sa->total_sales > sb->total_sales) {
return -1;
} else if (sa->total_sales < sb->total_sales) {
return 1;
} else {
return 0;
}
}
int compare_products(const void *a, const void *b) {
const struct Product *pa = (const struct Product *)a;
const struct Product *pb = (const struct Product *)b;
if (pa->total_sales > pb->total_sales) {
return -1;
} else if (pa->total_sales < pb->total_sales) {
return 1;
} else {
return 0;
}
}
void print_report(struct Salesman *salesmen, struct Product *products) {
int i, j;
printf("Sales report:\n");
printf("Salesman\tTotal sales\tRanking\n");
for (i = 0; i < MAX_SALESMEN; i++) {
printf("%d\t\t%.2f\t\t%d\n", salesmen[i].id, salesmen[i].total_sales, salesmen[i].rank);
}
printf("\nProduct report:\n");
printf("Product\t\tTotal sales\n");
for (i = 0; i < MAX_SALES; i++) {
printf("%d\t\t%.2f\n", products[i].id, products[i].total_sales);
}
printf("\nProduct ranking:\n");
qsort(products, MAX_SALES, sizeof(struct Product), compare_products);
for (i = 0; i < MAX_SALES; i++) {
printf("%d\t\t%.2f\n", products[i].id, products[i].total_sales);
}
}
int main() {
struct Salesman salesmen[MAX_SALESMEN];
struct Product products[MAX_SALES];
int i;
for (i = 0; i < MAX_SALESMEN; i++) {
salesmen[i].id = i + 1;
salesmen[i].total_sales = 0;
salesmen[i].rank = 0;
}
for (i = 0; i < MAX_SALES; i++) {
products[i].id = i + 1;
products[i].total_sales = 0;
}
read_sales(salesmen, products);
compute_rank(salesmen);
qsort(salesmen, MAX_SALESMEN, sizeof(struct Salesman), compare_salesmen);
print_report(salesmen, products);
return 0;
}
```
这个程序假设销售员和产品的编号都是从1开始的。它首先定义了两个结构体Salesman和Product,分别表示销售员和产品。然后定义了一些常量和函数,包括读取销售数据、计算销售员排名、比较销售员和产品的销售额、输出报表等。在main函数中,它创建了一个salesmen数组和一个products数组,分别存储销售员和产品的数据,并调用这些函数来处理数据并输出结果。
您需要将销售数据存储在一个名为sales.txt的文本文件中,每行包含一个销售员的代号、一个产品的代号和这种产品当天的销售额,用空格分隔。例如:
```
1 1 1000.00
1 2 2000.00
2 1 1500.00
3 4 500.00
4 5 100.00
```
这个文件表示销售员1卖了1000元的1号产品和2000元的2号产品,销售员2卖了1500元的1号产品,销售员3卖了500元的4号产品,销售员4卖了100元的5号产品。注意,销售员和产品的代号都是从1开始的。
阅读全文