Guest User

Untitled

a guest
May 8th, 2017
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 81.47 KB | None | 0 0
  1. /**************************************************************
  2. Hospital management system
  3. created by ~aakash
  4. 2014
  5. ***************************************************************/
  6.  
  7.  
  8.  
  9.  
  10. //login details username "admin" password "admin12345" command-code "111110"
  11. #include<stdio.h>
  12. #include<conio.h>
  13. #include<ctype.h>
  14. #include<string.h>
  15. #include<stdlib.h>
  16. #include<dos.h>
  17. #include<time.h>
  18. #define PASSWORD 0
  19. #define NUMBER 1
  20. #define LETTER 2
  21. #define ALLINPUT 3
  22. #define _pwd "PWD.BIN"
  23. #define _room "ROOM.BIN"
  24. #define _doct "DOCTOR.BIN"
  25. #define _pati "PATIENT.BIN"
  26. #define _type "TYPE.BIN"
  27. #define EMPTY 'n'
  28. #define STAY 'y'
  29. FILE *f_ro;
  30. FILE *f_doc;
  31. FILE *f_pat;
  32. FILE *f_ty;
  33. FILE *f_pwd;
  34.  
  35. struct Login{
  36. char pwd[15];
  37. char usr[15];
  38. };
  39. struct Types{
  40. int co;
  41. char na[10];
  42. float pri;
  43. };
  44.  
  45. struct Room{
  46. int no;
  47. struct Types type;
  48. char sta;
  49. };
  50. time_t current;
  51. struct tm *gt;
  52.  
  53. struct DateTime {
  54. int day;
  55. int mon;
  56. int year;
  57. int hour;
  58. int min;
  59. int sec;
  60. };
  61.  
  62. struct Doctor{
  63. char id[10];
  64. char fname[15];
  65. char lname[15];
  66. char sex;
  67. char blo[5];
  68. struct date birth;
  69. char nat[20];
  70. char spec[20];
  71. struct DateTime join;
  72. char tel[20];
  73. char email[35];
  74. char addr[40];
  75. };
  76. struct Patient{
  77. char id[10];
  78. char fname[15];
  79. char lname[15];
  80. char sex;
  81. char blo[5];
  82. struct date birth;
  83. char prob[35];
  84. char nat[20];
  85. char tel[20];
  86. char addr[40];
  87. struct DateTime regi;
  88. int ro;
  89. };
  90. /*Function Declaration*/
  91. void help();
  92. int login(int);
  93. int resetpwd(int);
  94. int changepwd();
  95. void box(int,int,int,int,int);
  96. void updatedoc(int);
  97. void sortroom(Room *ro,int n);
  98. int blockey();
  99. void sortpat(Patient *pat,int n);
  100. void sortpatname(Patient *pat,int n);
  101. void sortdoc(Doctor *doc,int n);
  102. void sorttype(Types *type,int n);
  103. int getFileElement(const char *name, int size);
  104. int checkf_pwd();
  105. void drawbox(int left, int top, int right, int bottom);
  106. void notice(char text[30],int x1,int y1,int x2,int y2);
  107. void notice(char text[2][30],int x1,int y1,int x2,int y2);
  108. void drawwindow(char head[30],int x1, int y1, int x2, int y2, int c);
  109. int confirm(char str[15]);
  110. void updatepat(int);
  111. void welc();
  112. void inputdat(int &day,int &mon,int &year,int c);
  113. void createfile();
  114. void addtype();
  115. void checkoutinput(int opt);
  116. int checkout(int id);
  117. int selecttype();
  118. char selectsex();
  119. int selectblood();
  120. int findroom(int no);
  121. int finddocid(char id[10]);
  122. int findpatid(char id[10]);
  123. void addroom();
  124. int addpatient(int);
  125. void setroomEMPTY(int);
  126. void setroomSTAY(int);
  127. void patidetail(char id[10]);
  128. void docdetail(char id[10]);
  129. void adddoc();
  130. void deletetype(int);
  131. void deletetypeinput();
  132. void deleteroom();
  133. void deletepat(char id[10]);
  134. int deletedoc(char id[10]);
  135. void deletedocinput(int opt);
  136. int viewpat(char head[30],Patient *source,int n,int opt);
  137. int viewdoc(char head[30],Doctor *source,int n,int opt);
  138. void findpat(int opt);
  139. void finddoc(int opt);
  140. void updateroom();
  141. int viewroom(char head[30],Room *source,int n);
  142. void allroom();
  143. void allpat();
  144. void alldoc();
  145. void findviewroom();
  146. void availroom();
  147. void alltype();
  148. int menu(int);
  149. int doctor();
  150. int patient();
  151. int dropmenu(char menu[7][20],int x1,int y1,int x2,int y2,int opt);
  152. void box(int x1,int y1,int x2,int y2,int c);
  153. void clrwin();
  154. int program();
  155. int about();
  156. int room();
  157. char *input(int,int,int);
  158. float inputf(int,int);
  159. /*end Function Declaration*/
  160. void main(){
  161. createfile();
  162. _setcursortype(0);
  163. int opt=0;
  164. if(login(3)==1)
  165. goto start;
  166. exit(0);
  167. start:
  168. welc();
  169. textbackground(14);
  170. clrscr();
  171. gotoxy(22,1);textcolor(9);cprintf("==== Hospital Management System ====");
  172. do{
  173. switch(menu(opt)){
  174. case 0:opt=program();break;
  175. case 1:opt=doctor();break;
  176. case 2:opt=patient();break;
  177. case 3:opt=room();break;
  178. case 4:opt=about();break;
  179. }
  180.  
  181. }while(1);
  182. }
  183.  
  184. int resetpwd(int opt){
  185. struct Login log;
  186. int s,sh=0,h=0;
  187. char usr[20],pwd[20],ch;
  188. char code[8];
  189. char head[2][30]={"SET USER","RESET USER"};
  190. int t=0;
  191. do{
  192. h=checkf_pwd();
  193. if(opt==1){
  194. clrwin();
  195. }else{
  196. textbackground(9);
  197. window(1,1,80,25);
  198. clrscr();
  199. gotoxy(22,4);textcolor(9);cprintf("==== Hospital Management System ====");
  200. box(2,2,79,24,15);
  201.  
  202. }
  203. drawwindow(head[h],20,7,60,19,12);
  204. textcolor(15);
  205. gotoxy(1,4); cprintf("Enter Code of program:");
  206. gotoxy(1,6); cprintf("Enter New Username:");
  207. gotoxy(1,8); cprintf("Enter New Password:");
  208. if(sh==1){
  209. textcolor(3);
  210. gotoxy(24,4);cprintf("%s",code);
  211. gotoxy(21,6);cprintf("%s",usr);
  212. }else{
  213. gotoxy(24,4); strcpy(code,input(1,10,3));
  214. if(strcmp(code,"00")==0) {s=0;break;}
  215. gotoxy(21,6); strcpy(usr,input(2,14,3));
  216. if(strcmp(usr,"00")==0) {s=0;break;}
  217. }
  218. gotoxy(21,8); strcpy(pwd,input(3,14,3));
  219. if(strcmp(pwd,"00")==0) {s=0;break;}
  220. else if(strlen(pwd)<8){sh=1;notice(">Password too short<",24,10,55,15);blockey();continue;}
  221. if(atol(code)!=111110){
  222. sound(888);delay(33);nosound();
  223. textbackground(0);
  224. window(19,11,63,17);
  225. clrscr();
  226. textbackground(3);
  227. textcolor(15);
  228. window(18,10,62,16);
  229. clrscr();
  230. drawbox(1,1,45,7);
  231. gotoxy(5,2); textcolor(15);cprintf(">PLEASE ENTER CORRECT CODE OF PROGRAM<");
  232. gotoxy(3,3);printf("<You have %02d more time to set User Login>",2-t);
  233. gotoxy(22,6);textbackground(2);cprintf(" OK ");
  234. sh=0;
  235. t++;
  236. if(t>=3) {s=0;break;}
  237. ch=blockey();
  238. if(ch==13) {continue;}
  239. else if(ch==27) {s=0;break;}
  240. }else{
  241. s=1;
  242. strcpy(log.usr,usr);
  243. strcpy(log.pwd,pwd);
  244. f_pwd=fopen(_pwd,"wb");
  245. fwrite(&log,sizeof(Login),1,f_pwd);
  246. fclose(f_pwd);
  247. notice("<Completely Successful>",24,10,55,15);
  248. blockey();
  249. break;
  250. }
  251. }while(1);
  252. return s;
  253. }
  254. int changepwd(){
  255. struct Login log;
  256. int s,sh;
  257. char ousr[20],opwd[20],ch,nusr[20],npwd[20];
  258. char head[30]="CHANGE USER LOGIN";
  259. int t=0;
  260. do{
  261. f_pwd=fopen(_pwd,"rb");
  262. if(f_pwd==NULL) {
  263. notice("<User Login hasn't set yet>",24,10,55,15);
  264. fclose(f_pwd);
  265. blockey();
  266. break;
  267. }
  268. rewind(f_pwd);
  269. fread(&log,sizeof(Login),1,f_pwd);
  270. fclose(f_pwd);
  271. clrwin();
  272. drawwindow(head,20,7,60,19,12);
  273. textcolor(15);
  274. gotoxy(1,4); cprintf("Enter Old Username:");
  275. gotoxy(1,6); cprintf("Enter Old Password:");
  276. gotoxy(21,4); strcpy(ousr,input(2,30,3));
  277. if(strcmp(ousr,"00")==0) {s=0;break;}
  278. gotoxy(4,12),textcolor(15),cprintf("<<Press Shift+6 To Show PASSWORD>>");
  279. gotoxy(21,6); strcpy(opwd,input(0,15,3));
  280. if(strcmp(opwd,"00")==0) {s=0;break;}
  281. if(strcmp(log.usr,ousr)!=0||strcmp(log.pwd,opwd)!=0){
  282. sound(888);delay(33);nosound();
  283. textbackground(0);
  284. window(19,11,63,16);
  285. clrscr();
  286. textbackground(3);
  287. textcolor(15);
  288. window(18,10,62,16);
  289. clrscr();
  290. drawbox(1,1,45,7);
  291. gotoxy(8,2);printf(">Incorrect Username or Password<");
  292. gotoxy(2,3);printf("<You have %d more time to reset User Login>",2-t);
  293. gotoxy(22,6);textbackground(2);cprintf(" OK ");
  294.  
  295. t++;
  296. if(t>=3) {s=0;break;}
  297. ch=blockey();
  298. if(ch==13) {continue;}
  299. else if(ch==27) {s=0;break;}
  300.  
  301.  
  302. }else{
  303. re: clrwin();
  304. drawwindow(head,22,7,57,17,12);
  305. textcolor(15);
  306. gotoxy(1,4); cprintf("Enter New Username:");
  307. gotoxy(1,6); cprintf("Enter New Password:");
  308. if(sh==1){
  309. gotoxy(21,4);textcolor(3);cprintf("%s",nusr);
  310. }else{
  311. gotoxy(21,4); strcpy(nusr,input(2,30,3));
  312. if(strcmp(nusr,"00")==0) {s=0;break;}
  313. }
  314. gotoxy(21,6); strcpy(npwd,input(3,15,3));
  315. if(strcmp(npwd,"00")==0) {s=0;break;}
  316. else if(strlen(npwd)<8){sh=1;notice(">Password too short<",24,10,55,15);blockey();goto re;}
  317. s=1;
  318. strcpy(log.usr,nusr);
  319. strcpy(log.pwd,npwd);
  320. f_pwd=fopen(_pwd,"wb");
  321. fwrite(&log,sizeof(Login),1,f_pwd);
  322. fclose(f_pwd);
  323. notice("<Completely Successful>",24,10,55,15);
  324. blockey();
  325. break;
  326. }
  327. }while(1);
  328. return s;
  329. }
  330. int blockey(){
  331. char ch;
  332. ch: ch=getch();
  333. if(ch!=13&&ch!=27)goto ch;
  334. return ch;
  335. }
  336. void box(int x1,int y1,int x2,int y2,int c){
  337. int y,x,i;
  338. gotoxy(x1,y1);textcolor(c);cprintf("%c",201);
  339. for(x=x1+1;x<x2;x++){
  340. gotoxy(x,y1);textcolor(c);cprintf("%c",205);
  341. }
  342. gotoxy(x2,y1);textcolor(c);cprintf("%c",187);
  343. for(y=y1+1;y<y2;y++){
  344. gotoxy(x1,y);textcolor(c);cprintf("%c",186);
  345. gotoxy(x2,y);textcolor(c);cprintf("%c",186);
  346. }
  347. gotoxy(x1,y2);textcolor(c);cprintf("%c",200);
  348. for(i=x1+1;i<x2;i++){
  349. gotoxy(i,y2);textcolor(c);cprintf("%c",205);
  350. }
  351. gotoxy(x2,y2);textcolor(c);cprintf("%c",188);
  352. }
  353. int checkf_pwd(){
  354. int f=1;
  355. f_pwd=fopen(_pwd,"rb");
  356. if(f_pwd==NULL) {
  357. f=0;
  358. }
  359. return f;
  360. }
  361.  
  362. int login(int n){
  363. struct Login log;
  364. char usr[15],pwd[15],usri[15],pwdi[15],ch;
  365. int s=0,i=0;
  366. do{
  367. f_pwd=fopen(_pwd,"rb");
  368. if(f_pwd==NULL) {
  369. s=1;
  370. fclose(f_pwd);
  371. break;
  372. }
  373. rewind(f_pwd);
  374. fread(&log,sizeof(Login),1,f_pwd);
  375. textcolor(9);
  376. textbackground(9);
  377. window(1,1,80,25);
  378. clrscr();
  379. gotoxy(30,4);printf("===== User Login =====");
  380. gotoxy(22,7);printf("Welcome to Hospital Management System");
  381. gotoxy(21,8);printf("Please Enter Login Information to Start");
  382. box(2,2,79,24,15);
  383. gotoxy(30,12); textcolor(15);cprintf("Username:");
  384. gotoxy(30,13); textcolor(15);cprintf("Password:");
  385. gotoxy(40,12); strcpy(usri,input(2,30,3));
  386. if(strcmp(usri,"00")==0) {fclose(f_pwd);exit(0);}
  387. gotoxy(23,18),textcolor(15),cprintf("<<Press Shift+6 To Show PASSWORD>>");
  388. gotoxy(40,13); strcpy(pwdi,input(0,15,3));
  389. if(strcmp(pwdi,"00")==0) {fclose(f_pwd);exit(0);}
  390. if(strcmp(log.usr,usri)!=0||strcmp(log.pwd,pwdi)!=0){
  391. gotoxy(25,16); textcolor(15);cprintf(">Incorrect Username or Password<");
  392. gotoxy(27,17); textcolor(15);cprintf("<You have %d more attempt(s)>",n-i-1);
  393. gotoxy(15,18); textcolor(15);cprintf("<<Press R to reset User Login or Enter to try again>>");
  394. i++;
  395. if(i>=n) {fclose(f_pwd);exit(0);}
  396. a: ch=toupper(getch());
  397. if(ch=='R') {
  398. if(confirm("Reset PWD")==1){
  399. s=resetpwd(0);
  400. if(s==0) {fclose(f_pwd);continue;}
  401. else {fclose(f_pwd);break;}
  402. }else {fclose(f_pwd);continue;}}
  403. else if(ch==13){fclose(f_pwd);continue;}
  404. else if(ch==27) {fclose(f_pwd);exit(0);}
  405. else goto a;
  406. }else {s=1;fclose(f_pwd);break; }
  407. }while(1);
  408. return s;
  409. }
  410. void removeusr(){
  411. struct Login log;
  412. char head[30]="REMOVE USER LOGIN";
  413. char usr[15],pwd[15],usri[15],pwdi[15],ch;
  414. int i=0;
  415. do{
  416. f_pwd=fopen(_pwd,"rb");
  417. if(f_pwd==NULL) {
  418. notice("<User Login hasn't set yet>",24,10,55,15);
  419. blockey();
  420. break;
  421. }
  422. rewind(f_pwd);
  423. fread(&log,sizeof(Login),1,f_pwd);
  424. clrwin();
  425. drawwindow(head,20,7,60,19,12);
  426. gotoxy(9,5); textcolor(15);cprintf("Username:");
  427. gotoxy(9,7); textcolor(15);cprintf("Password:");
  428. gotoxy(19,5); strcpy(usri,input(2,30,3));
  429. if(strcmp(usri,"00")==0) {fclose(f_pwd);break;}
  430. gotoxy(4,12),textcolor(15),cprintf("<<Press Shift+6 To Show PASSWORD>>");
  431. gotoxy(19,7); strcpy(pwdi,input(0,15,3));
  432. if(strcmp(pwdi,"00")==0) {fclose(f_pwd);break;;}
  433. if(strcmp(log.usr,usri)!=0||strcmp(log.pwd,pwdi)!=0){
  434. textbackground(0);
  435. window(17,11,65,17);
  436. clrscr();
  437. textbackground(3);
  438. textcolor(15);
  439. window(16,10,64,16);
  440. clrscr();
  441. drawbox(1,1,49,7);
  442. gotoxy(9,2); textcolor(15);cprintf(">Incorrect Username or Password<");
  443. gotoxy(4,3);printf("<You have %d more time to remove User Login>",2-i);
  444. gotoxy(24,6);textbackground(2);cprintf(" OK ");
  445. i++;
  446. if(i>=3) {fclose(f_pwd);break;}
  447. ch=blockey();
  448. if(ch==13){fclose(f_pwd);continue;}
  449. else if(ch==27) {fclose(f_pwd);break;}
  450. }else{
  451. fclose(f_pwd);
  452. remove(_pwd);
  453. notice("User Login Removed",24,10,55,15);
  454. blockey();
  455. break;
  456. }
  457. }while(1);
  458. }
  459. int program(){
  460. int opt=0,close=1;
  461. char menu[2][20]={"User Login >","Quit"};
  462. char menu1[3][20]={"Reset","Remove","Change"};
  463. do{
  464. clrwin();
  465. if(checkf_pwd()==0){
  466. strcpy(menu1[0],"Set");
  467. }else{
  468. strcpy(menu1[0],"Reset");
  469. }
  470. switch(dropmenu(menu,2,3,18,6,opt)){
  471. case -2:close=0;break;
  472. case -1:close=0;break;
  473. case 0: switch(dropmenu(menu1,19,4,32,8,0)){
  474. case -2:close=0;opt=0;break;
  475. case -1:clrwin();
  476. opt=0;
  477. break;
  478. case 0: resetpwd(1);opt=0;break;
  479. case 1: removeusr();opt=0;break;
  480. case 2: changepwd();opt=0;break;
  481. }
  482. break;
  483. case 1: if(confirm("Quit")==1) exit(0);
  484. else {opt=1;break;}
  485. }
  486. }while(close);
  487. return 0;
  488. }
  489. int room(){
  490. char menu[4][20]={"All rooms","Available","Manage room >","Manage type >"};
  491. char menu1[4][20]={"Add new","Delete","Search","Update"};
  492. char menu2[3][20]={"Add new","Delete","All types"};
  493. int opt=0,close=1;
  494. do{
  495. clrwin();
  496. switch(dropmenu(menu,22,3,39,8,opt)){
  497. case -2:close=0;break;
  498. case -1:close=0;break;
  499. case 0:allroom();opt=0;break;
  500. case 1:availroom();opt=1;break;
  501. case 2: switch(dropmenu(menu1,40,6,52,11,0)){
  502. case -2:close=0;opt=0;break;
  503. case -1:clrwin();
  504. opt=2;
  505. break;
  506. case 0: clrwin();addroom();opt=2;break;
  507. case 1: clrwin();deleteroom();opt=2;break;
  508. case 2: clrwin();findviewroom();opt=2;break;
  509. case 3: clrwin();updateroom();opt=2;break;
  510. }break;
  511. case 3: switch(dropmenu(menu2,40,7,54,11,0)){
  512. case -2:close=0;opt=0;break;
  513. case -1:clrwin();
  514. opt=3;
  515. break;
  516. case 0: clrwin();addtype();opt=3;break;
  517. case 1: clrwin();deletetypeinput();opt=3;break;
  518. case 2: clrwin();alltype();opt=3;break;
  519. }break;
  520. }
  521. }while(close);
  522. return 3;
  523. }
  524.  
  525. int menu(int select){
  526. char ch, menu[5][20]={"\360","Doctor","Patient","Room","About"};
  527. int i;
  528. struct date da;
  529. textbackground(9);
  530. window(2,2,79,24);
  531. clrscr();
  532. getdate(&da);
  533. do{
  534. textbackground(11);
  535. textcolor(0);
  536. window(2,2,79,2);
  537. clrscr();
  538. for(i=0;i<5;i++)
  539. if(i==select){
  540. textbackground(2);
  541. textcolor(15);
  542. cprintf(" %s ",menu[i]);
  543. }else
  544. printf(" %s ",menu[i]);
  545. gotoxy(68,1);printf("%02d/%02d/%d",da.da_day,da.da_mon,da.da_year);
  546. ch=getch();
  547. switch(ch){
  548. case 75:select--;
  549. if(select==-1) select=4;
  550. break;
  551. case 77:select++;
  552. if(select==5) select=0;
  553. break;
  554. case 80:if(select<4)
  555. ch=13;
  556. break;
  557. case 27:select=0;break;
  558. }
  559.  
  560. }while(ch!=13);
  561. return select;
  562. }
  563. int doctor(){
  564. char menu[5][20]={"Add","Delete >","Update >","Search >","View All"};
  565. char menu1[3][20]={"By ID","By First Name","By Last Name"};
  566. char menu2[3][20]={"All","Name","Specialty"};
  567. char menu3[4][20]={"By ID","By First Name","By Last Name","By Specialty"};
  568. int opt=0,close=1;
  569. do{
  570. clrwin();
  571. switch(dropmenu(menu,5,3,20,9,opt)){
  572. case -2:close=0;break;
  573. case -1:close=0;break;
  574. case 0:adddoc();opt=0;break;
  575. case 1: switch(dropmenu(menu1,21,5,39,9,0)){
  576. case -2:close=0;opt=0;break;
  577. case -1:clrwin();
  578. opt=1;
  579. break;
  580. case 0: clrwin();deletedocinput(1);opt=1;break;
  581. case 1: clrwin();deletedocinput(2);opt=1;break;
  582. case 2: clrwin();deletedocinput(3);opt=1;break;
  583. }break;
  584. case 2:switch(dropmenu(menu2,21,6,39,10,0)){
  585. case -2:close=0;opt=0;break;
  586. case -1:clrwin();
  587. opt=2;
  588. break;
  589. case 0: clrwin();updatedoc(1);opt=2;break;
  590. case 1: clrwin();updatedoc(2);opt=2;break;
  591. case 2: clrwin();updatedoc(3);opt=2;break;
  592. }break;
  593. case 3: switch(dropmenu(menu3,21,7,38,12,0)){
  594. case -2:close=0;opt=0;break;
  595. case -1:clrwin();
  596. opt=3;
  597. break;
  598. case 0: clrwin();finddoc(1);opt=3;break;
  599. case 1: clrwin();finddoc(2);opt=3;break;
  600. case 2: clrwin();finddoc(3);opt=3;break;
  601. case 3: clrwin();finddoc(4);opt=3;break;
  602. }break;
  603. case 4:alldoc();opt=4;break;
  604. }
  605. }while(close);
  606. return 1;
  607. }
  608. int patient(){
  609. char menu[5][20]={"Check in","Check out by >","Update >","Search by >","View All"};
  610. char menu1[4][20]={"ID","First Name","Last Name","Room No."};
  611. char menu2[3][20]={"All","Name","Room No."};
  612. char menu3[4][20]={"ID","Name","Room No.","Check in Date"};
  613.  
  614. int opt=0,close=1;
  615. do{
  616. clrwin();
  617. switch(dropmenu(menu,13,3,31,9,opt)){
  618. case -2:close=0;break;
  619. case -1:close=0;break;
  620. case 0:addpatient(0);opt=0;break;
  621. case 1: switch(dropmenu(menu1,32,5,47,10,0)){
  622. case -2:close=0;opt=0;break;
  623. case -1:clrwin();
  624. opt=1;
  625. break;
  626. case 0: clrwin();checkoutinput(1);opt=1;break;
  627. case 1: clrwin();checkoutinput(2);opt=1;break;
  628. case 2: clrwin();checkoutinput(3);opt=1;break;
  629. case 3: clrwin();checkoutinput(4);opt=1;break;
  630. }break;
  631. case 2: switch(dropmenu(menu2,32,6,45,10,0)){
  632. case -2:close=0;opt=0;break;
  633. case -1:clrwin();
  634. opt=2;
  635. break;
  636. case 0: clrwin();updatepat(1);opt=2;break;
  637. case 1: clrwin();updatepat(2);opt=2;break;
  638. case 2: clrwin();updatepat(3);opt=2;break;
  639. }break;
  640. case 3: switch(dropmenu(menu3,32,7,50,12,0)){
  641. case -2:close=0;opt=0;break;
  642. case -1:clrwin();
  643. opt=3;
  644. break;
  645. case 0: clrwin();findpat(1);opt=3;break;
  646. case 1: clrwin();findpat(2);opt=3;break;
  647. case 2: clrwin();findpat(3);opt=3;break;
  648. case 3: clrwin();findpat(4);opt=3;break;
  649. }break;
  650. case 4:clrwin();allpat();opt=4;break;
  651. }
  652. }while(close);
  653. return 2;
  654. }
  655. int dropmenu(char menu[7][20],int x1,int y1,int x2,int y2,int opt){
  656. int i,select;
  657. char ch;
  658. select=opt;
  659. if(opt==-1) goto end;
  660. do{
  661. textbackground(7);
  662. textcolor(0);
  663. window(x1,y1,x2,y2);
  664. clrscr();
  665. drawbox(1,1,x2-x1+1,y2-y1+1);
  666. gotoxy(3,2+select);
  667. textbackground(2);
  668. for(i=0; i<x2-x1-3; i++) {
  669. cprintf(" ");
  670. }
  671. for(i=0;i<y2-y1-1;i++){
  672. gotoxy(4,2+i);
  673. if(i==select){
  674. textcolor(15);
  675. cprintf("%s",menu[i]);
  676. }else
  677. printf("%s",menu[i]);
  678. }
  679. ch=getch();
  680. switch(ch){
  681. case 72:select--;
  682. if(select==-1) select=y2-y1-2;
  683. break;
  684. case 80:select++;
  685. if(select==y2-y1-1) select=0;
  686. break;
  687. case 8: ch=13;opt=-1;
  688. break;
  689. case 75:ch=13;opt=-1;
  690. break;
  691. case 13:opt=select;
  692. break;
  693. case 77:if(strstr(menu[select],">")!=0)
  694. opt=select,ch=13;
  695. break;
  696. case 27:ch=13;opt=-2;
  697. break;
  698. }
  699.  
  700. }while(ch!=13);
  701. end:
  702. return opt;
  703. }
  704. void clrwin(){
  705. textbackground(9);
  706. textcolor(WHITE);
  707. window(2,3,79,24);
  708. clrscr();
  709. }
  710. void sortroom(Room *ro,int n){
  711. int i,j;
  712. Room temp;
  713. for(i=0;i<n-1;i++)
  714. for(j=i+1;j<n;j++)
  715. if(ro[i].no>ro[j].no){
  716. temp=ro[i];
  717. ro[i]=ro[j];
  718. ro[j]=temp;
  719. }
  720. }
  721. void sortpat(Patient *pat,int n){
  722. int i,j;
  723. Patient temp;
  724. for(i=0;i<n-1;i++)
  725. for(j=i+1;j<n;j++)
  726. if(pat[i].ro>pat[j].ro){
  727. temp=pat[i];
  728. pat[i]=pat[j];
  729. pat[j]=temp;
  730. }
  731. }
  732. void sortpatname(Patient *pat,int n){
  733. int i,j;
  734. char *fullname[40];
  735. Patient temp;
  736. for(i=0;i<n-1;i++)
  737. for(j=i+1;j<n;j++){
  738. strcpy(fullname[i],pat[i].fname);
  739. strcat(fullname[i]," ");
  740. strcat(fullname[i],pat[i].lname);
  741. strcpy(fullname[j],pat[j].fname);
  742. strcat(fullname[j]," ");
  743. strcat(fullname[j],pat[j].lname);
  744. if(stricmp(fullname[i],fullname[j])>1){
  745. temp=pat[i];
  746. pat[i]=pat[j];
  747. pat[j]=temp;
  748. }
  749. }
  750. }
  751. void sortdoc(Doctor *doc,int n){
  752. int i,j;
  753. Doctor temp;
  754. for(i=0;i<n-1;i++)
  755. for(j=i+1;j<n;j++)
  756. if(stricmp(doc[i].id,doc[j].id)>1){
  757. temp=doc[i];
  758. doc[i]=doc[j];
  759. doc[j]=temp;
  760. }
  761. }
  762. void sorttype(Types *type,int n){
  763. int i,j;
  764. Types temp;
  765. for(i=0;i<n-1;i++)
  766. for(j=i+1;j<n;j++)
  767. if(type[i].co>type[j].co){
  768. temp=type[i];
  769. type[i]=type[j];
  770. type[j]=temp;
  771. }
  772. }
  773. int getFileElement(const char *name, int size) {
  774. FILE *source = fopen(name,"rb+");
  775. fseek(source,0,SEEK_END);
  776. size = ftell(source)/size;
  777. fclose(source);
  778. return size;
  779. }
  780. void drawbox(int left, int top, int right, int bottom) {
  781. int i;
  782. for(i=0; i<right-left-1; i++) {
  783. if(i==0) {
  784. printf(" \332");
  785. } else if(i==right-left-2) printf("\277");
  786. else printf("\304");
  787. }
  788.  
  789. for(i=0; i<bottom-top-1; i++) {
  790. gotoxy(2,i+2);
  791. printf("\263");
  792. gotoxy(right-left,i+2);
  793. printf("\263");
  794. }
  795.  
  796. gotoxy(1,bottom-top+1);
  797.  
  798. for(i=0; i<right-left-1; i++) {
  799. if(i==0) {
  800. printf(" \300");
  801. } else if(i==right-left-2) printf("\331");
  802. else printf("\304");
  803. }
  804. }
  805. void notice(char text[30],int x1,int y1,int x2,int y2){
  806. textbackground(0);
  807. window(x1+1,y1+1,x2+1,y2+1);
  808. clrscr();
  809. textbackground(3);
  810. textcolor(15);
  811. window(x1,y1,x2,y2);
  812. clrscr();
  813. drawbox(1,1,x2-x1+1,y2-y1+1);
  814. gotoxy((x2-x1+3)/2-strlen(text)/2,2);printf("%s",text);
  815. gotoxy((x2-x1+2)/2,5);textbackground(2);cprintf(" OK ");
  816. }
  817. void notice(char text[2][30],int x1,int y1,int x2,int y2){
  818. textbackground(0);
  819. window(x1+1,y1+1,x2+1,y2+1);
  820. clrscr();
  821. textbackground(3);
  822. textcolor(15);
  823. window(x1,y1,x2,y2);
  824. clrscr();
  825. drawbox(1,1,x2-x1+1,y2-y1+1);
  826. gotoxy((x2-x1+3)/2-strlen(text[0])/2,2);printf("%s",text[0]);
  827. gotoxy((x2-x1+3)/2-strlen(text[1])/2,3);printf("%s",text[1]);
  828. gotoxy((x2-x1+2)/2,5);textbackground(2);cprintf(" OK ");
  829. }
  830. void drawwindow(char head[30],int x1, int y1, int x2, int y2, int c) {
  831. textbackground(7);
  832. textcolor(0);
  833. window(x1-3,y1-2,x2+3,y1-2);
  834. clrscr();
  835. gotoxy(((x2+3)-(x1-3)+3-strlen(head))/2,1);printf("%s",head);
  836. textbackground(c);
  837. textcolor(WHITE);
  838. window(x1-3,y1-1,x2+3,y2+1);
  839. clrscr();
  840. drawbox(x1-3, y1-1, x2+3, y2+1);
  841. window(x1,y1,x2+1,y2);
  842. }
  843. int confirm(char str[15]){
  844. char conf[2][5]={"No","Yes"};
  845. int i,ch,select=0;
  846. textbackground(9);
  847. window(2,24,79,24);
  848. clrscr();
  849. textbackground(0);
  850. window(24,10,57,18);
  851. clrscr();
  852. textbackground(14);
  853. window(23,9,56,17);
  854. clrscr();
  855. drawbox(2,1,35,9);
  856. gotoxy((33-(11+strlen(str)))/2,3);textcolor(15);
  857. cprintf("<Confirm Your %s>",str);
  858. do{
  859. for(i=0;i<=1;i++){
  860. if(i==select)
  861. textbackground(2);
  862. else textbackground(14);
  863. textcolor(15);
  864. gotoxy(8+i*16,7);
  865. cprintf(" %s ",conf[i]);
  866. }
  867. ch=getch();
  868. switch(ch){
  869. case 75:select--;
  870. if(select==-1) select=1;break;
  871. case 77:select++;
  872. if(select==2) select=0; break;
  873. }
  874.  
  875. }while(ch!=13);
  876. return select;
  877. }
  878. void inputdat(int &day,int &mon,int &year,int c){
  879. char ch,reday[3]="",remon[3]="",reyear[5]="";
  880. int d=0,m=0,y=0,i=0;
  881. _setcursortype(2);
  882. do{
  883. ch=getch();
  884. if(isdigit(ch)&&i<8){
  885. if(i<2){
  886. reday[d++]=ch;
  887. textcolor(c);cprintf("%c",ch);
  888. }else if(i<4){
  889. remon[m++]=ch;
  890. textcolor(c);cprintf("%c",ch);
  891. }else if(i<8){
  892. reyear[y++]=ch;
  893. textcolor(c);cprintf("%c",ch);
  894. }
  895. if(i==1||i==3){textcolor(c);cprintf("/");}
  896. i++;
  897. }
  898. if(ch == 8) {
  899. if(i != 0) {
  900. i--;
  901. if(i<2){
  902. reday[d--]=NULL;
  903. textcolor(c);cprintf("\b \b");
  904. }else if(i<4){
  905. remon[m--]=NULL;
  906. textcolor(c);cprintf("\b \b");
  907. }else if(i<8){
  908. reyear[y--]=NULL;
  909. textcolor(c);cprintf("\b \b");
  910. }
  911. if(i==1||i==3){
  912. printf("\b \b");
  913. }
  914. }
  915. }
  916. }while((ch != 13||i<8)&&ch!=27);
  917. if(ch==13){
  918. day=atoi(reday);
  919. mon=atoi(remon);
  920. year=atoi(reyear);
  921. }
  922. _setcursortype(0);
  923.  
  924. }
  925. char *input(int type,int limit,int c){
  926. char result[50]="";
  927. char ch;
  928. int index = 0;
  929. _setcursortype(2);
  930. do {
  931. ch=getch();
  932. if((type==3||type==0)&&index<limit){
  933. if(isalpha(ch)||(ch>='!'&&ch<='@')||ch==95) {
  934. result[index++]=ch;
  935. if(type==0){
  936. textcolor(c);cprintf("*");
  937. }else{
  938. textcolor(c);cprintf("%c",ch);
  939. }
  940. }
  941. }
  942. if(type==1&&index<limit){
  943. if(ch>=40&&ch<=57) {
  944. result[index++] = ch;
  945. textcolor(c);cprintf("%c",ch);
  946. }
  947. }
  948. if(type==2&&index<limit)
  949. if(isalpha(ch)||ch==' ') {
  950. result[index++]=ch;
  951. textcolor(c);cprintf("%c",ch);
  952. }
  953. if(ch==8&&index>0) {
  954. result[index--]=NULL;
  955. printf("\b \b");
  956. }
  957. if(ch==94&&type==0&&index>0){
  958. _setcursortype(0);
  959. result[index]=0;
  960. for(int i=0;i<index;i++)
  961. printf("\b");
  962. textcolor(c);cprintf("%s",result);
  963. for(i=0;i<index;i++)
  964. printf("\b");
  965. delay(100);
  966. for(i=0;i<index;i++)
  967. textcolor(c),cprintf("*");
  968. _setcursortype(2);
  969. }
  970. } while((ch != 13||index<1)&&ch!=27);
  971. result[index] =0;
  972. _setcursortype(0);
  973. return ch==27?"00":result;
  974. }
  975. float inputf(int limit,int c){
  976. int i=0,f=-1;
  977. char result[50]="",ch;
  978. _setcursortype(2);
  979. do{
  980. ch=getch();
  981. if((ch>='0'&&ch<='9')||(ch=='.'&&f==-1)&&i<limit){
  982. if(ch=='.')
  983. f=i;
  984. result[i++]=ch;
  985. textcolor(c);cprintf("%c",ch);
  986. }
  987. if(ch==8&&i>0){
  988. result[--i]='\0';
  989. if(i==f)
  990. f=-1;
  991. printf("\b \b");
  992. }
  993. }while((ch!=13||i==0)&&ch!=27);
  994. result[i]='\0';
  995. _setcursortype(0);
  996. return ch==27?0.0:atof(result);
  997. }
  998. void createfile(){
  999. f_doc=fopen(_doct,"rb");
  1000. if(f_doc==NULL)
  1001. f_doc=fopen(_doct,"wb");
  1002. f_pat=fopen(_pati,"rb");
  1003. if(f_pat==NULL)
  1004. f_pat=fopen(_pati,"wb");
  1005. f_ty=fopen(_type,"rb");
  1006. if(f_ty==NULL)
  1007. f_ty=fopen(_type,"wb");
  1008. f_ro=fopen(_room,"rb");
  1009. if(f_ro==NULL)
  1010. f_ro=fopen(_room,"wb");
  1011. fclose(f_doc);
  1012. fclose(f_pat);
  1013. fclose(f_ty);
  1014. fclose(f_ro);
  1015. }
  1016. void addtype(){
  1017. struct Types type;
  1018. char ty[10];
  1019. int code,i,n;
  1020. float pri;
  1021. char ch;
  1022. char text[2][30]={"<Type added>","<<Enter to add another>>"};
  1023. char head[30]="NEW TYPE";
  1024. do{
  1025. s: clrwin();
  1026. help();
  1027. drawwindow(head,22,7,57,17,12);
  1028. gotoxy(10,3);textcolor(15);cprintf("Code: ");code=atoi(input(1,5,15));
  1029. if(code==0) break;
  1030. n=getFileElement(_type,sizeof(Types));
  1031. f_ty=fopen(_type,"rb");
  1032. rewind(f_ty);
  1033. for(i=0;i<n;i++){
  1034. fread(&type,sizeof(Types),1,f_ty);
  1035. if(code==type.co){
  1036. notice(">This code of type is exist<",24,10,55,15);
  1037. blockey();
  1038. fclose(f_ty);
  1039. goto s;
  1040. }
  1041. }
  1042. fclose(f_ty);
  1043. gotoxy(10,5);textcolor(15);cprintf("Type: ");strcpy(ty,input(2,15,15));
  1044. if(strcmp(ty,"00")==0) break;
  1045. f_ty=fopen(_type,"rb");
  1046. rewind(f_ty);
  1047. for(i=0;i<n;i++){
  1048. fread(&type,sizeof(Types),1,f_ty);
  1049. if(stricmp(type.na,ty)==0){
  1050. notice(">This name of type is exist<",24,10,55,15);
  1051. blockey();
  1052. fclose(f_ty);
  1053. goto s;
  1054. }
  1055. }
  1056. fclose(f_ty);
  1057. gotoxy(10,7);textcolor(15);cprintf("Price: "); pri=inputf(10,15); //problem with float
  1058. if(pri==0.0) break;
  1059. type.co=code;
  1060. strcpy(type.na,ty);
  1061. type.pri=pri;
  1062. f_ty=fopen(_type,"ab");
  1063. fwrite(&type,sizeof(Types),1,f_ty);
  1064. fclose(f_ty);
  1065. notice(text,24,10,55,15);
  1066. ch=blockey();
  1067. if(ch==27) break;
  1068. }while(1);
  1069. }
  1070. int selecttype(){
  1071. char ch;
  1072. int n,i,index=0,result=-1;
  1073. n=getFileElement(_type,sizeof(Types));
  1074. f_ty=fopen(_type,"rb");
  1075. struct Types *type=(Types*) calloc(n,sizeof(Types));
  1076. for(i=0;i<n;i++){
  1077. fread(&type[i],sizeof(Types),1,f_ty);
  1078. }
  1079. do {clrscr();
  1080. textcolor(2);
  1081. cprintf("%c %s %c",174,type[index].na,175);
  1082.  
  1083. do{
  1084. ch = getch();
  1085. } while(ch!=75 && ch!=77 && ch!=13 && ch!=27);
  1086.  
  1087. if(ch==77) {index++;if(index>n-1) index=0;}
  1088. else if(ch==75){ index--;if(index<0) index=n-1;}
  1089.  
  1090. } while(ch!=13 && ch!=27);
  1091.  
  1092. if(ch==13) {
  1093. result=type[index].co;
  1094. }
  1095. fclose(f_ty);
  1096. return result;
  1097. }
  1098. char selectsex(){
  1099. char sex[3]="FM";
  1100. char ch,result='n';
  1101. int n,i=0;
  1102. do {clrscr();
  1103. textcolor(2);
  1104. cprintf("%c %c %c",174,sex[i],175);
  1105.  
  1106. do{
  1107. ch = getch();
  1108. } while(ch!=75&&ch!=77&&ch!=13&&ch!=27);
  1109.  
  1110. if(ch==77) {i++;if(i>=2) i=0;}
  1111. else if(ch==75){ i--;if(i<=-1) i=1;}
  1112.  
  1113. } while(ch!=13&&ch!=27);
  1114.  
  1115. if(ch==13) {
  1116. result=sex[i];
  1117. }
  1118. return result;
  1119. }
  1120. int selectblood(){
  1121. char blood[8][4]={"O+","O-","A+","A-","B+","B-","AB+","AB-"};
  1122. char ch;
  1123. int result;
  1124. int n,i=0;
  1125. do {clrscr();
  1126. textcolor(2);
  1127. cprintf("%c %s %c",174,blood[i],175);
  1128. do{
  1129. ch=getch();
  1130. }while(ch!=75&&ch!=77&&ch!=13&&ch!=27);
  1131. if(ch==77) {i++;if(i>=8) i=0;}
  1132. else if(ch==75){ i--;if(i<=-1) i=7;}
  1133. } while(ch!=13&&ch!=27);
  1134.  
  1135. if(ch==13) {
  1136. result=i+1;
  1137. }else{
  1138. result=0;
  1139. }
  1140. return result;
  1141. }
  1142. int findroom(int no){
  1143. struct Room ro;
  1144. int i,n,f=0;
  1145. n=getFileElement(_room,sizeof(Room));
  1146. f_ro=fopen(_room,"rb+");
  1147. rewind(f_ro);
  1148. for(i=0;i<n;i++){
  1149. fread(&ro,sizeof(Room),1,f_ro);
  1150. if(no==ro.no){
  1151. if(ro.sta==STAY){
  1152. f=2;
  1153. }else{
  1154. f=1;
  1155. }
  1156. }
  1157. }fclose(f_ro);
  1158. return f;
  1159. }
  1160. int findpatid(char id[10]){
  1161. struct Patient pat;
  1162. int i,n,f=0;
  1163. n=getFileElement(_pati,sizeof(Patient));
  1164. f_pat=fopen(_pati,"rb+");
  1165. rewind(f_pat);
  1166. for(i=0;i<n;i++){
  1167. fread(&pat,sizeof(Patient),1,f_pat);
  1168. if(strcmp(id,pat.id)==0){
  1169. f=1;
  1170. break;
  1171. }
  1172. }fclose(f_pat);
  1173. return f;
  1174. }
  1175. int finddocid(char id[10]){
  1176. struct Doctor doc;
  1177. int i,n,f=0;
  1178. n=getFileElement(_doct,sizeof(Doctor));
  1179. f_doc=fopen(_doct,"rb+");
  1180. rewind(f_doc);
  1181. for(i=0;i<n;i++){
  1182. fread(&doc,sizeof(Doctor),1,f_doc);
  1183. if(strcmp(id,doc.id)==0){
  1184. f=1;
  1185. break;
  1186. }
  1187. }fclose(f_doc);
  1188. return f;
  1189. }
  1190. void addroom(){
  1191. struct Room ro;
  1192. struct Types type;
  1193. int no,i,n,nt,ty;
  1194. char ch;
  1195. char text[2][30]={"<Room added>","<<Enter to add another>>"};
  1196. char textt[2][30]={"<Do not have type of room>","<<Enter to add type>>"};
  1197. char head[30]="NEW ROOM";
  1198. do{
  1199. s: clrwin();
  1200. help();
  1201. drawwindow(head,22,7,57,17,12);
  1202. n=getFileElement(_type,sizeof(Types));
  1203. if(n==0){
  1204. notice(textt,24,10,55,15);
  1205. if(getch()!=13) break;
  1206. addtype();
  1207. clrwin();
  1208. drawwindow(head,22,7,57,17,12);
  1209. }
  1210. gotoxy(12,4);textcolor(15);cprintf("Room No.: ");no=atoi(input(1,5,15));
  1211. if(no==0) break;
  1212. if(findroom(no)!=0){
  1213. notice(">This room is exist<",24,10,55,15);
  1214. blockey();
  1215. fclose(f_ro);
  1216. goto s;
  1217. }
  1218. gotoxy(12,6);textcolor(15);cprintf("Type: ");
  1219. window(39,12,51,12);
  1220. ty=selecttype();
  1221. if(ty==-1) break;
  1222. else {
  1223. nt=getFileElement(_type,sizeof(Types));
  1224. f_ty=fopen(_type,"rb+");
  1225. rewind(f_ty);
  1226. for(i=0;i<nt;i++){
  1227. fread(&type,sizeof(Types),1,f_ty);
  1228. if(type.co==ty){
  1229. ro.type.co=type.co;
  1230. stpcpy(ro.type.na,type.na);
  1231. ro.type.pri=type.pri;
  1232. }
  1233. }
  1234. fclose(f_ty);
  1235. }
  1236. ro.no=no;
  1237. ro.sta=EMPTY;
  1238. f_ro=fopen(_room,"ab");
  1239. fwrite(&ro,sizeof(Room),1,f_ro);
  1240. fclose(f_ro);
  1241. notice(text,24,10,55,15);
  1242. ch=blockey();
  1243. if(ch==27) break;
  1244. }while(1);
  1245. }
  1246. void checkoutinput(int opt){
  1247. struct Patient pat;
  1248. char fname[20],lname[20];
  1249. char id[10],ch,c;
  1250. int i,n,f=0,nf=0,no;
  1251. char head[30]="CHECKOUT PATIENT";
  1252.  
  1253. do{ n=getFileElement(_pati,sizeof(Patient));
  1254. f=0;nf=0;
  1255. Patient *source =(Patient*) calloc(n,sizeof(Patient));
  1256. clrwin();
  1257. help();
  1258. drawwindow("SEARCH PATIENT TO CHECKOUT",22,7,57,17,12);
  1259. if(n==0){
  1260. gotoxy(3,5);textcolor(15);
  1261. cprintf("<There are no Patient to Checkout>");
  1262. blockey();
  1263. break;
  1264. }
  1265. if(opt==1){
  1266. gotoxy(14,5);textcolor(15);cprintf("ID: "); strcpy(id,input(3,9,15));
  1267. if(strcmp(id,"00")==0) break;
  1268. f_pat=fopen(_pati,"rb");
  1269. rewind(f_pat);
  1270. for(i=0; i<n; i++) {
  1271. fread(&pat,sizeof(Patient),1,f_pat);
  1272. if(strcmp(id,pat.id)==0){
  1273. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  1274. fread(&source[nf],sizeof(Patient),1,f_pat);
  1275. nf++;
  1276. f=1;
  1277. }
  1278. }fclose(f_pat);
  1279. }
  1280. if(opt==2){
  1281. gotoxy(10,5);textcolor(15);cprintf("First Name: "); strcpy(fname,input(2,14,15));
  1282. if(strcmp(fname,"00")==0) break;
  1283. else strupr(fname);
  1284. f_pat=fopen(_pati,"rb");
  1285. rewind(f_pat);
  1286. for(i=0; i<n; i++) {
  1287. fread(&pat,sizeof(Patient),1,f_pat);
  1288. if(strstr(pat.fname,fname)!=0||stricmp(pat.fname,fname)==0){
  1289. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  1290. fread(&source[nf],sizeof(Patient),1,f_pat);
  1291. nf++;
  1292. f=1;
  1293. }
  1294. }fclose(f_pat);
  1295. sortpatname(source,nf);
  1296. }
  1297. if(opt==3){
  1298. gotoxy(10,5);textcolor(15);cprintf("Last Name: "); strcpy(lname,input(2,14,15));
  1299. if(strcmp(lname,"00")==0) break;
  1300. else strupr(fname);
  1301. f_pat=fopen(_pati,"rb");
  1302. rewind(f_pat);
  1303. for(i=0; i<n; i++) {
  1304. fread(&pat,sizeof(Patient),1,f_pat);
  1305. if(strstr(pat.lname,lname)!=0||stricmp(pat.lname,lname)==0){
  1306. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  1307. fread(&source[nf],sizeof(Patient),1,f_pat);
  1308. nf++;
  1309. f=1;
  1310. }
  1311. }fclose(f_pat);
  1312. sortpatname(source,nf);
  1313. }
  1314. if(opt==4){
  1315. gotoxy(12,5);textcolor(15);cprintf("Room No.: "); no=atoi(input(1,5,15));
  1316. if(no==0) break;
  1317. f_pat=fopen(_pati,"rb");
  1318. rewind(f_pat);
  1319. for(i=0; i<n; i++) {
  1320. fread(&pat,sizeof(Patient),1,f_pat);
  1321. if(pat.ro==no){
  1322. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  1323. fread(&source[nf],sizeof(Patient),1,f_pat);
  1324. nf++;
  1325. f=1;
  1326. }
  1327. }fclose(f_pat);
  1328. sortpat(source,nf);
  1329. }
  1330. if(f==1){
  1331. if(viewpat(head,source,nf,0)==13)
  1332. continue;
  1333. else break;
  1334. }
  1335.  
  1336. if(f==0){
  1337. notice("<Patient not found>",24,10,55,15);
  1338. blockey();
  1339. continue;
  1340. }
  1341. if(ch==27) break;
  1342. }while(1);
  1343. }
  1344.  
  1345. int checkout(char id[10]){
  1346. struct Room ro;
  1347. struct Patient pat;
  1348. struct date da;
  1349. int n,i,j,nr;
  1350. char ch;
  1351. char head[30]="CHECKOUT PATIENT";
  1352. char text[2][30]={"<Patient checked out>","<<Enter to checkout another>>"};
  1353. float paid=0,pay=0;
  1354.  
  1355. //Get period of staying.
  1356. double second;
  1357. int tperiod;
  1358. time(&current);
  1359. struct tm period;
  1360. gt = localtime(&current);
  1361. n=getFileElement(_pati,sizeof(Patient));
  1362. f_pat=fopen(_pati,"rb+");
  1363. rewind(f_pat);
  1364. for(i=0; i<n; i++) {
  1365. fread(&pat,sizeof(Patient),1,f_pat);
  1366. if(strcmp(id,pat.id)==0)
  1367. break;
  1368. }fclose(f_pat);
  1369. nr=getFileElement(_room,sizeof(Room));
  1370. f_ro=fopen(_room,"rb");
  1371. rewind(f_ro);
  1372. for(j=0;j<nr;j++){
  1373. fread(&ro,sizeof(Room),1,f_ro);
  1374. if(ro.no==pat.ro)
  1375. break;
  1376. }fclose(f_ro);
  1377.  
  1378. period.tm_hour = pat.regi.hour;
  1379. period.tm_min = pat.regi.min;
  1380. period.tm_sec = 0;
  1381. period.tm_year = pat.regi.year-1900;
  1382. period.tm_mon = pat.regi.mon-1;
  1383. period.tm_mday = pat.regi.day;
  1384. second = difftime(current,mktime(&period));
  1385.  
  1386. time(&current);
  1387. gt = localtime(&current);
  1388.  
  1389. if(pat.regi.day==gt->tm_mday || (gt->tm_mday - pat.regi.day==1 && gt->tm_hour <= 12)){
  1390. tperiod=1;
  1391. } else tperiod = 1+((second/60)/60)/24;
  1392.  
  1393. paid=(tperiod*ro.type.pri);
  1394. clrwin();
  1395. help();
  1396. drawwindow(head,12,7,69,20,5);
  1397. getdate(&da);
  1398. textcolor(14);
  1399. gotoxy(1,1);printf("Name : ");cprintf("%s %s",pat.fname,pat.lname);
  1400. gotoxy(1,3);printf("Sex : ");cprintf("%c",pat.sex);
  1401. gotoxy(1,5);printf("Room No. : ");cprintf("%03d",ro.no);
  1402. gotoxy(1,7);printf("Type : ");cprintf("%s",ro.type.na);
  1403. gotoxy(1,9);printf("Price : ");cprintf("$%.2f/day",ro.type.pri);
  1404. gotoxy(1,11);printf("Date in : ");cprintf("%02d/%02d/%d",pat.regi.day,pat.regi.mon,pat.regi.year);
  1405. gotoxy(1,13);printf("Date Out : ");cprintf("%02d/%02d/%d",gt->tm_mday,gt->tm_mon+1,gt->tm_year+1900);
  1406. drawwindow("PAYMENT",45,11,64,16,3);
  1407. gotoxy(1,2);printf("Other pay = $ "); pay=inputf(10,15); //problem with float
  1408. if(pay==0.0){ goto end;}
  1409. gotoxy(1,4);printf("Total pay = ");printf("$%.2f",paid+pay);
  1410. deletepat(id);
  1411. setroomEMPTY(pat.ro);
  1412. blockey();
  1413. notice(text,20,10,60,15);
  1414. ch=blockey();
  1415. end: return ch;
  1416. }
  1417.  
  1418. int addpatient(int no){
  1419. struct Room ro;
  1420. struct Patient pat;
  1421. struct date dai;
  1422. int i,n,nav=0,nr,opt,s=0;
  1423. int day=0,mon=0,year=0;
  1424. char ch;
  1425. char id[10],fname[15],lname[15],sex,blo[5],prob[20],nat[20],tel[20],addr[40];
  1426. char text[2][30]={"<Patient added>","<<Enter to add another>>"};
  1427. char blood[9][4]={"00","O+","O-","A+","A-","B+","B-","AB+","AB-"};
  1428. char head[30]="NEW PATIENT";
  1429. opt=no;
  1430. do{
  1431. getdate(&dai);
  1432. clrwin();
  1433. help();
  1434. drawwindow(head,12,7,69,20,12);
  1435. nr=getFileElement(_room,sizeof(Room));
  1436. f_ro=fopen(_room,"rb");
  1437. rewind(f_ro);
  1438. for(i=0; i<nr; i++) {
  1439. fread(&ro,sizeof(Room),1,f_ro);
  1440. if(ro.sta==EMPTY){
  1441. nav++;
  1442. }
  1443. }fclose(f_ro);
  1444. if(nav==0){
  1445. gotoxy(14,7);textcolor(15);cprintf("<There are no available rooms>");
  1446. blockey();
  1447. s=0;
  1448. break;
  1449. }
  1450.  
  1451. if(no==0){
  1452. gotoxy(1,1);textcolor(15);cprintf("Room No.: ");no=atoi(input(1,5,15));
  1453. if(no==0) {s=0;break;}
  1454. if(findroom(no)!=1){
  1455. notice("<Unavailable Room>",24,10,55,15);
  1456. blockey();
  1457. no=0;
  1458. continue;
  1459. }
  1460. }else{
  1461. gotoxy(1,1);textcolor(15);cprintf("Room No.: %03d",no);
  1462. }
  1463. gotoxy(1,3);textcolor(15);cprintf("ID: "); strcpy(id,input(3,9,15));
  1464. if(strcmp(id,"00")==0) {s=0;break;}
  1465. if(finddocid(id)==1||findpatid(id)==1){
  1466. notice("<This ID is exist>",24,10,55,15);
  1467. ch=blockey();
  1468. if(ch==27){s=0;break;}
  1469. else continue;
  1470. }
  1471. gotoxy(1,5);textcolor(15);cprintf("First Name: "); strcpy(fname,input(2,14,15));
  1472. if(strcmp(fname,"00")==0) {s=0;break;}
  1473. else strupr(fname);
  1474. gotoxy(1,7);textcolor(15);cprintf("Last Name: "); strcpy(lname,input(2,14,15));
  1475. if(strcmp(lname,"00")==0) {s=0;break;}
  1476. else strupr(lname);
  1477. gotoxy(1,9);textcolor(15);cprintf("Sex: "); window(17,15,23,15);sex=selectsex();
  1478. if(sex=='n'){s=0;break;}
  1479. window(12,7,69,20);
  1480. date: gotoxy(1,11);textcolor(15);cprintf("Date of Birth: "); gotoxy(16,11);inputdat(day,mon,year,15);
  1481. if(day==0||mon==0||year==0) {s=0;break;}
  1482. else if(day>31||mon>12||year<1900||year>dai.da_year||(mon>dai.da_mon&&year>=dai.da_year)||(day>dai.da_day&&mon>=dai.da_mon&&year>=dai.da_year)){
  1483. gotoxy(16,11);printf("DD/MM/YYYY");
  1484. day=0;mon=0;year=0;
  1485. goto date;
  1486. }
  1487. gotoxy(1,13);textcolor(15);cprintf("Address: "); strcpy(addr,input(3,39,15));
  1488. if(strcmp(addr,"00")==0) {s=0;break;}
  1489. gotoxy(30,1);textcolor(15);cprintf("Blood Group: ");window(54,7,61,7); strcpy(blo,blood[selectblood()]);
  1490. if(strcmp(blo,"00")==0) {s=0;break;}
  1491. window(12,7,69,20);
  1492. gotoxy(30,3);textcolor(15);cprintf("Problem: ");strcpy(prob,input(2,19,15));
  1493. if(strcmp(prob,"00")==0) {s=0;break;}
  1494. gotoxy(30,5);textcolor(15);cprintf("Tel: "); strcpy(tel,input(1,19,15));
  1495. if(strcmp(tel,"00")==0) {s=0;break;}
  1496. gotoxy(30,7);textcolor(15);cprintf("Nationality: "); strcpy(nat,input(2,19,15));
  1497. if(strcmp(nat,"00")==0) {s=0;break;}
  1498.  
  1499. f_ro=fopen(_room,"rb+");
  1500. rewind(f_ro);
  1501. for(i=0; i<nr; i++) {
  1502. fread(&ro,sizeof(Room),1,f_ro);
  1503. if(ro.no==no){
  1504. ro.sta=STAY;
  1505. fseek(f_ro,-(int)sizeof(Room),SEEK_CUR);
  1506. fwrite(&ro,sizeof(Room),1,f_ro);
  1507. }
  1508. }fclose(f_ro);
  1509.  
  1510. time(&current);
  1511. gt = localtime(&current);
  1512.  
  1513. pat.ro=no;
  1514. strcpy(pat.id,id);
  1515. strcpy(pat.fname,fname);
  1516. strcpy(pat.lname,lname);
  1517. pat.sex=sex;
  1518. pat.birth.da_day=day;
  1519. pat.birth.da_mon=mon;
  1520. pat.birth.da_year=year;
  1521. strcpy(pat.addr,addr);
  1522. strcpy(pat.blo,blo);
  1523. strcpy(pat.prob,prob);
  1524. strcpy(pat.nat,nat);
  1525. strcpy(pat.tel,tel);
  1526. pat.regi.sec = gt->tm_sec;
  1527. pat.regi.min = gt->tm_min;
  1528. pat.regi.hour = gt->tm_hour;
  1529. pat.regi.day=gt->tm_mday;
  1530. pat.regi.mon=gt->tm_mon+1;
  1531. pat.regi.year=gt->tm_year+1900;
  1532. f_pat=fopen(_pati,"ab");
  1533. fwrite(&pat,sizeof(Patient),1,f_pat);
  1534. fclose(f_pat);
  1535. s=1;
  1536. if(opt!=0){
  1537. notice("<Patient added>",24,10,55,15);
  1538. blockey();
  1539. break;
  1540. }
  1541. notice(text,24,10,55,15);
  1542.  
  1543. ch=blockey();
  1544. if(ch==13)no=0;
  1545. if(ch==27)break;
  1546. }while(1);
  1547. return s;
  1548. }
  1549. void welc(){
  1550. textcolor(11);
  1551. textbackground(BLUE);
  1552. window(1,1,80,25);
  1553. clrscr();
  1554. gotoxy(23,3);printf("\x20\x5f\x20\x20\x20\x5f\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x5f\x20\x5f\x20\x20\x20\x20\x20\x20\x20\x20\x5f\x20");
  1555. gotoxy(23,22);printf("\x20\x20\x20\x20\x20\x20\x20\x7c\x5f\x5f\x5f\x2f");delay(100);
  1556. gotoxy(23,4);printf("\x7c\x20\x7c\x20\x7c\x20\x7c\x20\x5f\x5f\x5f\x20\x20\x5f\x5f\x5f\x5f\x20\x5f\x20\x5f\x5f\x20\x7c\x5f\x7c\x20\x7c\x5f\x20\x5f\x5f\x20\x5f\x7c\x20\x7c");
  1557. gotoxy(23,21);printf("\x7c\x5f\x5f\x5f\x5f\x2f\x20\x5c\x5f\x5f\x2c\x20\x7c\x5f\x5f\x5f\x5f\x2f\x5c\x5f\x5f\x5c\x5f\x5f\x5f\x5f\x7c\x5f\x7c\x20\x7c\x5f\x7c\x20\x7c\x5f\x7c");delay(100);
  1558. gotoxy(23,5);printf("\x7c\x20\x7c\x5f\x7c\x20\x7c\x2f\x20\x5f\x20\x5c\x2f\x20\x5f\x5f\x5f\x7c\x20\x27\x5f\x20\x5c\x7c\x20\x7c\x20\x5f\x5f\x2f\x20\x5f\x60\x20\x7c\x20\x7c");
  1559. gotoxy(23,20);printf("\x20\x5f\x5f\x5f\x29\x20\x7c\x20\x7c\x5f\x7c\x20\x5c\x5f\x5f\x5f\x20\x5c\x20\x7c\x7c\x20\x20\x5f\x5f\x5f\x2f\x20\x7c\x20\x7c\x20\x7c\x20\x7c\x20\x7c");delay(100);
  1560. gotoxy(23,6);printf("\x7c\x20\x20\x5f\x20\x20\x7c\x20\x28\x5f\x29\x20\x5c\x5f\x5f\x5f\x20\x5c\x20\x7c\x5f\x29\x20\x7c\x20\x7c\x20\x7c\x7c\x20\x28\x5f\x29\x20\x7c\x20\x7c");
  1561. gotoxy(23,19);printf("\x5c\x5f\x5f\x5f\x20\x5c\x7c\x20\x7c\x20\x7c\x20\x2f\x20\x5f\x5f\x5f\x7c\x20\x5f\x5f\x2f\x20\x5f\x5f\x20\x5c\x20\x27\x5f\x20\x60\x20\x5f\x20\x5c\x20");delay(100);
  1562. gotoxy(23,7);printf("\x7c\x5f\x7c\x20\x7c\x5f\x7c\x5c\x5f\x5f\x5f\x2f\x7c\x5f\x5f\x5f\x5f\x2f\x20\x20\x5f\x5f\x2f\x7c\x5f\x7c\x5c\x5f\x5f\x5c\x5f\x5f\x2c\x5f\x7c\x5f\x7c");
  1563. gotoxy(23,18);printf("\x2f\x20\x5f\x5f\x5f\x7c\x20\x5f\x20\x20\x20\x5f\x20\x5f\x5f\x5f\x5f\x7c\x20\x7c\x5f\x20\x5f\x5f\x5f\x5f\x20\x5f\x20\x5f\x5f\x20\x5f\x5f\x5f\x20\x20");delay(100);
  1564. gotoxy(23,8);printf("\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7c\x5f\x7c");
  1565. gotoxy(23,17);printf("\x20\x5f\x5f\x5f\x5f\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x5f\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20");delay(100);
  1566. gotoxy(9,10);printf("\x20\x5f\x5f\x20\x20\x5f\x5f\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x5f\x20\x20\x20");
  1567. gotoxy(9,15);printf("\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7c\x5f\x5f\x5f\x2f");delay(100);
  1568. gotoxy(9,11);printf("\x7c\x20\x20\x5c\x2f\x20\x20\x7c\x20\x5f\x5f\x20\x5f\x20\x5f\x20\x5f\x5f\x20\x20\x20\x5f\x5f\x20\x5f\x20\x20\x5f\x5f\x20\x5f\x20\x20\x5f\x5f\x5f\x5f\x20\x5f\x20\x5f\x5f\x20\x5f\x5f\x5f\x20\x20\x20\x5f\x5f\x5f\x5f\x20\x5f\x20\x5f\x5f\x20\x7c\x20\x7c\x5f\x20");
  1569. gotoxy(9,14);printf("\x7c\x5f\x7c\x20\x20\x7c\x5f\x7c\x5c\x5f\x5f\x2c\x5f\x7c\x5f\x7c\x20\x7c\x5f\x7c\x5c\x5f\x5f\x2c\x5f\x7c\x5c\x5f\x5f\x2c\x20\x7c\x5c\x5f\x5f\x5f\x5f\x7c\x5f\x7c\x20\x7c\x5f\x7c\x20\x7c\x5f\x7c\x5c\x5f\x5f\x5f\x5f\x7c\x5f\x7c\x20\x7c\x5f\x7c\x5c\x5f\x5f\x7c");delay(100);
  1570. gotoxy(9,12);printf("\x7c\x20\x7c\x5c\x2f\x7c\x20\x7c\x2f\x20\x5f\x60\x20\x7c\x20\x27\x5f\x20\x5c\x20\x2f\x20\x5f\x60\x20\x7c\x2f\x20\x5f\x60\x20\x7c\x2f\x20\x5f\x5f\x20\x5c\x20\x27\x5f\x20\x60\x20\x5f\x20\x5c\x20\x2f\x20\x5f\x5f\x20\x5c\x20\x27\x5f\x20\x5c\x7c\x20\x5f\x5f\x7c");
  1571. gotoxy(9,13);printf("\x7c\x20\x7c\x20\x20\x7c\x20\x7c\x20\x28\x5f\x7c\x20\x7c\x20\x7c\x20\x7c\x20\x7c\x20\x28\x5f\x7c\x20\x7c\x20\x28\x5f\x7c\x20\x7c\x20\x20\x5f\x5f\x5f\x2f\x20\x7c\x20\x7c\x20\x7c\x20\x7c\x20\x7c\x20\x20\x5f\x5f\x5f\x2f\x20\x7c\x20\x7c\x20\x7c\x20\x7c\x5f\x20");delay(100);
  1572. textbackground(15);
  1573. window(7,3,10,8);
  1574. clrscr();
  1575. window(4,5,13,6);
  1576. clrscr();
  1577. window(71,3,74,8);
  1578. clrscr();
  1579. window(68,5,77,6);
  1580. clrscr();
  1581. window(1,1,80,25);
  1582. do{
  1583. gotoxy(30,24); printf(" < Press any key > ");
  1584. delay(500);if(kbhit()){getch();break;}
  1585. gotoxy(30,24); printf(" << Press any key >> ");
  1586. delay(500);if(kbhit()){getch();break;}
  1587. gotoxy(30,24); printf("<<< Press any key >>>");
  1588. delay(500);if(kbhit()){getch();break;}
  1589. }while(1);
  1590. }
  1591.  
  1592.  
  1593. void setroomEMPTY(int no){
  1594. int n,i;
  1595. struct Room ro;
  1596. n=getFileElement(_room,sizeof(Room));
  1597. f_ro=fopen(_room,"rb+");
  1598. rewind(f_ro);
  1599. for(i=0; i<n; i++) {
  1600. fread(&ro,sizeof(Room),1,f_ro);
  1601. if(ro.no==no){
  1602. ro.sta=EMPTY;
  1603. fseek(f_ro,-(int)sizeof(Room),SEEK_CUR);
  1604. fwrite(&ro,sizeof(Room),1,f_ro);
  1605. }
  1606. }fclose(f_ro);
  1607. }
  1608. void setroomSTAY(int no){
  1609. int n,i;
  1610. struct Room ro;
  1611. n=getFileElement(_room,sizeof(Room));
  1612. f_ro=fopen(_room,"rb+");
  1613. rewind(f_ro);
  1614. for(i=0; i<n; i++) {
  1615. fread(&ro,sizeof(Room),1,f_ro);
  1616. if(ro.no==no){
  1617. ro.sta=STAY;
  1618. fseek(f_ro,-(int)sizeof(Room),SEEK_CUR);
  1619. fwrite(&ro,sizeof(Room),1,f_ro);
  1620. }
  1621. }fclose(f_ro);
  1622. }
  1623. void patidetail(char id[10]){
  1624. struct Room ro;
  1625. struct Patient pat;
  1626. struct date da;
  1627. int n,i;
  1628. char head[30]="PATIENT DETAIL";
  1629. clrwin();
  1630. help();
  1631. drawwindow(head,12,7,69,20,12);
  1632. getdate(&da);
  1633. n=getFileElement(_pati,sizeof(Patient));
  1634. f_pat=fopen(_pati,"rb+");
  1635. rewind(f_pat);
  1636. for(i=0; i<n; i++) {
  1637. fread(&pat,sizeof(Patient),1,f_pat);
  1638. if(strcmp(id,pat.id)==0){
  1639. textcolor(14);
  1640. gotoxy(1,1);printf("Room No.: ");cprintf("%03d",pat.ro);
  1641. gotoxy(1,3);printf("ID: ");cprintf("%s",pat.id);
  1642. gotoxy(1,5);printf("First Name: ");cprintf("%s",pat.fname);
  1643. gotoxy(1,7);printf("Last Name: ");cprintf("%s",pat.lname);
  1644. gotoxy(1,9);printf("Sex: ");cprintf("%c",pat.sex);
  1645. gotoxy(1,11);printf("Date of Birth: ");cprintf("%02d/%02d/%d",pat.birth.da_day,pat.birth.da_mon,pat.birth.da_year);
  1646. gotoxy(1,13);printf("Address: ");cprintf("%s",pat.addr);
  1647. gotoxy(30,2);printf("Age: ");cprintf("%d",(da.da_mon>=pat.birth.da_mon&&da.da_day>=pat.birth.da_day)?(da.da_year-pat.birth.da_year):(da.da_year-pat.birth.da_year-1));
  1648. gotoxy(30,4);printf("Blood Group: ");cprintf("%s",pat.blo);
  1649. gotoxy(30,6);printf("Problem: ");cprintf("%s",pat.prob);
  1650. gotoxy(30,8);printf("Tel: ");cprintf("%s",pat.tel);
  1651. gotoxy(30,10);printf("Nationality: ");cprintf("%s",pat.nat);
  1652. gotoxy(30,12);printf("Date register :");cprintf("%02d/%02d/%d",pat.regi.day,pat.regi.mon,pat.regi.year);
  1653. break;
  1654. }
  1655. }fclose(f_pat);
  1656. }
  1657.  
  1658. void help(){
  1659. textcolor(0);
  1660. textbackground(7);
  1661. window(2,24,79,24);
  1662. clrscr();
  1663. printf(" ESC TO GO BACK.");
  1664. }
  1665. int about() {
  1666. char ch;
  1667. clrwin();
  1668. help();
  1669. drawwindow("ABOUT PROGRAM",13,7,67,20,RED);
  1670. gotoxy(15,1); printf("HOSPITAL MANAGEMENT SYSTEM");
  1671. gotoxy(15,2);printf("==========================");
  1672. gotoxy(13,4);textcolor(YELLOW); cprintf("Lecturer : Heng Soman");
  1673.  
  1674. gotoxy(13,7);textcolor(9); cprintf("Created by : SRUN VITOU");
  1675. gotoxy(13,9);textcolor(9); cprintf("Started : Friday,3,April,2015");
  1676. gotoxy(13,11);textcolor(9); cprintf("Finished : Monday,13,April,2015");
  1677. gotoxy(13,13);textcolor(9); cprintf("Version : 1.0");
  1678. while(blockey()==13);
  1679. return 4;
  1680. }
  1681. void docdetail(char id[10]){
  1682. struct Doctor doc;
  1683. struct date da;
  1684. int n,i;
  1685. char head[30]="DOCTOR DETAIL";
  1686. clrwin();
  1687. help();
  1688. drawwindow(head,12,7,69,20,12);
  1689. getdate(&da);
  1690. n=getFileElement(_doct,sizeof(Doctor));
  1691. f_doc=fopen(_doct,"rb+");
  1692. rewind(f_doc);
  1693. for(i=0; i<n; i++) {
  1694. fread(&doc,sizeof(Doctor),1,f_doc);
  1695. if(strcmp(id,doc.id)==0){
  1696. gotoxy(1,1);textcolor(14);printf("ID: ");cprintf("%s",doc.id);
  1697. gotoxy(1,3);textcolor(14);printf("First Name: ");cprintf("%s",doc.fname);
  1698. gotoxy(1,5);textcolor(14);printf("Last Name: ");cprintf("%s",doc.lname);
  1699. gotoxy(1,7);textcolor(14);printf("Sex: ");cprintf("%c",doc.sex);
  1700. gotoxy(1,9);textcolor(14);printf("Date of Birth: ");cprintf("%02d/%02d/%d",doc.birth.da_day,doc.birth.da_mon,doc.birth.da_year);
  1701. gotoxy(1,11);textcolor(14);printf("E-mail: ");cprintf("%s",doc.email);
  1702. gotoxy(1,13);textcolor(14);printf("Address: ");cprintf("%s",doc.addr);
  1703. gotoxy(30,2);textcolor(14);printf("Age: ");cprintf("%d",(da.da_mon>=doc.birth.da_mon&&da.da_day>=doc.birth.da_day)?(da.da_year-doc.birth.da_year):(da.da_year-doc.birth.da_year-1));
  1704. gotoxy(30,4);textcolor(14);printf("Blood Group: ");cprintf("%s",doc.blo);
  1705. gotoxy(30,6);textcolor(14);printf("Tel: ");cprintf("%s",doc.tel);
  1706. gotoxy(30,8);textcolor(14);printf("Specialty: ");cprintf("%s",doc.spec);
  1707. gotoxy(30,10);textcolor(14);printf("Nationality: ");cprintf("%s",doc.nat);
  1708. gotoxy(30,12);textcolor(14);printf("Date of joining: ");cprintf("%02d/%02d/%d",doc.join.day,doc.join.mon,doc.join.year);
  1709. break;
  1710. }
  1711. }fclose(f_pat);
  1712. }
  1713. void adddoc(){
  1714. struct Doctor doc;
  1715. struct date dai;
  1716. int day=0,mon=0,year=0;
  1717. char ch;
  1718. char id[10],fname[15],lname[15],sex,blo[5],spec[20],nat[20],tel[20],email[35],addr[40];
  1719. char text[2][30]={"<Doctor added>","<<Enter to add another>>"};
  1720. char blood[9][4]={"00","O+","O-","A+","A-","B+","B-","AB+","AB-"};
  1721. char head[30]="NEW DOCTOR";
  1722. do{
  1723. getdate(&dai);
  1724. clrwin();
  1725. help();
  1726. drawwindow(head,12,7,69,20,12);
  1727. gotoxy(1,1);textcolor(15);cprintf("ID: "); strcpy(id,input(3,9,15));
  1728. if(strcmp(id,"00")==0) break;
  1729. if(finddocid(id)==1||findpatid(id)==1){
  1730. notice("<This ID is exist>",24,10,55,15);
  1731. blockey();
  1732. continue;
  1733. }
  1734. gotoxy(1,3);textcolor(15);cprintf("First Name: "); strcpy(fname,input(2,14,15));
  1735. if(strcmp(fname,"00")==0) break;
  1736. else strupr(fname);
  1737. gotoxy(1,5);textcolor(15);cprintf("Last Name: "); strcpy(lname,input(2,14,15));
  1738. if(strcmp(lname,"00")==0) break;
  1739. else strupr(lname);
  1740. gotoxy(1,7);textcolor(15);cprintf("Sex: "); window(17,13,23,13);sex=selectsex();
  1741. if(sex=='n')break;
  1742. window(12,7,69,20);
  1743. date: gotoxy(1,9);textcolor(15);cprintf("Date of Birth: "); gotoxy(16,9);inputdat(day,mon,year,15);
  1744. if(day==0||mon==0||year==0) break;
  1745. else if(day>31||mon>12||year<1900||year>dai.da_year||(mon>dai.da_mon&&year>=dai.da_year)||(day>dai.da_day&&mon>=dai.da_mon&&year>=dai.da_year)){
  1746. gotoxy(16,9);printf("DD/MM/YYYY");
  1747. day=0;mon=0;year=0;
  1748. goto date;
  1749. }
  1750. gotoxy(1,11);textcolor(15);cprintf("E-mail: "); strcpy(email,input(3,34,15));
  1751. if(strcmp(email,"00")==0) break;
  1752. gotoxy(1,13);textcolor(15);cprintf("Address: "); strcpy(addr,input(3,39,15));
  1753. if(strcmp(addr,"00")==0) break;
  1754. gotoxy(30,1);textcolor(15);cprintf("Blood Group: ");window(54,7,61,7); strcpy(blo,blood[selectblood()]);
  1755. if(strcmp(blo,"00")==0) break;
  1756. window(12,7,69,20);
  1757. gotoxy(30,3);textcolor(15);cprintf("Tel: "); strcpy(tel,input(1,19,15));
  1758. if(strcmp(tel,"00")==0) break;
  1759. gotoxy(30,5);textcolor(15);cprintf("Specialty: ");strcpy(spec,input(2,17,15));
  1760. if(strcmp(spec,"00")==0) break;
  1761. else strupr(spec);
  1762. gotoxy(30,7);textcolor(15);cprintf("Nationality: "); strcpy(nat,input(2,15,15));
  1763. if(strcmp(nat,"00")==0) break;
  1764.  
  1765. time(&current);
  1766. gt = localtime(&current);
  1767.  
  1768. strcpy(doc.id,id);
  1769. strcpy(doc.fname,fname);
  1770. strcpy(doc.lname,lname);
  1771. doc.sex=sex;
  1772. doc.birth.da_day=day;
  1773. doc.birth.da_mon=mon;
  1774. doc.birth.da_year=year;
  1775. strcpy(doc.blo,blo);
  1776. strcpy(doc.addr,addr);
  1777. strcpy(doc.nat,nat);
  1778. strcpy(doc.tel,tel);
  1779. strcpy(doc.email,email);
  1780. strcpy(doc.spec,spec);
  1781. doc.join.sec = gt->tm_sec;
  1782. doc.join.min = gt->tm_min;
  1783. doc.join.hour = gt->tm_hour;
  1784. doc.join.day=gt->tm_mday;
  1785. doc.join.mon=gt->tm_mon+1;
  1786. doc.join.year=gt->tm_year+1900;
  1787. f_doc=fopen(_doct,"ab");
  1788. fwrite(&doc,sizeof(Doctor),1,f_doc);
  1789. fclose(f_doc);
  1790. notice(text,24,10,55,15);
  1791. ch=blockey();
  1792. if(ch==27) break;
  1793. }while(1);
  1794. }
  1795. void deletetypeinput(){
  1796. struct Types type;
  1797. char t[20],ty[10],ch;
  1798. int code,i,n,f;
  1799. float pri;
  1800. char text[2][30]={"<Type Deleted>","<<Enter to Delete another>>"};
  1801. char head[30]="DELETE TYPE";
  1802. do{
  1803. s: clrwin();
  1804. help();
  1805. drawwindow(head,22,7,57,17,12);
  1806. n=getFileElement(_type,sizeof(Types));
  1807. if(n==0){
  1808. gotoxy(5,5);textcolor(15);
  1809. cprintf("<There are no type to delete>");
  1810. blockey();
  1811. break;
  1812. }
  1813. gotoxy(10,5);textcolor(15);cprintf("Code: ");code=atoi(input(1,5,15));
  1814. if(code==0) break;
  1815. f_ty=fopen(_type,"rb+");
  1816. rewind(f_ty);
  1817. for(i=0;i<n;i++){
  1818. fread(&type,sizeof(Types),1,f_ty);
  1819. if(code==type.co){
  1820. f=1;
  1821. break;
  1822. }else{
  1823. f=0;
  1824. }
  1825. }fclose(f_ty);
  1826. if(f==0){
  1827. notice("<Type not found>",24,10,55,15);
  1828. blockey();
  1829. goto s;
  1830. }
  1831. if(f==1) {
  1832. if(confirm("Delete Type")==0)
  1833. continue;
  1834. else{
  1835. deletetype(code);
  1836. notice(text,24,10,55,15);
  1837. }
  1838.  
  1839. }
  1840. ch=blockey();
  1841. if(ch==27) break;
  1842. }while(1);
  1843. }
  1844. void deletetype(int code){
  1845. int i,n;
  1846. struct Types type;
  1847. n=getFileElement(_type,sizeof(Types));
  1848. f_ty=fopen(_type,"rb+");
  1849. rewind(f_ty);
  1850. //Temporary file.
  1851. FILE *temp = fopen("TEMP","wb+");
  1852. for(i=0; i<n; i++) {
  1853. fread(&type,sizeof(Types),1,f_ty);
  1854. if(type.co!=code) {
  1855. fwrite(&type,sizeof(Types),1,temp);
  1856. }
  1857. }
  1858. fclose(temp);
  1859. fclose(f_ty);
  1860. remove(_type);
  1861. rename("TEMP",_type);
  1862. }
  1863.  
  1864. void deleteroom(){
  1865. struct Room ro;
  1866. char t[20],ty[10],ch;
  1867. int no,i,n,f;
  1868. float pri;
  1869. char text[2][30]={"<Room Deleted>","<<Enter to Delete another>>"};
  1870. char head[30]="DELETE ROOM";
  1871. do{
  1872. clrwin();
  1873. help();
  1874. drawwindow(head,22,7,57,17,12);
  1875. n=getFileElement(_room,sizeof(Room));
  1876. if(n==0){
  1877. gotoxy(5,5);textcolor(15);
  1878. cprintf("<There are no room to delete>");
  1879. blockey();
  1880. break;
  1881. }
  1882. gotoxy(12,5);textcolor(15);cprintf("Room No.: ");no=atoi(input(1,5,15));
  1883. if(no==0) break;
  1884. f=findroom(no);
  1885. if(f==1) {
  1886. f_ro=fopen(_room,"rb+");
  1887. rewind(f_ro);
  1888. if(confirm("Deleting")==0){ fclose(f_ro);continue;}
  1889. else{
  1890. FILE *temp = fopen("TEMP","wb+");
  1891. for(i=0; i<n; i++) {
  1892. fread(&ro,sizeof(Room),1,f_ro);
  1893. if(ro.no!=no) {
  1894. fwrite(&ro,sizeof(Room),1,temp);
  1895. }
  1896. }
  1897. fclose(temp);
  1898. }
  1899. fclose(f_ro);
  1900. remove(_room);
  1901. rename("TEMP",_room);
  1902. notice(text,24,10,55,15);
  1903. }
  1904. if(f==2){
  1905. notice("<This room has Patient>",24,10,55,15);
  1906. }
  1907. if(f==0){
  1908. notice("<Room not found>",24,10,55,15);
  1909. }
  1910. ch=blockey();
  1911. if(ch==27) break;
  1912. }while(1);
  1913. }
  1914. int deletedoc(char id[10]){
  1915. struct Doctor doc;
  1916. int n,i,y;
  1917. n=getFileElement(_doct,sizeof(Doctor));
  1918. f_doc=fopen(_doct,"rb+");
  1919. rewind(f_doc);
  1920. FILE *temp = fopen("TEMP","wb+");
  1921. for(i=0; i<n; i++) {
  1922. fread(&doc,sizeof(Doctor),1,f_doc);
  1923. if(strcmp(doc.id,id)!=0) {
  1924. fwrite(&doc,sizeof(Doctor),1,temp);
  1925. }
  1926. }
  1927. fclose(temp);
  1928. fclose(f_doc);
  1929. remove(_doct);
  1930. rename("TEMP",_doct);
  1931. y=1;
  1932. end:
  1933. return y;
  1934. }
  1935. void deletepat(char id[10]){
  1936. struct Patient pat;
  1937. int n,i;
  1938. n=getFileElement(_pati,sizeof(Patient));
  1939. f_pat=fopen(_pati,"rb+");
  1940. rewind(f_pat);
  1941.  
  1942. FILE *temp = fopen("TEMP","wb+");
  1943. for(i=0; i<n; i++) {
  1944. fread(&pat,sizeof(Patient),1,f_pat);
  1945. if(strcmp(pat.id,id)!=0) {
  1946. fwrite(&pat,sizeof(Patient),1,temp);
  1947. }
  1948. }
  1949. fclose(temp);
  1950. fclose(f_pat);
  1951. remove(_pati);
  1952. rename("TEMP",_pati);
  1953. }
  1954. void deletedocinput(int opt){
  1955. struct Doctor doc;
  1956. char fname[20],lname[20];
  1957. char id[10],ch;
  1958. int i,n,f,nf;
  1959. char head[30]="DELETE DOCTOR";
  1960. do{
  1961. f=0;nf=0;
  1962. n=getFileElement(_doct,sizeof(Doctor));
  1963. Doctor *source =(Doctor*) calloc(n,sizeof(Doctor));
  1964. clrwin();
  1965. help();
  1966. drawwindow("SEARCH DOCTOR TO DELETE",22,7,57,17,12);
  1967.  
  1968. if(n==0){
  1969. gotoxy(4,5);textcolor(15);
  1970. cprintf("<There are no Doctor to delete>");
  1971. blockey();
  1972. break;
  1973. }
  1974. if(opt==1){
  1975. gotoxy(14,5);textcolor(15);cprintf("ID: "); strcpy(id,input(3,9,15));
  1976. if(strcmp(id,"00")==0) break;
  1977.  
  1978. f_doc=fopen(_doct,"rb");
  1979. for(i=0;i<n;i++){
  1980. fread(&doc,sizeof(Doctor),1,f_doc);
  1981. if(strcmp(doc.id,id)==0){
  1982. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  1983. fread(&source[nf],sizeof(Doctor),1,f_doc);
  1984. nf++;
  1985. f=1;
  1986. }
  1987. }
  1988. fclose(f_doc);
  1989. }
  1990. if(opt==2){
  1991. gotoxy(10,5);textcolor(15);cprintf("First Name: "); strcpy(fname,input(2,14,15));
  1992. if(strcmp(fname,"00")==0) break;
  1993. else strupr(fname);
  1994.  
  1995. f_doc=fopen(_doct,"rb");
  1996. for(i=0;i<n;i++){
  1997. fread(&doc,sizeof(Doctor),1,f_doc);
  1998. if(strstr(doc.fname,fname)!=0||strcmp(doc.fname,fname)==0){
  1999. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  2000. fread(&source[nf],sizeof(Doctor),1,f_doc);
  2001. nf++;
  2002. f=1;
  2003. }
  2004. }
  2005. fclose(f_doc);
  2006. }
  2007. if(opt==3){
  2008. gotoxy(10,5);textcolor(15);cprintf("Last Name: "); strcpy(lname,input(2,14,15));
  2009. if(strcmp(lname,"00")==0) break;
  2010. else strupr(lname);
  2011. f_doc=fopen(_doct,"rb");
  2012. for(i=0;i<n;i++){
  2013. fread(&doc,sizeof(Doctor),1,f_doc);
  2014. if(strstr(doc.lname,lname)!=0||strcmp(doc.lname,lname)==0){
  2015. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  2016. fread(&source[nf],sizeof(Doctor),1,f_doc);
  2017. nf++;
  2018. f=1;
  2019. }
  2020. }
  2021. fclose(f_doc);
  2022. }
  2023. if(f==1) {
  2024. if(viewdoc(head,source,nf,0)==27)break;
  2025. else continue;
  2026. }
  2027. if(f==0){
  2028. notice("<Doctor not found>",24,10,55,15);
  2029. }
  2030. ch=blockey();
  2031. if(ch==27) break;
  2032. }while(1);
  2033. }
  2034. int viewpat(char head[30],Patient *source,int n,int opt){
  2035. int i,temp=0,s=0,back=1,j=0;
  2036. char ch,c;
  2037. do{
  2038. clrwin();
  2039. help();
  2040. drawwindow(head,20,7,60,20,12);
  2041. gotoxy(1,1);printf("Room");gotoxy(11,1);printf("Name");
  2042. gotoxy(24,1);printf("Sex");gotoxy(31,1);printf("Tel");
  2043. if(n>13)temp=13;
  2044. else temp =n;
  2045. gotoxy(1,back+1);
  2046. textbackground(2);
  2047. for(j=0;j<41;j++)
  2048. cprintf(" ");
  2049. for(i=0;i<temp;i++){
  2050. gotoxy(1,i+2);printf("%03d",source[i+s].ro);gotoxy(9,i+2);printf("%s %s",source[i+s].fname,source[i+s].lname);
  2051. gotoxy(25,i+2);printf("%c",source[i+s].sex);gotoxy(31,i+2);printf("%s",source[i+s].tel);
  2052. }
  2053. ch: ch=getch();
  2054. switch(ch){
  2055. case 72:back--;if(back<1){back=1;s--;if(s<0){back=temp;s=n-temp;}}break;
  2056. case 80:back++;if(back>=temp+1){back=temp;s++;if(s>n-temp){back=1;s=0;}}break;
  2057. case 27:break;
  2058. case 13:break;
  2059. default:goto ch;
  2060. }
  2061. if(ch==13){
  2062. if(opt==1)patidetail(source[back-1+s].id);
  2063. else if(confirm("Checkout")==1){
  2064. ch=checkout(source[back-1+s].id);
  2065. if(ch==13||ch==27){
  2066. break;
  2067. }else continue;
  2068. }else continue;
  2069. blockey();
  2070. continue;
  2071. }
  2072. if(ch==27)break;
  2073. }while(1);
  2074. return ch;
  2075. }
  2076. int viewdoc(char head[30],Doctor *source,int n,int opt){
  2077. char text[2][30]={"<Doctor Deleted>","<<Enter to Delete another>>"};
  2078. int i,temp=0,s=0,back=1,j=0;
  2079. char ch,c;
  2080. do{
  2081. clrwin();
  2082. help();
  2083. drawwindow(head,20,7,60,20,12);
  2084. gotoxy(1,1);printf("ID");gotoxy(12,1);printf("Name");
  2085. gotoxy(24,1);printf("Sex");gotoxy(30,1);printf("Specialty");
  2086. if(n>13)temp=13;
  2087. else temp =n;
  2088. gotoxy(1,back+1);
  2089. textbackground(2);
  2090. for(j=0;j<41;j++)
  2091. cprintf(" ");
  2092. for(i=0;i<temp;i++){
  2093. gotoxy(1,i+2);printf("%s",source[i+s].id);gotoxy(9,i+2);printf("%s %s",source[i+s].fname,source[i+s].lname);
  2094. gotoxy(25,i+2);printf("%c",source[i+s].sex);gotoxy(31,i+2);printf("%s",source[i+s].spec);
  2095. }
  2096. ch: ch=getch();
  2097. switch(ch){
  2098. case 72:back--;if(back<1){back=1;s--;if(s<0){back=temp;s=n-temp;}}break;
  2099. case 80:back++;if(back>=temp+1){back=temp;s++;if(s>n-temp){back=1;s=0;}}break;
  2100. case 27:break;
  2101. case 13:break;
  2102. default:goto ch;
  2103. }
  2104. if(ch==13){
  2105. if(opt==1){
  2106. docdetail(source[back-1+s].id);
  2107. blockey();
  2108. continue;
  2109. }else if(confirm("Deleting")==1)
  2110. if(deletedoc(source[back-1+s].id)==1){
  2111. notice(text,24,10,55,15);
  2112. ch=blockey();
  2113. if(ch==27||ch==13)break;
  2114. }else continue;
  2115.  
  2116. }
  2117. if(ch==27)break;
  2118. }while(1);
  2119. return ch;
  2120. }
  2121. void findpat(int opt){
  2122. struct Patient pat;
  2123. char fullname1[40],fullname2[40],namef[40];
  2124. char id[10],ch,c;
  2125. int i,n,f=0,nf=0,no,day=0,mon=0,year=0;
  2126. char head[30]="SEARCH PATIENT";
  2127.  
  2128. do{
  2129. n=getFileElement(_pati,sizeof(Patient));
  2130. f=0;nf=0;day=0;mon=0;year=0;
  2131. Patient *source =(Patient*) calloc(n,sizeof(Patient));
  2132. clrwin();
  2133. help();
  2134. drawwindow(head,22,7,57,17,12);
  2135. if(n==0){
  2136. gotoxy(3,5);textcolor(15);
  2137. cprintf("<There are no Patient to search>");
  2138. blockey();
  2139. break;
  2140. }
  2141. if(opt==1){
  2142. gotoxy(14,5);textcolor(15);cprintf("ID: "); strcpy(id,input(3,9,15));
  2143. if(strcmp(id,"00")==0) break;
  2144. f_pat=fopen(_pati,"rb");
  2145. rewind(f_pat);
  2146. for(i=0; i<n; i++) {
  2147. fread(&pat,sizeof(Patient),1,f_pat);
  2148. if(strcmp(id,pat.id)==0){
  2149. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  2150. fread(&source[nf],sizeof(Patient),1,f_pat);
  2151. nf++;
  2152. f=1;
  2153. }
  2154. }fclose(f_pat);
  2155. }
  2156. if(opt==2){
  2157. gotoxy(10,5);textcolor(15);cprintf("Name: "); strcpy(namef,input(2,35,15));
  2158. if(strcmp(namef,"00")==0) break;
  2159. else strupr(namef);
  2160. f_pat=fopen(_pati,"rb");
  2161. rewind(f_pat);
  2162. for(i=0; i<n; i++) {
  2163. fread(&pat,sizeof(Patient),1,f_pat);
  2164. strcpy(fullname1,pat.fname);
  2165. strcat(fullname1," ");
  2166. strcat(fullname1,pat.lname);
  2167. strcpy(fullname2,pat.lname);
  2168. strcat(fullname2," ");
  2169. strcat(fullname2,pat.fname);
  2170. if(strstr(fullname1,namef)!=0||strstr(fullname2,namef)!=0){
  2171. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  2172. fread(&source[nf],sizeof(Patient),1,f_pat);
  2173. nf++;
  2174. f=1;
  2175. }
  2176. }fclose(f_pat);
  2177. sortpatname(source,nf);
  2178. }
  2179. if(opt==4){
  2180. gotoxy(5,5);textcolor(15);cprintf("Date of Check in: ");inputdat(day,mon,year,15);
  2181. if(day==0||mon==0||year==0) break;
  2182. f_pat=fopen(_pati,"rb");
  2183. rewind(f_pat);
  2184. for(i=0; i<n; i++) {
  2185. fread(&pat,sizeof(Patient),1,f_pat);
  2186. if(pat.regi.day==day&&pat.regi.mon==mon&&pat.regi.year==year){
  2187. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  2188. fread(&source[nf],sizeof(Patient),1,f_pat);
  2189. nf++;
  2190. f=1;
  2191. }
  2192. }fclose(f_pat);
  2193. sortpat(source,nf);
  2194. }
  2195. if(opt==3){
  2196. gotoxy(12,5);textcolor(15);cprintf("Room No.: "); no=atoi(input(1,5,15));
  2197. if(no==0) break;
  2198. f_pat=fopen(_pati,"rb");
  2199. rewind(f_pat);
  2200. for(i=0; i<n; i++) {
  2201. fread(&pat,sizeof(Patient),1,f_pat);
  2202. if(pat.ro==no){
  2203. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  2204. fread(&source[nf],sizeof(Patient),1,f_pat);
  2205. nf++;
  2206. f=1;
  2207. }
  2208. }fclose(f_pat);
  2209. sortpat(source,nf);
  2210. }
  2211. if(f==1){
  2212. viewpat(head,source,nf,1);
  2213. continue;
  2214. }
  2215.  
  2216. if(f==0){
  2217. notice("<Patient not found>",24,10,55,15);
  2218. ch=blockey();
  2219. if(ch==13)
  2220. continue;
  2221. }
  2222. if(ch==27) break;
  2223. }while(1);
  2224. }
  2225. void finddoc(int opt){
  2226. struct Doctor doc;
  2227. char fname[20],lname[20],spec[20];
  2228. char id[10],ch,c;
  2229. int i,n,f=0,nf=0;
  2230. char head[30]="SEARCH DOCTOR";
  2231.  
  2232. do{ n=getFileElement(_doct,sizeof(Doctor));
  2233. f=0;nf=0;
  2234. Doctor *source =(Doctor*) calloc(n,sizeof(Doctor));
  2235. clrwin();
  2236. help();
  2237. drawwindow(head,22,7,57,17,12);
  2238. if(n==0){
  2239. gotoxy(4,5);textcolor(15);
  2240. cprintf("<There are no Doctor to search>");
  2241. blockey();
  2242. break;
  2243. }
  2244. if(opt==1){
  2245. gotoxy(14,5);textcolor(15);cprintf("ID: "); strcpy(id,input(3,9,15));
  2246. if(strcmp(id,"00")==0) break;
  2247. f_doc=fopen(_doct,"rb");
  2248. rewind(f_doc);
  2249. for(i=0; i<n; i++) {
  2250. fread(&doc,sizeof(Doctor),1,f_doc);
  2251. if(strcmp(id,doc.id)==0){
  2252. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  2253. fread(&source[nf],sizeof(Doctor),1,f_doc);
  2254. nf++;
  2255. f=1;
  2256. }
  2257. }fclose(f_doc);
  2258. }
  2259. if(opt==2){
  2260. gotoxy(10,5);textcolor(15);cprintf("First Name: "); strcpy(fname,input(2,14,15));
  2261. if(strcmp(fname,"00")==0) break;
  2262. else strupr(fname);
  2263. f_doc=fopen(_doct,"rb");
  2264. rewind(f_doc);
  2265. for(i=0; i<n; i++) {
  2266. fread(&doc,sizeof(Doctor),1,f_doc);
  2267. if(strstr(doc.fname,fname)!=0||stricmp(doc.fname,fname)==0){
  2268. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  2269. fread(&source[nf],sizeof(Doctor),1,f_doc);
  2270. nf++;
  2271. f=1;
  2272. }
  2273. }fclose(f_doc);
  2274. }
  2275. if(opt==3){
  2276. gotoxy(10,5);textcolor(15);cprintf("Last Name: "); strcpy(lname,input(2,14,15));
  2277. if(strcmp(lname,"00")==0) break;
  2278. else strupr(lname);
  2279. f_doc=fopen(_doct,"rb");
  2280. rewind(f_doc);
  2281. for(i=0; i<n; i++) {
  2282. fread(&doc,sizeof(Doctor),1,f_doc);
  2283. if(strstr(doc.lname,lname)!=0||stricmp(doc.lname,lname)==0){
  2284. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  2285. fread(&source[nf],sizeof(Doctor),1,f_doc);
  2286. nf++;
  2287. f=1;
  2288. }
  2289. }fclose(f_doc);
  2290. }
  2291. if(opt==4){
  2292. gotoxy(11,5);textcolor(15);cprintf("Specialty: "); strcpy(spec,input(2,19,15));
  2293. if(strcmp(spec,"00")==0) break;
  2294. else strupr(spec);
  2295. f_doc=fopen(_doct,"rb");
  2296. rewind(f_doc);
  2297. for(i=0; i<n; i++) {
  2298. fread(&doc,sizeof(Doctor),1,f_doc);
  2299. if(strstr(doc.spec,spec)!=0||stricmp(doc.spec,spec)==0){
  2300. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  2301. fread(&source[nf],sizeof(Doctor),1,f_doc);
  2302. nf++;
  2303. f=1;
  2304. }
  2305. }fclose(f_doc);
  2306. }
  2307. if(f==1){
  2308. sortdoc(source,nf);
  2309. viewdoc(head,source,nf,1);
  2310. continue;
  2311. }
  2312.  
  2313. if(f==0){
  2314. notice("<Doctor not found>",24,10,55,15);
  2315. blockey();
  2316. continue;
  2317. }
  2318. if(ch==27) break;
  2319. }while(1);
  2320. }
  2321. void updatedoc(int opt){
  2322. struct Doctor doc;
  2323. struct date dai;
  2324. int day=0,mon=0,year=0,i,n,f;
  2325. char ch,c;
  2326. char id[10],idf[10],fname[15],lname[15],sex,blo[5],spec[20],nat[20],tel[20],email[35],addr[40];
  2327. char text[2][30]={"<Doctor updated>","<<Enter to update another>>"};
  2328. char blood[9][4]={"00","O+","O-","A+","A-","B+","B-","AB+","AB-"};
  2329. char head[30]="UPDATE DOCTOR";
  2330. do{
  2331. getdate(&dai);
  2332. f=0;
  2333. clrwin();
  2334. drawwindow("SEARCH DOCTOR TO UPDATE",22,7,57,17,12);
  2335. n=getFileElement(_doct,sizeof(Doctor));
  2336. if(n==0){
  2337. gotoxy(4,5);textcolor(15);
  2338. cprintf("<There are no Doctor to update>");
  2339. blockey();
  2340. break;
  2341. }
  2342. gotoxy(14,5);textcolor(15);cprintf("ID: "); strcpy(idf,input(3,9,15));
  2343. if(strcmp(idf,"00")==0) break;
  2344. f=finddocid(idf);
  2345. if(f==0)
  2346. notice("<Doctor not found>",24,10,55,15);
  2347. if(f==1){
  2348. clrwin();
  2349. drawwindow(head,12,7,69,20,12);
  2350. if(opt==1){
  2351. gotoxy(1,1);textcolor(15);cprintf("ID: "); strcpy(id,input(3,9,15));
  2352. if(strcmp(id,"00")==0) break;
  2353. if((finddocid(id)==1||findpatid(id)==1)&&strcmp(idf,id)!=0){
  2354. notice("<This ID is exist>",24,10,55,15);
  2355. blockey();
  2356. continue;
  2357. }
  2358.  
  2359. gotoxy(1,3);textcolor(15);cprintf("First Name: "); strcpy(fname,input(2,14,15));
  2360. if(strcmp(fname,"00")==0) break;
  2361. else strupr(fname);
  2362. gotoxy(1,5);textcolor(15);cprintf("Last Name: "); strcpy(lname,input(2,14,15));
  2363. if(strcmp(lname,"00")==0) break;
  2364. else strupr(lname);
  2365. gotoxy(1,7);textcolor(15);cprintf("Sex: "); window(17,13,23,13);sex=selectsex();
  2366. if(sex=='n')break;
  2367. window(12,7,69,20);
  2368. date: gotoxy(1,9);textcolor(15);cprintf("Date of Birth: "); gotoxy(16,9);inputdat(day,mon,year,15);
  2369. if(day==0||mon==0||year==0) break;
  2370. else if(day>31||mon>12||year<1900||year>dai.da_year||(mon>dai.da_mon&&year>=dai.da_year)||(day>dai.da_day&&mon>=dai.da_mon&&year>=dai.da_year)){
  2371. gotoxy(16,9);printf("DD/MM/YYYY");
  2372. day=0;mon=0;year=0;
  2373. goto date;
  2374. }
  2375. gotoxy(1,11);textcolor(15);cprintf("E-mail: "); strcpy(email,input(3,34,15));
  2376. if(strcmp(email,"00")==0) break;
  2377.  
  2378. gotoxy(1,13);textcolor(15);cprintf("Address: "); strcpy(addr,input(3,39,15));
  2379. if(strcmp(addr,"00")==0) break;
  2380.  
  2381. gotoxy(30,1);textcolor(15);cprintf("Blood Group: ");window(54,7,61,7); strcpy(blo,blood[selectblood()]);
  2382. if(strcmp(blo,"00")==0) break;
  2383. window(12,7,69,20);
  2384. gotoxy(30,3);textcolor(15);cprintf("Tel: "); strcpy(tel,input(1,19,15));
  2385. if(strcmp(tel,"00")==0) break;
  2386. gotoxy(30,5);textcolor(15);cprintf("Specialty: ");strcpy(spec,input(2,17,15));
  2387. if(strcmp(spec,"00")==0) break;
  2388. else strupr(spec);
  2389. gotoxy(30,7);textcolor(15);cprintf("Nationality: "); strcpy(nat,input(2,15,15));
  2390. if(strcmp(nat,"00")==0) break;
  2391. f_doc=fopen(_doct,"rb+");
  2392. rewind(f_doc);
  2393. for(i=0;i<n;i++){
  2394. fread(&doc,sizeof(Doctor),1,f_doc);
  2395. if(strcmp(idf,doc.id)==0){
  2396. time(&current);
  2397. gt = localtime(&current);
  2398. strcpy(doc.id,id);
  2399. strcpy(doc.fname,fname);
  2400. strcpy(doc.lname,lname);
  2401. doc.sex=sex;
  2402. doc.birth.da_day=day;
  2403. doc.birth.da_mon=mon;
  2404. doc.birth.da_year=year;
  2405. strcpy(doc.blo,blo);
  2406. strcpy(doc.addr,addr);
  2407. strcpy(doc.nat,nat);
  2408. strcpy(doc.tel,tel);
  2409. strcpy(doc.email,email);
  2410. strcpy(doc.spec,spec);
  2411. doc.join.sec = gt->tm_sec;
  2412. doc.join.min = gt->tm_min;
  2413. doc.join.hour = gt->tm_hour;
  2414. doc.join.day=gt->tm_mday;
  2415. doc.join.mon=gt->tm_mon+1;
  2416. doc.join.year=gt->tm_year+1900;
  2417. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  2418. fwrite(&doc,sizeof(Doctor),1,f_doc);
  2419. }
  2420. }fclose(f_doc);
  2421. notice(text,24,10,55,15);
  2422. }
  2423. if(opt==2){
  2424. gotoxy(10,6);textcolor(15);cprintf("First Name: "); strcpy(fname,input(2,14,15));
  2425. if(strcmp(fname,"00")==0) break;
  2426. else strupr(fname);
  2427. gotoxy(10,8);textcolor(15);cprintf("Last Name: "); strcpy(lname,input(2,14,15));
  2428. if(strcmp(lname,"00")==0) break;
  2429. else strupr(lname);
  2430. f_doc=fopen(_doct,"rb+");
  2431. rewind(f_doc);
  2432. for(i=0;i<n;i++){
  2433. fread(&doc,sizeof(Doctor),1,f_doc);
  2434. if(strcmp(idf,doc.id)==0){
  2435. strcpy(doc.fname,fname);
  2436. strcpy(doc.lname,lname);
  2437. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  2438. fwrite(&doc,sizeof(Doctor),1,f_doc);
  2439. notice(text,24,10,55,15);
  2440. }
  2441. }fclose(f_doc);
  2442.  
  2443. }
  2444. if(opt==3){
  2445. gotoxy(11,7);textcolor(15);cprintf("Specialty: ");strcpy(spec,input(2,17,15));
  2446. if(strcmp(spec,"00")==0) break;
  2447. else strupr(spec);
  2448. f_doc=fopen(_doct,"rb+");
  2449. rewind(f_doc);
  2450. for(i=0;i<n;i++){
  2451. fread(&doc,sizeof(Doctor),1,f_doc);
  2452. if(strcmp(doc.id,idf)==0){
  2453. strcpy(doc.spec,spec);
  2454. fseek(f_doc,-(int)sizeof(Doctor),SEEK_CUR);
  2455. fwrite(&doc,sizeof(Doctor),1,f_doc);
  2456. notice(text,24,10,55,15);
  2457. }
  2458. }
  2459. fclose(f_doc);
  2460. }
  2461.  
  2462.  
  2463. }
  2464. ch=blockey();
  2465. if(ch==27) break;
  2466. }while(1);
  2467. }
  2468. void updatepat(int opt){
  2469. struct Patient pat;
  2470. struct Room ro;
  2471. struct date dai;
  2472. int day=0,mon=0,year=0,i,n,f,no,nr,nav=0;
  2473. char ch;
  2474. char idf[10],id[10],fname[15],lname[15],sex,blo[5],prob[20],nat[20],tel[20],addr[40];
  2475. char text[2][30]={"<Patient updated>","<<Enter to update another>>"};
  2476. char blood[9][4]={"00","O+","O-","A+","A-","B+","B-","AB+","AB-"};
  2477. char head[30]="UPDATE PATIENT";
  2478. do{
  2479. getdate(&dai);
  2480. f=0;
  2481. clrwin();
  2482. drawwindow("SEARCH PATIENT TO UPDATE",22,7,57,17,12);
  2483. n=getFileElement(_pati,sizeof(Patient));
  2484. if(n==0){
  2485. gotoxy(4,5);textcolor(15);
  2486. cprintf("<There are no Patient to update>");
  2487. blockey();
  2488. break;
  2489. }
  2490. if(opt==3){
  2491. nr=getFileElement(_room,sizeof(Room));
  2492. f_ro=fopen(_room,"rb");
  2493. rewind(f_ro);
  2494. for(i=0; i<nr; i++) {
  2495. fread(&ro,sizeof(Room),1,f_ro);
  2496. if(ro.sta==EMPTY){
  2497. nav++;
  2498. }
  2499. }fclose(f_ro);
  2500. if(nav==0){
  2501. gotoxy(5,5);textcolor(15);
  2502. cprintf("<There are no available rooms>");
  2503. blockey();
  2504. break;
  2505. }
  2506. }
  2507. gotoxy(14,5);textcolor(15);cprintf("ID: "); strcpy(idf,input(3,9,15));
  2508. if(strcmp(idf,"00")==0) break;
  2509. f=findpatid(idf);
  2510. if(f==0)
  2511. notice("<Patient not found>",24,10,55,15);
  2512. if(f==1){
  2513. f1: f_pat=fopen(_pati,"rb+");
  2514. rewind(f_pat);
  2515. for(i=0;i<n;i++){
  2516. fread(&pat,sizeof(Patient),1,f_pat);
  2517. if(strcmp(id,pat.id)==0){
  2518. break;
  2519. }
  2520. }fclose(f_pat);
  2521. clrwin();
  2522. drawwindow(head,12,7,69,20,12);
  2523. if(opt==1){
  2524. gotoxy(1,1);textcolor(15);cprintf("Room No.: ");no=atoi(input(1,5,15));
  2525. if(no==0) break;
  2526. if(findroom(no)!=1&&no!=pat.ro){
  2527. notice("<Unavailable Room>",24,10,55,15);
  2528. blockey();
  2529. continue;
  2530. }
  2531. gotoxy(1,3);textcolor(15);cprintf("ID: "); strcpy(id,input(3,9,15));
  2532. if(strcmp(id,"00")==0) break;
  2533. if((finddocid(id)==1||findpatid(id)==1)&&strcmp(id,pat.id)!=0){
  2534. notice("<This ID is exist>",24,10,55,15);
  2535. ch=blockey();
  2536. if(ch==27)break;
  2537. else continue;
  2538. }
  2539. gotoxy(1,5);textcolor(15);cprintf("First Name: "); strcpy(fname,input(2,14,15));
  2540. if(strcmp(fname,"00")==0) break;
  2541. else strupr(fname);
  2542. gotoxy(1,7);textcolor(15);cprintf("Last Name: "); strcpy(lname,input(2,14,15));
  2543. if(strcmp(lname,"00")==0) break;
  2544. else strupr(lname);
  2545. gotoxy(1,9);textcolor(15);cprintf("Sex: "); window(17,15,23,15);sex=selectsex();
  2546. if(sex=='n')break;
  2547. window(12,7,69,20);
  2548. date: gotoxy(1,11);textcolor(15);cprintf("Date of Birth: "); gotoxy(16,11);inputdat(day,mon,year,15);
  2549. if(day==0||mon==0||year==0) break;
  2550. else if(day>31||mon>12||year<1900||year>dai.da_year||(mon>dai.da_mon&&year>=dai.da_year)||(day>dai.da_day&&mon>=dai.da_mon&&year>=dai.da_year)){
  2551. gotoxy(16,11);printf("DD/MM/YYYY");
  2552. day=0;mon=0;year=0;
  2553. goto date;
  2554. }
  2555. gotoxy(1,13);textcolor(15);cprintf("Address: "); strcpy(addr,input(3,39,15));
  2556. if(strcmp(addr,"00")==0) break;
  2557. gotoxy(30,1);textcolor(15);cprintf("Blood Group: ");window(54,7,61,7); strcpy(blo,blood[selectblood()]);
  2558. if(strcmp(blo,"00")==0) break;
  2559. window(12,7,69,20);
  2560. gotoxy(30,3);textcolor(15);cprintf("Problem: ");strcpy(prob,input(2,19,15));
  2561. if(strcmp(prob,"00")==0) break;
  2562. gotoxy(30,5);textcolor(15);cprintf("Tel: "); strcpy(tel,input(1,19,15));
  2563. if(strcmp(tel,"00")==0) break;
  2564. gotoxy(30,7);textcolor(15);cprintf("Nationality: "); strcpy(nat,input(2,19,15));
  2565. if(strcmp(nat,"00")==0) break;
  2566. setroomEMPTY(pat.ro);
  2567. setroomSTAY(no);
  2568. f_pat=fopen(_pati,"rb+");
  2569. rewind(f_pat);
  2570. for(i=0;i<n;i++){
  2571. fread(&pat,sizeof(Patient),1,f_pat);
  2572. if(strcmp(idf,pat.id)==0){
  2573. pat.ro=no;
  2574. strcpy(pat.id,id);
  2575. strcpy(pat.fname,fname);
  2576. strcpy(pat.lname,lname);
  2577. pat.sex=sex;
  2578. pat.birth.da_day=day;
  2579. pat.birth.da_mon=mon;
  2580. pat.birth.da_year=year;
  2581. strcpy(pat.addr,addr);
  2582. strcpy(pat.blo,blo);
  2583. strcpy(pat.prob,prob);
  2584. strcpy(pat.nat,nat);
  2585. strcpy(pat.tel,tel);
  2586. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  2587. fwrite(&pat,sizeof(Patient),1,f_pat);
  2588. }
  2589. }fclose(f_pat);
  2590. notice(text,24,10,55,15);
  2591. }
  2592. if(opt==2){
  2593. gotoxy(10,4);textcolor(15);cprintf("First Name: "); strcpy(fname,input(2,14,15));
  2594. if(strcmp(fname,"00")==0) break;
  2595. else strupr(fname);
  2596. gotoxy(10,6);textcolor(15);cprintf("Last Name: "); strcpy(lname,input(2,14,15));
  2597. if(strcmp(lname,"00")==0) break;
  2598. else strupr(lname);
  2599. f_pat=fopen(_pati,"rb+");
  2600. rewind(f_pat);
  2601. for(i=0;i<n;i++){
  2602. fread(&pat,sizeof(Patient),1,f_pat);
  2603. if(strcmp(idf,pat.id)==0){
  2604. strcpy(pat.fname,fname);
  2605. strcpy(pat.lname,lname);
  2606. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  2607. fwrite(&pat,sizeof(Patient),1,f_pat);
  2608. notice(text,24,10,55,15);
  2609. }
  2610. }fclose(f_pat);
  2611.  
  2612. }
  2613. if(opt==3){
  2614. gotoxy(11,7);textcolor(15);cprintf("Room No.: ");no=atoi(input(1,5,15));
  2615. if(no==0) break;
  2616. if(findroom(no)!=1){
  2617. notice("<Unavailable Room>",24,10,55,15);
  2618. blockey();
  2619. goto f1;
  2620. }
  2621. setroomEMPTY(pat.ro);
  2622. setroomSTAY(no);
  2623. f_pat=fopen(_pati,"rb+");
  2624. rewind(f_pat);
  2625. for(i=0;i<n;i++){
  2626. fread(&pat,sizeof(Patient),1,f_pat);
  2627. if(strcmp(pat.id,idf)==0){
  2628. pat.ro=no;
  2629. fseek(f_pat,-(int)sizeof(Patient),SEEK_CUR);
  2630. fwrite(&pat,sizeof(Patient),1,f_pat);
  2631. notice(text,24,10,55,15);
  2632. }
  2633. }
  2634. fclose(f_pat);
  2635. }
  2636.  
  2637.  
  2638. }
  2639. ch=blockey();
  2640. if(ch==27) break;
  2641. }while(1);
  2642. }
  2643.  
  2644. void updateroom(){
  2645. struct Room ro;
  2646. struct Types type;
  2647. char ch,c;
  2648. int no,nof,i,n,f,ty,it,nt;
  2649. char text[2][30]={"<Room Updated>","<<Enter to Update another>>"};
  2650. char head[30]="UPDATE ROOM";
  2651. do{ f=0;
  2652. clrwin();
  2653. help();
  2654. drawwindow("SEARCH ROOM TO UPDATE",22,7,57,17,12);
  2655. n=getFileElement(_room,sizeof(Room));
  2656. if(n==0){
  2657. gotoxy(5,5);textcolor(15);
  2658. cprintf("<There are no room to update>");
  2659. blockey();
  2660. break;
  2661. }
  2662. gotoxy(12,5);textcolor(15);cprintf("Room No.: ");nof=atoi(input(1,5,15));
  2663. if(nof==0) break;
  2664. f=findroom(nof);
  2665. if(f==0)
  2666. notice("<Room not found>",24,10,55,15);
  2667. if(f==2)
  2668. notice("<This room has Patient>",24,10,55,15);
  2669.  
  2670. if(f==1) {
  2671. if(confirm("Updating")==0){ fclose(f_ro);continue;}
  2672. else{
  2673. s: clrwin();
  2674. drawwindow(head,22,7,57,17,12);
  2675. gotoxy(12,4);textcolor(15);cprintf("Room No.: ");no=atoi(input(1,5,15));
  2676. if(no==0) break;
  2677. f_ro=fopen(_room,"rb+");
  2678. rewind(f_ro);
  2679. for(i=0;i<n;i++){
  2680. fread(&ro,sizeof(Room),1,f_ro);
  2681. if(no==ro.no&&no!=nof){
  2682. notice(">This room is exist<",24,10,55,15);
  2683. blockey();
  2684. fclose(f_ro);
  2685. goto s;
  2686. }
  2687. }
  2688. fclose(f_ro);
  2689.  
  2690. gotoxy(12,6);textcolor(15);cprintf("Type: ");
  2691. window(39,12,51,12);
  2692. ty=selecttype();
  2693. if(ty==-1) break;
  2694. f_ro=fopen(_room,"rb+");
  2695. rewind(f_ro);
  2696. for(i=0; i<n; i++) {
  2697. fread(&ro,sizeof(Room),1,f_ro);
  2698. if(ro.no==nof) {
  2699. fseek(f_ro,-(int)sizeof(Room),SEEK_CUR);
  2700. nt=getFileElement(_type,sizeof(Types));
  2701. f_ty=fopen(_type,"rb+");
  2702. rewind(f_ty);
  2703. for(it=0;it<nt;it++){
  2704. fread(&type,sizeof(Types),1,f_ty);
  2705. if(type.co==ty){
  2706. ro.type.co=type.co;
  2707. stpcpy(ro.type.na,type.na);
  2708. ro.type.pri=type.pri;
  2709. }
  2710. }
  2711. fclose(f_ty);
  2712. ro.no=no;
  2713. ro.sta=EMPTY;
  2714. fwrite(&ro,sizeof(Room),1,f_ro);
  2715. }
  2716. }
  2717. fclose(f_ro);
  2718. notice(text,24,10,55,15);
  2719. }
  2720. }
  2721. ch=blockey();
  2722. if(ch==27) break;
  2723. }while(1);
  2724. }
  2725. int viewroom(char head[30],Room *source,int n){
  2726. struct Patient pat;
  2727. int i,temp=0,s=0,back=1,j=0,nl,l,f=0,index=0;
  2728. char ch;
  2729. do{
  2730. clrwin();
  2731. help();
  2732. drawwindow(head,20,7,60,20,12);
  2733. gotoxy(1,1);printf("No.");gotoxy(8,1);printf("Type");
  2734. gotoxy(18,1);printf("Price");gotoxy(30,1);printf("Status");
  2735. if(n>13)temp=13;
  2736. else temp =n;
  2737. gotoxy(1,back+1);
  2738. textbackground(2);
  2739. for(j=0;j<41;j++)
  2740. cprintf(" ");
  2741. for(i=0;i<temp;i++){
  2742. gotoxy(1,i+2);printf("%03d",source[i+s].no);gotoxy(8,i+2);printf("%s",source[i+s].type.na);
  2743. gotoxy(18,i+2);printf("%.2f",source[i+s].type.pri);gotoxy(30,i+2);printf("%s",source[i+s].sta=='n'?"Available":"Unavailable");
  2744. }
  2745. ch: ch=getch();
  2746. switch(ch){
  2747. case 72:back--;if(back<1){back=1;s--;if(s<0){back=temp;s=n-temp;}}break;
  2748. case 80:back++;if(back>=temp+1){back=temp;s++;if(s>n-temp){back=1;s=0;}}break;
  2749. case 27:break;
  2750. case 13:break;
  2751. default:goto ch;
  2752. }
  2753. if(ch==13){
  2754. if(source[back-1+s].sta==EMPTY)
  2755. if(confirm("Add Patient")==1){
  2756. if(addpatient(source[back-1+s].no)==1){
  2757. if(strstr(head,"ALL")!=0)
  2758. source[back-1+s].sta=STAY;
  2759. else{
  2760. index=back-1+s;
  2761. n--;
  2762. while(index<n){
  2763. source[index]=source[index+1];
  2764. index++;
  2765. }
  2766. s=0;back=1;
  2767. }
  2768. }
  2769. }else continue;
  2770. else if(confirm("Checkout")==1){
  2771. nl=getFileElement(_pati,sizeof(Patient));
  2772. f_pat=fopen(_pati,"rb");
  2773. for(l=0;l<nl;l++){
  2774. fread(&pat,sizeof(Patient),1,f_pat);
  2775. if(source[back-1+s].no==pat.ro){
  2776. f=1;
  2777. break;
  2778. }
  2779. }fclose(f_pat);
  2780. if(f==1){
  2781.  
  2782. ch=checkout(pat.id);
  2783. if(ch==27||ch==13)
  2784. break;
  2785. else {f=0;continue;}
  2786. }
  2787.  
  2788. }else continue;
  2789. }
  2790. if(ch==27)break;
  2791. }while(1);
  2792. return ch;
  2793. }
  2794. void allroom(){
  2795. int i,n;
  2796. char head[30]="ALL ROOM";
  2797. char ch;
  2798. start:
  2799. n=getFileElement(_room,sizeof(Room));
  2800. Room *source =(Room*) calloc(n,sizeof(Room));
  2801. f_ro=fopen(_room,"rb");
  2802. rewind(f_ro);
  2803. for(i=0; i<n; i++) {
  2804. fread(&source[i],sizeof(Room),1,f_ro);
  2805. }fclose(f_ro);
  2806. clrwin();
  2807. help();
  2808. drawwindow(head,20,7,60,20,12);
  2809. if(n==0){
  2810. gotoxy(12,7);textcolor(15);
  2811. cprintf("<There are no room>");
  2812. blockey();
  2813. goto end;
  2814. }
  2815. sortroom(source,n);
  2816. if(viewroom(head,source,n)==13)
  2817. goto start;
  2818. end:
  2819. }
  2820. void allpat(){
  2821. int i,n;
  2822. char head[30]="ALL PATIENT";
  2823. char ch;
  2824. n=getFileElement(_pati,sizeof(Patient));
  2825. Patient *source =(Patient*) calloc(n,sizeof(Patient));
  2826. f_pat=fopen(_pati,"rb");
  2827. rewind(f_ro);
  2828. for(i=0; i<n; i++) {
  2829. fread(&source[i],sizeof(Patient),1,f_pat);
  2830. }fclose(f_pat);
  2831. clrwin();
  2832. help();
  2833. drawwindow(head,20,7,60,20,12);
  2834. if(n==0){
  2835. gotoxy(12,7);textcolor(15);
  2836. cprintf("<There are no Patient>");
  2837. blockey();
  2838. goto end;
  2839. }
  2840. sortpat(source,n);
  2841. viewpat(head,source,n,1);
  2842. end:
  2843. }
  2844. void alldoc(){
  2845. int i,n;
  2846. char ch;
  2847. char head[30]="ALL DOCTOR";
  2848. n=getFileElement(_doct,sizeof(Doctor));
  2849. Doctor *source =(Doctor*) calloc(n,sizeof(Doctor));
  2850. f_doc=fopen(_doct,"rb");
  2851. rewind(f_doc);
  2852. for(i=0; i<n; i++) {
  2853. fread(&source[i],sizeof(Doctor),1,f_doc);
  2854. }fclose(f_doc);
  2855. clrwin();
  2856. help();
  2857. drawwindow(head,20,7,60,20,12);
  2858. if(n==0){
  2859. gotoxy(12,7);textcolor(15);
  2860. cprintf("<There are no Doctor>");
  2861. blockey();
  2862. goto end;
  2863. }
  2864. sortdoc(source,n);
  2865. viewdoc(head,source,n,1);
  2866. end:
  2867. }
  2868. void findviewroom(){
  2869. struct Room ro;
  2870. int i,n,nf,no;
  2871. char head[30]="SEARCH ROOM";
  2872. char ch,c;
  2873. do{ n=getFileElement(_room,sizeof(Room));
  2874. nf=0;
  2875. Room *source =(Room*) calloc(n,sizeof(Room));
  2876. clrwin();
  2877. help();
  2878. drawwindow(head,22,7,57,17,12);
  2879. clrscr();
  2880. if(n==0){
  2881. gotoxy(5,5);textcolor(15);cprintf("<There are no rooms to search>");
  2882. blockey();
  2883. break;
  2884. }
  2885. gotoxy(12,5);textcolor(15);cprintf("Room No.: ");no=atoi(input(1,5,15));
  2886. if(no==0) break;
  2887. if(findroom(no)!=0){
  2888. f_ro=fopen(_room,"rb");
  2889. rewind(f_ro);
  2890. for(i=0; i<n; i++) {
  2891. fread(&ro,sizeof(Room),1,f_ro);
  2892. if(ro.no==no){
  2893. fseek(f_ro,-(int)sizeof(Room),SEEK_CUR);
  2894. fread(&source[nf],sizeof(Room),1,f_ro);
  2895. nf++;
  2896. }
  2897. }fclose(f_ro);
  2898. }
  2899. if(nf==0){
  2900. notice("<Room not found>",24,10,55,15);
  2901. blockey();
  2902. continue;
  2903. }
  2904. sortroom(source,nf);
  2905. ch=viewroom(head,source,nf);
  2906. if(ch==27) break;
  2907. else continue;
  2908. }while(1);
  2909. }
  2910. void availroom(){
  2911. struct Room ro;
  2912. char ch;
  2913. int i,n,nav=0;
  2914. char head[30]="AVAILABLE ROOM";
  2915. n=getFileElement(_room,sizeof(Room));
  2916. Room *source =(Room*) calloc(n,sizeof(Room));
  2917. f_ro=fopen(_room,"rb");
  2918. rewind(f_ro);
  2919. for(i=0; i<n; i++) {
  2920. fread(&ro,sizeof(Room),1,f_ro);
  2921. if(ro.sta==EMPTY){
  2922. fseek(f_ro,-(int)sizeof(Room),SEEK_CUR);
  2923. fread(&source[nav],sizeof(Room),1,f_ro);
  2924. nav++;
  2925. }
  2926. }fclose(f_ro);
  2927. clrwin();
  2928. help();
  2929. drawwindow(head,20,7,60,20,12);
  2930. if(nav==0){
  2931. gotoxy(6,7);textcolor(15);
  2932. cprintf("<There are no available rooms>");
  2933. blockey();
  2934. goto end;
  2935. }
  2936. sortroom(source,nav);
  2937. viewroom(head,source,nav);
  2938. end:
  2939. }
  2940. void alltype(){
  2941. struct Types type;
  2942. char ch,c;
  2943. int i,n,temp,s,back,j;
  2944. char head[30]="ALL TYPE";
  2945. start:
  2946. temp=0;s=0;back=1;j=0;
  2947. n=getFileElement(_type,sizeof(Types));
  2948. Types *source =(Types*) calloc(n,sizeof(Types));
  2949. f_ty=fopen(_type,"rb");
  2950. rewind(f_ty);
  2951. for(i=0; i<n; i++) {
  2952. fread(&source[i],sizeof(Types),1,f_ty);
  2953. }fclose(f_ty);
  2954. sorttype(source,n);
  2955. do{
  2956. clrwin();
  2957. help();
  2958. drawwindow(head,20,7,60,20,12);
  2959. if(n==0){
  2960. gotoxy(12,7);textcolor(15);
  2961. cprintf("<There are no type>");
  2962. blockey();
  2963. break;
  2964.  
  2965. }
  2966. gotoxy(1,1);printf("Code");gotoxy(19,1);printf("Type");
  2967. gotoxy(33,1);printf("Price");
  2968. if(n>13)temp=13;
  2969. else temp=n;
  2970. gotoxy(1,back+1);
  2971. textbackground(2);
  2972. for(j=0;j<41;j++)
  2973. cprintf(" ");
  2974. for(i=0;i<temp;i++){
  2975. gotoxy(1,i+2);printf("%03d",source[i+s].co);gotoxy(19,i+2);printf("%s",source[i+s].na);
  2976. gotoxy(33,i+2);printf("%.2f",source[i+s].pri);
  2977. }
  2978. ch: ch=getch();
  2979. switch(ch){
  2980. case 72:back--;if(back<1){back=1;s--;if(s<0){back=temp;s=n-temp;}}break;
  2981. case 80:back++;if(back>=temp+1){back=temp;s++;if(s>n-temp){back=1;s=0;}}break;
  2982. case 27:break;
  2983. case 13:break;
  2984. default:goto ch;
  2985. }
  2986. if(ch==13){
  2987. if(confirm("Delete Type")==1){
  2988. deletetype(source[back-1+s].co);
  2989. notice("<Type Deleted>",24,10,55,15);
  2990. blockey();
  2991. goto start;
  2992. }else continue;
  2993. }
  2994. if(ch==27)break;
  2995. }while(1);
  2996. }
Add Comment
Please, Sign In to add comment