C++选课管理系统课程设计.docx
《C++选课管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《C++选课管理系统课程设计.docx(31页珍藏版)》请在冰点文库上搜索。
C++选课管理系统课程设计
///////////////////////////////////////////////////////////////
//头文件及函数声明
#include
#include
#include
#include
#include
#include
usingnamespacestd;
classXS;
classJS;
classstu;
classsubject;
intmenu();//主菜单
intmenu1();//学生选课端菜单
intmenu2();//管理端菜单
template
voidADD(TP);//增加功能函数模板
template
voidLOOK(TP);//查看功能函数模板
template
voidDELETE(TP);//删除功能函数模板
voidxuanke(XSP,charnu[],charna[]);//选课功能函数
voidtuixuan(XSP,charnu[],charna[]);//退选课程功能函数
voidlookyixuan(XSP,charnu[],charna[]);//查看学生已选课程函数voiddayin(XSP,charnu[],charna[]);//打印学生选课情况函数
voidtuichu();//退出系统函数
voidpassword();//密码检查功能函数
/////////////////////////////////////////////
//定义课程信息类
structcourse
{charcnum[10];
charcname[20];
charcteacher[20];
floatcredit;
};
structCourse
{coursekecheng;
Course*next;
};
classsubject
{Course*head;
Course*p;
public:
//头指针
//当前指针
subject(){head=p=NULL;};
voidAdd();
voidDelete();
//删除课程
intSearch(charnu[]);
voidReadFile();
//根据课程号查找课程
//从文件中读取课程信息
voidWriteFile();
//向文件写入课程信息
voidDisplay();
//在屏幕中输出全部课程信息
friendXS;
friendJS;
friendvoidxuanke(XSP,charnu[],charna[]);
};
voidsubject:
:
Add()
{p=newCourse;
cout<<"\t请输入课程号:
";cin>>p->um;
if(Search(p->um)==0)
{cout<<"\t请输入课程名:
";cin>>p->ame;
cout<<"\t请输入任课教师:
";cin>>p->kecheng.cteacher;
cout<<"\t请输入课程学分:
";cin>>p->kecheng.credit;
p->next=head;
head=p;
cout<<"增加课程操作成功!
"<
//头插入建链表
}
else
cout<<"\n\t已经存在该课程,不能重复添加!
}
voidsubject:
:
Delete()//按课程号删除
"<{if(head!
=NULL){intn=0;Course*kc=head;
Course*q1=head,*q2=head->next;charkh[10];
cout<<"\t请输入您要删除的课程号:
";cin>>kh;
while(kc!
=NULL)
{n++;if(strcmp(kc->um,kh)==0)break;kc=kc->next;
}
if(kc==NULL)cout<<"不存在该课程号!
"<{if(n==1)head=head->next;else
{for(inti=1;i
q2=q2->next;
}
if(q2==NULL)
q1=NULL;
else
q1->next=q2->next;
}
cout<<"删除成功!
"<}}
}
intsubject:
:
Search(charnu[])
{Course*kc=head;while(kc!
=NULL)
{if(strcmp(kc->um,nu)==0)break;kc=kc->next;
}
if(kc==NULL)return0;
elsereturn1;
}
voidsubject:
:
Display()//在屏幕中输出全部课程信息
{if(head==NULL)
cout<<"没有课程信息!
\n\n";
else{Course*k=head;
cout<:
left)<课
程
号
"<:
left)<<:
left)<分"<while(k)
"
任课教师
"<:
left)<
学
{cout<:
left)<um<:
left)<ame
<:
left)<kecheng.cteacher<:
left)<<
k->kecheng.credit<k=k->next;
}
cout<}
}
voidsubject:
:
ReadFile()//从文件读取课程信息
{p=newCourse;
ifstreamfip("课程信息.dat",ios:
:
in|ios:
:
binary);
if(!
fip)cout<<"文件打开失败!
"<else
while(fip.read((char*)&p->kecheng,sizeof(p->kecheng)))
{p->next=head;head=p;p=newCourse;
}
fip.close();
deletep;
}
voidsubject:
:
WriteFile()
{Course*s=head;
//向文件写入课程信息
ofstreamfop;
fop.open("课程信息.dat",ios:
:
binary|ios:
:
trunc);
if(!
fop)
{cout<<"课程信息.dat无法打开!
"<}
while(s)
{while(fop.write((char*)&s->kecheng,sizeof(s->kecheng)))
{s=s->next;
}
}
fop.close();
}
///////////////定义教师信息类
structteacher
{chartnum[10];
chartname[20];
charzhicheng[20];
};
structTeacher
{teacherjiaoshi;
Teacher*next;
};
classJS
{
Teacher*head;//头指针
Teacher*p;//当前指针
public:
JS(){head=p=NULL;};
voidAdd();
voidDelete();
voidSearch(charna[]);
intSearch1(charnu[]);
voidReadFile();
voidWriteFile();
//通过教师姓名查找任课教师
//通过教师号查找教师
//从文件中读取教师信息
//向文件写入教师信息
voidDisplay();
friendXS;
//在屏幕中输出全部教师信息
};
voidJS:
:
Add()
{p=newTeacher;
cout<<"\t请输入教师证号:
";cin>>p->jiaoshi.tnum;
if(Search1(p->jiaoshi.tnum)==0)
{cout<<"\t请输入教师姓名:
";cin>>p->jiaoshi.tname;
cout<<"\t请输入教师职称:
";cin>>p->jiaoshi.zhicheng;
p->next=head;
head=p;
cout<<"增加教师操作成功!
"<
//头插入建链表
}
else
cout<<"\n\t
该教师已经存在,不能重复添加!
"<}
voidJS:
:
Delete()
{if(head!
=NULL)
{intn=0;
Teacher*js=head;
Teacher*q1=head,*q2=head->next;
charzh[10];
cout<<"\t请输入您要删除的教师证号:
";
cin>>zh;
while(js!
=NULL)
{n++;
if(strcmp(js->jiaoshi.tnum,zh)==0)break;
js=js->next;
}
if(js==NULL)cout<<"不存在该教师!
"<else
{if(n==1)head=head->next;
else
{for(inti=1;i{q1=q2;
q2=q2->next;
}
if(q2==NULL)
q1=NULL;
else
q1->next=q2->next;
}
cout<<"删除教师成功!
"<}}
}
voidJS:
:
Search(charna[])
{Teacher*js=head;while(js!
=NULL)
{if(strcmp(na,js->jiaoshi.tname)==0)break;js=js->next;
}
if(js!
=NULL)
{cout<:
left)<:
left)<<<"教师姓名"<:
left)<cout<:
left)<jiaoshi.tnum<:
left)
<jiaoshi.tname<:
left)<jiaoshi.zhicheng<}
else
cout<<"没有该教师信息!
"<}
voidJS:
:
Display()
{if(head==NULL)
cout<<"没有教师信息!
\n\n";
else{Teacher*k=head;
cout<:
left)<"<:
left)<:
left)<while(k)
{cout<:
left)<jiaoshi.tnum
<:
left)
<jiaoshi.tname<:
left)<jiaoshi.zhicheng<k=k->next;}
cout<}
}
intJS:
:
Search1(charnu[])
{Teacher*js=head;while(js!
=NULL)
{if(strcmp(nu,js->jiaoshi.tnum)==0)break;
js=js->next;
}
if(js==NULL)return0;
elsereturn1;
}
voidJS:
:
WriteFile()
{Teacher*s=head;
ofstreamfop;
charxs[]="教师信息.dat";
fop.open(xs,ios:
:
binary|ios:
:
trunc);
if(!
fop)
{cout<<"教师信息.dat无法打开!
"<}
while(s)
{while(fop.write((char*)&s->jiaoshi,sizeof(s->jiaoshi)))
{s=s->next;
}}
fop.close();
}
voidJS:
:
ReadFile()
{p=newTeacher;
ifstreamfip("教师信息.dat",ios:
:
in|ios:
:
binary);//以二进制形式打开文件if(!
fip)cout<<"文件打开失败!
"<else
while(fip.read((char*)&p->jiaoshi,sizeof(p->jiaoshi)))
{p->next=head;head=p;
p=newTeacher;
}
fip.close();
deletep;
}
////////////////定义学生信息类
structstudent
{charsnum[10];
charsname[20];
};
structStudent
{studentxuesheng;
Student*next;};
classstu
{
Student*head;//头指针
Student*p;//当前指针
public:
stu(){head=p=NULL;};
voidAdd();
voidDelete();
intSearch(charnu[],charna[]);//
intSearch(charnu[]);
voidReadFile();
voidWriteFile();
//增加学生
//删除学生
按学生学号和姓名查找
//按学生学号查找
//将所有学生的信息写入文件保存
//从文件读出学生信息
voidDisplay();
friendXS;
//显示所有学生
};
voidstu:
:
Add()
{p=newStudent;
cout<<"\t请输入学号:
";cin>>p->xuesheng.snum;
if(Search(p->xuesheng.snum)==0)
{cout<<"\t请输入姓名:
";cin>>p->xuesheng.sname;
p->next=head;
head=p;
cout<<"增加学生操作成功!
"<//头插入建链表
}
else
cout<<"\n\t该学生已经存在,不能重复添加!
}
voidstu:
:
Delete()//按学号删除
{if(head!
=NULL)
"<{intn=0;
Student*q1=head,*q2=head->next;
charkh[10];
cout<<"\t请输入您要删除的学生学号:
";
cin>>kh;
while(kc!
=NULL)
{n++;
if(strcmp(kc->xuesheng.snum,kh)==0)break;
kc=kc->next;
}
if(kc==NULL)cout<<"不存在该学生!
"<else
{if(n==1)head=head->next;
else
{for(inti=1;i{q1=q2;
q2=q2->next;
}
if(q2==NULL)
q1=NULL;
else
q1->next=q2->next;
}
cout<<"删除成功!
"<}}
}
intstu:
:
Search(charnu[],charna[])
{Student*kc=head;
while(kc!
=NULL)
{if(strcmp(kc->xuesheng.snum,nu)==0&&strcmp(kc->xuesheng.sname,na)==0)break;
kc=kc->next;
}
if(kc==NULL)return0;
elsereturn1;
}
intstu:
:
Search(charnu[])
{Student*kc=head;
while(kc!
=NULL)
{if(strcmp(kc->xuesheng.snum,nu)==0)break;kc=kc->next;
}
if(kc==NULL)return0;
elsereturn1;
}
voidstu:
:
WriteFile()
{Student*s=head;
ofstreamfop;
charxs[]="学生信息.dat";
fop.open(xs,ios:
:
binary|ios:
:
trunc);
if(!
fop)
{cout<<"学生信息.dat无法打开!
"<}
while(s)
{while(fop.write((char*)&s->xuesheng,sizeof(s->xuesheng)))
s=s->next;
}
}
voidstu:
:
ReadFile()
{p=newStudent;
ifstreamfip("学生信息.dat",ios:
:
in|ios:
:
binary);
if(!
fip)cout<<"文件打开失败!
"<else
while(fip.read((char*)&p->xuesheng,sizeof(p->xuesheng)))
{p->next=head;head=p;
p=newStudent;
}
fip.close();
deletep;
}
voidstu:
:
Display()
{if(head==NULL)cout<<"没有学生信息!
\n\n";
else{Student*k=head;
cout<:
left)<:
left)<姓名"<while(k)
{cout<:
left)<xuesheng.snum<:
left)<<
k->xuesheng.sname<k=k->next;}
cout<}
}
/////////////////////////学生类
classXS
{charnum[10];
charname[20];
Course*head;//已选课程
Course*p;
floattcredit;
public:
XS(){head=p=NULL;tcredit=0;};
voidset(charnu[],charna[])
{strcpy(num,nu);strcpy(name,na);};
voidAddcourse(charnu[]);//学生选课
intSearch(charnu[]);//按课程号查找以选课程
voidDeletecourse(charnu[]);//退选
voidShowcourse();//显示已选课程
floatget_tcredit();//获取已选课程总学分
voidReadFilecourse();//读取已选课程
voidWriteFilecourse();//将已选课程写入文件
friendvoidtuixuan(XSP,charnu[],charna[]);
};
voidXS:
:
Addcourse(charnu[])
{subjectsub;
sub.ReadFile();
p=newCourse;
if(sub.Search(nu)==1)
{if(Search(nu)==0)
{sub.p=sub.head;while(sub.p!
=NULL)
{if(strcmp(sub.p->um,nu)==0)break;sub.p=sub.p->next;
}
strcpy(p->um,sub.p->um);
strcpy(p->ame,sub.p->ame);
strcpy(p->kecheng.cteacher,sub.p->kecheng.cteacher);
p->kecheng.credit=sub.p->kecheng.credit;
p->next=head;
head=p;
cout<<"选课成功!
"<}
elsecout<<"此课