一个投票系统C语言
这个里面的程序涵盖了大部分c语言基础知识
- 这是实现边框的打印
- 光标的跳转
- 下面这可以去掉
- 去掉后要把之后的gotoxy();类似的都要去掉
//实现光标的移动
void gotoxy(int x, int y)
{
COORD pos;
HANDLE hOutput;
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, pos);
}
//边框类容内容
void gotoprint(int x, int y)
{
gotoxy(x, y);
printf("■");
}
//打印边框
void boundary()
{
int i;
for (i = 4; i<62; i += 2)
{
gotoprint(i, 2);
gotoprint(i, 31);
}
for (i = 2; i < 32; i++)
{
gotoprint(4, i);
gotoprint(60, i);
printf("\n");
}
}
void overmenu()
{
system("cls");
boundary();
gotoxy(30, 13);
printf("谢谢使用");
gotoxy(30, 14);
getchar();
gotoxy(64,34);
}
- 以下是完整的程序
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<time.h>
#include<conio.h>
//数组定义
struct stduent {
char name[20];
long int ID;
int id;
int num;
} stu[1000];
//实现光标的移动
void gotoxy(int x, int y)
{
COORD pos;
HANDLE hOutput;
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, pos);
}
//边框类容内容
void gotoprint(int x, int y)
{
gotoxy(x, y);
printf("■");
}
//打印边框
void boundary()
{
int i;
for (i = 4; i<62; i += 2)
{
gotoprint(i, 2);
gotoprint(i, 31);
}
for (i = 2; i < 32; i++)
{
gotoprint(4, i);
gotoprint(60, i);
printf("\n");
}
}
void overmenu()
{
system("cls");
boundary();
gotoxy(30, 13);
printf("谢谢使用");
gotoxy(30, 14);
getchar();
gotoxy(64,34);
}
//信息的录入
void enter(int N)
{
for (int i = 1; i <=N; i++)
{
system("cls");
boundary();
gotoxy(15, 13);
printf("请输入第%4d 个参选人的学号:", i);
scanf("%ld", &stu[i].ID);
stu[i].id=stu[i].ID%1000;
gotoxy(15, 14);
printf("请输入第%4d 个参选人的姓名:", i);
scanf("%s", stu[i].name);
}
}
//隐藏字符并将char类型数字字符转化为int型
int digital_hiding(int N)
{
int n=0,i = 0;
char in[12],ch;
while(1)
{
//getchar();
ch = getch();
if(ch == '\r')
{
in[i]='\0';
break;
}
else
{
in[i++] = ch;
gotoxy(30+i, N+10);
//if(ch!='\b'&&i<=3)
printf("*");
}
}
if(in[0]=='n')
return -1;
else
{
i=0;
while(in[i]!='\0')
{
n=n*10+(int)in[i++]-48;
}
}
return n;
}
//格式排版
void layout(int N,int a)
{
system("cls");
boundary();
gotoxy(15, 3);
printf("*********************************");
gotoxy(15, 4);
printf("* 输入参选人对应学号后三位 *");
gotoxy(15, 5);
printf("* 回车投票或者重输,输入n结束 *");
gotoxy(15, 6);
printf("*********************************");
for (int i = 1; i <= N; i++)
{
if(stu[i].id<10)
{
gotoxy(15,i+6);
printf("*%8s 的学号后三位是 00%d *", stu[i].name, stu[i].id);
}
else if(stu[i].id<100)
{
gotoxy(15,i+6);
printf("*%8s 的学号后三位是 0%d *", stu[i].name, stu[i].id);
}
else
{
gotoxy(15,i+6);
printf("*%8s 的学号后三位是 %d *", stu[i].name, stu[i].id);
}
}
gotoxy(15, N+7);
printf("*********************************");
gotoxy(15, N+8);
printf("***输入学号后三位 回车即可投票***");
gotoxy(15, N+9);
printf("*********************************");
gotoxy(15, N+10);
printf("请第%d名学生输入:",a);
}
//当选者分析
void electee(int N)
{
int a=0;
system("cls");
boundary();
stu[0]=stu[1];
gotoxy(28, 3);
printf("投票结果");
//将最大值赋值给stu[0]
for (int i = 1; i <= N; i++)
{
gotoxy(17, 3+i);
printf("*%8s %-11ld的票数是%3d *", stu[i].name,stu[i].ID, stu[i].num);
if(stu[0].num<stu[i].num)
stu[0]=stu[i];
}
//判断最大值是否为一个
for(int i=1;i<=N;i++)
{
if(stu[0].num==stu[i].num)
a++;
}
if(a==1)
{
gotoxy(17, 4+N);
printf("***********************************\n");
gotoxy(17, 5+N);
printf("* 当选者是:%8s %-11ld *\n",stu[0].name,stu[0].ID);
gotoxy(17, 6+N);
printf("***********************************\n");
gotoxy(17, 7+N);
system("pause");
overmenu();
}
else
{
gotoxy(20, 4+N);
printf("***************************\n");
for(int i=1;i<=N;i++)
{
if(stu[0].num==stu[i].num)
{
gotoxy(20, 4+N+i);
printf("%8s",stu[i].name);
}
}
gotoxy(20, 5+N+N);
printf("他们的票相等且最大无法选出获胜者");
gotoxy(20,6+N+N);
system("pause");
overmenu();
}
}
//投票函数
void vote(int N)
{
int temp,a=1;
while(1)
{
layout(N,a);
temp=digital_hiding(N);
if(temp==-1)
{
break;
}
for(int j=1;j<=N;j++)
{
if(stu[j].id==temp)
{
stu[j].num++;
a++;
gotoxy(15,N+11);
printf("投票成功,继续投票");
system("pause");
break;
}
else if(j+1>N)
{
gotoxy(15,N+11);
printf("请输入正确的候选人学号");
gotoxy(15,N+12);
printf("继续投票");
system("pause");
}
}
}
electee(N);
}
//菜单界面
int menu()
{
int N;
boundary();
gotoxy(25, 13);
printf("欢迎使用投票系统");
gotoxy(25, 14);
printf("请输入参选人数:");
scanf("%6d",&N);
return N;
}
int home()
{
int a;
boundary();
gotoxy(25, 13);
printf("欢迎使用投票系统");
gotoxy(25, 14);
printf("请选择:\n");
gotoxy(25, 15);
printf("1.新建投票\n");
gotoxy(25, 16);
printf("2.查看以前投票\n");
gotoxy(25, 17);
printf("3.关闭投票系统\n");
gotoxy(25, 18);
scanf("%d",&a);
system("cls");
return a;
}
void write_txt(char *names,int N)
{
FILE *fp;
fp=fopen(names,"w");
fprintf(fp,"%-8s %-10s %-6s\n","姓名","学 号","得票数");
for(int i=1;i<=N;i++)
fprintf(fp,"%-8s%10ld%6d\n",stu[i].name,stu[i].ID,stu[i].num);
fclose(fp);
}
void read_txt(char *names,int N)
{
FILE *fp;
fp=fopen(names,"r");
fscanf(fp,"%*[^\n]"); //跳过一行文字
for(int i=1;i<=N;i++)
{
fscanf(fp,"%s%ld%d\n",stu[i].name,&stu[i].ID,&stu[i].num);
}
electee(N);
fclose(fp);
}
int main()
{
int N,a;
char namefile[20];
system("color 0e");
system("mode con cols=66 lines=40");
while(1)
{
a=home();
if(a==2)
{
boundary();
gotoxy(25, 13);
printf("欢迎使用投票系统");
gotoxy(25, 14);
printf("请输入想要读取的文件名");
getchar();
gets(namefile);
read_txt(namefile,N);
}
else if(a==1)
{
boundary();
gotoxy(25, 13);
printf("欢迎使用投票系统");
gotoxy(25, 14);
printf("请输入文件名");
getchar();
gets(namefile);
N=menu();
enter(N);
vote(N);
write_txt(namefile,N);
}
else break;
}
}