Skip to content

Instantly share code, notes, and snippets.

@clive819
Last active June 17, 2016 09:16
Show Gist options
  • Save clive819/c4254c9f3157f8b9f0804d03490ffa70 to your computer and use it in GitHub Desktop.
Save clive819/c4254c9f3157f8b9f0804d03490ffa70 to your computer and use it in GitHub Desktop.
#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