hqt

Assignment 3

hqt
Jul 22nd, 2012
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 16.29 KB | None | 0 0
  1. /*
  2.  * Name : Huynh Quang Thao
  3.  * Id : SE60963
  4.  * Description : Assigment 3
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <conio.h>
  9. #include <stdlib.h>
  10. #include <math.h>
  11. #include <ctype.h>
  12. #define MAX 20
  13.  
  14. void display();
  15. void viewJournal(int n, int arrAccount[], double arrDebit[], double arrCredit[], char accDescript[][31], char tranDescript[][31]);
  16. int makeTransaction(int n, int arrAccount[], double arrDebit[], double arrCredit[], char accDescript[][31], char tranDescript[][31]);
  17. void viewBalance(int n, int arrAccount[], double arrDebit[], double arrCredit[], char accDescript[][31], char tranDescript[][31]);
  18. void viewIncome(int n, int arrAccount[], double arrDebit[], double arrCredit[], char accDescript[][31], char tranDescript[][31]);
  19.  
  20. int validate();
  21. double validateD();
  22.  
  23. void display() {
  24.     printf("Options available :\n");
  25.     printf("1 - Enter a transaction\n");
  26.     printf("2 - View the general journal\n");
  27.     printf("3 - View the balance sheet\n");
  28.     printf("4 - View the income stament\n");
  29.     printf("q - Quit the program\n");
  30.     printf("Please enter 1,2,3,4 or q: ");
  31. }
  32.  
  33. int makeTransaction(int n, int arrAccount[], double arrDebit[], double arrCredit[], char accDescript[][31], char tranDescript[][31]) {
  34.     int accNum, i, exis = 0;
  35.     char typeCash;
  36.     double amount;
  37.     char des[31];
  38.     fflush(stdin);
  39.     printf("Please enter an account number(1000~5999) : ");
  40.     do {
  41.         accNum = validate();
  42.         if (accNum < 1000 || accNum > 5999)
  43.             printf("**Out of range\n**Try Again : ");
  44.     } while (accNum < 1000 || accNum > 5999);
  45.  
  46.     for (i = 0; i < n; i++) {
  47.         if (arrAccount[i] == accNum) {
  48.             exis = 1;
  49.             break;
  50.         }
  51.     }
  52.     if (exis == 1) {
  53.         printf("Your Description : %s\n", accDescript[i]);
  54.     } else {
  55.         do {
  56.             fflush(stdin);
  57.             printf("Enter Description : ");
  58.             scanf("%[^\n]s", &accDescript[n]);
  59.             if (strlen(accDescript[n]) > 30)
  60.                 printf("Only 30 character avai.");
  61.         } while (strlen(accDescript[n]) > 30);
  62.     }
  63.     do {
  64.         fflush(stdin);
  65.         printf("Enter Description For Transaction : ");
  66.         scanf("%[^\n]s", &tranDescript[n]);
  67.         if (strlen(tranDescript[n]) > 30)
  68.             printf("Only 30 character avai.");
  69.     } while (strlen(tranDescript[n]) > 30);
  70.     fflush(stdin);
  71.     printf("Enter d (debit) or c (credit): ");
  72.     do {
  73.         typeCash = getch();
  74.         putch(typeCash);
  75.         if (typeCash != 'd' && typeCash != 'D' && typeCash != 'c' && typeCash != 'C')
  76.             printf("\n**Invalid input\n**TryAgain :");
  77.     } while (typeCash != 'd' && typeCash != 'D' && typeCash != 'c' && typeCash != 'C');
  78.     fflush(stdin);
  79.     printf("\nEnter transaction amount: ");
  80.     amount = validateD();
  81.     fflush(stdin);
  82.     //luu xuong
  83.     arrAccount[n] = accNum;
  84.     arrDebit[n] = 0;
  85.     arrCredit[n] = 0;
  86.  
  87.     if (typeCash == 'd' || typeCash == 'D')
  88.         arrDebit[n] = amount;
  89.     else
  90.         arrCredit[n] = amount;
  91.     n++;
  92.     return n;
  93. }
  94.  
  95. void viewJournal(int n, int arrAccount[], double arrDebit[], double arrCredit[], char accDescript[][31], char tranDescript[][31]) {
  96.     int i;
  97.     printf("\n                       General Journal                      \n");
  98.     printf("Account Description                         Debit     Credit\n");
  99.     printf("------- ------------------------------ ---------- ----------\n");
  100.     for (i = 0; i < n; i++) {
  101.         if (arrDebit[i] == 0)
  102.             printf("%-8d%-31s%21.3lf\n", arrAccount[i], tranDescript[i], arrCredit[i]);
  103.         else
  104.             printf("%-8d%-31s%9.3lf\n", arrAccount[i], tranDescript[i], arrDebit[i]);
  105.     }
  106.  
  107. }
  108.  
  109. void viewBalance(int n, int arrAccount[], double arrDebit[], double arrCredit[], char accDescript[][31], char tranDescript[][31]) {
  110.     int i, j, high = 2000, low = 1000;
  111.     double totalL = 0, totalE = 0, totalA = 0;
  112.     char *accDes[MAX];
  113.     double arrMoney1[MAX];
  114.     double arrMoney2[MAX];
  115.     double arrMoney3[MAX];
  116.     int arrAcc1[MAX];
  117.     int arrAcc2[MAX];
  118.     int arrAcc3[MAX];
  119.     int m = 0;
  120.     printf("\n                        Balance Sheet                       \n");
  121.     printf("Account Description                         Debit     Credit\n");
  122.     printf("------- ------------------------------ ---------- ----------\n");
  123.  
  124.     for (i = 0; i < n; i++) {
  125.         if (arrAccount[i] < high && arrAccount[i] >= low) {
  126.             arrAcc1[m] = arrAccount[i];
  127.             accDes[m] = accDescript[i];
  128.             arrMoney1[m] = arrCredit[i] - arrDebit[i];
  129.             m++;
  130.         }
  131.     }
  132.  
  133.     if (m != 0) {
  134.         for (j = 0; j <= m - 1; j++) {
  135.             for (i = j + 1; i < m; i++) {
  136.                 if (arrAcc1[j] == arrAcc1[i]) {
  137.                     arrAcc1[i] = 0;
  138.                     arrMoney1[j] += arrMoney1[i];
  139.                 }
  140.             }
  141.             if (arrAcc1[j] != 0) {
  142.  
  143.                 if (arrMoney1[j] < 0)
  144.                     printf("%-9d%-31s%9.3lf\n", arrAcc1[j], accDes[j], -arrMoney1[j]);
  145.                 else
  146.                     printf("%-9d%-31s%18.3lf\n", arrAcc1[j], accDes[j], arrMoney1[j]);
  147.                 totalA += arrMoney1[j];
  148.             }
  149.         }
  150.         if (totalA >= 0) {
  151.             printf("                                       ---------- ----------\n");
  152.             printf("      Total Asset : %36.3lf\n", totalA);
  153.         } else {
  154.             printf("                                       ---------- ----------\n");
  155.             printf("      Total Asset : %27.3lf\n", -totalA);
  156.         }
  157.     }
  158.     high += 1000;
  159.     low += 1000;
  160.     m = 0;
  161.     for (i = 0; i < n; i++) {
  162.         if (arrAccount[i] < high && arrAccount[i] >= low) {
  163.             arrAcc2[m] = arrAccount[i];
  164.             accDes[m] = accDescript[i];
  165.             arrMoney2[m] = arrCredit[i] - arrDebit[i];
  166.             m++;
  167.         }
  168.     }
  169.     if (m != 0) {
  170.         for (j = 0; j <= m - 1; j++) {
  171.             for (i = j + 1; i < m; i++) {
  172.                 if (arrAcc2[j] == arrAcc2[i]) {
  173.                     arrAcc2[i] = 0;
  174.                     arrMoney2[j] += arrMoney2[i];
  175.                 }
  176.             }
  177.             if (arrAcc2[j] != 0) {
  178.                 if (arrMoney2[j] < 0)
  179.                     printf("%-9d%-31s%9.3lf\n", arrAcc2[j], accDes[j], -arrMoney2[j]);
  180.                 else
  181.                     printf("%-9d%-31s%18.3lf\n", arrAcc2[j], accDes[j], arrMoney2[j]);
  182.                 totalL += arrMoney2[j];
  183.             }
  184.         }
  185.         if (totalL >= 0) {
  186.             printf("                                       ---------- ----------\n");
  187.             printf("      Total Liabilities : %37.3lf\n", totalL);
  188.         } else {
  189.             printf("                                       ---------- ----------\n");
  190.             printf("      Total Liabilities : %24.3lf\n", -totalL);
  191.         }
  192.     }
  193.     high += 1000;
  194.     low += 1000;
  195.     m = 0;
  196.     for (i = 0; i < n; i++) {
  197.         if (arrAccount[i] < high && arrAccount[i] >= low) {
  198.             arrAcc3[m] = arrAccount[i];
  199.             accDes[m] = accDescript[i];
  200.             arrMoney3[m] = arrCredit[i] - arrDebit[i];
  201.             m++;
  202.         }
  203.     }
  204.     if (m != 0) {
  205.         for (j = 0; j <= m - 1; j++) {
  206.             for (i = j + 1; i < m; i++) {
  207.                 if (arrAcc3[j] == arrAcc3[i]) {
  208.                     arrAcc3[i] = 0;
  209.                     arrMoney3[j] += arrMoney3[i];
  210.                 }
  211.             }
  212.             if (arrAcc3[j] != 0) {
  213.                 if (arrMoney3[j] < 0)
  214.                     printf("%-9d%-31s%9.3lf\n", arrAcc3[j], accDes[j], -arrMoney3[j]);
  215.                 else
  216.                     printf("%-9d%-31s%18.3lf\n", arrAcc3[j], accDes[j], arrMoney3[j]);
  217.                 totalE += arrMoney3[j];
  218.             }
  219.         }
  220.         if (totalL >= 0) {
  221.             printf("                                       ---------- ----------\n");
  222.             printf("      Total Equity : %37.3lf\n", totalE);
  223.         } else {
  224.             printf("                                       ---------- ----------\n");
  225.             printf("      Total Equity : %24.3lf\n", -totalE);
  226.         }
  227.  
  228.         if (totalE + totalL >= 0) {
  229.             printf("                                       ---------- ----------\n");
  230.             printf("      Total Equity and Liabilities %25.3lf\n", totalE + totalL);
  231.         } else {
  232.             printf("                                       ---------- ----------\n");
  233.             printf("      Total Equity and Liabilities %14.3lf\n", -(totalE + totalL));
  234.         }
  235.     }
  236. }
  237.  
  238. void viewIncome(int n, int arrAccount[], double arrDebit[], double arrCredit[], char accDescript[][31], char tranDescript[][31]) {
  239.     int i, j, high = 5000, low = 4000;
  240.     double totalL = 0, totalE = 0;
  241.     char *accDes[MAX];
  242.     double arrMoney1[MAX];
  243.     double arrMoney2[MAX];
  244.     int arrAcc1[MAX];
  245.     int arrAcc2[MAX];
  246.     int m = 0;
  247.     printf("\n                        View Income                       \n");
  248.     printf("Account Description                         Debit     Credit\n");
  249.     printf("------- ------------------------------ ---------- ----------\n");
  250.  
  251.     for (i = 0; i < n; i++) {
  252.         if (arrAccount[i] < high && arrAccount[i] >= low) {
  253.             arrAcc1[m] = arrAccount[i];
  254.             accDes[m] = accDescript[i];
  255.             arrMoney1[m] = arrCredit[i] - arrDebit[i];
  256.             m++;
  257.         }
  258.     }
  259.  
  260.     if (m != 0) {
  261.         for (j = 0; j <= m - 1; j++) {
  262.             for (i = j + 1; i < m; i++) {
  263.                 if (arrAcc1[j] == arrAcc1[i]) {
  264.                     arrAcc1[i] = 0;
  265.                     arrMoney1[j] += arrMoney1[i];
  266.                 }
  267.             }
  268.             if (arrAcc1[j] != 0) {
  269.  
  270.                 if (arrMoney1[j] < 0)
  271.                     printf("%-9d%-31s%9.3lf\n", arrAcc1[j], accDes[j], -arrMoney1[j]);
  272.                 else
  273.                     printf("%-9d%-31s%18.3lf\n", arrAcc1[j], accDes[j], arrMoney1[j]);
  274.                 totalE += arrMoney1[j];
  275.             }
  276.         }
  277.         if (totalE >= 0) {
  278.             printf("                                       ---------- ----------\n");
  279.             printf("      Total Revenue : %36.3lf\n", totalE);
  280.         } else {
  281.             printf("                                       ---------- ----------\n");
  282.             printf("      Total Revenue : %27.3lf\n", -totalE);
  283.         }
  284.     }
  285.     high += 1000;
  286.     low += 1000;
  287.     m = 0;
  288.     for (i = 0; i < n; i++) {
  289.         if (arrAccount[i] < high && arrAccount[i] >= low) {
  290.             arrAcc2[m] = arrAccount[i];
  291.             accDes[m] = accDescript[i];
  292.             arrMoney2[m] = arrCredit[i] - arrDebit[i];
  293.             m++;
  294.         }
  295.     }
  296.     if (m != 0) {
  297.         for (j = 0; j <= m - 1; j++) {
  298.             for (i = j + 1; i < m; i++) {
  299.                 if (arrAcc2[j] == arrAcc2[i]) {
  300.                     arrAcc2[i] = 0;
  301.                     arrMoney2[j] += arrMoney2[i];
  302.                 }
  303.             }
  304.             if (arrAcc2[j] != 0) {
  305.                 if (arrMoney2[j] < 0)
  306.                     printf("%-9d%-31s%9.3lf\n", arrAcc2[j], accDes[j], -arrMoney2[j]);
  307.                 else
  308.                     printf("%-9d%-31s%18.3lf\n", arrAcc2[j], accDes[j], arrMoney2[j]);
  309.                 totalL += arrMoney2[j];
  310.             }
  311.         }
  312.         if (totalL >= 0) {
  313.             printf("                                       ---------- ----------\n");
  314.             printf("      Total Expensive : %37.3lf\n", totalL);
  315.  
  316.         } else {
  317.             printf("                                       ---------- ----------\n");
  318.             printf("      Total Expensive : %24.3lf\n", -totalL);
  319.         }
  320.     }
  321.     if (totalE + totalL >= 0) {
  322.         printf("                                       ---------- ----------\n");
  323.         printf("      Total NET INCOME %45.3lf\n", totalE + totalL);
  324.     } else {
  325.         printf("                                       ---------- ----------\n");
  326.         printf("      Total NETINCOME %34.3lf\n", -(totalE + totalL));
  327.     }
  328.  
  329. }
  330.  
  331. void main() {
  332.     char accDescript[MAX][31];
  333.     char tranDescript[MAX][31];
  334.     int n = 0;
  335.     int i;
  336.     int arrAccount[MAX];
  337.     double arrDebit[MAX];
  338.     double arrCredit[MAX];
  339.     char a[31] = "sad";
  340.     char c, d;
  341.     int cont = 0, end = 0;
  342.     int validate;
  343.  
  344.     for (i = 0; i < MAX; i++) {
  345.         arrAccount[i] = 0;
  346.     }
  347.     do {
  348.         display();
  349.         do {
  350.             fflush(stdin);
  351.             validate = scanf("%c%c", &c, &d);
  352.             if (validate != 2 || d != '\n')
  353.                 printf("**Trailing character meet.Again : ");
  354.             else
  355.                 switch (c) {
  356.                     case '1':n = makeTransaction(n, arrAccount, arrDebit, arrCredit, accDescript, tranDescript);
  357.                         cont = 1;
  358.                         break;
  359.                     case '2':
  360.                         viewJournal(n, arrAccount, arrDebit, arrCredit, accDescript, tranDescript);
  361.                         cont = 1;
  362.                         break;
  363.                     case '3':
  364.                         viewBalance(n, arrAccount, arrDebit, arrCredit, accDescript, tranDescript);
  365.                         cont = 1;
  366.                         break;
  367.                     case '4':
  368.                         viewIncome(n, arrAccount, arrDebit, arrCredit, accDescript, tranDescript);
  369.                         cont = 1;
  370.                         break;
  371.                     case 'q':
  372.                     case 'Q':
  373.                         end = 1;
  374.                         cont = 1;
  375.                         break;
  376.                     default:
  377.                         cont = 0;
  378.                         fflush(stdin);
  379.                         printf("**Invalid input.Again : ");
  380.                 }
  381.         } while (cont == 0);
  382.     } while (end == 0);
  383. }
  384.  
  385. int validate() {
  386.     int a = 0;
  387.     int flag, cont = 1;
  388.     char c[20];
  389.     char input;
  390.     int i, j;
  391.     do {
  392.         flag = 1;
  393.         i = 0;
  394.         input = ' ';
  395.         while (input != '\n') {
  396.             input = getchar();
  397.             if (input != '\n') {
  398.                 c[i] = input;
  399.                 i++;
  400.             }
  401.         }
  402.         //after get all the input
  403.  
  404.         for (j = 0; j < i; j++) {
  405.             if (!isdigit(c[j])) {
  406.                 flag = 0;
  407.                 if (c[0] != '-')
  408.                     printf("**Trailing character meet\n**Try again : ");
  409.                 else
  410.                     printf("**Negative is unacceptable\n**Try again : ");
  411.                 break;
  412.             }
  413.         }
  414.     } while (flag == 0);
  415.     //output
  416.     int u;
  417.     for (j = 0; j < i; j++) {
  418.         u = ((int) c[j]) - 48;
  419.         a = a + u * (int) round(pow(10, i - j - 1));
  420.     }
  421.     return a;
  422. }
  423.  
  424. double validateD() {
  425.     double a = 0;
  426.     int flag, cont = 1;
  427.     char c[20];
  428.     char input;
  429.     int i, j, dot;
  430.     do {
  431.         dot = 0;
  432.         flag = 1;
  433.         i = 0;
  434.         input = ' ';
  435.         while (input != '\n') {
  436.             input = getchar();
  437.             if (input != '\n') {
  438.                 c[i] = input;
  439.                 i++;
  440.             }
  441.         }
  442.         //after get all the input
  443.  
  444.         for (j = 0; j < i; j++) {
  445.             if (!isdigit(c[j])) {
  446.                 flag = 0;
  447.                 if (c[0] != '-' && c[j] != '.')
  448.                     printf("\n**Trailing character meet\nTry again : ");
  449.                 else if (c[0] == '-')
  450.                     printf("\n**Negative is unacceptable\nTry again : ");
  451.                 else if (c[j] == '.') {
  452.                     flag = 1;
  453.                     dot++;
  454.                     continue;
  455.                 }
  456.                 break;
  457.             }
  458.         }
  459.         if (dot > 1) {
  460.             flag = 0;
  461.             printf("Wrong format only 1 dot (.) allow\nTry again : ");
  462.         }
  463.         if (i == 0) {
  464.             flag = 0;
  465.             printf("Please enter value : ");
  466.         }
  467.         //     if(dot==0){
  468.         //             flag =0;
  469.         //             printf("format .2 (*.??)\nTry again : ");
  470.         //             }
  471.     } while (flag == 0);
  472.     //output
  473.  
  474.     double u;
  475.     for (j = 0; j < i; j++) {
  476.         if (c[j] == '.')
  477.             break;
  478.     }
  479.     int k;
  480.     for (k = 0; k < j; k++) {
  481.         u = ((double) c[k]) - 48;
  482.         a = a + u * pow(10, j - k - 1);
  483.     }
  484.     int m = k;
  485.     k++;
  486.     for (k; k < i; k++) {
  487.         u = ((double) c[k]) - 48;
  488.  
  489.         a = a + u * pow(10, -(k - m));
  490.     }
  491.     return a;
  492. }
Advertisement
Add Comment
Please, Sign In to add comment