某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1)销售员的代号,2)产品的代号,3)这种产品的当天的销售额。每位销售员每天上缴1张便条。试设计一个便条管理系统,使之能提供以下功能:1、便条信息录入功能(便条信息用文件保存)--输入2、收集到了上个月的所有便条后,读取销售情况1)计算每个人每种产品的销售额。2)按销售额对销售员进行排序,输出排序结果(销售员代号)3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)3、使用链表进行增加、删除、修改便条信息,并将更新后的信息保存至文件。
第一步可以从定义结构体开始,来存储便条的信息,如:
struct SalesNote {
int salespersonID;
int productID;
float salesAmount;
};
然后,可以实现便条信息的录入功能,如:
void inputSalesNote(struct SalesNote *salesNotes, int *count) {
// 实现便条信息的录入
}
接下来,可以实现销售情况的统计,如:
void calculateSales(struct SalesNote *salesNotes, int count) {
// 实现销售情况的统计
}
再然后,可以实现产品总销售额的统计,如:
void calculateProductSales(struct SalesNote *salesNotes, int count) {
// 实现产品总销售额的统计
}
最后,可以实现链表的增删改,如:
struct SalesNoteNode {
struct SalesNote salesNote;
struct SalesNoteNode *next;
};
void addSalesNote(struct SalesNoteNode **head, struct SalesNote salesNote) {
// 实现链表的增加
}
void deleteSalesNote(struct SalesNoteNode **head, struct SalesNote salesNote) {
// 实现链表的删除
}
void modifySalesNote(struct SalesNoteNode *head, struct SalesNote salesNote) {
// 实现链表的修改
}
参考下面方案
1、便条信息录入功能:您可以使用 fopen() 函数打开文件,然后使用 fprintf() 函数将便条信息写入文件,最后使用 fclose() 函数关闭文件。
2、读取销售情况:您可以使用 fopen() 函数打开文件,然后使用 fscanf() 函数读取便条信息,并使用一个二维数组(每个销售员和每种产品都有一个统计数)统计每个销售员和每种产品的销售额。排序可以使用 qsort() 函数或自定义的排序函数。
3、链表操作:您可以使用结构体定义链表,并使用链表操作(如增加,删除,修改)实现便条信息的管理。更新后的信息可以使用 fopen() 函数打开文件,然后使用 fprintf() 函数将信息写入文件,最后使用 fclose() 函数关闭文件。
https://blog.csdn.net/weixin_42332665/article/details/123617632
int main(){
extern Employer employer[], *ptrtempemp[];
extern Company company[], *ptrtempcomp[];
extern Customer customer[], *ptrtempcus[];
extern Product product[], *ptrtemppd[];
extern Project project[], *ptrtemppj[];
int manumber;
/* 一、读取文件信息进行初始化 */
while(1){
system("cls");
smsinit();
printf("\n******************大饼销售管理系统******************\n");
printf("****************版本:v1.0-2022-3-13******************\n");
printf("功能如下,请选择相应功能前的编号:\n");
printf("\n1-查看\t\t2-查询\t\t3-录入\n");
printf("0-退出系统\n");
scanf("%d", &manumber);getchar();
if(manumber == 0)
exit(0);
while(manumber){
//scanf("%d", &manumber);getchar();
char *str;
int n;
switch(manumber){
case 1:
system("cls");
printf("\n******************大饼销售管理系统******************\n");
printf("****************查看功能区******************\n");
printf("功能如下,请选择相应功能前的编号:\n");
printf("\n1-查看所有员工\t\t2-查看所有客户\t\t3-查看所有项目\n");
printf("0-返回上级菜单\n");
printf("你的选择:");
scanf("%d", &manumber);getchar();
switch(manumber){
case 1:
if(employercount > 0){
for(int i = 0; i < employercount; i++){
printf("%d %s %s\t%s\t%s %s %s\n", employer[i].id, employer[i].name.firstname,
employer[i].name.secondname, employer[i].tel, employer[i].department,
employer[i].job, employer[i].email);
}
}else{
printf("\n无员工记录!!!\n");
}
system("pause");
break;
case 2:
if(customercount > 0){
for(int i = 0; i < customercount; i++){
printf("%d- %s %s\n%s\n%s %s %s\n", customer[i].id, customer[i].name.firstname,
customer[i].name.secondname, customer[i].ptrcompany->company, customer[i].department,
customer[i].job, customer[i].tel);
}
}else{
printf("\n无客户记录!!!\n");
}
system("pause");
manumber = 1;
break;
case 3:
if(projectcount > 0){
for(int i = 0; i < projectcount; i++){
printf("%d 项目:%s\n预估金额(元):%.2lf\t录入时间:%d-%d-%d\t项目业主:%s\t跟单员:%s%s\n",
project[i].id, project[i].projectname, project[i].total, project[i].year, project[i].month,
project[i].day,project[i].ptrcompany->company,
project[i].ptremployer->name.firstname,
project[i].ptremployer->name.secondname);
}
}else{
printf("\n无项目记录!!!\n");
}
system("pause");
manumber = 1;
break;
case 0:
manumber = 0;
break;
default:
break;
}
break;
case 2:
system("cls");
printf("\n******************大饼销售管理系统******************\n");
printf("****************查询功能区******************\n");
printf("功能如下,请选择相应功能前的编号:\n");
printf("\n1-查询员工\t\t2-查询客户\t\t3-查询项目\n");
printf("\n4-查询产品\t\t0-返回上级菜单\n");
printf("你的选择:");
scanf("%d", &manumber);getchar();
switch(manumber){
case 1:
printf("\n请输入要查询的员工姓名:");
str = (char *)malloc(MAXNAMELEN*2*sizeof(char));
tostring(str, MAXNAMELEN*2*sizeof(char));
n = searchemployer(employer, str, ptrtempemp);
if(n > 0){
printf("共有%d条匹配:\n", n);
for(int i = 0; i < n; i++){
printf("工号:%d 姓名:%s%s 电话:%s 邮箱:%s 部门:%s\t职位:%s\n", (*(ptrtempemp+i))->id,
(*(ptrtempemp+i))->name.firstname, (*(ptrtempemp+i))->name.secondname,
(*(ptrtempemp+i))->tel, (*(ptrtempemp+i))->email, (*(ptrtempemp+i))->department,
(*(ptrtempemp+i))->job);
}
}else{
printf("\n不存在此姓名员工!!\n");
}
free(str);
system("pause");
manumber = 2;
break;
case 2:
printf("\n请输入要查询的客户姓名:");
str = (char *)malloc(MAXNAMELEN*2*sizeof(char));
tostring(str, MAXNAMELEN*2*sizeof(char));
n = searchcus(customer, str, ptrtempcus);
if(n > 0){
printf("共有%d条匹配:\n", n);
for(int i = 0; i < n; i++){
printf("工号:%d 姓名:%s%s 电话:%s 邮箱:%s 公司:%s 部门:%s 职位:%s\n", (*(ptrtempcus+i))->id,
(*(ptrtempcus+i))->name.firstname, (*(ptrtempcus+i))->name.secondname,
(*(ptrtempcus+i))->tel, (*(ptrtempcus+i))->email, (*(ptrtempcus+i))->ptrcompany->company,
(*(ptrtempcus+i))->department,(*(ptrtempcus+i))->job);
}
}else{
printf("\n不存在此姓名员工!!\n");
}
free(str);
system("pause");
manumber = 2;
break;
case 3:
printf("\n请输入要查询的项目名:");
str = (char *)malloc(50*sizeof(char));
tostring(str, MAXNAMELEN*2*sizeof(char));
n = searchpj(project, str, ptrtemppj);
if(n > 0){
printf("共有%d条匹配:\n", n);
for(int i = 0; i < n; i++){
printf("项目编号:%d 项目名:%s 预估金额(元):%.2lf 业主:%s 业务员:%s%s 录入时间:%d-%d-%d\n",
(*(ptrtemppj+i))->id, (*(ptrtemppj+i))->projectname, (*(ptrtemppj+i))->total,
(*(ptrtemppj+i))->ptrcompany->company,
(*(ptrtemppj+i))->ptremployer->name.firstname, (*(ptrtemppj+i))->ptremployer->name.secondname,
(*(ptrtemppj+i))->year, (*(ptrtemppj+i))->month, (*(ptrtemppj+i))->day);
}
}else{
printf("\n不存在该项目!!\n");
}
free(str);
system("pause");
manumber = 2;
break;
case 4:
printf("\n请输入要查询的产品名或者型号:\n");
str = (char *)malloc(sizeof(product[0].productname));
tostring(str, sizeof(product[0].productname));
n = searchpd(product, str, ptrtemppd);
if(n > 0){
printf("共有%d条匹配:\n", n);
for(int i = 0; i < n; i++){
printf("产品编号:%d 产品名称:%s 产品型号:%s 单价:%.2lf 描述:%s\n",
(*(ptrtemppd+i))->id,(*(ptrtemppd+i))->productname, (*(ptrtemppd+i))->type,
(*(ptrtemppd+i))->price, (*(ptrtemppd+i))->description);
}
}else{
printf("\n不存在该产品!!\n");
}
free(str);
manumber = 2;
system("pause");
break;
}
break;
case 3:
system("cls");
printf("\n******************大饼销售管理系统******************\n");
printf("****************录入功能区******************\n");
printf("功能如下,请选择相应功能前的编号:\n");
printf("\n1-录入新员工\t\t2-录入新业主单位\t\t3-录入新客户\n");
printf("\n4-录入新项目\t\t5-录入新产品\t\t0-返回上级菜单\n");
printf("你的选择:");
scanf("%d", &manumber);getchar();
char ch;
int k;
switch(manumber){
case 1:
printf("\n开始录入新员工数据:\n");
employercount = newemployer(employer, employercount);
printf("\n输入y/Y保存数据 :");
scanf("%c", &ch);getchar();
if(ch == 'y' || ch == 'Y'){
FILE *fp;
fp = fopen(DIR_EMP, "a");
writedata(fp, employer, "%d;%s;%s;%s;%s;%s;%s;\n", employer[employercount-1].id,
employer[employercount-1].name.firstname, employer[employercount-1].name.secondname,
employer[employercount-1].tel, employer[employercount-1].department,
employer[employercount-1].job, employer[employercount-1].email);
fclose(fp);
}else{
employercount--;
}
manumber = 3;
system("pause");
break;
case 2:
printf("\n开始录入新业主单位:");
str = (char *)malloc(sizeof(company[0].company));
printf("\n查询是业主单位否存在:\n");
tostring(str, sizeof(company[0].company));
n = searchcompany(company, str, ptrtempcomp);
if(n > 0){
printf("\n存在相似业主单位,共%d条数据:\n", n);
for(int i = 0; i < n; i++){
printf("%d %s\n", i+1, (*(ptrtempcomp+i))->company);
}
//printf("\n按0");
}else{
printf("不存在,可以新增录入:\n");
companycount = newcompany(company, companycount);
printf("\n输入y/Y保存数据 :");
scanf("%c", &ch);getchar();
if(ch == 'y' || ch == 'Y'){
FILE *fp;
fp = fopen(DIR_COM, "a");
writedata(fp, company, "%d;%s;%s;\n", company[companycount-1].id,
company[companycount-1].company, company[companycount-1].address);
fclose(fp);
}else{
employercount--;
}
}
free(str);
manumber = 3;
system("pause");
break;
case 3:
printf("\n开始录入新客户:\n");
customercount = newcustomer(customer, customercount);
printf("\n输入业主单位查询:\n");
str = (char *)malloc(sizeof(company[0].company));
tostring(str, sizeof(company[0].company));
n = searchcompany(company, str, ptrtempcomp);
free(str);
if(n > 0){
for(int i = 0; i < n; i++){
printf("%d- %s\n", i+1, (*(ptrtempcomp+i))->company);
}
printf("\n输入所选择的业主序号,若无请输入 0 返回:");
scanf("%d", &k);getchar();
if(k != 0 && k <= n)
customer[customercount-1].ptrcompany = (*(ptrtempcomp+k-1));
else{
printf("\n不存在此业主单位,需要新建业主单位后再添加客户!!\n");
customercount--;
manumber = 3;
system("pause");
break;
}
}else{
printf("\n不存在此业主单位,需要新建业主单位后再添加客户!!\n");
customercount--;
manumber = 3;
system("pause");
break;
}
printf("\n输入y/Y保存数据 :");
scanf("%c", &ch);getchar();
if(ch == 'y' || ch == 'Y'){
FILE *fp;
fp = fopen(DIR_CUS, "a");
writedata(fp, customer, "%d;%s;%s;%s;%s;%s;%s;%s;%s;%s;\n", customer[customercount-1].id,
customer[customercount-1].name.firstname, customer[customercount-1].name.secondname,
customer[customercount-1].ptrcompany->company, customer[customercount-1].department,
customer[customercount-1].job, customer[customercount-1].tel, customer[customercount-1].email,
customer[customercount-1].address, customer[customercount-1].description);
fclose(fp);
}else{
customercount--;
}
manumber = 3;
system("pause");
break;
case 4:
printf("\n开始录入新项目:\n");
projectcount = newproject(project, projectcount);
printf("\n查询项目业主单位:\n");
str = (char *)malloc(sizeof(company[0].company));
tostring(str, sizeof(company[0].company));
n = searchcompany(company, str, ptrtempcomp);
free(str);
if(n > 0){
printf("共有%d条匹配:\n", n);
for(int i = 0; i < n; i++){
printf("%d- %s\n", i+1, (*(ptrtempcomp+i))->company);
}
printf("\n请输入业主前代号,若没有,请输入 0 返回:");
scanf("%d", &k);getchar();
if(k != 0 && k <= n){
project[projectcount-1].ptrcompany = *(ptrtempcomp+k-1);
}else{
printf("\n不存在此业主单位,需要新建业主单位后再添加客户!!\n");
projectcount--;
manumber = 3;
system("pause");
break;
}
}else{
printf("\n不存在此业主单位,需要新建业主单位后再添加客户!!\n");
projectcount--;
manumber = 3;
system("pause");
break;
}
printf("\n查询项目跟单销售是否存在:");
str = (char *)malloc(MAXNAMELEN*2*sizeof(char));
tostring(str, MAXNAMELEN*2*sizeof(char));
n = searchemployer(employer, str, ptrtempemp);
free(str);
if(n > 0){
printf("\n共有%d条匹配:\n", n);
for(int i = 0; i < n; i++){
printf("%d- %s %s %s\n", i+1, (*(ptrtempemp+i))->name.firstname, (*(ptrtempemp+i))->name.secondname,
(*(ptrtempemp+i))->department);
}
printf("请输入职员前代号选择,若没有,请按 0 返回\n");
scanf("%d", &k);getchar();
if(k != 0 && k <= n){
project[projectcount-1].ptremployer = *(ptrtempemp+k-1);
}else{
printf("\n不存在此跟单销售,需要新建销售后再建立!!\n");
projectcount--;
manumber = 3;
system("pause");
break;
}
}else{
printf("\n不存在此跟单销售,需要新建销售后再建立!!\n");
projectcount--;
manumber = 3;
system("pause");
break;
}
printf("\n查询项目客户联系人是否存在:");
str = (char *)malloc(MAXNAMELEN*2*sizeof(char));
tostring(str, MAXNAMELEN*2*sizeof(char));
n = searchcus(customer, str, ptrtempcus);
free(str);
if(n > 0){
printf("\n共有%d条匹配:\n", n);
for(int i = 0; i < n; i++){
printf("%d- %s %s %s\n", i+1, (*(ptrtempcus+i))->name.firstname, (*(ptrtempcus+i))->name.secondname,
(*(ptrtempcus+i))->ptrcompany->company);
}
printf("请输入职员前代号选择,若没有,请按 0 返回\n");
scanf("%d", &k);getchar();
if(k != 0 && k <= n){
project[projectcount-1].ptrcustomer = *(ptrtempcus+k-1);
}else{
printf("\n不存在此联系人,需要新建后再建立!!\n");
projectcount--;
manumber = 3;
system("pause");
break;
}
}else{
printf("\n不存在此联系人,需要新建后再建立!!\n");
projectcount--;
manumber = 3;
system("pause");
break;
}
printf("\n输入y/Y保存数据 :");
scanf("%c", &ch);getchar();
if(ch == 'y' || ch == 'Y'){
FILE *fp;
fp = fopen(DIR_PJ, "a");
writedata(fp, project, "%d;%s;%d;%d;%d;%.2lf;%s;%s;%s;%s;%s;%s;\n", project[projectcount-1].id,
project[projectcount-1].projectname, project[projectcount-1].year,
project[projectcount-1].month, project[projectcount-1].day,
project[projectcount-1].total, project[projectcount-1].description,
project[projectcount-1].ptrcompany->company,
project[projectcount-1].ptrcustomer->name.firstname,
project[projectcount-1].ptrcustomer->name.secondname,
project[projectcount-1].ptremployer->name.firstname,
project[projectcount-1].ptremployer->name.secondname);
fclose(fp);
}else{
customercount--;
}
manumber = 3;
system("pause");
break;
case 5:
printf("\n开始录入新产品:\n");
productcount = newproduct(product, productcount);
printf("\n输入y/Y保存数据");
scanf("%c", &ch);getchar();
if(ch == 'y' || ch == 'Y'){
FILE *fp;
fp = fopen(DIR_PD, "a");
writedata(fp, product, "%d;%s;%s;%lf;%s;\n", product[productcount-1].id,
product[productcount-1].productname, product[productcount-1].type,
product[productcount-1].price, product[productcount-1].description);
fclose(fp);
}else{
productcount--;
}
manumber = 3;
system("pause");
break;
}
break;
default:
break;
}
}
}
return 0;
}
https://www.jb51.net/article/241752.htm
看看吧,望采纳,基本和你的一样
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define M 155
void ReadData(); ///读取
void Foreach();
void Menu(); ///菜单
void Data(); ///销售数据
void Statistics(); ///统计
void Input(); ///录入
void Modify(); ///修改
void Delete(); ///删除
void Salesperson(); ///销售员排序
void Sales(); ///销售额排序
void Choice(); ///选择
void Clearing(); ///清除
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}};///s:员工和产品信息
void Menu()
{
int c;
puts("********* 菜单 *********\n");
puts(" 1.查询销售信息\n");
puts(" 2.统计表\n");
puts(" 3.录入信息\n");
puts(" 4.修改信息\n");
puts(" 5.删除信息\n");
puts(" 6.销售员排序\n");
puts(" 7.销售额排序\n");
puts(" 0.退出\n");
puts("************************\n");
printf("请选择(0-7):[ ]\b\b");
scanf("%d",&c);
if(c<0||c>7)
{
printf("请重新输入!!!\n");
Menu();
}
else
switch(c)///根据输入实现相应函数调用
{
case 1:Data();
break;
case 2:Statistics();
break;
case 3:Input();
break;
case 4:Modify();
break;
case 5:Delete();
break;
case 6:Salesperson();
break;
case 7:Sales();
break;
case 0:exit(0);
}
}
可以参考这个
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define M 155
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 readdata()
{
FILE *fp;///定义文件指针
///调用fopen函数,以只读模式打开d:\list.txt文件,并验证返回值是否为空
if((fp=fopen("d:\\list.txt","r"))==NULL)
{
printf("文件打开失败!\n");
exit(0);///表示正常的退出
}
else
/**feof是输入输出函数,检查文件是否结束,如结束,则返回非零值,
否则返回0 .函数原型为:int feof(FILE *fp)**/
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:///当ss[i].pid为1的时候,也就是当产品代号为1的时候
switch(ss[i].sid)///查看销售代码
{
///当销售代码为1的时候,累加1号销售员编号为1的产品的销售额
case 1:s[0][0]+=ss[i].sn;break;
///当销售代码为2的时候,累加2号销售员编号为1的产品的销售额
case 2:s[1][0]+=ss[i].sn;break;
///当销售代码为3的时候,累加3号销售员编号为1的产品的销售额
case 3:s[2][0]+=ss[i].sn;break;
///当销售代码为4的时候,累加4号销售员编号为1的产品的销售额
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 c;
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("\t\t 6.修改一条便条信息\n");
puts("\t\t 7.删除一条便条信息\n");
puts("\t\t 8.退出\n");
puts("\n\n\t\t*********************************************\n");
printf("请选择(1-8):[ ]\b\b");
scanf("%d",&c);
if(c<1||c>8)///错误输入,重新获取输入
{
printf("您输入的选项不在我们服务范围之内\请确定好您要选择的服务,重新输入!!!\n");
menu();
}
else///正确输入
switch(c)///根据输入实现相应函数调用
{
case 1:detail();
break;
case 2:seller();
break;
case 3:product();
break;
case 4:total();
break;
case 5:add();
break;
case 6:update();
break;
case 7:deleteing();
break;
case 8: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()
{
int i,j,k;
int p[5]={0,0,0,0,0};///存每种产品的销售额
for(i=0;i<5;i++)///统计每种产品的销售额
for(j=0;j<4;j++)
p[i]+=s[j][i];
for(i=0;i<5;i++)///将产品的销售额进行排序
{
k=0;
for(j=0;j<5;j++)
{
if(p[k]<p[j])
k=j;
}
printf("\t\t第%d名是%d号产品!\销售额为%d!\n",i+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("请选择接下来想做什么:\n1.返回菜单\n2.退出系统\n");
scanf("%d",&c);
if(c==1)
menu();
else
exit(0);
}
///录入一条便条信息
void add()
{
printf("请填写您要录入的便条的信息:销售代码,产品代码,销售额\n");
/**接着readdata()统计的文本中便条的信息到结构体数组里,
将添加的信息首先保存在那些信息的后面**/
scanf("%d %d %d",&ss[n].sid,&ss[n].pid,&ss[n].sn);
FILE *fp;///定义文件指针
char *str="d:\\list.txt";
printf("该条记录正在写入文件 list.txt~~~~\n");
fp=fopen(str,"a");///参数"a"意思是说将新添加的数据接着文本里的数据写,不会覆盖文本里的内容
fprintf(fp,"\n%d\t%d\t%d",ss[n].sid,ss[n].pid,ss[n].sn);///将结构体里的信息写入文本
fclose(fp);///关闭文件
printf("\n该条记录已经写入文件 list.txt,请前往查看!\n");
switch(ss[n].pid)///借用foreach()函数里的代码,详情请参考foreach()函数
{
case 1:///当ss[i].pid为1的时候,也就是当产品代号为1的时候
switch(ss[n].sid)///查看销售代码
{
///当销售代码为1的时候,累加1号销售员编号为1的产品的销售额
case 1:s[0][0]+=ss[n].sn;break;
///当销售代码为2的时候,累加2号销售员编号为1的产品的销售额
case 2:s[1][0]+=ss[n].sn;break;
///当销售代码为3的时候,累加3号销售员编号为1的产品的销售额
case 3:s[2][0]+=ss[n].sn;break;
///当销售代码为4的时候,累加4号销售员编号为1的产品的销售额
case 4:s[3][0]+=ss[n].sn;break;
}
break;
///以下代码同理可得
case 2:
switch(ss[n].sid)
{
case 1:s[0][1]+=ss[n].sn;break;
case 2:s[1][1]+=ss[n].sn;break;
case 3:s[2][1]+=ss[n].sn;break;
case 4:s[3][1]+=ss[n].sn;break;
}
break;
case 3:
switch(ss[n].sid)
{
case 1:s[0][2]+=ss[n].sn;break;
case 2:s[1][2]+=ss[n].sn;break;
case 3:s[2][2]+=ss[n].sn;break;
case 4:s[3][2]+=ss[n].sn;break;
}
break;
case 4:
switch(ss[n].sid)
{
case 1:s[0][3]+=ss[n].sn;break;
case 2:s[1][3]+=ss[n].sn;break;
case 3:s[2][3]+=ss[n].sn;break;
case 4:s[3][3]+=ss[n].sn;break;
}
break;
case 5:
switch(ss[n].sid)
{
case 1:s[0][4]+=ss[n].sn;break;
case 2:s[1][4]+=ss[n].sn;break;
case 3:s[2][4]+=ss[n].sn;break;
case 4:s[3][4]+=ss[n].sn;break;
};
break;
}
n++;
choice();
}
/**删除便条信息流程:新建一个临时文件,将不被删除的便条信息存到临时文件里,
然后删除原文件,再将临时文件改名为原文件的文件名**/
void deleteing()
{
printf("请输入您要删除的便条的信息:销售代码,产品代码,销售额\n");
int a,b,c;///存用户需要删除的便条的信息
scanf("%d %d %d",&a,&b,&c);
printf("请稍等,您选择的便条正在删除~~~\n");
FILE *fin,*ftp;
int x,y,z;
fin=fopen("d:\\list.txt","r");///读打开原文件list.txt
ftp=fopen("d:\\tmp.txt","w");///写打开临时文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("文件打开失败!\n");
exit(0);
}
int m=0;///该变量是控制写入文本是首行不自动换行
for(int i=0;!feof(fin);i++)
{
fscanf(fin,"%d %d %d\n",&x,&y,&z);///从原文件读取到的一行数据放到x,y,z三个变量中
if(x==a&&y==b&&z==c)///所有的数据相等,说明是要删除的便条,则不写入临时文件
continue;
else///将不是要删除的其他便条信息写入临时文件
{
if(m==0)
{
fprintf(ftp,"%d\t%d\t%d",x,y,z);///不是则将这一行写入临时文件tmp.txt
m++;
}
else
fprintf(ftp,"\n%d\t%d\t%d",x,y,z);///不是则将这一行写入临时文件tmp.txt
}
}
fclose(fin);
fclose(ftp);
system("DEL/f d:\\list.txt");///删除原文件,如果删除错误,会报原因
///unlink("d:\\list.txt");///删除原文件
rename("d:\\tmp.txt","d:\\list.txt");///将临时文件名改为原文件名
printf("您选择的便条已经删除,请打开文件查看!\n");
clearing();
readdata();
foreach();
choice();
}
///清空之前所统计的原文件里的销售员和销售产品所对应的销售额
void clearing()
{
for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
s[i][j]=0;
}
}
完整代码:
https://blog.csdn.net/lz161530245/article/details/84669415
题主,这个问题我来替你解决,若有帮助,还望采纳,点击回答右侧采纳即可。
代码参考如下:
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include<string.h>
typedef struct //定义结构体变量
{
char date[10]; //表单日期
int c; //销售员号
int c1; //产品号
int c2;
int c3;
int c4;
int c5;
} CP;
int main() //主函数
{
int caidan(); //声明函数
int shur();
int xianshi();
int chazhao();
int zengjia();
int xiugai();
int tongji();
int a,i;
caidan();
printf("\n输入序号选择程序:");
for(i=1;;i++)
{
scanf("%d",&a);
switch(a)
{
case 1:caidan(); //主菜单
break;
case 2:system("cls");
shur(); //便条输入
break;
case 3:system("cls");
xianshi(); //显示所有便条
break;
case 4:system("cls");
chazhao(); //查找数据
break;
case 5:system("cls");
zengjia(); //增加便条
break;
case 6:system("cls");
xiugai(); //修改便条
break;
case 7:system("cls");
tongji(); //统计表单
break;
}
if(a==0)
{
break;
}
printf("\n输入序号选择程序:");
}
return 0;
}
int caidan() //菜单函数
{
printf("\n1:菜单\n2:输入\n3:显示\n4:查找\n5:追加\n6:修改\n7:统计\n0:退出\n");
}
int shur() /*便条输入*/
{
int i=0,num; //定义变量
FILE *fp;
CP t[100];
printf("请输入要写的便条条数:\n");
scanf("%d",&num);
printf("日期 销售员 b1 b2 b3 b4 b5 ");
for(i=0; i<num; i++)
//获取数据
{
printf("\n--------------------------------------------------------------\n");
scanf("%s\t%d\t%d\t%d\t%d\t%d\t%d",&t[i].date,&t[i].c,&t[i].c1,&t[i].c2,&t[i].c3,&t[i].c4,&t[i].c5);
}
if((fp=fopen("d:\\销售记录表.txt","ab"))==NULL)
{
printf("不能打开文件\n");
exit(1);
}
for(i=0; i<num; i++)
{
fprintf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5); //打印数据到文档中
fprintf(fp,"\r\n");
}
fclose(fp);
printf("\n--------------------------------------------------------------\n");
printf("输入成功,按空格结束,并返回主菜单\n");
getch();
caidan(); //主菜单
}
int xianshi() //输出表单
{
FILE *fp;
char ch;
if((fp=fopen("D:\\销售记录表.txt","r"))==NULL)
{
printf("0000");
exit(0);
}
rewind(fp);
printf("表单:\n日期\t销售员\t1号\t2号\t3号\t4号\t5号\n");
printf("\n--------------------------------------------------------------\n");
while((ch=fgetc(fp))!=EOF)
{
putchar(ch);
}
printf("\n--------------------------------------------------------------\n");
fclose(fp);
printf("输出成功,按空格结束,并返回主菜单\n");
getch();
caidan(); //主菜单
}
int chazhao() //查找数据
{
FILE *fp;
int i=0,a,b,n=0,k=1;
char ch;
CP t[100];
if((fp=fopen("D:\\销售记录表.txt","r"))==NULL)
{
printf("0000");
exit(0);
}
printf("查找销售员请输入1\n查找产品请输入2\n退出请输入3\n");
scanf("%d",&a);
if(a==1)
{
while(fscanf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",&t[i].date,&t[i].c,&t[i].c1,&t[i].c2,&t[i].c3,&t[i].c4,&t[i].c5)!=EOF) //提取数值
{
i++;
n++;
}
fclose(fp);
printf("输入销售员编号:");
scanf("%d",&b);
printf("\n");
printf("表单:\n日期\t销售员\t1号\t2号\t3号\t4号\t5号\n");
printf("\n--------------------------------------------------------------\n");
for(i=0;i<=n;i++)
if(t[i].c==b)
{
printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
k=0;
}
if(k)
printf("无记录\n");
printf("输出成功,按空格结束,并返回主菜单\n");
getch();
caidan(); //主菜单
}
if(a==2)
{
while(fscanf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d",&t[i].date,&t[i].c,&t[i].c1,&t[i].c2,&t[i].c3,&t[i].c4,&t[i].c5)!=EOF)
{
i++;
n++;
}
fclose(fp);
printf("输入产品编号:");
scanf("%d",&b);
printf("\n");
printf("表单:\n日期\t销售员\t1号\t2号\t3号\t4号\t5号\n");
printf("\n--------------------------------------------------------------\n");
switch(b)
{
case 1:for(i=0;i<n;i++)
if(t[i].c1!=0)
printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
break;
case 2:for(i=0;i<n;i++)
if(t[i].c2!=0)
printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
break;
case 3:for(i=0;i<n;i++)
if(t[i].c3!=0)
printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
break;
case 4:for(i=0;i<n;i++)
if(t[i].c4!=0)
printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
break;
case 5:for(i=0;i<n;i++)
if(t[i].c5!=0)
printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t\n",t[i].date,t[i].date,t[i].c,t[i].c1,t[i].c2,t[i].c3,t[i].c4,t[i].c5);
break;
}
printf("输出成功,按空格结束,并返回主菜单\n");
getch();
caidan(); //主菜单
}
if(a==3)
{
printf("按空格结束,并返回主菜单\n");
getch();
caidan(); //主菜单
}
}
实现上述功能的管理系统的框架如下:首先,系统可以具有一个文件用于输入和存储便条信息。然后实现便条信息的读取、计算和排序功能,由程序根据销售员的编号和产品的编号读取便条中的销售额,然后计算每个人每种产品的销售额,将销售额排序保存到排序结果数组中。并且统计每种产品的总销售额,对产品按销售额从高到低进行排序,将排序结果保存到排序结果数组中。最后,使用链表支持增加、删除和修改便条信息,将更新后的信息保存至文件中。