天天看點

C語言仿超市購物發票列印程式,帶分頁功能

作者:都是雀你是麻還是喜

以前講課的時候,給學生講解編的一個程式

C語言仿超市購物發票列印程式,帶分頁功能

最後1頁,出現總計

C語言仿超市購物發票列印程式,帶分頁功能

第1頁,不出現總計

程式完整代碼

函數調用形式

#include "stdio.h"

#include "stdlib.h"

#include "windows.h"

#define MAX 50

#define LEN 20

//購買商品,并修改商品數量數組,該數組通過傳位址調用

void init_goods_buy(int goods_num[])

{

int i,num;

printf("\n\t說明:\n\t請分别輸入所購買商品的編号\n\t(編号範圍0-%d,不要超過哦,程式不做異常檢查)\n\t和數量(實際購買量)\n",MAX-1);

printf("\t輸入格式采用(商品序号 商品數量)\n\t(用空格隔開哦,然後回車再輸入第二件商品,\n\t以此類推),最後再輸入數字-1 -1作為結束\n");

printf("\n\t下面模拟超市掃描商品過程\n");

for(;1;)

{

printf("\t");

scanf("%d %d",&i,&num);

if(i==-1) break;

if(i>49)

{

printf("編号錯誤,請重新輸入!\n");

continue;

}

goods_num[i]=num;

}

}

//列印商品發票(不分頁)

void print_goods_bill_no(char goods_name[ ][LEN],double goods_pr[],int goods_num[])

{

int i;

double total=0.0;

printf("\n\n\t商品編号 商品名稱 商品單價 商品數量 \t商品小計\n");

printf("\t========================================================\n");

for(i=0;i<MAX;i++)

{

if(goods_num[i]!=0)

if(strlen(goods_name[i])<=8)

printf("\t%-10d%-10s%8.2f%10d%18.2f\n",i,goods_name[i],goods_pr[i],goods_num[i],goods_pr[i]*goods_num[i]);

else

printf("\t%-10d%-.6s... %8.2f%10d%18.2f\n",i,goods_name[i],goods_pr[i],goods_num[i],goods_pr[i]*goods_num[i]);

tot5al+=(goods_pr[i]*goods_num[i]);

}

printf("\t========================================================\n");

printf("\t總計:%50.2f\n",total);

}

//列印商品發票(分頁)

void print_goods_bill_yes(int count,char goods_name[ ][LEN],double goods_pr[],int goods_num[])

{

int i=1,j,k=0;

int order[MAX/5];

double total=0.0;

for(j=0;j<MAX;j++)

if(goods_num[j]!=0)

if(i++%5==1)

order[k++]=j;

if(count<=5)

{

printf("\n\n\t商品編号 商品名稱 商品單價 商品數量 \t商品小計\n");

printf("\t========================================================\n");

if(count==0)

printf("\n\t\t\t無購物資訊!\n\n");

else

{

for(i=0;i<MAX;i++)

{

if(goods_num[i]!=0)

if(strlen(goods_name[i])<=8)

printf("\t%-10d%-10s%8.2f%10d%18.2f\n",i,goods_name[i],goods_pr[i],goods_num[i],goods_pr[i]*goods_num[i]);

else

printf("\t%-10d%-.6s... %8.2f%10d%18.2f\n",i,goods_name[i],goods_pr[i],goods_num[i],goods_pr[i]*goods_num[i]);

total+=(goods_pr[i]*goods_num[i]);

}

}

printf("\t========================================================\n");

printf("\t總計:%50.2f\n",total);

}

else

{

i=1;

for(;;)

{

printf("\n\n\t商品編号 商品名稱 商品單價 商品數量 \t商品小計\n");

printf("\t========================================================\n");

j=0;

for(k=order[i-1];k<MAX;k++)

{

if(goods_num[k]!=0)

{

if(strlen(goods_name[k])<=8)

printf("\t%-10d%-10s%8.2f%10d%18.2f\n",k,goods_name[k],goods_pr[k],goods_num[k],goods_pr[k]*goods_num[k]);

else

printf("\t%-10d%-.6s... %8.2f%10d%18.2f\n",k,goods_name[k],goods_pr[k],goods_num[k],goods_pr[k]*goods_num[k]);

if(++j==5)

break;

}

}

if((count%5==0&&i==count/5)||i==count/5+1)

{

for(j=0;j<MAX;j++)

{

if(goods_num[j]!=0)

total+=(goods_pr[j]*goods_num[j]);

}

printf("\t========================================================\n");

printf("\t總計:%50.2f\n",total);

}

total=0.0;

printf("\n\t|< ");

if(count%5==0)

{

for(i=1;i<=count/5;i++)

printf("%d ",i);

printf(">|\n");

}

else

{

for(i=1;i<=count/5+1;i++)

printf("%d ",i);

printf(">|\n");

}

printf("\n\t請輸入顯示第幾頁商品資訊(請不要超過最大頁數,暫不檢查異常)!");

scanf("%d",&i);

system("cls");

}

}

}

//統計購買的商品數量

int count_goods_num(int goods_num[ ])

{

int i,count=0;

for(i=0;i<MAX;i++)

{

if(goods_num[i]!=0)

++count;

}

return count;

}

void print_line_copyright( )

{

//下面固定輸出版權資訊

//個人根據情況不同,請修改成自己的資訊

int split_num=24,split_i; //後面用,不可删除

char split_line='*'; //後面用,不可删除,可更改*為其他符号

printf("\n\n\t");

//我是分割線

for(split_i=1;split_i<=split_num;split_i++)

printf("%c",split_line);

printf("\n");

printf("\t 班級:XXXXXXX\n");

printf("\t 姓名:XXXXXXX\n");

printf("\t 學号:XXXXXXX\n");

printf("\t 系部:資訊工程系\n\t");

//我是分割線

for(split_i=1;split_i<=split_num;split_i++)

printf("%c",split_line);

printf("\n");

getchar();

}

void main()

{

double goods_pr[MAX]={1.2,2.3,3.1,2.5,2.8,4.2,2.15,3.05,5.5,6.1,14.3,50.2,15.8,24.6,20.3,15.3,14.0,18.6,21.5,22.5,1.2,2.3,3.1,2.5,2.8,4.2,2.15,3.05,5.5,6.1,14.3,50.2,15.8,24.6,20.3,15.3,14.0,18.6,21.5,22.5,5.5,6.1,14.3,50.2,15.8,24.6,20.3,15.3,14.0,18.6};

char goods_name[MAX][LEN]={"火龍果","桃子","梨","蘋果","猕猴桃","康師傅友善面","娃哈哈礦泉水","冰糖雪梨","辣條","榨菜","大蔥","香菜","胡蘿蔔","大白菜","豬頭肉","五香牛肉","手帕紙","旺旺雪餅","豆腐","烤蕃薯","商品1","商品2","商品3","商品4","商品5","商品6","商品7","商品8","商品9","商品10","商品11","商品12","商品13","商品14","商品15","商品16","商品17","商品18","商品19","商品20","商品21","商品22","商品23","商品24","商品25","商品26","商品27","商品28","商品29","商品30"};

int goods_num[MAX]={0};

int count;

//調用選購商品功能代碼

init_goods_buy(goods_num);

count=count_goods_num(goods_num);

//清屏吧

system("cls");

//調用列印發票結賬功能代碼(不分頁)

//print_goods_bill_no(goods_name,goods_pr,goods_num);

//調用列印發票結賬功能代碼(分頁)

print_goods_bill_yes(count,goods_name,goods_pr,goods_num);

//調用列印分割線和版權資訊功能代碼

print_line_copyright( );

getchar();

}