C language curriculum design report - electronic voting platform

Topics: Void type, Return statement Pages: 13 (870 words) Published: December 5, 2014
课程设计报告
1. 需求分析
电子投票平台的需求来源于两种不同的角色:管理员,投票用户。 (1).管理员
可以对候选人信息进行初始化和修改,还可浏览候选人信息介绍,可对候选人的票数进行排序以及对系统的用户进行管理,创建使用者用户名和密码等。 (2).普通投票用户
该类用户需要用管理员分配的用户名和密码正确登录系统,可以查询候选人介绍、投票等。(投票是只需做到输入自己想要投票的候选人编号即可完成投票)2.软件功能模块结构 如图:

3.源程序代码
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

#define len1 sizeof(struct can)
#define len2 sizeof(struct ur)

int power;//记录登录方式

struct can
{
int id;
int sum;
char name[20];
char js[300];
struct can *next;
};

struct ur
{
char name[20];
char psw[20];
struct ur *next;
};

void index();//进入界面
void admin();//管理员界面
void user();//用户界面
void adcd();//新增候选人界面
void bscd();//浏览候选人
struct can *getcanlist();//从can.txt文件取出链表,返回候选人链表头指针 void canlistwf(struct can *p);//把候选人链表写入文件 void auser();//新增用户
struct ur *geturlist();//获得用户信息链表
void userlwf();//更新ur.txt用户信息
char *userfpsw(char *name);//查询用户密码

void main()
{
index();
}

void index()
{
int indexa;
void login();//声明登录界面函数
printf("---------欢迎使用电子投票系统---------\n");
printf("管理员登陆......请按1\n");
printf("投票用户登录......请按2\n");
printf("请输入登录方式:");
scanf("%d",&indexa);
getchar();//吸收输入的回车
if(indexa==1||indexa==2)
{
power=indexa;
login();
}else
{
printf("\n输入错误,请重新输入\n");
index();
}
}

void login()
{
char logina[20]={'\0'},loginb[20]={'\0'};
char psw[20];
struct ur *pp;
pp=geturlist();
printf("------登录界面-------\n");
printf("请输入登录帐号:");
gets(logina);
if(logina[0]!='\0')
{
printf("请输入登录密码:");
}
else
{
printf("\n输入的登录帐号不能为空\n");
login();
}
gets(loginb);
strcpy(psw,userfpsw(logina));
if(!strcmp(psw,loginb))//帐号密码均正确
{
if(power==1&&!strcmp("admin",logina))
{
admin();
}
else if(power==2)
{
user();
}
else
{
printf("\n权限不正确,请重新输入\n");
login();
}
}
else
{
printf("\n帐号密码不正确,请重新输入\n");
login();
}
}

void admin()//管理员工作页面
{
int admina;
while(1)
{
printf("--------管理员工作界面--------\n");
printf("新增候选人信息......请按1\n");
printf("浏览候选人信息......请按2\n");
printf("新增投票用户........请按3\n");
printf("要进行操作请输入相应的数字:");
scanf("%d",&admina);
getchar();//吸收输入多余字符
if(admina==1)//根据输入跳到相应处理函数
{
adcd();
break;
}
else if(admina==2)
{
bscd();
printf("操作成功,自动返回上一层\n");
admin();
break;
}
else if(admina==3)
{
auser();
break;
}
else//出错处理
{
printf("\n输入出错,请重新输入\n");
}
}
}

void adcd()//新增候选人函数
{
char name[20],js[300];
struct can *h,cd;
void admin();
while(1)
{
printf("--------新增候选人界面--------\n");
printf("请输入候选人姓名:");
gets(name);
if(name[0]!='\0')
strcpy(cd.name,name);
else
{
printf("输入出错,请重试\n");
continue;
}
printf("请输入候选人简介:\n");
gets(js);
strcpy(cd.js,js);
h=getcanlist();
cd.id=h->id+1;
cd.next=h;
canlistwf(&cd);
printf("操作成功,自动返回上一层\n");
admin();
break;
}

}
void bscd()//浏览候选人信息函数
{
struct can *p,*p1,*p2;
char name[20],js[300];
int a,t;
printf("是否按票数降序排列?1是/2不是,请输入对应的数字\n");
scanf("%d",&a);
p=getcanlist();
if(a==1)
{
p1=p2=p;
while(p2->next!=NULL)
{
p2=p2->next;
if(p2->next==NULL)break;
if(p1->sumsum)//交换值
{
strcpy(name,p1->name),strcpy(p1->name,p2->name),strcpy(p2->name,name);
strcpy(js,p1->js),strcpy(p1->js,p2->js),strcpy(p2->js,js);
t=p1->id,p1->id=p2->id,p2->id=t;
t=p1->sum,p1->sum=p2->sum,p2->sum=t;
}
}
}
if(a==2)
{
printf("--------候选人信息-------\n");
printf("编号\t候选人姓名\t所得票数\t候选人简介\n");
if(p==NULL)
{
printf("数据为空,自动返回上一层\n");
admin();
}
else
{
while(p->next!=NULL)
{
printf("%3d\t",p->id);
printf("%6s\t\t",p->name);
printf("%4d\t\t",p->sum);
printf("%s\t\n",p->js);
p=p->next;
}
}
}
else if(a!=1)
{
printf("输入错误,请重新输入\n");
bscd();
}

}

struct can *getcanlist()//从can文件取出链表,返回头指针 {...
Continue Reading

Please join StudyMode to read the full document

You May Also Find These Documents Helpful

  • Essay about Curriculum Design
  • ESOL: curriculum design Essay
  • Design Report Essay
  • Electronic Voting System Essay
  • Debate: Electronic Voting Essay
  • Electronic Voting Systems Essay
  • Electronic Voting Research Paper
  • Design of Electronic Circuits Lab Report Essay

Become a StudyMode Member

Sign Up - It's Free