/*
以下是我在学习C语言时编的一个选票程序,大家按提示输入,在文本模式下输出框式内容和柱状图.本程序以在TC2.0下编译通过,若有何建议,欢迎联系.
QQ:281607998
E_mail:yanyg02@163.com
*/
#include<stdio.h>
#define SC scanf
#define PR printf
struct person
{
char name[20];
int count,code;
float pec;
}leader[20];
main()
{
int n,i;
char c;
void scan(struct person leader[],int n);
void arith(struct person leader[],int n);
void diagram(struct person leader[],int n);
PR("The Course Is Made By Tongxin'Yiban Yan Yonggang.\nNow Press Enter For Running The Course.\n");
while(getchar()!='\n');
while(1)
{PR("\nInput the number of candidates:");
do
{SC("%d",&n);
if(n>1&&n<=20)break;
else if(n<=1)PR("\The candidates'number is too small.Input again!");
else if(n>20)PR("The candidates'number is too large.Input again!");
}while(1);
scan(leader,n);
arith(leader,n);
PR("\nNow press any key for looking diagram.");
getchar();
getchar();
diagram(leader,n);
for(;;)
{
PR("\nContinued(Y/N)?");
c=getchar();
getchar();
if(c=='Y'||c=='y'||c=='N'||c=='n')break;
}
if(c=='y'||c=='Y'){for(i=0;i<20;i++)leader[i].count=0;continue;}
else break;
}
}
void scan(struct person leader[],int n)
{
int i,j,k,flag=1;
static char a1[67][35];
char c;
for(j=0;j<34;j++)
for(i=0;i<67;i+=3)
a1[i][j]=196;
for(i=0;i<67;i++)
{
a1[i][0]=179;a1[i][20]=179;a1[i][34]=179;
}
for(i=3;i<=3*n;i+=3)
{
a1[i][0]=195;a1[i][20]=197;a1[i][34]=180;
}
a1[0][0]=218;a1[0][20]=194;a1[0][34]=191;a1[3*n+3][0]=192;a1[3*n+3][20]=193;a1[3*n+3][34]=190;
while(flag)
{
PR("\nInput the candidates name and code.If only input name,system will \ngive code one by one.\n");
PR("If only input name,press S,else press others.");
getchar();
c=getchar();
if(c=='s'||c=='S')
{
PR("Input name:");
for(i=0;i<n;i++){SC("%s",&leader[i].name);leader[i].code=i+1;}
}
else
{PR("Input name and code:");
for(i=0;i<n;i++)SC("%s%d",&leader[i].name,&leader[i].code);}
PR("This is candidates'name and code:");
a1[1][9]='N';a1[1][10]='a';a1[1][11]='m';a1[1][12]='e';
a1[1][27]='C';a1[1][28]='o';a1[1][29]='d';a1[1][30]='e';
for(i=0;i<2;i++)
{PR("\n\t\t");
for(j=0;j<35;j++)PR("%c",a1[i][j]);}
for(i=0;i<4;i++){a1[1][i+9]=0;a1[1][i+27]=0;}
for(i=3;i<=3*n+3;i+=3)
for(j=0;leader[i/3-1].name[j]!='\0';j++)a1[i+1][j+1]=leader[i/3-1].name[j];
for(i=3;i<=3*n+3;i++)
{PR("\n\t\t");
if((i+2)%3!=0||i<3)for(j=0;j<35;j++)PR("%c",a1[i][j]);
else PR("%c%-19s%c%10d %c",a1[i][0],leader[i/3-1].name,a1[i][20],leader[i/3-1].code,a1[i][34]);
}
for(;;)
{
PR("\nRight(Y/N)?");
getchar();
c=getchar();
if(c=='Y'||c=='y'){flag=0;break;}
else if(c=='N'||c=='n')break;
}
}
}
void arith(struct person leader[],int n)
{
int i,j,k,s=0,x,flag=1;
float m,p;
static char c,a1[67][55];
for(j=0;j<55;j++)
for(i=0;i<67;i+=3)
a1[i][j]=196;
for(i=0;i<67;i++)
{
a1[i][0]=179;a1[i][20]=179;a1[i][34]=179;a1[i][44]=179;a1[i][54]=179;
}
for(i=3;i<=3*n;i+=3)
{
a1[i][0]=195;a1[i][20]=197;a1[i][34]=197;a1[i][44]=197;a1[i][54]=180;
}
a1[0][0]=218;a1[0][20]=194;a1[0][34]=194;a1[0][44]=194;a1[0][54]=191;a1[3*n+3][0]=192;a1[3*n+3][20]=193;a1[3*n+3][34]=193;a1[3*n+3][44]=193;a1[3*n+3][54]=190;
while(flag)
{
PR("Input the total of vote(an integar):");
SC("%d",&k);
PR("Input the needed revery(a persontage):");
SC("%f%c",&m,&c);
PR("Now beginning vote:\n");
for(;;)
{SC("%d",&x);
if(x==0)break;
for(j=0;j<n;j++)
if(x==leader[j].code){leader[j].count++;break;}
s++;
if(s>=k)break;
}
p=(float)s/k*100;
if(p>=m)
{
for(i=0;i<n;i++)leader[i].pec=(float)leader[i].count/s*100;
a1[1][5]='N';a1[1][6]='a';a1[1][7]='m';a1[1][8]='e';
a1[1][24]='C';a1[1][25]='o';a1[1][26]='d';a1[1][27]='e';
a1[1][37]='C';a1[1][38]='o';a1[1][39]='u';a1[1][40]='n';a1[1][41]='t';
a1[1][46]='P';a1[1][47]='e';a1[1][48]='r';a1[1][49]='c';a1[1][50]='e';a1[1][51]='e';a1[1][52]='n';a1[1][53]='t';
for(i=3;i<=3*n+3;i+=3)
for(j=0;leader[i/3-1].name[j]!='\0';j++)a1[i+1][j+1]=leader[i/3-1].name[j];
for(i=0;i<=3*n+3;i++)
{PR("\n\t");
if((i+2)%3!=0||i<3)for(j=0;j<55;j++)PR("%c",a1[i][j]);
else PR("%c%-19s%c%10d %c%7d %c%8.2f%%%c ",a1[i][0],leader[i/3-1].name,a1[i][20],leader[i/3-1].code,a1[i][34],leader[i/3-1].count,a1[i][44],leader[i/3-1].pec,a1[i][54]);
}
}
else
{PR("Less of needed revery,It's a invalid vote,input again!\n");
for(i=0;i<20;i++)leader[i].count=0;s=0;continue;}
break;
}
}
void diagram(struct person leader[],int n)
{
int i,j,k=0;
static char a[21][66],*p1,*p2;
p1="Percent";
p2="Code";
a[0][0]=24;a[20][65]=62;
for(i=1;i<21;i++)a[i][0]=179;
for(i=1;i<65;i++)a[20][i]=196;
for(j=5;j<=5*n;j+=5)
{for(i=20-(int)leader[k].pec/5;i<20;i++)
a[i][j]=219;k++;}
a[20][0]=192;
PR(" %s\n",p1);
for(i=0;i<21;i++)
{
if(i%2==0)PR(" ");
else PR("%6.2f%%",(float)(20-i)*5);
for(j=0;j<66;j++)
PR("%c",a[i][j]);
if(i==20)PR("%s",p2);
PR("\n");
}
PR(" ");
for(i=0;i<5*n;i+=5)PR("%5d",leader[i/5].code);
for(j=5;j<=5*n;j+=5)
for(i=1;i<20;i++)
a[i][j]=0;
PR("\n");
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |