Aplikasi toserba c++

#include <iostream>
#include <fstream>
#include <iomanip>
#include <time.h>
#include <conio.h>
using namespace std;
struct toko {
unsigned int ID_barang, stock;
unsigned long no_id, tPemasukan;
double harga;
string nama, tExpired, alamat, username, password;
} barang, tBarang, uAdmin, uPegawai;
/* ** Waktu ** */
#define DTTMFMT "%Y-%m-%d %H:%M:%S "
#define DTTMSZ 21
static char *getDtTm (char *buff) {
time_t t = time (0);
strftime (buff, DTTMSZ, DTTMFMT, localtime (&t));
return buff;
}
/* ** Fungsi dan Prosedur barang * **/
void keluaranBarang() {
cout << "|" << setw(5) << barang.ID_barang
<< "|" << setw(20) << barang.nama
<< "|" << setw(12) << barang.harga
<< "|" << setw(10) << barang.stock
<< "|" << setw(14) << barang.tExpired << "|" << endl;
}
void buatBarang() {
int i;
cout << "ID : "; cin >> barang.ID_barang;
cout << "Nama : "; cin.ignore(); getline(cin,barang.nama);
cout << "Harga : "; cin >> barang.harga;
cout << "Stock : "; cin >> barang.stock;
cout << "Kedaluwarsa : "; cin >> barang.tExpired;
cout << "\n";
}
char flatfile[30] = "barang.dat";
void simpanDataBarang() {
ofstream f;
buatBarang();
// proses simpan objek ke file
f.open(flatfile, ios :: binary | ios :: app);
f.write( (char*) &barang, sizeof(barang) );
f.close();
}
void bacaDataBarang() {
ifstream f;
f.open( flatfile, ios :: binary);
cout << "+-----+--------------------+------------+----------+--------------+\n";
cout << "| ID" << "| Nama" << "| Harga" << "| Stock" << "| Kedaluwarsa|" << endl;
cout << "+-----+--------------------+------------+----------+--------------+\n";
while ( f.read( (char*)&barang, sizeof(barang)) ) {
keluaranBarang();
}
cout << "+-----+--------------------+------------+----------+--------------+\n";
f.close();
}
void perbaruiDataBarang(int ID_barang_diperbarui) {
fstream f; // baca/tulis file langsung
f.open( flatfile, ios :: in|ios :: out);
bool ktemu;
ktemu = false;
while ( f.read( (char*)&barang, sizeof(barang) ) ) {
if (barang.ID_barang == ID_barang_diperbarui) {
ktemu = true;
// menampilkan detil sebelum diperbarui
cout << "+-----+--------------------+------------+----------+--------------+\n";
cout << "| ID" << "| Nama" << "| Harga" << "| Stock" << "| Kedaluwarsa|" << endl;
cout << "+-----+--------------------+------------+----------+--------------+\n";
keluaranBarang();
cout << "+-----+--------------------+------------+----------+--------------+\n";
// memasukkan data baru
cout << "Silahkan masukkan data barang baru." << endl;
buatBarang();
cout << "Data barang telah diperbarui\n";
int pos = -1 * sizeof(barang);
f.seekp(pos, ios :: cur); // cari posisi text di file
f.write( (char*)&barang, sizeof(barang) ); // menulisnya ke barang.txt
break; // stop
}
}
if (!ktemu) {
cout << "\nID barang " << ID_barang_diperbarui << " tidak ditemukan.\n";
}
f.close();
}
void cariBarang(int ID_barang_cari) {
bool ktemu = false;
ifstream f;
f.open( flatfile, ios :: binary );
while ( f.read( (char*) &barang, sizeof(barang)) ) {
// keadaan jika barang ditemukan
if (barang.ID_barang == ID_barang_cari) {
tBarang = barang;
ktemu = true;
break; // stop looping
}
}
if (ktemu) { // eksekusi ketika barang ditemukan
cout << "+-----+--------------------+------------+----------+--------------+\n";
cout << "| ID" << "| Nama" << "| Harga" << "| Stock" << "| Kedaluwarsa|" << endl;
cout << "+-----+--------------------+------------+----------+--------------+\n";
keluaranBarang();
cout << "+-----+--------------------+------------+----------+--------------+\n";
} else {
cout << "\nID barang " << ID_barang_cari << " tidak ditemukan.\n";
}
f.close();
}
void hapusDataBarang(int ID_barang_dihapus) {
ifstream f2;
f2.open(flatfile, ios :: binary);
ofstream f3;
f3.open("temp.txt", ios :: out | ios :: binary);
bool ktemu = false;
while (f2.read ( (char*)&barang, sizeof(barang) ) ) {
if (barang.ID_barang != ID_barang_dihapus) {
f3.write( (char*)&barang, sizeof(barang) );
} else {
ktemu = true;
}
}
if (ktemu) {
cout << "+-----+--------------------+------------+----------+--------------+\n";
cout << "| ID" << "| Nama" << "| Harga" << "| Stock" << "| Kedaluwarsa|" << endl;
cout << "+-----+--------------------+------------+----------+--------------+\n";
keluaranBarang();
cout << "+-----+--------------------+------------+----------+--------------+\n";
} else {
cout << "Data barang dengan ID " << ID_barang_dihapus << " tidak ditemukan.\n";
}
f2.close();
f3.close();
remove (flatfile);
rename ("temp.txt", flatfile);
}
/* Definisi Admin dan Pegawai */
/* ** Admin ** */
void keluaranAdmin() {
cout << "|" << setw(25) << uAdmin.nama
<< "|" << setw(20) << uAdmin.no_id
<< "|" << setw(25) << uAdmin.alamat
<< "|" << endl;
}
void buatAdmin() {
cout << "Nama : "; cin.ignore(); getline(cin, uAdmin.nama);
cout << "No. Identitas : "; cin >> uAdmin.no_id;
cout << "Alamat : "; cin.ignore(); getline(cin, uAdmin.alamat);
cout << "username : "; cin >> uAdmin.username;
cout << "Password : "; cin >> uAdmin.password;
cout << "\n";
}
char adm[30] = "admin.txt";
void simpanDataAdmin() {
ofstream fadm;
buatAdmin();
// proses simpan objek ke file
fadm.open(adm, ios :: binary | ios :: app);
fadm.write( (char*) &uAdmin, sizeof(uAdmin) );
fadm.close();
}
void bacaDataAdmin() {
ifstream fadm;
fadm.open( adm, ios :: binary);
cout << "\n\t\t\tDaftar Admin\n";
cout << "+-------------------------+--------------------+-------------------------+\n";
cout << "| Nama " << "| No. Identitas " << "| Alamat |" << endl;
cout << "+-------------------------+--------------------+-------------------------+\n";
while ( fadm.read( (char*)&uAdmin, sizeof(uAdmin)) ) {
keluaranAdmin();
}
cout << "+--------------------+--------------------+------------------------------+\n";
fadm.close();
}
void hapusDataAdmin(int no_id_dihapus) {
ifstream fadm2;
fadm2.open(adm, ios :: binary);
ofstream fadm3;
fadm3.open("tempadm.txt", ios :: out | ios :: binary);
bool ktemu = false;
while (fadm2.read ( (char*)&uAdmin, sizeof(uAdmin) ) ) {
if (uAdmin.no_id != no_id_dihapus) {
fadm3.write( (char*)&uAdmin, sizeof(uAdmin) );
} else {
ktemu = true;
}
}
if (ktemu) {
cout << "+-------------------------+--------------------+-------------------------+\n";
cout << "| Nama " << "| No. Identitas " << "| Alamat |" << endl;
cout << "+-------------------------+--------------------+-------------------------+\n";
keluaranAdmin();
cout << "+--------------------+--------------------+------------------------------+\n";
cout << "Data admin telah dihapus.\n";
} else {
cout << "Data admin dengan No. Identitas " << no_id_dihapus << " tidak ditemukan.\n";
}
fadm2.close();
fadm3.close();
remove (adm);
rename ("tempadm.txt", adm);
}
/* ** Pegawai ** */
void keluaranPegawai() {
cout << "|" << setw(20) << uPegawai.nama
<< "|" << setw(20) << uPegawai.no_id
<< "|" << setw(20) << uPegawai.alamat
<< "|" << setw(20) << uPegawai.username
<< "|" << setw(20) << uPegawai.password << "|" << endl;
}
void buatPegawai() {
cout << "Nama : "; cin.ignore(); getline(cin,uPegawai.nama);
cout << "No. Identitas : "; cin >> uPegawai.no_id;
cout << "Alamat : "; cin.ignore(); getline(cin,uPegawai.alamat);
cout << "username : "; cin >> uPegawai.username;
cout << "Password : "; cin >> uPegawai.password;
}
char pg[30] = "pegawai.txt";
void simpanPegawai() {
ofstream fpg;
buatPegawai();
// proses simpan objek ke file
fpg.open(pg, ios :: binary | ios :: app);
fpg.write( (char*) &uPegawai, sizeof(uPegawai) );
fpg.close();
}
void bacaPegawai() { // akses untuk admin
ifstream fpg;
fpg.open( pg, ios :: binary);
cout << "\n\t\t\tDaftar Pegawai\n";
cout << "+--------------------+--------------------+--------------------+--------------------+--------------------+\n";
cout << "| Nama " << "| No. Identitas " << "| Alamat |" << " username |" << " Password |" << endl;
cout << "+--------------------+--------------------+--------------------+--------------------+--------------------+\n";
while ( fpg.read( (char*)&uPegawai, sizeof(uPegawai)) ) {
keluaranPegawai();
}
cout << "+--------------------+--------------------+--------------------+--------------------+--------------------+\n";
fpg.close();
}
void perbaruiDataPegawai(long no_id_diperbarui) {
fstream f; // baca/tulis file langsung
f.open( pg, ios :: in|ios :: out);
bool ktemu;
ktemu = false;
while ( f.read( (char*)&uPegawai, sizeof(uPegawai) ) ) {
if (uPegawai.no_id == no_id_diperbarui) {
ktemu = true;
// menampilkan detil sebelum diperbarui
cout << "+--------------------+--------------------+--------------------+--------------------+--------------------+\n";
cout << "| Nama " << "| No. Identitas " << "| Alamat |" << " username |" << " Password |" << endl;
cout << "+--------------------+--------------------+--------------------+--------------------+--------------------+\n";
keluaranPegawai();
cout << "+--------------------+--------------------+--------------------+--------------------+--------------------+\n";
// memasukkan data baru
cout << "Silahkan masukkan data pegawai baru." << endl;
buatBarang();
cout << "Data pegawai telah diperbarui\n";
int pos = -1 * sizeof(uPegawai);
f.seekp(pos, ios :: cur); // cari posisi text di file
f.write( (char*)&uPegawai, sizeof(uPegawai) ); // menulisnya ke barang.txt
break; // stop
}
}
if (!ktemu) {
cout << "\nNo. Identitas " << no_id_diperbarui << " tidak ditemukan.\n";
}
f.close();
}
void hapusDataPegawai(int no_id_dihapus) {
ifstream fpg2;
fpg2.open(pg, ios :: binary);
ofstream fpg3;
fpg3.open("temp_pg.txt", ios :: out | ios :: binary);
bool ktemu = false;
while (fpg2.read ( (char*)&uAdmin, sizeof(uAdmin) ) ) {
if (uPegawai.no_id != no_id_dihapus) {
fpg3.write( (char*)&uAdmin, sizeof(uAdmin) );
} else {
ktemu = true;
}
}
if (ktemu) {
cout << "+-----+--------------------+----------+----------+-------------+\n";
cout << "| Nama" << "| No. Identitas" << "| Alamat|" << endl;
cout << "+-----+--------------------+----------+----------+-------------+\n";
keluaranPegawai();
cout << "+-----+--------------------+----------+----------+-------------+\n";
cout << "Data pegawai telah dihapus.\n";
} else {
cout << "Data pegawai dengan No. Identitas " << no_id_dihapus << " tidak ditemukan.\n";
}
fpg2.close();
fpg3.close();
remove (pg);
rename ("temp_pg.txt", pg);
}
/* ** Transaksi ** */
void Jual(int ID_barang_dijual) {
fstream f; // baca/tulis file langsung
f.open( flatfile, ios :: in|ios :: out);
// ganti ke address folder masing"
ofstream struk("D:\\TUGAS\\DASPROG\\MINGGU UAS\\TUBES_toserba\\struk.txt", ios::trunc); // overwrite
ofstream trx("D:\\TUGAS\\DASPROG\\MINGGU UAS\\TUBES_toserba\\transaksi.txt", ios::app); // continously
unsigned int jumlah, pil, hTotal = 0, harga_jenis;
char buff[DTTMSZ]; // buffer waktu
struk << "-------------------------------------------------\n";
struk << getDtTm (buff) << endl;
trx << "-------------------------------------------------\n";
trx << getDtTm (buff) << endl;
bool tambah;
tambah = true;
while (tambah) {
fstream f; // baca/tulis file langsung
f.open( flatfile, ios :: in|ios :: out);
while ( f.read( (char*)&barang, sizeof(barang) ) ) {
if (barang.ID_barang == ID_barang_dijual) {
// menampilkan detil sebelum diperbarui
cout << "+-----+--------------------+------------+----------+--------------+\n";
cout << "| ID" << "| Nama" << "| Harga" << "| Stock" << "| Kedaluwarsa|" << endl;
cout << "+-----+--------------------+------------+----------+--------------+\n";
keluaranBarang();
cout << "+-----+--------------------+------------+----------+--------------+\n";
// memasukkan data baru
cout << "Masukkan jumlah barang: "; cin >> jumlah;
if (barang.stock >= jumlah) {
// assign data barang lama ke temporary
unsigned int temp,temp2;
double temp3;
string temp4, temp5;
temp = barang.ID_barang;
temp4 = barang.nama;
temp3 = barang.harga;
temp2 = barang.stock - jumlah;
temp5 = barang.tExpired;
hapusDataBarang(ID_barang_dijual); // data barang lama dihapus
// assign data untuk struk dan menulis kembali ke barang.dat
barang.ID_barang = temp;
barang.nama = temp4;
barang.harga = temp3;
barang.stock = temp2;
barang.tExpired = temp5;
harga_jenis = barang.harga*jumlah;
int pos = -1 * sizeof(barang);
f.seekp(pos, ios :: cur); // cari posisi text sekarang di file
f.write( (char*)&barang, sizeof(barang) ); // menulisnya ke barang.dat
struk << "-------------------------------------------------\n";
struk << barang.nama << setw(5) << jumlah << setw(10) << barang.harga << setw(10) << harga_jenis << endl;
trx << "-------------------------------------------------\n";
trx << barang.nama << setw(5) << jumlah << setw(10) << barang.harga << setw(10) << harga_jenis << endl;
hTotal += harga_jenis;
} else {
cout << "Stok tidak tersedia atau mencukupi.\n";
}
cout << "Transaksi(1/0) : ";
cin >> pil;
if (pil == 1) {
cout << "\nMencetak struk...\n";
tambah = false;
} else if (pil == 0) {
tambah = true;
} else {
cout << "Input Anda salah.";
tambah = false;
}
}
}
}
struk << "-------------------------------------------------\n";
struk << setw(28) << "HARGA TOTAL = " << hTotal << "\n\n";
trx << "-------------------------------------------------\n";
trx << setw(28) << "HARGA TOTAL = " << hTotal << "\n\n";
struk.close();
trx.close();
f.close();
}
int Login (int privil) {
int flag;
char ch1, ch2;
string temp1;
string temp2;
if (privil == 1) {
cout << "Username: ";
cin >> temp1;
cout << "Password: ";
ch2 = _getch();
while (ch2 != 13) {
temp2.push_back(ch2);
cout << "*";
ch2 = _getch();
}
ifstream fadm2;
fadm2.open(adm, ios :: binary);
while ( fadm2.read( (char*) &uAdmin, sizeof(uAdmin)) ) {
if (temp1 == uAdmin.username && temp2 == uAdmin.password) {
cout << "\nAnda berhasil login.\n";
flag = 1;
return 1;
break; // keluar dari loop
}
}
if (flag != 1) {
cout << "\nMaaf username atau password yang Anda masukkan salah.\n";
}
} else if (privil == 2) {
cout << "Username: ";
cin >> temp1;
cout << "Password: ";
ch2 = _getch();
while (ch2 != 13) {
temp2.push_back(ch2);
cout << "*";
ch2 = _getch();
}
ifstream fpg2;
fpg2.open(pg, ios :: binary);
while ( fpg2.read( (char*) &uPegawai, sizeof(uPegawai)) ) {
if (temp1 == uPegawai.username && temp2 == uPegawai.password) {
cout << "\nAnda berhasil login.\n";
return 2;
flag = 1;
break; // keluar dari loop
}
}
if (flag != 1) {
cout << "\nMaaf username atau password yang Anda masukkan salah.\n";
}
} else if (privil == 3) {
return 3;
} else {
return 5;
}
}
int main() {
int pil, pil2, pil3, status1, status2, status3, i;
status1 = 0;
while (status1 == 0) { // menu awal
cout << "\nLogin Sebagai\n1.Admin\n2.Pegawai\n3.Batal\n";
cout << "Masukkan pilihan: ";
cin >> pil;
status2 = 1;
switch(Login(pil)) {
case 1: cout << "\n\t\tTOKO SERBA ADA";
status2 = 0;
while (status2 == 0) { // menu admin
cout << "\nADMIN\n1.Kelola Barang\n2.Kelola Admin\n3.Kelola Pegawai\n4.Logout\n";
cout << "Masukkan pilihan: ";
cin >> pil2;
switch (pil2) {
case 1 : cout << "\nKELOLA BARANG\n1.Daftar Barang\n2.Tambah\n3.Perbarui\n4.Cari\n5.Hapus\n6.Kembali\n";
status3 = 0;
while (status3 == 0) { // Kelola barang
cout << "Masukkan pilihan: ";
cin >> pil3;
switch(pil3) {
case 1: bacaDataBarang();
break;
case 2: cout << "Silahkan masukkan data barang.\n";
simpanDataBarang();
break;
case 3: cout << "Masukkan ID barang diperbarui: ";
cin >> i;
perbaruiDataBarang(i);
break;
case 4: cout << "Masukkan ID barang dicari: ";
cin >> i;
cariBarang(i);
break;
case 5: cout << "Masukkan ID barang dihapus: ";
cin >> i;
hapusDataBarang(i);
break;
case 6: status3 = 1;
break;
default: cout << "Input Anda salah.\n";
break;
}
}
break;
case 2: cout << "\nKELOLA ADMIN\n1.Daftar Admin\n2.Tambah Admin\n3.Hapus Admin\n4.Kembali\n";
status3 = 0; // Kelola admin
while (status3 == 0) {
cout << "Masukkan pilihan: ";
cin >> pil;
switch(pil) {
case 1: bacaDataAdmin();
break;
case 2: cout << "Silahkan masukkan data Admin.\n";
simpanDataAdmin();
break;
case 3: cout << "Masukkan No. Identitas Admin dihapus: ";
cin >> i;
hapusDataAdmin(i);
case 4: status3 = 1;
break;
default: cout << "Input Anda salah.\n";
break;
}
}
break;
case 3: cout << "\nKELOLA PEGAWAI\n1.Daftar Pegawai\n2.Tambah Pegawai\n3.Perbarui Data Pegawai\n4.Hapus Data Pegawai\n5.Kembali\n";
status3 = 0; // Kelola pegawai
while (status3 == 0) {
cout << "\nMasukkan pilihan: ";
cin >> pil;
switch(pil) {
case 1: bacaPegawai();
break;
case 2: cout << "Silahkan masukkan data Pegawai.\n";
simpanPegawai();
break;
case 3: cout << "Masukkan No. Identitas Pegawai diperbarui: ";
cin >> i;
perbaruiDataPegawai(i);
break;
case 4: cout << "Masukkan No. Identitas Pegawai dihapus: ";
cin >> i;
hapusDataPegawai(i);
break;
case 5: status3 = 1;
break;
default: cout << "Input Anda salah.\n";
break;
}
}
break;
case 4: cout << "Logging out\n";
status2 = 1;
break;
default: cout << "\nInput Anda salah.";
break;
}
}
break;
case 2: cout << "\t\tTOKO SERBA ADA\n";
cout << "PEGAWAI\n1.Daftar Barang\n2.Menjual\n3.Logout\n";
status2 = 0;
while (status2 == 0) {
cout << "Masukkan pilihan: ";
cin >> pil;
switch (pil) {
case 1: bacaDataBarang();
break;
case 2: Jual(13);
break;
case 3: cout << "Logging out\n";
status2 = 1;
break;
default: cout << "Input Anda salah.\n";
break;
}
}
break;
case 3: status1 = 1;
cout << "Keluar...\n";
break;
default: cout << "\nInput Anda salah.\n";
break;
}
}
getch();
return 0;
}

Share this

Related Posts

Latest
Previous
Next Post »