Форум программистов, компьютерный форум CyberForum.ru

Написать программу учета сдачи зачетов при помощи битовых полей (исправить код) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
lispo
Сообщений: n/a
22.04.2011, 09:42     Написать программу учета сдачи зачетов при помощи битовых полей (исправить код) #1
Вобщем задача была изначально такова:
Написать программу учета сдачи зачетов при помощи битовых полей. Структура содержит поля: фамилия, группа, зачеты (битовое поле). Предусмотреть вывод списков сдавших все зачеты и должников по группам и в алфавитном порядке.
Сделал поиск студентов с незачетами и сортировку их же по алфавиту методом пузырька, но при выводе 1- раз показывает лишнее поле, 2 раз пробую, еще одно поле создает...вобщем где - то утечка...
помогите найти ошибку, а то сам уже день смотрю в код и никак не найду.
P.S. Новичок в С, поэтому особо не ругайте, если что не так.

Собственно сам код:
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
#include<iostream>
#include<stdio.h>
#include<Windows.h>
#include<conio.h>
 
using namespace std;
int fm = 0;
int fm2 = 0;
int g;
int k = 0;
int u;
struct _Bit
{
    unsigned math: 1 ;
    unsigned chem: 1 ;
    unsigned phis: 1;
    unsigned inform: 1;
    char name [30];
    char group[30];
};
struct _Name
{
    char name[30];
};
 
void SortStudent(_Bit *p, _Name *name)
{char bufer[30];
    for (int u=0;u<fm+1;u++)
{
        if(p[u].chem==0||p[u].inform==0||p[u].math==0||p[u].phis==0)
        {strcpy(name[u].name,p[u].name) ;
        k++;}
 
}
    for(int i=0;i<=k;i++){
        for(int j = k;j>i;j--){
            if(stricmp(name[j].name,name[j-1].name)==-1){
              strcpy( bufer , name[j].name);
               strcpy( name[j].name,name[j-1].name);
                strcpy (name[j-1].name,bufer);
            }
        }
    }
 
}
void NewStudent(_Bit *p,int size)
{   int d = 0;
    char buf;
    if (fm>0)
    {   fm=fm+1;
        d=fm+size;
 
    }
    else
    {d = size;}
 
    system("cls");
    for(int i = fm;i<d;i++)
    {cout<<"Введите фамилию студента: ";
     cin>>p[i].name;
     system("cls");
     cout<<"Введите группу: ";
     cin>>p[i].group;
     system("cls");
 
     do{
        cout<<"Зачет по математике - 1, незачет  - 0"<<endl;
        cin>>buf;
   switch(buf)
   {
   case '1':
       p[i].math = 1;
       break;
   case '0':
       p[i].math = 0;
       break;
   default:
       cout<<"Неправильный Выбор! Попробуйте снова ввести это поле!";
       break;
       getch();
   }}while(p[i].math!=0&&p[i].math!=1);
        system("cls");
 
        do{
        cout<<"Зачет по химии - 1, незачет  - 0"<<endl;
        cin>>buf;
   switch(buf)
   {
   case '1':
       p[i].chem = 1;
       break;
   case '0':
       p[i].chem = 0;
       break;
   default:
       cout<<"Неправильный Выбор! Попробуйте снова ввести это поле!";
       break;
       getch();
     }}while(p[i].chem!=0&&p[i].chem!=1);
 
   do{
        cout<<"Зачет по физике - 1, незачет  - 0"<<endl;
        cin>>buf;
   switch(buf)
   {
   case '1':
       p[i].phis = 1;
       break;
   case '0':
       p[i].phis = 0;
       break;
   default:
       cout<<"Неправильный Выбор! Попробуйте снова ввести это поле!";
       break;
       getch();
     }}while(p[i].phis!=0&&p[i].phis!=1);
 
   do{
        cout<<"Зачет по математике - 1, незачет  - 0"<<endl;
        cin>>buf;
   switch(buf)
   {
   case '1':
       p[i].inform = 1;
       break;
   case '0':
       p[i].inform = 0;
       break;
   default:
       cout<<"Неправильный Выбор! Попробуйте снова ввести это поле!";
       break;
       getch();
     }}while(p[i].inform!=0&&p[i].inform!=1);
 
}  fm+=size-1; }
 
void main()
{SetConsoleOutputCP(1251);
    char vibor;
    int size,f;
 
_Bit *p = new _Bit [fm];
_Name *name = new _Name [fm];
do
{
        cout<<"Сделайте выбор: \n1 - Добавить Студента\n2 - Все студенты\n3 - Должники\n4 - Выход";
    cin>>vibor;
switch(vibor)
    {
    case '1':
        cout<<"Введите сколько записей вы хотите добавить: ";
        cin>>size;
        NewStudent(p,size);
        break;
    case '2':
        for(f=0;f<fm+1;f++)
        {
            cout<<p[f].name<<endl;
        cout<<p[f].group<<endl;
        cout<<p[f].math<<endl;
        cout<<p[f].chem<<endl;
        cout<<p[f].phis<<endl;
        cout<<p[f].inform<<endl;
        cout<<"------------------------"<<endl;
        }
        break;
    case '3':
       SortStudent(p,name);
 
        for(g = 0;g<k;g++)
{
//    cout<<p[i].name<<endl;
        cout<<name[g].name<<endl;
 
        cout<<"------------------------"<<endl;
}
        break;
                      default:
                      system("cls");
                      cout<<"Неправильный выбор!"<<endl;
                      break;
 
    }
 
}
while(vibor!='4');
delete p;
delete name;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2011, 09:42     Написать программу учета сдачи зачетов при помощи битовых полей (исправить код)
Посмотрите здесь:

C++ написать программу, при помощи которой можно проверять синтаксические ошибки слов текста, хранящегося в файле
Написать программу,которая находит среднее значение массива целых чисел при помощи функции C++
C++ Написать программу, которая вычисляет среднее арифметическое элементов массива без учета макси-мального
C++ Вывод битовых полей изображения
ПОМОГИТЕ НАПИСАТЬ ПРОГРАММУ С ПОМОЩИ С++ C++
Шифрование текста при помощи таблицы. Прокомментируйте код C++
C++ Написать программу сравнения строк без учета регистра
C++ Написать программу учета абитуриентов в университете

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ruslan_net
4 / 4 / 1
Регистрация: 18.09.2012
Сообщений: 38
13.10.2012, 03:49     Написать программу учета сдачи зачетов при помощи битовых полей (исправить код) #2
мне вот интересно как сделать сортировку по алфавиту(подобная задача)
Ruzhin
15 / 15 / 3
Регистрация: 18.01.2013
Сообщений: 17
21.03.2013, 23:33     Написать программу учета сдачи зачетов при помощи битовых полей (исправить код) #3
вот решение задачи... здесь и функция сортировки по алфавиту...
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
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
template <class T> void sortirovka (T A[], int size)
{
    
    int p;
 
    STUDENT x;
 
        for (int j=0; j<size; j++)
        {
            p=j;
            x=A[j];
            for (int k=j+1; k<size; k++)
            {
                int s=0; //номер символа в фамилии
                if (A[k].name[s]==x.name[s])
                    s++;
                if (A[k].name[s]<x.name[s])
                {
                    p=k;
                    x=A[k];
                }
            }
            A[p]=A[j];
            A[j]=x;
        }
 
            
}
 
struct STUDENT
{
    char name [100];
    int group;
 
    union zachet
    {
        unsigned int rez: 1;
    }rezult;
 
} student;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int vibor;
    STUDENT ar[20];
    
 
    int i=0;
 
    
    cout <<"Программа учета сдачи зачетов студентами" <<endl;
 
    do
    {
    cout <<"\n\nВведите фамилию студента" <<endl;
 
    fflush(stdin);
    cin.getline(student.name,sizeof(student.name));
 
    cout <<"Введите номер группы" <<endl;
    cin >> student.group;
    
    int rez;
    cout << "0 - незачет, 1 - зачет" <<endl;
    do
    cin >> rez;
    while (rez<0 || rez>1);
    
    student.rezult.rez=rez;
 
    cout << "\n\nПродолжить заполнение ведомости? 0 - нет, 1 - да" <<endl;
 
    do
    cin >> vibor;
    while (vibor<0 || vibor>1);
 
    ar[i]=student;
    i++;
 
    }
    while (vibor==1);
 
 
    do
    {
        cout << "0 - список сдавших зачет" <<endl;
        cout << "1 - список должников" <<endl;
        int vibor_1;
 
        do
        cin >> vibor_1;
        while (vibor_1<0 || vibor_1>1);
 
        if (vibor_1==0)
        {
            cout <<"\n\nКак отсортировать? 0 - по группам, 1 - по алфавиту" <<endl;
            int vibor_2;
 
            do
            cin >> vibor_2;
            while (vibor_2<0 || vibor_2>1);
 
            if (vibor_2==0)
            {
                cout << "\n\nВведите номер группы" <<endl;
                int number;
                cin >> number;
                int count=0;
 
                for (int j=0; j<i; j++)
                {
                    if (ar[j].group==number&&ar[j].rezult.rez==1)
                    {
                        cout << "\n\nФамилия: " << ar[j].name <<endl;
                        cout << "Номер группы: " << ar[j].group <<endl;
                        count++;
                    }
                }
 
                cout << "\n\nКоличество студентов группы №  " <<number <<" сдавших зачет: " <<count <<endl;
            }
 
            else
            {
                sortirovka (ar,i);
                for (int j=0; j<i; j++)
                {
                    if (ar[j].rezult.rez==1)
                        {
                            cout << "\n\nФамилия: " << ar[j].name <<endl;
                            cout << "Номер группы: " << ar[j].group <<endl;
                        }
                }
            }
 
        }
 
        if (vibor_1==1)
        {
            cout <<"\n\nКак отсортировать? 0 - по группам, 1 - по алфавиту" <<endl;
            int vibor_2;
 
            do
            cin >> vibor_2;
            while (vibor_2<0 || vibor_2>1);
 
            if (vibor_2==0)
            {
                cout << "\n\nВведите номер группы" <<endl;
                int number;
                cin >> number;
                int count=0;
 
                for (int j=0; j<i; j++)
                {
                    if (ar[j].group==number&&ar[j].rezult.rez==0)
                    {
                        cout << "\n\nФамилия: " << ar[j].name <<endl;
                        cout << "Номер группы: " << ar[j].group <<endl;
                        count++;
                    }
                }
 
                cout << "\n\nКоличество студентов группы №  " <<number <<" не сдавших зачет: " <<count <<endl;
            }
 
            else
            {
                sortirovka (ar,i);
                for (int j=0; j<i; j++)
                {
                    if (ar[j].rezult.rez==0)
                        {
                            cout << "\n\nФамилия: " << ar[j].name <<endl;
                            cout << "Номер группы: " << ar[j].group <<endl;
                        }
 
            }
        }
 
        
    }
        cout <<"\n\nВывести другой список? 0 - нет, 1 - да "<<endl;
        do
        cin >>vibor;
        while (vibor<0 || vibor>1);
 
    }
    while (vibor==1);
    
}
Yandex
Объявления
21.03.2013, 23:33     Написать программу учета сдачи зачетов при помощи битовых полей (исправить код)
Ответ Создать тему
Опции темы

Текущее время: 14:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru