45895 (665218), страница 2

Файл №665218 45895 (Программа обработки данных в библиотеке) 2 страница45895 (665218) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Для запуска данной программы необходимо наличие персонального компьютера IBM PC/XT c операционной системой MS-DOS.

Необходимый объем оперативной памяти -640 Кбайт.

Дла запуска программы необходимо сделать текущем каталог с программой kurs.exe и вызвать её на выполнение.

Программа работает в текстовом режиме 80х25 символов , построение диаграммы осуществляется в графическом режиме 640х480 точек 16 цветов.

Файл базы данных программы librarym.dat будет записываться и считываться из текущего каталога текущего диска.

Управление программой осуществляется с клавиатуры.

8 Руководство пользователя

После своей загрузки программа осуществляет оформление экрана , вывод на экран списка книг , содержащийся в файле базы данных , по которым можно передвигать цветовой курсор.

При нажатии клавиши Enter на одном из элементов списка , то на экран будет вызванно меню:

1) Список книг

2) Поиск по маске

3) Количество книг

4) Выход из программы

При выборе первого пункта меню моявится следующее подменю:

1) Ðàñïîëîæåíèå:

2) ×èòàëüíûé çàë

3) Àáîíåìåíò

4) Õðàíèëèùå

При нажатии пользователем клавиши Enter на выведенном списке книг появляется меню:

1) Äîáàâèòü â ñïèñîê

2) Óäàëèòü èç ñïèñêà

3) Ðåäàêòèðîâàòü

4) Ïî Àâòîðó

5) Ïî Íàçâàíèþ

6) Âûõîä â ãëàâíîå ìåíþ

При нажатии на клавиши управления курсором (вверх , вниз) можно управлять курсором , если нажать клавишу Enter или клавишу с номером пункта меню , то произойдёт то или иное действие в соответствии с выбранным пунктом.

Отсортированная последовательность выводится на экран в виде списка книг. При выборе пункта "Поиск по маске" программа запрашивает данные для поиска книги: Название , Автор , Стоимость , Порядковый номер , Количество , Тематика (Не влияет).

После поиска , если такая книга имеется в списке , данные о найденной книги выводятся на экран.

При выборе пункта "Выход из программы" программа завершает свою работу.

9 Тестирование программы

Для полной проверки работоспособности программы необходимо её протестировать.

План тестирования программы учёта и выборки информации о странах состоит в следующем:

1) Загрузка программы

2) Ввод данных о книгах

3) Удаление книги из списка

4) Редактирование данных о книге

5) Сортировка

6) Поиск по маске

7) Построение диаграммы

8) Выход из программы

Далее в пункте "Результаты работы программы" приводится распечатка тестирования программы по пунктам плана тестирования и результатов тестирования.

10 Результаты работы программы

2) Ввод данных о книгах

76 Автор2 Книга9 22 11.00р

11 Автор2 Книга8 28 21.00р

22 Автор65 Книга33 18 32.00р

55 Автор1 Книга3 12 22.00р

2 Автор2 Книга2 10 55.00р

1 Автор1 Книга 1 10 34.00р

3) Удаление книги из списка

76 Автор2 Книга9 22 11.00р

11 Автор2 Книга8 28 21.00р

22 Автор65 Книга33 18 32.00р

55 Автор1 Книга3 12 22.00р

2 Автор2 Книга2 10 55.00р

4) Редактирование данных о книге

Название: Книга3

Автор: Автор1

Стоимость: 20.00

Порядковый номер: 55

Количество: 20

Тематика: Научная

5) Сортировка

По автору:

22 Автор65 Книга33 18 32.00р

76 Автор2 Книга9 22 11.00р

2 Автор2 Книга2 10 55.00р

11 Автор2 Книга8 28 21.00р

55 Автор1 Книга3 20 20.00р

По названию:

76 Автор2 Книга9 22 11.00р

11 Автор2 Книга8 28 21.00р

22 Автор65 Книга33 18 32.00р

55 Автор1 Книга3 20 20.00р

2 Автор2 Книга2 10 55.00р

7) Построение диаграммы

Заключение

В данной курсовой работе решена задача разработки программы обработки данных в библиотеке.

По заданию к данной курсовой работе был разработан алгоритм , по которому на алгоритмическом языке С++ была разработанна программа , анализ результатов которой показал , что поставленная задача успешно решается.

Список литературы

1.Бьярн Страуструп. Язык программирования С++.в двух частях. Пер. с англ. Киев:"ДиаСофт",1993.-296 с.,ил.

2.Корриган Джон Компьютерная графика: Секреты и решения: Пер с англ. -М.:Энтроп, 1995. - 352 с., ил.

ПРИЛОЖЕНИЕ 1

Распечатка программы

#include

#include

#include

#include

#include

// Структура - данные о одной книге

struct books {

char name[30]

// Название

char fio[30]

// Автор

int num

// Количество

float price

// Стоимость

long number

// Порядковый номер

// Расположение: 0-читальный зал, 1-абонемент, 2-хранилище

int loc

int tem

// Тематика

int nn,nf

// Номер по названию, автору

}

// Массив - 500 книг и маска для поиска

books cdt[501]

// Массив данных о книгах

int cnum

// Количество книг

// Сортировать по: 1-Названию, 2-автору

char sort

// Расположение

char ftm

const char location[3][15]={" Читальный зал\x0",

" Абонемент\x0",

" Хранилище\x0"}

const char tema[5][15]={ "Художественная\x0",

" Техническая\x0",

" Научная\x0",

" Справочник\x0",

" _Не влияет_ \x0"}

// ПРОТОТИПЫ ФУНКЦИЙ

// Сравнение строки с маской

int cmp(char * a,char * b)

// Вывод списка на экран

void output(int sv,int sk)

// Обработка меню

int menu(int x,int y,char * capt)

// Ввод строки

void SInput(char * s,int lng,int x,int y)

// Ввод числа

double DInput(int x,int y)

// Индексирование массива

void index()

// Редактирование элемента

void edit(int ed)

// Вывод данных по маске

void find()

// Вывод графика

void graph()

// Обработка списка

void scroll()

// Чтение массива

void load()

// Запись массива

void save()

// ТЕЛА ФУНКЦИЙ

// Сравнение строки с маской

// a- строка, b- маска

int cmp(char * a,char * b) {

int k

int n

k=1

for (n=0

n

n++)

if (a[n]!=b[n]) k=0

return k

}

// Вывод списка на экран

void output(int sv,int sk) {

int n

int m

int nd

m=sv

// Очистка экрана

textcolor(15)

textbackground(1)

clrscr()

// Вывод двадцати элементов

for (n=1

n<20

n++) {

// Если элемент выбран, изменение цветов

if (n==sk) {

textbackground(14)

} else {

textbackground(1)

}

if (m<(cnum+1)) {

nd=0

// Поиск элемента с данным индексом

switch (sort) {

case(1):

while (((cdt[nd].nn!=m)||(cdt[nd].loc!=ftm))&&(nd

break

case(2):

while (((cdt[nd].nf!=m)||(cdt[nd].loc!=ftm))&&(nd

break

}

switch (sort) {

case(1):

if ((cdt[nd].nn!=m)||(cdt[nd].loc!=ftm)) nd=-1

break

case(2):

if ((cdt[nd].nf!=m)||(cdt[nd].loc!=ftm)) nd=-1

break

}

m++

// Вывод данных о стране на экран

gotoxy(1,m-sv)

if (nd!=-1)

cprintf("%4ld %30s %30s %4d %6.2fр",cdt[nd].number,cdt[nd].fio,

cdt[nd].name,cdt[nd].num,cdt[nd].price)

}

}

textbackground(1)

}

// Обработка меню

int menu(int x,int y,char * capt) {

int n,m

// Счетчики

int num

// Количество пунктов

int k

// Выбранный пункт

char * pt

// Временный указатель на символ

char c

// Считанный с клавиатуры символ

// Вычисляем количество пунктов

num=strlen(capt)/20

// Курсор на нулевой элемент

k=0

// Бесконечный цикл обработки

for (

) {

// Вывод меню

pt=capt

for (n=0

n

n++) {

gotoxy(x,y+n)

// Закраска пункта, на который указывает курсор

if (n==k) {

// Закраска

textbackground(12)

textcolor(14)

} else {

// Нормальный

textbackground(3)

textcolor(1)

}

cprintf("%d) ",n+1)

for (m=0

m<20

m++) cprintf("%c",*(pt++))

}

textbackground(3)

textcolor(1)

// Опрос клавиатуры

c=getch()

if (!c) c=getch()

// Проверка, не нажата ли клавиша с цифрой

if (((c-'1')>=0)&&((c-'1')

// Установка указателя в зависимости от нажатой цифры

k=c-'1'

// Запись в буфер клавиатуры символа ENTER

ungetch(13)

} else {

// Анализ

switch(c) {

// Вверх

case (72):

if (k>0) k--

else k=num-1

break

// Вниз

case (80):

if (k<(num-1)) k++

else k=0

break

// Выход по ESC - возвращается -1

case (27):

return -1

// Выход по ENTER - возвращается номер пункта

case (13): return k

}

}

}

}

// Ввод строки

// s - указатель на строку

// lng - Максимальная длинна

// x,y - координаты

void SInput(char * s,int lng,int x,int y) {

lng--

char rs[100]

// Временная строка

strcpy(rs,s)

// Копирование резерва строки

int n

// Счетчик

char c

// Символ

_setcursortype(_NORMALCURSOR)

// Вывод пустой строки

textbackground(2)

textcolor(15)

gotoxy(x,y)

for (n=0

n

n++) cprintf(" ")

n=strlen(s)

// Положение курсора

do {

// Вывод строки

gotoxy(x,y)

cprintf("%s ",s)

gotoxy(x+n,y)

c=getch()

// Считывание символа с клавиатуры

if ((c!=13)&&(c!=27)&&(c!=8)) {

// Нажата символьная клавиша

if (n<(lng-1)) {

// Добавление символа

s[n+1]=0

s[n]=c

n++

}

} else {

if (c==8) {

// Нажата клавиша BackSpace

if (n>0) {

n--

s[n]=0

}

}

}

// Выход, если ESC или ENTER

} while ((c!=27)&&(c!=13))

if(c==27) strcpy(s,rs)

// Восстановление строки

// Стирание строки

textbackground(0)

textcolor(7)

gotoxy(x,y)

for (n=0

n

n++) cprintf(" ")

_setcursortype(_NOCURSOR)

}

// Ввод числа

// x,y - координаты

double DInput(int x,int y) {

char s[100]

// Временная строка

char *stpe

double rz

s[0]=0

int n

// Счетчик

char c

// Символ

// Вывод пустой строки

_setcursortype(_NORMALCURSOR)

textbackground(2)

textcolor(15)

gotoxy(x,y)

for (n=0

n<15

n++) cprintf(" ")

n=strlen(s)

// Положение курсора

do {

// Вывод строки

gotoxy(x,y)

cprintf("%s ",s)

gotoxy(x+n,y)

c=getch()

// Считывание символа с клавиатуры

if ((c!=13)&&(c!=27)&&(c!=8)) {

// Нажата символьная клавиша

if (n<14) {

// Добавление цифры или точки

if ((c>='0')&&(c<='9')||(c=='.')) {

s[n+1]=0

s[n]=c

n++

}

}

} else {

if (c==8) {

// Нажата клавиша BackSpace

if (n>0) {

n--

s[n]=0

}

}

}

// Выход, если ESC или ENTER

} while ((c!=27)&&(c!=13))

if(c==27) return 0

// Стирание строки

textbackground(0)

textcolor(7)

gotoxy(x,y)

for (n=0

n<15

n++) cprintf(" ")

rz=strtod(s,&stpe)

_setcursortype(_NOCURSOR)

return rz

}

// Индексирование массива - Назначение номеров элементов

void index() {

int tm

// Перебор тем

int n,m

// Счетчики

char mxc[100]

// Значение наименьшей строки

int nm

// Номер очередного элемента

// Стирание старых индексов

for (n=0

n

n++) {

cdt[n].nn=0

cdt[n].nf=0

}

// Перебор всех возможных мест хранения

for (tm=0

tm<3

tm++) {

// Индексация по автору

for (m=0

m

m++) {

// Поиск наименьшего

strcpy(mxc,"\x0")

nm=-1

for (n=0

n

n++)

if ((cdt[n].nf==0)&&(cdt[n].loc==tm))

if (strcmp(cdt[n].fio,mxc)>0) {

strcpy(mxc,cdt[n].fio)

nm=n

}

if (nm!=-1) cdt[nm].nf=m+1

}

// Индексация по названиям

for (m=0

m

m++) {

// Поиск наименьшего

strcpy(mxc,"\x0")

nm=-1

for (n=0

n

n++)

if ((cdt[n].nn==0)&&(cdt[n].loc==tm))

if (strcmp(cdt[n].name,mxc)>0) {

strcpy(mxc,cdt[n].name)

nm=n

}

if (nm!=-1) cdt[nm].nn=m+1

}

}

}

// Редактирование элемента массива

void edit(int ed) {

clrscr()

// Обработка

int n

// Счетчик

int en=0

// Редактируемое поле

char c

// Символ с клавиатуры

for(

) {

// Вывод данных

for (n=0

n<6

n++) {

// Изменение цвета если элемент выбран

if (n==en) {

textbackground(12)

textcolor(15)

} else {

textbackground(1)

textcolor(7)

}

gotoxy(15,6+2*n)

// Вывод одного из полей структуры

switch(n) {

case 0:

cprintf(" Название: %45s",cdt[ed].name)

break

case 1:

cprintf(" Автор: %45s",cdt[ed].fio)

break

case 2:

cprintf(" Стоимость: %45.2f",cdt[ed].price)

break

case 3:

cprintf(" Порядковый номер: %45d",cdt[ed].number)

break

case 4:

cprintf(" Количество: %45d",cdt[ed].num)

break

case 5:

cprintf(" Тематика: %45s",tema[cdt[ed].tem])

}

}

// Опрос клавиатуры

c=getch()

if (!c) c=getch()

switch(c){

// Вверх

case (72):

en--

if (en<0) en=5

break

// Вниз

case (80):

en++

if (en>5) en=0

break

// ENTER - Редактирование поля или выход

case (13):

// Выбор действия

switch(en) {

case 0:

SInput(cdt[ed].name,30,35,6)

break

case 1:

SInput(cdt[ed].fio,30,35,8)

break

case 2:

cdt[ed].price=DInput(35,10)

break

case 3:

cdt[ed].number=DInput(35,12)

break

case 4:

cdt[ed].num=DInput(35,14)

break

case 5:

// Изменение тематики

cdt[ed].tem=(cdt[ed].tem+1)%4

break

}

break

case(27):

return

}

}

}

// Вывод по маске

void find() {

int n

// Счетчик

FILE * f

// Файл вывода

char name[50]

// Имя файла

strcpy(name,"CON")

// Изначально - CON, т.е. экран

// Ввод имени файла вывода

textbackground(0)

clrscr()

gotoxy(1,23)

cprintf(" Введитеимя файла: ")

SInput(name,40,20,23)

// Открывается файл на запись

f=fopen(name,"wb")

if (f==NULL) return

fprintf(f,"\n\r Список книг, выбранных по маске \n\r")

// Перебор всех элементов

for (n=0

n

n++)

// Если удовлетворяет условию

if (cmp(cdt[n].name,cdt[500].name)&&

cmp(cdt[n].fio,cdt[500].fio)&&

(cdt[n].price>=cdt[500].price)) {

// Вывод в файл

fprintf(f,"%4ld %30s %30s %4d %6.2fр\n\r",cdt[n].number,cdt[n].fio,

cdt[n].name,cdt[n].num,cdt[n].price)

}

// Закрывается файл

fclose(f)

printf("\n\n Нажмите любую клавишу для продолжения")

getch()

}

// Вывод графика

void graph() {

// Ингициализация графики

int c

// Цвет

int drv,mode

// Для инициализации графики

int k1,k2,k3

// Количество книг

int n

// Счетчик

int m

// Масштаб

drv=DETECT

initgraph(&drv,&mode,"")

// Подсчет количества книг

k1=k2=k3=0

for (n=0

n

n++) {

switch(cdt[n].loc) {

case (0):

k1++

break

case (1):

k2++

break

case (2):

k3++

break

}

}

// Определение максимального

if (k1>k2) m=k1

else m=k2

if (m

// Определение масштаба

m=400/m

// Вывод столбчатой диаграммы

line(0,470,640,470)

line(10,0,10,480)

outtextxy(100,20," Распределение книг ")

// Рассчет цвета столбца - 12 - максимальное значение

c=12

if (k2>k1) c--

if (k3>k1) c--

setfillstyle(9,c)

bar3d(20,470-m*k1,120,470,10,1)

// Рассчет цвета столбца - 12 - максимальное значение

c=12

if (k1>k2) c--

if (k3>k2) c--

setfillstyle(9,c)

bar3d(140,470-m*k2,240,470,10,1)

// Рассчет цвета столбца - 12 - максимальное значение

c=12

if (k1>k3) c--

if (k2>k3) c--

setfillstyle(9,c)

bar3d(260,470-m*k3,360,470,10,1)

// Вывод поясняющих надписей

setcolor(14)

outtextxy(30,450-m*k1,"Читальный зал")

outtextxy(150,450-m*k2,"Абонемент")

outtextxy(270,450-m*k3,"Хранилище")

// Ожидание нажатия клавиши

getch()

closegraph()

_setcursortype(_NOCURSOR)

}

// Обработка списка

void scroll() {

char c

// Считанный с клавиатуры символ

static int sv=1,sk=1

// Первый элемент на экране и положение курсора

int st

// Выбранный пункт меню

int n

// Счетчик

// Цикл обработки

do {

// Вывод списка на экран

output(sv,sk)

// Ввод символа

c=getch()

if (!c) c=getch()

// Обработка символа

switch (c) {

// Вверх

case (72):

if (sk>1) sk--

else if (sv>1) sv--

break

// Вниз

case (80):

if (sk<7) {

if (sk<(cnum-sv+1)) sk++

} else if (sv<(cnum-7)) sv++

break

// Меню

case (13):

st=menu(30,5,"Добавить в список "

"Удалить из списка "

"Редактировать "

"По Автору "

"По Названию "

"Выход в главное меню"

"\x0")

switch(st) {

case (0):

if (cnum<299) {

cdt[cnum].name[0]=0

cdt[cnum].fio[0]=0

cdt[cnum].price=0

cdt[cnum].number=0

cdt[cnum].num=0

cdt[cnum].tem=0

cdt[cnum].loc=ftm

cnum++

edit(cnum-1)

}

index()

break

case (1):

// Удаление элемента

if (cnum>1) {

n=0

switch (sort) {

case (1):

while (((cdt[n].nn!=sk+sv-1)||(cdt[n].loc!=ftm))&&(n

break

case (2):

while (((cdt[n].nf!=sk+sv-1)||(cdt[n].loc!=ftm))&&(n

break

}

if (n!=(cnum+1)) {

strcpy(cdt[n].name,cdt[cnum-1].name)

strcpy(cdt[n].fio,cdt[cnum-1].fio)

cdt[n].price=cdt[cnum-1].price

cdt[n].num=cdt[cnum-1].num

cdt[n].number=cdt[cnum-1].number

cdt[n].loc=cdt[cnum-1].loc

cdt[n].tem=cdt[cnum-1].tem

cnum--

index()

}

}

break

// Редактирование элемента

case (2):

n=0

switch (sort) {

case (1):

while (((cdt[n].nn!=sk+sv-1)||(cdt[n].loc!=ftm))&&(n

break

case (2):

while (((cdt[n].nf!=sk+sv-1)||(cdt[n].loc!=ftm))&&(n

break

}

edit(n)

index()

break

case (3):

case (4):

sort=5-st

break

case (5):

// Выход в предыдущее меню

return

}

break

}

} while(c!=27)

}

// Чтение массива

void load() {

// Открытие файла на чтение

FILE * f

f=fopen("librarym.dat","rb")

if (f==NULL) return

// Чтение количества книг

fread(&cnum,1,2,f)

// Чтение массива

fread(cdt,cnum,sizeof(books),f)

// Закрытие файла

fclose(f)

}

// Запись файла

void save() {

// Открытие файла на запись

FILE * f

f=fopen("librarym.dat","wb")

if (f==NULL) {

printf(" !!! ОШИБКА ПРИ ЗАПИСИ БАЗЫ ДАННЫХ !!! \n")

return

}

// Запись количества элементов в массив

fwrite(&cnum,1,2,f)

// Запись массива

fwrite(cdt,cnum,sizeof(books),f)

// Закрытие файла

fclose(f)

}

// Основная программа

void main() {

int st

// Установка начальных значений

_setcursortype(_NOCURSOR)

cnum=0

sort=1

ftm=0

// Чтение массива

load()

index()

// Обработка

do {

// Основное меню

textcolor(15)

textbackground(0)

clrscr()

st=menu(30,5," Список книг "

" Поиск по маске "

" Количество книг "

" Выход из программы "

"\x0")

switch(st) {

case (0):

// Подменю для вывода списка

st=menu(40,6," Расположение: "

" Читальный зал "

" Абонемент "

" Хранилище "

"\x0")

if (st!=0) {

ftm=st-1

scroll()

st=0

}

break

case (1):

// Поиск

cdt[500].name[0]=0

cdt[500].fio[0]=0

cdt[500].price=0

cdt[500].number=0

cdt[500].num=0

cdt[500].tem=4

edit(500)

find()

break

case (2):

// Вывод графика

graph()

break

}

} while (st!=3)

// Выход из программы

textcolor(7)

textbackground(0)

clrscr()

// Запись массива

save()

_setcursortype(_NORMALCURSOR)

}

Для подготовки данной работы были использованы материалы с сайта http://kurslab.chat.ru/

Характеристики

Тип файла
Документ
Размер
2,02 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6623
Авторов
на СтудИзбе
295
Средний доход
с одного платного файла
Обучение Подробнее