📄 design.c
字号:
ub[l].custId=c[i].custId;
strcpy(ub[l].custName,c[i].custName);
strcpy(ub[l].userNbr,b[j].userNbr);
ub[l].localFormerFee=b[j].localFee;
ub[l].ldFormerFee=b[j].ldFee;
l++;
cb[i].localFee+=b[j].localFee; /*计算客户初始市话费用*/
cb[i].ldFee+=b[j].ldFee; /*计算客户初始长话费用*/
}
}
kind=2; /*2种话费*/
for(k=0;(k<line3)&&kind&&count;k++) /*各种话费分析过后,结束循环*/
{
if(c[i].localRuleId==d[k].ruleId) /*查找市话优惠计算规则*/
{
kind--;
switch(d[k].ruleType) /*选择优惠计算规则*/
{
case 'a': /*直接折扣*/
cb[i].localFee=simpleDisct(cb[i].localFee,d[k]); /*计算客户市话费用*/
break;
case 'b': /*封顶保底*/
cb[i].localFee=boundDisct(cb[i].localFee,d[k]); /*计算客户市话费用*/
break;
case 'c': /*保底打折*/
cb[i].localFee=baseDisct(cb[i].localFee,d[k]); /*计算客户市话费用*/
break;
default:
printf("Data Error!\n"); /*处理非法数据*/
}
}
if(c[i].ldRuleId==d[k].ruleId) /*查找长话优惠计算规则*/
{
kind--;
switch(d[k].ruleType) /*选择优惠计算规则*/
{
case 'a': /*直接折扣*/
cb[i].ldFee=simpleDisct(cb[i].ldFee,d[k]); /*计算客户长话费用*/
break;
case 'b': /*封顶保底*/
cb[i].ldFee=boundDisct(cb[i].ldFee,d[k]); /*计算客户长话费用*/
break;
case 'c': /*保底打折*/
cb[i].ldFee=baseDisct(cb[i].ldFee,d[k]); /*计算客户长话费用*/
break;
default:
printf("RuleType Error!\n"); /*处理非法数据*/
}
}
}
cb[i].Fee=cb[i].localFee+cb[i].ldFee; /*计算客户话费*/
repartDisctResult(c[i],cb[i],ub); /*优惠结果摊分*/
}
}
/*
函数功能:按用户号码查询费用清单
函数参数:结构体数组ub[],表示用户帐单
整形变量n,表示所查询的用户号码
函数返回值:无
*/
int srchByCustNbr(struct UserBill ub[])
{
char s[100]; /*定义字符数组s,表示所查询的用户号码*/
int n=0; /*定义整形变量n,表示客户编码*/
int i; /*用户帐单结构数组的下标*/
int flag=1; /*置标志为真*/
printf("Please input the number you search: (for example 83490000 )\n"); /*提示输入所要查询的用户号码*/
scanf("%s",s);
printf("\n\n");
for(i=0;i<line1;i++)
{
if(strcmp(s,ub[i].userNbr)==0) /*查找用户号码*/
n=ub[i].custId; /*记录客户编码*/
}
for(i=0;i<line1&&n;i++) /*客户存在情况下查找所属用户*/
{
if(flag)
{
printf("客户编码 客户名称 用户号码 市话原费用 市话优惠结果 长话原费用 长话优惠结果 优惠后费用合计\n");
flag--; /*若找到,置标志为假*/
}
if(ub[i].custId==n)
/*显示费用清单*/
printf("%5d%11s%10s%9g%12g%11g%11g%11g\n",
ub[i].custId,
ub[i].custName,
ub[i].userNbr,
ub[i].localFormerFee,
ub[i].localDisctFee,
ub[i].ldFormerFee,
ub[i].ldDisctFee,
ub[i].disctFee
);
}
if(!n) /*若未找到*/
printf("Do not Exist\n");
return 1;
printf("\n\n\n");
}
/*
函数功能:将用户帐单升序排序
函数参数:结构体数组ub[],表示用户帐单
函数返回值:无
*/
void sortUserBill(struct UserBill ub[])
{
struct UserBill temp; /*用户帐单中间变量*/
int i,j,k; /*用户帐单结构数组的下标*/
/*选择法排序*/
for(i=0;i<line1;i++)
{
k=i;
for(j=i+1;j<line1;j++)
{
if(strcmp(ub[k].custName,ub[j].custName)>0) /*客户号码升序排列*/
k=j;
else if( (ub[j].custId==ub[k].custId) &&
(strcmp(ub[k].userNbr,ub[j].userNbr)>0) ) /*用户号码升序排列*/
k=j;
}
if(k!=i)
{ /*交换位置*/
temp=ub[k];
ub[k]=ub[i];
ub[i]=temp;
}
}
}
/*
函数功能:输出用户帐单
函数参数:结构体数组ub[],表示用户帐单
函数返回值:无
*/
void exportUserBill(struct UserBill ub[])
{
FILE *fp; /*文件句柄*/
int i=0; /*用户帐单结构数组的下标*/
/*打开文件*/
if((fp=fopen("UserBill.txt","w"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
/*向fp写数据*/
while((!feof(fp))&&(i<line1))
{
fprintf(fp,"%d %s %s %g %g %g %g %g\n",
ub[i].custId,
ub[i].custName,
ub[i].userNbr,
ub[i].localFormerFee,
ub[i].localDisctFee,
ub[i].ldFormerFee,
ub[i].ldDisctFee,
ub[i].disctFee
);
i++;
}
/*关闭文件*/
fclose(fp);
/*输出用户帐单*/
if(line1) /*判断用户账单结构体数组是否为空*/
{
printf("The userBill:\n\n");
printf("客户编码 客户名称 用户号码 市话原费用 市话优惠结果 长话原费用 长话优惠结果 优惠后费用合计\n");
for(i=0;i<line1;i++)
printf("%5d%11s%10s%9g%12g%11g%11g%11g\n",
ub[i].custId,
ub[i].custName,
ub[i].userNbr,
ub[i].localFormerFee,
ub[i].localDisctFee,
ub[i].ldFormerFee,
ub[i].ldDisctFee,
ub[i].disctFee
);
printf("\n\n\n");
}
else
{
printf("No information exist\n");
printf("Please execute 1--2 steps first\n");
}
}
/*
函数功能:输出客户帐单
函数参数:结构体数组cb[],表示客户帐单
函数返回值:无
*/
void exportCustBill(struct CustBill cb[])
{
FILE *fp; /*文件句柄*/
struct CustBill temp; /*客户帐单中间变量*/
int i,j,k; /*客户帐单结构数组的下标*/
/*选择法排序*/
for(i=0;i<line2;i++)
{
k=i;
for(j=i+1;j<line2;j++)
{
if((cb[j].custId>cb[k].custId)) /*降序排列*/
k=j;
}
/*交换位置*/
if(k!=i)
{
temp=cb[k];
cb[k]=cb[i];
cb[i]=temp;
}
}
i=0;
/*打开文件*/
if((fp=fopen("CustBill.txt","w"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
/*向fp写数据*/
while((!feof(fp))&&(i<line2))
{
fprintf(fp,"%d %s %g %g %g\n",
cb[i].custId,
cb[i].custName,
cb[i].localFee,
cb[i].ldFee,
cb[i].Fee
);
i++;
}
/*关闭文件*/
fclose(fp);
/*输出客户帐单*/
if(line2) /*判断客户账单结构体数组是否为空*/
{
printf("The custBill:\n\n");
printf("客户编码 客户名称 市话费用小计 长话费用小计 费用合计\n");
for(i=0;i<line2;i++)
printf(" %d %s %g %g %g\n",
cb[i].custId,
cb[i].custName,
cb[i].localFee,
cb[i].ldFee,
cb[i].Fee
);
printf("\n\n\n");
}
else
{
printf("No information exist\n");
printf("Please execute 1--2 steps first\n");
}
}
/*
函数功能:显示系统菜单
函数参数:无
函数返回值:无
*/
void menu(void)
{
int i;
char s[100];
while(1)
{
printf("Please input your choice(1 - 7 )\n");
printf("***************************************\n"); /*系统菜单*/
printf("| 1 装载资料 |\n");
printf("| 2 优惠分析 |\n");
printf("| 3 号码查询 |\n");
printf("| 4 升序排列用户账单 |\n");
printf("| 5 输出用户帐单 |\n");
printf("| 6 输出客户帐单 |\n");
printf("| 7 退出系统 |\n");
printf("***************************************\n\n");
scanf("%s",s);
i=atoi(s); /*程序健壮度*/
switch(i)
{
case 1:
loadBasicBill(); /*装载基础帐单资料*/
loadCustInfo(); /*装载客户资料*/
loadDisctRule(); /*装载优惠规则*/
printf("操作已完成,请继续操作\n");
break;
case 2:
analyseCustDisct(basicBillList,custList,
disctRuleList,userBillList,custBillList); /*客户优惠行为分析*/
printf("操作已完成,请继续操作\n");
break;
case 3:
srchByCustNbr(userBillList); /*按客户号码查询费用清单*/
printf("操作已完成,请继续操作\n");
break;
case 4:
sortUserBill(userBillList); /*将用户账单升序排列*/
printf("操作已完成,请继续操作\n");
break;
case 5:
exportUserBill(userBillList); /*输出用户帐单*/
printf("操作已完成,请继续操作\n");
break;
case 6:
exportCustBill(custBillList); /*输出客户帐单*/
printf("操作已完成,请继续操作\n");
break;
case 7:
exit(0); /*退出系统*/
default:
printf("Input Error.\n"); /*处理非法输入*/
}
printf("\n\n");
}
}
void main() /*主程序*/
{
int i;
char s[100];
printf("************************W*E*L*C*O*M*E************************\n"); /*欢迎界面*/
printf("******************* *******************\n");
printf("************** **************\n");
printf("******* 1 进入系统 *********\n");
printf("**** ****\n");
printf("******* 2 退出系统 *********\n");
printf("************** **************\n");
printf("******************* *******************\n");
printf("*************************W*E*L*C*O*M*E***********************\n\n");
printf("Please input your choice(1 or 2 ):\n");
scanf("%s",s);
printf("\n");
i=atoi(s); /*程序健壮度*/
while(1) /*反复循环*/
{
switch(i)
{
case 1: /*进入系统*/
menu();
break;
case 2: /*退出系统*/
exit(0);
default: /*处理非法输入*/
printf("Input Error.\n");
printf("Please input your choice(1 or 2 ):\n");
scanf("%s",s);
printf("\n");
i=atoi(s);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -