📄 学生成绩管理系统.cpp
字号:
cin>>score[i].Math;
cout<<"\n英语成绩: ";
cin>>score[i].English;
score[i].total=score[i].Chinese+score[i].Math+score[i].English;
score[i].average=(score[i].total*1.0)/3;
}
}
if(!flag)
cout<<"没有找到符合条件的记录!\n";
break;
}
return;
}
//3.2按学号编辑修改函数
void mod_num(record score[],int n)
{
int number,flag ,i;
char ask;
while(1)
{
flag=0; //查找标志,查找成功flag=1
cout << "\n请输入学号: ";
cin >> number;
for(i=0;i<n;i++)
{
if(number==score[i].number)
{
flag=1;
cout << "当前要修改的记录信息:\n";
dis_table();
dis_row(score[i]);
cout << "请重新输入以下信息:\n";
cout<<"姓名: ";
cin>>score[i].name;
cout<<"\n学号: ";
cin>>score[i].number;
cout<<"\n语文成绩: ";
cin>>score[i].Chinese;
cout<<"\n数学成绩: ";
cin>>score[i].Math;
cout<<"\n英语成绩: ";
cin>>score[i].English;
score[i].total=score[i].Chinese+score[i].Math+score[i].English;
score[i].average=(score[i].total*1.0)/3;
cout << "\n继续修改请按y键,否则按其他键......";
cin >> ask;
if(ask!='y' && ask!='Y')
break;
}
}
if(!flag)
cout<<"没有找到符合条件的记录!\n";
break;
}
return;
}
//3.3显示全部学生的记录
void dis_all(record score[],int n)
{
char press;
int i;
for(i=0;i<n;i++)
{
if(i%20==0)//每显示20行数据记录后重新显示一下表头
{
cout << endl << endl;
dis_char(' ',25);
cout << "学生的信息录";
cout << endl;
dis_char('*',72);
cout << endl;
cout << "序号";
dis_table(); //调用显示表头函数显示表头
}
cout << setw(4) << (i+1);
dis_row(score[i]);//调用显示一个数组元素的函数
if((i+1)%20==0)//满20行则显示下一屏
{
dis_char('*',72);
cout << endl;
cout << "按回车键继续显示下屏,按其他键结束显示!";
cout << endl;
cout << "请按键......";
cin >> press;
if(press!='\n')
break;
}
}
dis_char('*',72);
cout << endl;
return;
}
//4 显示信息录文件主控函数
void display()
{
record score[M];
FILE *fp;
int ask;
int i=0;
if((fp=fopen("address.txl","rb"))==NULL)
{
cout << "can't open file!\n";
return;
}
while(!feof(fp))
{
//将信息录信息读到score数组中
fread(&score[i++],sizeof(record),1,fp);
}
i-=1;
while(1)
{
cout << endl << endl;
dis_char(' ',10);
cout << "显示信息录信息(共有" << i << "条记录)\n";
dis_char('*',50);
cout << endl;
dis_char(' ',17);
cout << "1.按自然顺序显示\n";
dis_char(' ',17);
cout << "2.按姓名顺序显示\n";
dis_char(' ',17);
cout << "3.按学号顺序显示\n";
dis_char(' ',17);
cout << "4.按平均成绩顺序显示\n";
dis_char(' ',17);
cout << "5.退出显示程序\n";
dis_char('*',50);
cout << endl;
dis_char(' ',16);
cout << "请输入代码选择(1~5) ";
cin >> ask;
switch(ask)
{
case 1 :
dis_all(score,i);//调用显示数组函数
break;
case 2 :
sort_name(score,i);//调用按姓名排序显示记录信息函数
break;
case 3 :
sort_num(score,i);//调用按学号排序函数
break;
case 4 :
sort_aver(score,i);//调用按平均成绩排序函数
break;
case 5 :
fclose(fp);//退出显示程序
return;
default :
cout<<"输入数字不在范围之内,请重试\n";
continue;
}
}
}
//4.1按姓名排序
void sort_name(record score[],int n)
{
int i,j;
record score_t[M],temp;
for(i=0;i<n;i++)
{
score_t[i]=score[i];//将score数组读到score_t数组中
}
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
{
if(strcmp(score_t[j].name,score_t[j+1].name)>0)//使用字符串比较函数
{
temp=score_t[j];
score_t[j]=score_t[j+1];
score_t[j+1]=temp;
}
}
dis_all(score_t,n);//调用显示函数对已排序数组列表显示
return;
}
//4.2按学号排序
void sort_num(record score[],int n)
{
int i,j;
record score_t[M],temp;
for(i=0;i<n;i++)
{
score_t[i]=score[i];//将score数组读到score_t数组中
}
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
{
if(score_t[j].number>score_t[j+1].number)//
{
temp=score_t[j];
score_t[j]=score_t[j+1];
score_t[j+1]=temp;
}
}
dis_all(score_t,n);//调用显示函数对已排序数组列表显示
return;
}
//4.3按平均成绩排序
void sort_aver(record score[],int n)
{
int i,j;
record score_t[M],temp;
for(i=0;i<n;i++)
{
score_t[i]=score[i];//将score数组读到score_t数组中
}
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
{
if(score_t[j].average>score_t[j+1].average)//
{
temp=score_t[j];
score_t[j]=score_t[j+1];
score_t[j+1]=temp;
}
}
dis_all(score_t,n);//调用显示函数对已排序数组列表显示
return;
}
//5 删除功能函数实现
void dele()
{
record temp,score[M];
int ask;
int i=0,length;
FILE * fp;
if((fp=fopen("address.txl","rb"))==NULL)
{
cout << "can't open file!" << endl;
return;
}
while(fread(&temp,sizeof(record),1,fp)==1)//读通讯录文件
{
score[i++]=temp;
}
length=i;
while(1)
{
cout<<endl;
dis_char(' ',18);
cout << "记录的删除\n";
dis_char('*',50);
cout << endl;
dis_char(' ',17);
cout << "1.按姓名删除\n";
dis_char(' ',17);
cout << "2.按学号删除\n";
dis_char(' ',17);
cout << "3.返回上一层\n";
dis_char('*',50);
cout << endl;
dis_char(' ',14);
cout << "请输入号码选择(1~3) ";
cin >> ask;
switch(ask)
{
case 1 :
dele_name(score,&i);//调用按姓名删除函数
break;
case 2 :
dele_num(score,&i);//调用按学号删除函数
break;
case 3 :
return;//退出删除程序
default :
cout<<"输入数字不在范围之内,请重试\n";
continue;
}
if(length>i)
{
fclose(fp);// 关闭文件,准备以新建文件的方式打开文件
fp=fopen("address.txl","wb");
fwrite(score,sizeof(record),length-1,fp);
fclose(fp);
fp=fopen("address.txl","rb");
}
}
fclose(fp);
return;
}
//5.1按姓名删除函数
void dele_name(record score[],int* n)
{
char d_name[20],sure;
int i;
cout << "请输入姓名:";
cin >> d_name;
for(i=0;i<*n;i++)
{
if(strcmp(score[i].name,d_name)==0)
break;//找到要删除的记录
}
if(i!=*n)
{
cout << "要删除的记录如下:\n";
dis_table();
dis_row(score[i]);
cout << "确定删除---y,否则按其他键......";
cin >> sure;
if(sure!='y' && sure!='Y')
return;
for(;i<*n-1;i++)//自删除位置开始,其后记录依次前移
score[i]=score[i+1];
*n=*n-1;//数组总记录数减1
}
else
cout << "要删除的记录没有找到......";
return;
}
//5.2调用按学号删除函数
void dele_num(record score[],int* n)
{
char sure;
int i,num;
cout << "请输入学号:";
cin >> num;
for(i=0;i<*n;i++)
{
if(score[i].number== num)
break;//找到要删除的记录
}
if(i!=*n)
{
cout << "要删除的记录如下:\n";
dis_table();
dis_row(score[i]);
cout << "确定删除---y,否则按其他键......";
cin >> sure;
if(sure!='y' && sure!='Y')
return;
for(;i<*n-1;i++)//自删除位置开始,其后记录依次前移
score[i]=score[i+1];
*n=*n-1;//数组总记录数减1
}
else
cout << "要删除的记录没有找到......";
return;
}
//6 建立学生信息录函数
void create()
{
FILE * fp;
if((fp=fopen("address.txl","wb"))==NULL)
{
cout << "can't open file!\n";
return;
}
fclose(fp);
cout << "\n\n文件成功建立,请使用-信息输入功能-输入信息!";
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -