Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Контроль успеваемости студентов


Автор: Romati 9.5.2008, 17:23
Всем привет!

Задача: С чего начать писать программу?
Цель: Написать программу контроля успеваемости студентов с рейтинговой системой. 
Поток сознания: Запарился просчитывать варианты. Есть несколько идей, но незнаю какую лучше выбрать. 
Думаю сделать так: Создам класс, потом файл с названием факультета (на остальные факультеты думаю сделать заглушки), далее специальность, курс, группа, фио, успеваемость с учётом рейтинга (Тут пока незнаю, как лучше сделать. Или вводить сразу подсчитанные баллы, или разбивать не несколько выборочных предметов. Дело в том, что программу я создаю, для того чтобы показать принцип работы, поэтому я думаю, что сделать несколько предметов специально показа функциональности), потом идут сортировочки, слияния и т.д

Хочу знать, как лучше реализовать эту программу.
  

Автор: Romati 9.5.2008, 21:19
Помогите решить проблему smile

Автор: bronislav 9.5.2008, 21:52
Попробуй использовать БД, а то все в отдельных фалах хранить не есть ТРУ.

Автор: Romati 9.5.2008, 21:55
bronislav, Верю. Но нужно на файлах.
Какие ещё будет советы ? 

Автор: bronislav 9.5.2008, 22:01
Цитата(Romati @  9.5.2008,  21:55 Найти цитируемый пост)
Но нужно на файлах.

Ну можеш использовать мультифайловую БД типа DBF.

А если по теме, то:

Ты бы поподробнее описал, что тебе надо.

Я так понял, что еть список студентов, и предметов которые они изучают. Для каждого студента вводятся оценки по каждому предмету (возможно несколько оценок по одному предмету) и потом производится подсчет успеваемости студентов (сребний бал?) и составляется рейтинг?


Автор: Romati 9.5.2008, 22:20
bronislav, Да, что-то типо этого. Я и думаю, как лучше это сделать. Что делать с факультетами, создавать ли по файлу на каждый факультет или как ? 

Автор: bronislav 9.5.2008, 23:54
Мне кажется -  надо.

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

Аргементы против:
Чем больше факультетов - тем больше файлов

Автор: Romati 10.5.2008, 01:05
bronislav, Значит, если я всё понял правильно, то всё должно храниться в одном файле? АААААеееес!
А что в нём создавать, всмысле, что делать с рейтинговой системой ?

Автор: bronislav 10.5.2008, 08:54
Цитата(Romati @  10.5.2008,  01:05 Найти цитируемый пост)
то всё должно храниться в одном файле? АААААеееес!


Я бы не хранил все в одном файле - это затрудняет навигацию.

Почитай теорию про БД. Если бы ты использлвал БД, то тебе бы надо было реализовывать только структуру и обработку данных.

А т.к. ты используеш файлы, то тебе еще надо реализовывать загрузку и выгрузку данных из файлов.

Автор: Romati 10.5.2008, 18:28
bronislav, Я ещё студент, и по программе не проходил БД, но сам понятие имею. Поэтому, мне нужно лепить программу из того что есть, из того что проходили по программе. ВОт.

Автор: bronislav 10.5.2008, 21:13
Цитата(Romati @  10.5.2008,  18:28 Найти цитируемый пост)
Я ещё студент

Я тоже

Цитата(Romati @  10.5.2008,  18:28 Найти цитируемый пост)
из того что проходили по программе


У нас в Универе нет ограничений на используемые языки или технологии

Да и я говорю, тебе использовать БД.


З.Ы. Это курсовая или по какому-то определенному предмету? 


Автор: Romati 11.5.2008, 18:49
bronislav, Это курсовая по объектно-ориентированному программированию.

UPDATE: Я вот думаю, может тему сменить, взять какой нить тупой учёт газет в киоске или что-то в этом роде smile А то двадцатые числа уже близятся ... smile 

Автор: rrrFer 11.5.2008, 20:06
я бы незадумываясь  стал использовать один двоичный файл
насчет 
Цитата
Возможноть обновременной обработки информации по нескольким факультетам.

как аргумента за много много файлов,- тогда выходит ты расчитываешь что будет запущено несколько экземпляров 
твоей программы, но тогда тебе еще надо будет учесть то что они могут обратиться к файлу одного и того же файкультета одновременно, поэтому ты будешь привинчивать к программе семафоры или мутексы.
Если ты не расчитываешь на одновременную работу нескольких экземпляров то о какой оБновременной обработке может быть речь.
Двацатые числа меня тоже беспокоят...

Автор: Romati 11.5.2008, 22:36
Вот я как-то в семестре писал прогу, которая ведет учет продажи билетов для транспорта. Прога вполне нормальная, я даже думал её переписать под учёт какой нить ещё другой фигни. Но почему то выбрал сложнее (видимо зря), взял Контроль успеваимости студентов.
Но программный код, я привожу для примера, чтобы вы поняли, что я имею ввиду. В каком стиле и с использованием чего, я собираюсь писать. Вот смотрите ниже код:
Код

#include <iostream.h>
#include <string.h>
#include <fstream.h>
#include <process.h>
#include <iomanip.h>
#include <io.h>
#include <windows.h>
char*rus_text( char *buf);

class stud 
{
    char transport[20];
    int nomer;
    int cena;
    int kolvo;
public:
    void set_nomer(int n){nomer=n;}
    void set_transport(char*t){strcpy(transport,t);}
    void set_cena(int c){cena=c;}
    void set_kolvo(int k){kolvo=k;}
    int get_kolvo(){return kolvo;}
    char*get_transport(){return transport;}
    int get_nomer(){return nomer;}
    int get_cena(){return cena;}
};
void vvod_f(char*n,char*f)
{
    while(1)
    {
        cout<<n;
        cin.getline(f,30); 
        if(cin)return;
    }
}
void cls_pause()
{
    cout<<'\n';
    system("pause"); 
    system("cls");
}
void sozdanie_faila()
{
    system("cls");
    system("pause");
    stud x; 
    char let; 
    int l=sizeof(stud);
    char imya_faila[20]; 
    vvod_f(rus_text("Введите имя для создания файла(город РБ): "),imya_faila);
    fstream out;
    out.open(imya_faila,ios::out|ios::binary);
    int c,n,k;
    char t[20];
    while (1)
    {
        cout<<rus_text("\nВведите тип транспорта: "); cin>>t; x.set_transport(t);
        cout<<rus_text("\nВведите номер маршрута: "); cin>>n; x.set_nomer(n);
        cout<<rus_text("\nВведите цену билета: "); cin>>c; x.set_cena(c);
        cout<<rus_text("\nВведите количество проданных билетов: "); cin>>k; x.set_kolvo(k);
        cin.get();
        out.write((char*)&x,l);
        cout<<rus_text("\nДля продолжения ввода нажмите (y) для выхода нажмите (n): ");
        cin.get(let);
        cin.get();
        if(let=='y'||let=='Y')continue;
        else
        {
            out.close();
            return;
        }
    }
}
void dobavlenie_v_fail()
{
    system("cls");
    stud x; 
    char let; 
    int l=sizeof(stud );
    char imya_faila[20]; 
    vvod_f(rus_text("Введите имя файла в который вы хотите добавить объекты: "),imya_faila);
    fstream out;
    out.open(imya_faila,ios::app|ios::out|ios::binary|ios::nocreate);
    int c,n,k;
    char t[20];
    if(!out) 
    {
        cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl;
        return;
    }
    while(1)
    {
        cout<<rus_text("\nВведите тип транспорта: "); cin>>t; x.set_transport(t);
        cout<<rus_text("\nВведите номер маршрута: "); cin>>n; x.set_nomer(n);
        cout<<rus_text("\nВведите цену билета: "); cin>>c; x.set_cena(c);
        cout<<rus_text("\nВведите количество проданных билетов: "); cin>>k; x.set_kolvo(k);
        cin.get();
        out.write((char*)&x,l);
        cout<<rus_text("\nДля продолжения ввода нажмите (y) для выхода нажмите (n): ");
        cin.get(let);
        cin.get();
        if(let=='y'||let=='Y') continue;
        else
        {
            out.close();
            return;
        }
    }
}
void chtenie_s_nachala()
{
    system("cls");     
    stud x;         
    char imya_faila[20];
    vvod_f(rus_text("Введите имя файла который вы хотите открыть: "),imya_faila);
    int len=sizeof(stud); 
    fstream in;
    in.open(imya_faila, ios::in|ios::nocreate);
    if(!in) 
    {
        cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl; 
        return;
    }
    while(1)
    {
         in.read((char*)&x,len);
         if(in.eof())
         {
             in.close();
             return;
         }
         cout.setf(ios::right);
         cout<<rus_text("\nТип транспорта: ")<<setw(10)<<x.get_transport()<<endl;
         cout<<rus_text("\nНомер маршрута: ")<<setw(10)<<x.get_nomer()<<endl;
         cout<<rus_text("\nЦена билета: ")<<setw(10)<<x.get_cena()<<endl;
         cout<<rus_text("\nКоличество проданных билетов: ")<<setw(10)<<x.get_kolvo()<<endl;
    }
}
void sort_for_transport()
{
    system("cls");
    stud x1,x2;
    char imya_faila[20];
    vvod_f(rus_text("Введиет имя файла который вы хотите рассортировать по типам транспорта: "),imya_faila);
    int len=sizeof(stud);
    fstream out;
    out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate);
    if(!out)
    {
    cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl;
    return;
    }
    out.seekp(0,ios::end);
    long ln = out.tellp();
    int n=ln/len;
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
        {
            out.seekp(i*len,ios::beg); out.read((char*)&x1,len);
            out.seekp(j*len,ios::beg); out.read((char*)&x2,len);
            if(strcmp(x1.get_transport(),x2.get_transport())>0)
            {
                out.seekp(i*len,ios::beg); out.write((char*)&x2,len);
                out.seekp(j*len,ios::beg); out.write((char*)&x1,len);
            }
        }
        out.close();
}
void sort_for_nomer()
{
    system("cls");
    stud x1,x2;
    char imya_faila[20];
    vvod_f(rus_text("Введите имя файла который вы хотите рассортировать по номерам моршрута: "),imya_faila);
    int len=sizeof(stud);
    fstream out;
    out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate);
    if(!out)
    {
    cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl;
    return;
    }
    out.seekp(0,ios::end);
    long ln = out.tellp();
    int n=ln/len;
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
        {
            out.seekp(i*len,ios::beg); out.read((char*)&x1,len);
            out.seekp(j*len,ios::beg); out.read((char*)&x2,len);
            if(x1.get_nomer()>x2.get_nomer())
            {
                out.seekp(i*len,ios::beg); out.write((char*)&x2,len);
                out.seekp(j*len,ios::beg); out.write((char*)&x1,len);
            }
        }
        out.close();
}
void sort_for_cena()
{
    system("cls");
    stud x1,x2;
    char imya_faila[20];
    vvod_f(rus_text("Введите имя файла который вы хотите рассортировать по ценам билетов: "),imya_faila);
    int len=sizeof(stud);
    fstream out;
    out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate);
    if(!out)
    {
    cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl;
    return;
    }
    out.seekp(0,ios::end);
    long ln = out.tellp();
    int n=ln/len;
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
        {
            out.seekp(i*len,ios::beg); out.read((char*)&x1,len);
            out.seekp(j*len,ios::beg); out.read((char*)&x2,len);
            if(x1.get_cena()>x2.get_cena())
            {
                out.seekp(i*len,ios::beg); out.write((char*)&x2,len);
                out.seekp(j*len,ios::beg); out.write((char*)&x1,len);
            }
        }
        out.close();
}
void sort_for_kolvo()
{
    system("cls");
    stud x1,x2;
    char imya_faila[20];
    vvod_f(rus_text("Введите имя файла который вы хотите рассортировать по количеству проданных билетов: "),imya_faila);
    int len=sizeof(stud);
    fstream out;
    out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate);
    if(!out)
    {
    cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl;
    return;
    }
    out.seekp(0,ios::end);
    long ln = out.tellp();
    int n=ln/len;
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
        {
            out.seekp(i*len,ios::beg); out.read((char*)&x1,len);
            out.seekp(j*len,ios::beg); out.read((char*)&x2,len);
            if(x1.get_kolvo()<x2.get_kolvo())
            {
                out.seekp(i*len,ios::beg); out.write((char*)&x2,len);
                out.seekp(j*len,ios::beg); out.write((char*)&x1,len);
            }
        }
        out.close();
}
void udalenie()
{
    system("cls"); 
    char imya_faila[20];
    char transport[20];
    long p1; 
    int len=sizeof stud;
    stud s;
    fstream in_out;
    vvod_f(rus_text("Введите имя файла из которого вы хотите исключить объекты: "),imya_faila);
    in_out.open(imya_faila,ios::in|ios::out|ios::binary|ios::nocreate);
    if(!in_out)
    {
        cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl;
        return;
    }
    cout<<rus_text("\nВведите тип транспорта который вы хотите удалить из файла: ");
    cin.getline(transport,30);
        while(1)
        {
            p1=in_out.tellg();
            in_out.read((char*)&s,len);
            if (in_out.eof())
            {
                in_out.close();
                cout<<rus_text("Такой тип транспорта не найден: ")<<transport<<endl;
            return;
            }
            if(!strcmp(transport,s.get_transport()))
            {
                long p2=in_out.tellg();
                while(1)
                {
                    in_out.read((char*)&s,len);
                    if (in_out.eof())
                    {
                        in_out.seekp(0,ios::end);
                        p1=in_out.tellg();
                        in_out.close();
                        int fd=open(imya_faila,2);
                        chsize(fd,p1-len);
                        close(fd);
                        cout<<rus_text("Удаленный транспорт: ")<<transport<<'\n';
                    return;
                    }
                    in_out.seekp(p1,ios::beg);
                    in_out.write((char*)&s,len);
                    p1=p2;
                    p2=p2+len;in_out.seekp(p2,ios::beg);
                }
            }
        }
}

void sliyanie()
{

    system("cls"); 
    stud x1,x2;
    fstream ln1,ln2,out;
    char imya_faila[20];
    vvod_f(rus_text("Введите имя файла в который мы будем объеденять 2 файла: "),imya_faila);
    int len=sizeof(stud);    
    out.open(imya_faila,ios::out|ios::binary);
    vvod_f(rus_text("Введите имя 1го файла для слияния: "),imya_faila);
    ln1.open(imya_faila,ios::in|ios::binary|ios::nocreate);
    if(!ln1) 
    {
        cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl;
        return;
    }

    vvod_f(rus_text("Введите имя 2го файла для слияния: "),imya_faila);
    ln2.open(imya_faila,ios::in|ios::binary|ios::nocreate);
    if(!ln2) 
    {
        cerr<<rus_text("Такого файла не существует: ")<<imya_faila<<endl;
        return;
    }
    ln1.read((char*)&x1,len);
    ln2.read((char*)&x2,len);
    while (!ln1.eof()&!ln2.eof())
    {
        if(strcmp(x1.get_transport(),x2.get_transport())<0){out.write((char*)&x1,len);
                ln1.read((char*)&x1,len);}
        else{out.write((char*)&x2,len);
                ln2.read((char*)&x2,len);}
    }
    while(!ln1.eof()){out.write((char*)&x1,len);
    ln1.read((char*)&x1,len);}
    while(!ln2.eof()){out.write((char*)&x2,len);
    ln2.read((char*)&x2,len);}
    ln1.close();
    ln2.close();
    out.close();
    
}
void main()
{
    system("cls"); int sw;
    while(1)
    {
        cout<<rus_text("-=МЕНЮ=-\n");
        cout<<rus_text("1-Создание файла(город РБ)\n");
        cout<<rus_text("2-Добавление в файл\n");
        cout<<rus_text("3-Чтение с начала файла\n");
        cout<<rus_text("4-Сортировка по виду транспорта\n");
        cout<<rus_text("5-Сортировка по цене билетов\n");
        cout<<rus_text("6-Сортировка номерам маршрутов\n");
        cout<<rus_text("7-Сортировка по количеству проданных билетов\n");
        cout<<rus_text("8-Удаление из файла\n");
        cout<<rus_text("9-Слияние файлов\n");
        cout<<rus_text("10-Выход\n");
        cout<<rus_text("Выберите пункт меню: ");
        cin>>sw;
        if(!cin) {cin.clear();
        cin.ignore(40,'\n');
        }
        cin.get();
        switch(sw)
        {
        case 1:sozdanie_faila();break;
        case 2:dobavlenie_v_fail();break;
        case 3:chtenie_s_nachala();break;
        case 4:sort_for_transport();break;
        case 5:sort_for_cena();break;
        case 6:sort_for_nomer();break;
        case 7:sort_for_kolvo();break;
        case 8:udalenie();break;
        case 9:sliyanie();break;
        case 10:return;
        default:cout<<rus_text("Неправильный выбор - повторите пожалуйста ввод")<<endl;break;
        }
    }
}
char  buf_rus_vivod[256];
char*rus_text( char *buf_vvod)
{
    CharToOem(buf_vvod,    buf_rus_vivod);
    return buf_rus_vivod;
}

Автор: Romati 13.5.2008, 13:41
Up!

Автор: Romati 16.5.2008, 01:34
Вверх!

Автор: archimed7592 16.5.2008, 12:05
Romati, ты всё вверх, да вверх(уже раз третий)... А чего ты ждёшь? Ты хоть вопрос какой-нибудь конкретный задай.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)