Академический Документы
Профессиональный Документы
Культура Документы
Каразина
Факультет компьютерных наук
Харьков
2019
Условие задания:
Реализовать хранение, вывод, добавление, удаление и поиск студентов из
массива структур лабораторной работы No2 с использованием бинарного
файла. Динамический массив структур использовать для обмена
информацией между файлом и программой.
Задание:
Исходный код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char surname[20];
char name[20];
char patronymic[20];
int dd;
int mm;
int yyyy;
int srus;
}stu;
int counter = 0;
int main(){
int choice,flag=0;
stu *students = NULL;
FILE *pF;
students = add_students_from_file_to_array(students,pF);
while(1){
printf("1.Добавить студента\n2.Поиск студента\n3.Удалить студента\n"
"4.Печать группы\n0.Выход из программы\n");
scanf("%d", &choice);
switch(choice){
case 1:
students = add_student(students);
add_student_in_file(students,pF);
sort_students(students);
break;
case 2:
if(counter == 0){
printf("Вы не добавили ни одного студента!\n");
break;
}
system("cls");
while(1){
printf("1.Поиск студента по фамилии\n2.Поиск
студента по диапазону успеваемости\n3.Поиск студента по дате
рождения\n0.Вернуться в главное меню\n");
scanf("%d", &choice);
switch(choice){
case 1:
search_student_by_surname(students);
break;
case 2:
search_student_by_srus(students);
break;
case 3:
search_student_by_data_of_birth(students);
break;
case 0:
flag=1;
break;
}
if(flag==1){
system("cls");
break;
}
}
break;
case 3:
if(counter != 0){
students = del_student(students);
}else{
printf("Вы не добавили ни одного студента!\n");
}
break;
case 4:
if(counter != 0){
print_students(students);
}else{
printf("Вы не добавили ни одного студента!\n");
}
break;
case 0:
return 0;
}
}
return 0;
}
int i;
char buf[20],sym,dd[5],mm[5],yyyy[10],srus[5];
pF = fopen("students.txt","r");
while(1){
for(i=0 ; ; i++){
buf[i] = fgetc(pF);
if(buf[i]==EOF){
if(feof(pF) != 0){
fclose(pF);
return students;
}else{
printf("Ошибка чтения!\n");
fclose(pF);
return students;
}
}
if(buf[i] == ' ' || buf[i] == '\t'){
break;
}
}
students = (stu*)realloc(students, (counter+1)*sizeof(stu));
buf[i] = 0;
for(i=0 ; i<strlen(buf) ; i++){
students[counter].surname[i] = buf[i];
}
while(1){
sym = fgetc(pF);
if(sym != ' ' && sym != '\t'){
break;
}
}
students[counter].name[0] = sym;
for(i=1 ; ; i++){
sym = fgetc(pF);
if(sym == ' ' || sym == '\t'){
break;
}else{
students[counter].name[i] = sym;
}
}
while(1){
sym = fgetc(pF);
if(sym != ' ' && sym != '\t'){
break;
}
}
students[counter].patronymic[0] = sym;
for(i=1 ; ; i++){
sym = fgetc(pF);
if(sym == ' ' || sym == '\t'){
break;
}else{
students[counter].patronymic[i] = sym;
}
}
while(1){
sym = fgetc(pF);
if(sym != ' ' && sym != '\t'){
break;
}
}
dd[0] = sym;
for(i=1 ; ; i++){
sym = fgetc(pF);
if(sym == ' ' || sym == '\t' || sym == '.'){
break;
}else{
dd[i] = sym;
}
}
students[counter].dd = atoi(dd);
while(1){
sym = fgetc(pF);
if(sym != ' ' && sym != '\t' && sym != '.'){
break;
}
}
mm[0] = sym;
for(i=1 ; ; i++){
sym = fgetc(pF);
if(sym == ' ' || sym == '\t' || sym == '.'){
break;
}else{
mm[i] = sym;
}
}
students[counter].mm = atoi(mm);
while(1){
sym = fgetc(pF);
if(sym != ' ' && sym != '\t' && sym != '.'){
break;
}
}
yyyy[0] = sym;
for(i=1 ; ; i++){
sym = fgetc(pF);
if(sym == ' ' || sym == '\t' || sym == '.'){
break;
}else{
yyyy[i] = sym;
}
}
students[counter].yyyy = atoi(yyyy);
while(1){
sym = fgetc(pF);
if(sym != ' ' && sym != '\t' && sym != '.'){
break;
}
}
srus[0] = sym;
for(i=1 ; ; i++){
sym = fgetc(pF);
if(sym == ' ' || sym == '\t' || sym == '\n' ||sym == EOF){
break;
}else{
srus[i] = sym;
}
}
students[counter].srus = atoi(srus);
counter++;
memset(buf,0,sizeof(buf)); //Очищаем память из массивов char для
дальнейшего использования
memset(dd,0,sizeof(dd));
memset(mm,0,sizeof(mm));
memset(yyyy,0,sizeof(yyyy));
memset(srus, 0, sizeof(srus));
}
fclose(pF);
return students;
}
char S[20],sredusp[5];
char *pS = S;
int i,flag=0;
while(1){
printf("Введите дату рождения студента(дд.мм.гггг): ");
scanf("%s", &S);
for(i=0 ; i<strlen(S) ; i++){
if(S[i] == '.'){
flag++;
}
}
if(flag==2){
break;
}else{
printf("Проверьте правильность ввода разделяющих точек!\n");
flag=0;
}
}
students[counter].dd = atoi(pS);
for(i=0 ; S[i]!='.' ; i++, pS++);
i++;
pS++;
students[counter].mm = atoi(pS);
for(; S[i]!='.' ; i++, pS++);
i++;
pS++;
students[counter].yyyy = atoi(pS);
while(1){
printf("Введите среднюю успеваемость студента: ");
scanf("%s", &sredusp);
students[counter].srus = atoi(sredusp);
if(students[counter].srus<=100 && students[counter].srus>=0){
break;
}else{
printf("Проверьте правильность ввода средней
успеваемости!\n");
}
}
return students;
}
char buf[10];
fputs(students[counter].surname,pF);
fputc('\t',pF);
fputs(students[counter].name,pF);
fputc('\t',pF);
fputs(students[counter].patronymic,pF);
fputc('\t',pF);
fputs(itoa(students[counter].dd,buf,10),pF);
fputc('.',pF);
fputs(itoa(students[counter].mm,buf,10),pF);
fputc('.',pF);
fputs(itoa(students[counter].yyyy,buf,10),pF);
fputc('\t',pF);
fputc('\t',pF);
fputs(itoa(students[counter].srus,buf,10),pF);
fputc('\n',pF);
fclose(pF);
counter++;
}
void sort_students(stu *students){
int i,j;
int i,proverka=0;
char sur[20];
if(proverka == 0){
printf("Студенты с такой фамилией не найдены!\n");
}
}
void search_student_by_srus(stu *students){
int ot,doo,i,proverka=0;
printf("Введите диапазон успеваемости студентов, которых хотите найти\n");
printf("От: ");
scanf("%d", &ot);
printf("До: ");
scanf("%d", &doo);
if(proverka == 0){
printf("Студенты с такой средней успеваемостью не найдены!\n");
}
}
while(1){
printf("Введите дату рождения студента(дд.мм): ");
scanf("%s", &S);
for(i=0 ; i<strlen(S) ; i++){
if(S[i] == '.'){
flag++;
}
}
if(flag==1){
break;
}else{
printf("Проверьте правильность ввода разделяющих точек!\n");
flag=0;
}
}
dd = atoi(pS);
for(i=0 ; S[i]!='.' ; i++, pS++);
i++;
pS++;
mm = atoi(pS);
if(proverka == 0){
printf("Студенты с такой датой рождения не найдены!\n");
}
}
int i,choice;
while(1){
printf("Введите номер студента которого хотите удалить: ");
scanf("%d", &choice);
if(choice>=0 && choice<=counter-1){
break;
}else{
printf("Таких студентов нет!\n");
return students;
}
}
counter--;
return students;
}