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

Программа для начисления стипендий студентам

10.06.2018, 14:35. Просмотров 178. Ответов 1
Метки нет (Все метки)

Условие:Создать файл, содержащий сведения о результатах сдачи сессии студентами II курса специальности "Программирование для ЭВМ и автоматизированных систем". Структура записи: индекс группы, фамилия студента, оценки по пяти экзаменам, признак участия в общественных мероприятиях: 1 - активное участие, 0 - не участвовал. Написать программу, которая насчитывает стипендию студентам группы X. Студент, получивший все "5" и активно участвовал в общественной работе зачисляется на повышенную стипендию (доплата 50%), неактивно принимал участие - доплата 25%. Студенты, получившие "4" и "5" зачисляются на обычную стипендию. Студент, получивший одну оценку «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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct Student {
    int groupID;
    char FirstName[10];
    int marks[5];
    char activity[3];
};
 
void writeFile(char *namePath, struct Student person)
{
    FILE *out;
    if (out = fopen(namePath, "a+")) {
        fprintf(out, "%d %s ", person.groupID, person.FirstName);
        for (int i = 0; i < 5; i++)
            fprintf(out, "%d ", person.marks[i]);
        fprintf(out, "%s\n", person.activity);
    }
}
 
int main()
{
    struct Student Stud;
    int i = 0;
 
    Stud.groupID = 3;
    strcpy(Stud.FirstName, "Pupkin");
    strcpy(Stud.activity, "yes");
    for (i = 0; i < 5; i++)
        Stud.marks[i] = rand() % 4 + 1;
 
 
    writeFile("output.txt", Stud);
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2018, 14:35
Ответы с готовыми решениями:

Ведомость для начисления оплаты труда
необходимо обеспечить выполнение следующих действий: ввод информации в файл;...

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

Вычислить средние баллы по студентам и по каждому предмету
Здравствуйте товарищи! Есть вот такая задача: Ввести фамилии N студентов и...

Сформировать динамическую структуру, содержащую данные по студентам
Сформировать динамическую структуру вид структуры , содержащую данные по...

База по начислению стипендий студентам
Всем привет, у меня задание создать БД для начисление стипендий студентам....

1
stake-k26
440 / 354 / 287
Регистрация: 25.04.2016
Сообщений: 1,051
13.06.2018, 19:10 2
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* ****************************************************************************
 * Создать файл, содержащий сведения о результатах сдачи сессии студентами II
 * курса специальности "Программирование для ЭВМ и автоматизированных систем".
 * Структура записи: индекс группы, фамилия студента, оценки по пяти экзаменам,
 * признак участия в общественных мероприятиях:
 *      1 - активное участие,
 *      0 - не участвовал.
 * Написать программу, которая насчитывает стипендию студентам группы X.
 * Студент, получивший все "5", и активно участвовал в общественной работе
 * зачисляется на повышенную стипендию (доплата 50%), неактивно принимал
 * участие - доплата 25%. Студенты, получившие "4" и "5" зачисляются на обычную
 * стипендию. Студент, получивший одну оценку «3», но активно занимался
 * общественной работой, также зачисляется на стипендию, в противном случае
 * зачисления не выполняется.
 * ***************************************************************************/
typedef struct {
    int     groupID;
    char    FirstName[10];
    int     marks[5];
    int     activity;
} student;
 
int count (const char *);
void write_data(const char *, student *, int);
 
int main (void) {
    const char * filename = "students.txt";
    /* узнаем сколько в файле записей о студентах */
    int n = count(filename);
    if (n < 0) {
        printf("ERROR! File [%s] not found!\n", filename);
        exit(EXIT_FAILURE);
    }
    if (!n) {
        printf("ERROR! The data is corrupted!\n");
        exit(EXIT_FAILURE);
    }
    printf("Read %d records of students from the file [%s].\n\n", n, filename);
 
    /* создаем массив данных */
    student * a = NULL;
    if ((a = (student *) malloc(sizeof(student)*n)) == NULL) {
        printf("ERROR! Can't allocate the memory!\n");
        exit(EXIT_FAILURE);
    }
 
    /* записываем данные в массив */
    write_data(filename, a, n);
 
    /* ************************************************************************
     * Теперь у нас есть массив, в котором записаны данные всех наших студентов
     * Мы можем обращаться к элементам массива как: a[1].groupID или
     * a[1].activity т.е. мы указываем номер элемента массива и обращаемся
     * к полю структуры, которая записана в этот элемент. Для прмера выведем
     * данные первых трех студентов на экран:
     *********************************************************************** */
    int i, k;
    for (i=0; i<3; i++) {
        printf("%d: %s\n", a[i].groupID, a[i].FirstName);
        printf("marks:");
        for (k=0; k<5; k++)
            printf("%2d", a[i].marks[k]);
        printf("\nActivity: %d\n\n", a[i].activity);
    }
 
    /* ********************************************************************
     * Иными словами нам осталось получить с клавиатуры id нужной группы,
     * затем пробежаться по всему массиву и найти те элементы массива,
     * у которых (a[i].groupID == id)
     * затем для каждого такого элемента провести проверку: сколько у него
     * троек в a[i].marks[] и какова его a[i].activity и сделать вывод
     * доступна ли ему стипендия... например, узнаем группу и выведем
     * фамилии всех студентов этой группы:
     ******************************************************************* */
    int id;
    printf("Input group ID: ");     // для теста 120621, выведет 5 фамилий
    scanf("%d", &id);
 
    for (i=0; i<n; i++)
        if (a[i].groupID == id)
            printf("  %s\n", a[i].FirstName);
 
    /* по аналогии найдите всех студентов и решите давать ли им стипендию */
    /* попробуйте реализовать эту часть кода самостоятельно. успехов :) */
 
    /* освобождаем память и выходим из программы */
    free(a);
    exit(EXIT_SUCCESS);
}
// ------------------------------------------------------------
// ---------------- сколько в файле студентов -----------------
int count (const char * filename) {
    FILE *fp;
    /* открываем файл для чтения */
    if ((fp = fopen(filename, "r")) == NULL) return -1;
    char str[80];
    int i, n = 80, count = 0;
    while (!feof(fp)) {
        for (i=0; i<n; i++) str[i] = 0;
        fgets(str, n, fp);
        count++;
    }
    fclose(fp);
    return count/8;
}
// ------------------------------------------------------------
// ----------- записываем данные из файла в массив ------------
void write_data(const char * filename, student * a, int n) {
    FILE *fp;
    int c, i, k, p, z=80;
    char str[80];
    fp = fopen(filename, "r");      // открываем файл
    for (i=0; i<n; i++)
    {
        // номер группы:
        for (k=0; k<z; k++) str[k] = 0;
        fgets(str, z, fp);
        for (c=k=0; str[k] && str[k]!='\n'; k++)
            c = c*10 + (int)(str[k]-'0');
        a[i].groupID = c;
        // фамилия:
        for (k=0; k<z; k++) str[k] = 0;
        fgets(str, z, fp);
        for (k=0; k<z; k++)
            if (str[k] == '\n') str[k] = 0;
        strncpy(a[i].FirstName, str, 10);
        // оценки:
        for (p=0; p<5; p++)
        {
            for (k=0; k<z; k++) str[k] = 0;
            fgets(str, z, fp);
            a[i].marks[p] = (int)(str[0]-'0');
        }
        // активность:
        for (k=0; k<z; k++) str[k] = 0;
        fgets(str, z, fp);
        a[i].activity = (int)(str[0]-'0');
    }
    fclose(fp);     // закрываем файл
}
1
Миниатюры
Программа для начисления стипендий студентам  
Вложения
Тип файла: txt students.txt (219 байт, 2 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2018, 19:10

Разработать алгоритм начисления стипендии студентам
Разработать алгоритм начисления стипендии студентам. Стипендия назначается тем,...

Программа для анализа массива данных по выпускаемым студентам
Здравствуйте. Я делаю диплом (тема диплома: &quot;Программа для анализа массива...

Результат начисления выпадает из расчетной базы другого начисления
Всем доброго времени суток! Расчетная часть пока еще остается для меня...


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

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

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