Advertisement
Alx09

Untitled

Mar 9th, 2020
442
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.  
  47. void Verif_elem(char *vect) {
  48. natural x;
  49. printf("Introduceti numarul cautat: "); scanf("%hu", &x);
  50.  
  51. if (vect[x / 8] & (1 << x % 8))
  52. printf("Numarul se afla in vector\n\n");
  53. else
  54. printf("Numarul nu se afla in vector\n\n");
  55. }
  56.  
  57. void Vector_bites() {
  58. char vect[126];
  59. natural i, ok;
  60. for (i = 0; i < 125; i++)
  61. vect[i] = 0;
  62. Read_elem(&vect[0]);
  63.  
  64. do {
  65. Verif_elem(vect);
  66. printf("Mai cautati alt numar? 0/1 : "); scanf("%hu", &ok);
  67. } while (ok);
  68. }
  69.  
  70. typedef enum{Read = 1, Write = 2, Delete = 4, Rename = 8, Copy = 16, All = 31}rights;
  71.  
  72. void Add_rights(char *user, rights Right) {
  73. *user |= Right;
  74. }
  75.  
  76. void Remove_rights(char *user, rights Right) {
  77. *user &= ~Right;
  78. }
  79.  
  80. void Show_rights(char user, natural i) {
  81. if (user == 31)
  82. printf("Utilizatorul %hu are drepturi depline.\n", i + 1);
  83. else if (user == 0)
  84. printf("Utilizatorul %hu nu are drepturi asupra acestui fiser.\n", i + 1);
  85. else {
  86. printf("Utilizatorul %hu are drepturile: ", i + 1);
  87. if (user & Read)
  88. printf("Citire, ");
  89. if (user & Write)
  90. printf("Scriere, ");
  91. if (user & Delete)
  92. printf("Stergere, ");
  93. if (user & Rename)
  94. printf("Redenumire, ");
  95. if (user & Copy)
  96. printf("Copiere, ");
  97.  
  98. printf("\b\b. \n");
  99. }
  100.  
  101. }
  102.  
  103. void Rights_admin() {
  104. natural numberUsers, i, option, option2;
  105. char *users;
  106. do {
  107. printf("Introduceti numarul de utilizatori: "); scanf("%hu", &numberUsers);
  108. } while (!numberUsers);
  109. users = (char *)malloc(sizeof(char) * numberUsers);
  110. for (i = 0; i < numberUsers; i++) users[i] = 0;
  111. Add_rights(&users[0], All);
  112. do {
  113.  
  114. printf("\nPrimul utilizator are drepturi depline.\n\n");
  115. printf("0. Introarcere in main.\n");
  116. printf("1. Adaugare de drepturi.\n");
  117. printf("2. Scoatere de drepturi.\n");
  118. printf("3. Afisarare drepturilor utilizatorilor.\n");
  119. printf("Introduceti optiunea dorita: "); scanf("%hu", &option);
  120. system("cls");
  121.  
  122. switch (option)
  123. {
  124. case 1:
  125. printf("Utilizatorul caruia i se adauga: "); scanf("%hu", &i);
  126. i--;
  127. if (!i) {
  128. printf("\nPrimul utilizator nu se poate modifica.\n\n");
  129. continue;
  130. }
  131. printf("\nIntroduceti cifrele corspunzatoare drepturilor dorite!\n");
  132. printf("1. Citire.\n");
  133. printf("2. Scriere.\n");
  134. printf("3. Stergere.\n");
  135. printf("4. Redenumire.\n");
  136. printf("5. Copiere.\n");
  137. printf("6. Toate.\n");
  138. printf("Introduceti optiunea dorita: "); scanf("%hu", &option2);
  139. do {
  140. switch (option2 % 10) {
  141. case 1: Add_rights(&users[i], Read);
  142. break;
  143. case 2: Add_rights(&users[i], Write);
  144. break;
  145. case 3: Add_rights(&users[i], Delete);
  146. break;
  147. case 4: Add_rights(&users[i], Rename);
  148. break;
  149. case 5: Add_rights(&users[i], Copy);
  150. break;
  151. default :
  152. break;
  153. }
  154. if (option2 % 10 == 6) {
  155. Add_rights(&users[i], All);
  156. break;
  157. }
  158. option2 /= 10;
  159. } while (option2);
  160. break;
  161. case 2:
  162. printf("Utilizatorul caruia i se scoate: "); scanf("%hu", &i);
  163. i--;
  164. if (!i) {
  165. printf("Primul utilizator nu se poate modifica\n");
  166. continue;
  167. }
  168. printf("\nIntroduceti cifrele corspunzatoare drepturilor dorite!\n");
  169. printf("1. Citire.\n");
  170. printf("2. Scriere.\n");
  171. printf("3. Stergere.\n");
  172. printf("4. Redenumire.\n");
  173. printf("5. Copiere.\n");
  174. printf("6. Toate\n");
  175. printf("Introduceti optiunea dorita: "); scanf("%hu", &option2);
  176. do {
  177. switch (option2 % 10) {
  178. case 1: Remove_rights(&users[i], Read);
  179. break;
  180. case 2: Remove_rights(&users[i], Write);
  181. break;
  182. case 3: Remove_rights(&users[i], Delete);
  183. break;
  184. case 4: Remove_rights(&users[i], Rename);
  185. break;
  186. case 5: Remove_rights(&users[i], Copy);
  187. break;
  188. default:
  189. break;
  190. }
  191. if (option2 % 10 == 6) {
  192. Remove_rights(&users[i], All);
  193. break;
  194. }
  195. option2 /= 10;
  196. } while (option2);
  197. break;
  198. case 3:
  199. for (i = 0; i < numberUsers; i++)
  200. Show_rights(users[i], i);
  201. break;
  202. default:
  203. printf("Date introduse gresit!\n");
  204. break;
  205. }
  206. } while (option);
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement