Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #include<string.h>
  4.  
  5. int total = 0;
  6.  
  7. struct data{
  8. char num[10];
  9. int amount;
  10. struct data *next;
  11. struct data *prev;
  12. };
  13.  
  14. struct data *head = NULL;
  15. struct data *tail = NULL;
  16.  
  17. struct data* search(char num[]){
  18. struct data *node;
  19.  
  20. while(node != NULL){
  21. if(strcmp(num,node->num) == 0){
  22. return node;
  23. }
  24. node = node->next;
  25. }
  26. return NULL;
  27. }
  28.  
  29. void insert(){
  30. char num[10];
  31. int amount;
  32. struct data *placed;
  33.  
  34. printf("input invoice number [5 characters]: ");
  35. scanf("%s",&num);
  36. int length = strlen(num);
  37. printf("%d",length);
  38. while(length != 5){
  39. printf("a\n");
  40. printf("input invoice number [5 characters]: ");
  41. scanf("%s",&num);
  42. }
  43. placed = search(num);
  44. while(placed != NULL){
  45. printf("invoice number already exists\n");
  46. printf("input invoice number [5 characters]: ");
  47. scanf("%s",&num);
  48. while(strlen(num) > 5 or strlen(num) < 5){
  49. printf("input invoice number [5 characters]: ");
  50. scanf("%s",&num);
  51. }
  52. placed = search(num);
  53. }
  54.  
  55. printf("input amount [1000..500000]: ");
  56. scanf("%d",&amount);
  57. while(amount < 1000 or amount > 500000){
  58. printf("input amount [1000..500000]: ");
  59. scanf("%d",&amount);
  60. }
  61. total = total + amount;
  62.  
  63. struct data *node = (struct data*) malloc(sizeof(struct data));
  64. node->next = NULL;
  65. strcpy(node->num,num);
  66. node->amount = amount;
  67. tail->next = node;
  68. node->prev = tail;
  69. tail = node;
  70. }
  71.  
  72. void display(){
  73. printf("No | InvoiceNo | Amount\n");
  74. printf("=======================\n");
  75.  
  76. struct data *node;
  77. node = head;
  78. int count = 1;
  79. while(node != NULL){
  80. printf("%d | %7s | %7d\n",count,node->num,node->amount);
  81. count++;
  82. node = node->next;
  83. }
  84. printf("=======================\n");
  85. printf("Total Amount : %7d\n",total);
  86. }
  87.  
  88. void update(){
  89. struct data *temp;
  90. struct data *pos;
  91. char num[10];
  92. char amount;
  93.  
  94. printf("input invoice number [5 characters]: ");
  95. getchar();
  96. scanf("%s",&num);
  97. while(strlen(num) > 5 or strlen(num) < 5){
  98. printf("input invoice number [5 characters]: ");
  99. scanf("%s",&num);
  100. }
  101. pos = search(num);
  102. while(pos == NULL){
  103. printf("invoice number dosen't exist\n");
  104. printf("input invoice number [5 characters]: ");
  105. scanf("%s",&num);
  106. while(strlen(num) > 5 or strlen(num) < 5){
  107. printf("input invoice number [5 characters]: ");
  108. scanf("%s",&num);
  109. }
  110. pos = search(num);
  111. }
  112. printf("input new amount [1000..500000]: ");
  113. scanf("%d",&amount);
  114. while(amount < 1000 or amount > 500000){
  115. printf("input new amount [1000..500000]: ");
  116. scanf("%d",&amount);
  117. }
  118. total = total - pos->amount;
  119. pos->amount = amount;
  120. total = total + amount;
  121.  
  122. }
  123.  
  124. void del(struct data *node){
  125. struct data *temp;
  126. struct data *temp2;
  127. temp = node->prev;
  128. temp2 = node->next;
  129. temp->next = temp2;
  130. temp2->prev = temp;
  131. free(node);
  132. }
  133.  
  134. void pay(){
  135. int payment;
  136.  
  137. printf("Input Payment [0..%d] : ",total);
  138. scanf("%d", &payment);
  139. while(payment < 0 or payment > total){
  140. printf("Input Payment [0..%d] : ",total);
  141. scanf("%d", &payment);
  142. }
  143.  
  144. struct data *node;
  145. node = head;
  146. while(payment != 0 or node != NULL){
  147. if(payment > node->amount){
  148. payment = payment - node->amount;
  149. total = total - node->amount;
  150. del(node);
  151. }
  152. else{
  153. node->amount = node->amount - payment;
  154. total = total - payment;
  155. payment = 0;
  156. }
  157. node = node->next;
  158. }
  159. }
  160.  
  161. void clear(){
  162. struct data *curr;
  163. struct data *temp;
  164. curr = head;
  165.  
  166. while(curr != NULL){
  167. temp = curr;
  168. curr = curr->next;
  169. free(temp);
  170. }
  171. }
  172.  
  173. int menu(){
  174. int menum;
  175. display();
  176. printf("1. Insert Debt\n");
  177. printf("2. Pay Debt\n");
  178. printf("3. Update\n");
  179. printf("4. Exit\n");
  180. printf("Masukan pilihan : ");
  181. scanf("%d",&menum);
  182. return menum;
  183. }
  184.  
  185. int main(){
  186. int menum = 0;
  187.  
  188. do{
  189. menum = menu();
  190. if(menum == 1){
  191. insert();
  192. }
  193. else if(menum == 2){
  194. pay();
  195. }
  196. else if(menum == 3){
  197. update();
  198. }
  199. else if(menum == 4){
  200. clear();
  201. }
  202. }while(menum!=4);
  203.  
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement