📄 manage.cpp
字号:
#include <iostream>
#include "manage_1.h"
#include <fstream>
#include <ctime>
#include <dos.h>
#include <iomanip>
using namespace std;
student students[student_total_number];
student *students_point=students; //student结构数组指针
extern int record_mark;
extern string subject_name[subject_number];
float a=0;
int main()
{
void load(student *x);
void main_menu();
load(students_point); //载入数据
subject_name_boot();
main_menu();
return 0;
}
void main_menu() //主菜单
{
void main_code();
system("cls"); //清除屏幕
cout<<"\n欢迎使用学生成绩管理系统\n"
<<" 设计者:GUY\n"
<<"***************************\n"
<<"1.输入\n"
<<"2.修改\n"
<<"3.查询\n"
<<"4.统计\n"
<<"5.输出\n"
<<"0.退出\n"
<<"***************************\n";
main_code();
}
void main_code() //主菜单选择处理模块
{
void exit_program();
void input(student *x);
void change(student *x);
void search_menu();
void input_error();
void output(student *);
void tongji_menu();
char c;
cout<<"请输入操作代码,并按回车键:";
cin>>c;
switch(c) //对输入的操作码进行处理
{
case'0':exit_program();break;
case'1':input(&students[record_mark++]);break;
case'2':change(students_point);break;
case'3':search_menu();break;
case'4':tongji_menu();break;
case'5':output(students_point);break;
default: //输入错误,即输入其它的操作码
{
input_error();
main_code();
};break;
}
}
void input(student *x) //输入模块
{
system("cls"); //数据输入
cout<<"\n请输入学生的学号:";
cin>>(*x).number;
cout<<"\n请输入学生的姓名:";
cin>>(*x).name;
cout<<"\n请输入学生的班级别:";
cin>>(*x).grade;
int i;
for(i=0;i<subject_number;i++)
{
cout<<"\n请输入"<<subject_name[i]<<"的成绩";
cin>>(*x).score[i];
}
cout<<"\n是否要继续输入?(Y/N)";
char c;
cin>>c;
switch(c)
{
case'Y':input(&students[record_mark++]);break;
case'y':input(&students[record_mark++]);break;
default:main_menu();break; //返回主目录
}
}
void change(student *x) //修改模块
{
system("cls");
cout<<"请输入需要修改的学生的学号:";
string change_number;
cin>>change_number;
bool flag=false; //搜索标志,如果搜到就为true,否则为false
for(int i=0;i<record_mark;i++)
if(x[i].number==change_number)
{
input(&x[i]); //将符合条件的同学送入输入模块进行信息修改
flag=true;
}
if(!flag) cout<<endl<<change_number<<"该同学("<<change_number<<")不存在,请检查你的输入数据。\n"; //如果没有搜到对应的同学
cout<<"是否要继续修改?(Y/N)";
char c;
cin>>c;
switch(c)
{
case'Y':change(x);break;
case'y':change(x);break;
default:main_menu();break;
}
}
void search_menu() //查询模块
{
void search_menu_code();
system("cls");
cout<<"\n查询"
<<"\n**************************\n"
<<"请问你是按以下哪种方式查询?\n"
<<"1.按学号\n"
<<"2.按姓名\n"
<<"0.退出\n"
<<"**************************\n";
search_menu_code();
}
void search_menu_code() //查询菜单选择模块
{
void number_search(student *);
void name_search(student *);
void input_error();
char c;
cout<<"请输入操作代码,并按回车键:";
cin>>c;
switch(c)
{
case'0':main_menu();break;
case'1':number_search(students_point);break;
case'2':name_search(students_point);break;
default:
{
input_error();
search_menu_code();
};break;
}
}
void number_search(student *x) //按学号查询
{
system("cls");
cout<<"请输入学生学号:";
string search_number;
cin>>search_number;
bool flag=false;
for(int i=0;i<record_mark;i++)
if(x[i].number==search_number)
{
cout<<"学号:"<<x[i].number<<endl
<<"姓名:"<<x[i].name<<endl
<<"班级:"<<x[i].grade<<endl;
for(int j=0;j<subject_number;j++) cout<<subject_name[j]<<"成绩:"<<x[i].score[j]<<endl; //输出该同学数据
flag=true;
}
if(!flag) cout<<"该同学("<<search_number<<")不存在,请检查输入数据.\n";
cout<<"是否要继续查询?(Y/N)";
char c;
cin>>c;
switch(c)
{
case'Y':number_search(x);break;
case'y':number_search(x);break;
default:search_menu();break;
}
}
void name_search(student *x) //按姓名查询
{
system("cls");
cout<<"请输入学生姓名:";
string search_name;
cin>>search_name;
bool flag=false;
for(int i=0;i<record_mark;i++)
if(x[i].name==search_name)
{
cout<<"学号:"<<x[i].number<<endl
<<"姓名:"<<x[i].name<<endl
<<"班级:"<<x[i].grade<<endl;
for(int j=0;j<subject_number;j++) cout<<subject_name[j]<<"成绩:"<<x[i].score[j]<<endl;
flag=true;
}
if(!flag) cout<<"该同学("<<search_name<<")不存在,请检查输入数据.\n";
cout<<"是否要继续查询?(Y/N)";
char c;
cin>>c;
switch(c)
{
case'Y':name_search(x);break;
case'y':name_search(x);break;
default:search_menu();break;
}
}
void output(student *x) //输出模块
{
system("cls");
cout<<setiosflags(ios::left)<<setw(20)<<"学号"<<setw(20)<<"姓名"<<setw(15)<<"班级";
for(int j=0;j<subject_number;j++) cout<<subject_name[j]<<setw(6)<<' ';
cout<<"\n**********************************************************************\n";
for(int i=0;i<record_mark;i++)
{
cout<<setw(20)<<x[i].number<<setw(20)<<x[i].name<<setw(15)<<x[i].grade;
for(int j=0;j<subject_number;j++) cout<<setw(10)<<x[i].score[j];
cout<<endl;
}
cout<<"按回车键返回主菜单.";
fflush(stdin); //清除输入流,目的是为了不让后面的getchar()函数接收到字符
getchar(); //等待输入,目的是为了程序在这里停止以便看到输出结果
main_menu();
}
void tongji_menu() //统计菜单
{
void tongji_menu_code();
system("cls");
cout<<"统计\n"
<<"**********************\n"
<<"请问你想查询:\n"
<<"1.某人平均分\n"
<<"2.某科平均分\n"
<<"3.总体平均分\n"
<<"0.退出\n"
<<"**********************\n";
tongji_menu_code();
}
void tongji_menu_code() //统计菜单选择模块
{
void one_everage();
void one_everage_menu();
void total_everage(student *);
void subject_everage_menu();
void input_error();
char c;
cout<<"请输入操作代码,并按回车键:";
cin>>c;
switch(c)
{
case'0':main_menu();break;
case'1':one_everage_menu();break;
case'2':subject_everage_menu();
case'3':total_everage(students_point);break;
default:
{
input_error();
tongji_menu_code();
};break;
}
}
void one_everage_menu() //统计某一位同学
{
cout<<"请输入要统计的学生学号:";
string number;
bool flag=false;
cin>>number;
for(int i=0;i<record_mark;i++)
if(students[i].number==number)
{
a=0;
flag=true;
for(int j=0;j<subject_number;j++)
{
a=a+students[i].score[j];
}
a=a/subject_number;
cout<<students[i].name<<"同学的平均分是:"<<a<<endl;
}
if(!flag) cout<<"该同学("<<number<<")不存在,请检查输入数据!\n";
cout<<"\n是否要继续统计?(Y/N)";
char c;
cin>>c;
switch(c)
{
case'Y':one_everage_menu();break;
case'y':one_everage_menu();break;
default:tongji_menu();break;
}
}
void subject_everage_menu() //统计某一科的菜单
{
void subject_everage_menu_code(student *x);
system("cls");
cout<<"统计\n"
<<"**********************\n"
<<"请问你要统计哪一门成绩:\n";
for(int i=0;i<subject_number;i++)
cout<<i+1<<'.'<<subject_name[i]<<'\n';
cout<<"0.退出\n"
<<"**********************\n";
subject_everage_menu_code(students_point);
}
void subject_everage_menu_code(student *x) //统计某一科的菜单选择模块
{
void input_error();
cout<<"请输入操作代码,并按回车键:";
int k;
cin>>k;
if(k==0) tongji_menu();
else if((k<1)||(k>subject_number))
{
input_error();
subject_everage_menu_code(students_point);
}
else
{
a=0;
for(int i=0;i<record_mark;i++) a=a+x[i].score[k-1];
a=a/record_mark;
cout<<subject_name[k-1]<<"该科的平均分是:"<<a;
}
cout<<"\n是否要继续统计?(Y/N)";
char c;
cin>>c;
switch(c)
{
case'Y':subject_everage_menu();break;
case'y':subject_everage_menu();break;
default:tongji_menu();break;
}
}
void total_everage(student *x) //求总体的平均分
{
a=0;
for(int i=0;i<record_mark;i++)
for(int j=0;j<subject_number;j++)
a=a+x[i].score[j];
a=a/(record_mark*subject_number);
cout<<"总体的平均分是:"<<a;
cout<<"\n按回车键返回上一层菜单.";
fflush(stdin);
getchar();
tongji_menu();
}
void input_error() //输入错误提示
{
cout<<"输入代码有误,请重新输入!\n";
}
void exit_program() //退出程序
{
void save(student *);
void delay_time(int);
save(students_point);
cout<<"\n感谢你使用本程序,如果你在使用中发现什么问题欢迎反馈到本人邮箱:"
<<"yxguy@163.com。\n";
cout<<"\n正在关闭......";
delay_time(5000); //5秒倒计时
exit(0);
}
void save(student *x) //保存数据,将remark存到remark.dat,学生数据存到save.dat
{
ofstream outfile1("record.dat",ios::out);
outfile1<<record_mark;
outfile1.close();
ofstream outfile2("save.dat",ios::out);
for(int i=0;i<record_mark;i++)
{
outfile2<<x[i].number<<' '<<x[i].name<<' '<<x[i].grade<<' '<<x[i].score[0]<<' '
<<x[i].score[1]<<' ';
}
outfile2.close();
}
void load(student *x) //从remark.dat、save.dat载入数据
{
void delay_time(int);
void save(student *);
ifstream infile1("record.dat",ios::in);
if(!infile1)
{
cout<<"文件\"record.dat\"已丢失,不能初始化数据,还有问题请联系管理员!\n";
delay_time(2000);
save(students_point);
}
infile1>>record_mark;
infile1.close();
ifstream infile2("save.dat",ios::in);
if(!infile2)
{
cout<<"文件\"save.dat\"已丢失,不能恢复数据,还有问题请联系管理员!\n";
save(students_point);
delay_time(2000);
}
for(int i=0;i<record_mark;i++) infile2>>x[i].number>>x[i].name>>x[i].grade>>x[i].score[0]
>>x[i].score[1];
infile2.close();
}
void delay_time(int t)
{
clock_t star;
star=clock();
int temp;
while (temp<t) temp=clock()-star;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -