📄 学生成绩管理系统.cpp
字号:
//
#include "address.h"
void main()
{
int choice;
while (1)
{
cout<<"\n\n";
dis_char(' ',15);
cout<<"学生成绩管理系统\n";
dis_char('*',40);
cout<<endl;
dis_char(' ',15);
cout<<"1.信息录入功能\n";
dis_char(' ',15);
cout<<"2.信息查询功能\n";
dis_char(' ',15);
cout<<"3.信息修改功能\n";
dis_char(' ',15);
cout<<"4.信息删除功能\n";
dis_char(' ',15);
cout<<"5.信息浏览功能\n";
dis_char(' ',15);
cout<<"6.信息文件建立功能\n";
dis_char(' ',15);
cout<<"7.退出管理系统程序\n";
dis_char('*',40);
cout<<endl;
dis_char(' ',15);
cout<<"请输入代码选择(1-7)\n";
cin>>choice;
switch(choice)
{
case 1:
append();
break;
case 2:
locate();
break;
case 3:
modify();
break;
case 4:
dele();
break;
case 5:
display();
break;
case 6:
create();
break;
case 7:
return;
default :
cout<<"输入数字不在范围之内,请重试\n";
continue;
}
}
}
//0.1显示字符串函数
void dis_char(char ch,int n)
{
int i;
for(i=0;i<n;i++)
cout<<ch;
}
//0.2打印单个结构函数
void dis_row(record score)
{
cout<<setw(20)<<score.name<<setw(12)<<score.number
<<setw(6)<<score.Chinese<<setw(6)<<score.Math
<<setw(6)<<score.English<<setw(6)<<score.total
<<setw(9)<<score.average<<endl;
}
//0.3显示一行表头的函数
void dis_table()
{
dis_char(' ',16);
cout << " 姓名";
dis_char(' ',8);
cout << "学号";
dis_char(' ',2);
cout << "语文";
dis_char(' ',2);
cout << "数学";
dis_char(' ',2);
cout << "英语";
dis_char(' ',2);
cout << "总分 平均分";
cout << endl;
}
//1 录入学生信息函数
void append()
{
record score;
FILE *fp;
char ask;
if((fp=fopen("address.txl","ab"))==NULL)
{
cout<<"can't open file!\n";
return;
}
while(1)
{
cout<<"\n\n";
cout<<"输入学生信息\n";
cout<<"姓名: ";
cin>>score.name;
cout<<"\n学号: ";
cin>>score.number;
cout<<"\n语文成绩: ";
cin>>score.Chinese;
cout<<"\n数学成绩: ";
cin>>score.Math;
cout<<"\n英语成绩: ";
cin>>score.English;
score.total=score.Chinese+score.Math+score.English;
score.average=(score.total*1.0)/3;
fwrite(&score,sizeof(record),1,fp);//
cout<<"\n继续输入记录吗(y/n) ";
cin>>ask;
if(ask!='y'&& ask!='Y')
break;
}
fclose(fp);
return;
}
//2 查询学生信息函数
void locate()
{
record temp,score[M];
char name[20];
int n=0;
int i,flag,ask,d_total;
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[n++]=temp;
while(1)
{
d_total=0;
flag=0;
cout<<"\n\n";
dis_char(' ',10);
cout<<"查找学生信息\n";
dis_char('*',40);
cout<<endl;
dis_char(' ',10);
cout<<"1-按姓名查找\n";
dis_char(' ',10);
cout<<"2-按学号查找\n";
dis_char(' ',10);
cout<<"3-按平均分查找\n";
dis_char(' ',10);
cout<<"4-查找一门课程信息\n";
dis_char(' ',10);
cout<<"5-返回上一层\n";
dis_char('*',40);
cout<<endl;
dis_char(' ',10);
cout<<"请输入号码选择(1-5)\n";
cin>>ask;
switch(ask)
{
case 1:
cout<<"请输入要查询的姓名: ";
cin>>name;
for(i=0;i<n;i++)
{
if(strcmp(name,score[i].name)==0)
{
flag=1;
dis_table();
dis_row(score[i]);
}
}
if(!flag)
cout<<"没有找到符合条件的记录!\n";
break;
case 2:
int num;
cout<<"请输入要查询的学号: ";
cin>>num;
for(i=0;i<n;i++)
{
if(num==score[i].number)
{
flag=1;
dis_table();
dis_row(score[i]);
}
}
if(!flag)
cout<<"没有找到符合条件的记录!\n";
break;
case 3:
int num1,num2;
cout<<"请输入要查询的平均分分数段(如80-90只输入数字80 90): ";
cin>>num1>>num2;
for(i=0;i<n;i++)
{
if(num1<score[i].average && num2>score[i].average)
{
flag=1;
dis_table();
dis_row(score[i]);
}
}
if(!flag)
cout<<"没有找到符合条件的记录!\n";
break;
case 4:
int kechen;
cout<<"请输入要查询的科目(如语文输入1数学输入2英语输入3): ";
cin>>kechen;
switch(kechen)
{
case 1:
flag=1;
cout<<"\n语文";
for(i=0;i<n;i++)
{
cout<<setw(18)<<score[i].name<<setw(5)<<score[i].Chinese;
d_total+=score[i].Chinese;
}
cout<<" 总平均分 "<<setw(6)<<(d_total*1.0/n);
break;
case 2:
flag=1;
cout<<"\n数学";
for(i=0;i<n;i++)
{
cout<<setw(18)<<score[i].name<<setw(5)<<score[i].Math;
d_total+=score[i].Math;
}
cout<<" 总平均分 "<<setw(6)<<(d_total*1.0/n);
break;
case 3:
flag=1;
cout<<"\n英语";
for(i=0;i<n;i++)
{
cout<<setw(18)<<score[i].name<<setw(5)<<score[i].English;
d_total+=score[i].English;
}
cout<<" 总平均分 "<<setw(6)<<(d_total*1.0/n);
break;
default:
cout<<"输入错误,请重试";
break;
}
break;
case 5:
return;
default :
cout<<"输入数字不在范围之内,请重试\n";
continue;
}
}
return;
}
//3 修改功能函数
void modify()
{
char point;
int ask;
record temp,score[M];
FILE * fp;
int i=0;
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;
}
while(1)
{
cout << "\n";
dis_char(' ',20);
cout << "编辑修改信息录" << endl;
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('*',50);
cout << endl;
dis_char(' ',16);
cout << "请输入号码选择(1~3) ";
cin >> ask;
switch(ask)
{
case 1:
dis_all(score,i);//调用显示数组函数
break;
case 2:
mod_name(score,i);//调用编辑按姓名修改函数
break;
case 3:
mod_num(score,i);//调用按学号编辑修改函数
break;
case 4 :
break;
default :
cout<<"输入数字不在范围之内,请重试\n";
continue;
}
cout << "继续修改请按y键,否则按其他键......";
cin >> point;
if(point!='y' && point!= 'Y' )
break;
}
fclose(fp);
fp=fopen("address.txl","wb");
fwrite(score,sizeof(record),i,fp);//将修改后的数据写回到通讯录文件
fclose(fp);
return;
}
//3.1按姓名编辑修改函数
void mod_name(record score[],int n)
{
int i,flag;
char name[20];
while(1)
{
flag=0; //查找标志,查找成功flag=1
cout << "\n请输入姓名: ";
cin >> name;
for(i=0;i<n;i++)
{
if(strcmp(name,score[i].name)==0)
{
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数学成绩: ";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -