📄 学生成绩管理系统源代码.cpp
字号:
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
#include<cstdlib>
#include<time.h>
#define null 0
using namespace std;
class Listnode
{
public:
Listnode *creat(); //建立资料库
Listnode *search(Listnode *); //查找模块
Listnode *del(Listnode *); //删除模块
Listnode *add(Listnode *); //添加模块
Listnode *show_menu(Listnode *); //显示模块
Listnode *modify(Listnode *); //修改模块
Listnode *stat(Listnode *); //统计模块
Listnode *save(Listnode *); //保存模块
Listnode *open(); //读出模块,自动执行
Listnode *arrange(Listnode *);//排名模块
double pass(Listnode *, string );//求及格率
float ave(Listnode *,string );//求平均分
int position(Listnode *,string ,Listnode *);//求名次
public:
int num; //学号
string name; //姓名
string sex;//性别
float M_score; //数学分数
float E_score; //外语分数
float C_score;//C++分数
float total;//总分
float ave1;//平均分
Listnode *next; //链接指针
};
Listnode *Listnode::show_menu(Listnode *p)//输出信息
{
Listnode *h;
h=p;
if(h==null)//链表为空
{
cout<<"系统里没有资料记录."<<endl;
}
else
{
cout<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"外语"<<setw(10)<<"C++"<<setw(10)<<"总分"<<setw(10)<<"平均分"<<endl;
while(p->next!=null)
{
cout<<p->num<<setw(10)<<p->name<<setw(10)<<p->sex<<setw(10)<<p->M_score<<setw(10)<<p->E_score<<setw(10)<<p->C_score<<setw(10)<<p->total<<setw(10)<<p->ave1<<endl;
p=p->next;
}
if(p->next==null)
{
cout<<p->num<<setw(10)<<p->name<<setw(10)<<p->sex<<setw(10)<<p->M_score<<setw(10)<<p->E_score<<setw(10)<<p->C_score<<setw(10)<<p->total<<setw(10)<<p->ave1<<endl;
}
}
cout<<endl;
return(h);
}
void menu()//输出主菜单
{
cout<<" "<<"=============学生成绩管理系统============"<<endl;
cout<<"********************************************************************************";
cout<<"\t1建学生资料库\t\t\t\t\t2查找学生资料\n";
cout<<"\t3删除学生资料\t\t\t\t\t4添加学生资料\n";
cout<<"\t5显示学生资料\t\t\t\t\t6修改学生资料\n";
cout<<"\t7查询学生成绩\t\t\t\t\t8学生总分排名\n";
cout<<"\t9关于系统信息\t\t\t\t\t10退出系统\n";
cout<<"********************************************************************************";
}
void announce()//输出声明
{
cout<<" "<<"本系统为大隐于市独立开发而成,仅供学习之用。任何人未经许可,不得用"<<endl;
cout<<"于商业用途。如有任何问题可联系本人。"<<endl;
cout<<" "<<"联系方式:"<<endl;
cout<<" "<<"QQ:226389227"<<endl;
}
int password()//定义密码函数
{
srand(time(0));
int p;
p=(1+rand()%10000000);
ofstream outfile("password.txt",ios::out|ios::trunc);
if(!outfile)
{
cerr<<"没有找到密码文件,导入密码失败."<<endl;
exit(1);
}
else
{
outfile<<p;
}
outfile.close();
return(p);
}
int inum(int t)//对学号是否为整数的判断
{
string str;
cout<<"请输入四位数学号:";
cin>>t;
while (t<1000||t>9999)
{
if (cin.fail())
{
cin.clear();
cin >> str;
}
else
{
cout<<"你的输入有误,请重新入."<<endl<<"提示:学号只能是由四位数字组成."<<endl;
cout<<"请输入四位数学号:";
cin>>t;
}
}
return(t);
}
void input(Listnode *p)//录入信息
{
cout<<"请输入姓名:";
cin>>p->name;
cout<<"请输入性别:";
cin>>p->sex;
while(p->sex!="男"&&p->sex!="女")
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:性别只能是男或女."<<endl;
cout<<"请输入性别:";
cin>>p->sex;
}
cout<<"请输入数学成绩:";
cin>>p->M_score;
while(p->M_score<0||p->M_score>100)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:数学最低分为0分,满分为100分."<<endl;
cout<<"请输入数学成绩:";
cin>>p->M_score;
}
cout<<"请输入外语成绩:";
cin>>p->E_score;
while(p->E_score<0||p->E_score>100)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:外语最低分为0分,满分为100分."<<endl;
cout<<"请输入外语成绩:";
cin>>p->E_score;
}
cout<<"请输入C++成绩:";
cin>>p->C_score;
while(p->C_score<0||p->C_score>100)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:C++最低分为0分,满分为100分."<<endl;
cout<<"请输入C++成绩:";
cin>>p->C_score;
}
}
void minput(Listnode *p)//修改信息时的重新录入
{
cout<<"请输入新的姓名(原来是"<<p->name<<"):";
cin>>p->name;
cout<<"请输入新的性别(原来是"<<p->sex<<"):";
cin>>p->sex;
while(p->sex!="男"&&p->sex!="女")
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:性别只能是男或女."<<endl;
cout<<"请输入性别:";
cin>>p->sex;
}
cout<<"请输入新的数学成绩(原来是"<<p->M_score<<"):";
cin>>p->M_score;
while(p->M_score<0||p->M_score>100)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:数学最低分为0分,满分为100分."<<endl;
cout<<"请输入数学成绩:";
cin>>p->M_score;
}
cout<<"请输入新的外语成绩(原来是"<<p->E_score<<"):";
cin>>p->E_score;
while(p->E_score<0||p->E_score>100)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:外语最低分为0分,满分为100分."<<endl;
cout<<"请输入外语成绩:";
cin>>p->E_score;
}
cout<<"请输入新的C++成绩(原来是"<<p->C_score<<"):";
cin>>p->C_score;
while(p->C_score<0||p->C_score>100)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:C++最低分为0分,满分为100分."<<endl;
cout<<"请输入C++成绩:";
cin>>p->C_score;
}
}
Listnode *Listnode::creat()//建立资料库
{
Listnode *Listnode::show_menu(Listnode *p);
Listnode *head,*p,*p1=null;
int n;
while(n<=0)
{
cout<<"请输入学生的个数:";
cin>>n;
if(n<=0)
{
cout<<"没有学生资料."<<endl;
}
else
{
head=p=new Listnode;
p->num=inum(p->num);
input(p);
p->total=p->C_score+p->E_score+p->M_score;
p->ave1=p->total/3;
for(int i=1;i<n;i++)
{
Listnode *r;
p1=new Listnode;
r=p;
p=p->next=p1;
p->num=inum(p->num);
while(r->num==p->num||(p->num>9999||p->num<1000))//对学号的判断
{
if(r->num==p->num)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:学号不能相同."<<endl;
cout<<"请输入4位学号:";
cin>>p->num;
}
if(p->num>9999||p->num<1000)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:学号只能是四位数字组成."<<endl;
cout<<"请输入学号4位数学号:";
cin>>p->num;
}
}
input(p);
p->total=p->C_score+p->E_score+p->M_score;//求个人总分
p->ave1=p->total/3;//平均分
}
}
}
p->next=null;
head->show_menu(head);
return(head);
}
Listnode *Listnode::search(Listnode *p)//查找
{
Listnode *h;
h=p;
int n;
cout<<"1 按学号查找 2按名字查找 3退出查找"<<endl;
cout<<"请选择:";
cin>>n;
int d=0;
string name;
if(n==1)
{
d=inum(d);//输入要查找的学号并判断
}
else if(n==2)
{
cout<<"请输入姓名:";
cin>>name;
}
else if(n==3)
{
return(h);
}
else
{
cout<<"===>提示:你的输入有误,请重新输入."<<endl;
h->search(h);
}
if(h==null)
{
cout<<"查找失败."<<endl<<"===>提示:没有学生资料,请先输入学生资料."<<endl;
}
else
{
while(p->next!=null)
{
if(p->num==d||p->name==name)
{
break;
}
else
{
p=p->next;
}
}
if(p->next!=null)
{
cout<<"查找成功."<<endl;
cout<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"外语"<<setw(10)<<"C++"<<setw(10)<<"总分"<<setw(10)<<"平均分"<<endl;
cout<<p->num<<setw(10)<<p->name<<setw(10)<<p->sex<<setw(10)<<p->M_score<<setw(10)<<p->E_score<<setw(10)<<p->C_score<<setw(10)<<p->total<<setw(10)<<p->ave1<<endl;
}
else if(p->next==null&&(p->num==d||p->name==name))
{
cout<<"查找成功."<<endl;
cout<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"数学"<<setw(10)<<"外语"<<setw(10)<<"C++"<<setw(10)<<"总分"<<setw(10)<<"平均分"<<endl;
cout<<p->num<<setw(10)<<p->name<<setw(10)<<p->sex<<setw(10)<<p->M_score<<setw(10)<<p->E_score<<setw(10)<<p->C_score<<setw(10)<<p->total<<setw(10)<<p->ave1<<endl;
}
else
{
cout<<"查找不成功."<<endl<<"===>提示:你要查的资料,系统里没有记录."<<endl;
}
}
return(h);
}
Listnode *Listnode::del(Listnode *p)//删除
{
Listnode *Listnode::show_menu(Listnode *p);
Listnode *h,*q;
q=h=p;
int n,d=0;
string name;
cout<<"1按学号删除 2按名字删除 3退出删除"<<endl;
cout<<"请输入你的选择:";
cin>>n;
if(n==1)
{
d=inum(d);//输入要删除的学号并判断
}
else if(n==2)
{
cout<<"请输入姓名:";//按姓名删除
cin>>name;
}
else if(n==3)
{
return(h);
}
else
{
cout<<"你的输入有误,请重新输入."<<endl;
cout<<"===>提示:只能选择1或者2来进行删除操作."<<endl;
h->del(h);
}
if(h==null)
{
cout<<"删除失败."<<endl<<"===>提示:没有学生资料,请先输入学生资料."<<endl;
}
else if((p->num==d||p->name==name)&&p->next!=null)
{
h=p->next;
cout<<"删除成功."<<endl;
delete p;
}
else if(p->next==null&&(p->num==d||p->name==name))
{
h=null;
delete p;
cout<<"删除成功."<<endl;
}
else
{
while(p->next!=null)
{
if(p->num==d||p->name==name)
{
break;
}
else
{
p=p->next;
}
}
if(p->next!=null)
{
while(q->next!=p)
{
q=q->next;
}
q->next=p->next;
cout<<"删除成功."<<endl;
delete p;
}
else if(p->next==null&&(p->num==d||p->name==name))
{
while(q->next!=p)
{
q=q->next;
}
q->next=null;
delete p;
cout<<"删除成功."<<endl;
}
else
{
cout<<"删除失败."<<endl<<"===>提示:你要删除的资料,系统里没有记录"<<endl;
}
}
h->show_menu(h);
return(h);
}
Listnode *Listnode::add(Listnode *p)//添加新资料
{
Listnode *Listnode::show_menu(Listnode *p);
Listnode *h,*p1,*p2;
p2=h=p;
if(h==null)//如果链表为空
{
h=new Listnode;
p=h;
cout<<"请输入你想要添加的学生资料."<<endl;
p->num=inum(p->num);
input(p);
p->total=p->C_score+p->E_score+p->M_score;
p->ave1=p->total/3;
h->next=null;
}
else
{
while(p->next!=null)
{
p=p->next;
}
p=p->next=p1=new Listnode;
cout<<"请输入你想要添加的学生资料."<<endl;
p->num=inum(p->num);
while(p2!=p)
{
if(p2->num==p->num)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:学号不能相同."<<endl;
cout<<"请输入4位数学号:";
cin>>p->num;
}
else if(p2->num!=p->num)
{
if(p->num>9999||p->num<1000)
{
while(p->num>9999||p->num<1000)
{
cout<<"你的输入有误,请重新输入."<<endl<<"===>提示:学号只能是四位数字组成."<<endl;
cout<<"请输入4位数学号:";
cin>>p->num;
}
}
else
{
p2=p2->next;
}
}
}
input(p);
p->total=p->C_score+p->E_score+p->M_score;
p->ave1=p->total/3;
p->next=null;
}
h->show_menu(h);
return(h);
}
Listnode *Listnode::modify(Listnode *p)//修改资料
{
int n=0;
Listnode *h;
h=p;
n=inum(n);//输入要修改的学号并判断学号是否有误
if(p->num==n)
{
minput(p);
p->total=p->C_score+p->E_score+p->M_score;
p->ave1=p->total/3;
cout<<"修改成功."<<endl;
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -