C语言 投票系统设计 求大神教~

查找候选人 函数里 为什么只是一直显示没有您要查询的候选人    删除和修改 不用链表 甚至不用指针的话 能不能写 求教求手把手教 感激不尽。 大哭





#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define DATA    candi[i].num,candi[i].name,&candi[i].age,candi[i].unit,&candi[i].count
#define DATAPRINT candi[i].num,candi[i].name,candi[i].age,candi[i].unit,candi[i].count
void write_data();//输入候选人信息
void read_data();//浏览候选人信息 
void vote();//投票
void search();//查找候选人
void delete_modify();//修改、删除候选人信息
void insert_data();//新增候选人信息
void record_order();//候选人数据排序候选人数据排序
void count_up();//统计
void count_up_age();//年龄统计
void count_up_unit();//工作单位统计
void menu();//菜单
void reset();//格式化投票系统
struct candidate
{
 char num[4];
 char name[20];
 int age;
 int count;
 char unit[20];
}candi[50];
FILE *fp;
int pflag;
int voteflag;
char select;
char savefile[] = "save.dat";
char filename[] = "data.dat";
int main()
{
 if((fp=fopen(savefile,"rb"))==NULL)
 {
  fp=fopen(savefile,"wb");
  pflag=0;
  fwrite(&pflag,4,1,fp);
  voteflag=0;
  fwrite(&voteflag,4,1,fp);
  fclose(fp);
 }
 fread(&pflag,4,1,fp);
 fread(&voteflag,4,1,fp);
 fclose(fp);
 menu();
 return 0;
}
void menu()
{
 printf("                      --------------------------选民投票管理系统-------------------   \n");
 printf("*********************************************************************************************************\n");
 printf("\t[**                                    1     录入候选人信息                        **]\n");
 printf("\t[**                                    2     浏览候选人信息                        **]\n");
 printf("\t[**                                    3     进行正式投票                          **]\n");
 printf("\t[**                                    4     查询候选人数据                        **]\n");
 printf("\t[**                                    5     修改、删除候选人信息                  **]\n");
 printf("\t[**                                    6     新增候选人信息                        **]\n");
 printf("\t[**                                    7     候选人数据排序                        **]\n");
 printf("\t[**                                    8     统计候选人信息                        **]\n");
 printf("\t[**                                    9     重置所有数据(谨慎操作)              **]\n");
 printf("\t[**                                    0     退出系统                              **]\n");
 while((select=getch())!=0)
 {
  switch(select)
  {
  case '1':write_data();break;
  case '2':read_data();break;
  case '3':vote();break;
  case '4':search();break;
  case '5':delete_modify();break;
  case '6':insert_data();break;
  case '7':record_order();break;
  case '8':count_up();break;
  case '9':reset();break;
  case '0':
  {
   fopen(savefile,"wb");
   fwrite(&pflag,4,1,fp);
   fwrite(&voteflag,4,1,fp);
   fclose(fp);
   exit(0);
  }
  break;
  default:printf("                                  指令错误请重新输入\n");break;
  }
 }
}
void vote()
{
 int i;
 int COUT=0;
 int COUTMAX=0;
 char NUM[4];
 int FIND=0;
 if(!voteflag)
 {
  fp=fopen(filename,"rb");
  for(i=0;i<pflag;i++)
  fread(&candi[i],sizeof(struct candidate),1,fp);
  fclose(fp);
  system("cls");
  printf("                                         投 票 系 统\n");
  printf("                        是否要开始正式投票(投票结束后无法再次进行投票)\n");
  printf("                               Y  开始投票    N  返回菜单\n");
  while((select=getch())!=0)
  {
  
   switch(select)
   {
    case 'y':
      {
       system("cls");
       printf("                   现在开始正式投票\n");
       getch();
       printf("请输入选民数量\n");
       scanf("%d",&COUTMAX);
       while(COUT<COUTMAX)
       {
        system("cls");
        printf("                  请第%d位选民开始投票\n",COUT+1);
        printf("                  输入你要投的候选人编号\n");
        scanf("%s",NUM);
        for(i=0;i<pflag;i++)
        {
         if(strcmp(NUM,candi[i].num)==0)
         {
          printf("-----------------------------------------------------------------------------------\n");
          printf("          找到候选人\n              姓名:%s 编号:%s  \n",candi[i].name,candi[i].num);
          FIND=1;
          printf("                            确认投票按Y     弃票按N\n");
          while((select=getch())!='\n')
          {
          switch(select)
          {
           case 'y':
           {
            candi[i].count++;
            getch();
            printf("投票成功,候选人%s当前票数为%d\n",candi[i].name,candi[i].count);
            getch();
           }break;
           case 'n':printf("                     用户弃票\n");break;
           default:printf("无效操作\n");break;
          }
          if(select=='y'||select=='n')
          break;
          }
         }
        }
        if(!FIND)
        {
         printf("               未找到候选人信息\n");
         printf("               请重新输入候选人信息\n");
         getch();
         continue;
        }
        COUT++;
       }
       getch();
       printf("                        正式投票结束,请在主选单处查询投票结果\n");
       getch();
       voteflag=1;
       fp=fopen(filename,"wb");
       for(i=0;i<pflag;i++)
       fwrite(&candi[i],sizeof(struct candidate),1,fp);
       fclose(fp);
       fopen(savefile,"wb");
       fwrite(&pflag,4,1,fp);
       fwrite(&voteflag,4,1,fp);
       fclose(fp);
       system("cls");
       menu();
      }break;
    case 'n':
     {
      system("cls");
      menu();
     }break;
    default:printf("                         请输入正确的选项\n");break;
   }
  }
 }
 else
 {
  system("cls");
  printf("                正式投票已经进行过了,请重置所有数据后再进行操作\n");
  printf("                             任意键返回主菜单\n");
  getch();
  system("cls");
  menu();
 }
}
void write_data()
{
 int n,i;
 system("cls");
 printf("                      若已有候选人信息,此操作会清除所有信息是否继续\n");
 printf("                                 继续请按Y   回主菜单按N\n");
 while((select=getch())!='\n')
 {
  switch(select)
  {
   case 'y':
   {
    pflag=0;
    system("cls");
    fp=fopen(filename,"wb");
      printf("                               输入要添加的候选人个数:\n");
     scanf("%d",&n);
     system("cls");
     printf("\t\t\t\t\t编号****姓名****年龄****工作单位\n");
      for(i=0;i<n;i++)
     {
      printf("\t\t\t\t\t");
      scanf("%s\t%s\t%d\t%s",candi[i].num,candi[i].name,&candi[i].age,candi[i].unit);
      candi[i].count=0;
      pflag++;
     }
      for(i=0;i<n;i++)
      fwrite(&candi[i],sizeof(struct candidate),1,fp);
      fclose(fp);
      fp=fopen(savefile,"wb");
      fwrite(&pflag,4,1,fp);
      fwrite(&voteflag,4,1,fp);
      fclose(fp);
      printf("                             候选人信息保存成功,返回主菜单\n");
      getch();
      system("cls");
      menu();
   }break;
   case 'n':
   {
    system("cls");
    menu();
   }break;
   default:printf("                      请选择正确的选项\n");break;
  }
 }
}
void read_data()
{
 int i;
 system("cls");
 if(pflag==0)
 {
  printf("                            无候选人数据,请输入候选人数据\n");
  printf("                            任意键返回主菜单\n");
  getch();
  system("cls");
  menu();
 }
 if((fp=fopen(filename,"rb"))==NULL)
 {
 printf("                              文件打开失败,是否重试\n");
 while(select=getch()!=0)
 {
 switch(select)
 {
 case 'y':read_data(); break;
  case 'n':exit(0);break;
  default:printf("                     请输入正确指令\n");break;
 }
 }
 }
  printf("                                                      以下是候选人信息\n");
  printf("                                       编号****姓名****年龄****工作单位********票数\n");
  for(i=0;i<pflag;i++)
  fread(&candi[i],sizeof(struct candidate),1,fp);
  for(i=0;i<pflag;i++)
  printf("                                       %s\t%s\t%d\t%s\t\t%d\n",DATAPRINT);
 fclose(fp);
 printf("                                                    按任意键返回主菜单\n");
 getch();
 system("cls");
 menu();
}
void  record_order()
{
 int top,seek,i;
 struct candidate *temp;
 struct candidate *cp[50];
 struct candidate candi[50];
 fopen(filename,"rb");
 for(i=0;i<pflag;i++)
 {
  fread(&candi[i],sizeof(struct candidate),1,fp);
  cp[i]=&candi[i];
 }
  fclose(fp);
  system("cls");
  printf("                                    请选择排序方式\n");
  printf("                                 1 按姓名排序 2 按编号排序\n");
   while((select=getch())!='\n')
 {
  switch(select)
  {
   case '1':
   {
     printf("                            请确认是否按照姓名排序(按n返回主菜单)\n");
     printf("                                        y  确定   n   取消\n");
    while((select=getch())!='\n')
    {
     switch(select)
     {
    case 'y':
    {
     for(top=0;top<pflag-1;top++)
     for(seek=top+1;seek<pflag;seek++)
     if(strcmp(cp[top]->name,cp[seek]->name)>0)
     {
      temp=cp[top];
      cp[top]=cp[seek];
      cp[seek]=temp;
     }
     fp=fopen(filename,"wb");
     for(i=0;i<pflag;i++)
     fwrite(cp[i],sizeof(struct candidate),1,fp);
     fclose(fp);
     printf("                                   排序完成,返回主菜单\n");
     getch();
     system("cls");
     menu();
    }
    break;
    case 'n':
     {
      system("cls");
      menu();
     }
    break;
    default:printf("                                      指令错误请重新输入\n");break;
    }
    }
    
   }
    
    break;
    case '2':
    {
     printf("                             请确认是否按照编号排序(按n返回主菜单)\n");
     printf("                                   y  确定   n   取消\n");
    while((select=getch())!='\n')
    {
     switch(select)
     {
    case 'y':
    {
     for(top=0;top<pflag-1;top++)
     for(seek=top+1;seek<pflag;seek++)
     if(strcmp(cp[top]->num,cp[seek]->num)>0)
     {
      temp=cp[top];
      cp[top]=cp[seek];
      cp[seek]=temp;
     }
     fp=fopen(filename,"wb");
     for(i=0;i<pflag;i++)
     fwrite(cp[i],sizeof(struct candidate),1,fp);
     fclose(fp);
     printf("                                  排序完成,返回主菜单\n");
     getch();
     system("cls");
     menu();
    }
    break;
    case 'n':
     {
      system("cls");
      menu();
     }
    break;
    default:printf("                            指令错误请重新输入\n");break;
    }
    }
    }break;
    default:printf("                                请输入正确指令\n");break;
  }
 }
   printf("                                    无候选人信息\n请先写入候选人信息再进行排序操作\n");
   system("cls");
   menu();
}

void count_up()
{
 system("cls");
 printf("                                               统 计\n");
 printf("                                           选择统计方式\n");
 printf("                                    1   单位统计      2   年龄统计\n");
 while((select=getch())!='\n')
 {
  switch(select)
  {
   case '1':count_up_unit();break;
   case '2':count_up_age();break;
  }
 }
}
void count_up_age()
{
 int Pcount1=0,Pcount2=0,Pcount3=0,Pcount4=0,Pcount5=0,Pcount6=0;
 int i;
 fp=fopen(filename,"rb");
 for(i=0;i<pflag;i++)
  {
   fread(&candi[i],sizeof(struct candidate),1,fp);
   if(candi[i].age>10&&candi[i].age<=20)   Pcount1++;
   if(candi[i].age>20&&candi[i].age<=30)   Pcount2++;
   if(candi[i].age>30&&candi[i].age<=40)   Pcount3++;
   if(candi[i].age>40&&candi[i].age<=50)   Pcount4++;
   if(candi[i].age>50&&candi[i].age<=60)   Pcount5++;
   if(candi[i].age>60&&candi[i].age<=70)   Pcount6++;
  }
  system("cls");
  printf("                                       10至20岁的候选人数为%d个\n",Pcount1);
  printf("                                       20至30岁的候选人数为%d个\n",Pcount2);
  printf("                                       30至40岁的候选人数为%d个\n",Pcount3);
  printf("                                       40至50岁的候选人数为%d个\n",Pcount4);
  printf("                                       50至60岁的候选人数为%d个\n",Pcount5);
  printf("                                       60至70岁的候选人数为%d个\n",Pcount6);
  getch();
  printf("                                       再按任意键返回主菜单\n");
  getch();
  system("cls");
  menu();
}
void count_up_unit()
{
 int i,n,Unitcount=0;
 int UC[10];
 int UNIF=0;
 char UNIT[10][20];
 fp=fopen(filename,"rb");
 for(i=0;i<pflag;i++)
 fread(&candi[i],sizeof(struct candidate),1,fp);
  for(i=0;i<pflag;i++)
   { 
   for(n=0;n<pflag;n++)
   {
    if(strcmp(candi[i].unit,UNIT[n])==0)
     {
      UNIF=0;
     }
     else
     {
     UNIF=1; 
     break;
     }
   }
     if(UNIF)
     {
      strcpy(UNIT[Unitcount],candi[i].unit);
      Unitcount++;
     }
  }
 for(i=0;i<pflag;i++)
 {
  for(n=0;n<Unitcount;n++)
  {
   if(strcmp(candi[i].unit,UNIT[n])==0)
    UC[n]++;
  }
 }
 for(n=0;n<Unitcount;n++)
 printf("                                       单位:%s,候选人数:%d\n",UNIT[n],UC[n]);
 getch();
 printf("                                       再按任意键返回主菜单\n");
 getch();
 system("cls");
 menu();
}

  
void search()

  int n;
 char c;
 char number[4];
 int flag=0;
 for(int i=0;i<pflag;i++)
  fread(&candi[i],sizeof(struct candidate),1,fp);
 do
 {
  printf("请输入要查询的候选人号码: ");
  scanf("%s",&number);
  for(n=0;n<99;n++)
  {
 
 if(strcmp( number,candi[i].num)==0)
   {
     printf("\t 您要查询的候选人信息如下: ");
     printf("\t号码%s\n",candi[i].num);
     printf("\t姓名%s\n",candi[i].name);
     printf("\t年龄%d\n",candi[i].age);
     printf("\t票数%d\n,candi[i].unit");
     flag=1;break;
   }
  }
  if(flag)
  {
   flag=0;
  }
  else
  {
   printf("\t没有您要查询的候选人\n");
  }
   printf("\t要继续查询候选人吗?是(y)/否(n)");
  getchar();
  c=getchar();
 }while((c=='y')||(c=='Y'));
}
  
void delete_modify()
{
}
void insert_data()
{
 int i,n;
 if(!voteflag)
 {
 fp=fopen(filename,"ab");
 system("cls");
 printf("                         请输入要添加的候选人信息个数\n");
 scanf("%d",&n);
 system("cls");
 printf("\t\t\t\t\t编号****姓名****年龄****工作单位\n");
 for(i=0;i<n;i++)
 {
  printf("\t\t\t\t\t");
 scanf("%s\t%s\t%d\t%s",candi[i].num,candi[i].name,&candi[i].age,candi[i].unit);
 candi[i].count=0;
 pflag++;
 }
  for(i=0;i<n;i++)
  fwrite(&candi[i],sizeof(struct candidate),1,fp);
  fclose(fp);
  fp=fopen(savefile,"wb");
  fwrite(&pflag,4,1,fp);
  fwrite(&voteflag,4,1,fp);
  fclose(fp);
  printf("                             候选人信息保存成功,返回主菜单\n");
  getch();
  system("cls");
  menu();
 }
 else
 {
  printf("                              投票已经进行过了,无法再新增候选人数据\n");
  printf("                                          现在按任意键返回主菜单\n");
  getch();
  system("cls");
  menu();
 }
}
void reset()
{
 system("cls");
 fp=fopen(filename,"wb");
 fclose(fp);
 fp=fopen(savefile,"wb");
 pflag=0;
 fwrite(&pflag,4,1,fp);
 voteflag=0;
 fwrite(&voteflag,4,1,fp);
 fclose(fp);
 getch();
 printf("                           数据格式化完成,返回主菜单\n");
 getch();
 system("cls");
 menu();
}
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
针对投票系统源代码 仅供参考 一、课程设计目的和任务 为完成对十佳运动员的选拔,故设计此程序通过众人对20位候选人投票表决,选出其中票数最高的前十位,定为十佳运动员。这就要求本程序要能够录入20位候选人的名单,包括起编号和姓名,然后程序可以接受用户的投票,并且自动作出票数统计并输出最后的票数由高到低的排序结果。 二、分析与设计 1.程序的基本功能: (1)查看十佳运动员的选名单。 (2) 接受用户的投票。 (3) 自动统计用户投票并输出排序结果。 (4) 添加一个管理员,可以录入选者名单。 (5) 退出程序。 2.系统总框图: 3.定义的函数及说明: 本程序由11个函数构成 back_sel()---用来返回用户菜单 display1()------用来显示用户菜单 f_read()-------用来读出候选人名单 admirin_save()-----管理员输入数据并将数据存盘 admirin()------管理员录入数据界面 admir()——管理员界面登录 paixv()-----查看十佳候选人排名,票数由高到低 write()------调用此函数来写入票数 voting()------投票界面,进行对选者的投票 select()-------首页界面选择 Main()---主函数。 4.算法设计: 本程序主要运用线性表的顺序存储结构,从而很容易的对数组进行操作。同时对于票数的统计排序方面采用比较经典的“冒泡法”来完成,从而优化了整个程序体,降低时间复杂度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值