Alx09

Untitled

Mar 2nd, 2020
391
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define natural unsigned short
  5.  
  6. void Vector_bites();
  7. void Rights_admin();
  8.  
  9. int main() {
  10. natural option;
  11. do {
  12. printf("0. Iesire.\n");
  13. printf("1. Vector de biti.\n");
  14. printf("2. Drepturi de utilizator.\n");
  15. printf("Introduce-ti optiunea dorita: "); scanf("%hu", &option);
  16. system("cls");
  17. switch (option)
  18. {
  19. case 0:
  20. printf("Sper ca te ai distrat.\n");
  21. system("pause");
  22. exit(0);
  23. break;
  24. case 1:
  25. Vector_bites();
  26. break;
  27. case 2:
  28. Rights_admin();
  29. break;
  30. default:
  31. printf("A-ti introdus valori gresite\n");
  32. break;
  33. }
  34. } while (1);
  35. }
  36.  
  37. void Read_elem(char *vect){
  38. natural i, x, numberElem;
  39. printf("Introduceti numarul de elemente: "); scanf("%hu", &numberElem);
  40.  
  41. for (i = 0; i < numberElem; i++) {
  42. printf("v[%d] = ", i + 1); scanf("%hu", &x);
  43. vect[x / 8] |= 1 << x % 8;
  44. }
  45. }
  46. void Verif_elem(char *vect) {
  47. natural x;
  48. printf("Introduceti numarul cautat: "); scanf("%hu", &x);
  49.  
  50. if (vect[x / 8] & (1 << x % 8))
  51. printf("Numarul se afla in vector\n\n");
  52. else
  53. printf("Numarul nu se afla in vector\n\n");
  54. }
  55.  
  56. void Vector_bites() {
  57. char vect[126];
  58. natural i, ok;
  59. for (i = 0; i < 125; i++)
  60. vect[i] = 0;
  61. Read_elem(&vect[0]);
  62.  
  63. do {
  64. Verif_elem(vect);
  65. printf("Mai cautati alt numar? 0/1 : "); scanf("%hu", &ok);
  66. } while (ok);
  67. }
  68.  
  69. typedef enum{Read = 1, Write = 2, Delete = 4, Rename = 8, Copy = 16, All = 31}rights;
  70.  
  71. void Add_rights(char *user, rights Right) {
  72. *user |= Right;
  73. }
  74.  
  75. void Remove_rights(char *user, rights Right) {
  76. *user &= ~Right;
  77. }
  78.  
  79. void Show_rights(char user, natural i) {
  80. if (user == 31)
  81. printf("Utilizatorul %hu are drepturi depline.\n", i + 1);
  82. else if (user == 0)
  83. printf("Utilizatorul %hu nu are drepturi asupra acestui fiser.\n", i + 1);
  84. else {
  85. printf("Utilizatorul %hu are drepturile: ", i + 1);
  86. if (user & Read)
  87. printf("Citire, ");
  88. if (user & Write)
  89. printf("Scriere, ");
  90. if (user & Delete)
  91. printf("Stergere, ");
  92. if (user & Rename)
  93. printf("Redenumire, ");
  94. if (user & Copy)
  95. printf("Copiere, ");
  96.  
  97. printf("\b\b. \n");
  98. }
  99.  
  100. }
  101.  
  102. void Rights_admin() {
  103. natural numberUsers, i, option, option2;
  104. char *users;
  105. do {
  106. printf("Introduceti numarul de utilizatori: "); scanf("%hu", &numberUsers);
  107. } while (!numberUsers);
  108. users = (char *)malloc(sizeof(char) * numberUsers);
  109. for (i = 0; i < numberUsers; i++) users[i] = 0;
  110. Add_rights(&users[0], All);
  111. do {
  112.  
  113. printf("\nPrimul utilizator are drepturi depline.\n\n");
  114. printf("0. Introarcere in main.\n");
  115. printf("1. Adaugare de drepturi.\n");
  116. printf("2. Scoatere de drepturi.\n");
  117. printf("3. Afisarare drepturilor utilizatorilor.\n");
  118. printf("Introduceti optiunea dorita: "); scanf("%hu", &option);
  119. system("cls");
  120.  
  121. switch (option)
  122. {
  123. case 1:
  124. printf("Utilizatorul caruia i se adauga: "); scanf("%hu", &i);
  125. i--;
  126. if (!i) {
  127. printf("Primul utilizator nu se poate modifica\n");
  128. continue;
  129. }
  130. printf("\nIntroduceti cifrele corspunzatoare drepturilor dorite!\n");
  131. printf("1. Citire.\n");
  132. printf("2. Scriere.\n");
  133. printf("3. Stergere.\n");
  134. printf("4. Redenumire.\n");
  135. printf("5. Copiere.\n");
  136. printf("6. Toate\n");
  137. printf("Introduceti optiunea dorita: "); scanf("%hu", &option2);
  138. do {
  139. switch (option2 % 10) {
  140. case 1: Add_rights(&users[i], Read);
  141. break;
  142. case 2: Add_rights(&users[i], Write);
  143. break;
  144. case 3: Add_rights(&users[i], Delete);
  145. break;
  146. case 4: Add_rights(&users[i], Rename);
  147. break;
  148. case 5: Add_rights(&users[i], Copy);
  149. break;
  150. default :
  151. break;
  152. }
  153. if (option2 % 10 == 6) {
  154. Add_rights(&users[i], All);
  155. break;
  156. }
  157. option2 /= 10;
  158. } while (option2);
  159. break;
  160. case 2:
  161. printf("Utilizatorul caruia i se scoate: "); scanf("%hu", &i);
  162. i--;
  163. if (!i) {
  164. printf("Primul utilizator nu se poate modifica\n");
  165. continue;
  166. }
  167. printf("\nIntroduceti cifrele corspunzatoare drepturilor dorite!\n");
  168. printf("1. Citire.\n");
  169. printf("2. Scriere.\n");
  170. printf("3. Stergere.\n");
  171. printf("4. Redenumire.\n");
  172. printf("5. Copiere.\n");
  173. printf("6. Toate\n");
  174. printf("Introduceti optiunea dorita: "); scanf("%hu", &option2);
  175. do {
  176. switch (option2 % 10) {
  177. case 1: Remove_rights(&users[i], Read);
  178. break;
  179. case 2: Remove_rights(&users[i], Write);
  180. break;
  181. case 3: Remove_rights(&users[i], Delete);
  182. break;
  183. case 4: Remove_rights(&users[i], Rename);
  184. break;
  185. case 5: Remove_rights(&users[i], Copy);
  186. break;
  187. default:
  188. break;
  189. }
  190. if (option2 % 10 == 6) {
  191. Remove_rights(&users[i], All);
  192. break;
  193. }
  194. option2 /= 10;
  195. } while (option2);
  196. break;
  197. case 3:
  198. for (i = 0; i < numberUsers; i++)
  199. Show_rights(users[i], i);
  200. break;
  201. default:
  202. printf("Date introduse gresit!\n");
  203. break;
  204. }
  205. } while (option);
  206. }
Advertisement
Add Comment
Please, Sign In to add comment