Advertisement
Guest User

Untitled

a guest
Jan 11th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.11 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <locale.h>
  3. #include <stdio.h>
  4. #include <windows.h>
  5. #include <math.h>
  6. #include <stdlib.h>
  7. #include <ctype.h>
  8. #include <string.h>
  9. #include <time.h>
  10. # define NUM_COMPUTADORES 4
  11.  
  12. using namespace std;
  13.  
  14.  
  15. /* Estrutura da data */
  16. typedef struct data {
  17. int ano;
  18. int mes;
  19. int dia;
  20. int hora;
  21. int min;
  22. int segundo;
  23. } DATA;
  24.  
  25. /* EStrutura dos utilizadores */
  26. typedef struct utilizadores
  27. {
  28. int codigoUtilizador;
  29. char nome[100];
  30. char morada[150];
  31. char contacto[10];
  32. char dataRegisto[20];
  33. char nomeUtilizador[15];
  34. char password[15];
  35. int tipoUser;
  36. int logado;
  37. int tempo_total_utilizacao;
  38. int total_dinheiro_gasto;
  39. } Utilizadores;
  40.  
  41. /* Estrutura dos computadores */
  42. typedef struct computadores
  43. {
  44. char nome[100];
  45. int codigoComputador;
  46. int estado;
  47. int tempoUtilizacao;
  48. int total_faturado;
  49. } Computadores;
  50.  
  51. /* Estrutura das sessões */
  52. typedef struct sessoes
  53. {
  54. int estado;
  55. int codComputador;
  56. int codUtilizador;
  57. char dataInicio;
  58. int minutosUtilizacao;
  59. double preco;
  60. int pagamento;
  61. }Sessoes;
  62.  
  63.  
  64. /* Prototipos das funções */
  65.  
  66. // Menus
  67. char menu_principal(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s); /* Menu principal */
  68. void menu_login(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s); /* Menu do LOGIN */
  69. void menu_user(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s); /* Menu principal do user */
  70. void menu_user_computador(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s); /* Menu principal do user - computador */
  71. void menu_admin(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s); /* Menu principal da ADMIN */
  72. void menu_admin_users(Utilizadores *p, data *h, computadores *c, int n); /* Menu principal da ADMIN - usuários */
  73. void menu_admin_computadores(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s); /* Menu principal da ADMIN - computadores */
  74.  
  75. // Admin - User
  76. void admin_editar_user(utilizadores *p, int n); /* Admin editar user */
  77. void admin_eliminar_user(utilizadores *p, int n); /* Admin eliminar user */
  78. // Admin - Computador
  79. void admin_adicionar_computador(computadores *c); /* Admin adicionar computador */
  80. void admin_editar_computador(computadores *c, int n); /* Admin editar computador */
  81. void admin_eliminar_computador(computadores *c, int n); /* Admin eliminar computador */
  82.  
  83. // User
  84. void user_editar_dados(Utilizadores *p, int n);
  85.  
  86. // Computadores
  87. void computadores_inicializa(Computadores *c, int n); /* Inicializa computadores */
  88. void computadores_lista(Computadores *c, int n); /* Mostra a lista de computadores */
  89.  
  90. // Utilizadores
  91. void utilizadores_inicializa(Utilizadores *p, int n); /* Inicializa os utilizadores*/
  92. void utilizadores_introduzir(Utilizadores *p, data*h, int n); /* Introduz um novo utilizador */ // Criar verificações (Repitição de user e outros)
  93. void utilizadores_listar_tabela(Utilizadores *p, data *h, int n); /* Mostra a lista dos utilizadores com tabela */
  94. void utilizadores_listar_simples(Utilizadores *p, data *h, int n); /* Mostra a lista dos utilizadores sem tabela */
  95.  
  96. // Tabela
  97. void escreve_espacos_branco(int x); /* Escreve espaços em branco (usado na tabela) */
  98. int conta_numeros(int num); /* Conta a quantidade de numeros de um inteiro */
  99. void tabela_escreve_int(int num, int digitos_tabela); /* Escreve um inteiro na tabela */
  100. void tabela_escreve_string(char *string, int digitos_tabela); /* Escreve uma string na tabela */
  101.  
  102. // Sessoes
  103. void sessoes_tabela_precos(Sessoes *s, Utilizadores *p, int n); /* Calcula o preço da sessao */ // Verificar funcionamento
  104.  
  105. // Outros
  106. void data_registo(DATA *h, int n); /* Diz a data/hora atual */
  107.  
  108.  
  109.  
  110. /*
  111. Inicializa os computadores
  112. - Computadores *c -> Apontador para o vetor de computadores
  113. - n -> Número de computadores
  114. */
  115. void computadores_inicializa(Computadores *c, int n) {
  116. for (int i = 0; i < NUM_COMPUTADORES; i++) {
  117. strcpy(c->nome, "Sem Nome"); /* Limpa o nome do computador */
  118. c->codigoComputador = i + 1; /* Começa em 1 até n */
  119. c->estado = -1; /* -1 Não existe computador no vetor | 0 livre | 1 ocupado | 2 indisponivel */
  120. c->tempoUtilizacao = 0;
  121. c->total_faturado = 0;
  122. c++;
  123. }
  124. }
  125.  
  126. /*
  127. Inicializa os utilizadores
  128. - Utilizadores *p -> Apontador para o vetor dos utilizadores
  129. - n -> Numero de utilizadores
  130. */
  131. void utilizadores_inicializa(Utilizadores *p, int n) {
  132. for (int i = 0; i < n; i++) {
  133. p->codigoUtilizador = -1; /* -1 Não tem código | 0 para ADMIN | > 0 para normais */
  134. p->tempo_total_utilizacao = 0;
  135. p->total_dinheiro_gasto = 0;
  136. p->tipoUser = 1; /* 0 para ADMIN | 1 para normais */
  137. p->logado = 0;
  138. p++;
  139. }
  140. }
  141. /* Guardar Utilizadores em ficheiro Bin */
  142. void guardaUserBin(Utilizadores *p, int n)
  143. {
  144. int i;
  145. FILE *f;
  146. f = fopen("listaUser.dat", "wb");
  147. if (f == NULL)
  148. {
  149. fprintf(stderr, "Impossível abrir ficheiro"); //Apresenta um erro
  150. return;
  151. }
  152. for (i = 0; i < n; i++)
  153. {
  154. fwrite(p, sizeof(Utilizadores), 1, f); //Guarda o vetor todo no ficheiro
  155. p++;
  156. }
  157. fclose(f);
  158. }
  159.  
  160. /* Ler utilizadores do ficheiro Bin */
  161. void leUsersBin(Utilizadores *p, int n)
  162. {
  163. int i;
  164. FILE *f;
  165. f = fopen("listaUser.dat", "rb");
  166. if (f == NULL)
  167. {
  168. fprintf(stderr, "Impossível abrir ficheiro");
  169. return;
  170. }
  171. i = 0;
  172. while (!feof(f))
  173. {
  174. i++;
  175. if (i < n)
  176. {
  177. fread(p, sizeof(Utilizadores), 1, f);
  178. p++;
  179. }
  180. else
  181. {
  182. fclose(f);
  183. return;
  184. }
  185. }
  186. fclose(f);
  187. }
  188.  
  189. /* Guardar Computadores em ficheiro Bin */
  190. void guardaComputadorBin(Computadores *c, int n)
  191. {
  192. int i;
  193. FILE *f;
  194. f = fopen("listaComputador.dat", "wb");
  195. if (f == NULL)
  196. {
  197. fprintf(stderr, "Impossível abrir ficheiro"); //Apresenta um erro
  198. return;
  199. }
  200. for (i = 0; i < n; i++)
  201. {
  202. fwrite(c, sizeof(Computadores), 1, f); //Guarda o vetor todo no ficheiro
  203. c++;
  204. }
  205. fclose(f);
  206. }
  207.  
  208. /* Ler computadores do ficheiro Bin */
  209. void leComputadorBin(Computadores *c, int n)
  210. {
  211. int i;
  212. FILE *f;
  213. f = fopen("listaComputador.dat", "rb");
  214. if (f == NULL)
  215. {
  216. fprintf(stderr, "Impossível abrir ficheiro");
  217. return;
  218. }
  219. i = 0;
  220. while (!feof(f))
  221. {
  222. i++;
  223. if (i < n)
  224. {
  225. fread(c, sizeof(Computadores), 1, f);
  226. c++;
  227. }
  228. else
  229. {
  230. fclose(f);
  231. return;
  232. }
  233. }
  234. fclose(f);
  235. }
  236.  
  237. /* Guardar Sessoes em ficheiro Bin */
  238. void guardaSessoesBin(Sessoes *s, int n)
  239. {
  240. int i;
  241. FILE *f;
  242. f = fopen("listaSessoes.dat", "wb");
  243. if (f == NULL)
  244. {
  245. fprintf(stderr, "Impossível abrir ficheiro"); //Apresenta um erro
  246. return;
  247. }
  248. for (i = 0; i < n; i++)
  249. {
  250. fwrite(s, sizeof(Sessoes), 1, f); //Guarda o vetor todo no ficheiro
  251. s++;
  252. }
  253. fclose(f);
  254. }
  255.  
  256. /* Ler Sessoes do ficheiro Bin */
  257. void leSessoesBin(Sessoes *s, int n)
  258. {
  259. int i;
  260. FILE *f;
  261. f = fopen("listaSessoes.dat", "rb");
  262. if (f == NULL)
  263. {
  264. fprintf(stderr, "Impossível abrir ficheiro");
  265. return;
  266. }
  267. i = 0;
  268. while (!feof(f))
  269. {
  270. i++;
  271. if (i < n)
  272. {
  273. fread(s, sizeof(Sessoes), 1, f);
  274. s++;
  275. }
  276. else
  277. {
  278. fclose(f);
  279. return;
  280. }
  281. }
  282. fclose(f);
  283. }
  284.  
  285. /* Guardar Utilizadores em TXT*/
  286. void guardaUsersTxt(Utilizadores *p, int n)
  287. {
  288. FILE *f;
  289. int i;
  290. f = fopen("listaUsers.txt", "w");
  291. if (f == NULL)
  292. {
  293. fprintf(stderr, "Impossível abrir ficheiro");
  294. return;
  295. }
  296. for (i = 0; i < n; i++)
  297. {
  298.  
  299. fprintf(f, "\Código Utilizador: %d; Nome: %s; Morada: %s; Contacto: %d; Data Registo: %s; Nome Utilizador: %s; Password: %s; Tipo User: %d; Tempo Utilização: %d; Total Dinheiro Gasto: %d\n", i + 1, p->codigoUtilizador, p->nome, p->morada, p->contacto, p->dataRegisto, p->nomeUtilizador, p->password, p->tipoUser, p->tempo_total_utilizacao, p->total_dinheiro_gasto);
  300. p++;
  301. }
  302. fclose(f);
  303. }
  304.  
  305. /* Guardar Computadores em TXT*/
  306. void guardaComputadoresTxt(Computadores *c, int n)
  307. {
  308. FILE *f;
  309. int i;
  310. f = fopen("listaComputadores.txt", "w");
  311. if (f == NULL)
  312. {
  313. fprintf(stderr, "Impossível abrir ficheiro");
  314. return;
  315. }
  316. for (i = 0; i < n; i++)
  317. {
  318.  
  319. fprintf(f, "\nCódigo Computador: %d; Nome: %s; Estado: %d; Tempo Utilização: %d; Total Faturado: %d;\n", i + 1, c->codigoComputador, c->nome, c->estado, c->tempoUtilizacao, c->total_faturado);
  320. c++;
  321. }
  322. fclose(f);
  323. }
  324.  
  325. /* Guardar Sessoes em TXT*/
  326. void guardaSessoesTXT(Sessoes *s, int n)
  327. {
  328. FILE *f;
  329. int i;
  330. f = fopen("listaSessoes.txt", "w");
  331. if (f == NULL)
  332. {
  333. fprintf(stderr, "Impossível abrir ficheiro");
  334. return;
  335. }
  336. for (i = 0; i < n; i++)
  337. {
  338.  
  339. fprintf(f, "\nEstado da Sessão: %d; Código Computador: %d; Código Utilizador: %d; Data Inicio: %s; Minutos Utilização: %d; Preço: %d; Pagamento: %d\n", i + 1, s->estado, s->codComputador, s->codUtilizador, s->dataInicio, s->minutosUtilizacao, s->preco, s->pagamento);
  340. s++;
  341. }
  342. fclose(f);
  343. }
  344.  
  345. /* Escreve x espacos em branco (usado para formatar a tabela) */
  346. void escreve_espacos_branco(int x)
  347. {
  348. for (int i = 0; i < x; i++) printf(" ");
  349. }
  350.  
  351. /* Conta a quantidade de caracteres de um numero */
  352. int conta_numeros(int num)
  353. {
  354. if (num < 0) return 0;
  355. else if (num < 10) return 1;
  356. else if (num < 100) return 2;
  357. else if (num < 1000) return 3;
  358. else if (num < 10000) return 4;
  359. return 0;
  360. }
  361.  
  362. /* Escreve um inteiro na tabela */
  363. void tabela_escreve_int(int num, int digitos_tabela)
  364. {
  365. // Conta numeros do inteiro
  366. int num_dig_codUti = conta_numeros(num);
  367.  
  368. // Calcula a diferença de digitos necessários da tabela e os digitos do inteiro
  369. int dif_digitos = digitos_tabela - num_dig_codUti;
  370.  
  371. // Se a diferença for maior que 0, escreve o inteiro e os espaços em branco necessários (dif_digitos + 1 -> +1 serve para colocar o espaço antes da |)
  372. if (dif_digitos > 0)
  373. {
  374. printf("| %d", num);
  375. escreve_espacos_branco(dif_digitos + 1);
  376. }
  377. else printf("| %d ", num);
  378. }
  379.  
  380. /* Escreve uma string na tabela */
  381. void tabela_escreve_string(char *string, int digitos_tabela)
  382. {
  383. // Calcula tamanho da string
  384. int tam_nome = strlen(string);
  385.  
  386. // Calcula a diferença de digitos necessários da tabela e os digitos da string
  387. int dif_caracteres = digitos_tabela - tam_nome;
  388.  
  389. // Se a diferença for maior que 0, escreve a string e os espaços em branco necessários (dif_digitos + 1 -> +1 serve para colocar o espaço antes da |)
  390. if (dif_caracteres > 0)
  391. {
  392. printf("| %s", string);
  393. escreve_espacos_branco(dif_caracteres + 1);
  394. }
  395. else printf("| %s ", string);
  396. }
  397.  
  398. /* Lista dos utilizadores com tabela */
  399. void utilizadores_listar_tabela(Utilizadores *p, data *h, int n)
  400. {
  401. // HEADER
  402. printf("================================================================================= \n");
  403. printf("| COD | USER | CONTACTO | TIPO | LOGADO | TEMPO TOTAL | TOTAL GASTO | \n");
  404. printf("================================================================================= \n");
  405.  
  406. // Loop pelos users
  407. for (int i = 0; i < n; i++)
  408. {
  409. // Escreve as infos
  410. if (p->codigoUtilizador != -1) {
  411. tabela_escreve_int(p->codigoUtilizador, 3);
  412. tabela_escreve_string(p->nomeUtilizador, 14);
  413. tabela_escreve_string(p->contacto, 10);
  414. tabela_escreve_int(p->tipoUser, 4);
  415. tabela_escreve_int(p->logado, 6);
  416. tabela_escreve_int(p->tempo_total_utilizacao, 11);
  417. tabela_escreve_int(p->total_dinheiro_gasto, 11);
  418. printf("|\n");
  419. }
  420. // Passa para o proximo user
  421. p++;
  422. }
  423. // FOOTER
  424. printf("|=====|================|============|======|========|=============|=============| \n");
  425.  
  426. system("pause");
  427.  
  428. }
  429.  
  430. /* Tabela de preços */
  431. void sessoes_tabela_precos(Sessoes *s, Utilizadores *p, int n) {
  432. double preco;
  433. p->codigoUtilizador = s->codUtilizador;
  434. if (s->minutosUtilizacao < 30)
  435. preco = (double)s->minutosUtilizacao * 0.05;
  436. else if (s->minutosUtilizacao > 30)
  437. preco = 30 * 0.05 + ((double)s->minutosUtilizacao - 30) * 0.025;
  438.  
  439. if (preco < 2)
  440. s->preco = 2;
  441. else s->preco = preco;
  442.  
  443. }
  444.  
  445. /* Regista a data atual */
  446. void data_registo(DATA *h, int n)
  447. {
  448. SYSTEMTIME st;
  449. GetSystemTime(&st);
  450. for (int i = 0; i < n; i++) {
  451. h->ano = st.wYear;
  452. h->mes = st.wMonth;
  453. h->dia = st.wDay;
  454. h->hora = st.wHour;
  455. h->min = st.wMinute;
  456. h->segundo = st.wSecond;
  457. h++;
  458. }
  459. }
  460.  
  461. /* Mostra a lista de computadores */
  462. void computadores_lista(Computadores *c, int n)
  463. {
  464. printf("\n\n LISTA DE COMPUTADORES \n\n");
  465. int i;
  466.  
  467. for (i = 0; i < NUM_COMPUTADORES; i++)
  468. {
  469. if (c->estado != -1) {
  470. printf("Código: %d\n", c->codigoComputador);
  471. printf("Nome: %s\n", c->nome);
  472. printf("Estado: %d\n", c->estado);
  473. printf("Faturado: %d\n", c->total_faturado);
  474. printf("Tempo Utilização: %d\n\n", c->tempoUtilizacao);
  475.  
  476. c++;
  477. }
  478. }
  479. }
  480.  
  481. /* Adicionar Utilizador */
  482. void utilizadores_introduzir(Utilizadores *p, data*h, int n)
  483. {
  484. int i = 0;
  485. while ((p->codigoUtilizador != -1) && (i < n)) {
  486. i++;
  487. p++;
  488. h++;
  489. }
  490.  
  491. if (i < n) {
  492. data_registo(h, n);
  493. printf("\nInserir novo utilizador no sistema\n\n");
  494.  
  495. fseek(stdin, 0, 2);
  496. printf("\nInsira o nome completo: ");
  497. gets_s(p->nome);
  498.  
  499. //Percorrer todo o vetor para verificar se há utilizadores com nomes iguais (POR FAZER!!!)
  500. fseek(stdin, 0, 2);
  501. printf("\nInsira o nome de utilizador: ");
  502. gets_s(p->nomeUtilizador);
  503.  
  504. fseek(stdin, 0, 2);
  505. printf("\nInsira a morada: ");
  506. gets_s(p->morada);
  507.  
  508. printf("\nInsira o contacto de telefone: ");
  509. gets_s(p->contacto);
  510.  
  511. fseek(stdin, 0, 2);
  512. printf("\nInsira password: ");
  513. gets_s(p->password);
  514.  
  515. printf("\nUtilizador registado em %d-%d-%d as %d:%d:%d.\n", h->ano, h->mes, h->dia, h->hora, h->min, h->segundo);
  516. p->codigoUtilizador = i;
  517. if (p->codigoUtilizador == 0) p->tipoUser = 0;
  518.  
  519. printf("\nUtilizador registado na posicao %d\n", i + 1);
  520. }
  521. else printf("\n O programa nao tem espaco para mais utilizadores!! \n");
  522. system("pause");
  523.  
  524. }
  525.  
  526. /* Mostra utilizadores sem tabela */
  527. void utilizadores_listar_simples(Utilizadores *p, data *h, int n)
  528. {
  529. int i;
  530. for (i = 0; i < n; i++)
  531. {
  532. if (p->codigoUtilizador != -1) {
  533. printf("\nO utilizador %s tem os seguintes dados: ", p->nomeUtilizador);
  534. printf("\nNome: %s", p->nome);
  535. printf("\nMorada: %s", p->morada);
  536. printf("\nContacto: %s", p->contacto);
  537. printf("\nPassword: %s", p->password);
  538. printf("\nData de Registo: %d-%d-%d as %d:%d:%d.\n", h->ano, h->mes, h->dia, h->hora, h->min, h->segundo);
  539. }
  540. p++;
  541. h++;
  542. }
  543. }
  544.  
  545. /* Admin editar user */
  546. void admin_editar_user(utilizadores *p, int n)
  547. {
  548. int numero_utilizadores_registados = 0;
  549. int i = 0;
  550. int codigo_utilizador;
  551. int aux_reset = 0;
  552. char opcao;
  553. // Ve os utilizadores existentes
  554. while (i < n)
  555. {
  556. if (p->codigoUtilizador != -1)
  557. {
  558. numero_utilizadores_registados++;
  559. aux_reset++;
  560. p++;
  561. }
  562. i++;
  563. }
  564.  
  565. if (aux_reset != 0) { //p-> volta ao inicio
  566.  
  567. aux_reset--;
  568. p--;
  569.  
  570. }
  571.  
  572.  
  573. //Elimina o user
  574. if (numero_utilizadores_registados < n) {
  575.  
  576. do {
  577. printf("\nQual o utilizador que pretende editar? Use o codigo.");
  578. scanf("%d", &codigo_utilizador);
  579. } while ((codigo_utilizador < 0) || (codigo_utilizador >= numero_utilizadores_registados));
  580.  
  581. }
  582.  
  583. while (p->codigoUtilizador != codigo_utilizador) { //Procura o utilizador selecionado
  584. p++;
  585. }
  586. system("CLS");
  587. printf("\nEscolheu o utilizador |%d|", p->codigoUtilizador);
  588.  
  589. do {
  590.  
  591. do {
  592. printf("\n#--------------------------#");
  593. printf("\n Nome (1) \n");
  594. printf("\n Morada (2) \n");
  595. printf("\n Contacto (3) \n");
  596. printf("\n Nome de utilizador (4) \n");
  597. printf("\n Password (5) \n");
  598. printf("\n Sair (0) \n");
  599. printf("\n#--------------------------#");
  600. printf("\nO que deseja editar?");
  601. scanf(" %c", &opcao);
  602. } while (opcao < '0' || opcao > '5');
  603.  
  604. switch (opcao) {
  605. case '1':
  606. fseek(stdin, 0, 2);
  607. printf("\nInsira novo nome: ");
  608. gets_s(p->nome);
  609. system("CLS");
  610. printf("\nNome alterado!\n");
  611. break;
  612. case '2':
  613. fseek(stdin, 0, 2);
  614. printf("\nInsira nova morada: ");
  615. gets_s(p->morada);
  616. system("CLS");
  617. printf("\nMorada alterada!\n");
  618. break;
  619. case '3':
  620. fseek(stdin, 0, 2);
  621. printf("\nInsira novo contacto: ");
  622. gets_s(p->contacto);
  623. system("CLS");
  624. printf("\nContacto alterado!\n");
  625. break;
  626. case '4':
  627. fseek(stdin, 0, 2);
  628. printf("\nInsira novo nome de utilizador: ");
  629. gets_s(p->nomeUtilizador);
  630. system("CLS");
  631. printf("\nNome de utilizador alterado!\n");
  632. break;
  633. case '5':
  634. fseek(stdin, 0, 2);
  635. printf("\nInsira nova password: ");
  636. gets_s(p->password);
  637. system("CLS");
  638. printf("\nPassword alterada!\n");
  639. case '0':
  640. break;
  641. default:
  642. printf("\nOpção inválida.");
  643. break;
  644. }
  645. } while (opcao != '0');
  646.  
  647.  
  648. }
  649.  
  650. /* Admin elimiar user */
  651. void admin_eliminar_user(utilizadores *p, int n) //FICA OU NAO FICA??????? IMPORTANTE!!!!!!!!!!!!!!!!!!!!!!
  652. {
  653. int numero_utilizadores_registados = 0;
  654. int i = 0;
  655. int codigo_utilizador;
  656. int aux_reset = 0;
  657.  
  658. // Ve os utilizadores existentes
  659. while (i < n)
  660. {
  661. if (p->codigoUtilizador != -1)
  662. {
  663. numero_utilizadores_registados++;
  664. aux_reset++;
  665. p++;
  666. }
  667. i++;
  668. }
  669.  
  670. if (aux_reset != 0) { //p-> volta ao inicio
  671.  
  672. aux_reset--;
  673. p--;
  674.  
  675. }
  676.  
  677.  
  678. //Elimina o user
  679. if (numero_utilizadores_registados < n){
  680.  
  681. do {
  682. printf("\n");
  683. printf("=======================================================\n");
  684. printf("Introduza o codigo do utilizador que pretende remover: ");
  685. printf("\n=======================================================\n\n");
  686. scanf("%d", &codigo_utilizador);
  687. } while ((codigo_utilizador < 0) || (codigo_utilizador >= numero_utilizadores_registados));
  688.  
  689. }
  690.  
  691. while (p->codigoUtilizador != codigo_utilizador) { //Procura o utilizador selecionado
  692. p++;
  693. }
  694. p->codigoUtilizador = -1;
  695. printf("\nO utilizador %d foi removido com sucesso!", codigo_utilizador);
  696.  
  697. }
  698.  
  699. /* Admin eliminar computador */
  700. void admin_eliminar_computador(computadores *c, int n)
  701. {
  702. int computadores_existentes = 0;
  703. int i = 0;
  704. int codigo_computador;
  705. int aux_reset = 0;
  706. // Vai ver todos os computadores
  707. while (i < NUM_COMPUTADORES)
  708. {
  709. if (c->estado != -1)
  710. {
  711. computadores_existentes++;
  712. c++;
  713. aux_reset++;
  714. }
  715. i++;
  716. }
  717.  
  718. if (aux_reset != 0) { //p-> volta ao inicio
  719.  
  720. aux_reset--;
  721. c--;
  722.  
  723. }
  724.  
  725.  
  726. //Fecha o pc
  727. if (computadores_existentes <= NUM_COMPUTADORES) {
  728.  
  729. do {
  730. printf("\n");
  731. printf("======================================================\n");
  732. printf("Introduza o codigo do computador que pretende fechar: ");
  733. printf("\n======================================================\n\n");
  734. scanf("%d", &codigo_computador);
  735. } while ((codigo_computador < 1) || (codigo_computador > computadores_existentes));
  736.  
  737. }
  738.  
  739. while (c->codigoComputador != codigo_computador) { //Procura o computador selecionado
  740. c++;
  741. }
  742.  
  743. if (c->estado == 0){
  744. c->estado = 2;
  745. printf("\nO computador %d esta agora indisponivel!", c->codigoComputador);
  746. }
  747. else printf("\nO computador nao existe ou esta a ser utilizado!");
  748.  
  749.  
  750. }
  751.  
  752. /* Admin editar computador */
  753. void admin_editar_computador(computadores *c, int n)
  754. {
  755. int computadores_existentes = 0;
  756. int i = 0;
  757. int codigo_computador;
  758. int aux_reset = 0;
  759. char opcao;
  760. // Vai ver todos os computadores
  761. while (i < NUM_COMPUTADORES)
  762. {
  763. if (c->estado != -1)
  764. {
  765. computadores_existentes++;
  766. c++;
  767. aux_reset++;
  768. }
  769. i++;
  770. }
  771.  
  772. if (aux_reset != 0) { //p-> volta ao inicio
  773.  
  774. aux_reset--;
  775. c--;
  776.  
  777. }
  778.  
  779.  
  780. //Fecha o pc
  781. if (computadores_existentes <= NUM_COMPUTADORES) {
  782.  
  783. do {
  784. printf("\n");
  785. printf("======================================================\n");
  786. printf("Introduza o codigo do computador que pretende editar: ");
  787. printf("\n======================================================\n\n");
  788. scanf("%d", &codigo_computador);
  789. } while ((codigo_computador < 1) || (codigo_computador > computadores_existentes));
  790.  
  791. }
  792.  
  793. while (c->codigoComputador != codigo_computador) { //Procura o computador selecionado
  794. c++;
  795. }
  796.  
  797. system("CLS");
  798. printf("\nEscolheu o computador |%d|", c->codigoComputador);
  799.  
  800. do {
  801.  
  802. do {
  803. printf("\n#--------------------------#");
  804. printf("\n Nome (1) \n");
  805. printf("\n Tornar indisponivel (2) \n");
  806. printf("\n Tornar livre (3) \n");
  807. printf("\n Tornar ocupado (4) \n");
  808. printf("\n Sair (0) \n");
  809. printf("\n#--------------------------#");
  810. printf("\nO que deseja editar?");
  811. scanf(" %c", &opcao);
  812. } while (opcao < '0' || opcao > '4');
  813.  
  814. switch (opcao) {
  815. case '1':
  816. fseek(stdin, 0, 2);
  817. printf("\nInsira novo nome: ");
  818. gets_s(c->nome);
  819. system("CLS");
  820. printf("\nNome alterado!\n");
  821. break;
  822. case '2':
  823. c->estado = 2;
  824. printf("\nComputador esta agora indisponivel!\n"); //DESCONSIDERAR SESSAO PARA PAGAMENTO
  825. system("CLS");
  826. printf("\nEstado alterado!\n");
  827. break;
  828. case '3':
  829. c->estado = 0;
  830. printf("\nComputador esta agora livre!\n"); //COMEÇAR SESSAO
  831. system("CLS");
  832. printf("\nEstado alterado!\n");
  833. break;
  834. case '4':
  835. c->estado = 1;
  836. printf("\nComputador esta agora ocupado!\n"); //TERMINAR SESSAO E CALCULAR PAGAMENTO
  837. system("CLS");
  838. printf("\nEstado alterado!\n");
  839. break;
  840. case '0':
  841. break;
  842. default:
  843. printf("\nOpção inválida.");
  844. break;
  845. }
  846. } while (opcao != '0');
  847.  
  848. }
  849.  
  850. /* Admin adicionar computador */
  851. void admin_adicionar_computador(Computadores *c)
  852. {
  853. int computadores_ocupados = 0;
  854. int i = 0;
  855.  
  856. // Vai ver todos os computadores
  857. while (i < NUM_COMPUTADORES)
  858. {
  859. if (c->estado != -1)
  860. {
  861. computadores_ocupados++;
  862. c++;
  863. }
  864. i++;
  865. }
  866.  
  867. // Se os computadores usados forem menos que os computadores existentes
  868. if (computadores_ocupados < NUM_COMPUTADORES)
  869. {
  870. // LOOP que só para quando o computador for adicionado
  871. while (1)
  872. {
  873. // Se o estado do PC for igual a -1
  874. if ((c->estado == -1))
  875. {
  876. fseek(stdin, 0, 2);
  877. printf("\nInsira o nome computador: ");
  878. gets_s(c->nome);
  879. printf("\nO computador %s foi adicionado.\nCÓDIGO: %d\n\n", c->nome, c->codigoComputador);
  880. c->estado = 0;
  881. c++;
  882. break;
  883. }
  884. else c++;
  885. }
  886. }
  887. else printf("\nNão é possivel adicionar mais computadores, lista cheia!");
  888.  
  889. system("pause");
  890.  
  891. }
  892.  
  893. /* User editar dados */
  894. void user_editar_dados(Utilizadores *p, int n)
  895. {
  896. char opcao;
  897.  
  898. do {
  899.  
  900. do {
  901. printf("\n#--------------------------#");
  902. printf("\n Nome (1) \n");
  903. printf("\n Morada (2) \n");
  904. printf("\n Contacto (3) \n");
  905. printf("\n Nome de utilizador (4) \n");
  906. printf("\n Password (5) \n");
  907. printf("\n Sair (0) \n");
  908. printf("\n#--------------------------#");
  909. printf("\nO que deseja editar?");
  910. scanf(" %c", &opcao);
  911. } while (opcao < '0' || opcao > '5');
  912.  
  913. switch (opcao) {
  914. case '1':
  915. fseek(stdin, 0, 2);
  916. printf("\nInsira novo nome: ");
  917. gets_s(p->nome);
  918. system("CLS");
  919. printf("\nNome alterado!\n");
  920. break;
  921. case '2':
  922. fseek(stdin, 0, 2);
  923. printf("\nInsira nova morada: ");
  924. gets_s(p->morada);
  925. system("CLS");
  926. printf("\nMorada alterada!\n");
  927. break;
  928. case '3':
  929. fseek(stdin, 0, 2);
  930. printf("\nInsira novo contacto: ");
  931. gets_s(p->contacto);
  932. system("CLS");
  933. printf("\nContacto alterado!\n");
  934. break;
  935. case '4':
  936. fseek(stdin, 0, 2);
  937. printf("\nInsira novo nome de utilizador: ");
  938. gets_s(p->nomeUtilizador);
  939. system("CLS");
  940. printf("\nNome de utilizador alterado!\n");
  941. break;
  942. case '5':
  943. fseek(stdin, 0, 2);
  944. printf("\nInsira nova password: ");
  945. gets_s(p->password);
  946. system("CLS");
  947. printf("\nPassword alterada!\n");
  948. case '0':
  949. break;
  950. default:
  951. printf("\nOpção inválida.");
  952. break;
  953. }
  954. } while (opcao != '0');
  955. system("pause");
  956. //POR FAZER
  957. }
  958.  
  959. /* Menu principal */
  960. char menu_principal(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s)
  961. {
  962. leSessoesBin(s, n);
  963. leUsersBin(p, n);
  964. leComputadorBin(c, n);
  965.  
  966. char op;
  967.  
  968. printf("\n#--------------------------#");
  969. printf("\n Registar (1) \n");
  970. printf("\n Logar (2) \n");
  971. printf("\n Sair (0) \n");
  972. printf("\n#--------------------------#");
  973.  
  974. do {
  975. printf("\nQual a opção? ");
  976. scanf(" %c", &op);
  977. } while (op < '0' || op > '2');
  978.  
  979. system("cls");
  980. return op;
  981. }
  982.  
  983. /* Menu principal do user */
  984. void menu_user(Utilizadores *p, data *h, computadores *c, int n, sessoes *s)
  985. {
  986. char op;
  987.  
  988. printf("\n#--------------------------------------------#");
  989. printf("\n Ir para PC (1) \n");
  990. printf("\n Editar dados (2) \n");
  991. printf("\n Sair (0) \n");
  992. printf("\n#--------------------------------------------#");
  993.  
  994. do
  995. {
  996. printf("\nQual a opção? ");
  997. scanf(" %c", &op);
  998. } while (op < '0' || op > '2');
  999.  
  1000. switch (op)
  1001. {
  1002. case '1':
  1003. menu_user_computador(p, h, c, n, s);
  1004. break;
  1005. case '2':
  1006. user_editar_dados(p, n); //POR FAZER
  1007. break;
  1008. case '0':
  1009. menu_principal(p, h, c, n, s);
  1010. break;
  1011. default:
  1012. printf("\nOpção inválida.");
  1013. break;
  1014. }
  1015. system("cls");
  1016. }
  1017.  
  1018. /* Menu principal do user - computador */
  1019. void menu_user_computador(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s)
  1020. {
  1021. char op;
  1022.  
  1023. printf("\n#--------------------------------------------#");
  1024. printf("\n Cena 1 (1) \n");
  1025. printf("\n Cena 2 (2) \n");
  1026. printf("\n Sair da sessao (0) \n");
  1027. printf("\n#--------------------------------------------#");
  1028.  
  1029. do {
  1030. printf("\nQual a opção? ");
  1031. scanf(" %c", &op);
  1032. } while (op < '0' || op > '2');
  1033.  
  1034. switch (op)
  1035. {
  1036. case '1':
  1037. //VAMOS TENTAR SIMULAR A UTILIZAÇAO DE UM COMPUTADOR
  1038. break;
  1039. case '2':
  1040. //VAMOS TENTAR SIMULAR A UTILIZAÇAO DE UM COMPUTADOR
  1041. break;
  1042. case '0':
  1043. menu_user(p, h, c, n, s);
  1044. break;
  1045. default:
  1046. printf("\nOpção inválida.");
  1047. break;
  1048. }
  1049. system("cls");
  1050.  
  1051. }
  1052.  
  1053. /* Menu principal da admin */
  1054. void menu_admin(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s)
  1055. {
  1056. char op;
  1057.  
  1058. do
  1059. {
  1060. printf("\n#--------------------------#");
  1061. printf("\n USERS (1) \n");
  1062. printf("\n PCS (2) \n");
  1063. printf("\n SESSOES (3) \n");
  1064. printf("\n GUARDAR DADOS (4) \n");
  1065. printf("\n Sair (0) \n");
  1066. printf("\n#--------------------------#");
  1067.  
  1068. do {
  1069. printf("\nQual a opção? ");
  1070. scanf(" %c", &op);
  1071.  
  1072. } while (op < '0' || op > '5');
  1073.  
  1074. switch (op)
  1075. {
  1076. case '1':
  1077. menu_admin_users(p, h, c, n);
  1078. break;
  1079. case '2':
  1080. menu_admin_computadores(p, h, c, n, s);
  1081. break;
  1082. case '3':
  1083. //menu_admin_sessoes(s, h, c, n);
  1084. break;
  1085. case '4':
  1086. guardaUserBin(p, n);
  1087. guardaComputadorBin(c, n);
  1088. guardaSessoesBin(s, n);
  1089. guardaUsersTxt(p, n);
  1090. guardaComputadoresTxt(c, n);
  1091. guardaSessoesTXT(s, n);
  1092. break;
  1093. case '0':
  1094. menu_principal(p, h, c, n, s);
  1095. break;
  1096. default:
  1097. printf("\nOpção inválida 1.");
  1098. break;
  1099. }
  1100. } while (op != '0');
  1101.  
  1102. system("cls");
  1103.  
  1104. }
  1105.  
  1106. /* Menu principal da admin - Users */
  1107. void menu_admin_users(Utilizadores *p, data *h, computadores *c, int n)
  1108. {
  1109. char op;
  1110.  
  1111. do
  1112. {
  1113. printf("\n#--------------------------#");
  1114. printf("\n Lista de users (1) \n");
  1115. printf("\n Adicionar user (2) \n");
  1116. printf("\n Editar user (3) \n");
  1117. printf("\n Eliminar user (4) \n");
  1118. printf("\n Sair (0) \n");
  1119. printf("\n#--------------------------#");
  1120. do {
  1121. printf("\nQual a opção? ");
  1122. scanf(" %c", &op);
  1123.  
  1124. } while (op < '0' || op > '4');
  1125. switch (op) {
  1126. case '1':
  1127. utilizadores_listar_tabela(p, h, n);
  1128.  
  1129. break;
  1130. case '2':
  1131. utilizadores_introduzir(p, h, n);
  1132. break;
  1133. case '3':
  1134. admin_editar_user(p,n);
  1135. break;
  1136. case '4':
  1137. utilizadores_listar_tabela(p, h, n);
  1138. admin_eliminar_user(p,n);
  1139. break;
  1140. case '0':
  1141. break;
  1142. default:
  1143. printf("\nOpção inválida. ..");
  1144. break;
  1145. }
  1146. } while (op != '0');
  1147.  
  1148.  
  1149. }
  1150.  
  1151. /* Menu principal da admin - Computadores */
  1152. void menu_admin_computadores(Utilizadores *p, data *h, computadores *c, int n, Sessoes *s)
  1153. {
  1154. char op;
  1155.  
  1156. do {
  1157. printf("\n#--------------------------#");
  1158. printf("\n Lista de PCs (1) \n");
  1159. printf("\n Adicionar PC (2) \n");
  1160. printf("\n Editar PC (3) \n");
  1161. printf("\n Eliminar PC (4) \n");
  1162. printf("\n Sair (0) \n");
  1163. printf("\n#--------------------------#");
  1164.  
  1165.  
  1166. printf("\nQual a opção? ");
  1167. scanf(" %c", &op);
  1168.  
  1169.  
  1170.  
  1171. switch (op)
  1172. {
  1173. case '1':
  1174. computadores_lista(c, n);
  1175. menu_admin_computadores(p, h, c, n, s);
  1176. break;
  1177. case '2':
  1178. admin_adicionar_computador(c);
  1179. break;
  1180. case '3':
  1181. admin_editar_computador(c, n);
  1182. break;
  1183. case '4':
  1184. admin_eliminar_computador(c,n);
  1185. break;
  1186. case '0':
  1187. menu_admin(p, h, c, n, s);
  1188. break;
  1189. default:
  1190. printf("\nOpção inválida.");
  1191. break;
  1192. }
  1193. } while (op != '0');
  1194. }
  1195.  
  1196. /* Menu do LOGIN */
  1197. void menu_login(Utilizadores *p, data *h, computadores *c, int n, sessoes *s)
  1198. {
  1199. int i, cmpStringUser, cmpStringPass;
  1200. char nome[15], password[15];
  1201. Utilizadores *user = new Utilizadores;
  1202. *user = *p;
  1203. int nUsers = n;
  1204.  
  1205. fseek(stdin, 0, 2);
  1206. printf("\nInsira o nome de utilizador: ");
  1207. gets_s(nome);
  1208. fseek(stdin, 0, 2);
  1209. printf("\nInsira a password: ");
  1210. gets_s(password);
  1211.  
  1212. for (i = 0; i < n; i++)
  1213. {
  1214. cmpStringUser = strcmp(nome, p->nomeUtilizador);
  1215. cmpStringPass = strcmp(password, p->password);
  1216.  
  1217. if ((cmpStringUser == 0 && cmpStringPass == 0))
  1218. {
  1219. if (p->codigoUtilizador == 0)
  1220. menu_admin(p, h, c, n, s);
  1221. else if (p->codigoUtilizador > 0)
  1222. menu_user(p, h, c, n, s);
  1223. }
  1224. else p++;
  1225. }
  1226. printf("\nErrado.\n");
  1227. system("pause");
  1228. }
  1229.  
  1230. /* Main */
  1231. void main()
  1232. {
  1233. setlocale(LC_ALL, ""); //Caracteres acentuados
  1234.  
  1235.  
  1236. Utilizadores user_logado;
  1237.  
  1238. Utilizadores user[10];
  1239. int nUsers = 10;
  1240.  
  1241.  
  1242. int nComputadores = 20;
  1243. Computadores pc[NUM_COMPUTADORES];
  1244. data h[10];
  1245. sessoes s[10];
  1246. computadores_inicializa(pc, nComputadores);
  1247.  
  1248.  
  1249. char ope;
  1250. utilizadores_inicializa(user, nUsers);
  1251.  
  1252.  
  1253. do {
  1254. ope = menu_principal(user, h, pc, nUsers, s);
  1255.  
  1256. switch (ope) {
  1257. case '1':
  1258.  
  1259. utilizadores_introduzir(user, h, nUsers);
  1260. system("cls");
  1261. break;
  1262. case '2':
  1263. menu_login(user, h, pc, nUsers, s);
  1264. system("cls");
  1265. break;
  1266. case '3':
  1267. menu_admin(user, h, pc, nUsers, s);
  1268. system("cls");
  1269. break;
  1270. case '0':
  1271. ope = '0';
  1272. break;
  1273. default:
  1274. printf("\nOpção inválida.");
  1275. break;
  1276. }
  1277. } while (ope != '0');
  1278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement