Министерство
Образования Российской Федерации Кафедра Автоматики Курсовая работа по информатике Язык СИ Вариант: 3 Группа: АП-318 Студент: Иванчиков И.В. Преподаватель: Голодных Г.П. г. Новосибирск. 2004 г. |
Задание: Написать программу, выполняющую действия с базой данных. База данных должна быть организована в виде массива структур. Память под массив структур выделяется статически. Количество записей ограничено. Программа обеспечивает следующий набор операций:
1. Ввод записи с произвольным номером
2.Вывод записи с заданным номером
3.Сортировка записей по заданному полю в порядке возрастания
4.Вывод всех записей в отсортированном порядке на принтер
№ |
Поля записи БД (элементы структуры) |
Кол-во записей в БД |
№ поля для сортировки |
Выделение памяти под структуры |
Тип сортировки |
Устройство для вывода записей |
3 |
Фамилия, год рождения, оклад |
200 |
2 |
статически |
По убыванию |
Принтер |
Код программы:
#include <stdio.h>
#include <malloc.h>
#include <graph.h>
#define dlina 20
#define kolvo_zapisey 200
struct baza //создаем структуру baza
{
char surname[dlina];
int year;
int oklad;
}lichnost[kolvo_zapisey],*bak[kolvo_zapisey];
main() //главная программа
{
int i;
char klavisha;
met:
_setvideomode(_DEFAULTMODE); //очистка экрана
printf("1. Добавить запись\n");
printf("2. Просмотреть записи\n");
printf("3. Сортировать\n");
printf("4. Печать\n");
printf("5. Просморт базы данных\n");
printf("6. Выход\n");
printf("Выберете пункт меню:");
klavisha = getch(); //ожидаем нажатия клавиши
_setvideomode(_DEFAULTMODE);
switch (klavisha)
{
case '1': //если нажата клавиша 1,то вызываем функцию добавления записи
{
printf("\nВведите номер ячейки:");
scanf("%d",&i);
dobavlenie_zapisi(i-1);
break;
}
case '2': //если нажата клавиша 2,то вызываем функцию промотра записи
{
printf("\nВведите номер ячейки:");
scanf("%d",&i);
prosmotr_zapisi(i-1);
getch();
break;
}
case '3': //если нажата клавиша 3,то вызываем функцию сортировки
{
sortirovka();
break;
}
case '4': //если нажата клавиша 4,то вызываем функцию печати
{
pechat();
break;
}
case '5': //если нажата клавиша 5,то вызываем функцию просмотра базы
{
prosmotr_bazi();
getch();
break;
}
case '6': //если нажата клавиша 6,то выходим из программы
{
exit(0);
}
}
goto met;
}
dobavlenie_zapisi(int i) //добавление записи в базу данных
{
printf("Введите фамилию: ");
scanf("%s",&lichnost[i].surname);
printf("Год рождения: ");
scanf("%d",&lichnost[i].year);
printf("Оклад сотрудника: ");
scanf("%d",&lichnost[i].oklad);
}
prosmotr_zapisi(int i) //просмотр записи с заданным номером
{
printf("Фамилия: %s", lichnost[i].surname);
printf("\nГод рождения: %d", lichnost[i].year);
printf("\nОклад: %d", lichnost[i].oklad);
printf("\nНажмите <Enter> для продолжения...");
}
sortirovka() //сортировка базы данных по году рождения
{
int i;
struct baza *temp[kolvo_zapisey];
for(i=0;i<kolvo_zapisey-1;i++) bak[i]=&lichnost[i];
i=0;
while(i<(kolvo_zapisey-1))
{
if (lichnost[i+1].year<lichnost[i].year)
{
*temp=bak[i];
bak[i]=bak[i+1];
bak[i+1]=*temp;
i=-1;
}
i++;
}
for(i=0;i<kolvo_zapisey;i++) lichnost[i]=*bak[i];
}
pechat() //печать на принтере
{
int i;
for(i=0;i<kolvo_zapisey;i++)
{
fprintf(stdprn,"\nNo.%d",i+1);
fprintf(stdprn,"\nФамилия: %s",lichnost[i].surname);
fprintf(stdprn,"\nГод рождения: %d",lichnost[i].year);
fprintf(stdprn,"\nОклад: %d\n",lichnost[i].oklad);
}
}
prosmotr_bazi() //просмотр базы данных с выводом 20 записей на страницу
{
int i;
printf("\n");
for(i=0;i<kolvo_zapisey;i++)
{
printf("%3d: %20s %20d %20d \n", i+1, lichnost[i].surname, lichnost[i].year, lichnost[i].oklad);
if ((i+1)%20==0)
{
printf("\nНажмите <Enter> для продолжения...");
getch();
_setvideomode(_DEFAULTMODE);
}
}
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.