Автор работы: Пользователь скрыл имя, 18 Ноября 2013 в 19:50, курсовая работа
Задание: Написать программу, выполняющую действия с базой данных по вариантам заданий из таблицы 5.База данных должна быть организована в виде массива структур. Память под массив структур выделяется статическая. Программа должна обеспечивать следующий набор операций: 1) ввод записи с произвольным номером; 2) вывод записи с заданным номером; 3) сортировка записей по заданному полю в порядке убывания или возрастания; 4) вывод всех записей в отсортированном порядке на экран или принтер; 5) чтение записей из файла; 6) сохранение всех записей в файле.
Для сортировки БД использовать массив указателей. Ввод и вывод данных должен сопровождаться необходимыми подсказками.
Министерство образования и науки РФ
НГТУ
Кафедра Автоматики
Курсовая работа
Программирование на языке Си
Таблица: 5 Преподаватель:
Вариант: 17
Факультет: АВТФ
Группа: АA-26
Студент: Мелешкин Кирилл
Новосибирск 2013
Задание:
Написать программу, выполняющую действия с базой данных по вариантам
заданий из таблицы 5.База данных должна быть организована в виде массива
структур. Память под массив структур выделяется статическая. Программа должна обеспечивать следующий набор
операций:
1) ввод записи с произвольным номером;
2) вывод записи с заданным номером;
3) сортировка записей по заданному полю в порядке убывания или
возрастания;
4) вывод всех записей в отсортированном порядке на экран или принтер;
5) чтение записей из файла;
6) сохранение всех записей в файле.
Для сортировки БД использовать массив указателей. Ввод и вывод данных
должен сопровождаться необходимыми подсказками.
Поля базы данных:
С – название пункта, расстояние, количество рейсов
вариант |
Поля записи БД (элементы структуры) |
Колличество записей в БД |
№ поля для сортировки |
Выделение памяти под структуры |
Тип сортировки |
Устройство для вывода записей |
17 |
С |
100 |
3 |
динамическое |
Возрастает |
Экран |
Листинг программы:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
typedef struct{
int number; // Номер записи
char* name; // Название фирмы
int count; // Количество работников
int money;/* Уставной капитал */} base;
base* arr;
int n;
FILE *f;
//----------------------------
// Функции для работы с базой данных
int create_record()
{ printf("Номер записи:"); scanf("%d",&arr[n].number);
if (arr[n].number<1) arr[n].number=1;
if (arr[n].number>100) arr[n].number=100;
for (int i=0; i<n; i++)
if (arr[i].number == arr[n].number) {printf("Запись с таким номером уже есть!\n"); return 0;}
arr[n].name = (char*)malloc(256*sizeof(char)
printf("Название фирмы:");
fflush(stdin);
gets(arr[n].name);
printf("Количество работнимков:"); scanf("%d",&arr[n].count);
printf("Уставной капитал:"); scanf("%d",&arr[n].money);
n++;
}
void print_record()
{ int number;
int notfound = 1;
printf("Введите номер записи:\n"); scanf("%d",&number);
for(int i=0; i<=n; i++)
{if (arr[i].number == number) {printf("%d.\nНазвание фирмы:%s\nКоличество работников:%d\nУставной капитал:%d\n",arr[i].number, arr[i].name, arr[i].count, arr[i].money);
notfound = 0;}}
if (notfound == 1) printf("Запись не найдена!\n");
}
int load_base()
{ f = fopen("base.txt","r+");
if (f==NULL) {printf("Файл не найден!\n"); return 0; }
int j;
while(!feof(f))
{
fscanf (f, "%d", &arr[n].number);
arr[n].name = (char*)malloc(sizeof(char)*
fscanf (f, "%s", arr[n].name);
fscanf (f, "%d", &arr[n].count);
fscanf (f, "%d", &arr[n].money);
n++;
}
fclose(f);
printf("Загрузка завершена!\n");
}
int sort() // Отсортировать таблицу по уставному капиталу в порядке убывания
{ base 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 ( arr[j-1].money < arr[j].money ) {
temp=arr[j-1]; arr[j-1]=arr[j]; arr[j]=temp;}
}}
printf("Отсортированно!\n\n");
}
void printall()
{ int j;
printf("\n");
for(int i=0;i<n;i++) {
if (arr[i].name != NULL)
printf("%d.\nНазвание фирмы:%s\nКоличество работников:%d\nУставной каптал:%d\n",arr[i].number, arr[i].name, arr[i].count, arr[i].money);}
}
void save()
{ f=fopen("base.txt","w");
for(int i=0; i<n; i++)
fprintf(f,"\n%d %s %d %d",arr[i].number,arr[i].name,
printf("Успешно записано\n");
fclose(f);
}
//---------------
// Тело программы
void main()
{
setlocale(LC_ALL,"");
int k;
n=0;
arr = (base*)malloc(sizeof(base)*
if (arr == 0) {printf("Память не выделена!"); exit(0);}
else {
while(1) {
printf("1 - Ввод записи\n2 - Вывод записи\n3 - Сортировка\n4 - Вывод всех записей\n5 - Сохранить в файл\n6 - Чтение из файла\n7 - Выход\n"); scanf("%d",&k);
switch(k) {
case 1: {create_record();
break;}
case 2: {print_record();
break;}
case 3: {sort();
break;}
case 4: {printall();
break;}
case 5: {save();
break;}
case 6: {load_base();
break;}
case 7: {exit(0);}
default:{printf("Неверная команда!\n");
break;}
}
}
_getch();
}
free(arr);
}
1 - Ввод записи
2 - Вывод записи
3 - Сортировка
4 - Вывод всех записей
5 - Сохранить в файл
6 - Чтение из файла
7 - Выход
1
Номер записи:1
Название фирмы:Apple
Количество работников:1500000
Уставной капитал:5000
1 - Ввод записи
2 - Вывод записи
3 - Сортировка
4 - Вывод всех записей
5 - Сохранить в файл
6 - Чтение из файла
7 - Выход
1
Номер записи:2
Название фирмы:Rich
Количество работников:50000
Уставной капитал:1000
1 - Ввод записи
2 - Вывод записи
3 - Сортировка
4 - Вывод всех записей
5 - Сохранить в файл
6 - Чтение из файла
7 - Выход
1
Номер записи:3
Название фирмы:Samsung
Количество работников:600000
Уставной капитал:3000
1 - Ввод записи
2 - Вывод записи
3 - Сортировка
4 - Вывод всех записей
5 - Сохранить в файл
6 - Чтение из файла
7 - Выход
3
Отсортированно!
1 - Ввод записи
2 - Вывод записи
3 - Сортировка
4 - Вывод всех записей
5 - Сохранить в файл
6 - Чтение из файла
7 - Выход
4
1.
Название фирмы:Apple
Количество работников:1500000
Уставной каптал:5000
3.
Название фирмы:Samsung
Количество работников:600000
Уставной каптал:3000
2.
Название фирмы:Rich
Количество работников:50000
Уставной каптал:1000
Для продолжения нажмите любую клавишу . . .