0 / 0 / 0
Регистрация: 15.01.2015
Сообщений: 3
1

Написать программу учёта абитуриентов, описав типы Array и String

07.07.2016, 23:37. Показов 658. Ответов 1
Метки нет (Все метки)

Доброго времени суток. Программа должна выводить данные абитуриентов (ФИО ID, самый распространённый балл, средний балл) в зависимости от выбора пользователя (1-фамилия, 2-оценки, 3-выход с просмотром всех данных).
Программа нормально работает с вводом оценок, но если попытаться набрать фамилию из списка, то она её не находит так как почему-то "прибавляет" к ней лишние символы (результат во вложенном файле). Уже неделю пытаюсь разобраться, в результате чего код стал похож на Франкенштейна, за что прошу прощения. Надеюсь на вашу помощь.


===========Abit.h===========
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#ifndef Abit_Abit_H
#define Abit_Abit_H
 
#include <iostream>
#include "Array.h"
#include "String.h"
 
using namespace std;
 
typedef double ui;
 
 
    class Abit {
private:
    static ui lastId;
    ui id;
    String surname;
    ui a_mark;
    String sec_name;
    ui w_mark;
    String name;
    void setId();
    void makeAbit(const Abit&);
public:
    Abit();
    Abit(String& _surname,String& _name,String& _sec_name,ui _w_mark, ui _a_mark);
    Abit(char *_surname,char *_name, char *_sec_name, ui _w_mark, ui _a_mark);
    Abit(const Abit&);
    Abit& operator=(const Abit&);
    friend istream& operator>>(istream&, Abit&);
    friend ostream& operator<<(ostream&,const Abit&);
    void setw_mark(ui _w_mark);
    void seta_mark(ui _a_mark);
    void setsurname(String&);
    void setname(String&);
    void setsec_name(String&);
    void setRegNum(String&);
    String& getsurname();
    String& getsec_name();
    String& getname();
    friend void surnameList(const Array<Abit>&,String& _surname);
    friend void a_markList(const Array<Abit>&,ui _a_mark,ui _w_mark);
    ui getw_mark();
    ui geta_mark();
    ui getId();
};
 
 
#endif

===========Array.h===========
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#ifndef ARRAY_ARRAY_H
#define ARRAY_ARRAY_H
 
 
#include <assert.h>
#include <iostream>
#include "Abit.h"
 
using namespace std;
 
template<typename T>
class Array {
        const int size;
        T* arr;
    public:
        Array(int size=4);
        Array(const Array&);
        //T* getArr()const;
        int getSize()const;
        T getArrEl(const int position)const;
        void setArrEl(const T value,const int position);
        //void qSort(int,int);
        void printArr(void printFun(Array&,int));
        Array operator=(const Array&);
        T& operator[](int);
        T& operator[](int)const;
        ~Array();
 
};
 
template<typename T>
Array<T>::Array(int temp):size(temp>0?temp:10) {
    assert(size>0);
    arr = new T[size];
    assert(arr);
}
 
 
template<typename T>
Array<T> Array<T>::operator=(const Array<T> &arr) {
    if(this != &arr) {
        for (int i = 0; i < size; ++i) {
            arr[ i ] = arr.arr[ i ];
        }
    }
    return *this;
}
 
template<typename T>
T& Array<T>::operator[](int i) {
    if(i>=0 && i<size) {
        return arr[i];
    }
    exit(1);
}
 
template<typename T>
T& Array<T>::operator[](int i)const {
      if(i>=0 && i<size) {
        return arr[i];
    }
    exit(1);
 
}
template<typename T>
Array<T>::Array(const Array<T> &arr):size(arr.size) {
    if(this != &arr) {
        arr = new T[arr.size];
        assert(arr);
        for(int i=0;i<arr.size;++i){
            arr[i]=arr.arr[i];
 
        }
    }
}
 
template<typename T>
Array<T>::~Array() {
    delete [] arr;
    arr == NULL;
}
 
template<typename T>
int Array<T>::getSize() const {
    return size;
}
 
/*template<typename T>
T *Array<T>::getArr() const {
    T* temp;
    temp = new T[size];
    assert(temp);
    for(int i=0;i<size;++i){
        temp[i] = arr[i];
    }
    return temp;
}*/
 
template<typename T>
T Array<T>::getArrEl(const int position) const {
    assert(fabs(position)<=size);
    return position<0?arr[size+position]:arr[position];
}
 
template<typename T>
void Array<T>::setArrEl(const T value, const int position) {
    assert(fabs(position)<=size);
    arr[(position >= 0 ? position : size + position)]=value;
}
 
/*template<typename T>
void Array<T>::qSort(int last,int first) {
    int i = first, j = last;
    T x = arr[first + (last - first) / 2];
    T buf;
 
    do {
        while (arr[i] < x) i++;
        while (arr[j] > x) j--;
 
        if(i <= j) {
            if (arr[i] > arr[j]){
                buf = arr[i];
                arr[i] = arr[j];
                arr[j] = buf;
            }
            i++;
            j--;
        }
    } while (i <= j);
 
    if (i < last)
        qSort(last, i);
    if (first < j)
        qSort(j, first);
}*/
 
template<typename T>
void Array<T>::printArr(void printFun(Array<T>& arr,int position)) {
    for(int i=0;i<size;++i){
        printFun(*this,i);
    }
}
 
#endif

===========String.h===========
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef STRING_STRING_H
#define STRING_STRING_H
 
 
#include <iostream>
 
using namespace std;
 
class String{
    char *str;
    unsigned int len;
    void makeStr(char* temp);
public:
    String( void);
    String( char*temp);
    String( const String&);
    void setStr( char*);
    void setStr( String);
    unsigned int length( void)const;
    char* getStr( void)const;
    void show( void) const;
    int indexOf(char)const;
    int charCount(const char)const;
    void concat(const String&);
    void concat(const char*);
    void reverse()const;
    int toInt()const;
    friend istream&operator>>(istream& stream,String& string);
    friend ostream&operator<<(ostream& stream,String string);
    String operator+(const String);
    String operator+(const char*);
    String operator*(const unsigned int);
    String& operator= (const String&);
    ~String( void);
    String &operator+= (const String &ob);
    int operator== (const String &ob);
    int operator!= (const String &ob);
    int operator< (const String &ob);
    int operator> (const String &ob);
    char& operator[](int);
};
 
#endif

===========String.cpp===========
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#include "String.h"
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <limits.h>
 
using namespace std;
 
void String::makeStr(char *temp) {
    //cout<<temp;
    int curLen = (int) strlen(temp);
    str = new char[curLen+1];
    if(!str){
        exit(1);
    }
    strcpy(str,temp);
}
 
String:: String(void){
    str = new char[0];
    len = 0;
}
 
String:: String(char* temp) {
   len = strlen(temp);
    str = new char [len+1];
    if(!str) exit(1);
    strcpy(str,temp);
    makeStr(temp);
}
 
 
 
String:: String(const String& temp) {
    len = temp.len;
    makeStr(temp.str);
}
 
unsigned int String ::length(void)const{
    return len;
}
 
char* String ::getStr() const {
    char* temp = new char[len+1];
    strcpy(temp,str);
    return temp;
}
 
String ::~String() {
    delete [] str;
    str == NULL;
}
 
void String :: show() const {
    cout << str << endl;
}
 
void String ::setStr(char *temp) {
    delete []str;
   len = (double) strlen(temp);
    makeStr(temp);
}
 
void String ::setStr(String temp) {
    setStr(temp.str);
}
 
String String::operator+(const String temp) {
    double sumLen;
    sumLen = temp.len + len;
    String newStr ;
    newStr.len = sumLen;
    if(!newStr.str){
        exit(1);
    }
strcpy(newStr.str,str);
    strcat(newStr.str,temp.str);
    return newStr;
}
 
String String::operator+(const char* temp) {
    double sumLen;
    char* tempStr = new char[sumLen];
    strcpy(tempStr,str);
    strcat(tempStr,temp);
    String newStr(tempStr);
    if(!newStr.str){
        exit(1);
    }
 
    return newStr;
}
 
String& String::operator = (const String& s){
    if (this != &s){
        delete[]str;
        len = s.len;
        str = new char[s.len];
        memcpy(str, s.str, s.len);
    }
    return *this;
}
 
int String::indexOf(char ch) const {
    int position = -1;
    for(int i=0;str[i];i++){
        if(str[i]==ch){
            position = i;
            return position;
        }
    }
    return position;
}
 
void String::concat(const String &temp) {
    len += strlen(temp.str);
    strcat(str,temp.str);
}
 
void String::concat(const char *temp) {
    len += strlen(temp);
    strcat(str,temp);
}
 
int String::charCount(const char ch) const {
    int count=0;
    for(int i=0;str[i];++i){
        if(str[i]==ch){
            ++count;
        }
    }
    return count;
}
 
String String::operator*(const unsigned int i) {
    int newLen=len * i;
    char* tempStr = new char[newLen];
    for(int j=0;j<i;++j){
        strcat(tempStr,str);
    }
    String newStr(tempStr);
    return newStr;
}
int String::toInt()const {
    int num=INT_MAX,maxLen=0;
    for(int i=0;i<len;++i){
        if((str[i]>='0' && str[i]<='9') || (i==0 && str[i]=='-')){
            ++maxLen;
        }
        else{
            break;
        }
    }
    for(int i=maxLen-1;str[i];--i){
        if(str[i]>='0' && str[i]<='9'){
            num+=(str[i]-'0')*pow(10.0,maxLen-i-1);
        }else if(str[i]=='-'){
            num*=-1;
        }else{
            break;
        }
    }
    return num;
}
 
void String::reverse() const {
    for(int i=0,j=len-1;i<j;++i,--j);
}
 
 
int String::operator==(const String &ob) {
    return strcmp(str,ob.str)==0;
}
 
int String::operator!=(const String &ob) {
    return !strcmp(str,ob.str)==0;
}
 
int String::operator<(const String &ob) {
    return strcmp(str,ob.str)==-1;
}
 
int String::operator>(const String &ob) {
    return strcmp(str,ob.str)==1;
}
 
char &String::operator[](int i) {
    return str[i];
}
 
istream &operator>>(istream &stream, String& string) {
    char temp[256];
    cin>>temp;
    string.len = (unsigned int) strlen(temp);
    string.str = new char[string.len+1];
    memcpy(string.str,temp,string.len);
    return stream;
}
 
ostream &operator<<(ostream &stream, String string) {
    cout<<string.str;
    return stream;
}

===========Abit.cpp===========

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <string.h>
#include <assert.h>
#include "Abit.h"
#include <iostream>
 
ui Abit::lastId = 0;
 
Abit::Abit() {
    surname = String();
    name = String();
    sec_name = String();
    setId();
    w_mark = 0;
    a_mark = 0;
}
 
Abit::Abit(String &_surname, String &_name, String &_sec_name, ui _w_mark, ui _a_mark) {
    surname = _surname;
    name = _name;
    sec_name = _sec_name;
    setw_mark(_w_mark);
    seta_mark(_a_mark);
}
 
Abit::Abit(char *_surname,char *_name, char *_sec_name, ui _w_mark, ui _a_mark) {
    surname.setStr(_surname);
    name.setStr(_name);
    sec_name.setStr(_sec_name);
    setId();
    setw_mark(_w_mark);
    seta_mark(_a_mark);
}
 
void Abit::makeAbit(const Abit &Abit) {
    surname = Abit.surname;
    name = Abit.name;
    sec_name = Abit.sec_name;
    id = Abit.id;
    setw_mark(Abit.w_mark);
    seta_mark(Abit.a_mark);
}
 
void Abit::setId() {
    id = lastId++;
}
 
void Abit::setsurname(String& _surname) {
    surname = _surname;
}
 
void Abit::setname(String& _name) {
    name = _name;
}
 
void Abit::setsec_name(String& _sec_name) {
    sec_name = _sec_name;
}
 
 
void Abit::setw_mark(ui _w_mark) {
    assert(_w_mark>=0);
    w_mark = _w_mark;
}
 
void Abit::seta_mark(ui _a_mark) {
    assert(_a_mark>=0);
    a_mark = _a_mark;
 
}
 
Abit::Abit(const Abit &Abit) {
    if(this != &Abit){
        makeAbit(Abit);
    }
}
 
Abit &Abit::operator=(const Abit &Abit) {
    if(this != &Abit){
        makeAbit(Abit);
    }
    return *this;
}
 
ostream &operator<<(ostream &stream, const Abit &Abit) {
    stream << Abit.surname << " ";
    stream << Abit.name << " ";
    stream << Abit.sec_name << " ";
    stream << Abit.id << " ";
    stream << Abit.w_mark << " ";
    stream << Abit.a_mark << " ";
    stream << endl;
    return stream;
}
 
/*istream &operator>>(istream &stream, Abit &Abit) {
    char temp[256];
    String string;
    ui num;
    cout<<"Enter surname\n";
    stream >> temp;
    string = String(temp);
    Abit.setsurname(string);
    cout<<"Enter name\n";
    stream >> temp;
    string = String(temp);
    Abit.setname(string);
    cout<<"Enter sec_name\n";
    stream >> temp;
    string = String(temp);
    Abit.setsec_name(string);
    cout<<"Enter w_mark\n";
    stream >> num;
    Abit.setw_mark(num);
    cout<<"Enter a_mark\n";
    stream >> num;
    Abit.seta_mark(num);
    return stream;
}*/
 
 
ui Abit::getw_mark() {
    return w_mark;
}
 
ui Abit::geta_mark() {
    return a_mark;
}
 
ui Abit::getId() {
    return id;
}
 
String &Abit::getsurname() {
    return surname;
}
 
 
String &Abit::getname() {
    return name;
}
 
String &Abit::getsec_name() {
    return sec_name;
}
 
void surnameList(const Array<Abit>& arr, String& _surname) {
    int size = arr.getSize();
    for(int i=0;i<size;i++){
        if(arr[i].surname == _surname){
            cout<<arr[i]<<endl;
        }
        else{
        cout<<"Student "<< arr[i].surname <<" doesn't fit the requirements\n";
        }
    }
}
 
void a_markList(const Array<Abit> &arr, ui a_mark, ui w_mark) {
    int size = arr.getSize();
    for(int i=0;i<size;i++){
        if(arr[i].w_mark>=w_mark && arr[i].a_mark >= a_mark){
            cout<<arr[i]<<endl;
        }
        else{
            cout<<"Student "<< arr[i].surname <<" doesn't fit the requirements\n";
        }
    }
}
===========main.cpp===========

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include "Abit.h"
#include "Array.h"
 
 
using namespace std;
void init(Array<Abit>& array){
    array[0]=Abit((char *) "petrov", (char *) "petr", (char *) "petrovich",  7, 7.3);
    array[1]=Abit((char *) "ivanov", (char *) "ivan", (char *) "ivanovich",  9, 8.7);
    array[2]=Abit((char *) "sergev", (char *) "sergey", (char *) "sergeevich",  4, 4.2);
    array[3]=Abit((char *) "petrov", (char *) "igor", (char *) "nikolaevich",  6, 6.4);
}
 
 
int main() {
    Array<Abit> Abits(4);
    init(Abits);
    int choice=0;
 
    while(choice!=3) {
        cout<<"1 surname\n"<<"2 by mark\n"<<"3 exit\n";
        cin >> choice;
        String temp;
        int num=0;
        int a_mark=0;
        switch (choice) {
            case 1:
 
                cout<<"Enter surname\n";
                cin>>temp;
                surnameList(Abits,temp);
                break;
            case 2:
                cout<<"Enter a_mark , than w_mark\n";
                cin>>a_mark;
                cin>>num;
                a_markList(Abits,a_mark,num);
                break;
            default:
                break;
        }
    }
    for(int i=0;i<4;++i){
        cout<<Abits[i];
    }
}
Миниатюры
Написать программу учёта абитуриентов, описав типы Array и String  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2016, 23:37
Ответы с готовыми решениями:

Написать программу учета абитуриентов в университете
Написать программу учета абитуриентов в университете. Сведения о абитуриента содержат следующую...

Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array?
Во всех примерах в union используют простые типы (int, float), а если в union будет...

Написать программу, вводящую в файл или читающую из файла ведомость абитуриентов.
Задание: написать программу, вводящую в файл или читающую из файла ведомость абитуриентов, сдавших...

Incompatible types: 'array of string' and 'Dynamic array'
Добрый день! В процессе написания программы столкнулся с ошибкой: Unit1.pas(77): E2010...

1
Модератор
Эксперт С++
12071 / 9754 / 5899
Регистрация: 18.12.2011
Сообщений: 26,184
08.07.2016, 09:33 2
Цитата Сообщение от R_B Посмотреть сообщение
"прибавляет" к ней лишние символы
Значит Вы забыли дописать в конец строки терминальный ноль.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.07.2016, 09:33
Помогаю со студенческими работами здесь

Написать программу учета медикаментов
Написать программу учета медикаментов! Delphi 7. Программа должна содержать следующую...

Notice: Array to string conversion in /home/komp/www/site1.my/www/index.php on line 58 Array
Notice: Array to string conversion in /home/komp/www/site1.my/www/index.php on line 58 Array ...

Написать программу учета для бара.
Люди нужно написать прогу учета для БАРА ,просто приход расход товара на кухню и бар. Помогите...

Написать программу учёта машин на автостоянке
Здравствуйте, прошу помощи. Нужно написать программу по учёту машин на автостоянке C# . Помоги...

Написать простую программу учета медикаментов!
Написать простую программу учета медикаментов! Программа должна быть написана на Delphi 7....

Написать программу учета заявок на авиабилеты
Написать программу учета заявок на авиабилеты. Каждая заявка содержит: пункт назначения, фамилию и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru