📄 score.cpp
字号:
// score.cpp: implementation of the score class.
//
//////////////////////////////////////////////////////////////////////
#include "color.h"
#include "score.h"
//////////////////////////////////////////////////////////////////////
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
#include<windows.h>
//////////////////////////////////////////////////////////////////////
extern int choice;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern color c;
void score::input()
{
c.setcolor(10);
int i,t;
total=0;
cout<<"请输入该学生的学号:";
cin.getline(num,80);
cout<<"请输入该学生的姓名:";
cin.getline(name,80);
cout<<"请输入高等数学成绩:";
cin.getline(point[0],80);
cout<<"请输入英语成绩:";
cin.getline(point[1],80);
cout<<"请输入C++成绩:";
cin.getline(point[2],80);
for(i=0;i<3;i++)
{
t=atoi(point[i]);
total+=t;
}
}
void score::output()
{
c.setcolor(10);
int i;
cout<<setiosflags(ios::left)<<setw(7)<<num;
cout<<setiosflags(ios::left)<<setw(7)<<name;
for(i=0;i<3;i++)
cout<<setiosflags(ios::left)<<setw(7)<<point[i];
cout<<setiosflags(ios::left)<<setw(7)<<total;
}
//菜单
void menu1()
{
c.setcolor(3);
cout<<"===================================================="<<endl;
cout<<"1: 成绩录入 2: 成绩显示"<<endl;
cout<<"3: 返回上级菜单 0: 退出系统"<<endl;
cout<<"===================================================="<<endl;
cout<<"请选择(1-3): ";
}
/*
score::score(score &amt;s)
{
int i;
strcpy(num,s.num);
for(i=0;i<3;i++)
strcpy(sernum[i],s.sernum[i]);
for(i=0;i<3;i++)
strcpy(point[i],s.point[i]);
total=s.total;
}*/
//////////////////////////////////////////////////////////////////////
// fun3 Class
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//学生成绩管理
void score_fun::manage()
{
c.setcolor(12);
void menu1();
c.setcolor(10);
cout<<"----------------------------------------------------"<<endl;
cout<<" 欢迎进入学生成绩的管理系统"<<endl;
cout<<"****************************************************"<<endl;
int type;
while(1)
{
menu1();
cin>>type;
switch(type)
{
case 1:
file();//成绩录入
break;
case 2:
print();//成绩显示
break;
case 3: //返回上级菜单
break;
case 0: //退出系统
exit(0);
}if(type==3)break;
}
}
//成绩录入
void score_fun::file()
{
system("cls");
if(choice==1)
{
score sco;
// int x;//实际学生数
// cout<<"请输入实际课程数: ";
// cin>>x;
char str[2];//用于吃回车
FILE *fp;
fp=fopen("student_score.dat","ab+");
char ch;
// if(x>=20)
// {cout<<"课程数输入有误"<<endl;}
// else
do
{
c.setcolor(6);
cin.getline(str,2);//吃回车
sco.input();
fwrite(&amt;sco,sizeof(score),1,fp);
c.setcolor(9);
cout<<"继续输入请按y,否则请按其他键: ";
cin>>ch;
}while(ch=='y'||ch=='Y');
fclose(fp);
}
else
{
c.setcolor(10);
cout<<"************************ 你不是管理员,无权录入信息。***************************"<<endl;
}
}
//成绩显示
void score_fun::print()
{
system("cls");
int i=0;
score sco;
FILE *fp;
if((fp=fopen("student_score.dat","rb"))==NULL)
{
cout<<"can't open file student_score.dat"<<endl;
exit(0);
}
cout<<"学号 姓名 高数 英语 C++ 总分"<<endl;
while(fread(&amt;sco,sizeof(score),1,fp)==1)
{
sco.output();
}
fclose(fp);
}
//学生成绩维护
void score_fun::maintenance()
{
cout<<"----------------------------------------------------"<<endl;
cout<<" 欢迎进入学生成绩的维护系统"<<endl;
cout<<"****************************************************"<<endl;
score sco;
void menu3();
int type;//switch选择开关
char str[2];//用于吃回车
while(1)
{
menu3();
cin>>type;
cin.getline(str,2);
switch(type)
{
case 1:
modify();//成绩基本信息删除
break;
case 2:
del();//成绩基本信息修改
break;
case 3:
total_taxis();//按总成绩排序
break;
case 4:
score_single();//单科成绩排序
break;
case 5:
sum_demand();//总成绩查询
break;
case 6:
single_demand();//单科成绩查询
break;
case 7:
break;
case 0:
exit(0);
}if(type==7)break;
}
}
void menu3()
{
c.setcolor(15);
cout<<"***********************************************************"<<endl;
cout<<"1:成绩基本信息修改 2:成绩基本信息删除"<<endl;
cout<<"3:按总成绩排序 4:按单科排序"<<endl;
cout<<"5:总成绩查询 6:单科成绩查询"<<endl;
cout<<"7:返回上级菜单 0:退出系统"<<endl;
cout<<"***********************************************************"<<endl;
cout<<"请选择(0-6): ";
}
//成绩基本信息删除
void score_fun::del()
{
system("cls");
if(choice==1)
{
c.setcolor(7);
cout<<"----------------------------------------------------"<<endl;
cout<<" 学生成绩基本信息删除"<<endl;
cout<<"****************************************************"<<endl;
int i;
score sco[100];
long filesize,rscount;
FILE *fp;
if((fp=fopen("student_score.dat","rb"))==NULL)//打开文件
{
cout<<"can't open file student_score.dat";
exit(0);
}
fseek(fp,0,2);
filesize=ftell(fp);
rewind(fp);
rscount=filesize/sizeof(score);
for(i=0;i<rscount;i++)
fread(&amt;sco[i],sizeof(score),1,fp);
fclose(fp);
char num[20];
c.setcolor(9);
cout<<"请输入你要删除成绩的学生学号:";
cin>>num;
fp=fopen("student_score.dat","wb");
for(i=0;i<rscount;i++)
if(strcmp(num,sco[i].getnum())!=0)
fwrite(&amt;sco[i],sizeof(score),1,fp);
fclose(fp);
cout<<"删除成功!"<<endl;
c.setcolor(14);
cout<<"继续删除请按 Y否则请按其他键: ";
char a;//判断是否继续删除
cin>>a;
if(a=='y'||a=='Y')
del();
}
else
{
c.setcolor(3);
cout<<"**************************你不是管理员,无权删除信息。***********************"<<endl;
}
}
//成绩基本信息修改
void score_fun::modify()
{
if(choice==1)
{
system("cls");
cout<<endl;
cout<<"----------------------------------------------------"<<endl;
cout<<" 成绩基本信息修改"<<endl;
cout<<"****************************************************"<<endl;
score sco;
FILE *fp;
if((fp=fopen("student_score.dat","rb+"))==NULL)//打开文件
{
cout<<"can't open file student_score.dat";
exit(0);
}
char num[8]; //要修改成绩的学生学号
int flag=0;//控制循环
c.setcolor(5);
cout<<"请输入要修改成绩的学生学号:";
cin>>num;
char str[2];//吃回车
cin.getline(str,2);//吃回车
while(fread(&amt;sco,sizeof(score),1,fp)==1)//显示要修改学生成绩信息
if(strcmp(num,sco.getnum())==0)
{
sco.output();
}
fclose(fp);//关闭文件
int wide=sizeof(score);
if((fp=fopen("student_score.dat","rb+"))==NULL)//打开文件
{
cout<<"can't open file student_score.dat"<<endl;
exit(0);
}
while(fread(&amt;sco,sizeof(score),1,fp)==1)
{
if(strcmp(num,sco.getnum())==0)
{
fseek(fp,-wide,1);
sco.input();
fwrite(&amt;sco,sizeof(score),1,fp);
flag=1;
}
if(flag==1)break;
}
if(flag==0)
{
c.setcolor(13);
cout<<" 不存在此学生的信息!"<<endl;
}
fclose(fp);//关闭文件
}
else
{
system("cls");
c.setcolor(8);
cout<<"**************************你不是管理员,无权进行修改。************************"<<endl;
}
}
//按总成绩排序
void score_fun::total_taxis()
{
system("cls");
int i=0,count=0,j;
score sco[100],s;
FILE *fp;
if((fp=fopen("student_score.dat","rb+"))==NULL)//打开文件
{
cout<<"can't open file student_score.dat";
exit(0);
}
while(fread(&amt;sco[i],sizeof(score),1,fp)==1)
i++;
fclose(fp);
count=i;
for(i=0;i<count;i++)
for(j=i+1;j<count+1;j++)
if(sco[i].gettotal()<sco[j].gettotal())
{
s=sco[i];
sco[i]=sco[j];
sco[j]=s;
}
cout<<"学号 姓名 高数 英语 C++ 总分 排名"<<endl;
for(i=0;i<count;i++)
{
sco[i].output();
cout<<i+1<<endl;
}
cout<<endl;
}
//单科成绩排序
void score_fun::score_single()
{
void menu4();
int i=0,count=0,type,j;
char ch;
score sco[100],s;
FILE *fp;
if((fp=fopen("student_score.dat","rb+"))==NULL)//打开文件
{
cout<<"can't open file student_score.dat";
exit(0);
}
while(fread(&amt;sco[i],sizeof(score),1,fp)==1)
i++;
fclose(fp);
count=i;
do
{
menu4();
cin>>type;
switch(type)
{
case 1:
{
system("cls");
for(i=0;i<count-1;i++)
for(j=i+1;j<count;j++)
if(strcmp(sco[i].getpoint0(),sco[j].getpoint0())<=0)
{
s=sco[i];
sco[i]=sco[j];
sco[j]=s;
}
c.setcolor(5);
cout<<"学号 姓名 高数 排名"<<endl;
for(i=0;i<count;i++)
{
cout<<setiosflags(ios::left)<<setw(7)<<sco[i].getname()<<setw(7)<<sco[i].getnum()<<setw(7)<<sco[i].getpoint0();
cout<<i+1<<endl;
}
break;
}
case 2:
{
system("cls");
for(i=0;i<count-1;i++)
for(j=i+1;j<count;j++)
if(strcmp(sco[i].getpoint1(),sco[j].getpoint1())<=0)
{
s=sco[i];
sco[i]=sco[j];
sco[j]=s;
}
c.setcolor(3);
cout<<"学号 姓名 英语 排名"<<endl;
for(i=0;i<count;i++)
{
cout<<setiosflags(ios::left)<<setw(7)<<sco[i].getname()<<setw(7)<<sco[i].getnum()<<setw(7)<<sco[i].getpoint1();
cout<<i+1<<endl;
}
break;
}
case 3:
{
system("cls");
for(i=0;i<count-1;i++)
for(j=i+1;j<count;j++)
if(strcmp(sco[i].getpoint2(),sco[j].getpoint2())<=0)
{
s=sco[i];
sco[i]=sco[j];
sco[j]=s;
}
c.setcolor(7);
cout<<"学号 姓名 C++ 排名"<<endl;
for(i=0;i<count;i++)
{
cout<<setiosflags(ios::left)<<setw(7)<<sco[i].getname()<<setw(7)<<sco[i].getnum()<<setw(7)<<sco[i].getpoint2();
cout<<i+1<<endl;
}
break;
}
case 0:break;
default:
c.setcolor(4);
cout<<" 输入有误! 请重新输入!"<<endl;
cout<<"*************************************************"<<endl;
}
cout<<"继续排序请按 y,否则请按其他键:";
cin>>ch;
}while(ch=='y'||ch=='Y');
}
void menu4()
{
system("cls");
c.setcolor(5);
cout<<"----------------------------------------------"<<endl;
cout<<"1、高等数学 2、大学外语 3、C++程序设计"<<endl;
cout<<"----------------------------------------------"<<endl;
cout<<"请选择要排序的课程(1-3):";
}
//总成绩查询
void score_fun::sum_demand()
{
system("cls");
FILE *fp;
score sco;
int judge=0;
if((fp=fopen("student_score.dat","rb+"))==NULL)//打开文件
{
cout<<"can't open file student_score.dat"<<endl;
exit(0);
}
char num[8];
cout<<"请输入学号:";
cin.getline(num,80);
while(fread(&amt;sco,sizeof(score),1,fp)==1)
{
if(strcmp(num,sco.getnum())==0)
{
c.setcolor(12);
cout<<endl;
cout<<"学号:"<<setiosflags(ios::left)<<setw(10)<<num<<"总成绩:"<<sco.gettotal()<<endl;
judge=1;
}
}
if(judge==0)
{
c.setcolor(11);
cout<<" 没有此学生的信息"<<endl;
cout<<endl;
}
}
//单科成绩查询
void score_fun::single_demand()
{
system("cls");
FILE *fp;
score sco;
int judge=0;
if((fp=fopen("student_score.dat","rb+"))==NULL)//打开文件
{
cout<<"can't open file student_score.dat"<<endl;
exit(0);
}
int choice;
char num[8];
c.setcolor(12);
cout<<"请输入学号:";
cin.getline(num,80);
while(fread(&amt;sco,sizeof(score),1,fp)==1)
{
if(strcmp(num,sco.getnum())==0)
{
while(1)
{
cout<<endl;
cout<<"1.高等数学 2.大学外语 3.C++语言 0.返回"<<endl;
cout<<"请选择(0-3):";
c.setcolor(13);
cin>>choice;
if(choice==1)
cout<<"学号:"<<setiosflags(ios::left)<<setw(10)<<num<<"高等数学:"<<sco.getpoint0()<<endl;
if(choice==2)
cout<<"学号:"<<setiosflags(ios::left)<<setw(10)<<num<<"大学外语:"<<sco.getpoint1()<<endl;
if(choice==3)
cout<<"学号:"<<setiosflags(ios::left)<<setw(10)<<num<<"C++语言:"<<sco.getpoint2()<<endl;
judge=1;
if(choice==0)break;
}
}
}
c.setcolor(10);
if(judge==0)
{
cout<<" 没有此学生的信息"<<endl;
cout<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -