
Lektsii_Tema_99_Zaklyuchenie_Primer_razrabotki.ppt
- Количество слайдов: 18
Информационные технологии Заключение. Пример разработки программы Шевченко А. В. Заключение. Пример разработки программы 1
Информационные технологии Постановка задачи Разработать программу учета успеваемости студентов по некоторой дисциплине. Программа должна подерживать следующие данные о студентах: личные данные, принадлежность к группе, возраст, успеваемость. Данные должны читаться из файла и сохраняться в файле. В программе должны поддерживаться функции вывода списка студентов с их данными; внесение данных по успеваемости; различные отчеты, например средняя успеваемость по заданной группе. Шевченко А. В. Заключение. Пример разработки программы 2
Информационные технологии Анализ данных. Определение функций программы Номер Фамилия, имя, отчество Группа Возраст 100101 Иванов Петр Сидорович 1001 ? 100102 Петров Сидор Иванович 1001 ? 100201 Сидоров Иван Петрович 1002 Оценка ? Чтение данных из файла Как определить возраст? Запись данных в файл Вывод списка студентов Средняя успеваемость по группе Шевченко А. В. Заключение. Пример разработки программы Какие значения имеет оценка? 3
Информационные технологии Определение хранимых данных Номер Фамилия, имя, отчество Группа Дата рожд. 100101 Иванов Петр Сидорович 1001 11. 01. 1991 100102 Петров Сидор Иванович 1001 22. 02. 1991 100201 Сидоров Иван Петрович 1002 05. 10. 1992 Как определить возраст? Какие значения имеет оценка? Шевченко А. В. Оценка Хранить дату рождения. Возраст вычислять на текущую дату {неизвестна, плохо, удовлетворительно, хорошо, отлично} Заключение. Пример разработки программы 4
Информационные технологии Определение структуры данных Номер Фамилия, имя, отчество Группа Дата рожд. 100101 Иванов Петр Сидорович 1001 11. 01. 1991 . . . Структура для даты Оценка Перечислимый тип для оценки typedef enum typedef struct { { UNKNOWN = 0, unsigned char day; BAD = 2, unsigned char month; SATISFACTLY, unsigned short year; } DAT; WELL, EXCELLENT } NOTE; Шевченко А. В. Заключение. Пример разработки программы 5
Информационные технологии Определение структуры данных Номер Фамилия, имя, отчество Группа Дата рожд. 100101 Иванов Петр Сидорович 1001 11. 01. 1991 . . . Основная структура данных typedef struct { unsigned long num; char name[32]; unsigned short group; DAT bday; NOTE note; } STUDENT; Шевченко А. В. Заключение. Пример разработки программы Оценка Файл learning. h typedef struct { unsigned char day; unsigned char month; unsigned short year; } DAT; typedef enum { UNKNOWN = 0, BAD = 2, SATISFACTLY, GOOD, EXCELLENT } NOTE; 6
Информационные технологии Файл заголовка learning. h typedef struct { { unsigned char day; unsigned long num; unsigned char month; char name[32]; unsigned short group; DAT bday; NOTE note; unsigned short year; } DAT; // структура даты typedef enum } STUDENT; // структура для списка студентов { UNKNOWN = 0, float age(STUDENT* S); BAD = 2, bool Read. Data(); SATISFACTLY, bool Save. Data(); GOOD, void Print. List(); EXCELLENT bool Set. Note(long Num, NOTE Note); float Med. Note(short Group); } NOTE; // тип для оценки Шевченко А. В. Заключение. Пример разработки программы 7
Информационные технологии Реализация данных. Статический массив с инициализацией Текст программы - файл learning. cpp STUDENT studs[] = { {100101, "Иванов Петр Сидорович", 1001, {11, 01, 1991}, 0}, {100102, "Петров Сидор Иванович", 1001, {22, 02, 1991}, 0}, {100201, "Сидоров Иван Петрович", 1002, {05, 10, 1992}, 0} }; int nstud = sizeof(studs)/sizeof(STUDENT); Шевченко А. В. Заключение. Пример разработки программы 8
Информационные технологии Запись в файл. Вариант 1 - текстовый файл данных #include <stdio. h> bool Save. Data() { FILE* out = fopen("learning. txt", "wt"); if(out == NULL) { printf("Ошибка при открытии файлаn"); return(false); } for(int i = 0; i < nstud; i++) fprintf(out, "%6 d|%-31 s|%4 d|%02 d. %4 d|%1 dn", studs[i]. num, studs[i]. name, studs[i]. group, studs[i]. bday. day, studs[i]. bday. month, studs[i]. bday. year, studs[i]. note); fclose(out); } Шевченко А. В. Заключение. Пример разработки программы 9
Информационные технологии Содержимое текстового файла данных 100101|Иванов Петр Сидорович 100102|Петров Сидор Иванович 100201|Сидоров Иван Петрович Шевченко А. В. Заключение. Пример разработки программы |1001|11. 01. 1991|0 |1001|22. 02. 1991|0 |1002|05. 10. 1992|0 10
Информационные технологии Запись в файл. Вариант 2 - двоичный файл данных #include <stdio. h> bool Save. Data() { FILE* out = fopen("learning. dat", "wb"); if(out == NULL) { printf("Ошибка при открытии файлаn"); return(false); } fwrite(studs, sizeof(STUDENT), nstud, out); fclose(out); } Шевченко А. В. Заключение. Пример разработки программы 11
Информационные технологии Чтение из файла. Вариант 1 - текстовый файл данных STUDENT studs[100]; int nstud; bool Read. Data() { FILE* inp = fopen("learning. txt", "rt"); . . . // проверка ошибки при открытии файла; nstud = 0; while(!feof(inp)) { STUDENT* S = &studs[nstud++]; memset(S, 0, sizeof(STUDENT)); fscanf(inp, "%d|%31 c|%d|%dn", &S->num, S->name, &S->group, &S->bday. day, &S->bday. month, &S->bday. year, &S->note); } fclose(inp); } Шевченко А. В. Заключение. Пример разработки программы 12
Информационные технологии Чтение из файла. Вариант 2 - двоичный файл данных STUDENT* studs; int nstud; bool Read. Data() { FILE* inp = fopen("learning. dat", "rb"); . . . // проверка ошибки при открытии файла; fseek(inp, 0, SEEK_END); nstud = ftell(inp)/sizeof(STUDENT); studs = (STUDENT*)malloc(sizeof(STUDENT)*nstud); fseek(inp, 0, SEEK_SET); fread(studs, sizeof(STUDENT), nstud, inp); fclose(inp); } Шевченко А. В. Заключение. Пример разработки программы 13
Информационные технологии Реализация функции вычисления возраста float age(STUDENT* S) { DAT today; today. day = 22; today. month = 5; today. year = 2010; float diff_y = S->bday. year-today. year; float diff_m = S->bday. month-today. month; float diff_d = S->bday. day-today. day; return(diff_y+diff_m/12+diff_d/365); } Шевченко А. В. Заключение. Пример разработки программы 14
Информационные технологии Реализация функции вывода списка void Print. List() { printf(" ***** Список студентов *****n"); printf("---------------------------n"); printf("| Фамилия, имя, отчество | Возраст | Группа |n"); printf("---------------------------n"); for(int i = 0; i < nstud; i++) { STUDENT* S = &studs[i]; printf("| %-30. 30 s | %5. 1 f S->group); } | %4 d |n", S->name, age(S), printf("---------------------------n"); } Шевченко А. В. Заключение. Пример разработки программы 15
Информационные технологии Результат вывода списка ***** Список студентов ***** --------------------------| Фамилия, имя, отчество | Возраст | Группа | --------------------------| Иванов Петр Сидорович | 19. 4 | 1001 | | Петров Сидор Иванович | 19. 3 | 1001 | | Сидоров Иван Петрович | 17. 6 | 1002 | --------------------------- Шевченко А. В. Заключение. Пример разработки программы 16
Информационные технологии Реализация функции ввода оценки bool Set. Note(long Num, NOTE Note) { for(int i = 0; i < nstud; i++) if(studs[i]. num == Num) { studs[i]. note = Note; return(true); } return(false); } Set. Note(100102, WELL); Set. Note(100201, EXCELLENT); Шевченко А. В. Заключение. Пример разработки программы 17
Информационные технологии Реализация функции средней оценки по группе float Med. Note(short Group) { int n = 0; int s = 0; for(int i = 0; i < nstud; i++) if(studs[i]. group == Group and studs[i]. note != UNKNOWN) { s += studs[i]. note; n++; } return(n ? (float)s/(float)n : 0); } Шевченко А. В. Заключение. Пример разработки программы 18
Lektsii_Tema_99_Zaklyuchenie_Primer_razrabotki.ppt