/***********************************************************************
--设定管理员的初始密码为123abc
************************************************************************/
#include
#include
#include
#include
struct Student /****定义结构类型struct Student****/
{
int id;
char name[20];
float sql;
float c;
float java;
float avg;
};
typedef struct Student Stu; /*****重命名struct Student为Stu*****/
void Student_head(); /************打印头信息*************/
void Student_print(); /***********打印菜单信息************/
void Student_printError(); /***********打印错误信息************/
int Student_loanding(Stu *); /*************读取函数**************/
int Student_judgeIdIsEntity(Stu *,int); /*****判断输入的ID是否已经被使用****/
int Student_judgeScore(float); /*****判断输入的成绩是否合法********/
int Student_input(Stu *,int); /*************输入函数**************/
int Student_delete(Stu *,int); /*************删除函数**************/
void Student_output(Stu *,int); /*************输出函数**************/
void Student_line(Stu *,int); /*************排序函数**************/
void Student_save(Stu *,int); /*************保存函数**************/
int Student_password(int); /*********密码验证函数**************/
void Student_modi_password(Stu *,int); /*********修改密码函数**************/
char password[7]="123abc"; /********定义一个密码全局变量*******/
main() /**************主函数***************/
{
Stu Stud[100]; //存放学员信息的结构数组
int count=0; //存放当前存在的学员信息的个数
int password1; //判断用户密码。1表示输入密码正确,0表示错误
int isRead=0; //判断用户是否已经读取了原来保存的信息
Student_head(); //打印头信息
do
{
Student_print(); //打印菜单
int user;
scanf("%d",&user);
if(user != 1 && isRead==0)
{
Student_printError();
continue;
}
switch(user)
{
case 1:
count=Student_loanding(Stud);
isRead = 1;
break;
case 2:
Student_modi_password(Stud,count);
break;
case 3:
count=Student_input(Stud,count);
Student_save(Stud,count);
break;
case 4:
Student_output(Stud,count);
break;
case 5:
password1=Student_password(count);
if(password1==1)
{
count=Student_delete(Stud,count);
Student_save(Stud,count);
}
else if(password1==0)
{
printf("\n\t\t 密码输入错误3次,你无权执行此操作。\n\n");
}
else
{
printf("\n\n");
}
break;
case 6:
Student_line(Stud,count);
Student_output(Stud,count);
break;
case 7:
Student_save(Stud,count);
break;
case 8:
exit(0);
break;
default:
printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━┓");
printf("\n\t\t┃ 没有这个功能选项,请选择1-8 ┃");
printf("\n\t\t┗━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
}while(1);
}
void Student_head() //打印头信息
{
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓学员成绩管理〓〓〓〓〓〓〓〓〓〓");
printf("\n\t说明:①如有记录,请先读取记录。");
printf("\n\t ②如无记录,请先添加记录,并保存。");
printf("\n\t ③添加和删除资料后将自动保存资料。");
printf("\n\t ④删除和修改密码需要验证密码。\n");
printf("\n--------------------------------------------------------------------------------");
}
void Student_print()
{
printf("\n\t\t ┌┄┄┄┄┄┄ 学员成绩管理 ┄┄┄┄┄┄┐");
printf("\n\t\t ┆ ------------------------------------ ┆");
printf("\n\t\t ┆ 1. 读取学员资料 2. 修改管理员密码 ┆");
printf("\n\t\t ┆ 3. 添加学员资料 4. 查看学员资料 ┆");
printf("\n\t\t ┆ 5. 删除学员资料 6. 按平均成绩排序 ┆");
printf("\n\t\t ┆ 7. 保存学员资料 8. 退出程序 ┆");
printf("\n\t\t └┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┘");
printf("\n\t\t\t 请选择1-8:");
}
void Student_printError() //打印错误的提示信息
{
printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━┓");
printf("\n\t\t┃ 请先去取原保存信息。。。。 ┃");
printf("\n\t\t┗━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
int Student_loanding(Stu a[]) //读取函数
{
int i=0,j=0;
FILE *fp;
fp=fopen("Student.txt","r");
if(fp==NULL)
{
printf("\t\t ┏━━━━━━━━━━━━━━━━━┓");
printf("\n\t\t ┃ 没有学员记录可以读取 ┃");
printf("\n\t\t ┗━━━━━━━━━━━━━━━━━┛\n\n");
}
else
{
fscanf(fp,"%d",&j);
fscanf(fp,"%s",password);
for(i=0;i {
fscanf(fp,"%d",&a[i].id);
fscanf(fp,"%s",a[i].name);
fscanf(fp,"%f",&a[i].sql);
fscanf(fp,"%f",&a[i].c);
fscanf(fp,"%f",&a[i].java);
fscanf(fp,"%f",&a[i].avg);
}
printf("\t\t ┏━━━━━━━━━━━━━━━━━┓");
printf("\n\t\t ┃ 成功读取%2d条学员记录 ┃",i);
printf("\n\t\t ┗━━━━━━━━━━━━━━━━━┛\n\n");
fclose(fp);
}
return(i);
}
int Student_judgeIdIsEntity(Stu a[],int id,int n) //判断用户输入的id是否可用
{
int i,flage = 1;
for(i=0;i if(a[i].id==id){
flage=0;
break;
}
}
return flage;
}
int Student_judgeScore(float score) //判断输入的成绩是否正确
{
if(score>=0 && score<=100){
return 1;
}
else{
printf("\t\t 成绩无效,重新输入。\n");
return 0;
}
}
int Student_input(Stu a[],int n) //输入函数
{
char flag;
int id;
float sql,c,java;
printf("\t\t -----------------------------------\n");
do
{
printf("\t\t 请输入学员资料:\n");
loopId:printf("\t\t 学号:");
scanf("%d",&id);
if(Student_judgeIdIsEntity(a,id,n)==1){
a[n].id = id;
}
else{
printf("\t\t id无效,重新输入。\n");
goto loopId;
}
printf("\n");
printf("\t\t 姓名:");
scanf("%s",a[n].name);
printf("\n");
loopSql:printf("\t\t 数据库成绩:");
scanf("%f",&sql);
if(Student_judgeScore(sql)==1)
{
a[n].sql = sql;
}
else
{
goto loopSql;
}
loopC:printf("\t\t C 语言成绩:");
scanf("%f",&c);
if(Student_judgeScore(c)==1){
a[n].c = c;
}
else{
goto loopC;
}
loopJava:printf("\t\t JAVA 成绩:");
scanf("%f",&java);
if(Student_judgeScore(java)==1){
a[n].java = java;
}
else{
goto loopJava;
}
a[n].avg=(a[n].sql+a[n].c+a[n].java)/3;
n++;
printf("\n");
printf("\n\t\t 是否继续输入学员资料?\n");
printf("\t\t 按任意键继续,n退出");
scanf(" %c",&flag);
printf("\n");
}while(flag!='n' && flag!='N');
printf("\t\t -----------------------------------\n\n");
return(n);
}
int Student_delete(Stu a[],int n) //删除函数
{
int i,j,d_id;
char flag;
Stu temp;
do
{
printf("\n\t\t 请输入你要删除学员的学号:");
scanf("%d",&d_id);
for(i=0;i {
if(a[i].id==d_id)
break;
}
if(i {
printf("\n\t 删除如下资料");
printf("\n\t--------------------------------------------------------");
printf("\n\t学号\t姓名\t数据库\tC 语言\tJAVA编程\t平均成绩");
printf("\n\t%d\t%s\t%5.2f\t%5.2f\t%5.2f\t\t%5.2f\n",a[i].id,a[i].name,a[i].sql,a[i].c,a[i].java,a[i].avg);
for(j=i;j {
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
n--;
}
else
{
printf("\n\t\t 没有你要删除的学员资料!");
}
printf("\n\t\t 是否继续删除学员资料?");
printf("\n\t\t 按任意键继续,n退出");
scanf(" %c",&flag);
}while(flag!='n' && flag!='N');
printf("\t\t -----------------------------------\n\n");
return(n);
}
void Student_output(Stu a[],int n) //输出函数
{
int i;
printf("\n\t--------------------------------------------------------");
printf("\n\t学号\t姓名\t数据库\tC 语言\tJAVA编程\t平均成绩\n");
for(i=0;i {
printf("\t%d\t%s\t%5.2f\t%5.2f\t%5.2f\t\t%5.2f\n",a[i].id,a[i].name,a[i].sql,a[i].c,a[i].java,a[i].avg);
}
printf("\t--------------------------------------------------------\n\n");
}
void Student_line(Stu a[],int n) //排序函数
{
int i,j;
Stu temp;
for(i=0;i {
for(j=i+1;j {
if(a[i].avg {
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
}
void Student_save(Stu a[],int n) //保存函数
{
int i;
FILE *fp;
fp=fopen("Student.txt","w");
fprintf(fp,"%d",n);
fprintf(fp,"\t%s\n",password);
for(i=0;i {
fprintf(fp,"%d\t%s\t%5.2f\t%5.2f\t%5.2f\t\t%5.2f\n",a[i].id,a[i].name,a[i].sql,a[i].c,a[i].java,a[i].avg);
}
fclose(fp);
printf("\t\t ┏━━━━━━━━━━━━━━━━━┓");
printf("\n\t\t ┃ 成功保存学员记录 ┃");
printf("\n\t\t ┗━━━━━━━━━━━━━━━━━┛\n");
}
int Student_password(int n) //密码验证函数
{
int l,i,j=0,k;
char pass[7];
char word[7];
FILE *fp;
fp=fopen("Student.txt","r");
if(fp==NULL || n==0)
{
printf("\n\t\t -----------------------------------");
printf("\n\t\t 请先读取记录。");
printf("\n\t\t 如无记录请先添加!\n");
i=2;
}
else
{
fscanf(fp,"%d",&k);
fscanf(fp,"%s",word);
fclose(fp);
printf("\n\t\t -----------------------------------");
printf("\n\t\t 请输入密码(6位):");
l=0;
fflush(stdin);
do
{
pass[l]=getch();
printf("*");
l++;
}while(pass[l-1]!='\r');
pass[l-1]='\0';
while(j<3)
{
j++;
if(strcmp(pass,word)==0)
{
i=1;
break;
}
else
{
if(j<3)
{
printf("\n\t\t 密码错误,请重新输入:");
l=0;
fflush(stdin);
do
{
pass[l]=getch();
printf("*");
l++;
}while(pass[l-1]!='\r');
pass[l-1]='\0';
}
i=0;
}
}
}
printf("\n\t\t -----------------------------------");
return(i);
}
void Student_modi_password(Stu a[],int n) //修改密码函数
{
int password2;
int i,l=0;
password2=Student_password(n);
if(password2==1)
{
printf("\n\t\t 请输入新密码(6位):");
fflush(stdin);
do
{
password[l]=getch();
printf("*");
l++;
}while(password[l-1]!='\r');
password[l-1]='\0';
FILE *fp;
fp=fopen("Student.txt","w");
fprintf(fp,"%d",n);
fprintf(fp,"\t%s\n",password);
for(i=0;i {
fprintf(fp,"%d\t%s\t%5.2f\t%5.2f\t%5.2f\t\t%5.2f\n",a[i].id,a[i].name,a[i].sql,a[i].c,a[i].java,a[i].avg);
}
fclose(fp);
printf("\n\t\t 密码修改成功。\n");
printf("\t\t -----------------------------------\n\n");
}
else if(password2==0)
{
printf("\n\t\t 密码输入错误3次,你无权执行此操作。\n");
printf("\t\t -----------------------------------\n\n");
}
else
{
printf("\n\n");
}
}