⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 学生成绩管理系统源代码.cpp

📁 用链表实现学生成绩管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -