学生选课系统C++.docx
《学生选课系统C++.docx》由会员分享,可在线阅读,更多相关《学生选课系统C++.docx(20页珍藏版)》请在冰豆网上搜索。
学生选课系统C++
一、需求分析
选课在大学生活中是必不可少的,为了能让学生们更加便利的查看并选择各种课程,自然就需要一个网络结构,建立一个选课系统,这样可以方便管理学生和课程等内容。
二、程序的主要功能
1、添加功能:
添加课程以及学生的各类信息保存到一个文件中。
2、删除功能:
能够对一个学生或课程的信息按照编号进行删除。
3、浏览功能:
可以查看学生信息课程信息以及学生的选课信息。
4、选课功能:
学生可以通过输入自己的学号进入选择界面,选择各种不同的课程。
5、修改功能:
用于修改错误的学生信息或者课程信息。
三、程序运行平台
Windows8.1操作系统
VC++6.0
四、系统总框架图
系统总框架图
五、程序类的说明
∙student类的声明
classstudent
{
public:
doublexuehao;
charname[100];
charmajor[100];
charcoursename[100];
∙course类的声明
classcourse
{
public:
doublecoursenum;
charcoursename[50];
charcoursetapy[50];
doublexuefen;
doublexueshi;
charcourseteacher[50];
六、模块分析
1.信息录入模块
按照提示输入所需数字,进入添加界面后添加课程以及学生的各类信息,最终保存到一个文件中,用以之后读取。
2.信息浏览模块
可以用来查看学生信息和课程信息以及学生的选课信息。
3.修改信息模块
用于修改错误的学生信息或者课程信息。
4.删除信息模块
能够对一个学生或课程的信息按照编号进行删除。
5.选择课程模块
学生可以通过输入自己的学号进入选择界面,选择各种不同的课程。
七、比较有特色的函数
voidselectCoures()//选课函数
{
studentstu;//用于保存将要选课的那名同学的信息
intcountCoures=0;//用来统计该学生选了多少门课程
intcountStudent=0;//用来统计学生的个数
loop:
cout<";
doublem_xuehao,m_coursenum;//利用学号和课程号分别找出哪位同学选了哪门课
cin>>m_xuehao;
ifstreamis("studentInfo.text",ios:
:
binary);
is.seekg(0,ios:
:
beg);
while(!
is.peek())
{
is.read((char*)(&stu),sizeof(stu));//从“studentInfo.text”文件中一次读取学生的信息
if(m_xuehao==stu.xuehao)
{
loob:
countStudent++;
cout<<"请输入学号为"<";
cin>>m_coursenum;
ifstreaminCourse("courses.text",ios:
:
binary);//用于从"courses.text"文件中找出该同学想选择的课程信息
inCourse.seekg(0,ios:
:
beg);
while(!
inCourse.eof())
{//选课的核心代码
coursecus;//用于此同学将要选择的课程信息
inCourse.read((char*)(&cus),sizeof(cus));
if(m_coursenum==cus.coursenum)
{//若找到那门课程则选它
countCoures++;
strcpy(stu.coursename,cus.coursename);
ofstreamoutStu("selectCourseResult.text",ios:
:
binary|ios:
:
app);//现将选课的同学信息放入选课结果的文件中
outStu.write((char*)(&stu),sizeof(stu));
outStu.close();
cout<<"学号为"<"<}
if(countCoures>2)
{
cout<<"同学:
你选择的课程已经超过"<"<break;
}
}
if(countCoures==0)
{
cout<<"没有这门课程,还要继续选择其他课程吗y/n?
"<charch;
cin>>ch;
if(('y'==ch)||('Y'==ch))
gotoloob;
else
break;
}
inCourse.close();
}
}
if(countStudent==0)
{
cout<<"没有这个学生,是否重新输入y/n?
"<charch;
cin>>ch;
if(('y'==ch)||('Y'==ch))
gotoloop;
}
is.close();
menu();
}
八、存在的不足与对策
由于设计者水平有限及时间等方面的原因,该系统的功能比较简单,只能输入较少的课程以及学生信息。
些许不足请老师多多谅解。
今后会学习更多的编程技巧,不断的提高程序设计水平。
九、程序源代码
#include
#include
#include
#include
#include
#include
usingnamespacestd;
voidmenu()//主菜单
{
cout<cout<<"学生选课系统"<cout<<"1.信息录入"<cout<<"2.信息浏览"<cout<<"3.选择课程"<cout<<"4.删除信息"<cout<<"5.修改信息"<cout<<"6.退出程序"<}
classstudent
{
public:
doublexuehao;
charname[100];
charmajor[100];
charcoursename[100];
voidset()//学生信息录入
{
studentstu;
cout<cout<<"请输入学生学号:
";
cin>>stu.xuehao;
cout<<"请输入学生姓名:
";
cin>>stu.name;
cout<<"请输入学生专业:
";
cin>>stu.major;
ofstreamout("studentInfo.text",ios:
:
app|ios:
:
binary);
out.write((char*)(&stu),sizeof(stu));
out.close();
menu();
}
voidcheckstudent()//查询学生信息
{
studentstu;
cout<<"学生学号\t学生姓名\t所学专业"<ifstreamis("studentInfo.text",ios:
:
binary);
while(!
is.peek())
{
is.read((char*)(&stu),sizeof(stu));
cout<<""<}
is.close();
menu();
}
voidcancleStudent()//删除学生信息
{
stringxueHaoNum,line,xuehao;
ifstreamfin("studentInfo.text.text");
fstreamoutfile("studentInfo.text.text",ios:
:
trunc|ios:
:
out);//打开一个文件进行写操作和使同名文件被删除
cout<cout<<"请输入您要删除学生的学号:
";
cin>>xueHaoNum;
while(!
fin.eof())
{
getline(fin,line);
istringstreamstream(line);//串流输入
xueHaoNum=line.substr(0,line.find("",0));
if(xuehao!
=xueHaoNum)
outfile<}
outfile.close();
fin.close();
fstreamf("studentInfo.text",ios:
:
trunc|ios:
:
out);//打开一个文件进行写操作和使同名文件被删除
ifstreamoutf("studentInfo.text");
f<outf.close();
f.close();
cout<menu();
}
voidchangestudent()//修改学生信息
{
studentstu;
intmark;
cout<cout<<"请输入需要修改信息的学生学号";
doublexuehao;
cin>>xuehao;
ifstreamis("studentInfo.text",ios:
:
binary);
for(inti=0;!
is.eof();i++)
{
is.seekg(48*i);//对输入文件定位,第一个参数是偏移量,第二个参数是基地址
is.read((char*)(&stu),sizeof(stu));
if(stu.xuehao==xuehao)
{
cout<<"请输入要修改的学生姓名";
cin>>stu.name;
cout<<"请输入要修改的学生专业";
cin>>stu.major;
cout<<"修改完毕!
"<mark=48*i;
menu();
break;
}
}
is.close();
if(stu.xuehao!
=xuehao)
{
cout<<"没有这个学生!
"<menu();
}
else
{
ofstreamos("studentInfo.text",ios:
:
in|ios:
:
binary);
os.seekp(mark);
os.write((char*)(&stu),sizeof(stu));
os.close();
}
}
};
classcourse//课程类
{
public:
doublecoursenum;
charcoursename[50];
charcoursetapy[50];
doublexuefen;
doublexueshi;
charcourseteacher[50];
voidset()//课程信息录入
{
coursecus;
cout<<"请输入课程编码:
";
cin>>cus.coursenum;
cout<<"请输入课程名称:
";
cin>>cus.coursename;
cout<<"请输入课程类型:
";
cin>>cus.coursetapy;
cout<<"请输入课程学分:
";
cin>>cus.xuefen;
cout<<"请输入课程学时:
";
cin>>cus.xueshi;
cout<<"请输入主讲教师:
";
cin>>cus.courseteacher;
ofstreamos("courses.text",ios:
:
binary|ios:
:
app);
os.write((char*)(&cus),sizeof(cus));
os.close();
menu();
}
voidcheckcourse()//浏览课程信息
{
cout<ifstreamis("courses.text",ios:
:
binary);
cout<<"课程编码课程名称课程类型课程学分课程学时主讲教师"<coursecus;//临时保存课程信息
while(!
is.peek())//检测文件结束
{
is.read((char*)(&cus),sizeof(cus));
cout<<""<}
is.close();
menu();
}
voidcanclecourse()//删除课程信息
{
stringcoursenum,line,course;
ifstreamfin("courses.text");
fstreamoutfile("courses.text",ios:
:
trunc|ios:
:
out);//打开一个文件进行写操作和使同名文件被删除
cout<cout<<"请输入您要删除课程的编码:
";
cin>>coursenum;
while(!
fin.eof())
{
getline(fin,line);
istringstreamstream(line);//串流输入
coursenum=line.substr(0,line.find("",0));
if(course!
=coursenum)
outfile<}
outfile.close();
fin.close();
fstreamf("courses.text",ios:
:
trunc|ios:
:
out);//打开一个文件进行写操作和使同名文件被删除
ifstreamoutf("courses.text");
f<outf.close();
f.close();
cout<menu();
}
voidchangecourse()//修改课程信息
{
coursecus;
intmark;
cout<cout<<"请输入要修改课程信息的编码";
doublecoursenum;
cin>>coursenum;
ifstreamis("courses.text",ios:
:
binary);
for(inti=0;!
is.eof();i++)
{
is.seekg(28*i);//对输入文件定位,第一个参数是偏移量,第二个参数是基地址
is.read((char*)(&cus),sizeof(cus));
if(cus.coursenum==coursenum)
{
cout<<"请输入要修改的课程名称";
cin>>cus.coursename;
cout<<"请输入要修改的课程类型";
cin>>cus.coursetapy;
cout<<"请输入要修改的课程学分";
cin>>cus.xuefen;
cout<<"请输入要修改的课程学时";
cin>>cus.xueshi;
cout<<"请输入要修改的主讲教师";
cin>>cus.courseteacher;
cout<<"修改完毕!
"<mark=28*i;
menu();
break;
}
}
is.close();
if(cus.coursenum!
=coursenum)
{
cout<<"没有这门课程!
"<menu();
}
else
{
ofstreamos("courses.text",ios:
:
in|ios:
:
binary);
os.seekp(mark);
os.write((char*)(&cus),sizeof(cus));
os.close();
}
}
};
voidselectCoures()//选课函数
{
studentstu;
intcountCoures=0;
intcountStudent=0;
loop:
cout<";
doublem_xuehao,m_coursenum;//利用学号和课程号分别找出哪位同学选了哪门课
cin>>m_xuehao;
ifstreamis("studentInfo.text",ios:
:
binary);
is.seekg(0,ios:
:
beg);
while(!
is.peek())
{
is.read((char*)(&stu),sizeof(stu));//从“studentInfo.text”文件中一次读取学生的信息
if(m_xuehao==stu.xuehao)
{
loob:
countStudent++;
cout<<"请输入学号为"<";
cin>>m_coursenum;
ifstreaminCourse("courses.text",ios:
:
binary);//用于从"courses.text"文件中找出该同学想选择的课程信息
inCourse.seekg(0,ios:
:
beg);
while(!
inCourse.eof())//选课核心代码
{
coursecus;//用于此同学将要选择的课程信息
inCourse.read((char*)(&cus),sizeof(cus));
if(m_coursenum==cus.coursenum)
{
countCoures++;
strcpy(stu.coursename,cus.coursename);
ofstreamoutStu("selectCourseResult.text",ios:
:
binary|ios:
:
app);//现将选课的同学信息放入选课结果的文件中
outStu.write((char*)(&stu),sizeof(stu));
outStu.close();
cout<<"学号为"<"<}
if(countCoures>2)
{
cout<<"同学:
你选择的课程已经超过"<"<break;
}
}
if(countCoures==0)
{
cout<<"没有这门课程,还要继续选择其他课程吗y/n?
"<charch;
cin>>ch;
if(('y'==ch)||('Y'==ch))
gotoloob;
else
break;
}
inCourse.close();
}
}
if(countStudent==0)
{
cout<<"没有这个学生,是否重新输入y/n?
"<charch;
cin>>ch;
if(('y'==ch)||('Y'==ch))
gotoloop;
}
is.close();
menu();
}
voidscanResult()//查询选课结果
{
studentstu;//用于保存将要选课的那名同学的信息
cout<<"学生学号\t学生姓名\t所学专业\t选课名称"<ifstreamis("selectCourseResult.text",ios:
:
binary);
for(inti=0;!
is.peek();i++)
{
is.read((char*)(&stu),sizeof(stu));
cout<}
is.close();
menu();
}
voidset()//信息录入菜单
{
cout<cout<<"﹌﹌﹌﹌﹌﹌1.录入学生信息﹌﹌﹌﹌﹌﹌"<cout<<"﹌﹌﹌﹌﹌﹌2.录入课程信息﹌﹌﹌﹌﹌﹌"<cout<<"﹌﹌﹌﹌﹌﹌3.返回前面菜单﹌﹌﹌﹌﹌﹌"<studentstu;
coursecus;
intchoose;
cout<<"请输入选项序号:
";
cin>>choose;
switch(choose)
{
case1:
stu.set();break;
case2:
cus.set();break;
case3:
menu();break;
default:
cout<<"没有这个选项,请重新输入,谢谢!
"<set();
break;
}
}
voidcheck()//查询信息
{
cout<cout<<"﹌﹌﹌﹌﹌﹌1.查询学生信息﹌﹌﹌﹌﹌﹌"<cout<<"﹌﹌﹌﹌﹌﹌2.查询课程信息﹌﹌﹌﹌﹌﹌"<cout<<"﹌﹌﹌﹌﹌﹌3.查询学生选课结果信息﹌﹌﹌﹌﹌﹌"<cout<<"﹌﹌﹌﹌﹌﹌4.返回主要菜单﹌﹌﹌﹌﹌﹌"<cout<<"请输入选项序号";
intchoose;
cin>>choose;
studentstu;
coursecus;
switch(choose)
{
case1:
stu.checkstudent();break;
case2:
cus.checkcourse();break;
case3:
scanResult();break;
case4:
menu();break;
}
}
voidcancle()//删除信息
{
cout<cout<<"﹌﹌﹌﹌﹌﹌1.删除学生信息﹌﹌﹌﹌﹌﹌"<cout<<"﹌﹌﹌﹌﹌﹌2.删除课程信息﹌﹌﹌﹌﹌﹌"<cout<<"﹌﹌﹌﹌﹌﹌3.返回主要菜单﹌﹌﹌﹌﹌﹌"<cout<<"请输入选项序号";
stu