КУРСОВОЙ ПРОЕКТ
по дисциплине: Вычислительные системы
на тему: Обработка последовательной файловой структуры на языке Си
Задание 6
Выполнил студент
Группы М8О-103Б-20
Аншаков Александр Андреевич
Проверил преподаватель:
_______________________
Москва
2020
Задание
Разработать последовательную структуру данных для представления простейшей базы данных
на файлах в СП Си и выполнить задачу с данными в этой БД. Напечатать список потенциальных
стипендиатов – студентов, у которых одна 3, а все остальные 4 или 5 или все 5 и одна 4.
Оборудование (студента):
Intel Core i5-10300Н ОП 8.00 ГБ, НМД 1 ТБ
Демонстрация работы
РЕАЛИЗАЦИЯ
#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
Распечатка протокола
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$
Выводы
Данная курсовая показалась мне немного похожей на одну из работ первого семестра, где мы
обрабатывали текстовый файл. Выполняя её, я узнал о новых способов обработки файлов и
способах взаимодействия с ними.