Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
tpogih
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
1

Организовать меню: Создание файла, Просмотр файла, Поиск, Выход

29.01.2014, 16:56. Просмотров 1357. Ответов 4
Метки нет (Все метки)

часть задания задание
Организовать меню: Создание файла, Просмотр файла, Поиск, Выход. В файле содержатся структуры со сведениями о результатах сессии группы: ФИО студента и 5 оценок по 5-ти предметам
получается все, кроме связи между предметом и оценкой. пробовал в одной структуре, пробовал в разных, при указании t2.theme[i] , программа вылетает, при t2.theme выводит все предметы разом меняю в 54 строке

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
#include <stdio.h>                  
#include <math.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
void input2 (FILE *);
void input1 (FILE *);
void print (FILE *);
void app   (FILE *);
void find  (FILE *);
struct zachet 
{
    char name[10];
    char groupe[10];
    int mark[5];
    
} t1;
struct theme
{
    char theme[15];
}t2;
void input1(FILE *tf)
{
    char ch;
    int q;
    tf=fopen("file1.txt","w+");
    system ("cls");
    printf("\n write data \n ");
    for (int i=0;i<5;i++)
    {
        printf("\n write %d theme \n ",i+1);
        scanf("%s",&t2.theme);
        fwrite(&t2,sizeof(t2),1,tf);
    }
    fclose(tf);
}
void input2 (FILE *tf)
{
    char ch;
    int q;
    tf=fopen("file1.txt","rb+");
    system ("cls");
    printf("\n write data \n ");
    do
    {
        printf("\n Student's name \n");
        scanf("%s",&t1.name);
        printf("\n Write groupe  \n");
        scanf("%s",&t1.groupe);
        printf("\n Write 5 marks \n");
        fread(&t2,sizeof(t2),1,tf);
        for (int i=0;i<5;)
        {
            printf("\n %s --  mark--",t2.theme[i] );
            scanf("%d",&q);
            if ((q<6)&(q>0))  
                {
                    t1.mark[i]=q;
                    i++;
                }
            else
                printf("\n error \n");
        }   
        fwrite(&t1,sizeof(t1),1,tf);
        fread(&t2,sizeof(t2),1,tf);
        printf("\n Exit? y/n");
        ch=getch();
    }
    while (ch != 'y');
    fclose(tf);
}
void print (FILE *tf)
{
    int i;
    system ("cls");
    tf=fopen("file1.txt","rb");
    i=1;
    fread(&t1,sizeof(t1),1,tf);
    while(!feof(tf))
    {
        printf("\n %d  Name -- %s  groupe -- %s \n",i,t1.name, t1.groupe);
        for (int i1=0;i1<5;i1++)
        {
            printf("%s -- %d mark---%d  ",t2.theme, i1+1,t1.mark[i1]);
        }
        fread(&t1,sizeof(t1),1,tf);
        printf("\n");
    i++;
    }
getch();
}
void app(FILE *tf)
{
    char ch;
    int q;
    tf=fopen ("file1.txt","ab");
    system("cls");
    printf("\n write data \n ");
    do
    {
        printf("\n Student's name\n");
        scanf("%s",&t1.name);
        printf("\n Write groupe \n");
        scanf("%s",&t1.groupe);
        printf("\n Write 5 marks\n");
        for (int i=0;i<5;)
        {
            printf("\n%s --  %d mark--",t2.theme, i+1);
            scanf("%d",&q);
            if ((q<6)&(q>0))  
                {
                    t1.mark[i]=q;
                    i++;
                }
            else
            printf("\n error \n");
        }
        fwrite(&t1,sizeof(t1),1,tf);
        printf("\n Exit? y/n");
        ch=getch();
    }
    while (ch != 'y');
    fclose(tf);
}
void find (FILE *tf)
{
    char c, zach[10];
    long int i;
    tf=fopen("file1.txt","rb+");
    system("cls");
    puts("Student's name");
    gets(zach);
    fread(&t1,sizeof(t1),1,tf);
    while (!feof(tf))
    {
        if (strcmp(t1.name, zach)==0)
        {
            printf("\n  Name -- %s groupe -- %s ",t1.name, t1.groupe);
            for (int i=0;i<5;i++)
            {
                printf("%s --  mark -- %d",t2.theme[i],t1.mark[i]);
            }
            printf("Edit? y/n");
            c=getch();
            if (c=='y')
            {
                printf("\n Student's name");
                scanf("%s",&t1.name);
                printf("\n Write groupe of the test book");
                scanf("%s",&t1.groupe);
                printf("\n Write 5 marks");
                for (int i=0;i<5;i++)
                {
                    scanf("%d",&t1.mark[i]);
                }
                fwrite(&t1,sizeof(t1),1,tf);
            }
        }
        fread(&t1, sizeof(t1),1,tf);
    }
    fclose(tf);
}
main ()
{
    char c,ch;
    FILE *tf;
    while (1)
    {
        system("cls");
        puts("1 - new file");
        puts("2 - view file");
        puts("3 - add in the file");
        puts("4 - find losers and rewrite");
        puts("0 - exit");
        c=getch();
        switch(c)
        {
            case '1':input1(tf);input2(tf);break;
            case '2':print(tf);break;
            case '3':app(tf);break;
            case '4':find(tf);break;
            case '0':return (0);
            default:puts("error, try again");
        }
        getch();
    }
    return (0);
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 16:56
Ответы с готовыми решениями:

Как организовать поиск по базе в виде файла?
Всем привет. Пишу очередную лабу и тут возникли некие трудности. В общем есть база данных в виде...

Просмотр исходного файла с записанным в нём текстом (при отсутствии файла - создать его и ввести текст)
Нужно осуществить просмотр исходного файла с записанным в нём текстом. В Случае отсутствия файла -...

Организовать удаления записи из файла, но без дополнительного файла
Здраствуйте, есть такой вопрос: как еще можно организовать удаления записи из файла, но без...

Создать программу, реализующую: создание файла, просмотр файла, поиск по файлу, выход
Создать программу, которая может осуществлять такие действия(меня программы): создание файла,...

Записи: создание новой, просмотр, удаление, поиск. Организация меню
Всем привет)))Ребят, нужна ваша помощь...Нужно написать программку, в которой будет организовано...

4
vua72
418 / 417 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
29.01.2014, 19:50 2
C
1
if ((q<6)&(q>0))
Может так?
C
1
if ((q<6)&&(q>0))
0
tpogih
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
30.01.2014, 08:25  [ТС] 3
нет, не помогло, проблема явно не в этом, я думаю в том где я открываю/ закрываю файл,чето напутал, но ен могу понять где..

Добавлено через 1 час 3 минуты
прогресс он не вылетает, но теперь просто не правильно считывает тему предмета, выводит <null> вместо нужных данных

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
#include <stdio.h>                  
#include <math.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
void input2 (FILE *);
void input1 (FILE *);
void print (FILE *);
void app   (FILE *);
void find  (FILE *);
struct zachet 
{
    char name[10];
    char groupe[10];
    int mark[5];
 
} t1;
struct theme
{
        char theme[15];
}t2;
void input1(FILE *tf)
{
    char ch;
    int q;
    tf=fopen("file1.txt","w+");
    system ("cls");
    printf("\n write data \n ");
    for (int i=0;i<5;i++)
    {
        printf("\n write %d theme \n ",i+1);
        scanf("%s",&t2.theme[i]);
        fwrite(&t1,sizeof(t1),1,tf);
    }
    fclose(tf);
}
void input2 (FILE *tf)
{
    char ch;
    int q;
    tf=fopen("file1.txt","rb+");
    system ("cls");
    printf("\n write data \n ");
    fread(&t2,sizeof(t2),1,tf);
    do
    {
        printf("\n Student's name \n");
        scanf("%s",&t1.name);
        printf("\n Write groupe  \n");
        scanf("%s",&t1.groupe);
        printf("\n Write 5 marks \n");
        for (int i=0;i<5;)
        {
            printf("\n theme  -- %s   mark--",t2.theme[i] );
            scanf("%d",&q);
            if ((q<6)&(q>0))  
                {
                    t1.mark[i]=q;
                    i++;
                    fwrite(&t1,sizeof(t1),1,tf);
                }
            else
                printf("\n error \n");
        }   
        fread(&t2,sizeof(t2),1,tf);
        printf("\n Exit? y/n");
        ch=getch();
    }
    while (ch != 'y');
    fclose(tf);
}
void print (FILE *tf)
{
    int i;
    system ("cls");
    tf=fopen("file1.txt","rb");
    i=1;
    fread(&t1,sizeof(t1),1,tf);
    while(!feof(tf))
    {
        printf("\n %d  Name -- %s  groupe -- %s \n",i,t1.name, t1.groupe);
        for (int i1=0;i1<5;i1++)
        {
            printf("%s -- %d mark---%d  ",t2.theme, i1+1,t1.mark[i1]);
        }
        fread(&t1,sizeof(t1),1,tf);
        printf("\n");
    i++;
    }
getch();
}
void app(FILE *tf)
{
    char ch;
    int q;
    tf=fopen ("file1.txt","ab");
    system("cls");
    printf("\n write data \n ");
    do
    {
        printf("\n Student's name\n");
        scanf("%s",&t1.name);
        printf("\n Write groupe \n");
        scanf("%s",&t1.groupe);
        printf("\n Write 5 marks\n");
        for (int i=0;i<5;)
        {
            printf("\n%s --  %d mark--",t2.theme, i+1);
            scanf("%d",&q);
            if ((q<6)&(q>0))  
                {
                    t1.mark[i]=q;
                    i++;
                }
            else
            printf("\n error \n");
        }
        fwrite(&t1,sizeof(t1),1,tf);
        printf("\n Exit? y/n");
        ch=getch();
    }
    while (ch != 'y');
    fclose(tf);
}
void find (FILE *tf)
{
    char c, zach[10];
    long int i;
    tf=fopen("file1.txt","rb+");
    system("cls");
    puts("Student's name");
    gets(zach);
    fread(&t1,sizeof(t1),1,tf);
    while (!feof(tf))
    {
        if (strcmp(t2.theme, zach)==0)
        {
            printf("\n  Name -- %s groupe -- %s ",t1.name, t1.groupe);
            for (int i=0;i<5;i++)
            {
                printf("theme  --  %s    mark -- %d \n",t2.theme[i], t1.mark[i]);
            }
            printf("Edit? y/n");
            c=getch();
            if (c=='y')
            {
                printf("\n Student's name");
                scanf("%s",&t1.name);
                printf("\n Write groupe of the test book");
                scanf("%s",&t1.groupe);
                printf("\n Write 5 marks");
                for (int i=0;i<5;i++)
                {
                    scanf("%d",&t1.mark[i]);
                }
                fwrite(&t1,sizeof(t1),1,tf);
            }
        }
        fread(&t1, sizeof(t1),1,tf);
    }
    fclose(tf);
}
main ()
{
    char c,ch;
    FILE *tf;
    while (1)
    {
        system("cls");
        puts("1 - new file");
        puts("2 - view file");
        puts("3 - add in the file");
        puts("4 - find losers and rewrite");
        puts("0 - exit");
        c=getch();
        switch(c)
        {
            case '1':input1(tf);input2(tf);break;
            case '2':print(tf);break;
            case '3':app(tf);break;
            case '4':find(tf);break;
            case '0':return (0);
            default:puts("error, try again");
        }
        getch();
    }
    return (0);
}
Добавлено через 1 минуту
а не правильно он выводил потому что я указывал не ту структуру... указал верную, теперь сново вылетает..
0
vua72
418 / 417 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
30.01.2014, 12:42 4
Добавлено через 25 минут
У вас каша в коде, попробуйте словами описать, что вы пытаетесь сделать

Добавлено через 31 минуту
можете так сделать структуру
Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <string.h>
// В файле содержатся структуры со сведениями о результатах сессии группы:
// ФИО студента и 5 оценок по 5-ти предметам
 
typedef struct {
    char fam[30];
    char name[20];
    char otch[30];
} fio_t;
 
typedef struct {
    char name[20];
    int rank;
} rank_t;
#define M 5
typedef struct {
  char group [20];  
  fio_t s;
  rank_t r[M];
} stud_t;
 
#define N 3
 
int main(){
    stud_t studs[N];
//    strcpy(studs[0].s.fam, "Ivanov");
//    strcpy(studs[0].s.name, "Ivan");
//    strcpy(studs[0].s.otch,"Petrovich");
//    for (int i=0; i<5;++i){
//        strcpy(studs[0].r[i].name, "Matem");
//        studs[0].r[i].rank=5;
//    }
    for(int i=0; i<N;++i){
        scanf("%20s", studs[i].group);
        scanf("%30s", studs[i].s.fam);
        scanf("%20s", studs[i].s.name);
        scanf("%30s", studs[i].s.otch);
        for (int j=0; j<M;++i){
            scanf("%20s", studs[i].r[j].name);
            scanf("%d", &studs[i].r[j].rank);
        }
    }
    return 0;
}


Добавлено через 4 минуты
Обратите внимание на scanf при вводе строк. У вас ошибки в коде (лишний &).

Добавлено через 3 минуты
Может я усложнил, но идея вам должна быть понятна

Добавлено через 18 минут
а так можно использовать
Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// В файле содержатся структуры со сведениями о результатах сессии группы:
// ФИО студента и 5 оценок по 5-ти предметам
 
typedef struct {
    char fam[30];
    char name[20];
    char otch[30];
} fio_t;
 
typedef struct {
    char name[20];
    int rank;
} rank_t;
#define M 5
typedef struct {
    char group[20];
    fio_t s;
    rank_t r[M];
} stud_t;
 
void new_rec(stud_t *s){
    printf("Vvedite imya: ");
    fgets(s->s.name, 30, stdin);
    // и т.д.
//    for(int i=0; i<N;++i){
//        scanf("%30s", studs[i].s.fam);
//        scanf("%20s", studs[i].s.name);
//        scanf("%30s", studs[i].s.otch);
//        for (int j=0; j<M;++i){
//            scanf("%20s", studs[i].r[j].name);
//            scanf("%d", &studs[i].r[j].rank);
//        }
//    }
}
void input_gr(char *gr, int *num){
    printf ("Vvedite nazv groupy: ");
    fgets(gr, 20, stdin); //
    if(gr[strlen(gr)-1]=='\n')gr[strlen(gr)-1]='\0'; //удаляем перевод строки
    printf ("Vvedite kol-v o studentov v grupe: ");
    scanf("%d", num);
}
 
#define N 3
// таким образом можно писать инфу об одной группе в один файл
int main(){
    int num=0; // число студентов в группе
    char gr_name[20]; //имя группы
    stud_t *st;
    input_gr(gr_name, &num);
    st=(stud_t*)malloc(num*sizeof(stud_t));
    for(int i=0; i<num;++i){
        strcpy(st->group, gr_name);
        new_rec(&st[i]);
    }
    free (st);
    return 0;
}
1
tpogih
0 / 0 / 0
Регистрация: 29.01.2014
Сообщений: 74
30.01.2014, 16:44  [ТС] 5
вроде все логически делал) ну вам виднее, только разбираюсь в си, вот полное задание, может так вам будет видней,
2. Организовать меню: Создание файла, Просмотр файла, Поиск, Выход. В файле содержатся структуры со сведениями о результатах сессии группы: ФИО студента и 5 оценок по 5-ти предметам. Вывести ФИО студентов, получивших оценки «отлично» по предмету «Информатика».
а я пока ваш код осмыслю

Добавлено через 7 минут
а то, что я пытаюсь сделать это при вводе оценок у меня выводится предмет за который я выставляю оценки

Добавлено через 20 минут
вроде бы понял вашу идею, но у вас постоянно заного вводятся предметы, а тут 5 предметов, определенных, которые задаются в самом начале, и их не надо вводить каждый раз
0
30.01.2014, 16:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2014, 16:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Создать текстовый файл с произвольной информацией. Организовать просмотр содержимого файла
создать текстовый файл с произвольной информацией. Организовать просмотр содержимого файла....

Создание и просмотр файла
Вот я создаю файл void sozdanie() { string fName; cout &lt;&lt; &quot;введите имя файла: &quot;;...

Поиск в каталоге нужного файла и создание при его наличии нового файла с тем же именем, но с другим раширением
Нужно сделелать проверку на наличие файла &quot;Пример.т01&quot; в катологе D:\Temp\ и при условии что они...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.