Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на языке высокого уровня. Методические указания и варианты заданий для студентов 1-го курса направления подготовки 09.03.01 Информати

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
struct z { char name[20]; char vid[20]; long summa; char data[11]; }; struct sp { char fio[20]; long summa; struct sp* sled; } *spisok; char str[] =
"Для продолжения работы нажмите любую клавишу...";
int NC;
char dan[7][55]={
"Какой вкладчик имеет на счету наибольшую сумму денег ?", "Какой вклад был открыт раньше всех ? ", "Список \"Срочных\" вкладов с суммой свыше 10 000 р.", "Алфавитный список всех вкладчиков ", "Количество вкладов \"До востребования\" ", "Диаграмма. Процентное соотношение вложенных денег", "Выход "
};
int menu(int); void maxim(struct z*); void first(struct z*); void text_data(char *,char *); void kolvo(struct z *); void alfalist(struct z*); void vstavka(struct z*,char*); void listing(struct z*); void diagram(struct z*); void press();
main() { FILE *in; struct z *clients; int n,next=1,i; if((in=fopen("vklad.dat","r"))==NULL)
51
{ printf("\nФайл vklad.dat не открыт !"); getch(); exit(1); } window(1,1,80,25); textattr(LIGHTGRAY); clrscr(); fscanf(in,"%d",&NC); clients=(struct z*)malloc(NC*sizeof(struct z)); for(i=0;i<NC;i++) fscanf(in,"%s%s%ld%s",clients[i].name, clients[i].vid, &clients[i].summa, clients[i].data); for(i=0;i<NC;i++) printf("\n%-20s %-20s %7ld %s",
clients[i].name, clients[i].vid,
clients[i].summa, clients[i].data); press(); while (next) { textattr(LIGHTGRAY); window(1,1,80,25); clrscr(); gotoxy(15,2); cprintf("Выберите вопрос при помощи стрелок и
нажмите ENTER");
window(10,7,70,15); textbackground(LIGHTGRAY); clrscr(); textcolor(BLACK); cprintf("\n"); for(i=0; i<7; i++)
cprintf(" %s\n\r",dan[i]); n=menu(7); switch(n){ case 1: maxim(clients); break; case 2: first(clients);break;
52
case 3: listing(clients);break; case 4: alfalist(clients);break; case 5: kolvo(clients); break; case 6: diagram(clients); break; case 7: next=0; } } } /* конец main() */
void press() { window(1,1,80,25); gotoxy(18,24); textattr(LIGHTGRAY); cputs(str); getch(); }
int menu(int n) { int i,y=0; char c=1; while (c!=ESC) { gotoxy(4,2+y); textattr(16*LIGHTGRAY+BLACK); cprintf(dan[y]); switch(c) { case DOWN : y++; break; case UP : y--; break; case ENTER: return y+1; } if(y>n-1)y=0; if(y<0)y=n-1; gotoxy(4,2+y); textattr(16*BLUE+WHITE); cprintf(dan[y]); c=getch(); }
53
exit(0); }
void text_data(char *s,char *sd) { char s0[3], month[12][9]={"января","февраля",
"марта","апреля","мая", "июня","июля","августа", "сентября","октября", "ноября","декабря"};
strcpy(s,sd+8); strcat(s," "); strncpy(s0,sd+5,2); s0[2]=0; strcat(s,month[atoi(s0)-1]); strcat(s," "); strncat(s,sd,4); return; }
void maxim(struct z* client) { int i=0; struct z best; strcpy(best.name,client[0].name); best.summa=client[0].summa; for(i=1;i<NC;i++) if (client[i].summa>best.summa) { strcpy(best.name,client[i].name); best.summa=client[i].summa; } window(23,17,58,22); textbackground(CYAN); clrscr(); textcolor(MAGENTA); cprintf("\n\r Максимальный вклад"); cprintf("\n\r %ld рублей",
best.summa); cprintf("\n\r имеет вкладчик"); cprintf("\n\r %s",best.name);
54
press(); }
void first(struct z* client) { int i; char s[17]; struct z* best=client; for(i=1;i<NC;i++) if (strcmp(client[i].data,best->data)<0)
best=&client[i]; text_data(s,best->data); window(23,17,58,22); textbackground(CYAN); clrscr(); textcolor(MAGENTA); cprintf("\n\r Самый \"старый\" вклад"); cprintf("\n\r %s на %ld р.",best->vid,
best->summa);
cprintf("\n\rимеет вкладчик %s",
best->name); cprintf("\n\rОткрыт %s ",s); press(); }
55
void kolvo(struct z *client) { int i,k=0; for(i=0;i<NC;i++) if (strcmp(client[i].vid,
"До_востребования")==0) k++; window(23,17,58,20); textbackground(CYAN); clrscr(); textcolor(MAGENTA); cprintf("\n\r Вклад \"До востребования\""); cprintf("\n\r Всего : %d",k);; press(); }
void alfalist(struct z* client) { int i; struct sp* nt; char fio[20];
spisok=0; for(i=0;i<NC;i++) vstavka(client,client[i].name); window(1,1,80,25); textattr(LIGHTGRAY); clrscr(); printf("\nАлфавитный список вкладчиков СБ"); printf("\n===============================\n"); for(nt=spisok; nt!=0; nt=nt->sled) printf("\n %-20s %ld",
nt->fio,nt->summa); press(); }
void vstavka(struct z* client,char* fio) { struct sp *New,*nt,*z=0; int i; for(nt=spisok; nt!=0 && strcmp(nt->fio,fio)<0;
z=nt, nt=nt->sled);
56
if(nt && strcmp(nt->fio,fio)==0) return; New=(struct sp *) malloc(sizeof(struct sp)); strcpy(New->fio,fio); New->sled=nt; New->summa=0; for(i=0;i<NC;i++) if(strcmp(client[i].name,fio)==0) New->summa+=client[i].summa;
if(!z) spisok=New; else z->sled=New;
}
void listing(struct z* client) { int i; struct z* nt; window(1,1,80,25); textattr(LIGHTGRAY); clrscr(); cprintf("\n\r Список \"Срочных\" вкладов с суммой свыше 10 тыс.рублей"); cprintf("\n\r====================================== =========\n\r"); for(i=0,nt=client;i<NC;nt++,i++) if (nt->summa>10000 &&
strcmp(nt->vid,"Срочный")==0)
cprintf("\n\r %-20s %ld р.",
nt->name,nt->summa); press(); }
void diagram(struct z *client) { struct sp *nt; int NSp,i=9,ii=1, gr1=0, gr2,k,xr,yr; float t;
57
long x=0, l, j=0, sum=0; char str2[20], str1[20]; for(k=0;k<NC;k++) sum = sum+client[k].summa; alfalist(client); for(nt=spisok,NSp=0; nt!=0; nt=nt->sled)
initgraph(&gr1,&gr2 ,""); cleardevice(); setcolor(WHITE); for(nt=spisok,k=0; nt!=0; nt=nt->sled,k++) { sprintf(str1,"%s",nt->fio); sprintf(str2,"%3.1f%%",
(nt->summa*100./sum)); settextstyle(0,0,1); if(i==16){i=9;ii++;} settextjustify(LEFT_TEXT,TOP_TEXT); setcolor(WHITE); outtextxy(470,k*15+20,str1); setfillstyle(ii,i); bar(440,k*15+18,460,k*15+28); x=x+nt->summa; l=360*x/sum; if(k==(NSp-1)) l=360; t=360.0*j/sum; setcolor(BLACK); pieslice(200,200,(int)t,(int)l,100); t=(t+l)/2*3.14/180; xr=200+125*cos(t); yr=200-125*sin(t); settextjustify(CENTER_TEXT,CENTER_TEXT); setcolor(WHITE); outtextxy(xr,yr,str2); j=x; i++; } getch(); closegraph(); return ; }
NSp++;
58
ПРИЛОЖЕНИЕ I
Отладка простейшей программы
в Microsoft Visual Studio 2008 Express
1. Запускаем среду Microsoft Visual C++ Express Edition:
2. Создаем новый проект:
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]