Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на языке высокого уровня. Методические указания и варианты заданий для студентов 1-го курса направления подготовки 09.03.01 Информати
.pdf
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
