Skip to content

Gengsu07/Algorithm-Programming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project

This Project do CRUD from or to database(file) and Implement key fundamentals C Programming Language.

  • Dynamic Memory Allocation
  • Arrays
  • Pointers
  • Structures
  • Function Pointers
  • File Handling
  • Search

Program Menu

alt text

Click to See to Code
int main(void)
{
    int navmenu = 0;

    while (navmenu != 6)
    {
        clrscr();
        printf("\n\t\t\t" GREEN "========== BOOK MONITORING SYSTEM =========" RESET);
        if (msg_notif != NULL && strcmp(msg_notif, "") != 0)
        {
            printf("\n\n\t\t\t status : " GREEN " %s" RESET, msg_notif);
            free(msg_notif);
        }
        printf("\n\n\t\t\t" GREEN "--------- Pilih Menu Dibawah Ini --------" RESET);
        printf("\n\t\t\t1. Tambah Data Buku");
        printf("\n\t\t\t2. Tampilkan History Penjualan");
        printf("\n\t\t\t3. Tampilkan Data Buku");
        printf("\n\t\t\t4. Delete History Penjualan");
        printf("\n\t\t\t5. Delete Buku");
        printf("\n\t\t\t6. Keluar");
        printf("\n\t\t\t7. Buat Transaksi Penjualan\n");
        printf("\n\t\t\t" GREEN "-------------------------------------------------------" RESET);

        printf("\n\t\t\t" GREEN " Masukkan Pilihan Menu : " RESET);
        scanf("%d", &navmenu);
        getchar();

        switch (navmenu)
        {
        case 1:
            clrscr();
            addBook();
            setMsgNotif(msg_buffer);
            break;
        case 2:
            clrscr();
            salesHistory();
            getchar();
            break;
        case 3:
            clrscr();
            viewBook();
            getchar();
            break;
        case 4:
            clrscr();
            deleteSalesHistory();
            getchar();
            break;
        case 5:
            clrscr();
            deleteBook();
            getchar();
            setMsgNotif("Data Berhasil Dihapus...");
            break;
        case 7:
            clrscr();
            createTransaction();
            getchar();
        default:
            setMsgNotif(" Pilihan Menu Tidak Ada...\n");
        }
    }
    return status;
}

Add Book

alt text

Click to See to Code
void addBook(void)
{
    Book *addCatalog = NULL;
    dbsession_buku = fopen(databuku, "a+");
    size_t counter = 0, num_buku;
    char inputlagi;

    if (dbsession_buku == NULL)
        check_connection(databuku);
    do
    {
        clrscr();
        num_buku = countRecords(dbsession_buku);
        rewind(dbsession_buku);
        addCatalog = realloc(addCatalog, (counter + 1) * sizeof(Book));
        if (addCatalog == NULL)
            memoryFailed();
        printf("\n\t\t\t========== Tambah Data Buku ==========\n");
        printf("\nMasukkan Nama Buku : ");
        fgets(addCatalog[counter].nama_buku, sizeof(addCatalog[counter].nama_buku), stdin);
        addCatalog[counter].nama_buku[strcspn(addCatalog[counter].nama_buku, "\n")] = 0;

        printf("\nJenis Buku : ");
        fgets(addCatalog[counter].jns_buku, sizeof(addCatalog[counter].jns_buku), stdin);
        addCatalog[counter].jns_buku[strcspn(addCatalog[counter].jns_buku, "\n")] = 0;

        printf("\nHarga Buku : ");
        scanf("%d", &addCatalog[counter].harga);
        getchar();

        addCatalog[counter].kode_buku = (int)(num_buku + 1 + counter);
        printf("\nInput lagi (y/n): ");
        scanf("%c", &inputlagi);
        getchar();
        counter++;
    } while (inputlagi == 'y');

    // Masukkan data ke dalam file databuku
    for (size_t i = 0; i < counter; i++)
    {
        fprintf(dbsession_buku, "%d,%s,%s,%d\n", addCatalog[i].kode_buku, addCatalog[i].nama_buku, addCatalog[i].jns_buku, addCatalog[i].harga);
    }
    sprintf(msg_buffer, "%zu Data Berhasil Ditambahkan...", counter);
    fflush(dbsession_buku);
    free(addCatalog);
    fclose(dbsession_buku);

}

View Sales History

alt text

Click to See to Code
void salesHistory(void)
{
    Transaksi *getHistory = NULL;
    dbsession_transaksi = fopen(datatransaksi, "a+");
    char bufferbook[256];
    size_t counter = 0, num_records;

    if (dbsession_transaksi == NULL)
    {
        check_connection(datatransaksi);
        return;
    }

    // Hitung jumlah data transaksi
    num_records = countRecords(dbsession_transaksi);
    printf("\n\t\t\tJumlah Data Transaksi: %zu\n", num_records);
    rewind(dbsession_transaksi);

    getHistory = calloc(num_records, sizeof(Transaksi));
    if (getHistory == NULL)
    {
        memoryFailed();
        fclose(dbsession_transaksi);
        return;
    }

    printf("\n\t\t\t" GREEN "============== History Penjualan =================\n" RESET);

    // Load data transaksi sebelumnya yg telah tersimpan
    while (fgets(bufferbook, sizeof(bufferbook), dbsession_transaksi) != NULL && counter < num_records)
    {
        if (sscanf(bufferbook, "%d,%d,%d,%254[^,],%69[^,],%d",
                   &getHistory[counter].kode_transaksi, &getHistory[counter].jmlh_terjual,
                   &getHistory[counter].book.kode_buku,
                   getHistory[counter].book.nama_buku,
                   getHistory[counter].book.jns_buku,
                   &getHistory[counter].book.harga) == 6)
            ;
        counter++;
    }
    // Tampilkan data transaksi yg ada
    printf("\t\t\t" GREEN "%-10s | %-15s | %10s|\n" RESET, "Kode Transaksi", "Nama Buku", "Jumlah Terjual");
    printf("\t\t\t" GREEN "===============================================" RESET);
    for (size_t i = 0; i < counter; i++)
    {
        printf("\n\t\t\t%-10d | %-15s | %10d|\n", getHistory[i].kode_transaksi, getHistory[i].book.nama_buku, getHistory[i].jmlh_terjual);
        printf("\t\t\t-----------------------------------------------------");
    }
    if (num_records == 0)
    {
        printf("\n\t\t\t Belum ada data penjualan\n");
    }
    // Clean up
    free(getHistory);
    fclose(dbsession_buku);
}

View Book

alt text

Click to See to Code
void viewBook(void)
{
    Book *getHistory = NULL;
    dbsession_buku = fopen(databuku, "a+");
    char bufferbook[256];
    size_t counter = 0, num_records;

    if (dbsession_buku == NULL)
    {
        check_connection(databuku);
        return;
    }

    // hitung jumlah records
    num_records = countRecords(dbsession_buku);
    printf("\t\t\t " GREEN " Total Buku: %zu \n" RESET, num_records);
    rewind(dbsession_buku);

    getHistory = calloc(num_records, sizeof(Book));
    if (getHistory == NULL)
        memoryFailed();

    printf("\n\t\t\t" GREEN "====================== Data Seluruh Buku ================\n" RESET);

    // Load data buku sebelumnya yg telah tersimpan
    while (fgets(bufferbook, sizeof(bufferbook), dbsession_buku) != NULL && counter < num_records)
    {

        // Parse data buku ke struct dan verifikasi setiap field
        if (sscanf(bufferbook, "%d,%254[^,],%69[^,],%d",
                   &getHistory[counter].kode_buku,
                   getHistory[counter].nama_buku,
                   getHistory[counter].jns_buku,
                   &getHistory[counter].harga) == 4)
            ;
        counter++;
    }

    printf("\t\t\t" GREEN "| %-10s | %-10s| %-10s | %10s|\n" RESET, "Kode Buku", "Nama Buku", "Jenis Buku", "Harga Buku");
    printf("\t\t\t" GREEN "====================================================" RESET);
    for (size_t i = 0; i < counter; i++)
    {
        printf("\n\t\t\t| %-10d | %-10s| %-10s | %10d |\n", getHistory[i].kode_buku, getHistory[i].nama_buku, getHistory[i].jns_buku, getHistory[i].harga);
        printf("\t\t\t-----------------------------------------------------");
    }
    if (num_records == 0)
    {
        printf("\n\t\t\t Belum ada data Buku\n");
    }
    // Clean up
    free(getHistory);
    fclose(dbsession_buku);
}

Delete Sales History

alt text

Click to See to Code
void deleteSalesHistory(void)
{
    Transaksi *getHistory = NULL;
    dbsession_transaksi = fopen(datatransaksi, "r+");
    char bufferbook[256];
    size_t counter = 0, num_records;
    size_t i;
    int kode_trf, found = 0;

    if (dbsession_transaksi == NULL)
    {
        check_connection(databuku);
        return;
    }

    // dapatkan jumlah data transaksi
    num_records = countRecords(dbsession_transaksi);
    rewind(dbsession_transaksi);

    getHistory = calloc(num_records, sizeof(Transaksi));
    if (getHistory == NULL)
        memoryFailed();
    while (fgets(bufferbook, sizeof(bufferbook), dbsession_transaksi) != NULL && counter < num_records)
    {
        // Load data transaksi yang sudah tersimpan dan verifikasi setiap field
        if (sscanf(bufferbook, "%d,%d,%d,%254[^,],%69[^,],%d",
                   &getHistory[counter].kode_transaksi,
                   &getHistory[counter].jmlh_terjual,
                   &getHistory[counter].book.kode_buku,
                   getHistory[counter].book.nama_buku,
                   getHistory[counter].book.jns_buku,
                   &getHistory[counter].book.harga) == 6)
            ;
        counter++;
    }
    // Tampilkan data list transaksi yang sudah ada
    printf("\n\t\t\t" GREEN "======================== Hapus Data Penjualan ==========\n" RESET);
    printf("\n\t\t\t" GREEN "History Penjualan : " RESET);
    printf("\n\t\t\t" GREEN "%-15s | %-15s | %15s|\n" RESET, "Kode Transaksi", "Nama Buku", "Jumlah Terjual");
    printf("\t\t\t" GREEN "===============================================" RESET);
    for (i = 0; i < counter; i++)
    {
        printf("\n\t\t\t%-15d | %-15s | %15d|\n", getHistory[i].kode_transaksi, getHistory[i].book.nama_buku, getHistory[i].jmlh_terjual);
        printf("\t\t\t-----------------------------------------------------");
    }
    if (num_records == 0)
    {
        printf("\n\t\t\t Belum ada data penjualan\n");
        printf("\n\t\t\t Tambahkan Transaksi terlebih dulu..\n");
    }
    // input  kode transaksi yang ingin dihapus
    if (num_records > 0)
        printf("\nMasukkan Kode Transaksi yang ingin dihapus : ");
    scanf("%d", &kode_trf);
    getchar();

    // cek apakah kode transaksi ada di database transaksi
    for (i = 0; i < counter; i++)
    {
        if (getHistory[i].kode_transaksi == kode_trf)
        {
            found = 1;
            break;
        }
    }
    // jika ada maka utk menghilangkan data tersebut dengan geser data selanjutnya ke data yg didelete
    if (found)
    {
        for (size_t j = i; j < counter - 1; j++)
        {
            getHistory[j] = getHistory[j + 1];
        }
    }
    else
    {
        printf("Kode Transaksi tidak ditemukan\n");
        free(getHistory);
        fclose(dbsession_transaksi);
        status = FAILED;
    }
    // kembalikan pointer ke awal file
    fseek(dbsession_buku, 0, SEEK_SET);
    for (i = 0; i < counter - 1; i++)
    {
        fprintf(dbsession_transaksi, "%d,%d,%d,%s,%s,%d\n", getHistory[i].kode_transaksi, getHistory[i].jmlh_terjual, getHistory[i].book.kode_buku, getHistory[i].book.nama_buku, getHistory[i].book.jns_buku, getHistory[i].book.harga);
    }
    // memastikan ukuran data yang di tulis sesuai dengan ukuran file yg telah di delete
    ftruncate(fileno(dbsession_transaksi), ftell(dbsession_transaksi));
    printf("\nData Transaksi dengan Kode %d berhasil dihapus\n", kode_trf);

    free(getHistory);
    fclose(dbsession_transaksi);
}

Delete Book

alt text

Click to See to Code
void deleteBook(void)
{
    Book *getHistory = NULL;
    dbsession_buku = fopen(databuku, "r+");
    char bufferbook[256];
    size_t counter = 0, num_records, i;
    int kode_buku, found = 0;

    if (dbsession_buku == NULL)
    {
        check_connection(databuku);
        return;
    }

    // hitung jumlah records yg telah ada
    num_records = countRecords(dbsession_buku);
    rewind(dbsession_buku);

    getHistory = calloc(num_records, sizeof(Book));
    if (getHistory == NULL)
        memoryFailed();
    while (fgets(bufferbook, sizeof(bufferbook), dbsession_buku) != NULL && counter < num_records)
    {
        // load data buku untuk verifikasi apakah buku tersebut ada di database
        if (sscanf(bufferbook, "%d,%254[^,],%69[^,],%d",
                   &getHistory[counter].kode_buku,
                   getHistory[counter].nama_buku,
                   getHistory[counter].jns_buku,
                   &getHistory[counter].harga) == 4)
            ;
        counter++;
    }
    // Tampilkan data list buku yang sudah ada
    printf("\n\t\t\t" GREEN "======================== Hapus Data Buku ==========\n" RESET);
    printf("\n\t\t\t" GREEN "Daftar Buku : " RESET);
    printf("n\t\t\t" GREEN "| %-10s | %-10s| %-10s | %10s|\n" RESET, "Kode Buku", "Nama Buku", "Jenis Buku", "Harga Buku");
    printf("\t\t\t" GREEN "====================================================" RESET);
    for (i = 0; i < counter; i++)
    {
        printf("\n\t\t\t| %-10d | %-10s| %-10s | %10d |\n", getHistory[i].kode_buku, getHistory[i].nama_buku, getHistory[i].jns_buku, getHistory[i].harga);
        printf("\t\t\t-----------------------------------------------------");
    }
    // jika buku belum ada
    if (num_records == 0)
    {
        printf("\n\t\t\t Belum ada data Buku\n");
    }

    // jika buku sudah ada
    if (num_records > 0)
        printf("\nMasukkan Kode Buku yang ingin dihapus : ");
    scanf("%d", &kode_buku);
    getchar();

    // cek apakah kode buku ada di database
    for (i = 0; i < counter; i++)
    {
        if (getHistory[i].kode_buku == kode_buku)
        {
            found = 1;
            break;
        }
    }

    // jika ada maka utk menghilangkan data tersebut dengan geser data selanjutnya ke data yg didelete
    if (found)
    {
        for (size_t j = i; j < counter - 1; j++)
        {
            if (getHistory[j].kode_buku != kode_buku)
                getHistory[j] = getHistory[j + 1];
        }
    }
    else
    {
        printf("Kode Buku tidak ditemukan\n");
        free(getHistory);
        fclose(dbsession_buku);
        status = FAILED;
    }
    // Pastikan pointer di awal dari file
    fseek(dbsession_buku, 0, SEEK_SET);
    for (i = 0; i < counter - 1; i++)
    {
        fprintf(dbsession_buku, "%d,%s,%s,%d\n", getHistory[i].kode_buku, getHistory[i].nama_buku, getHistory[i].jns_buku, getHistory[i].harga);
    }
    // memastikan ukuran data yang di tulis sesuai dengan ukuran file yg telah di delete
    ftruncate(fileno(dbsession_buku), ftell(dbsession_buku));
    printf("\nData Buku dengan Kode %d berhasil dihapus\n", kode_buku);

    free(getHistory);
    fclose(dbsession_buku);
}

Create Transaction

alt text

Click to See to Code
void createTransaction(void)
{
    Book *getHistory = NULL;
    Transaksi *addTransaction = NULL;
    int kode_buku;
    dbsession_buku = fopen(databuku, "r+");
    dbsession_transaksi = fopen(datatransaksi, "a+");
    char bufferbook[256];
    size_t counter = 0, num_records, i;
    int found = 0;

    if ((dbsession_buku == NULL) || (dbsession_transaksi == NULL))
    {
        check_connection(datatransaksi);
        return;
    }
    printf("\n\t\t\t" GREEN "================ Tambah Transaksi ==============\n" RESET);
    printf("\nMasukkan Kode Buku : ");
    scanf("%d", &kode_buku);
    getchar();

    // Get number of records and allocate memory
    num_records = countRecords(dbsession_buku);
    rewind(dbsession_buku);

    getHistory = calloc(num_records, sizeof(Book));
    if (getHistory == NULL)
        memoryFailed();
    while (fgets(bufferbook, sizeof(bufferbook), dbsession_buku) != NULL && counter < num_records)
    {
        // Load data Buku untuk verifikasi apakah buku tersebut ada di database
        if (sscanf(bufferbook, "%d,%254[^,],%69[^,],%d",
                   &getHistory[counter].kode_buku,
                   getHistory[counter].nama_buku,
                   getHistory[counter].jns_buku,
                   &getHistory[counter].harga) == 4)
            ;
        counter++;
    }

    // cek apakah kode buku ada di database
    for (i = 0; i < counter; i++)
    {
        if (getHistory[i].kode_buku == kode_buku)
        {
            found = 1;
            break;
        }
    }

    // jika ada kode buku, lanjutkan proses input penjualan
    if (found)
    {
        addTransaction = malloc(sizeof(Transaksi));
        if (addTransaction == NULL)
            memoryFailed();
        // printf("Masukkan data pembelian buku : \n");
        printf("Masukkan Jumlah Penjualan : ");
        scanf("%d", &addTransaction->jmlh_terjual);
        getchar();

        size_t num_transactions = countRecords(dbsession_transaksi);
        addTransaction->kode_transaksi = (int)(num_transactions + 1);
        addTransaction->book = getHistory[i];

        // Masukkan data ke dalam file datatransaksi
        fprintf(dbsession_transaksi, "%d,%d,%d,%s,%s,%d\n", addTransaction->kode_transaksi, addTransaction->jmlh_terjual, addTransaction->book.kode_buku, addTransaction->book.nama_buku, addTransaction->book.jns_buku, addTransaction->book.harga);
    }
    else
    {
        printf("\n\t\t\tKode Buku Tidak Ditemukan\n");
    }
    printf("\n\t\t\tTransaksi Berhasil Ditambahkan\n");
    free(getHistory);
    free(addTransaction);
    fclose(dbsession_buku);
    fclose(dbsession_transaksi);
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors