前不久认了一个正在核动力院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;
}