#include
#defineNULL0//指定"NULL"为0
usingnamespacestd;
classteacher
{
protected:
stringnum,name,sex;//学号、姓名、性别
public:
teacher(){num=”0”;name=sex=”-”;}
};
classcourse
{
protected:
stringsubject[35],prace[35];//课程表
public:
course()
{for(inti=0;i〈35;i++)
subject[i]=prace[i]=”/";}
};
classstudent:
publicteacher,publiccourse//双重继承
{
private:
stringpassword;//密码
stringClass;//班级
floatmath,English,VC,physics,electron;//数学、英语、C++、物理、电模成绩
student*next;//指向下一节点的指针
public:
student(){Class=password=”0";math=English=VC=physics=electron=0;}
floatsum(student*p){return(p-〉math+p—〉English+p—>VC+p—>physics+p—〉electron);}
//求总成绩
voidRead();//从文件中读入数据,给链表赋值
voidinput();//输入成绩
voidinput_subject();//输入课表
voiddel(stringnum);//删除数据
voidinsert(student*);//插入数据
student*sign();//注册、登录
intseak(float);//排名
voidprint();//输出全部信息
voidprint(stringnum);//输出个人成绩信息
voidprint_subject(stringnum);//输出个人课表信息
voidprint(student*);//输出个人成绩信息
voidprint_subject(student*);//输出个人课表信息
voidWrite();//保存数据
};
intn=0;//定义全局变量n,n为节点数
stringa=”1234”;
student*head;//头指针
intmain()//主函数
{
stringnum="0";
intb=0,option=9;
students;
student*stud;
system(”color5f”);
s。
Read();
cout<〈”********************************************************************************”;
cout〈<"******************";
cout<〈"***#欢迎使用本学生成绩管理系统:
#***”;
cout〈〈”*########*”;
cout<〈"*#0.学生入口#*”;
cout〈〈”***1。
教师入口***”;
cout<〈"******************";
cout<<”--——请输入您的选择:
”;
while(a!
=”0”&&a!
=”1")
{
cin>〉a;
cout〈〈”******************”;
if(a!
=”0"&&a!
="1")
cout〈<”-———ˇ﹏ˇ糟糕!
输入有误,请重新输入您的选择:
”;
}
stud=s。
sign();
if(a=="0")//A学生入口
{
cout〈〈”********************************************************************************”;
cout〈<”*********选择菜单:
*********”;
cout〈〈”***1。
查看自己的成绩***”;
cout<〈”*2.查看自己的课表*";
cout〈<”***0。
退出***”;
do
{
cout〈〈”——-—请输入您的选择:
”;
cin〉>option;
while(option!
=0&&option!
=1&&option!
=2)
{
cout<<”——ˇ﹏ˇ糟糕!
输入有误,请重新输入您的选择:
”;
cin〉〉option;
}
switch(option)
{
case1:
{cout〈print(stud);break;}//输出成绩
case2:
{s。
print_subject(stud);break;}//输出课表
default:
{option=0;break;}
}
}
while(option!
=0);
}
else//教师入口
{
do
{try{
cout<<"********************************************************************************”;
cout〈<”*********选择菜单:
*********";
cout〈〈”***1.查看自己的信息***”;
cout<<"*2.查看指定学生信息*”;
cout<〈”**#3.查看所有学生信息#**";
cout〈〈”**####4.录入学生信息####**”;
cout<〈”*#5.修改学生信息#*";
cout〈〈”***6。
删除学生信息****”;
cout〈<”*********0。
退出*********";
cout<〈”-———请输入您的选择:
";
cin>〉option;
if(option〈0||option>6)thrownum;
cout<〈endl;
switch(option)
{
case1:
//查看自己的信息
{
cout〈<"-—1。
查看成绩——”;
cout〈〈”——2。
查看课表——”;
cout〈〈"---—请输入您的选择:
”;
cin〉〉a;
if(a!
=”1"&&a!
="2”)thrownum;
if(a=="1")
{cout〈〈”——个人信息:
”<〈endl;
s。
print(stud);}//输出个人成绩信息
else
{cout〈<"-—课表:
”<s。
print_subject(stud);//输出个人课表
}
cout<〈"-—按任意键返回主菜单:
";
getch();
system(”cls");
break;
}
case2:
//查看指定学生信息
{cout〈〈”-—请输入您要查找的学号:
";
cin〉〉num;
if(b=num。
length()!
=12)throw1;
cout〈<”——1。
查看成绩——”;
cout<<"-—2.查看课表——”;
cout<〈”--—-请输入您的选择:
”;
cin〉>a;
if(a!
=”1”&&a!
="2”)thrownum;
if(a==”1”)
{cout〈〈”——个人信息:
"<〈endl;
s.print(num);}//输出个人成绩信息
else
{cout<〈"-—课表:
”<s。
print_subject(num);}//输出个人课表
cout<<”—-按任意键返回主菜单:
”;
getch();
system("cls");
break;
}
case3:
//查看所有学生信息
{cout<<"-—数据库中共有"〈〈n〈<”名学生的信息:
”<if(head!
=NULL)
s。
print();//输出所有信息
cout〈<”--按任意键返回主菜单:
";
getch();
system("cls”);
break;
}
case4:
//录入学生信息
{
cout〈〈”-—1。
录入成绩--";
cout<〈”——2.录入课表--";
cout〈<"—-——请输入您的选择:
";
cin>〉a;
if(a!
=”1"&&a!
="2”)thrownum;
if(a==”1”)
s。
input();//输入成绩
else
s.input_subject();
s。
Write();//输入课表
cout〈〈”--按任意键返回主菜单:
”;
getch();
system(”cls”);
break;
}
case5:
//修改学生信息
{
cout〈〈"——1。
修改成绩—-”;
cout〈〈”——2。
修改课表—-";
cout〈〈”---—请输入您的选择:
”;
cin>〉a;
if(a!
=”1"&&a!
="2")thrownum;
if(a==”1")
s。
input();//修改成绩
else
s。
input_subject();
s.Write();//修改课表
cout〈〈"——按任意键返回主菜单:
";
getch();
system(”cls”);
break;
}
case6:
//删除学生信息
{
cout〈〈"--请输入要删除的学号:
";
cin〉〉num;
if(b=num.length()!
=12)throw1;
else
{s。
del(num);
s。
Write();}//删除后保存信息
cout〈〈”—-按任意键返回主菜单:
";
getch();
system(”cls");
break;
}
default:
{option=0;break;}//退出选择菜单
}
}
catch(int)
{cout〈〈”--ˇ﹏ˇ糟糕!
输入有误,请正确输入12位的学号!
”〈cout<〈”-—按任意键返回主菜单:
”;
getch();
system("cls");
}
catch(string)
{cout〈〈”——ˇ﹏ˇ糟糕!
输入有误!
"〈〈endl;
cout<〈”——按任意键返回主菜单:
”;
getch();
system(”cls”);
}
}
while(option!
=0);
}
s。
Write();//退出前保存信息
deletehead;//撤销动态建立的空间
return0;
}
voidstudent:
:
Read()//从文件读入信息,给链表赋值
{
student*p,*p2;
ifstreaminfile(”student.txt”,ios:
:
in);
p=newstudent;
head=p;
head—>next=NULL;
if(!
infile)
cerr<〈"-—文件:
student。
txt读取失败!
”〈〈endl;
else
{infile〉〉n;
for(intl=0;l〈n;l++)
{
infile〉〉p—〉num〉>p—〉password>>p—〉name〉〉p—>sex〉〉p—>Class>〉
p—〉physics〉>p—〉electron〉>p—>math〉>p—〉English>>p-〉VC;
for(inti=0;i<35;i++)
infile>〉p—>subject[i]>〉p—>prace[i];
p2=p;
p=newstudent;
p2-〉next=p;
}
p2-〉next=NULL;
infile.close();
}
}
student*student:
:
sign()//注册、登录
{
student*p1,*p2,*stu;
stringnum1;
p1=head;
inti=9,m=0;
cout〈〈"***2。
注册***”;
cout〈<"*3。
登录*";
cout<〈”-—--请输入您的选择:
";
try
{
while(a!
=”2”&&a!
=”3”)
{
cin〉>a;
if(a!
=”2”&&a!
=”3”)
cout<〈”-———ˇ﹏ˇ糟糕!
输入有误,请重新输入您的选择:
”;
m=m+1;
if(m〉3)throwstu;
}
if(a==”2”)
{
while(m<3)
{
m=m+1;
stu=newstudent;
cout<〈”—-请输入学号:
”;
cin〉>stu-〉num;
while(i=stu—>num。
length()!
=12)
{
cout〈〈”—-——ˇ﹏ˇ糟糕!
输入有误,请正确输入12位的学号:
”;
cin〉〉stu—〉num;
}
while(stu->num!
=p1—〉num&&p1-〉next!
=NULL)
{p2=p1;p1=p1-〉next;}
if(stu—〉num==p1—〉num&&p1—〉password!
=”0”)
{cout〈〈"—-此学号已注册,请重新输入!
”〈〈endl;
continue;
}
if(stu—〉num==p1—〉num)
{
cout<〈"—-请输入密码:
”;
cin〉〉p1—〉password;
cout<〈”——请再次输入密码:
";
cin〉>num1;
if(p1—〉password!
=num1)
{cout〈〈”-—两次密码不匹配,请重新输入!
”〈cout〈〈”-—请输入姓名:
”;
cin>〉p1—>name;
cout〈<”——请输入性别:
";
cin>>p1—〉sex;
}
else
{
cout〈〈”——请输入密码:
”;
cin〉〉stu—〉password;
cout〈〈"——请再次输入密码:
”;
cin>〉num1;
if(stu->password!
=num1)
{cout〈〈"——两次密码不匹配,请重新输入!
”〈cout〈〈”——请输入姓名:
”;
cin〉〉stu—〉name;
cout<〈"--请输入性别:
”;
cin>〉stu—>sex;
insert(stu);
}
cout〈〈endl〈〈"-—*^_^*恭喜,注册成功!
"<Write();//保存注册的信息
cout<〈”——按任意键返回主菜单:
”;
getch();
system(”cls”);
returnstu;
break;
}
}
else
{
while(m〈3)
{
m=m+1;
stu=newstudent;
cout〈〈”——请输入学号:
”;
cin〉〉stu->num;
while(i=stu—〉num.length()!
=12)
{
cout<<"——ˇ﹏ˇ糟糕!
输入有误,请正确输入12位的学号:
”;
cin〉〉stu—>num;
if(m〉3)throwstu;
}
cout<<”——请输入密码:
";
cin>>stu—〉password;
while(stu—〉num!
=p1-〉num&&p1—〉next!
=NULL)
{p2=p1;p1=p1—〉next;}
if(stu—〉num==p1—〉num&&stu—〉password==p1—〉password)
{cout<〈endl〈〈”——*^_^*恭喜,登录成功!
”〈〈endl<cout〈〈"--按任意键返回主菜单:
";
getch();
system(”cls");
returnstu;break;
}
else
{cout<<”——学号或密码输入有误,请重新输入!
"〈〈endl;continue;}
}
}
}
catch(student*)
{cout〈〈”——您登录或注册的次数已超过3次,程序已自动退出!
"〈(1);}
}
voidstudent:
:
input()//输入成绩信息
{
student*p1,*p2;
intr=0;
stringnum;
p1=head;
cout<〈”-—请输入学号:
”;
cin〉〉num;
if(r=num。
length()!
=12)throwr;
while(p1-〉num!
=num&&p1-〉next!
=NULL)
{p2=p1;p1=p1—>next;}//如果未找到此学号,则指针后移一个节点
if(p1->num==num)//找到就输入此学生信息
{
cout〈<”—-请输入姓名:
”;
cin〉〉p1—〉name;
cout<〈”请输入性别:
";
cin〉>p1—>sex;
cout<<”——请输入班级:
”;
cin〉〉p1—>Class;
cout〈〈”-—请输入数学成绩:
”;
cin〉〉p1—〉math;
cout<〈”—-请输入英语成绩:
”;
cin〉〉p1—〉English;
cout〈〈"—-请输入C++成绩:
";
cin〉>p1—>VC;
cout〈〈"—-请输入物理成绩:
”;
cin>〉p1-〉physics;
cout〈〈”——请输入电模成绩:
";
cin>>p1—〉electron;
}
else//未找到则新建一个节点
{
p1=newstudent;
p1—〉num=num;
cout〈〈"--请输入姓名:
”;
cin〉>p1->name;
cout〈〈"请输入性别:
";
cin〉>p1—〉sex;
cout〈〈”-—请输入班级:
";
cin>〉p1—>Class;
cout<〈”—-请输入数学成绩:
";
cin〉〉p1—〉math;
cout<<”--请输入英语成绩:
”;
cin>〉p1-〉English;
cout〈<”—-请输入C++成绩:
”;
cin〉〉p1—〉VC;
cout〈〈"——请输入物理成绩:
”;
cin>〉p1—〉physics;
cout〈<”--请输入电模成绩:
”;
cin〉>p1-〉electron;
insert(p1);//将新建的节点插入到链表中
}
}
voidstudent:
:
input_subject()//输入课表信息
{
student*p1,*p2;
intr=0,t=0;
stringnum;
p1=head;
cout〈〈”——请输入学号:
";
cin〉〉num;
if(t=num.length()!
=12)throwr;
while(p1—>num!
=num&&p1—>next!
=NULL)
{p2=p1;p1=p1—〉next;}//如果未找到此学号,则指针后移一个节点
if(p1-〉num==num)//找到就输入此学生课表信息
{
for(inti=0;i<5;i++)
for(intj=0;j<7;j++)
{
cout<<”-—请输入星期”<〈j+1〈<”第”<〈i+1<〈”大节课的科目:
”;
cin>>p1—〉subject[r];
cout<<”—-请输入星期"〈";
cin〉〉p1—>prace[r];
r=r+1;
}
}
else//未找到,则新建一个节点
{
p1=newstudent;
for(inti=0;i〈5;i++)
for(intj=0;j〈7;j++)
{
cout<〈”——请输入星期”<”;
cin〉>p1-〉subject[r];
cout<〈"—-请输入星期”<〈j+1〈〈”第”<〈i+1〈〈”大节课的地点:
”;
cin>〉p1—〉prace[r];
r=r+1;
}
insert(p1);//将新建的节点插入到链表中
}
}
voidstudent:
:
del(stringnum)//删除信息
{
student*p1,*p2;
if(head==NULL)//如果链表为空,则返回删除失败
{cout<〈"-—删除失败,链表为空!
"〈p1=head;
while(num!
=p1—〉num&&p1—〉next!
=NULL)
{p2=p1;p1=p1—>next;}
if(num==p1—〉num)//如果有此学号
{
if(p1==head)head=p1—>next;
elsep2—〉next=p1—〉next;
cout<〈”—-学号:
”〈〈num<〈"已成功删除。
”〈〈endl;
n=n—1;
}
elsecout<〈"—-未找到此学号,删除失败"〈〈num;//如无此学号,返回删除失败