-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathINVOICE_GENERATOR.C
197 lines (179 loc) · 6.2 KB
/
INVOICE_GENERATOR.C
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
/*RESORT INVOICE GENERATOR
C LANGUAGE PROJECT
https://github.com/tueuer/INVOICE_GENERATOR.git
https://github.com/tueuer
AUTHOR:-Karankumar Nevage
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct items{
char item[20];
float price;
int qty;
};
struct orders{
char customer[50];
char date[50];
int numOfItems;
struct items itm[50];
};
//functions to generate biils
void generateBillHeader(char name[50],char date[30]){
printf("\n\n");
printf("\t KARANKUMAR NEVAGE RESTAURANT"); //header of invoice
printf("\n\t -----------------");
printf("\nDate:%s",date); //take date itself
printf("\nName: %s",name); //for name of customer
printf("\n");
printf("---------------------------------------\n");
//creating 3 tabular section for items quantity and total like traditional invoice
printf("Items\t\t");
printf("Qty\t\t");
printf("Total\t\t");
printf("\n---------------------------------------");
printf("\n\n");
}
void generateBillBody(char item[30],int qty, float price){
printf("%s\t\t",item);
printf("%d\t\t",qty);
printf("%.2f\t\t",qty * price);
printf("\n");
}
void generateBillFooter(float total){
printf("\n");
float dis = 0.1*total; //for 10 perecent gst calculation
float netTotal=total-dis;
float cgst=0.09*netTotal,grandTotal=netTotal + 2*cgst; //I consider total gst is 18% here
printf("---------------------------------------\n");
printf("Sub Total\t\t\t%.2f",total);
printf("\nDiscount @10%s\t\t\t%.2f","%",dis);
printf("\n\t\t\t\t-------");
printf("\nNet Total\t\t\t%.2f",netTotal);
printf("\nCGST @9%s\t\t\t%.2f","%",cgst);
printf("\nSGST @9%s\t\t\t%.2f","%",cgst);
printf("\n---------------------------------------");
printf("\nGrand Total\t\t\t%.2f",grandTotal);
printf("\n---------------------------------------\n");
}
int main(){
int opt,n;
struct orders ord;
struct orders order;
char saveBill = 'y',contFlag = 'y';
char name[50];
FILE *fp;
//dashboard
while(contFlag == 'y'){
system("clear");
float total = 0;
int invoiceFound = 0;
printf("\t=======> WELCOME TO DASHBOARD <=========\n");
printf("\t==== <KARANKUMAR NEVAGE RESTARUANT>=====\n");
printf("\n\nPlease select your prefered operation");
printf("\n\n1.Generate Invoice");
printf("\n2.Show all Invoices");
printf("\n3.Search Invoice");
printf("\n4.Exit");
printf("\n\nYour choice:\t");
scanf("%d",&opt);
fgetc(stdin);
switch(opt){
case 1:
system("clear");
printf("\nPlease enter the name of the customer:\t");
fgets(ord.customer,50,stdin);
ord.customer[strlen(ord.customer)-1] = 0;
strcpy(ord.date,__DATE__);
printf("\nPlease enter the number of items:\t");
scanf("%d",&n);
ord.numOfItems = n;
for(int i=0;i<n;i++){
fgetc(stdin);
printf("\n\n");
printf("Please enter the item %d:\t",i+1);
fgets(ord.itm[i].item,20,stdin);
ord.itm[i].item[strlen(ord.itm[i].item)-1]=0;
printf("Please enter the quantity:\t");
scanf("%d",&ord.itm[i].qty);
printf("Please enter the unit price:\t");
scanf("%f",&ord.itm[i].price);
total += ord.itm[i].qty * ord.itm[i].price;
}
generateBillHeader(ord.customer,ord.date);
for(int i=0;i<ord.numOfItems;i++){
generateBillBody(ord.itm[i].item,ord.itm[i].qty,ord.itm[i].price);
}
generateBillFooter(total);
printf("\nDo you want to save the invoice [y/n]:\t");
scanf("%s",&saveBill);
if(saveBill == 'y'){
fp = fopen("RestaurantBill.dat","a+");
fwrite(&ord,sizeof(struct orders),1,fp);
if(fwrite != 0)
printf("\nSuccessfully saved");
else
printf("\nError saving");
fclose(fp);
}
break;
case 2:
system("clear");
fp = fopen("RestaurantBill.dat","r");
printf("\n *****Your Previous Invoices*****\n");
while(fread(&order,sizeof(struct orders),1,fp)){
float tot = 0;
generateBillHeader(order.customer,order.date);
for(int i=0;i<order.numOfItems;i++){
generateBillBody(order.itm[i].item,order.itm[i].qty,order.itm[i].price);
tot+=order.itm[i].qty * order.itm[i].price;
}
generateBillFooter(tot);
}
fclose(fp);
break;
case 3:
printf("Enter the name of the customer:\t");
//fgetc(stdin);
fgets(name,50,stdin);
name[strlen(name)-1] = 0;
system("clear");
fp = fopen("RestaurantBill.dat","r");
printf("\t*****Invoice of %s*****",name);
while(fread(&order,sizeof(struct orders),1,fp)){
float tot = 0;
if(!strcmp(order.customer,name)){
generateBillHeader(order.customer,order.date);
for(int i=0;i<order.numOfItems;i++){
generateBillBody(order.itm[i].item,order.itm[i].qty,order.itm[i].price);
tot+=order.itm[i].qty * order.itm[i].price;
}
generateBillFooter(tot);
invoiceFound = 1;
}
}
if(!invoiceFound){
printf("Sorry the invoice for %s doesnot exists",name);
}
fclose(fp);
break;
case 4:
printf("\n\t\t Thanks for using our sevices\n");
printf("\n\t\t HAVE A NICE DAY \n");
printf("\n\t\t copyright K.P.NEVAGE \n\n");
printf("\n\n");
exit(0);
break;
default:
printf("Sorry invalid option");
break;
}
printf("\nDo you want to perform any more operation?[y/n]:\t");
scanf("%s",&contFlag);
}
printf("\n\t\t Thanks for using our sevices\n");
printf("\n\t\t HAVE A NICE DAY \n");
printf("\n\t\t copyright K.P.NEVAGE \n\n");
printf("\n\n");
return 0;
}