完整操作逻辑:
主要内容有数组的操作、最简单的计算机加密方法(本质上是io,进行两次与非运算值会还原。机械加密工作没有io的概念,只是在有序地变换映射关系,参考恩尼格玛密码机,解密过程与加密过程映射关系不会改变,仅靠改变电流方向就完成了加解密)、c语言文件操作。
文件指针fpm指向加密成绩文件”加密成绩信息.txt“,fp指向我们需要操作的文件“cj.txt”(不会存储),fpp指向存储的密码文件”password.txt“。在内存中除了有这三个文件的缓冲区,还有信息顺序表(数组),密码转解数组和用户输入密码数组。在程序结束的时候文件缓存区的内容将会统一存储或者移除。
//头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>//控制台输入输出头文件
int random1=187361,random2=37896;//实现加解密方法的参数
//成绩结构体
struct score
{
char snum[11];//学号
char sname[11];//姓名
float chinese;//单科成绩
float math;
float english;
float sumcj;//总成绩
int rank;//排名
};
//函数声明
void showmenu();//菜单
void lr(int);//录入成绩
int sc(int);//删除成绩
void xg(int);//修改成绩
void cx(int);//查询成绩
void cxmenu(void);//二级成绩查询菜单
void xhcx(int);//学号查询
void xmcx(int);//姓名查询
void sumcx(int);//总成绩查询
void yw(int);//单科成绩查询
void sx(int);
void yy(int);
void over(int);//结束查询菜单
void jspm(int);//计算排名
void xs(int);//成绩显示
void js(int);//结束主菜单
void changep();//管理员密码配置
int main()
{
int flag,n,count;struct score stu[200];char ch;//flag主菜单标志序号,n录入人数,count计当前人数。
FILE *fp,*fpm,*fpp;
fpp=fopen("password.txt","r");//password.txt是储存密码的文件
if(fpp==NULL)
{
printf("打开密码文件失败,请联系技术支持!\n");
getch();
fclose(fpp);
exit(0);
}
fpm=fopen("加密成绩信息.txt","a+");
if(fpm==NULL)
{
printf("打开文件失败,请重试!\n");
getch();
fclose(fpm);
exit(0);
}
fp=fopen("cj.txt","w+");//cj.txt是当前成绩信息文件
if(fp==NULL)
{
printf("打开文件失败,请重试!\n");
getch();
fclose(fp);
exit(0);
}
int c;
rewind(fpm);
while ((c=fgetc(fpm))!=EOF) fputc(c^random1,fp);
fclose(fpm);
rewind(fp);
ch=fgetc(fp);
if(ch==EOF) count=0;//空文件
else
{
count=0;
rewind(fp);
while(!feof(fp))//文件没有读到末尾(至少执行一次)
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[count].snum,stu[count].sname,&stu[count].chinese,&stu[count].math,&stu[count].english,&stu[count].sumcj,&stu[count].rank);
count++;
}
}
fclose(fp);
int id;
printf("请选择身份:1.管理员 2.访客 3.退出\n");
do
{
scanf("%d",&id);
if(id==1)
{
int c,i=0;char pass[20],idpass[20];
printf("请输入管理员密码:");
scanf("%s",idpass);
while(6>strlen(idpass)||strlen(idpass)>19)
{
printf("请重新输入:");
scanf("%s",idpass);
}
while ((c = fgetc(fpp))!= EOF)
{
pass[i]=(char)c^random2;
i++;
}
fclose(fpp);
if(!strcmp(pass,idpass))
{
do
{
showmenu();
scanf("%d",&flag);//选择操作
switch(flag)
{
case 1: printf("请输入您要录入的人数:");
scanf("%d",&n);
lr(n);
count += n;break;
case 2: count=sc(count);break;
case 3: xg(count);break;
case 4: cx(count);break;
case 5: jspm(count);break;
case 6: xs(count);break;
case 7: changep();break;
case 0: js(count);break;
default:printf("输入错误,请重试!\n");getch();break;
}
}while(flag!=0);
remove("cj.txt");
return 0;
}
else
{
printf("密码错误,请重试。若密码失效,请联系技术支持。");
remove("cj.txt");
getch();
return 0;
}
}
if(id==2)
{
cx(count);
remove("cj.txt");
return 0;
}
if(id==3) {remove("cj.txt");return 0;}
printf("身份选择错误,按重新输入:");
}while(id!=3);
remove("cj.txt");
return 0;
}
//0显示菜单
void showmenu()
{
system("cls");
printf("*----------------------------------------------------*\n");
printf("* 欢迎使用**成绩管理系统** *\n");
printf("*----------------------------------------------------*\n");
printf("* 1: 录入成绩 *\n");
printf("* 2: 删除成绩 *\n");
printf("* 3: 修改成绩 *\n");
printf("* 4: 成绩查询(存档) *\n");
printf("* 5: 成绩计算并排名 *\n");
printf("* 6: 显示当前成绩信息 *\n");
printf("* 7: 配置管理员密码 *\n");
printf("* 0: 加密储存并退出系统 *\n");
printf("*----------------------------------------------------*\n");
printf("选择操作<0-6>\n");
return;
}
//1录入成绩
void lr(int n)
{
struct score stu[200];
FILE *fp;
fp=fopen("cj.txt","a");
if(fp==NULL)
{
printf("打开文件失败,请重试!\n");
getch();
fclose(fp);
exit(0);
}
printf("请输入全部学生的学号,姓名,语文成绩,数学成绩,英语成绩;\n");
int i;
for(i=0;i<=n-1;i++)
{
printf("----第%d个学生----\n", i+1);
printf("学号:");
scanf("%s",stu[i].snum);
printf("姓名:");
scanf("%s",stu[i].sname);
printf("语文成绩:");
scanf("%f",&stu[i].chinese);
printf("数学成绩:");
scanf("%f",&stu[i].math);
printf("英语成绩:");
scanf("%f",&stu[i].english);
stu[i].sumcj=0;
stu[i].rank=0;
fprintf(fp,"%s %s %.1f %.1f %.1f %.1f %d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
}
fclose(fp);
printf("添加学生成功,请按任意键返回\n");
getch();
}
//2删除成绩(建议删除成绩后重新计算排名)
int sc(int n)
{
struct score stu[200];
struct score stuu[199];//删除后的结构体数组
char stnum[11];//学号
int find=0;
printf("请输入你要删除的学生学号:");
scanf("%s", stnum);
FILE *fp;
fp=fopen("cj.txt","r");
if(fp==NULL)
{
printf("打开文件失败!\n");
getch();
return -1;
}
int c=0;
int index=0;//用于记录目标序号
while(!feof(fp))//遍历文件
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
if(strcmp(stnum,stu[c].snum)==0)
{
find = 1;//根据学号查找,找到赋值为1
index = c;//记录编号
}
c++;
}
fclose(fp);
if(find==0)
{
printf("没有该学生成绩信息,请按任意键返回\n");
getch();
return n;
}
else
{ int i;
//删除
for(i=index;i<c;i++)
stuu[i]=stu[i+1];
fp=fopen("cj.txt","w");
//写入数据
for(i=0;i<c-1;i++)//剩余c-1个学生成绩
{
fprintf(fp,"%s %s %.1f %.1f %.1f %.1f %d\n",stuu[i].snum,stuu[i].sname,stuu[i].chinese,stuu[i].math,stuu[i].english,stuu[i].sumcj,stuu[i].rank);
}
fclose(fp);
printf("学号为%s的学生成绩删除成功,请按任意键返回\n",stnum);
getch();
return n-1;
}
}
//3修改成绩
void xg(int n)
{
struct score stu[200];
FILE *fp;
char stnum[11];
int find=0;
printf("请输入要修改的学生学号:");
scanf("%s",stnum);
fp=fopen("cj.txt","r");
if(fp==NULL)
{
printf("文件打开失败,请联系管理员\n");
getch();
return;
}
int c=0;
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
if(strcmp(stnum,stu[c].snum)==0)
{
find=1;
//修改操作
printf("找到你要修改成绩的同学,请输入他的成绩:\n");
printf("语文成绩: %.1f,新成绩为:",stu[c].chinese);
scanf("%f",&stu[c].chinese);
printf("数学成绩: %.1f,新成绩为:",stu[c].math);
scanf("%f",&stu[c].math);
printf("英语成绩: %.1f,新成绩为:",stu[c].english);
scanf("%f",&stu[c].english);
}
c++;
}
fclose(fp);
if(find==0)
{
printf("没有找到该成绩记录,请按任意键退出\n");
getch();
}
else
{
fp=fopen("cj.txt","w");
int i;
for(i=0;i<n;i++)
{
//更新数据
fprintf(fp,"%s %s %.1f %.1f %.1f %.1f %d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
}
fclose(fp);
printf("学号为%s同学的成绩已经修改成功,请按任意键返回",stnum);
getch();
}
return;
}
//4成绩查询
void cx(int c)
{
int k;
do
{
cxmenu();
scanf("%d",&k);
switch(k)
{
case 1:xhcx(c);break;//学号查询
case 2:xmcx(c);break;//姓名查询
case 3:sumcx(c);break;//总成绩查询
case 4:yw(c);break;//单科成绩查询
case 5:sx(c);break;
case 6:yy(c);break;
case 0:over(c);break;
default:printf("输入错误,请重新选择\n");getch();break;
}
}while(k!=0);
return;
}
//4.0查询菜单
void cxmenu()
{
system("cls");
printf("*----------------------------------------------------*\n");
printf("* 成绩查询菜单 *\n");
printf("*----------------------------------------------------*\n");
printf("* 1: 按学号查询 *\n");
printf("* 2: 按姓名查询 *\n");
printf("* 3: 总成绩查询(存档) *\n");
printf("* 4: 语文单科成绩查询(存档) *\n");
printf("* 5: 数学单科成绩查询(存档) *\n");
printf("* 6: 英语单科成绩查询(存档) *\n");
printf("* 0: 退出查询系统 *\n");
printf("*----------------------------------------------------*\n");
printf("选择操作<0-6> \n");
}
//4.1学号查询
void xhcx(int n)
{
struct score stu[200];
char snum[11];
printf("请输入你要查询学生的学号:");
scanf("%s",snum);
FILE *fp;
fp=fopen("cj.txt ","r");
if(fp==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
c++;
}
int i;
for(i=0;i<n;i++)
{
if(strcmp(snum,stu[i].snum)==0)
{
printf("学号\t\t\t姓名\t\t语文\t数学\t英语\t总分\t名次\n");
printf("%s\t\t%s\t\t%.1f\t%.1f\t%.1f\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
printf("按任意键返回\n");
getch();
fclose(fp);
return;
}
}
printf("无成绩信息,请重试!\n");
getch();
fclose(fp);
return;
}
//4.2姓名查询
void xmcx(int n)
{
struct score stu[200];
char sname[11];
printf("请输入你要查询学生的姓名:");
scanf("%s",sname);
FILE *fp;
fp=fopen("cj.txt ","r");
if(fp==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %d\n\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
c++;
}
int i;
for(i=0;i<n;i++)
{
if(strcmp(sname,stu[i].sname)==0)
{
printf("学号\t\t\t姓名\t\t语文\t数学\t英语\t总分\t名次\n");
printf("%s\t\t%s\t\t%.1f\t%.1f\t%.1f\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
printf("按任意键返回\n");
getch();
fclose(fp);
return;
}
}
printf("无成绩信息,请重试!\n");
getch();
fclose(fp);
return;
}
//4.3总成绩查询
void sumcx(int n)
{
struct score stu[200];
FILE *fp,*fp0;
fp=fopen("cj.txt ","r");
if(fp==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
fp0=fopen("总成绩表.txt ","w");
if(fp0==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
if(n==0) {printf("无成绩信息,请按任意键返回\n");getch();return;}
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
if(stu[c].sumcj == 0)
{
printf("请管理员先进行成绩计算排名!\n");
getch();
fclose(fp);
return;
}
c++;
}
printf("学号\t\t\t姓名\t\t语文\t数学\t英语\t总分\t名次\n");
fprintf(fp0,"学号\t\t\t姓名\t\t语文\t数学\t英语\t总分\t名次\n");
for(int i=0;i<n;i++)
{
printf("%s\t\t%s\t\t%.1f\t%.1f\t%.1f\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
fprintf(fp0,"%s\t\t%s\t\t%.1f\t%.1f\t%.1f\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
}
printf("显示完毕,总成绩文件已更新,按任意键返回\n");
getch();
fclose(fp);
fclose(fp0);
return;
}
//4.4语文单科成绩查询
void yw(int n)
{
struct score stu[200],order;
FILE *fp,*fp1;
fp=fopen("cj.txt ","r");
if(fp==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
fp1=fopen("语文单科成绩表.txt ","w");
if(fp1==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
if(n==0) {printf("无成绩信息,请重试。");getch();return;}
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
c++;
}
//排序
for(int i=0; i<n-1; i++)
{
for(int j=0; j<n-1-i; j++)
{
if(stu[j].chinese < stu[j+1].chinese)
{
order = stu[j];
stu[j] = stu[j+1];
stu[j+1] = order;
}
}
}
stu[0].rank=1;
for( int i=1;i<n;i++)
{
if(stu[i].chinese==stu[i-1].chinese)
{
stu[i].rank=stu[i-1].rank;
}
else
{
stu[i].rank=stu[i-1].rank+1;
}
}
printf("学号\t\t\t姓名\t\t语文\t名次\n");
fprintf(fp1,"学号\t\t\t姓名\t\t语文\t名次\n");
for( int i=0;i<n;i++)
{
printf("%s\t\t%s\t\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].rank);
fprintf(fp1,"%s\t\t%s\t\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].rank);
}
printf("显示完毕,语文单科成绩文件已更新,按任意键返回");
getch();
fclose(fp);
fclose(fp1);
return;
}
//4.5数学单科成绩查询
void sx(int n)
{
struct score stu[200],order;
FILE *fp,*fp2;
fp=fopen("cj.txt ","r");
if(fp==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
fp2=fopen("数学单科成绩表.txt ","w");
if(fp2==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
if(n==0) {printf("无成绩信息,请重试。");getch();return;}
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
c++;
}
//排序
for(int i=0; i<n-1; i++)
{
for(int j=0; j<n-1-i; j++)
{
if(stu[j].math < stu[j+1].math)
{
order = stu[j];
stu[j] = stu[j+1];
stu[j+1] = order;
}
}
}
stu[0].rank=1;
for( int i=1;i<n;i++)
{
if(stu[i].math==stu[i-1].math)
{
stu[i].rank=stu[i-1].rank;
}
else
{
stu[i].rank=stu[i-1].rank+1;
}
}
printf("学号\t\t\t姓名\t\t数学\t名次\n");
fprintf(fp2,"学号\t\t\t姓名\t\t数学\t名次\n");
for( int i=0;i<n;i++)
{
printf("%s\t\t%s\t\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].math,stu[i].rank);
fprintf(fp2,"%s\t\t%s\t\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].math,stu[i].rank);
}
printf("显示完毕,数学单科成绩文件已更新,按任意键返回");
getch();
fclose(fp);
fclose(fp2);
return;
}
//4.6英语单科成绩查询
void yy(int n)
{
struct score stu[200],order;
FILE *fp,*fp3;
fp=fopen("cj.txt ","r");
if(fp==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
fp3=fopen("英语单科成绩表.txt ","w");
if(fp3==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
if(n==0) {printf("无成绩信息,请重试。");getch();return;}
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
c++;
}
//排序
for(int i=0; i<n-1; i++)
{
for(int j=0; j<n-1-i; j++)
{
if(stu[j].english < stu[j+1].english)
{
order = stu[j];
stu[j] = stu[j+1];
stu[j+1] = order;
}
}
}
stu[0].rank=1;
for( int i=1;i<n;i++)
{
if(stu[i].english==stu[i-1].english)
{
stu[i].rank=stu[i-1].rank;
}
else
{
stu[i].rank=stu[i-1].rank+1;
}
}
printf("学号\t\t\t姓名\t\t英语\t名次\n");
fprintf(fp3,"学号\t\t\t姓名\t\t英语\t名次\n");
for( int i=0;i<n;i++)
{
printf("%s\t\t%s\t\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].english,stu[i].rank);
fprintf(fp3,"%s\t\t%s\t\t%.1f\t%d\n",stu[i].snum,stu[i].sname,stu[i].english,stu[i].rank);
}
printf("显示完毕,英语单科成绩文件已更新,按任意键返回");
getch();
fclose(fp);
fclose(fp3);
return;
}
//4.7结束查询菜单函数
void over(int n)
{
printf("一共有%d条成绩记录,欢迎下次使用,按任意键退出",n);
getch();
return;
}
//5计算排名函数
void jspm(int n)
{
struct score stu[200],order;
int i,j;
FILE *fp;
fp=fopen("cj.txt","r");
if(fp==NULL)
{
printf("打开文件失败!\n");
getch();
exit(0);
}
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
stu[c].sumcj = stu[c].chinese + stu[c].math + stu[c].english;
c++;
}
fclose(fp);
for(i=0; i<n-1; i++)//排序
{
for(j=0; j<n-1-i; j++)
{
if(stu[j].sumcj < stu[j+1].sumcj)
{
order = stu[j];
stu[j] = stu[j+1];
stu[j+1] = order;
}
}
}
//计算排名
stu[0].rank=1;
for(i=1;i<n;i++)
{
if(stu[i].sumcj==stu[i-1].sumcj)
{
stu[i].rank=stu[i-1].rank;
}
else
{
stu[i].rank=stu[i-1].rank+1;
}
}
//更新记录
fp=fopen("cj.txt","w");
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %.1f %.1f %.1f %.1f %d\n",stu[i].snum,stu[i].sname,stu[i].chinese,stu[i].math,stu[i].english,stu[i].sumcj,stu[i].rank);
}
fclose(fp);
printf("成绩计算和排名成功,请按任意键返回主菜单\n");
getch();
return;
}
//6显示成绩信息
void xs(int n)
{
struct score stu[200];
FILE *fp;
fp=fopen("cj.txt","r");
if(fp==NULL)
{
printf("打开文件失败,请重试!\n");
getch();
fclose(fp);
exit(0);
}
if(n==0) {printf("无信息,请按任意键返回\n");getch();return;}
printf("学号\t\t\t姓名\t\t语文\t数学\t英语\t总分\t名次\n");
int c = 0;
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %d\n",stu[c].snum,stu[c].sname,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sumcj,&stu[c].rank);
printf("%s\t\t%s\t\t%.1f\t%.1f\t%.1f\t%.1f\t%d\n",stu[c].snum,stu[c].sname,stu[c].chinese,stu[c].math,stu[c].english,stu[c].sumcj,stu[c].rank);
c++;
}
fclose(fp);
printf("显示完毕,请按任意键返回\n");
getch();
return;
}
//7配置密码函数
void changep()
{
char pass[20],pass1[20];
system("cls");
printf("请输入新密码(最小6位,最高19位,任意字母数字):\n");
scanf("%s",pass);
while(6>strlen(pass)||strlen(pass)>19)
{
system("cls");
printf("密码格式错误,请重新输入:\n");
scanf("%s",pass);
}
system("cls");
printf("请再次输入(最小6位,最高19位,任意字母数字):\n");
scanf("%s",pass1);
if(!strcmp(pass1,pass))
{
FILE *fpp=fopen("password.txt","w");
if(fpp==NULL)
{
printf("打开文件失败,请重试!\n");
getch();
fclose(fpp);
}
int c;
for(c=0;c<20;c++)
{
fputc((char)pass[c]^random2,fpp);
}
fclose(fpp);
printf("密码配置成功,按任意键返回");
getch();
return;
}
else
{
printf("输入错误,按任意键返回");
getch();return;
}
}
//0加密保存信息并退出系统
void js(int n)
{
FILE *fp,*fpm;
fp=fopen("cj.txt","r");
if(fp==NULL)
{
printf("打开文件失败,请重试!\n");
getch();
fclose(fp);
exit(0);
}
fpm=fopen("加密成绩信息.txt","w");
if(fpm==NULL)
{
printf("打开文件失败,请重试!\n");
getch();
fclose(fp);
exit(0);
}
int c;
while ((c=fgetc(fp))!= EOF) fputc(c^random1,fpm);
fclose(fp);fclose(fpm);
printf("总人数是%d,欢迎下次使用!按任意键结束程序\n",n);
getch();
remove("cj.txt");
return;
}
在首次运行程序前需要初始化密码文件,否则程序无法运行。密码文件和程序在同一目录下即可。
#include <stdio.h>
#include <conio.h>
int random2=37896;
int main()
{
char pass[20];
printf("请重置密码(最小6位,最高19位,任意字母数字):\n");
scanf("%s",pass);
FILE *fpp=fopen("password.txt","w");
if(fpp==NULL)
{
printf("打开文件失败,请重试!\n");
getch();
fclose(fpp);
}
int c;
for(c=0;c<20;c++)
{
fputc((char)pass[c]^random2,fpp);
}
fclose(fpp);
printf("密码重置成功,按任意键退出");
getch();
return 0;
}