📄 ccc.txt
字号:
#include "user.h"
#include "stdio.h"
#include "shead.h"
#include "stdlib.h"
void Admin(user m_user);
void AddUser();
void Addcandidate();
void BrowseIntro();
void CreatFile();
void CreatUser();
void Creatmaster();
void DelUser();
void Delcandidate();
void Guest(user m_user);
void ModifyMyPassword(m_user);
void ModifyUserNumber();
void ModifyIntro();
void QueryIntro();
void SortByUserNum();
void Vote();
void ClearVote();
void SortByVote();
int main()
{
FILE * fp=NULL;
user Show;
user TempS;/* 临时存放用户信息的结构体变量 */
char DataFile[40]="yonghu",c;/* 存放用户信息的文件名 */
int i;
char relogin;/* 是否重新登录的标志 */
int success=0;
fp=fopen(DataFile,"r");
if(fread(&Show,sizeof(user),1,fp)==(int)NULL)
{
printf("你是首次使用本系统,请创建用户\n");
Creatmaster();
}
/* CreateUser(); */
printf("#==============================#\n");
printf("# 欢迎进入投票系统! #\n");
printf("#==============================#\n\n");
again:
/* 输入用户名 */
printf("请输入用户名:");
scanf("%s",TempS.Name);
printf("password=");
fflush(stdin);
for(i=0;i<7;i++)
{
c=getch();
if(c==0x0d)
{
TempS.ps[i]='\0';
break;
}
printf("*");
TempS.ps[i]=c;
TempS.ps[i+1];
}
TempS.ps[7]='\0';
/* 打开yonghu文件,用来验证用户名和密码 */
fp=fopen(DataFile,"rb");
if(fp==NULL)
{
printf("\n打开文件 %s 失败! 按任意键结束\n",DataFile);
perror("打开文件失败");
getch();
exit(1);
}
/* 循环读取文件校验用户名和密码是否正确 */
while(fread(&Show,sizeof(user),1,fp)!=(int)NULL)
/*while(fread(&Show,sizeof(user),1,fp)!=int(NULL))*/
{
if(strcmp(TempS.Name,Show.Name)==0 && (strcmp(TempS.ps,Show.ps)==0))
{
printf("\n登陆成功!");
success=1;
/* 判断权限,如power的值为1,则是管理员,并调用管理员功能界面 */
if(Show.power==1)
{
system("cls");
printf("\n你的权限是管理员!\n\n\n按任意键继续...\n");
getch();
Admin(Show);
break;
}/* 判断权限,如power的值为0,则是投票者,并调用投票者功能选择界面 */
if(Show.power==0)
{
system("cls");
printf("\n你的权限是普通用户!\n按任意键继续...\n");
getch();
Guest(Show);
break;
}
}
}
fclose(fp);
/* 如未能成功登录,让用户选择重新登录或退出 */
if(success==0)
{
fflush(stdin);
printf("\n密码或用户名错误!重新输入?(y/n)");
fflush(stdin);
relogin=getchar();
if((relogin=='Y')||(relogin=='y'))
{
goto again;
}
else
{
printf("程序结束\n");
exit(0);
}
}
}
void Admin(user m_user)/*m_user接收用户的登录信息*/
{
int choice=0;/* 存放用户选项的变量 */
while(1)
{
system("cls");
printf("+------------------------------------------+\n");
printf("| 欢迎进入管理员系统 |\n");
printf("|----------------------+-------------------|\n");
printf("|1.初始化候选人文件 |2.浏览候选人简介 |\n");
printf("|3.修改候选人简介 |4.按票数排序 |\n");
printf("+----------------------+-------------------+\n");
printf("|5.清空票数 |6.修改密码 |\n");
printf("+----------------------+-------------------+\n");
printf("|11.创建新的用户文件 |12.添加新用户 |\n");
printf("|13.删除用户 |14.修改用户信息 |\n");
printf("|15.按用户序号排序 |16.删除候选人 |\n");
printf("|17添加候选人 |0.结束程序 |\n");
printf("+----------------------+-------------------+\n");
printf("输入你的选择:");
scanf("%d",&choice);
switch(choice)
{
case 1:
CreatFile();
break;
case 2:
BrowseIntro();
break;
case 3:
ModifyIntro();
break;
case 4:
SortByVote();
break;
case 5:
ClearVote();
break;
case 6:
ModifyMyPassword(m_user);
break;
case 11:
CreatUser();
break;
case 12:
AddUser();
break;
case 13:
DelUser();
break;
case 14:
ModifyUserNumber();
break;
case 15:
SortByUserNum();
break;
case 16:
Delcandidate();
break;
case 17:
Addcandidate();
break;
case 0:
exit(0);
default:
printf("选择错误 \n按任意键继续....\n");
fflush(stdin);/*清空输入缓冲区*/
getch();
break;
}
}
}
/*添加用户信息*/
void AddUser()
{
FILE *fp=NULL,*fp1=NULL;
user Show[100],Show1;
user TempS[100];
int i=0,j;
char DataFile[40]="yonghu";/* 存储投票人信息的文件名 */
char m;
int flag=0;
again: fp=fopen(DataFile,"ab");
fp1=fopen(DataFile,"r");
system("cls");
/* 如果当前文件不存在,提示打开文件失败 */
if(fp==NULL)
{
printf("\n打开文件 %s 失败!按任意键结束\n",DataFile);
perror("Open file fail");
getch();
exit(1);
}
/* 如果成功打开文件,则提示输入序号、用户名、密码、权限等相关信息 */
printf("输入 序号,姓名 和 密码.序号为0意味着结束.\n");
printf("序号不要超过10位,姓名不要超过20个字节,密码不要超过6位,权限0~1(0为普通,1为管理员)\n");
printf("文件内容如下:\n");
printf("\n序号\t\t姓名\t\t密码\t\t权限\n");
while(fread(&Show1,sizeof(user),1,fp1)!=(int)NULL)
{
printf("\n%ld\t\t%s\t\t%-8s\t\t%d\n",Show1.Number,Show1.Name,Show1.ps,Show1.power);
flag++;
}
/* 循环从键盘上读取投票人输入的投票人相关信息 */
while(1)
{
fp1=fopen(DataFile,"rb");
again1: j=0;
printf("\n序号0意味着结束.\n");
printf("请输入序号:");
scanf("%ld",&TempS[i].Number);
getchar();
while(fread(&Show[j],sizeof(user),1,fp1)!=(int)NULL)
{
if(Show[j].Number==TempS[i].Number)
{
printf("序号已存在,请重新输入:\n");
goto again1;
}
j++;
}
if(TempS[i].Number==0)
{
break;
}
printf("\n姓名:");
scanf("%s",TempS[i].Name);
TempS[i].Name[19]='\0';
printf("\n密码:");
scanf("%s",TempS[i].ps);
TempS[i].ps[7]='\0';
printf("\n权限=");
scanf("%d",&TempS[i].power);
getchar();
if(TempS[i].power!=1)
{
TempS[i].power=0;
}
flag++;
if(flag>=99)/* 如果输入的数据量超过最大允许的范围,则提示数据不能录入 */
{
printf("超出范围");
break;
}
/* 如遇无法写入文件的异常,则加以提示 */
if(fwrite(&TempS[i],sizeof(user),1,fp)!=1)
{
printf("\n写入 %s 失败! 按任意键结束\n",DataFile);
perror("写入失败");
getch();
exit(1);
}
i++;
fclose(fp);
/* 在屏幕上显示文件内容 */
printf("添加用户到 %s 成功.\n",DataFile);
printf("添加后的内容如下:\n");
i=0;
fp=fopen(DataFile,"rb");
if(fp==NULL)
{
printf("\n打开文件 %s 失败!按任意键结束 \n",DataFile);
perror("打开失败\n");
getch();
exit(1);
}
printf("\n序号\t\t姓名\t\t密码\t\t权限\n");
while(fread(&Show[i],sizeof(user),1,fp)!=(int)NULL)
{
printf("\n%ld\t\t%s\t\t%-8s\t\t%d\n",Show[i].Number,Show[i].Name,Show[i].ps,Show[i].power);
i++;
}
fclose(fp);
printf("是否继续 (Y/N):");
m=getchar();
if(m=='y'||m=='Y')
goto again;
else if(m=='n'||m=='N')
{
printf("按任意键继续:\n");
getch();
return;
}
}
}
/*排序简介*/
void BrowseIntro()
{
FILE *fp=NULL;
candidate Show;
candidate a[100];
candidate temp;
char name[40]="houxuanren";
int count=0,i,j,m;
//printf("请输入文件名:\n");
//scanf("%s",name);
fp=fopen(name,"r+");
system("cls");
/* 如果当前文件不存在,提示打开文件失败 */
if(fp==NULL)
{
printf("\n打开文件 %s 失败!按任意键结束!.\n",name);
perror("打开文件失败!");
getch();
exit(1);
}
i=0;
while(fread(&Show,sizeof(candidate),1,fp)!=(int)NULL)
{
printf("",Show.Number,Show.Name,Show.intro,Show.votenum);
a[i].Number=Show.Number;a[i].votenum=Show.votenum;
strcpy(a[i].Name,Show.Name,20);
strcpy(a[i].intro,Show.intro,500);
i++;
}
loop1:printf("请输入1(降序)或2(升序)\n");
scanf("%d",&m);
count=i;
fclose(fp);
switch(m)
{
case 1:for(i=0;i<count;i++)
for(j=0;j<count;j++)
if(a[i].Number>a[j].Number)
{ temp=a[i];
a[i]=a[j];
a[j]=temp;
}break;
case 2:for(i=0;i<count;i++)
for(j=0;j<count;j++)
if(a[i].Number<a[j].Number)
{ temp=a[i];
a[i]=a[j];
a[j]=temp;
}break;
default: printf("选择错误,请重新选择!");
goto loop1;
}
fp=fopen(name,"wb");
for(i=0;i<count;i++)
if((fwrite(&a[i],sizeof(candidate),1,fp)!=1))
{printf("出现错误:\n");break;}
fclose(fp);
fp=fopen(name,"r");
printf("排序后");
printf("\n编号\t\t姓名\t\t简介\n");
while(fread(&Show,sizeof(candidate),1,fp)!=(int)NULL)
printf("\n%ld\t\t%s\t\t%-8s\t\t\n",Show.Number,Show.Name,Show.intro);
fclose(fp);
printf("按任意键继续:\n");
getch();
}
/*创建候选人信息*/
void CreatFile()
{
FILE *fp=NULL,*fp1=NULL;
candidate Show;
candidate TempS;
char DataFile[40]="houxuanren";/* 存储候选人信息的文件名 */
int count=0,i,j=0,a[10];
fp=fopen(DataFile,"wb");
fclose(fp);
fp=fopen(DataFile,"ab");
system("cls");
/* 如果当前文件不存在,提示打开文件失败 */
if(fp==NULL)
{
printf("\n打开文件 %s 失败!按任意键结束.\n",DataFile);
perror("打开文件失败!");
getch();
exit(1);
}
/* 如果成功打开文件,则提示输入编号、候选人、简介、等相关信息 */
printf("请输入候选人编号,姓名,简介.编号0意味着结束:\n");
printf("编号不要超过10位,姓名不要超过20字节,简介不要超过500字节\n");
/* 循环从键盘上读取投票人输入的投票人相关信息 */
while(1)
{
fp1=fopen(DataFile,"rb");
loop:printf("\n输入 '编号=0' 意味着结束.\n");
printf("编号:");
scanf("%ld",&TempS.Number);
a[j]=TempS.Number;
for(i=0;i<j;i++)
if(a[i]==TempS.Number)
{
printf("编号已存在!请重新输入:\n");
goto loop;
}
getchar();
if(TempS.Number==0)
{
break;
}
printf("姓名:");
scanf("%s",TempS.Name);
getchar();
TempS.Name[19]='\0';
printf("简介:");
scanf("%s",TempS.intro);
getchar();
TempS.votenum=0;
/* 如遇无法写入文件的异常,则加以提示 */
if(fwrite(&TempS,sizeof(candidate),1,fp)!=1)
{
printf("\n写入文件 %s 失败! 按任意键结束\n",DataFile);
perror("写入失败");
getch();
exit(1);
}
j++;
count++;
if(count==10)
break;
fclose(fp1);
}
fclose(fp);
/* 在屏幕上显示文件内容 */
printf("创建信息在 %s 成功.\n",DataFile);
printf("内容如下:\n");
fp=fopen(DataFile,"rb");
if(fp==NULL)
{
printf("\n打开文件 %s 失败! 按任意键结束 \n",DataFile);
perror("打开失败!");
getch();
exit(1);
}
printf("\n编号\t\t姓名\t\t简介\t\t\t\t票数\n");
while(fread(&Show,sizeof(candidate),1,fp)!=(int)NULL)
{
printf("\n%ld\t\t%s\t\t%-8s\t\t\t\t%d\n",Show.Number,Show.Name,Show.intro,Show.votenum);
}
fclose(fp);
printf("按任意键继续...");
getch();
}
/*创建用户信息*/
void CreatUser()
{
FILE *fp=NULL;
user Show;
user TempS;
char DataFile[40];/* 存储投票人信息的文件名 */
int a[100];
int count=1,flag,i,j=0;
printf("请输入要创建的用户文件名:\n");
scanf("%s",DataFile);
getchar();
fp=fopen(DataFile,"ab");
system("cls");
/* 如果当前文件不存在,提示打开文件失败 */
if(fp==NULL)
{
printf("\n打开文件 %s 失败!按任意键结束.\n",DataFile);
perror("Open file fail");
getch();
exit(1);
}
/* 如果成功打开文件,则提示输入序号、用户名、密码、权限等相关信息 */
printf("输入序号,姓名 和 密码.序号0意味着结束.\n");
printf("序号不要超过10位,姓名不要超过20字节,权限:0~1");
/* 循环从键盘上读取投票人输入的投票人相关信息 */
while(1)
{
loop: printf("\n输入 '序号=0' 意味着结束.\n");
printf("序号:");
scanf("%ld",&TempS.Number);
a[j]=TempS.Number;
for(i=0;i<j;i++)
if(a[i]==TempS.Number)
{
printf("编号已存在!请重新输入!按任意键继续!\n");
getch();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -