学生信息管理里系统c++

前不久认了一个正在核动力院QT工作的师傅,说是教我QT,而作为测试我能力的任务就是自己写一个学生成绩信息管理系统
开始还吓了一跳,可后来自己动手开始查资料做的时候,才意识到原来也不是那么的难。
今天就把他分享到这里,希望大家一起学习,一起进步。

整体实现了成绩的增删该查等功能

/*
项目:实现一个学生管理系统对学生成绩的管理
功能:学生成绩的录入(增),统计,查询(查),修改(该),删除(删),输出


*/
#include<iostream>
#include<fstream>
#include<string>
#include<graphics.h>
using namespace std;


class Student 
{
public:
	char name [20];//学生名字
	int num;		//学生学号
	int age;		//学生年纪
	char sex;		//学生性别
	double  English;		//英语
	double  math;		//数学
	double  com;	//计算机
	double  ave;	//平均分
	Student *next;
	Student *stu;
	Student();			//构造函数
	void display()
	{
	cout<<"名字:"<<name<<" "<<"学号:"<<num<<" "<<"性别:"<<sex<<"年龄:"<<age<<"英语:"<<English<<" "<<"数学:"<<math<<"  "<<"计算机:"<<endl;
	}
	Student (char n[20],int nu,int ag,char se,double e,double m,double c ,double av);
	~Student ();
	void Set();//添加
	void Delet();//删除
	void Alet();//修改
	void List();//显示
	void Aver();//平均分
	void Sload();//读取
	void Pnumb();//
	void Peng();//
	void Pmat();//
	void Pcomp();//
	void Search();//查询
	 friend  void Caozuo(int);
	void Save();//保存文件

private:
protected:
};
Student::Student ()//无参数构造函数定义
{
strcpy(name,"nomame");
num=0;
sex='m';
age=0;
 English=0;
math=0;
com=0;
ave=0;
}

Student::Student (char n[20],int nu,int ag,char se,double e,double m,double c ,double av)
{
strcpy(name,n);
num=nu;
age=ag;
sex=se;
English=e;
math=m;
com=c;
ave=av;
}

Student::~Student ()
{

}


void Student::Aver()
{
double z;
z=(English+math+com)/3;

}
int i=0;
int j=0;
Student *s[50];


void Student::Set()//输入学生信息
{
cout<<"请输入姓名:"<<endl;
cin>>name;
cout<<"请输入学号:"<<endl;
cin>>num;
cout<<"请输入年龄:"<<endl;
cin>>age;
cout<<"请输入性别:"<<endl;
cin>>sex;
cout<<"请输入英语成绩:"<<endl;
cin>>English;
cout<<"请输入数学成绩:"<<endl;
cin>>math;
cout<<"请输入计算机成绩:"<<endl;
cin>>com;
j++;
s[i]=new Student (name,num,age,sex,English,math,com,ave);
i++;
}
void Student::Delet()//删除
{
	cout<<"请输入要删除的学生姓名"<<endl;
	cin>>name;
	for(int h=0;h<i;h++)
	{
		if(strcpy(name,s[h]->name)==0)
		{
			i--;
			s[h]=s[h+1];
			h++;
		}
		else cout<<"该学生不存在,请重新输入"<<endl;
	}
}

void Student::Alet()//修改数据
{
	cout<<"请输入要修改的学生姓名"<<endl;
	cin>>name;
	for(int h=0;h<i;h++)
	{
		if(strcpy(name,s[h]->name)==0)
		{
			int nu;
			int ag;
			char se;
			double e;
			double m;
			double c;
			cout <<"请输入学号: "<<endl; 
			cin>>nu; 
			cout<<"请输入年龄:"<<endl;  
			cin>>ag;  
			cout<<"请输入性别:"<<endl; 
			cin>>se; 
			cout<<"请输入英语成绩:"<<endl; 
			cin>>e; 
			cout<<"请输入数学成绩:"<<endl; 
			cin>> m; 
			cout<<"请输入计算机成绩:"<<endl; 
			cin>>c; 
			s[h]->num=nu;  
			s[h]->age=ag; 
			s[h]->sex=se;  
			s[h]->English=e; 
			s[h]->math=m; 
			s[h]->com=c; 
			cout<<"数据修改成功!";  
			break; 
		}
		if(i==j)
		{
			cout<<"你要查询的学生不存在"<<endl;
			break;
		}
	}
}



void Student::List()//显示记录
{
	cout<<"所有人数据如下:"<<endl;
	if(i==0)
	cout<<"没有此数据"<<endl;
	for(int k = 0 ;k < i; k++)
	{
		s[k]->display();
	}
	
}

void Student::Search()
{
	cleardevice();
	cout<<"查询学生信息"<<endl;
	cout<<"请输入查询方式"<<endl;
	cout<<"1.按学号查询"<<endl;
	cout<<"2.按姓名查询"<<endl;
	cout<<"3.返回"<<endl;
	int c;
	cin>>c;
	switch (c)
	{
	case '1':
		{
			int n;
			if(i==0)
			{
				cout<<"系统没有输入数据"<<endl;
			}
			cout<<"请输入要查询的学号"<<endl;
			cin>>n;
			for(int j=0;j<i;j++)
			{
				if(s[j]->num==n)
					cout<<"你要查询的学生是:"<<s[j]->name<<endl;
				cout<<"年龄:"<<s[j]->age<<"性别:"<<s[j]->sex<<"英语:"<<s[j]->English<<"数学:"<<s[j]->math<<"计算机:"<<s[j]->com<<endl;
				break;
			}
			if(i==j)
			{
				cout<<"对不起,你查询的学生不存在"<<endl;
			}
			break;
		}
	case '2':
		{
			if(i==0)
			{
				cout<<"管理系统没有输入的或数据已经被删除"<<endl;
				exit(0);
			}
			cout<<"请输入你要查询的学生姓名:"<<endl;
			cin>>name;
			for(int j=0;j<i;j++)
			{
				if(strcmp(name,s[j]->name)==0)
				{
					cout<<"你要查询的学生是:"<<s[j]->name<<endl;
					cout<<"学号:"<<s[j]->num<<endl;
					cout<<"年龄:"<<s[j]->age<<endl;
					cout<<"性别:"<<s[j]->sex<<endl;
					cout<<"英语:"<<s[j]->English<<endl;
					cout<<"数学:"<<s[j]->math<<endl;
					cout<<"计算机:"<<s[j]->com<<endl;
					cout<<"平均分:"<<s[j]->ave<<endl;
					break;
				}
				if(i==j)
				{
					cout<<"对不起,你要查询的学生不存在"<<endl;
				}
				
			}
			break;
		}
	case '3':
		return ;
	}
}

void Student::Pnumb()//按学号查找
{
Student *p1,*p2;
int n;
p1=stu;
while(p1->next)
{n++;p1=p1->next;}
cout<<"共有"<<n<<"条信息。。。"<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
 if (p1->num>p1->next->num) // 如果头结点大于第二个的  
		{  
          p2=p1->next;  
          p1->next=p1->next->next;  
          p2->next=p1; //头结点交换  
          stu=p2;  
		}  
         p1=stu;  
          while(p1->next->num) //中间的交换  
		  {  
            p2=p1;  
            p1=p1->next;  
            if(p1->num>p1->next->num)  
			{  
               p2->next=p1->next;  
                p1->next=p1->next->next;  
                p2->next->next=p1;  
                p1=p2->next; //交换  
			}  
}
}
 p1=stu;  
         do  
		 {  
           p1->display();  
           p1=p1->next;  
		 }while(p1);  
}  

void Student::Pmat()//按数学查找
{
	Student *p1,*p2;
	int n;
	p1=stu;
	n=1;
	while(p1->next)
	{n++;p1=p1->next;}
	cout<<"共有"<<n<<"条信息"<<endl;
	int i;
	p1=stu;
	for(i=1;i<n;i++)
	{
		p1=stu;
		if(p1->math>p1->next->math)//如果头结点大于第二个的
			p2=p1->next;
		p1->next =p1->next->next ;
		p2->next =p1;//头结点交换
		stu=p2;
	}
	p1=stu;
	while(p1->next->next)//中间的交换
	{
		p2=p1;
		p1=p1->next;
		if(p1->math>p1->next->math)
		{
			p2->next=p1->next;
			p1->next =p1->next ->next;
			p2->next->next=p1;
			p1=p2->next;//交换
		}
	}
	p1=stu;
	do
	{
	p1->display();
	p1=p1->next ;
	}while(p1);
}


void Student::Pcomp()//按计算机查找
{
	Student *p1,*p2;
	int n;
	p1=stu;
	n=1;
	while(p1->next)
	{n++;p1=p1->next;}
	cout<<"共有"<<n<<"条信息"<<endl;
	int i;
	p1=stu;
	for(i=1;i<n;i++)
	{
		p1=stu;
		if(p1->math>p1->next->math)//如果头结点大于第二个的
			p2=p1->next;
		p1->next =p1->next->next ;
		p2->next =p1;//头结点交换
		stu=p2;
	}
	p1=stu;
	while(p1->next->next)//中间的交换
	{
		p2=p1;
		p1=p1->next;
		if(p1->com>p1->next->com)
		{
			p2->next=p1->next;
			p1->next =p1->next ->next;
			p2->next->next=p1;
			p1=p2->next;//交换
		}
	}
	p1=stu;
	do
	{
	p1->display();
	p1=p1->next ;
	}while(p1);
}

void Student::Peng()//那英语查找
{
	Student *p1,*p2;
	int n;
	p1=stu;
	n=1;
	while(p1->next)
	{n++;p1=p1->next;}
	cout<<"共有"<<n<<"条信息"<<endl;
	int i;
	p1=stu;
	for(i=1;i<n;i++)
	{
		p1=stu;
		if(p1->math>p1->next->math)//如果头结点大于第二个的
			p2=p1->next;
		p1->next =p1->next->next ;
		p2->next =p1;//头结点交换
		stu=p2;
	}
	p1=stu;
	while(p1->next->next)//中间的交换
	{
		p2=p1;
		p1=p1->next;
		if(p1->English>p1->next->English)
		{
			p2->next=p1->next;
			p1->next =p1->next ->next;
			p2->next->next=p1;
			p1=p2->next;//交换
		}
	}
	p1=stu;
	do
	{
	p1->display();
	p1=p1->next ;
	}while(p1);
}

void Student::Save()
{
	char c;
	cout<<"保存学生信息(会覆盖原来的信息),是否继续?(Y or N)"<<endl;
	cin>>c;
	if(toupper(c)!='Y')return ;
	ofstream tfile("date.txt,ios::binary");
	Student *p=stu;
	while (p)//写入文件
	{
		tfile<<p->name <<"\t"<<num<<"\t"<<p->English<<"\t"<<p->math<<"\t"<<com<<"\t"<<p->ave;
		tfile<<endl;
		p=p->next ;
	}
	tfile.close();
	cout<<"保存完成"<<endl;
}


void Student::Sload()//读取
{
	Student *p;
	p=stu;
	while(p)
	{
		stu=p->next;
		delete p;
		p=stu;
	}
	ifstream tfile("date.txt",ios::binary);
	char name1[20];
	int num1;
	char sex1;
	double English1,math1,com1,ave1,age1;
	tfile>>name1>>num1>>English1>>math1>>com1>>ave1>>sex1>>age1;
	while(tfile.good())
	{
		//创建学生节点
		Student *s;
		s=stu;
		s=new Student (name1,num1,age1,sex1,English1,math1,com1,ave1);
		s->next=0;
		s->ave=stu->ave;
		if(stu)//若已经由此节点
		{
			Student *p2;
			p2=stu;
			while(p2->next )//查找尾节点
			{
				p2=p2->next;
			}
			p2->next=s;//链接
		}
		tfile>>name1>>num1>>English1>>math1>>com>>ave1;
	}
	tfile.close();
	cout<<"学生信息已经装入"<<endl;
}

void Caozuo(int p )//友元定义
{

	Student t;
	switch(p)
	{
	case 0:t.Set();break;
	case 1:t.Set();break;
	case 2:t.Delet();break;
	case 3:t.Alet();break;
	case 4:t.List();break;
	case 5:t.Search();break;
	case 6:exit(0);break;
	}
}

int main()
{
	char w;
	do
	{
	cout<<"请输入操作码(成绩录入/0 增加人员/1  删除人员/2  修改数据/3   显示记录/4  查找/5  排序/6  退出/7)"<<endl;
	int a;
	cin>>a;
	Caozuo(a);
	cout<<" 你想继续进行操作吗?(Y/N)"<<endl;
	cin>>w;
	}
	while(w=='y');
return 0;
}

运行之后就是这样的一个界面

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值