Advertisement
193030

Kursova 2 Programirane 2

Apr 21st, 2020
380
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.89 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7.  
  8.  
  9. int k1, k2, k3 = 0; // броячи, дали е празен файла/списъка
  10.  
  11. struct MASHINA{ // Тип с данните за една машина
  12.    char imeMashina[30];
  13.    int cenaNaZakupuvane;
  14.    int godinaNaZakupuvane;
  15.    char firmaProizvoditel[30];
  16. } mashina;
  17.  
  18. FILE *fl;
  19. char imefl[30];
  20. char firmaProizvoditelInput[30];
  21.  
  22. time_t theTime = time(NULL);
  23. struct tm *aTime = localtime(&theTime);
  24.  
  25. //функция за въвеждане данните за едно лице
  26. void readMashina(MASHINA *mach){
  27.  printf("Въведете името на машината: \n", "");
  28.  scanf(" %30s", mach->imeMashina);
  29.  printf("Въведете цена на закупуване \n","");
  30.  while(scanf("%d",&mach->cenaNaZakupuvane) <= 0){
  31.          scanf("%*s");
  32.          printf("Моля, въведете цяло число.\n");
  33.  }
  34.  printf("Въведете година на закупуване \n", "");
  35.   while (scanf("%d", &mach->godinaNaZakupuvane) <= 0){
  36.          scanf("%*s");
  37.          printf("Моля, въведете цяло число.\n");
  38.  }
  39.  printf("Въведете фирма производител: \n", "");
  40.  scanf("%30s", mach->firmaProizvoditel);
  41.  
  42. }
  43.  
  44. int getCurrentYear()
  45. {
  46.     int year = aTime->tm_year + 1900; // Year is # years since 1900
  47.     return year;
  48. }
  49.  
  50. //Функция за извеждане на данните на всички машини
  51. void writeMashina(MASHINA ms){
  52.  
  53.         printf("Име на машината: %s | Фирма производител: %s | Цена на закупуване: %d | година на закупуване: %d \n",
  54.         ms.imeMashina,ms.firmaProizvoditel, ms.cenaNaZakupuvane, ms.godinaNaZakupuvane);
  55.         if(ms.imeMashina[0]!=0)
  56.         {
  57.             k1++;
  58.         }
  59.  
  60. }
  61. //Фукнция за извждане на данните за машини над 100 000 лева, закупени през последните 5 години
  62. void writeMashinaOver(MASHINA ms){
  63.     if((ms.cenaNaZakupuvane >100000)&& ((ms.godinaNaZakupuvane+5) >getCurrentYear()))
  64.     {
  65.         printf("Име на машината: %s | Фирма производител: %s | Цена на закупуване: %d \n",
  66.         ms.imeMashina,ms.firmaProizvoditel, ms.cenaNaZakupuvane);
  67.         k2++;
  68.     }
  69.  
  70. }
  71.  
  72. //Фукнция за извеждане на данните за посочена във инпута фирма
  73. void writeMashinaFirma(MASHINA ms)
  74. {
  75.  
  76.     if(strcmp(ms.firmaProizvoditel, firmaProizvoditelInput)==0)
  77.     {
  78.         printf("Име: %-21s Фирма производител: %s | Цена на закупуване: %d | Година на закупуване %d \n`",
  79.                ms.imeMashina,ms.firmaProizvoditel, ms.cenaNaZakupuvane, ms.godinaNaZakupuvane);
  80.                k3++;
  81.  
  82.     }
  83. }
  84.  
  85. int exist(char *ime){
  86.  FILE *f = fopen(ime,"r");fclose(f);
  87.  return f!=NULL;
  88. }
  89. //функция за създаване на празен файл}
  90. void szdPrz(){
  91. char ch;
  92.  if (exist(imefl)) {
  93.  printf("Файлът е създаден! \n");
  94.  printf("Да го презапиша ли? \n");
  95.  ch=getchar();
  96.  if (ch == 'n') return;
  97.  }
  98.  fl=fopen(imefl,"w");
  99.  fclose(fl);
  100.  printf("\n Файлът е създаден.\n");
  101. }
  102.  
  103. //функция за добавяне на компоненти към файла
  104. void dobaviane(){
  105.  char ch;
  106.  char charChek;
  107.  if (!exist(imefl)) {
  108.  printf("Файлът не е създаден!\n");return;
  109.  }
  110.  fl=fopen(imefl,"a+b");
  111.  do{
  112.  readMashina(&mashina);
  113.  fwrite(&mashina,sizeof(mashina),1,fl);
  114.  printf("Ще продължите ли въвеждането(n за край)? \n");
  115.  scanf(" %c", &charChek);
  116.  }while (charChek != 'n');
  117.  fclose(fl);
  118. }
  119.  
  120.  
  121. void obSpis(){
  122.  int k;
  123.  if (!exist(imefl)) {
  124.  
  125.  printf("Файлът е създаден!\n");
  126.  return;
  127.  }
  128.  fl=fopen(imefl,"rb"); k=0;
  129.  fread(&mashina,sizeof(mashina),1,fl);
  130.  k1 = 0;
  131.  while (!feof(fl)){
  132.  //k++;
  133.  writeMashina(mashina);
  134.  fread(&mashina,sizeof(mashina),1,fl);
  135.  }
  136.  //if (k1==0) printf("Failyt e prazen\n");
  137.  fclose(fl);
  138. }
  139.  
  140.  
  141. void obSpisOver(){
  142.  if (!exist(imefl)) {
  143.  
  144.  printf("Файлът е създаден!\n");
  145.  return;
  146.  }
  147.  fl=fopen(imefl,"rb"); k2=0;
  148.  fread(&mashina,sizeof(mashina),1,fl);
  149.  while (!feof(fl)){
  150.  //k2++;
  151.  writeMashinaOver(mashina);
  152.  fread(&mashina,sizeof(mashina),1,fl);
  153.  }
  154.  if (k2==0) printf("Списъкът е празен, няма машини на стойност над 100 000 лева, закупени през последните 5 години.\n");
  155.  fclose(fl);
  156. }
  157.  
  158. void obSpisInput(){
  159.  printf("Въведете името на фирмата производител, чиито машини искате да видите: ", "");
  160.  scanf("%30s", firmaProizvoditelInput);
  161.  if (!exist(imefl)) {
  162.  
  163.  printf("Файлът не е създаден!\n");
  164.  return;
  165.  }
  166.  fl=fopen(imefl,"rb"); k3=0;
  167.  fread(&mashina,sizeof(mashina),1,fl);
  168.  while (!feof(fl)){
  169.  //k2++;
  170.  writeMashinaFirma(mashina);
  171.  fread(&mashina,sizeof(mashina),1,fl);
  172.  }
  173.  if (k3==0) printf("Списъкът е празен, няма закупени машини от тази фирма. \n");
  174.  fclose(fl);
  175. }
  176.  
  177.  
  178.  
  179. void iztrivane(){
  180.  FILE *delFl; //Помощен файл за изтриване
  181.  char imeMash[30];
  182.  if (!exist(imefl)) {
  183.  printf("Файлът не е създаден!\n");return;
  184.  }
  185.  printf("Въведете име на машината: ");gets(imeMash);
  186.  fl=fopen(imefl,"rb");delFl=fopen("Del","wb");
  187.  fread(&mashina,sizeof(mashina),1,fl);
  188.  while (!feof(fl)){
  189.  if (strcmp(mashina.imeMashina,imeMash)!=0)
  190.  fwrite(&mashina,sizeof(mashina),1,delFl);
  191.  else printf("Данни за машина %s са изтрити.\n",imeMash);
  192.  fread(&mashina,sizeof(mashina),1,fl);
  193.  }
  194.  fclose(fl); fclose(delFl);
  195.  remove(imefl); rename("Del",imefl);
  196. }
  197.  
  198.  
  199. int main() {
  200. int c;
  201.  
  202.  setlocale(LC_ALL, "Bulgarian");
  203.  printf("Име на файл: ");gets(imefl);
  204.  do {
  205.  printf("Меню операциите:\n","");
  206.  printf("%26s1. Създаване на нов файл\n","");
  207.  printf("%26s2. Добавяне на информация за машина \n","");
  208.  printf("%26s3. Изтриване на компонент\n","");
  209.  printf("%26s4. Извеждане на машините произведени от посочена фирма \n","");
  210.  printf("%26s5. Списък на всички машини\n","");
  211.  printf("%26s6. Списък на всички машини над 100 000 лева, закупени през последните 5 години \n");
  212.  printf("%20s Посочете 0 за край: ","");
  213.  scanf("%d",&c);getchar();
  214.  switch (c){
  215.  case 1:szdPrz();break;
  216.  case 2:dobaviane();break;
  217.  case 3:iztrivane();break;
  218.  case 4:obSpisInput(); break;
  219.  case 5:obSpis(); break;
  220.  case 6:obSpisOver(); break;
  221.  }
  222.  }while (c!=0);
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement