if(data[k].month==m&&data[k].Sno==i&&data[k].Pno==j)
{
sum=sum+data[k].sum;所做的事情。
然后我将计算的结果存放在下面的一个表(表二)里。
这个表在程序中可以定义成一个二维数组:
intSum[R+1][Z+1];然后将数组里面的数据输出。
这便是函数f2()的功能。
产品代号(Pno)
销售员代号
(Sno)
1
2
3
4
5
1
0
3
0
0
0
2
0
0
0
12
9
3
11
0
0
6
0
4
0
0
8
0
0
表二
3.按销售额对销售员进行排序,输出排序结果(销售员代号)
然后题目中要求我按销售额对销售员进行排序,输出排序结果(销售员代号),于是我对上面的二维数组进行计算求每个销售员(行)的销售额。
这便是程序中这块代码for(i=1;i<=R;i++)
{
s=0;
for(j=1;j<=Z;j++)
{
s=s+Sum[i][j];所做的事情。
然后我将计算的结果按照销售员编号又写入到表一里,这就是程序中这块代码data[i].sum=s;所做的事情。
然后对结构体数组中按销售额进行排序,这就是程序中这块代码for(j=1;j<=R;j++)
{
data[j].Sno=j;
}
for(j=1;j<=R;j++)//使用冒泡排序法进行排序
{
for(i=1;i<=R-j;i++)
{
if(data[i].sum>data[i+1].sum)
{
k=data[i].Sno;//对销售员编号进行排序
data[i].Sno=data[i+1].Sno;
data[i+1].Sno=k;
temp=data[i].sum;//对销售额进行排序
data[i].sum=data[i+1].sum;
data[i+1].sum=temp;
}
}
}所的事情。
以上就是函数f3()完成的功能。
4.统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)
然后题目中要求我按每种产品进行销售额统计,其实这个跟第三个功能很类似,这是对二维数组里面的每种产品(列)进行销售额的统计。
只要将功能三的程序中行列换一下就行。
这便是f4()完成的功能。
三、总体设计
1.程序设计组成框图
2.程序设计流程图
四、详细设计
1、功能函数f1()
函数的功能:
计算上个月每个人每种产品的销售额
函数的入口:
从main()的switch()开关结构中进入,即choice的值为1时进入该函数,然后提示用户通过键盘对该月的员工销售情况进行数据的读入。
函数调用关系:
被主函数调用。
由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:
当输入完数据,直接调用菜单,进行下一步的选择。
2、功能函数f2()
函数的功能:
计算上个月每个人每种产品的销售额
函数的入口:
从main()的switch()开关结构中进入,即choice的值为2时,进入该函数对数据的处理。
函数调用关系:
被主函数调用。
由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:
处理完数据后,结果已经输出到屏幕上时,直接调用菜单,进行下一步的选择。
3、功能函数f3()
函数的功能:
按销售额对销售员进行排序,输出排序结果。
函数的入口:
程序从main()的switch()开关结构中进入,即choice的值为3时,开始进入该函数,进入函数后,利用冒泡排序法,按销售员的所选产品的总销售额对销售员进行排序。
函数调用关系:
被主函数调用。
由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:
当输出排序结果显示在屏幕上,直接调用菜单,进行下一步的选择。
4、功能函数f4()
函数的功能:
统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)
函数的入口:
从main()的switch()开关结构中进入,即choice的值为4的时侯,进入该函数,然后统计每种产品的总销售额。
将计算后的总销售额进行排序,最终把排序的结果输出在屏幕上。
函数调用关系:
被主函数调用。
由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:
当排序结果输出到屏幕上,直接调用菜单,进行下一步的选择。
图-写入销售数据界面
5、功能函数主菜单menu()
图-主菜单界面
函数的功能:
主要作用是提示用户操作,体现模块化思想,主要是显示出菜单让用户选择要进行的任务。
函数的入口:
从主函数main()中的system("pause");/*清屏命令*/menu();/*菜单函数提示用户怎样选择*/进入函数,这是直接被主函数main()调用的。
函数调用关系:
被主函数调用。
并在文中无返回值的空值void函数。
函数的出口:
执行完所有函数后选择菜单里面的选择操作可以退出该函数。
6、功能函数主函数main()
软件进入提示页面
函数的功能:
用于联系各个功能函数模块,以及退出程序时的退出画面提示。
函数的入口:
整个程序是从主函数开始的。
函数的出口:
当从main()的switch()开关结构中进入,即choise的值为5时通过break;跳出for循环,然后退出main()函数,即:
退出整个程序。
函数调用关系:
该函数不被其它函数调用
五、调试与测试
在写程序的过程中,大大小小的问题其实是很多的,然后进行不断的修改,才使程序最终几乎达到完美。
在写程序时,有些错误是一眼就能看出的,但也有很多是很难发现的,于是我就使用单步调试法进行调试。
六、关键源程序清单和执行结果
源程序:
#include
usingnamespacestd;
#defineN100
#defineZ5//定义宏常量便于程序的一般化,Z表示产品的个数
#defineR4//R表示销售员个数
structBiantiao
{
intSno;
intPno;
intsum;
intmonth;
};
intSum[R+1][Z+1];
structBiantiaodata[N];
intNUM=0;
intA[R];
voidmenu()
{
cout<<"\t┏━━━━━━━━━━━━主菜单━━━━━━━━━━┓\n"<cout<<"\t┃1.输入销售情况┃\n"<cout<<"\t┃2.计算上个月每个人每种产品的销售额┃\n"<cout<<"\t┃3.按销售量对销售员进行排序,输出排序结果┃\n"<cout<<"\t┃4.统计每种产品的总销售额,输出排序结果┃\n"<cout<<"\t┃5.结束操作┃\n"<cout<<"\t┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"<}
voidf1()
{
intj;//用于定义职工序号,产品序号,产品数量,月份
cout<<"请输入便条数目:
"<cin>>NUM;//输入便条数目
for(j=0;j{
cout<<"请输入:
\n职工编号产品编号销售数量月份\n"<cin>>data[j].Sno>>data[j].Pno>>data[j].sum>>data[j].month;
}
}
voidf2()
{
inti,j,m;
cout<<"你想计算哪个月?
"<cout<<"请您输入月份:
"<cin>>m;//输入月份
//对每个人每种产品进行销售额统计
for(i=1;i<=R;i++)
for(j=1;j<=Z;j++)
{
intsum=0;
for(intk=0;kif(data[k].month==m&&data[k].Sno==i&&data[k].Pno==j)
{
sum=sum+data[k].sum;
Sum[i][j]=sum;//统计的结果存放在二维数组Sum里面
}
}
cout<<"输出该月每个人每种产品的销售额如下:
\n"<cout<<"销售员代号产品代号销售之和\n"<for(i=1;i<=R;i++)
for(j=1;j<=Z;j++)
{
cout<
}
}
voidf3()
{
intk=0;
inti,j,m,temp;
cout<<"你要哪个月的?
\n"<cout<<"请输入月份:
"<cin>>m;//输入月份
ints=0;
for(i=1;i<=R;i++)
{
s=0;
for(j=1;j<=Z;j++)
{
s=s+Sum[i][j];//对二维数组里面的每个销售员进行销售额统计
data[i].sum=s;//计算的销售额之和存放在结构体数组中
}
}
for(j=1;j<=R;j++)
{
data[j].Sno=j;
}
for(j=1;j<=R;j++)//使用冒泡排序法进行排序
{
for(i=1;i<=R-j;i++)
{
if(data[i].sum>data[i+1].sum)
{
k=data[i].Sno;//对销售员编号进行排序
data[i].Sno=data[i+1].Sno;
data[i+1].Sno=k;
temp=data[i].sum;//对销售额进行排序
data[i].sum=data[i+1].sum;
data[i+1].sum=temp;
}
}
}
cout<<"从低到高的排序结果为:
"<for(intl=1;l<=R;l++)
{cout<<"员工"<销售额为:
"<}
}
voidf4()
{
intk=0;
inti,j,m,temp;
cout<<"你要哪个月的?
\n"<cout<<"请输入月份:
"<cin>>m;
ints=0;
for(i=1;i<=Z;i++)
{
s=0;
for(j=1;j<=R;j++)
{
s=s+Sum[j][i];//对二维数组里面的每个产品进行销售额统计
data[i].sum=s;//计算的销售额之和存放在结构体数组中
}
}
for(j=1;j<=Z;j++)
{
data[j].Pno=j;
}
for(i=1;i<=Z;i++)//使用冒泡排序法进行排序
{
for(j=1;j<=Z-i;j++)
{
if(data[j].sum{
k=data[j].Pno;//对产品编号进行排序
data[j].Pno=data[j+1].Pno;
data[j+1].Pno=k;
temp=data[j].sum;//对销售额进行排序
data[j].sum=data[j+1].sum;
data[j+1].sum=temp;
}
}
}
cout<<"从高到低的排序结果为:
"<for(intl=1;l<=Z;l++)
{cout<<"产品号"<销售额为:
"<}
}
voidmain()
{
inti,choice;
cout<<"\n\n\n\n\n\n\t━━━━━━━━━━━━━━━━━━━━━━━━━\n"<cout<<"\t---------------欢迎进入商品销售系统!
-------------\n"<cout<<"\t━━━━━━━━━━━━━━━━━━━━━━━━━\n"<cout<<"\n\n\n\n\n\n\t\t\t按任意键进入主菜单!
"<system("pause");
for(i=0;;i++)
{
menu();//主菜单函数提示用户怎样选择
cout<<"你想做什么?
\n"<cout<<"请选择:
"<cin>>choice;
if(choice==5)
{
cout<<"\n\n\n\n\n\n\t━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"<cout<<"\t---------------谢谢使用商品销售系统!
-------------\n\n"<cout<<"\t━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"<cout<<"\n\n\n\n\n\n\t\t\t按任意键退出!
(^.^)"<break;//退出整个程序
}
else
switch(choice)
{
case1:
f1();break;//输入销售情况
case2:
f2();break;//计算上个月每个人每种产品的销售额
case3:
f3();break;//按销售量对销售员的销售情况进行排序,并且输出排序的结果
case4:
f4();break;//统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)
}
}
}
执行结果:
七、参考文献
1.王红梅.数据结构.清华大学出版社
2.王红梅.数据结构学习辅导与实验指导.清华大学出版社
3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社