学生信息包括:学号,姓名,性别,年龄,班级,专业等信息。课程信息包括:课程代码,课程名称,课程性质,总学分,学时,显示选课人信息等。

总体模块设计

运行截图

代码

using namespace std;
void menu() //主菜单
{
cout<<endl;
cout<<setw(14)<<’ ‘<<"欢迎使用学生选课系统 "<<endl;
cout<<setw(10)<<’ '<<"* * * * * * * * * * * * * * * * \n";//输出提示性信息
cout<<setw(12)<<’ ‘<<“请选择要进行的操作:\n”;//输出提示性信息
cout<<setw(18)<<’ ‘<<" 1—信息录入 "<<endl;
cout<<setw(18)<<’ ‘<<" 2—信息浏览 "<<endl;
cout<<setw(18)<<’ ‘<<" 3—选择课程 "<<endl;
cout<<setw(18)<<’ ‘<<" 4—删除信息 "<<endl;
cout<<setw(18)<<’ ‘<<" 5—修改信息 "<<endl;
cout<<setw(18)<<’ ‘<<" 6—退出程序 "<<endl;
cout<<setw(10)<<’ '<<"
* * * * * * * * * * * * * * * *\n";//输出提示性信息
}
class student //学生类
{
public:
double xuehao; //学号
char name[100]; //姓名
char major[100]; //专业
char coursename[100];//学生所选课程名
void set() //学生信息录入,通过set()函数给学生类赋值
{

student stu; //定义类的对象stu
cout<<endl;
cout<<"请输入学生学号: ";
cin>>stu.xuehao;
cout<<"请输入学生姓名: ";
cin>>stu.name;
cout<<"请输入学生专业: ";
cin>>stu.major;
ofstream out("studentInfo.text",ios::app|ios::binary);//用于studentInfo.text的输出,并且文件以二进制方式操作和在文件尾部添加数据
out.write((char *)(&stu),sizeof(stu));  //对二进制文件(studentInfo.text)进行写操作(起始地址,读取或者写入的字节数)
out.close(); //关闭文件
menu();//返回主菜单

}
void checkstudent() //查询学生信息
{
student stu;//用于临时保存学生信息的变量
cout<<“学生学号\t学生姓名\t所学专业”<<endl;
ifstream is(“studentInfo.text”,ios::binary); //创建输入流对象is
while(!is.peek())//判断文件
{
is.read((char *)(& stu),sizeof(stu)); //对二进制文件(学生.text)进行读操作
cout<<""<<stu.xuehao<<"\t\t"<<stu.name<<"\t\t"<<stu.major<<"\t\t"<<endl;
}
is.close();
menu();
}

void cancleStudent() //删除学生信息
{
string xueHaoNum,line,xuehao; //定义变量
ifstream fin(“studentInfo.text.text”); //建立ifstream的对象fin与文件"studentInfo.text.text"相关联
fstream outfile(“studentInfo.text.text”,ios::trunc|ios::out); //用于selectCourseResult.text文件的输出,打开一个文件进行写操作和使同名文件被删除
cout<<endl;
cout<<“请输入您要删除学生的学号: “;
cin>>xueHaoNum;
while(!fin.eof()) //文件不结束,执行循环体
{
getline(fin,line);
istringstream stream(line); //串流输入
xueHaoNum = line.substr(0,line.find(””,0));//复制子字符串
if(xuehao != xueHaoNum)
outfile<<line<<endl;//向outfile输出流中输出line
}
outfile.close();
fin.close();
fstream f(“studentInfo.text”,ios::trunc|ios::out); //打开一个文件进行写操作和使同名文件被删除
ifstream outf(“studentInfo.text”); //用于selectCourseResult.text文件的输入
f<<outf.rdbuf();//输出整个文件的内容
outf.close();
f.close();
cout<<endl;
menu();
}

void changestudent() //修改学生信息
{
student stu;
int mark;
cout<<endl;
cout<<"请输入需要修改信息的学生学号 ";
double xuehao;
cin>>xuehao;
ifstream is(“studentInfo.text”,ios::binary); //用于选课.text文件的输入
for(int i=0;!is.eof();i++)
{
is.seekg(48*i); //对输入文件定位,第一个参数是偏移量,第二个参数是基地址
is.read((char )(&stu),sizeof(stu)); //对二进制文件(学生.text)进行读操作
if(stu.xuehao==xuehao)
{
cout<<"请输入要修改的学生姓名 ";
cin>>stu.name;
cout<<"请输入要修改的学生专业 ";
cin>>stu.major;
cout<<“修改完毕!”<<endl<<endl;
mark=48
i;
menu();
break;
}
}
is.close();
if(stu.xuehao!=xuehao)
{
cout<<“没有这个学生!”<<endl<<endl;
menu();
}
else
{
ofstream os(“studentInfo.text”,ios::in|ios::binary); //用于选课.text的输出,并且文件进行读操作和二进制方式打开
os.seekp(mark);//移动文件指针的标记
os.write((char *)(&stu),sizeof(stu)); //对二进制文件(学生.text)进行写操作
os.close();
}
}
};

class course //课程类
{
public:
double coursenum; //课程编码
char coursename[50];
char coursetapy[50];
double xuefen;
double xueshi;
char courseteacher[50];
void set() //课程信息录入, 通过set()函数给课程类赋值
{
course cus; //作为临时的课程信息保存
cout<<"请输入课程编码: ";
cin>>cus.coursenum;
cout<<"请输入课程名称: ";
cin>>cus.coursename;
cout<<"请输入课程类型: ";
cin>>cus.coursetapy;
cout<<"请输入课程学分: ";
cin>>cus.xuefen;
cout<<“请输入课程学时: “;
cin>>cus.xueshi;
cout<<“请输入主讲教师: “;
cin>>cus.courseteacher;
ofstream os(“courses.text”,ios::binary|ios::app);//将课程保存在“courses.txt”文件中
os.write((char )(&cus),sizeof(cus)); //对二进制文件(课程.text)进行写操作
os.close(); //文件(课程.text)的关闭
menu();
}
void checkcourse() //浏览课程信息
{
cout<<endl;
ifstream is(“courses.text”,ios::binary); //用于课程.text文件的输入
cout<<“课程编码 课程名称 课程类型 课程学分 课程学时 主讲教师”<<endl;
course cus;//临时保存课程信息
while(!is.peek()) //检测文件结束
{
is.read((char
)(&cus),sizeof(cus)); //对二进制文件(courses.text)进行读操作
cout<<””<<cus.coursenum<<”\t “<<cus.coursename<<”\t “<<cus.coursetapy<<”\t “<<cus.xuefen<<”\t “<<cus.xueshi<<””<<cus.courseteacher<<endl; //setw()是控制输入的宽度
}
is.close();
menu();
}
void canclecourse() //删除课程信息
{
string coursenum,line,course;
ifstream fin(“courses.text”); //用于courses.text文件的输入
fstream outfile(“courses.text”,ios::trunc|ios::out);// 打开一个文件进行写操作和使同名文件被删除
cout<<endl;
cout<<“请输入您要删除课程的编码: “;
cin>>coursenum;
while(!fin.eof()) //文件不结束,继续循环
{
getline(fin,line);
istringstream stream(line); //串流输入
coursenum = line.substr(0,line.find(””,0));
if(course != coursenum)
outfile<<line<<endl;
}
outfile.close();
fin.close();
fstream f(“courses.text”,ios::trunc|ios::out); //用于courses.text文件的输出,打开一个文件进行写操作和使同名文件被删除
ifstream outf(“courses.text”); //用于学courses.text文件的输入
f<<outf.rdbuf();//输出整个文件的内容
outf.close();
f.close();
cout<<endl;
menu();
}
void changecourse() //修改课程信息
{
course cus;
int mark;//标记
cout<<endl;
cout<<"请输入要修改课程信息的编码 ";
double coursenum;
cin>>coursenum;
ifstream is(“courses.text”,ios::binary); //用于课程.text文件的输入
for(int i=0;!is.eof();i++)
{
is.seekg(28*i); //对输入文件定位,第一个参数是偏移量,第二个参数是基地址
is.read((char )(& cus),sizeof(cus)); //对二进制文件(课程.text)进行读操作
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<<“修改完毕!”<<endl<<endl;
mark=28
i;
menu();
break;
}
}
is.close();
if(cus.coursenum!=coursenum)
{
cout<<“没有这门课程!”<<endl<<endl;
menu();
}
else
{
ofstream os(“courses.text”,ios::in|ios::binary); //用于课程.text的输出,并且文件进行读操作和二进制方式打开
os.seekp(mark);//移动文件指针的标记
os.write((char *)(& cus),sizeof(cus)); //对二进制文件(学生.text)进行写操作
os.close();
}
}
};
void selectCoures()//选课函数
{
student stu;//用于保存将要选课的那名同学的信息
int countCoures=0;//用来统计该学生选了多少门课程
int countStudent=0;//用来统计学生的个数
loop://循环结构
cout<<endl<<"请输入你的学生学号: ";
double m_xuehao,m_coursenum;//利用学号和课程号分别找出哪位同学选了哪门课
cin>>m_xuehao;
ifstream is(“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<<“请输入学号为”<<m_xuehao<<"的学生想要选择的课程编码(1001-9999): ";
cin>>m_coursenum;
ifstream inCourse(“courses.text”,ios::binary); //用于从"courses.text"文件中找出该同学想选择的课程信息
inCourse.seekg(0,ios::beg);从文件头开始,文件指针向前移动
while(!inCourse.eof())//选课核心代码
{
course cus;//用于此同学将要选择的课程信息
inCourse.read((char *)(&cus),sizeof(cus));// (char *)(&cus)起始地址,sizeof(cus)读取的字节数
if(m_coursenum == cus.coursenum)
{//若找到那门课程则选它
countCoures++;
strcpy(stu.coursename,cus.coursename);
ofstream outStu(“selectCourseResult.text”,ios::binary|ios::app);//现将选课的同学信息放入选课结果的文件中
outStu.write((char *)(&stu),sizeof(stu));//写入的字节数
outStu.close();
cout<<“学号为”<<m_xuehao<<“成功选了课程号为”<<m_coursenum<<“的课程!”<<endl;
}
if(countCoures>2)
{
cout<<“同学:你选择的课程已经超过”<<countCoures<<“门了!”<<endl;
break;
}
}
if(countCoures == 0)
{
cout<<“没有这门课程,还要继续选择其他课程吗y/n?”<<endl;
char ch;
cin>>ch;
if((‘y’==ch)||('Y’ch))
goto loob;
else
break;
}
inCourse.close();
}
}
if(countStudent0)
{
cout<<“没有这个学生,是否重新输入y/n?”<<endl;
char ch;
cin>>ch;
if((‘y’==ch)||(‘Y’==ch))
goto loop;
}
is.close();
menu();
}

void scanResult()//查询选课结果
{
student stu;//用于保存将要选课的那名同学的信息
cout<<“学生学号\t学生姓名\t所学专业\t选课名称”<<endl;
ifstream is(“selectCourseResult.text”,ios::binary);
for(int i=0;!is.peek();i++)
{
is.read((char*)(&stu),sizeof(stu));//对二进制文件(selectCourseResult.text)进行读操作
cout<<stu.xuehao<<"\t\t"<<stu.name<<"\t\t"<<stu.major<<"\t\t"<<stu.coursename<<endl;
}
is.close();
menu();
}

void set() //信息录入菜单
{
cout<<endl;
cout<<"﹌﹌﹌﹌﹌﹌1. 录入学生信息﹌﹌﹌﹌﹌﹌"<<endl;
cout<<"﹌﹌﹌﹌﹌﹌2. 录入课程信息﹌﹌﹌﹌﹌﹌"<<endl;
cout<<"﹌﹌﹌﹌﹌﹌3. 返回前面菜单﹌﹌﹌﹌﹌﹌"<<endl<<endl;
student stu;
course cus;
int choose;
cout<<"请输入选项序号: ";
cin>>choose;
switch(choose)
{
case 1: stu.set();break; //录入学生信息函数
case 2: cus.set();break; //录入课程信息函数
case 3: menu();break;
default: cout<<“没有这个选项,请重新输入,谢谢!”<<endl;
set();
break;
}
}

void check() //查询信息
{
cout<<endl;
cout<<"﹌﹌﹌﹌﹌﹌1. 查询学生信息﹌﹌﹌﹌﹌﹌"<<endl;
cout<<"﹌﹌﹌﹌﹌﹌2. 查询课程信息﹌﹌﹌﹌﹌﹌"<<endl;
cout<<"﹌﹌﹌﹌﹌﹌3. 查询学生选课结果信息﹌﹌﹌﹌﹌﹌"<<endl;
cout<<"﹌﹌﹌﹌﹌﹌4. 返回主要菜单﹌﹌﹌﹌﹌﹌"<<endl<<endl;
cout<<"请输入选项序号 ";
int choose;
cin>>choose;
student stu;
course cus;
switch(choose)
{

case 1: stu.checkstudent();break;  //查询学生信息函数
case 2: cus.checkcourse();break; //查询课程信息函数
case 3: scanResult();break;  //查询学生选课结果信息
case 4: menu();break;
}

}

void cancle() //删除信息
{
cout<<endl;
cout<<"﹌﹌﹌﹌﹌﹌1. 删除学生信息﹌﹌﹌﹌﹌﹌"<<endl;
cout<<"﹌﹌﹌﹌﹌﹌2. 删除课程信息﹌﹌﹌﹌﹌﹌"<<endl;
cout<<"﹌﹌﹌﹌﹌﹌3. 返回主要菜单﹌﹌﹌﹌﹌﹌"<<endl<<endl;
cout<<“请输入选项序号 “;
student stu;
course cus;
int choose;
cin>>choose;
switch(choose)
{
case 1: stu.cancleStudent();break; //删除学生信息函数
case 2: cus.canclecourse();break; //删除课程信息函数
case 3: menu();break;
default: cout<<“没有这个选项,请重新输入,谢谢!”<<endl;
break;
}
}
void change() //修改信息
{
cout<<endl;
cout<<”﹌﹌﹌﹌﹌﹌1. 修改学生信息﹌﹌﹌﹌﹌﹌”<<endl;
cout<<"﹌﹌﹌﹌﹌﹌2. 修改课程信息﹌﹌﹌﹌﹌﹌"<<endl;
cout<<"﹌﹌﹌﹌﹌﹌3. 返回主要菜单﹌﹌﹌﹌﹌﹌"<<endl<<endl;
cout<<"请输入选项序号 ";
student stu;
course cus;
int choose;
cin>>choose;
switch(choose)
{
case 1: stu.changestudent();break; //修改学生信息函数
case 2: cus.changecourse();break; //修改课程信息函数
case 3: cout<<endl;menu();break;
default: cout<<“没有这个选项,请重新输入,谢谢!”<<endl;
change();
}
}
int main() //主函数
{
menu();
do
{
cout<<endl<<"请输入所选择的菜单项序号: ";
int choose;
cin>>choose;
switch(choose)
{
case 1: set();break; //信息录入
case 2: check();break; //信息浏览
case 3: selectCoures();break; //选择课程
case 4: cancle();break;//删除信息
case 5: change();break; //修改信息
case 6: exit(1);
}
}while(1);
return 0;
}

C++学生选修课程系统设计相关推荐

  1. 学生选修课程系统设计c语言代码,C语言实现学生选修课程系统设计.pdf

    C语语言言实实现现学学生生选选修修课课程程系系统统设设计计 本文实例为大家分享了C语言学生选修课程系统的具体代码,供大家参 ,具体内容如下 我编程的时间不长,所以这里面肯定有一些错误,或者存在更好的解 ...

  2. C语言课设:学生选修课程系统设计

    代码部分有误请自行修改 学生选修课程系统设计 参考代码1 参考代码2 参考代码3 学生选修课程系统设计 假定有 n 门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机 学时, ...

  3. 有n个学生选修了c语言程序设计这门课程,C语言程序设计报告—学生选修课程系统...

    <C语言程序设计报告-学生选修课程系统>由会员分享,可在线阅读,更多相关<C语言程序设计报告-学生选修课程系统(11页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计学校: ...

  4. 学生选修课程系统C语言课程设计

    学生选修课程系统 1.问题描述 高校中学生信息包括:学号.姓名.性别.年龄.系别.班级.联系方式等信息. 课程信息包括:课程代码.课程名称.课程性质.总学时.学分.开课学期.选修人数等信息.学生可对课 ...

  5. 如何用C语言编写学生选修课程系统?

    假定有 n 门课程,每门课程有:课程编号,课程名称,课程性质(公共课.必 修课.选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信 息,学生可按要求(如总学分不得少于 60)自由选课. 1 ...

  6. l对c语言课程的看法论文,学生选修课程系统C语言课程设计论文.doc

    学生选修课程系统C语言课程设计论文 PAGE PAGE 12 东华理工大学长江学院 课程设计报告 课程设计题目:学生选修课程系统 学生学号: 学生姓名: 专 业: 电子信息工程 指导教师: 黄笑鹃.刘 ...

  7. 学生选修课程系统(C语言/C++实现)

    话不多说,先上代码 #include <stdio.h> #include <string.h> #include<malloc.h> #include <s ...

  8. 10-22 查询S001或S003学生选修课程(MSSQL)

    例如:本题目要求编写SQL语句, 查询学号为'S001'或'S003'的学生选修的课程,输出结果集按课程号升序排序,且不包含重复的课程记录. 提示:请使用UNION语句作答. 表结构: 请在这里写定义 ...

  9. 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的

    <JAVA数据库课程设计学生选课管理系统的>由会员分享,可在线阅读,更多相关<JAVA数据库课程设计学生选课管理系统的(59页珍藏版)>请在人人文库网上搜索. 1.一.课程设计 ...

最新文章

  1. java三种循环的区别_JavaSE三种循环注意点
  2. android调用系统设置
  3. fastdfs 吗 支持windows_主流开源文件存储系统-fastdfs是否支持windows?你可以选择minio...
  4. 数据库:MySQL 团队开发规范,太详细了,建议收藏!
  5. 监督分类空白处也被分类了_监督学习(2)|本质是分类的“逻辑回归”
  6. php oracle 配置,关于php:为Windows 64位配置Oracle OCI8
  7. 汉语语法分析的重点是_语法特定句式 |现代汉语专题研讨(15)
  8. 用Redis实现分布式锁 与 实现任务队列【转载】
  9. 使用sqlplus显示中文为乱码的解决办法
  10. python矢量化运算_Python里面的矩阵与矢量化运算
  11. 彻底去除2345好压的广告方法
  12. 采用KubeSphere的kk,部署安装多节点服务的kubernetes-v1.18.6和kubesphere-v3.0.0的踩坑过程记录,及反思
  13. n维线性空间上的几何:直线与平面的方程
  14. linux如何释放swap空间,释放linux的swap内存
  15. ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  16. 拓嘉启远电商:如何应付拼多多风控
  17. 该网站服务器出错了怎么回事,该网站服务器出错了是什么意思(图文)
  18. 与 TensorFlow 的初次相遇
  19. Solidity 从入门到实战(六)
  20. Centos8安装NodeJs-16

热门文章

  1. mysql seconds_behind_master_[MySQL管理] Seconds_Behind_Master 解析
  2. 【报告分享】2021年Q1李宁品牌直播数据分析报告-知瓜数据(附下载)
  3. 对摩尔定律的理解。摩尔定律当前还是继续有效吗?
  4. 电视剧《雪中悍刀行》剧情
  5. android打开视频噔_抖音按手指喝酒_抖音钢琴曲前奏噔噔噔
  6. Monterey安装教程
  7. CSMA/CD协议(先听再说,边听边说)
  8. 一篇学完:王道考研408数据结构(全)
  9. 六级听力技巧讲座总结
  10. UVA11292 The Dragon of Loowater