Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<malloc.h>
- #include<string.h>
- int total = 0;
- struct data{
- char num[10];
- int amount;
- struct data *next;
- struct data *prev;
- };
- struct data *head = NULL;
- struct data *tail = NULL;
- struct data* search(char num[]){
- struct data *node;
- while(node != NULL){
- if(strcmp(num,node->num) == 0){
- return node;
- }
- node = node->next;
- }
- return NULL;
- }
- void insert(){
- char num[10];
- int amount;
- struct data *placed;
- printf("input invoice number [5 characters]: ");
- scanf("%s",&num);
- int length = strlen(num);
- printf("%d",length);
- while(length != 5){
- printf("a\n");
- printf("input invoice number [5 characters]: ");
- scanf("%s",&num);
- }
- placed = search(num);
- while(placed != NULL){
- printf("invoice number already exists\n");
- printf("input invoice number [5 characters]: ");
- scanf("%s",&num);
- while(strlen(num) > 5 or strlen(num) < 5){
- printf("input invoice number [5 characters]: ");
- scanf("%s",&num);
- }
- placed = search(num);
- }
- printf("input amount [1000..500000]: ");
- scanf("%d",&amount);
- while(amount < 1000 or amount > 500000){
- printf("input amount [1000..500000]: ");
- scanf("%d",&amount);
- }
- total = total + amount;
- struct data *node = (struct data*) malloc(sizeof(struct data));
- node->next = NULL;
- strcpy(node->num,num);
- node->amount = amount;
- tail->next = node;
- node->prev = tail;
- tail = node;
- }
- void display(){
- printf("No | InvoiceNo | Amount\n");
- printf("=======================\n");
- struct data *node;
- node = head;
- int count = 1;
- while(node != NULL){
- printf("%d | %7s | %7d\n",count,node->num,node->amount);
- count++;
- node = node->next;
- }
- printf("=======================\n");
- printf("Total Amount : %7d\n",total);
- }
- void update(){
- struct data *temp;
- struct data *pos;
- char num[10];
- char amount;
- printf("input invoice number [5 characters]: ");
- getchar();
- scanf("%s",&num);
- while(strlen(num) > 5 or strlen(num) < 5){
- printf("input invoice number [5 characters]: ");
- scanf("%s",&num);
- }
- pos = search(num);
- while(pos == NULL){
- printf("invoice number dosen't exist\n");
- printf("input invoice number [5 characters]: ");
- scanf("%s",&num);
- while(strlen(num) > 5 or strlen(num) < 5){
- printf("input invoice number [5 characters]: ");
- scanf("%s",&num);
- }
- pos = search(num);
- }
- printf("input new amount [1000..500000]: ");
- scanf("%d",&amount);
- while(amount < 1000 or amount > 500000){
- printf("input new amount [1000..500000]: ");
- scanf("%d",&amount);
- }
- total = total - pos->amount;
- pos->amount = amount;
- total = total + amount;
- }
- void del(struct data *node){
- struct data *temp;
- struct data *temp2;
- temp = node->prev;
- temp2 = node->next;
- temp->next = temp2;
- temp2->prev = temp;
- free(node);
- }
- void pay(){
- int payment;
- printf("Input Payment [0..%d] : ",total);
- scanf("%d", &payment);
- while(payment < 0 or payment > total){
- printf("Input Payment [0..%d] : ",total);
- scanf("%d", &payment);
- }
- struct data *node;
- node = head;
- while(payment != 0 or node != NULL){
- if(payment > node->amount){
- payment = payment - node->amount;
- total = total - node->amount;
- del(node);
- }
- else{
- node->amount = node->amount - payment;
- total = total - payment;
- payment = 0;
- }
- node = node->next;
- }
- }
- void clear(){
- struct data *curr;
- struct data *temp;
- curr = head;
- while(curr != NULL){
- temp = curr;
- curr = curr->next;
- free(temp);
- }
- }
- int menu(){
- int menum;
- display();
- printf("1. Insert Debt\n");
- printf("2. Pay Debt\n");
- printf("3. Update\n");
- printf("4. Exit\n");
- printf("Masukan pilihan : ");
- scanf("%d",&menum);
- return menum;
- }
- int main(){
- int menum = 0;
- do{
- menum = menu();
- if(menum == 1){
- insert();
- }
- else if(menum == 2){
- pay();
- }
- else if(menum == 3){
- update();
- }
- else if(menum == 4){
- clear();
- }
- }while(menum!=4);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement