Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2011, 19:05   #1
Protected_fat
Пользователь
 
Регистрация: 04.07.2011
Сообщений: 21
Восклицание Доработка класса на С++

Задание:
Описать класс "студенческая группа". предусмотреть возможность работы с переменным числом студентов, поиска студента по какому-либо признаку(например, по фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям. Написать программу, демонстрирующуюю работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

Вот что я пока сделала... Но мне необходима помощь...
Возникли проблемы... Файлы, в которые я записываю данные, становятся бинарными. То есть я не могу потом прочитать,что там записалось. Как сделать так, чтоб я смогла открывать и спокойно читать эти файлы не в программе??? (препод попросит обязательно...)
Как сделать удаление записей и сортировку?
Помогите пожалуйста...
Protected_fat вне форума Ответить с цитированием
Старый 16.09.2011, 19:06   #2
Protected_fat
Пользователь
 
Регистрация: 04.07.2011
Сообщений: 21
По умолчанию

Код:
#include<iostream>
#include<stdlib.h>
#include<string.h>
#define MAX  50
#define FILENAME "books.txt"
#define TEMPFILE "temp.txt"
using namespace std;

FILE *fp, *ft, *printer;
int kol=0, num[MAX];
class GROUP
{
   public:
   char name[50];
   char surname[50];
   int birthyear;
   int number;
} student;
void getkol()
{
   kol=0;
   int i=0;
   if((fp=fopen(FILENAME,"r")) != NULL)
      while(fread(&student, sizeof(student),1,fp) == 1)
	 num[i++] = student.number;
   kol=i;
   fclose(fp);
}
void f1() //просмотр
{
   int ch, i;
   if((fp=fopen(FILENAME, "r")) == NULL)
   {
      cout<<"\n Nevozmozhno otkryt "<<FILENAME;
      getchar();
      exit(1);
   }
   while(fread(&student, sizeof(student), 1, fp) == 1)
   {
      cout<<"\n\n Prosmotret zapis\n";
      cout<<"\n Imya studenta " <<student.name;
      cout<<"\n Familiya " <<student.surname;
      cout<<"\n God rojdeniya " <<student.birthyear;
   }
   getchar();
   fclose(fp);
   return;
}
void f2() //дополнение
{
   int ch;
   if(kol>=MAX)
   {
      cout<<"\n Mest net ";
      getchar();
      return;
   }
   if((fp=fopen(FILENAME, "a"))==NULL)
   {
      cout<<"\n Nevozhmozno otkryt fail"<<FILENAME;
      exit(1);
   }
   cout<<"\n Dobavit zapis\n ";
   cout<<"\n Vvedite imya studenta ";
   getchar();
   gets(student.name);
   cout<<"\n Vvedite familiyu ";
   gets(student.surname);
   cout<<"\n Vvedite god rojdeniya ";
   cin>>student.birthyear;
   fwrite(&student, sizeof(student),1, fp);
   fclose(fp);
   getkol();
   getchar();
   return;
}
void openrw() // открыть для чтения fp и для записи ft
{
   if((fp=fopen(FILENAME,"r"))==NULL)
   {
      cout<<"\n Nevozmozhno otkryt fail " <<FILENAME;
      exit(1);
      getchar();
   }
   if((ft=fopen(TEMPFILE,"w"))==NULL)
   {
      cout<<"\n Nevozmozhno otkryt fail " <<TEMPFILE;
      exit(1);
   }
   return;
}

void openwr() //открыть для записи fp и для чтения ft
{
   if((fp=fopen(FILENAME,"w"))==NULL)
   {
      cout<<"\n Nevozmozhno otkryt fail " <<FILENAME;
      exit(1);
      getchar();
   }
   if((ft=fopen(TEMPFILE,"r"))==NULL)
   {
      cout<<"\n Nevozmozhno otkryt fail " <<TEMPFILE;
      exit(1);
   }
   return;
}
void poisk1()
{
   char name[80];
   cout<<"\n\n Poisk po imeni studenta ";
   cout<<"\n Vvedite imya studenta ";
   gets(name);
   if(strcmp(name,student.name)==0);
}
void poisk2()
{
   char surname[50];
   cout<<"\n\n Poisk po familii gruppu ";
   cout<<"\n Vvedite familiyu studenta ";
   gets(surname);
   if(strcmp(surname,student.surname)==0);
}
void poisk3()
{
   int birthyear;
   cout<<"\n\n Poisk po godu rojdeniya ";
   cout<<"\n Vvedite god rojdeniya ";
   cin>>birthyear;
   if(birthyear==student.birthyear);
}

void f3() // удаление записи
{
}

void f4() // поиск
{
   cout<<"\n\n Kak osushestvit poisk? ";
   cout<<"\n 1 - po familiya studenta";
   cout<<"\n 2 - po godu rojdeniya ";

   char name[80], surname[50];
   int birthyear;
   if((fp=fopen(FILENAME, "r"))==NULL)
   {
      cout<<"\n Nevozmozhno otkryt fail"<<FILENAME;
      getchar();
      exit(1);
   }
   char ch;
   getchar();
   while(fread(&student, sizeof(student),1,fp)==1)
   {
      {
m1:      cout<<"\n\n Poisk po familii studenta ";
         cout<<"\n Vvedite familiyu studenta ";
	     gets(surname);
	     if(strcmp(surname,student.surname)==0)
	     {
      	    cout<<"\n\n Imya studenta "<<student.name;
	        cout<<"\n\n Familiya studenta "<<student.surname;
	        cout<<"\n\n God rojdeniya studenta "<<student.birthyear;
	        getchar();
	     }
      }
      {
m2:      cout<<"\n\n Poisk po godu rojdeniya ";
	     cout<<"\n Vvedite god rojdeniya ";
	     cin>>birthyear;
	     if(birthyear==student.birthyear);
	     {
	         cout<<"\n\n Imya studenta "<<student.name;
	         cout<<"\n\n Familiya studenta "<<student.surname;
	         cout<<"\n\n God rojdeniya studenta "<<student.birthyear;
	         getchar();
	     }
      }
   }
   fclose(fp);
   return;
}

void f5()//сортировка
{
}

main()
{
   getkol();
   char c;
   do
   {
      cout<<"\n\n\n  STUDENT GROUP \n";
      cout<<"\n 1-prosmotr ";
      cout<<"\n 2-dopolnenie ";
      cout<<"\n 3-ydalenie ";
      cout<<"\n 4-poisk";
      cout<<"\n 5-sortirovka";
      cout<<"\n 6-Exit ";

      c=getchar();
      switch(c)
      {
	 case'1':f1(); break;
	 case'2':f2(); break;
	 case'3':f3(); break;
	 case'4':f4(); break;
	 case'5':f5(); break;
	 case'6': break;
	 default:cout<<"\n Poprobuite esho raz "; //break;
      }
   }
   while(c!='6'); }
Protected_fat вне форума Ответить с цитированием
Старый 16.09.2011, 19:07   #3
Protected_fat
Пользователь
 
Регистрация: 04.07.2011
Сообщений: 21
По умолчанию

Код:
void f3() // удаление записи
{
}
void f5() // сортировка
{
}
вот эти функции как сделать? скажите пожалуйста
Protected_fat вне форума Ответить с цитированием
Старый 16.09.2011, 22:47   #4
sig_GB
Пользователь
 
Регистрация: 23.02.2010
Сообщений: 69
По умолчанию

Немного не понятно ваше мышление относительно принципов ООП. Вам знакомы 3 кита ООП? Инкапсуляция, Наследование и Полиморфизм. Я не увидил ни одного признака.
Добавьте к описанию класса помимо полей (которые кстати говоря нужно бы было сделать приватными (private)) еще и методы (которые public).
Это замечание казалось бы мелоч, но я больше чем уверен, если вы не исправите - вам не избежать каверзных вопросов на защите.
Помог? Нажми на <Весы> слева.
С++, Pascal, Assembler 386 - под заказ.
sig_GB вне форума Ответить с цитированием
Старый 17.09.2011, 08:05   #5
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Замечания sig_GB очень важны - обратите на них внимание. Сделал большую часть, за исключением сортировки. Использован двусвязный список. Надеюсь, будет работать.

Код:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
struct student
{
struct student* prev;struct student* next;
char* name;char* otchestvo;char* familia;
int day;int month;int year;char* telephone;
student(){prev=NULL; next=NULL;}
};
typedef struct student* pstudent;
class grup
{
private:
FILE* studentlist;
int n;
pstudent ps; 
public:
grup(){ n = 0;//ps = new student; ps->year=2000; 
};
~grup(){};

void print_file()
{ 
studentlist = fopen("studentcppfile","w");
if (n != 0) {pstudent s = ps;while (s->next != NULL){ print_file_student(s);s=s->next;}
print_file_student(s);cout<<"\n";}
fclose (studentlist);
};
void print_file_student(pstudent h)
{
fprintf(studentlist,"%s %s %s %d %d %d %s\n", h->name,h->otchestvo,h->familia,h->day,h->month,h->year,h->telephone);
};
void read_file()
{ 
pstudent t;
studentlist = fopen("studentcppfile","r");
char d1[50], d2[50], d3[50], d4[50];
while (!feof(studentlist))
{
pstudent s = new student;
fscanf(studentlist,"%s %s %s %d %d %d %s\n",  d1,d2,d3,&(s->day),&(s->month),&(s->year),d4);
s->name = (char*)malloc(strlen(d1));strcpy(s->name,d1);
s->otchestvo = (char*)malloc(strlen(d2));strcpy(s->otchestvo,d2);
s->familia = (char*)malloc(strlen(d3));strcpy(s->familia,d3);
s->telephone = (char*) malloc(strlen(d4));strcpy(s->telephone,d4); 
if (n==0){ps = s;t = ps;n++;}
else {while (t->next != NULL){t=t->next;}t->next = s; s->prev=t; n++;} }
fclose (studentlist);
};
void print_all()
{ if (n != 0) {pstudent s = ps;while (s->next != NULL){ print_student(s);s=s->next;}
print_student(s);cout<<"\n";}};
void print_student(pstudent h)
{cout << "\nStudent:\n";cout <<"Name: "<< h->name;cout << "\nName 2: "<< h->otchestvo;cout << "\nSurname: "<< h->familia;
cout << "\nDay: "<< h->day;cout << "\nMonth: "<< h->month;cout << "\nYear: "<< h->year;
cout << "\nTelephone: "<< h->telephone; };
void add_student(){
if (n != 0) { pstudent s = ps; pstudent d = new student;
while (s->next != NULL){s=s->next;}
s->next = d; d->prev=s; enter_student(d);n++;} 
else { ps = new student; n++; enter_student(ps);}};
void enter_student(pstudent h)
{
char d2[50];
cout << "Name: ";cin >> d2;h->name = (char*)malloc(strlen(d2));strcpy(h->name,d2);
cout << "Name 2: ";cin >> d2;h->otchestvo = (char*)malloc(strlen(d2));strcpy(h->otchestvo,d2);
cout << "Surname: ";cin >> d2;h->familia = (char*)malloc(strlen(d2));strcpy(h->familia,d2);
cout << "Day: ";cin >>  h->day;cout << "Month: ";cin >>  h->month;cout << "Year: ";cin >> h->year;
cout << "Telephone: ";cin >> d2;h->telephone = (char*) malloc(strlen(d2));strcpy(h->telephone,d2); 
};
void delete_student(pstudent s)
{
pstudent l; 
if (s->prev != NULL){l = s->prev;l->next = s->next;delete (s);n--;}
else { if (s->next != NULL){ s = s->next; ps = s; n--;} else { cout << "last element\n"; n=0; delete(s);}}
};
void delete_student(int i, int j)
{
if (n!=0){ pstudent s=ps; switch (i){
case 1: while (s->next != NULL && s->day != j ){s = s->next;}delete_student(s);break;
case 2: while (s->next != NULL && s->month != j ){s = s->next;}delete_student(s);break;
case 3: while (s->next != NULL && s->year != j ){s = s->next;}delete_student(s);break;
}}};
void delete_student(int i, char* j)
{
if (n!=0) { pstudent l; pstudent s=ps;
switch (i){
case 1: while (s->next != NULL && strcmp(s->name,j)!=0 ){s = s->next;}delete_student(s);break;
case 2: while (s->next != NULL && strcmp(s->otchestvo,j)!=0 ){s = s->next;}delete_student(s);break;
case 3: while (s->next != NULL && strcmp(s->familia,j)!=0 ){s = s->next;}delete_student(s);break;
case 4: while (s->next != NULL && strcmp(s->telephone,j)!=0 ){s = s->next;}delete_student(s);break;}}};


void sort_student()
{

};
void search_student(int i, int j)
{
if (n!=0){ pstudent s=ps; switch (i){
case 1: while (s->next != NULL && s->day != j ){s = s->next;} print_student(s); break;
case 2: while (s->next != NULL && s->month != j ){s = s->next;} print_student(s);break;
case 3: while (s->next != NULL && s->year != j ){s = s->next;} print_student(s);break;}}};

void search_student(int i, char* j)
{
if (n!=0){pstudent s=ps;switch (i){
case 1: while (s->next != NULL && strcmp(s->name,j)!=0 ){s = s->next;} if(strcmp(s->name,j)==0) print_student(s);break;
case 2: while (s->next != NULL && strcmp(s->otchestvo,j)!=0 ){s = s->next;}if(strcmp(s->otchestvo,j)==0) print_student(s);break;
case 3: while (s->next != NULL && strcmp(s->familia,j)!=0 ){s = s->next;}if(strcmp(s->familia,j)==0) print_student(s);break;
case 4: while (s->next != NULL && strcmp(s->telephone,j)!=0 ){s = s->next;}if(strcmp(s->telephone,j)==0) print_student(s);break;}}};

};
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к из одной функции класса к другой того же класса,не указывая к какому объекту она относиться zipwind C++ Builder 1 09.04.2011 17:18
Определение типа класса по переменной на объект этого класса при компиляции phomm Общие вопросы Delphi 24 08.04.2011 14:11
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов Lanx Помощь студентам 0 06.04.2011 20:24
Параметр конструктора класса = объект этого класса nazavrik Общие вопросы C/C++ 6 14.02.2010 13:48
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54