Вы находитесь на странице: 1из 6

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

Федеральное государственное бюджетное образовательное учреждение высшего


профессионального образования
Московский авиационный институт

КУРСОВОЙ ПРОЕКТ
по дисциплине: Вычислительные системы
на тему: Обработка последовательной файловой структуры на языке Си
Задание 6

Выполнил студент
Группы М8О-103Б-20
Аншаков Александр Андреевич
Проверил преподаватель:
_______________________

Москва
2020
Задание
Разработать последовательную структуру данных для представления простейшей базы данных
на файлах в СП Си и выполнить задачу с данными в этой БД. Напечатать список потенциальных
стипендиатов – студентов, у которых одна 3, а все остальные 4 или 5 или все 5 и одна 4.

Оборудование (студента):
Intel Core i5-10300Н ОП 8.00 ГБ, НМД 1 ТБ

Программное обеспечение (студента):


Операционная система семейства linux, наименование Ubuntu, версия 17.2
интерпретатор команд bash

Идея, метод, алгоритм


На вход подается текстовый файл in.txt, в котором записаны фамилии, инициалы, пол и
оценки студентов. Программа создает 2 файла – Base.dat и out.txt, который можно
открыть. После обработки БД, программа выводит на экран таблицу студентов, а ниже -
потенциальных стипендиатов.

Демонстрация работы

РЕАЛИЗАЦИЯ
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{ FILE *fi,*fo; printf("argc=%d\n",argc);
if(argc==1)
{ if((fi=fopen("in.txt","r"))==NULL)
{printf("Cannot input 1");
return 1;}
if((fo=fopen("Base.dat","wb"))==NULL)
{printf("Cannot output");
return 1;}
}
else
if(argc==2)
{ printf("%s\n",argv[1]);
if((fi=fopen(argv[1],"r"))==NULL)
{printf("Cannot input 2");
return 1;}
if((fo=fopen("Base.dat","wb"))==NULL)
{printf("Cannot output"); ;
return 1;}
}
else
{ if((fi=fopen(argv[1],"r"))==NULL)
{printf("Cannot input 3");
return 1;}
if((fo=fopen(argv[2],"wb"))==NULL)
{printf("Cannot output");
return 1;}
}

struct S
{ char sur[20];
char initials[10];
char gender[10];
int group;
int lin_score;
int dm_score;
int mat_score;
int inf_score;
} s,s1;

int l=sizeof(s);
int n=0;

while(!feof(fi))
{

fscanf(fi,"%s %s %s %d %d %d %d %d",s.sur,s.initials,s.gender,&s.group,&s.lin_score,&s.dm_score,&s.mat_score,&s.i
nf_score);
fwrite(&s,sizeof(s), 1,fo);
n++;
}
fclose(fi);
fclose(fo);
if(argc<3)
{ if((fi=fopen("Base.dat","rb"))==NULL)
{printf("Cannot input");
return 1;}
if((fo=fopen("out.txt","w"))==NULL)
{printf("Cannot output");
return 1;}
}
else if(argc==3)
{ if((fi=fopen(argv[2],"rb"))==NULL)
{printf("Cannot input");
return 1;}
if((fo=fopen("out.txt","w"))==NULL)
{printf("Cannot output");
return 1;}
} else
{ if((fi=fopen(argv[2],"rb"))==NULL)
{printf("Cannot input");
return 1;}
if((fo=fopen(argv[3],"w"))==NULL)
{printf("Cannot output");
return 1;}
}

printf("================================================================================
==================================================\n");
printf("| Surname\t | Intitials\t | Gender\t | Group\t | Lin score\t | DM score\t | Mat. score\t | Inf. score\t |\n");

printf("================================================================================
==================================================\n");
fprintf(fo,"All in Base:\n");
while(!feof(fi))
{
s1=s;
fread(&s,l, 1,fi);
if(strcmp(s.sur,s1.sur))
{ fprintf(fo,"Surname=%s\t Initials=%s\t Gender=%s\t Group=%d\t Lin score=%d\t DM score=%d\t Mat.score=%d\t
Inf.score=%d\n",s.sur,s.initials,s.gender,s.group,s.lin_score,s.dm_score,s.mat_score,s.inf_score);
printf("| %s\t | %s\t | %s\t | %d\t | %d\t | %d\t | %d\t | %d\t
|\n",s.sur,s.initials,s.gender,s.group,s.lin_score,s.dm_score,s.mat_score,s.inf_score);
}
}

printf("================================================================================
==================================================\n");
printf("Потенциальный(-ые) стипендиат(-ы):\n");

rewind(fi);
while(!feof(fi))
{
s1=s;
fread(&s,l, 1,fi);
if(strcmp(s.sur,s1.sur))
if(s.lin_score==3) {
if(s.dm_score>=4&&s.mat_score>=4&&s.inf_score>=4) {
fprintf(fo,"%s\n", s.sur);
printf("%s\n", s.sur);
}}
else if(s.dm_score==3) {
if(s.lin_score>=4&&s.mat_score>=4&&s.inf_score>=4) {
fprintf(fo,"%s\n", s.sur);
printf("%s\n", s.sur);
}}
else if(s.mat_score==3) {
if(s.lin_score>=4&&s.dm_score>=4&&s.inf_score>=4) {
fprintf(fo,"%s\n", s.sur);
printf("%s\n", s.sur);
}}
else if(s.inf_score==3) {
if(s.dm_score>=4&&s.mat_score>=4&&s.lin_score>=4) {
fprintf(fo,"%s\n", s.sur);
printf("%s\n", s.sur);
}}
else if(s.lin_score==4) {
if(s.dm_score==5&&s.mat_score==5&&s.inf_score==5) {
fprintf(fo,"%s\n", s.sur);
printf("%s\n", s.sur);
}}
else if(s.dm_score==4) {
if(s.lin_score==5&&s.mat_score==5&&s.inf_score==5) {
fprintf(fo,"%s\n", s.sur);
printf("%s\n", s.sur);
}}
else if(s.mat_score==4) {
if(s.lin_score==5&&s.dm_score==5&&s.inf_score==5) {
fprintf(fo,"%s\n", s.sur);
printf("%s\n", s.sur);
}}
else if(s.inf_score==4) {
if(s.dm_score==5&&s.mat_score==5&&s.lin_score==5) {
fprintf(fo,"%s\n", s.sur);
printf("%s\n", s.sur);
}}
}

return 0;
}
Текстовый файл:
Petrov A.I M 103 5 4 5 3

Sharova F.M F 104 3 5 3 5

Arieva N.A F 104 5 5 5 5

Andreev M.P M 105 5 5 5 4

Perova I.N F 106 4 4 4 4

Miraev A.S M 103 3 5 5 4

Zaycev X.U M 102 3 3 3 3

Ksenova M.K F 103 5 4 5 2

Ayerden Z.A F 106 5 4 3 3

Распечатка протокола
alex@alex-Nitro-AN515-55:~/MAI/KP_6$ gcc kp6.c -o k1
alex@alex-Nitro-AN515-55:~/MAI/KP_6$ ./k1
argc=1
==============================================================================
====================================================
| Surname | Intitials | Gender | Group | Lin score |
DM score | Mat. score | Inf. score |
==============================================================================
====================================================
| Petrov | A.I | M | 103 | 5 | 4
| 5 | 3 |
| Sharova | F.M | F | 104 | 3 | 5
| 3 | 5 |
| Arieva | N.A | F | 104 | 5 | 5
| 5 | 5 |
| Andreev | M.P | M | 105 | 5 | 5
| 5 | 4 |
| Perova | I.N | F | 106 | 4 | 4
| 4 | 4 |
| Miraev | A.S | M | 103 | 3 | 5
| 5 | 4 |
| Zaycev | X.U | M | 102 | 3 | 3
| 3 | 3 |
| Ksenova | M.K | F | 103 | 5 | 4
| 5 | 2 |
| Ayerden | Z.A | F | 106 | 5 | 4
| 3 | 3 |
==============================================================================
====================================================
Потенциальный(-ые) стипендиат(-ы):
Petrov
Andreev
Miraev
alex@alex-Nitro-AN515-55:~/MAI/KP_6$

Выводы
Данная курсовая показалась мне немного похожей на одну из работ первого семестра, где мы
обрабатывали текстовый файл. Выполняя её, я узнал о новых способов обработки файлов и
способах взаимодействия с ними.

Вам также может понравиться