Пример работы со структурами в C++ с интерфейсом пользователя


Добавил:DMT
Дата создания:27 января 2008, 3:15
Дата обновления:27 января 2008, 3:36
Просмотров:12002 последний ---
Комментариев: 0
Пример работы со структурами в C с интерфейсом пользователя. В программе реализован минимальный интерфейс пользователя. Работа с одной структурой аналогична работе с таблицой базы данных.
Код на C++
  1. #include <stdio.h>
  2. #include <CONIO.H>
  3. #include <PROCESS.H>
  4. struct student {
  5. char name[10],disc[10];
  6. int id,bal;
  7. } stud[50];
  8. FILE *in,*out;
  9. char s[255];
  10. int x,count,delet,sr,i=0;
  11.  
  12. void readall(void){
  13. if ((in=fopen("1.dbj", "rt"))!=NULL){
  14. while (!feof(in)){
  15. fscanf(in,"%s %s %d %d\n",stud[i].name,stud[i].disc,&stud[i].id,&stud[i].bal);
  16. i+=1;}
  17. count=i;
  18. i=0;
  19. fclose(in);}
  20. }
  21.  
  22. void format(void){
  23. i=0;
  24. if ((in=fopen("1.dbj", "w"))!=NULL){
  25. while (i!=count){
  26. if (i!=delet)
  27. fprintf(in,"%s %s %d %d\n",stud[i].name,stud[i].disc,stud[i].id,stud[i].bal);
  28. i+=1;}
  29. count=i;
  30. i=0;
  31. fclose(in);
  32. delete(stud);
  33. readall();
  34. delet=-1;}
  35. }
  36. void read(void)
  37. {
  38. gotoxy(25,10);
  39. cprintf("Фамилия: %s\n",stud[i].name);
  40. gotoxy(25,11);
  41. cprintf("Дисциплины: %s\n",stud[i].disc);
  42. gotoxy(25,12);
  43. cprintf("Номер: %d\n",stud[i].id);
  44. gotoxy(25,13);
  45. cprintf("Баллы: %d\n",stud[i].bal);
  46. }
  47.  
  48. void next(void){
  49. if (count>i+1) i+=1;
  50. read();
  51. }
  52.  
  53. void del(void){
  54. char f;
  55. gotoxy(25,13);
  56. cprintf("Действительно удалить: %d-ую запись [y/n]: ",i);
  57. cscanf("%c",&f);
  58. if (f=='y') delet=i;
  59. format();
  60. }
  61.  
  62. void prev(int sh){
  63. if (i>0) i-=sh;
  64. read();
  65. }
  66.  
  67. void dis(void){
  68. gotoxy(0,0);
  69. printf("Программирование 0\n");
  70. printf("Математика 1\n");
  71. printf("СПС 2\n");
  72. printf("СМП 3\n");
  73. printf("Химия 4\n");
  74. }
  75.  
  76. void menu(void){
  77. gotoxy(0,0);
  78. printf("Меню программы\n");
  79. printf("Для добавления записей нажмите 'a'\n");
  80. printf("Для переходов используйте <- ->\n");
  81. printf("Удалить запись 'd'. Перезаписать 'w'\n");
  82. }
  83. void prosl(){
  84. int co,d,i;
  85. co=0;
  86. sr=0;
  87. clrscr();
  88. dis();
  89. scanf("%d",&d);
  90. for (i=0;i<=count;i++){
  91. if (stud[i].disc[d]=='1') co+=1;
  92. sr+=stud[i].bal;}
  93. for (i=0;i<=count;i++){
  94. if (((stud[i].disc[d]=='1')&&(co<6))||((co>=6)&&(stud[i].disc[d]=='1')&&(stud[i].bal>sr/(count-1)))) printf("Студент %s из группы %d средний балл которого %d\n",stud[i].name,stud[i].id,stud[i].bal);
  95. }
  96. }
  97.  
  98. void add(int i)
  99. {
  100. gotoxy(25,10);
  101. cprintf("Фамилия: ");
  102. scanf("%s",stud[i].name);
  103. gotoxy(25,11);
  104. cprintf("Дисциплины: ");
  105. scanf("%s",stud[i].disc);
  106. gotoxy(25,12);
  107. cprintf("Номер: ");
  108. scanf("%d",&stud[i].id);
  109. gotoxy(25,13);
  110. cprintf("Баллы: ");
  111. scanf("%d",&stud[i].bal);
  112. if (i==count) count+=1;
  113. format();
  114. };
  115.  
  116. void main(void)
  117. {
  118. char k;
  119. delet=-1;
  120. readall();
  121. clrscr();
  122. menu();
  123. read();
  124. while (k!='q'){
  125. cscanf("%c",&k);
  126. clrscr();
  127. menu();
  128. switch (k)
  129. {
  130. case 'K': prev(1);break;
  131. case 'M': next();break;
  132. case 'a': add(count);break;
  133. case 'f': format();break;
  134. case 'd': del();break;
  135. case 'w': add(i);break;
  136. case 'p': prosl();break;
  137. }
  138. gotoxy(30,25);
  139. cprintf("Запись №%d Введeнo %c Exit: Q...",i,k);
  140. };
  141. }
При использовании обязательна ссылка на http://DMTSoft.ru
up