Last active
June 17, 2016 09:16
-
-
Save clive819/c4254c9f3157f8b9f0804d03490ffa70 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define _CRT_SECURE_NO_WARNINGS | |
#include <iostream> | |
#include <fstream> | |
#include <string> | |
#include <iomanip> | |
using namespace std; | |
struct DATA{ | |
int record, quantity; | |
char name[80]; | |
float price; | |
}; | |
struct DATA data[100]; | |
void initialize_dat(){ | |
ofstream file; | |
file.open("fruits.dat", ios::out | ios::binary); | |
for (int i=0; i<100; i++) { | |
file.write(reinterpret_cast<char *>(&data[i].record), sizeof(data[i].record)); | |
file.write(reinterpret_cast<char *>(&data[i].name), sizeof(data[i].name)); | |
file.write(reinterpret_cast<char *>(&data[i].quantity), sizeof(data[i].quantity)); | |
file.write(reinterpret_cast<char *>(&data[i].price), sizeof(data[i].price)); | |
} | |
file.close(); | |
} | |
void load_dat(){ | |
ifstream fruit; | |
fruit.open("fruits.dat", ios::in | ios::binary); | |
while (!fruit.eof()) { | |
int id, num; | |
char name[80]; | |
float price; | |
fruit.read(reinterpret_cast<char *>(&id), sizeof(id)); | |
fruit.read(reinterpret_cast<char *>(&name), sizeof(name)); | |
fruit.read(reinterpret_cast<char *>(&num), sizeof(num)); | |
fruit.read(reinterpret_cast<char *>(&price), sizeof(price)); | |
data[id].record = id; | |
data[id].price = price; | |
data[id].quantity = num; | |
strcpy(data[id].name, name); | |
} | |
fruit.close(); | |
} | |
void list_dat(){ | |
cout << setw(7) << "Record#" << setw(13) << "Fruit Name" << setw(10) << "Quantity" << setw(8) << "Price" << "\n"; | |
for (int i=0; i<100; i++) { | |
if (data[i].record == -1) { | |
continue; | |
} | |
cout << setw(7) << data[i].record << setw(13) << data[i].name << setw(10) << data[i].quantity << setw(8) << fixed << setprecision(2) << data[i].price << "\n"; | |
} | |
} | |
void update_record(){ | |
int record, quantity; | |
float price; | |
char name[80]; | |
cout << "Which record to update? "; | |
cin >> record; | |
if (data[record].record==-1) { | |
cout << "Cannot update. The record is empty.\n"; | |
} | |
else{ | |
cout << setw(7) << "Record#" << setw(13) << "Fruit Name" << setw(10) << "Quantity" << setw(8) << "Price" << "\n"; | |
cout << setw(7) << data[record].record << setw(13) << data[record].name << setw(10) << data[record].quantity << setw(8) << fixed << setprecision(2) << data[record].price << "\n"; | |
cout << "Name: "; | |
cin >> name; | |
cout << "Quantity: "; | |
cin >> quantity; | |
cout << "Price: "; | |
cin >> price; | |
data[record].quantity = quantity; | |
data[record].price = price; | |
strcpy(data[record].name, name); | |
cout << "Record updated.\n"; | |
} | |
} | |
void insert(){ | |
int count = 0; | |
for (int i=0; i<100; i++) { | |
if (data[i].record!=-1) { | |
count++; | |
} | |
} | |
if (count==100) { | |
cout << "Cannot insert. The file is full.\n"; | |
} | |
else{ | |
int record, quantity; | |
float price; | |
char name[80]; | |
cout << "Record: "; | |
cin >> record; | |
cout << "Name: "; | |
cin >> name; | |
cout << "Quantity: "; | |
cin >> quantity; | |
cout << "Price: "; | |
cin >> price; | |
data[record].record = record; | |
data[record].quantity = quantity; | |
data[record].price = price; | |
strcpy(data[record].name, name); | |
cout << "Record inserted.\n"; | |
} | |
} | |
void Delete(){ | |
int num; | |
cout << "Which record would you like to delete: "; | |
cin >> num; | |
data[num].record = -1; | |
data[num].price = 0.00; | |
data[num].quantity = 0; | |
strcpy(data[num].name, ""); | |
} | |
void save(){ | |
ofstream file; | |
file.open("fruits.dat", ios::out | ios::binary); | |
for (int i=0; i<100; i++) { | |
file.write(reinterpret_cast<char *>(&data[i].record), sizeof(data[i].record)); | |
file.write(reinterpret_cast<char *>(&data[i].name), sizeof(data[i].name)); | |
file.write(reinterpret_cast<char *>(&data[i].quantity), sizeof(data[i].quantity)); | |
file.write(reinterpret_cast<char *>(&data[i].price), sizeof(data[i].price)); | |
} | |
file.close(); | |
} | |
int main(){ | |
for (int i=0; i<100; i++) { | |
data[i].record = -1; | |
data[i].price = 0.00; | |
data[i].quantity = 0; | |
strcpy(data[i].name, ""); | |
} | |
ifstream fruit; | |
fruit.open("fruits.dat", ios::in | ios::binary); | |
if (!fruit) { | |
fruit.close(); | |
initialize_dat(); | |
} | |
load_dat(); | |
cout << "Data of fruits.dat is loaded!\n\n"; | |
int choice=-1; | |
cout << "Enter a choice:\n1 List all fruits.\n2 Update record.\n3 Insert record.\n4 Delete record.\n5 End program.\n"; | |
while (choice!=5) { | |
cout << "?"; | |
cin >> choice; | |
switch (choice) { | |
case 1: | |
list_dat(); | |
break; | |
case 2: | |
update_record(); | |
break; | |
case 3: | |
insert(); | |
break; | |
case 4: | |
Delete(); | |
break; | |
default: | |
break; | |
} | |
} | |
save(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment