Разработка базы данных для расписания занятий

СОДЕРЖАНИЕ: Особенности написания базы данных на языках программирования C++, применимой для расписания занятий в университете. Этапы работы: ввод новой записи, изменение, просмотр базы данных, поиск данных. Алгоритмы, используемые в процессе выполнения проекта.

МГТУ имени Баумана

Пояснительная записка по курсовому проекту на тему:

”Разработка базы данных для расписания занятий”

МОСКВА 2006

Содержание

1. Введение

1.1 Постановка задачи

1.2 Описание работы

2. Алгоритмы используемые в процессе выполнения проекта

3. Приложение

4. Литература


1. Введение

1.1 Постановка задачи

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

Программа реализована на языках программирования “C++”.База данных содержит список предметов. С расписанием занятий ведётся такая основная работа как:

a. ввод новой записи

b. изменение базы данных

c. просмотр базы данных

d. поиск данных и т.д.

1.2 Описание работы

Реализация базы данных включает в себя следующие компоненты:

- Вводиться группа, подгруппа,

- Вводятся неделя, день недели и время

- Вводятся предмет и фамилия преподавателя

- Выбирается аудитория


2. Алгоритмы используемые в процессе выполнения проекта

В данной программе использовались стандартные приемы программирования, характерные для написания баз данных. Использовался структурный тип для описания одной записи:

struct zap

{

char fio_teacher[20];

int n_pdgrup;

char n_audit[6];

char predmet[10];

struct ti

{

int n_ned;

char den_ned[11];

struct wat

{

int fst_time,scd_time;

}watch;

}time;

char n_group[6];

};

struct spisok

{

zap zip[1];

struct spisok *a;

};

Поиск записи происходит по следующему алгоритму:

void outzap()

{

int h,time_zip,time_zip_end,time_zill,x_up,p;

char chose;

textbackground(BLACK);

window(1,1,80,23);

clrscr();

textcolor(WHITE);

window(27,5,50,20);

if (kolzap==0)

{

puts(Записей нет!);

getche();

exit(0);

}

window(1,1,80,23);gotoxy(10,3);

gotoxy(27,6); puts(Введите группу:); scanf(%s,zill[1].n_group);

gotoxy(27,7); puts(Введите подгруппу:); scanf(%d,zill[1].n_pdgrup);

gotoxy(27,8); puts(Введите неделю:); scanf(%d,zill[1].time.n_ned);

gotoxy(27,9); puts(Введите день недели:); scanf(%s,zill[1].time.den_ned);

gotoxy(20,10); puts(Вывести расписание на день или по времени(y/n));

chose=getche();

switch (chose)

{

case y:

{

u2=u1;

clrscr();

x_up=5;

p=0;

while (u2!=NULL)

{

if ((u2-zip[1].n_group==zill[1].n_group)(u2-zip[1].n_pdgrup==zill[1].n_pdgrup)

(u2-zip[1].time.n_ned==zill[1].time.n_ned)(u2-zip[1].time.den_ned==zill[1].time.den_ned))

{

gotoxy(20,x_up);

if (u2-zip[1].time.watch.scd_time10) printf(%d,u2-zip[1].time.watch.fst_time,:0,u2-zip[1].time.watch.scd_time);

else printf(%d,u2-zip[1].time.watch.fst_time,:,u2-zip[1].time.watch.scd_time);

gotoxy(27,x_up); printf(%s,u2-zip[1].predmet);

gotoxy(39,x_up); printf(%s,u2-zip[1].n_audit);

x_up=x_up+1;

p=1;

}

u2=u2-a;

}

if (p==0)

{

gotoxy(20,6);

puts(Возможно группа задана неверно или у нее нет пар.);

}

scanf(%d,a);

getche();

exit(0);

}

case n:

при нажатии клавиши “n” запись ищется по времени.


3. Приложение

#includestdio.h

#includeconio.h

#includestdlib.h

#includeio.h

FILE *f;

typedef char arr_string[7][25];

struct zap

{

char fio_teacher[20];

int n_pdgrup;

char n_audit[6];

char predmet[10];

struct ti

{

int n_ned;

char den_ned[11];

struct wat

{

int fst_time,scd_time;

}watch;

}time;

char n_group[6];

};

struct spisok

{

zap zip[1];

struct spisok *a;

};

struct zap zill[1];

struct spisok *sled,*u1,*u2,*pred,*pred2;

int i,j,col_pr,col_pn,kolzap,l,pl,b;

char kbd,kod,yes,a;

char dg[20],fm[20],filename[20];

int p;

arr_string s,d;

void outdone();

void menu();

void newzap();

void delzap();

void outzap();

//-----------------------------------------------------------------------------

void schet()

{

kolzap=0;

u2=u1;

while (u2!=NULL)

{

kolzap=kolzap+1;

u2=u2-a;

}

}

//-------------------------------------------------------------------------------------

void formir_spisok()

{

u1=NULL;

u2=NULL;

if (!feof(f)) exit(0);

u1=(struct spisok *)malloc(sizeof(struct spisok));

fread(u1-zip,sizeof u1-zip,1,f);

u1-a=NULL;

u2=u1;

while (feof(f)!=0)

{

u2-a=(struct spisok *)malloc(sizeof(struct spisok));

u2=u2-a;

fread(u2-zip,sizeof u1-zip,1,f);

u2-a=NULL;

}

pred=u2;

fclose(f);

}

//------------------------------------------------------------------------------

void menudiag()

{

textbackground(BLACK);

window(1,1,80,23);

clrscr();

textbackground(BLACK);

window(27,5,47,5);

textbackground(RED);

textcolor(GREEN);

printf(d[1]);

window(27,7,47,7);

textbackground(BLACK);

textcolor(GREEN);

printf(d[2]);

window(27,9,47,9);

textbackground(BLACK);

textcolor(GREEN);

printf(d[3]);

i=5;j=1;p=1;

col_pr=GREEN;

col_pn=RED;

}

//-------------------------------------------------------------------------------

void quit()

{

outdone();

exit(0);

}

//---------------------------------------------------------------------------

void quit2()

{

exit(0);

}

//---------------------------------------------------------------------------

void move_line(int kol_proced,void (*proced)(),void (*proced1)(),void (*proced2)(),void (*proced3)(),void (*proced4)(), arr_string string_arr)

{

proced();

do

{

kbd=getche();

if ((kbd!=27)(kbd!=13)(kbd!=0))

{

kbd=getche();

switch (kbd)

{

case 72:

{

window(27,i,47,i);

textbackground(BLACK);

textcolor(col_pr);

clreol();

printf(%s,string_arr[j]);

if (i==5)

{

i=5+kol_proced*2-2;

j=kol_proced;

}

else

{

i=i-2;

j=j-1;

}

window(27,i,47,i);

textbackground(col_pn);

textcolor(col_pr);

clreol();

printf(%s,string_arr[j]);

}

case 80:

{

window(27,i,47,i);

textbackground(BLACK);

textcolor(col_pr);

clreol();

printf(%s,string_arr[j]);

if (i==5+kol_proced*2-2)

{

i=5;

j=1;

}

else

{

i=i+2;

j=j+1;

}

window(27,i,47,i);

textbackground(col_pn);

textcolor(col_pr);

clreol();

printf(%s,string_arr[j]);

}

}

}

switch (kbd)

{

case 27:exit(0);

case 13:{

switch (j)

{

case 1:proced1();

case 2:proced2();

case 3:proced3();

case 4:{

proced4();

exit(0);

}

}

proced();

}

}

}while (p==0);

}

//----------------------------------------------------------------------------------

void open()

{

textbackground(BLACK);

window(1,1,80,23);

clrscr();

textbackground(BLACK);

window(20,5,78,5);

clrscr();

gotoxy(20,5);

textcolor(WHITE);

printf(Введите путь и имя файла:);

gets(filename);

if((f=fopen(filename,”wb))==NULL)

{

textbackground(BLACK);

window(1,1,80,23);

clrscr();

gotoxy(27,5);

textcolor(WHITE);

printf (Файл отсутствует!);

getche();

exit(0);

}

formir_spisok();

schet();

move_line(4,menu,newzap,outzap,delzap,quit,s);

}

//----------------------------------------------------------------------------------

void newfile()

{

textbackground(BLACK);

window(1,1,80,23);

clrscr();

textbackground(BLACK);

window(20,5,78,5);

clrscr();

gotoxy(20,5);

textcolor(WHITE);

printf(Введитe путь и имя файла:);

gets(filename);

f=fopen(filename,wb);

formir_spisok();

schet();

move_line(4,menu,newzap,outzap,delzap,quit,s);

}

//-------------------------------------------------------------------------------

void menu()

{

textbackground(BLACK);

clrscr();

textbackground(BLACK);

window(27,5,46,5);

textbackground(RED);

textcolor(GREEN);

puts(s[1]);

window(27,7,46,7);

textbackground(BLACK);

textcolor(GREEN);

puts(s[2]);

window(27,9,46,9);puts(s[3]);

window(27,11,46,11);puts(s[4]);

window(27,13,46,13);puts(s[5]);

window(27,15,46,15);puts(s[6]);

window(27,17,46,17);puts(s[7]);

window(27,5,46,5);

i=5;j=1;p=1;

col_pr=GREEN;

col_pn=RED;

}

//----------------------------------------------------------------------------------

void newzap()

{

char a;

if (kolzap==0)

{

u1=(struct spisok *)malloc(sizeof(struct spisok));

textbackground(BLACK);

window(1,1,80,23);

clrscr();

textcolor(WHITE);

gotoxy (27,5); puts (Заполните новую запись);

gotoxy(27,6); puts(Введите группу:); scanf(%s,zill[1].n_group);

gotoxy(27,7); puts(Введите подгруппу:); scanf(%d,zill[1].n_pdgrup);

gotoxy(27,8); puts(Введите неделю:); scanf(%d,zill[1].time.n_ned);

gotoxy(27,9); puts(Введите день недели:); scanf(%s,zill[1].time.den_ned);

gotoxy (27,10); puts (Введите время: :);

gotoxy(41,10); a=getche(); printf(%d,a); b=(ord(a)-48)*10;

gotoxy(42,10); a=getche(); printf(%d,a); b=b+(ord(a)-48);

zill[1].time.watch.fst_time=b;

gotoxy(44,10); a=getche(); printf(%d,a); b=(ord(a)-48)*10;

gotoxy(45,10); a=getche(); printf(%d,a); b=b+(ord(a)-48);

zill[1].time.watch.scd_time=b;

gotoxy(27,12); puts(Введите предмет:); scanf(%s,zill[1].predmet);

gotoxy(27,13); puts(Введите фамилию преподавателя:); scanf(%s,zill[1].fio_teacher);

gotoxy(27,14); puts(Введите аудиторию:); scanf(%s,zill[1].n_audit);

u1-zip[1]=zill[1];

u1-a=NULL;

u2=u1;

pred=u1;

}

else

{

textbackground(BLACK);

window(1,1,80,23);

clrscr();

textcolor(WHITE);

gotoxy (27,5); puts (Заполните новую запись);

gotoxy(27,6); puts(Введите группу:); scanf(%s,zill[1].n_group);

gotoxy(27,7); puts(Введите подгруппу:); scanf(%d,zill[1].n_pdgrup);

gotoxy(27,8); puts(Введите неделю:); scanf(%d,zill[1].time.n_ned);

gotoxy(27,9); puts(Введите день недели:); scanf(%s,zill[1].time.den_ned);

gotoxy (27,10); puts (Введите время: :);

gotoxy(41,10); a=getche(); printf(%d,a); b=(ord(a)-48)*10;

gotoxy(42,10); a=getche(); printf(%d,a); b=b+(ord(a)-48);

zill[1].time.watch.fst_time=b;

gotoxy(44,10); a=getche(); printf(%d,a); b=(ord(a)-48)*10;

gotoxy(45,10); a=getche(); printf(%d,a); b=b+(ord(a)-48);

zill[1].time.watch.scd_time=b;

gotoxy(27,12); puts(Введите предмет:); scanf(%s,zill[1].predmet);

gotoxy(27,13); puts(Введите фамилию преподавателя:); scanf(%s,zill[1].fio_teacher);

gotoxy(27,14); puts(Введите аудиторию:); scanf(%s,zill[1].n_audit);

u2=pred;

u2-a=(struct spisok *)malloc(sizeof(struct spisok));

u2=u2-a;

u2-zip[1]=zill[1];

u2-a=NULL;

pred=u2;

}

kolzap=kolzap+1;

}

//---------------------------------------------------------------------------------

void delzap()

{

int h,x,y,p;

char c,key,a;

textbackground(BLACK);

window(1,1,80,23);

clrscr();

textcolor(WHITE);

window(1,1,80,23);

if (kolzap==0)

{

gotoxy (27,6);

puts (Записей нет!);

getche();

exit(0);

}

gotoxy(27,6); puts(Введите группу:); scanf(%s,zill[1].n_group);

gotoxy(27,7); puts(Введите подгруппу:); scanf(%d,zill[1].n_pdgrup);

gotoxy(27,8); puts(Введите неделю:); scanf(%d,zill[1].time.n_ned);

gotoxy(27,9); puts(Введите день недели:); scanf(%s,zill[1].time.den_ned);

gotoxy(27,10); puts( Введите время : :);

gotoxy(41,10); a=getche();printf(%d,a);b=(ord(a)-48)*10;

gotoxy(42,10); a=getche();printf(%d,a);b=b+(ord(a)-48);

zill[1].time.watch.fst_time=b;

gotoxy(44,10); a=getche();printf(%d,a);b=(ord(a)-48)*10;

gotoxy(45,10); a=getche();printf(%d,a);b=b+(ord(a)-48);

zill[1].time.watch.scd_time=b;

gotoxy(27,12); puts(Введите предмет:); scanf(%s,zill[1].predmet);

gotoxy(27,13); puts(Введите фамилию преподавателя:); scanf(%s,zill[1].fio_teacher);

gotoxy(27,14); puts(Введите аудиторию:); scanf(%s,zill[1].n_audit);

u2=u1;

pred2=u2;

p=0;

while ((u2!=NULL)(p==0))

{

if ((u2-zip[1].n_group==zill[1].n_group)(u2-zip[1].n_pdgrup==zill[1].n_pdgrup)

(u2-zip[1].time.n_ned==zill[1].time.n_ned)(u2-zip[1].time.den_ned==zill[1].time.den_ned)

(u2-zip[1].time.watch.fst_time==zill[1].time.watch.fst_time)(u2-zip[1].time.watch.scd_time==zill[1].time.watch.scd_time)

(u2-zip[1].predmet==zill[1].predmet)(u2-zip[1].fio_teacher==zill[1].fio_teacher)

(u2-zip[1].n_audit==zill[1].n_audit))

{

p =1;

gotoxy (10,20);

puts (Вы хотели бы изменить или удалить запись?( y -изменить/ n -удалить):);

c=getche();

switch (c)

{

case y:{

clrscr ();

gotoxy (10,2); puts (Для изменения нажмите клавишу Y , далее-клавишу N : );

x = wherex ();

y = wherey ();

gotoxy (10,4); puts (Не забывайте переключать раскладку клавиатуры (Англ\Рус));

gotoxy(15,6); printf(Группа:%s,zill[1].n_group);

gotoxy(x,y);

key=getche();

if ((key==y)||(key==н)||(key==Y)||(key==Н))

{

gotoxy(15,6);

puts(Группа: );

gotoxy(22,6);

scanf(%s,u2-zip[1].n_group);

}

gotoxy(x-1,y);

puts( );

gotoxy(15,7);

printf(Подгруппа:%s,zill[1].n_pdgrup);

gotoxy(x,y);

key=getche();

if ((key==y)||(key==н)||(key==Y)||(key==Н))

{

gotoxy(15,7);

puts(Подгруппа: );

gotoxy(25,7);

scanf(%d,u2-zip[1].n_pdgrup);

}

gotoxy(x-1,y);

puts( );

gotoxy(15,8);

printf(Неделя:%d,zill[1].time.n_ned);

gotoxy(x,y);

key=getche();

if ((key==y)||(key==н)||(key==Y)||(key==Н))

{

gotoxy(15,8);

puts(Неделя: );

gotoxy(22,8);

scanf(%d,u2-zip[1].time.n_ned);

}

gotoxy(x-1,y);

puts( );

gotoxy(15,9);

printf(День недели:%s,zill[1].time.den_ned);

gotoxy(x,y);

key=getche();

if ((key==y)||(key==н)||(key==Y)||(key==Н))

{

gotoxy(15,9);

puts( День недели : );

gotoxy(27,9);

scanf(%s,u2-zip[1].time.den_ned);

}

gotoxy(x-1,y);

puts( );

gotoxy(15,10);

if (zill[1].time.watch.scd_time10) printf(Время:%d,zill[1].time.watch.fst_time,:0%d,zill[1].time.watch.scd_time);

else printf(Время:%d,zill[1].time.watch.fst_time,:%d,zill[1].time.watch.scd_time);

gotoxy(x,y);

key=getche();

if ((key==y)||(key==н)||(key==Y)||(key==Н))

{

gotoxy(15,10);

puts(Время: : );

gotoxy(21,10); a=getche();printf(%d,a); b=(ord(a)-48)*10;

gotoxy(22,10); a=getche();printf(%d,a); b=b+(ord(a)-48);

u2-zip[1].time.watch.fst_time=b;

gotoxy(24,10); a=getche(); printf(%d,a); b=(ord(a)-48)*10;

gotoxy(25,10); a=getche(); printf(%d,a); b=b+(ord(a)-48);

u2-zip[1].time.watch.scd_time=b;

}

gotoxy(x-1,y);

puts( );

gotoxy(15,11);

printf(Предмет:%s,zill[1].predmet);

gotoxy(x,y);

key=getche();

if ((key==y)||(key==н)||(key==Y)||(key==Н))

{

gotoxy(15,11);

puts(Предмет: );

gotoxy(23,11);

scanf(%s,u2-zip[1].predmet);

}

gotoxy(x-1,y);

puts( );

gotoxy(15,12);

printf(Фамилия преподавателя:%S,zill[1].fio_teacher);

gotoxy(x,y);

key=getche();

if ((key==y)||(key==н)||(key==Y)||(key==Н))

{

gotoxy (15,12);

puts (Фамилия преподователя: );

gotoxy (37,12);

scanf(%s,u2-zip[1].fio_teacher);

}

gotoxy(x-1,y);

puts( );

gotoxy(15,13);

printf(Аудитория:%s,zill[1].n_audit);

gotoxy(x,y);

key=getche();

if ((key==y)||(key==н)||(key==Y)||(key==Н))

{

gotoxy(15,13);

puts(Аудитория: );

gotoxy(25,13);

scanf(%s,u2-zip[1].n_audit);

}

}

case n:

{

if (kolzap==1)

{

free(u2);

u1=NULL;

u2=NULL;

kolzap=kolzap-1;

exit(0);

}

if (kolzap!=1)

{

h=1;u2=u1;

while (u2!=NULL)

{

if ((u2-zip[1].n_group==zill[1].n_group)(u2-zip[1].n_pdgrup==zill[1].n_pdgrup)(u2-zip[1].time.n_ned==zill[1].time.n_ned)(u2-zip[1].time.den_ned==zill[1].time.den_ned)

(u2-zip[1].time.watch.fst_time==zill[1].time.watch.fst_time)(u2-zip[1].time.watch.scd_time==zill[1].time.watch.scd_time)(u2-zip[1].predmet==zill[1].predmet)(u2-zip[1].fio_teacher==zill[1].fio_teacher)

(u2-zip[1].n_audit==zill[1].n_audit))

{

sled=u2-a;

free(u2);

if (h==1)

{

u1=sled;

kolzap=kolzap-1;

exit(0);

}

if (sled==NULL)

{

pred2-a=NULL;

pred=pred2;

kolzap=kolzap-1;

exit(0);

}

pred2-a=sled;

kolzap=kolzap-1;

exit(0);

}

pred2=u2;

h=h+1;

u2=u2-a;

}

}

}

}

}

u2=u2-a;

}

if (p==0)

{

gotoxy(27,15);

puts (Такой записи нет!);

getche ();

exit(0);

}

}

//---------------------------------------------------------------------------------

void outzap()

{

int h,time_zip,time_zip_end,time_zill,x_up,p;

char chose;

textbackground(BLACK);

window(1,1,80,23);

clrscr();

textcolor(WHITE);

window(27,5,50,20);

if (kolzap==0)

{

puts (Записей нет!);

getche ();

exit (0);

}

window(1,1,80,23);gotoxy(10,3);

gotoxy(27,6); puts(Введите группу:); scanf(%s,zill[1].n_group);

gotoxy(27,7); puts(Введите подгруппу:); scanf(%d,zill[1].n_pdgrup);

gotoxy(27,8); puts(Введите неделю:); scanf(%d,zill[1].time.n_ned);

gotoxy(27,9); puts(Введите день недели:); scanf(%s,zill[1].time.den_ned);

gotoxy (20,10); puts (Вывести расписание на день или по времени( y / n ));

chose=getche();

switch (chose)

{

case y:

{

u2=u1;

clrscr();

x_up=5;

p=0;

while (u2!=NULL)

{

if ((u2-zip[1].n_group==zill[1].n_group)(u2-zip[1].n_pdgrup==zill[1].n_pdgrup)

(u2-zip[1].time.n_ned==zill[1].time.n_ned)(u2-zip[1].time.den_ned==zill[1].time.den_ned))

{

gotoxy(20,x_up);

if (u2-zip[1].time.watch.scd_time10) printf(%d,u2-zip[1].time.watch.fst_time,:0,u2-zip[1].time.watch.scd_time);

else printf(%d,u2-zip[1].time.watch.fst_time,:,u2-zip[1].time.watch.scd_time);

gotoxy(27,x_up); printf(%s,u2-zip[1].predmet);

gotoxy(39,x_up); printf(%s,u2-zip[1].n_audit);

x_up=x_up+1;

p=1;

}

u2=u2-a;

}

if (p==0)

{

gotoxy (20,6);

puts (Возможно группа задана неверно или у нее нет пар.);

}

scanf(%d,a);

getche();

exit(0);

}

case n:

{

gotoxy(20,10);puts( );

gotoxy(27,10);puts(Введите время: :);

gotoxy(41,10);a=getche();printf(%d,a);b=(ord(a)-48)*10;

gotoxy(42,10);a=getche();printf(%d,a);b=b+(ord(a)-48);

zill[1].time.watch.fst_time=b;

gotoxy(44,10);a=getche();printf(%d,a);b=(ord(a)-48)*10;

gotoxy(45,10);a=getche();printf(%d,a);b=b+(ord(a)-48);

zill[1].time.watch.scd_time=b;

u2=u1;h=1;

time_zill=zill[1].time.watch.fst_time*60;

time_zill=time_zill+zill[1].time.watch.scd_time;

while (u2!=NULL)

{

if ((u2-zip[1].n_group==zill[1].n_group)(u2-zip[1].n_pdgrup==zill[1].n_pdgrup)

(u2-zip[1].time.n_ned==zill[1].time.n_ned)(u2-zip[1].time.den_ned==zill[1].time.den_ned))

{

time_zip=u2-zip[1].time.watch.fst_time*60;

time_zip=time_zip+u2-zip[1].time.watch.scd_time;

time_zip_end=time_zip+90;

if ((time_zill=time_zip)(time_zill=time_zip_end))

{

gotoxy(27,12); printf(Предмет:%s,u2-zip[1].predmet);

gotoxy(27,13); printf(Фамилия преподователя:%s,u2-zip[1].fio_teacher);

gotoxy(27,14); printf(Аудитория:%s,u2-zip[1].n_audit);

scanf(%d,a);

getche();

exit(0);

}

}

u2=u2-a;

}

gotoxy (20,14);

puts (Вероятно у группы нет пары в это время);

scanf(%d,a);

getche();

}

}

}

//-----------------------запись записи в файл------------------------------

void outdone()

{

f=fopen(filename,wb);

u2=u1;

while (u2!=NULL)

{

fwrite(u2-zip,sizeof u2-zip,1,f);

u1=u2-a;

free(u2);

u2=u1;

}

fclose(f);

}

//-------------------------------------------------------------------------------

void main()

{

move_line(3,menudiag,open,newfile,quit2,quit2,d);

}

4. Литература

1. Березин Б.И., Березин С.Б. Б48 Начальный курс С и С++. – М.: ДИАЛОГ-МИФИ, 2000.-288 с.

2. Франка П. Ф83 С++: учебный курс - СПб: ЗАО ”Издательство ”Питер”, 1999. – 528 с.: ил.

Скачать архив с текстом документа