Суть задания: создать программу для работы с базой данных с нуля. Файл для БД создается программой для последующего заполнения.
В базе данных должна записываться информация о каждом студенте:
Имя Фамилия Отчество Группа Возраст Пол.
Главные условия задания сделать функционал, (саму базу будет заполнять преподаватель через консоль).
Функции: Добавление записи о студенте, редактировании, удалении, просмотра всех записей, сортировки по заданным параметрам : по группе, по фамилии, и т.д.
Считывание происходит из после заполнения через консоль.
Уже голова не варит, никак не могу сделать сортировку по заданному пользователем параметру.
Код:
Код:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <conio.h>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main() {
FILE *fp, *ft;
char another, choice;
struct student {
char fam[50], imua[50];
char otch[50];
char course[100];
char pol[6];
int age;
};
setlocale(LC_ALL, ("Russian"));
struct student e;
char xfam[50], ximua[50], xcource[100], xpol[6];
long int recsize;
fp=fopen("users.txt","rb+");
if (fp == NULL) {
fp = fopen("users.txt","wb+");
if (fp==NULL)
{
puts("Невозможно открыть файл!");
return 0;
}
}
recsize = sizeof(e);
while(1) {
setlocale(LC_ALL, ("Russian"));
system("cls");
cout << "\n=========== Список студентов ===========";
cout <<"\n\n ";
cout << "\n========================================";
cout << "\n 1. Добавить запись о новом студенте";
cout << "\n 2. Список студентов";
cout << "\n 3. Редактировать запись о студенте";
cout << "\n 4. Удалить запись о студенте";
cout << "\n 5. Выйти из программы";
cout << "\n========================================";
cout << "\n";
cout << "\n Выберите пункт меню:";
fflush(stdin);
choice = getche();
switch(choice)
{
case '1' :
fseek(fp,0,SEEK_END);
another ='Y';
while(another == 'Y' || another == 'y')
{
system("cls");
cout << "Введите фамилию: ";
cin >> e.fam;
cout << "Введите имя: ";
cin >> e.imua;
cout << "Введите отчество: ";
cin >> e.otch;
cout << "Введите курс: ";
cin >> e.course;
cout << "Введите возраст: ";
cin >> e.age;
cout << "Введите пол: ";
cin >> e.pol;
fwrite(&e,recsize,1,fp);
cout << "\n Добавить еще одну запись? (Y/N) ";
fflush(stdin);
another = getchar();
}
break;
case '2':
system("cls");
rewind(fp);
cout << "=== Просмотр списка студентов ===";
cout << "\n";
while (fread(&e,recsize,1,fp) == 1){
cout << "\n";
cout <<"\nФИО :: " <<e.fam <<" "<<e.imua<<" "<<e.otch;
//cout << "\n";
cout <<"\nКурс :: " <<e.course ;
cout <<"\nВозраст :: "<<e.age;
cout << "\nПол :: "<<e.pol;
}
cout << "\n\n";
system("pause");
break;
case '6' : //Тут должна быть сортировка
case '3' :
system("cls");
another = 'Y';
while (another == 'Y'|| another == 'y')
{
cout << "\n Введите имя студента : ";
cin >> ximua;
rewind(fp);
while (fread(&e,recsize,1,fp) == 1)
{
if (strcmp(e.imua,ximua) == 0)
{
cout << "Введите новую фамилию : ";
cin >> e.fam;
cout << "Введите новое имя : ";
cin >> e.imua;
cout << "Введите новое отчество: ";
cin >> e.otch;
cout << "Введите новый курс : ";
cin >> e.course;
cout << "Введите новый возраст : ";
cin >> e.age;
cout << "Введите новый пол : ";
cin >> e.pol;
fseek(fp, - recsize, SEEK_CUR);
fwrite(&e,recsize,1,fp);
break;
}
else
cout<<"Запись о студенте не найдена";
}
cout << "\n Изменить другую запись? (Y/N) ";
fflush(stdin);
another = getchar();
}
break;
case '4':
system("cls");
another = 'Y';
while (another == 'Y'|| another == 'y')
{
while (fread(&e,recsize,1,fp) == 1){
cout << "\n";
cout <<"\nФИО :: " <<e.fam <<" "<<e.imua<<" "<<e.otch;
//cout << "\n";
cout <<"\nКурс :: " <<e.course ;
cout <<"\nВозраст :: "<<e.age;
cout << "\nПол :: "<<e.pol;
}
cout << "\n\n";
cout << "\n Введите фамилию студента запись о котором нужно удалить : ";
cin >> ximua;
ft = fopen("temp.dat", "wb");
rewind(fp);
while (fread (&e, recsize,1,fp) == 1)
if (strcmp(e.imua,ximua) != 0)
{
fwrite(&e,recsize,1,ft);
}
fclose(fp);
fclose(ft);
remove("users.txt");
rename("temp.dat","users.txt");
fp=fopen("users.txt","rb+");
cout << "\n Удалить другую запись? (Y/N) ";
fflush(stdin);
another = getchar();
}
break;
case '5':
fclose(fp);
cout << "\n\n";
cout << "\t\t Закрытие программы...";
cout << "\n\n";
exit(0);
}
}
system("pause");
return 0;
}