Написать программу, выполняющую действия с базой данных - C (СИ)
Формулировка задачи:
Доброго всем времени суток
Хотел бы чтобы вы посмотрели код программы, и подсказали что нужно доработать,вроде все работает, это ргз в вузе...
Задание заключается в том, чтобы "Написать программу, выполняющую действия с базой данных.
Количество записей в БД:100
№ поля для сортировки: 3
Выделение памяти под структуры: Статическое
Тип сортировки: убывает
Устройство для вывода записей: экран
Вообщем у меня главный вопрос по выделению памяти, правильно ли я сделал.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
typedef struct bd{
int number; // Номер записи
char* name; // Название фирмы
int count; // Количество работников
int money;/* Уставной капитал */} ;
struct bd massiv[100];
int n;
FILE *f;
// Функции для работы с базой данных
int sozdanie_zapisi()
{
n=0;
printf("Номер записи:");
scanf("%d",&massiv[n].number);
if (massiv[n].number<1) massiv[n].number=1;
if (massiv[n].number>100) massiv[n].number=100;
for (int i=0; i<n; i++)
if (massiv[i].number==massiv[n].number) {printf("Запись с таким номером уже есть!\n"); return 0;}
printf("Название фирмы:");
fflush(stdin);
gets(massiv[n].name);
printf("Количество работников:"); scanf("%d",&massiv[n].count);
printf("Уставной капитал:"); scanf("%d",&massiv[n].money);
n++;
}
void vivod_zapisi()
{ int number;
int notfound = 1;
printf("Введите номер записи:\n"); scanf("%d",&number);
for(int i=0; i<=n; i++)
{if (massiv[i].number == number)
{
printf("%d.\nНазвание фирмы:%s\nКоличество работников:%d\nУставной капитал:%d\n",massiv[i].number, massiv[i].name, massiv[i].count, massiv[i].money);
notfound = 0;}
}
if (notfound == 1) printf("Запись не найдена!\n");
}
int sortirovka() // Отсортировать таблицу по уставному капиталу в порядке убывания
{ bd temp;
int i, j;
if (n == 0) {printf("Нечего сортировать!\n"); return 0;}
for( i=0; i < n; i++)
{ for( j = n-1; j > i; j-- )
{
if ( massiv[j-1].money < massiv[j].money )
{ temp=massiv[j-1]; massiv[j-1]=massiv[j]; massiv[j]=temp;
}
}
}
printf("Отсортированно!\n\n");
}
void vivod_bd()
{ int j;
printf("\n");
for(int i=0;i<n;i++) {
if (massiv[i].name != NULL)
printf("%d.\nНазвание фирмы:%s\nКоличество работников:%d\nУставной каптал:%d\n",massiv[i].number, massiv[i].name, massiv[i].count, massiv[i].money);}
}
void sohranenie()
{ f=fopen("base.txt","w");
for(int i=0; i<n; i++)
fprintf(f,"\n%d %s %d %d",massiv[i].number,massiv[i].name,massiv[i].count,massiv[i].money);
printf("Успешно записано\n");
fclose(f);
}
int zagruzka_bd()
{ f = fopen("bd.txt","r+");
if (f==NULL) {printf("Файл не найден!\n"); return 0; }
int j;
while(!feof(f))
{
fscanf (f, "%d", &massiv[n].number);
fscanf (f, "%s", &massiv[n].name);
fscanf (f, "%d", &massiv[n].count);
fscanf (f, "%d", &massiv[n].money);
n++;
}
fclose(f);
printf("Загрузка завершена!\n");
}
//---------------
// Тело программы
int main()
{
setlocale(LC_ALL,"");
int k;
n=0;
while(1) {
printf("1 - Ввод записи\n2 - Вывод записи\n3 - Сортировка\n4 - Вывод всех записей\n5 - Сохранить в файл\n6 - Чтение из файла\n7 - Выход\n"); scanf("%d",&k);
switch(k) {
case 1: {sozdanie_zapisi();
break;}
case 2: {vivod_zapisi();
break;}
case 3: {sortirovka();
break;}
case 4: {vivod_bd();
break;}
case 5: {sohranenie();
break;}
case 6: {zagruzka_bd();
break;}
case 7: {exit(0);}
default:{printf("Неверная команда!\n");
break;}
}
}
getch();
}Решение задачи: «Написать программу, выполняющую действия с базой данных»
textual
Листинг программы
gets(massiv[n].name);