喔我天 2019-10-15 11:05 采纳率: 0%
浏览 396

如何用C语言实现一个手机号一天只能投一次票?

大二实验周,选择了一个题目,是用C语言模拟投票系统。其中有一个要求是用户投票限制,一个手机号一天只能投一次票或者一天内相同用户不能给一个候选人重复投票(此种情况投票者可以给其他人投票)。
我们原本是打算用datetime,可是问了老师,老师很疑惑地问我们为什么要用datetime,但是问她有一些建议吗,她又不肯说。问了周围的,都没什么思路,恳请各位大佬解答。

下面贴出的是我们构建的结构体里包含的信息。

typedef struct voter//投票者结构体
{
    char name[20];
    char phone[20];

}vote;
typedef struct candidate//候选人结构体
{
    char name[20];
    char sex[8];
    int age;
    int piaoshu;
    int rank;
    int pec;
    int id;
}candi;
typedef struct manager//管理员结构体
{
    char name[20];
    char password[15];
}mana;
typedef struct ticket
{
char xuanmin[20]; //投票人
char hxr[20]; //候选人
int last; //最后投票日期,计算方式是投票的 (年份%100)*10000+月份*100+日期,比如今天是191015
}tick;
int candin; //这三个变量记录下实际有的候选人、投票人和票的总数
int tickn;
int voten;
void toupiao(vote *user,candi *c,tick *t)
{
int today=191015;
int canvot = 1;
for (int i = 0; i <tickn; i++)
{
if (strcmp(user[count].name, t[i].xuanmin) == 0 &&(t[i].last ==today))
{canvot = 0;
printf("今日投票次数已达上限");
break; } //今天投过
if((strcmp(user[count].name, t[i].xuanmin) == 0 && (c[num].name,t[i].hxr) == 0)) 
{  canvot = 0;
printf("给该候选人投票次数已达上限");
break; } //这个人投过这个候选人
}
if (canvot)
{
strcpy(t[tickn].xuanmin, user[count].name);
strcpy(t[tickn].hxr, c[num].name);
t[tickn].last =191015;
tickn++;
}
}

  • 写回答

4条回答 默认 最新

  • JonathanYan 2019-10-15 11:50
    关注

    记录时间记录到date就行,你可以建一个票(投票人手机号,候选人名称,日期)的数组,然后当一个人想去投票的时候就去查找对应的(投票人手机号,候选人名称,日期)是否出现在这个数组中,未出现就可投票并记录。
    这个结构体数组可以放在投票人结构体里,也可以放在候选人里,也可以单独存在,放在两个结构体里的时候去掉对应的属性就行。
    你这个题目有个潜在的问题是如果投票人非常多且不可预知怎么办,这种情况需要使用malloc和realloc不断调整数组大小。其他的都还简单。

    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站