大家都来看下:功能为什么不能完全实现?
/* This program is designed by ********* 2007
TC 2.0开发
我们假设这个商店有四个销售员,他们分别负责五种产品(销售员编号1-4,产品编号1-5)。每个销售员都将当天出售的每种商品单独做个记录。
该记录包括:
(1)销售代号;
(2)产品代号;
(3)该产品当天的销售额;
每个销售员每天可能上缴0-5张便条。
假设,每天记录到电脑。编写一个销售系统,读取上个月的销售情况(自己设定)进行如下处理:
(1)计算上个月每个人每种产品的销售额;
(2)按销售额对销售员进行排序,输出排序结果(销售代号);
(3)统计每种产品的总销售额,对这些产品按从高到低的顺序输出排序 结果(需输出产品的代号和销售额);
(4)输出一个统计报表如下:
产品代号 销售之和
销售员代号 1 2 3 4 5
1
2
3
4
每种产品之和 总和
*/
#include "stdio.h "/*输入输出函数*/
#include "stdlib.h "/*通用应用程序函数*/
#include "string.h "/*字符串函数*/
#include "ctype.h "/*字符操作函数*/
typedef struct /*定义结构体变量*/
{int name;
int a1;
int a2;
int a3;
int a4;
int a5;
}RECODE;
int menu_select();/*声明函数*/
int enter(RECODE t[]);/*声明函数*/
void worker(RECODE t[],int n);/*声明函数*/
int sum(RECODE t[],int n,int m);/*声明函数*/
void list1(RECODE t[],int n);/*声明函数*/
void list2(RECODE t[],int n);/*声明函数*/
void list3(RECODE t[],int n);/*声明函数*/
void save(RECODE t[],int n);/*声明函数*/
int load(RECODE t[]);/*声明函数*/
main()/*主函数*/
{int i;
RECODE rec[600];
int length;
system( "cls "); /*清屏*/
for( ; ; )/*无限循环*/
{switch(menu_select())/*根据用户的选择判断该调用哪个功能函数*/
{case 0:length=enter(rec);break;
case 1:worker(rec,length);break;
case 2:list1(rec,length);break;
case 3:list2(rec,length);break;
case 4:list3(rec,length);break;
case 5:save(rec,length);break;
case 6:length=load(rec);break;
case 7:exit(0);}}
}
int menu_select()/*菜单函数*/
{int n;
system( "cls "); /*清屏*/
printf( "--------------------------------menu------------------------------\n\n ");
printf( " 0 enter the record\n ");
printf( " 1 saling num each person per month\n ");
printf( " 2 the sequence of people due to saling number\n ");
printf( " 3 sum of every product\n ");
printf( " 4 the list of recodes\n ");
printf( " 5 save the file\n ");
printf( " 6 load the file\n ");
printf( " 7 quit\n ");
printf( "---------------------------------end---------------------------\n\n ");
printf( " please input your choice: ");
scanf( "%d ",&n);
return n;}
int enter(RECODE t[])/*清单输入函数*/
{int i,num;
system( "cls "); /*清屏*/
printf( "please input the num of recode: ");
scanf( "%d ",&num);/*输入所要写入的清单的条数*/
printf( "name product1 product2 product3 product4 product5 ");
for(i=0;i <num;i++)/*将所输入的条数存入结构体数组中*/
{printf( "\n\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);
}
printf( "\n----------------------------------\n\n\n ");
return i;
}
void worker(RECODE t[],int n)
{int i,s;
int b1=0,b2=0,b3=0,b4=0,b5=0;
system( "cls "); /*清屏*/
printf( "please input the code of salor: ");
scanf( "%d ",&s);/*输入所要查看的售货员的代号*/
for(i=0;i <n;i++)/*对每种产品的销售额求和*/
if(s==t[i].name)
{b1+=t[i].a1;
b2+=t[i].a2;
b3+=t[i].a3;
b4+=t[i].a4;
b5+=t[i].a5;}
printf( "name product1 product2 product3 product4 product5 ");
printf( "\n--------------------------------------\n ");
printf( "%-15d%-10d%-10d%-7d%-7d%-7d ",s,b1,b2,b3,b4,b5);
printf( "\n\ninput any key to continue.......\n\n ");
getchar();
}
int sum(RECODE 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 (RECODE 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( "the sequce of salor*saling number from many to few*\n ");
for(i=0;i <4;i++)/*输出销售员代号*/
printf( "%d\n ",m[i]);
printf( "press any key to continue....... ");
getchar();
}
void list2(RECODE t[],int n)
{int i,j,s;
int c[5],m[5];
for(i=0;i <5;i++)/*产品代号*/
m[i]=i+1;
for(i=0;i <5;i++)/*给数组赋初值*/
c[i]=0;
for(i=0;i <n;i++)/*分别对每一种产品的销售额求总和*/
for(j=0;j <5;j++)
{if(m[j]==t[i].a1)
c[j]+=t[i].a1;
if(m[j]==t[i].a2)
c[j]+=t[i].a2;
if(m[j]==t[i].a3)
c[j]+=t[i].a4;
if(m[j]==t[i].a5)
c[j]+=t[i].a5;}
for(i=0;i <5;i++)/*按销售额对产品排序*/
for(j=i+1;j <5;j++)
{if(c[i] <c[j])
{s=c[i];c[i]=c[j];
c[j]=s;
s=m[i];m[i]=m[j];
m[j]=s;}}
system( "cls "); /*清屏*/
printf( "product num ");
for(i=0;i <5;i++)/*输出产品的代号和销售额*/
printf( "%-10d%-10d\n ",m[i],c[i]);
printf( "please input any key to continue ......\n ");
getchar();}
void list3(RECODE t[],int n)
{int i,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
int c[4],b1[4],b2[4],b3[4],b4[4],b5[4];
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( "-------------------------the lise of saling recode----------------------\n\n\n ");
printf( " products saling num\n ");
printf( "salor code 1 2 3 4 5\n ");
for(i=0;i <4;i++)
printf( "%-10d%-7d%-7d%-7d%-7d%-7d%-7d\n ",i+1,b1[i],b2[i],b3[i],b4[i],b5[i],c[i]);
printf( "each product sum %-7d%-7d%-7d%-7d%-7d%-7d ",sum1,sum2,sum3,sum4,sum5,sum0);
printf( "input any key to continue....... ");
getchar();
}
void save(RECODE t[],int n)
{
int i;
FILE *fp;/*调用fopen函数*/
if((fp=fopen( "record.txt ", "wb "))==NULL)/*如果函数带回一个空指针值*/
{
printf( "can not open file\n ");/*不能打开文件*/
exit(1);
}
printf( "\nSaving file\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);/*将便条的信息输出到fp指向的文件上*/
fprintf(fp, "\r\n ");
}
fclose(fp);/*关闭文件*/
printf( "****save success***\n\n ");/*显示保存成功*/
printf( "press any key to continue...... ");
getchar();
}
int load(RECODE t[])
{
int i,n;
FILE *fp;
if((fp=fopen( "record.txt ", "rb "))==NULL)/*如果函数带回一个空指针值*/
{
printf( "can not open file\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);/*从fp指向的文件上读入便条信息*/
fclose(fp);
printf( "You have success read data from file!!!\n ");/*成功读入信息*/
return n;
printf( "press any key to continue......\n\n ");
getchar();
}
8个选择,发现功能实现很差,请大家帮忙找下…………
[解决办法]
好长,楼下的上。。。
[解决办法]
还可以,没有什么错误
[解决办法]
你的好多个for循环都没有加括号,很容易出现逻辑错误,编译程序不能发现逻辑错误,你的功能恐怕大部分都没实现吧.另外程序的健壮性不太好,几乎没有容错处理,建议在实用每个假设的参数之前加上assert.