销售信息统计管理系统一.任务描述某公司有4个销售员,负责销售5种产品。
每个销售员都将当日销售的每种产品各写一张便条提交给公司。
每张便条内容有:1、销售员的编号2、销售产品的代号产品3、产品销售量根据需求,此系统提供以下功能:1、以菜单界面呈现。
2、信息录入功能。
3、信息查询功能。
(包括查询某销售员的各产品销售量,某种产品的销售总量,某销售员的总销售额)4、销量排序功能。
5、生成统计报表功能。
本系统采用结构体数组以及数据文件的技术,将输入的数据用结构体数组保存,并提供文件的保存与读取。
在程序中要进行统计工作,所以提供显示、排序等操作,另外应提供键盘式选择菜单实现功能选择本程序使用C语言。
此程序在vc++6.0上调试通过。
二.功能实现设计1.总体设计根据上面的分析,将这个程序分为四大模块。
——1.销售信息录入。
2.查询信息3.文件的保存。
4.文件的读取查询系统包括1.各个销售员销售额。
2.销售总额以及排序。
3各产品销售总额及热度。
4.总信息统计生成报表。
2.流程图3.详细设计①【数据结构】typedef struct {int name;int a1;int a2;int a3;int a4;int a5;}SYS;/*定义数组*/②【功能函数声明】int menu();/*选择菜单函数声明*/int menu_1();/*子菜单函数声明*/int enter(SYS t[]);/*进入函数声明*/void salor(SYS t[],int n);/*声明函数*/int sum(SYS t[],int n,int m);/*统计函数声明*/void list1(SYS t[],int n);/*菜单1函数声明*/void list2(SYS t[],int n);/*菜单2函数声明*/void list3(SYS t[],int n);/*菜单3函数声明*/void save(SYS t[],int n);/*保存文件函数声明*/int load(SYS t[]);/*读取函数声明*/SYS ste[100];int len;/*全局变量定义*/③【主函数】void main(){ system("cls");for( ; ; ){switch(menu())/*根据用户的选择判断该调用哪个功能函数*/ {case 1:len=enter(ste);break;case 2:menu_1();break;case 3:save(ste,len);break;case 4:len=load(ste);break;case 0:exit(0);}}}④【主菜单函数】打印出菜单功能选项,包括便条清单输入、信息查询、储存文件、读取文件和退出5个选项。
根据用户的选择判断该调用哪个功能函数,则输入相应的选项代号n(0-4)以运行该功能选项。
如下图所示⑤【清单输入函数】int enter(SYS t[])清屏之后输出提示语“请输入便条的信息”,按提示语输入便条信息,输入数据的同时,已将该信息存入开始已定义的结构体数组typedef struct SYS t[ ]中,以便在排序功能选项、统计功能选项、输出清单列表选项等功能选项中读取信息,进行编辑,阅读。
输入结束以信息全为零而结束清单输入,返回主菜单。
⑥【便条信息查询函数】void salor(SYS t[],int n)进入查询功能,出现提示语“输入所要查看的售货员的代号”,输入销售员的代号(1-4),通过循环判断读取输入的销售员代号(s)来进行对信息的阅读。
⑦【求和函数】int sum(SYS t[],int n, int e)定义初始值sum=0通过对销售员代号的循环和判断(当销售员代号与传递的e值相同),累加并统计同一个销售员销售不同种产品的销售额信息,返回统计值sum,以便调用。
⑧【排序函数】void list1 (SYS t[],int n)调用求和函数返回的统计值sum (使c[i]=sum(t,n,m[i])),按销售员的总销售额进行从大到小排序,输出销售员的代号m[i]。
⑨【销售额情况的函数调用】void list2(SYS t[],int n)调用求和函数使c[i]=sum(t,n,i+1),累加并统计每个人销售每种产品的总销售额和所有销售员销售的所有产品的总销售额,再将每个人销售每种产品的总销售额放到定义的数组(xs[5]={sum1,sum2,sum3,sum4,sum5})中,按每种产品的总销售额sum[i]循环比较并排序输出产品代号a[i]和总销售额xs[i]。
⑩【销售统计报表输出函数】void list3(SYS t[],int n)类似输出如下表格:销售统计报表产品代号销售之和销售员代号 1 2 3 4 51234每种产品之和总和如下图所示:⑪【保存函数】void save(SYS t[],int n)打开sys.txt文件,如果函数带回一个空指针值if((fp=fopen("sys.txt","wb"))==NULL),则显示“不能打开文件”,非法退出再进行存储文件。
通过文件指针,循环将便条信息输出到fp指向的文件。
关闭文件,显示“*****存储成功*****”,“按任意键继续。
”。
⑫【读取函数】int load(SYS t[]):定义文件指针*fp,循环从fp指向的文件上读入便条信息,关闭文件,显示“成功读取文件信息”,“按任意键继续。
”。
返回n值。
四.主要模块的算法描述1.查询函数流程图2.求和函数流程图3.排序函数流程图如下所示:三.总结与反思通过这次C程序设计,我掌握了模块化设计方法,能够深入的理解结构化程序设计思想,熟练运用结构化程序设计方法,提高了运用C语言进行程序设计的能力。
此外我还熟悉了,对于文件读写的操作。
更重要的是对程序的调试有了显著的提高。
附录:#include <stdio.h>#include <stdlib.h>typedef struct{int name;int a1;int a2;int a3;int a4;int a5;}SYS;int menu();int menu_1();int enter(SYS t[]);void salor(SYS t[],int n);int sum(SYS t[],int n,int m); void list1(SYS t[],int n);void list2(SYS t[],int n);void list3(SYS t[],int n);void save(SYS t[],int n);int load(SYS t[]);SYS ste[100];int len;void main(){system("cls");for( ; ; ){switch(menu()){case 1:len=enter(ste);break; case 2:menu_1();break; case 3:save(ste,len);break; case 4:len=load(ste);break; case 0:exit(0);}}}int menu(){int n;printf(" 销售信息统计管理系统\n");printf("**********************menu**********************\n"); printf("** 1 输入销售信息**\n"); printf("** 2 查询信息**\n"); printf("** 3 储存文件**\n"); printf("** 4 读取文件**\n"); printf("** 0 退出**\n"); printf("***********************end**********************\n\n"); printf(" 请输入你的选择(0-4): ");scanf("%d",&n);if(0<n&&n<5)system("cls");return n;}int menu_1(){int h;printf("**********************menu**********************\n"); printf("** 1 查询每个人每种产品的销售额**\n"); printf("** 2 查询销售员总销售额排行**\n"); printf("** 3 查询各产品的销售总额及热度**\n"); printf("** 4 查询统计报表**\n"); printf("**********************end***********************\n"); printf(" 请输入你的选择(1-4): ");scanf("%d",&h);switch(h){case 1:salor(ste,len);break;case 2:list1(ste,len);break;case 3:list2(ste,len);break;case 4:list3(ste,len);break;}return h;}int enter(SYS t[]){int i;system("cls");printf("请输入便条的信息:");printf("销售员代号产品1 产品2 产品3 产品4 产品5");printf("\n\n退出请输入各信息为0退出!\n");for(i=0;i<1000;i++){printf("\n----------------------------------------------------------------\n");scanf("%d%d%d%d%d%d",&t[i].name,&t[i].a1,&t[i].a2,&t[i].a3,&t[i].a4,&t[i].a5);if((t[i].name==0)&&(t[i].a1==0)&&(t[i].a2==0)&&(t[i].a3==0)&&(t[i].a4==0)&&(t[i].a5==0)) break;}printf("\n----------------------------------------------------------------------\n\n\n");return i;}void salor(SYS t[],int n){int i,s;int b1=0,b2=0,b3=0,b4=0,b5=0;printf("输入所要查看的售货员的代号:");scanf("%d",&s);for(i=0;i<n;i++)if(t[i].name==s){b1+=t[i].a1;b2+=t[i].a2;b3+=t[i].a3;b4+=t[i].a4;b5+=t[i].a5;};printf("销售员代号产品1 产品2 产品3 产品4 产品5\n");printf("--------------------------------------------------------------------------\n"); printf("%-12d%-6d%-6d%-6d%-6d%-6d",s,b1,b2,b3,b4,b5);printf("\n 按任意键继续.\n\n");getchar();}int sum(SYS t[],int n, int e){int i,sum=0;for(i=0;i<=n;i++)if(e==t[i].name){sum+=t[i].a1;sum+=t[i].a2;sum+=t[i].a3;sum+=t[i].a4;sum+=t[i].a5;}return sum;}void list1 (SYS t[],int n){int i,j,s;int c[4],m[4];system("cls");for(i=0;i<4;i++)m[i]=i+1;for(i=0;i<4;i++)c[i]=sum(t,n,m[i]);for(i=0;i<4;i++)for(j=i+1;j<4;j++)if(c[i]<c[j]){s=m[i];m[i]=m[j];m[j]=s;s=c[i];c[i]=c[j];c[j]=s;}printf("从大到小销售员销售额排行榜\n");for(i=0;i<4;i++)printf("%d\n",m[i]);printf("\n 按任意键继续.\n\n");getchar();}void list2(SYS t[],int n){int index,k,s;int i,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0; int c[4],b1[4]={0},b2[4]={0},b3[4]={0},b4[4]={0},b5[4]={0}; system("cls"); ;for(i=0;i<4;i++)c[i]=sum(t,n,i+1);for(i=0;i<4;i++)sum0+=c[i];for(i=0;i<n;i++)for(j=0;j<4;j++){if(j+1==t[i].name){b1[j]+=t[i].a1;b2[j]+=t[i].a2;b3[j]+=t[i].a3;b4[j]+=t[i].a4;b5[j]+=t[i].a5;}}for(i=0;i<4;i++){sum1+=b1[i];sum2+=b2[i];sum3+=b3[i];sum4+=b4[i];sum5+=b5[i];}int xs[5]={sum1,sum2,sum3,sum4,sum5};int a[5]={1,2,3,4,5};for(k=0;k<4;k++){index=k;for(i=k+1;i<5;i++)if(xs[i]>xs[index])index=i;s=xs[index];xs[index]=xs[k];xs[k]=s;s=a[index];a[index]=a[k];a[k]=s;}for(i=0;i<5;i++){printf("产品代号:%-10d",a[i]);printf("总销售额:%-10d\n",xs[i]);}printf("按任意键继续......\n\n");getchar();}void list3(SYS t[],int n){int i,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0; int c[4],b1[4]={0},b2[4]={0},b3[4]={0},b4[4]={0},b5[4]={0}; system("cls"); ;for(i=0;i<4;i++)c[i]=sum(t,n,i+1);for(i=0;i<4;i++)sum0+=c[i];for(i=0;i<n;i++)for(j=0;j<4;j++){if(j+1==t[i].name){b1[j]+=t[i].a1;b2[j]+=t[i].a2;b3[j]+=t[i].a3;b4[j]+=t[i].a4;b5[j]+=t[i].a5;}}for(i=0;i<4;i++){sum1+=b1[i];sum2+=b2[i];sum3+=b3[i];sum4+=b4[i];sum5+=b5[i];}printf("-------------------------销售报表-------------------------\n\n\n");printf(" 销售员序号 1 2 3 4 5 总数\n\n");for(i=0;i<4;i++)printf(" %-7d%-7d%-7d%-7d%-7d%-7d%-7d\n",i+1,b1[i],b2[i],b3[i],b4[i],b5[i],c[i]); printf(" 总和%-7d%-7d%-7d%-7d%-7d%-7d",sum1,sum2,sum3,sum4,sum5,sum0); printf("\n 按任意键继续.......\n\n");getchar();}void save(SYS t[],int n){int i;FILE *fp;if((fp=fopen("steord.txt","wb"))==NULL){printf("不能打开文件\n");exit(1);}printf("\n储存文件\n");fprintf(fp,"%d",n);fprintf(fp,"\r\n");for(i=0;i<n;i++){fprintf(fp,"%-10d%-7d%-7d%-7d%-7d%-7d",t[i].name,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5); fprintf(fp,"\r\n");}fclose(fp);printf("****储存成功****\n\n");printf("按任意键继续......\n\n");getchar();}int load(SYS t[]){int i,n;FILE *fp;if((fp=fopen("steord.txt","rb"))==NULL){printf("不能打开文件\n");exit(1);}fscanf(fp,"%d",&n);for(i=0;i<n;i++)fscanf(fp,"%10d%7d%7d%7d%7d%7d",&t[i].name,&t[i].a1,&t[i].a2,&t[i].a3,&t[i].a4,&t[i].a5); fclose(fp);printf("\n 成功读取文件信息\n");printf("按任意键继续......\n\n");getchar();return n;}。