选课系统(题目描述和代码和实验报告)

代码题目描述和要求

选课系统(题目描述和代码和实验报告)_第1张图片

课程信息 、查看选课、人数上限、授课教师等);学生课程类(学生类和课程类所派生,描
述学生选课信息:包括学生编号、姓名、课程编号、课程名称、累
计学分等)。其他根据设计自行添加。
2、功能要求:
(1)分角色登录:学生和管理员按照账号密码登录。
(2)管理员模块:
① 维护学生信息,包含信息的增加、删除、修改、查看等。
② 维护课程信息,包含信息的增加、删除、修改、查看等。
③ 实现学生选课信息查询,包含按照课程名称查询、按照学生名字
查询等。
(3)学生模块:
① 可查看备选课程信息,并按照课程编号选课。
② 查看已选课程信息和累计学分。
(4)学生信息、课程信息、学生选课信息分别用文件保存,每个
类一个文件,程序执行时从文件读入。
(5)数据要求:学生不少于30条记录,课程信息不少于10条记录,
选课信息不少于20条记录。实验数据要格式规范且合理。
(6)显示要求:人机交互设计要合理友好,便于使用。

代码

admin.h

#include
#include
#include
using namespace std;
class Admin//管理员类
{
public:
	string num;//管理员账号
	string password;//管理员密码
	bool login(string a,string b)
	{
		if( a == num && b == password )
			return true;
		return false;
	}
}admin;

course.h

#include
#include
using namespace std;
class Course
{
public:
	string coursenum;//课程编号
	string coursename;//课程名
	string teacher;//授课老师
	int score;//学分
	int people;//人数上限
}course;

master.cpp

#include"studentcourse.h"
#include"admin.h"
#include
#include//用于sleep函数,例如sleep(1000)就是停留1秒
#include
#include
#include
using namespace std;
void init();//写入数据
void outit();//读出数据
void login();//登陆
//学生
void studentBegin();//学生开始的界面
void viewcourse();//查看选课
void choose();//选课
//管理员
void adminBegin();//管理员开始的界面
void studentInformation();//*学生信息操作
void addStudentInformation();//增加学生信息
void delStudentInformation();//删除学生信息
void viewStudentInformation();//查看学生信息
void changeStudentInformation();//修改学生信息
void courseInformation();//*课程信息操作
void addCourseInformation();//增加课程信息
void delCourseInformation();//删除课程信息
void viewCourseInformation();//查看课程信息
void changeCourseInformation();//修改课程信息
void findchoose();//*选课查询选择
void coursefind();//课程名查询选课情况
void studentfind();//学生查询选课情况
vector stu;//定义一个学生类的容器,存储学生信息
vector cou;//存储课程
vector sc;//存储选课
int sn;//记录第sn个学生登陆,保证在第sn个学生中改动

void init()//读入数据
{
	//学号 姓名 密码 班级 专业
	ifstream in("student.txt",ios::in);
    while(!in.eof())
    {
		in>>student.studentnum>>student.studentname>>student.password>>student.Class>>student.major;
		stu.push_back(student);//在尾部加数据
    }
    in.close();
	//课程编号 课程名 授课老师 学分 人数
	ifstream in1("course.txt",ios::in);
    while(!in1.eof())
    {
		in1>>course.coursenum>>course.coursename>>course.teacher>>course.score>>course.people;
		cou.push_back(course);
    }
    in1.close();
	//学号  姓名  课程编号  课程名称  学分
	ifstream in2("studentcourse.txt",ios::in);
    while(!in2.eof())
    {
		in2>>studentcourse.studentnum>>studentcourse.studentname>>studentcourse.coursenum>>studentcourse.coursename>>studentcourse.score;
		sc.push_back(studentcourse);
    }
    in2.close();
	ifstream in3("admin.txt",ios::in);//录入管理员账号和密码
	in3>>admin.num>>admin.password;
	in3.close();
}
void outit()//读出数据
{
	int i;
	//学号 姓名 密码 班级 专业
	ofstream out("student.txt",ios::out);
    for( i = 0 ; i < stu.size() ; i++ )
    {
		out<>a;
	cout<>b;
    cout<>n;
	switch(n)
	{
		case 1:viewcourse();break;
		case 2:choose();break;
		case 0:cout<<"谢谢您的使用";outit();exit(0);
		default:studentBegin();break;
	}
}
void viewcourse()//查看选课
{
	system("cls");//清屏,刷新页面
	bool can = true;//设置一个旗帜
	int i,s=0;//s记录课程的分数
	cout<<"课程编号\t\t课程名\t\t    学生编号\t\t      姓名              学分"<>n;

	for( i = 0 ; i < sc.size() ; i++ )
	{
		if( n == sc[i].coursenum && sc[i].studentnum == stu[sn].studentnum )//查看课程号和已选的课程号是否相同。看同一个学号是否对应同一个课程号
		{
			cout<<"您已选该课程"<>n;
	switch(n)
	{
		case 1:studentInformation();break;
		case 2:courseInformation();break;
		case 3:findchoose();break;
		case 0:cout<<"欢迎使用";outit();exit(0);
		default:adminBegin();break;
	}
}
void studentInformation()//学生信息操作
{
	system("cls");
	cout<<"\t\t    管理学生"<>n;
	switch(n)
	{
		case 1:addStudentInformation();break;
		case 2:delStudentInformation();break;
		case 3:viewStudentInformation();break;
		case 4:changeStudentInformation();break;
		case 0:adminBegin();break;
		default:studentInformation();break;
	}
}
void addStudentInformation()//增加学生信息
{
	system("cls");
	cout<<"\t\t  管理员界面"<>a;
	for( i = 0 ; i < stu.size() ; i++ )
	{
		if( a == stu[i].studentnum )
		{
			cout<<"学号已存在"<>b;
	cout<<"请输入学生密码:";cin>>c;
	cout<<"请输入学生班级:";cin>>d;
	cout<<"请输入学生专业:";cin>>e;
	student.studentnum = a;
	student.studentname = b;
	student.password = c;
	student.Class = d;
	student.major = e;
	stu.push_back(student);
	cout<<"增加成功"<>a;
	for( i = 0 ; i < stu.size() ; i++ )
	{
		if(stu[i].studentnum == a)
		{
			stu.erase(stu.begin()+i);//运用容器的删除函数,删掉容器现在这个元素
			cout<<"删除成功"<>a;
	for( i = 0 ; i < stu.size() ; i++ )
	{
		if(stu[i].studentnum == a)
		{
			break;
		}
	}
	if( i == stu.size())
	{
		cout<<"没有这个人,查看学号是否输入错误"<>a;
		for( j = 0 ; j < stu.size() ; j++ )
		{
			if( a == stu[j].studentnum && i != j)
			{
				cout<<"学号已存在"<>b;
		cout<<"请输入学生密码:";cin>>c;
		cout<<"请输入学生班级:";cin>>d;
		cout<<"请输入学生专业:";cin>>e;
		stu[i].studentnum = a;
		stu[i].studentname = b;
		stu[i].password = c;
		stu[i].Class = d;
		stu[i].major = e;
		cout<<"修改成功"<>n;
	switch(n)
	{
		case 1:addCourseInformation();break;
		case 2:delCourseInformation();break;
		case 3:viewCourseInformation();break;
		case 4:changeCourseInformation();break;
		case 0:adminBegin();break;
		default:courseInformation();break;
	}
}
//cout<<"课程编号\t\t课程名\t\t    授课老师\t\t      学分              人数"<>a;
	for( i = 0 ; i < cou.size() ; i++ )
	{
		if( a == cou[i].coursenum )
		{
			cout<<"课程编号已存在"<>b;
	cout<<"请输入授课老师:";cin>>c;
	cout<<"请输入学分:";cin>>d;
	e = 0;
	course.coursenum = a;
	course.coursename = b;
	course.teacher = c;
	course.score = d;
	course.people = e;
	cou.push_back(course);
	cout<<"增加成功"<>a;
	for( i = 0 ; i < cou.size() ; i++ )
	{
		if(cou[i].coursenum == a)
		{
			cou.erase(cou.begin()+i);
			cout<<"删除成功"<>a;
	for( i = 0 ; i < cou.size() ; i++ )
	{
		if(cou[i].coursenum == a)
		{
			break;
		}
	}
	if( i == cou.size())
	{
		cout<<"无此课程"<>a;
		for( j = 0 ; j < cou.size() ; j++ )
		{
			if( a == cou[j].coursenum && i != j)
			{
				cout<<"课程编号已存在"<>b;
		cout<<"请输入授课老师:";cin>>c;
		cout<<"请输入学分:";cin>>d;
		cout<<"请输入人数:";cin>>e;
		cou[i].coursenum = a;
		cou[i].coursename = b;
		cou[i].teacher = c;
		cou[i].score = d;
		cou[i].people = e;
		cout<<"修改成功"<>n;
	switch(n)
	{
		case 1:coursefind();break;
		case 2:studentfind();break;
		case 0:adminBegin();break;
		default:findchoose();break;
	}
}
void coursefind()//课程名查询
{
	system("cls");
	cout<<"\t\t  管理员界面"<>a;
	cout<<"课程编号\t\t课程名\t\t    学生编号\t\t      姓名              学分"<>a;
	cout<<"课程编号\t\t课程名\t\t    学生编号\t\t      姓名              学分"<

student.h

#include
#include
using namespace std;
class Student
{
public:
	string studentnum;;//学号
	string studentname;//姓名
	string password;//密码
	int Class;//班级
	string major;//专业
}student;

studentcourse.h

#include"course.h"
#include"student.h"
#include
#include
using namespace std;
class StudentCourse:public Student,public Course
{
}studentcourse;
//学号  姓名  课程编号  课程名称  学分

注意

自己先建一个文件输入管理员信息。然后再录入学生信息。

实验报告

课程设计报告

课程名称 面向对象程序课程设计
项目名称 学生选课管理系统
姓 名 XX
班 级
学 号
指导教师 XX老师
设计时间 2019年6月24日 至 2019年6月28日

计算机工程学院

目 录

一、 项目要求 1
二、 项目开发环境 2
三、 项目分析 2
四、 设计与实现 3
五、 总结 12
六、 参考文献 13

一、 项目要求

  1. 设计三个类:
    学生类
    课程类
    学生选课类。

  2. 要实现学生端和管理员端权限;
    A.学生端实现以下功能:
    a.可查看备选课程信息
    b.按照课程编号选课。
    c.查看已选课程信息。
    d.查看累计学分情况
    B.管理员端实现以下功能:
    a.可以完成:
    增加学生信息;
    删除学生信息;
    修改学生信息;
    查看学生信息。
    b.可以完成:
    课程信息的增加;
    课程信息的删除;
    课程信息的修改;
    课程信息的查看。
    c.实现按照课程名称查询学生选课情况、按照学生名字查询学生选课情况。

  3. 学生信息、课程信息、学生选课信息分别用文件保存,每个类一个文件,程序执行时从文件读入,登录时可从文件读出。

  4. 学生文本文件不少于30条记录;
    课程信息文本文件不少于10条记录;
    选课信息文本文件不少于20条记录。
    实验数据要格式规范且合理。

  5. 界面设计合理友好。

  6. 实现管理员和学生用不同的账号密码登录
    二、 项目开发环境

  7. 硬件环境: CPU的型号及频率:Intel®Core™ i7-8550U CPU @ 1.80GHz 1.99GHz
    所需内存大小:145KB;所在磁盘:C盘。

  8. 软件环境:Windows 10/ VC++6.0 / CodeBlock 17.12 /X-mind/raptor
    三、 项目分析

  9. 先写三大类

  10. 主要写学生端和管理端对应的功能函数

  11. 修理界面,使人机交互更好。

  12. 录入三个类的数据。在登录时,从文件读出。
    四、 设计与实现

  13. 设计思路说明

  1. 三大类的存储:运用容器。其实运用容器相当于运用数组。运用下标实现查找删除等。
  2. 写入读出数据:用输入输出流对象与文本文件建立联系
  3. 管理员和学生的登录:预先存定一个管理员账号,再在管理员中写一个旗帜函数,判断输入账户密码是否正确。这样也可以确保文本文件中没有学生课程等信息时,管理员首先登录可以增加学生课程等信息。
  4. 学生端功能和管理员端功能大部分取决于对下标的准确运用。查找,删除等。
  1. 功能模块图
  1. 查看选课:学生登录,你可以看到你所选的课程编号课程名字和对应的学分,还有你的编号和姓名。
  2. 选课:你可以看到课程编号,课程名字,课程授课的老师,课程对应的学分以及课程剩余容量。还可以看到你还需要修多少个学分。
  3. 管理员管理学生:从学生的学号姓名班级专业和密码进行增加。删除通过学号删除。
    学生的学号姓名班级专业和密码进行修改。查看可以看到所有学生类文本文件中的数据。
  4. 管理员管理课程:从课程的的编号名字授课老师和学分进行增加,通过课程号进行删除,从课程的的编号名字授课老师和学分进行修改,查看可以看到课程类文本文件中所有的数据。
  5. 管理员查看选课:按照课程名字和学生名字查看选课情况都可以看到课程的编号,课程名和学分,选该课程的学生编号,学生名。
  1. 类设计
    根据对本项目的分析,设计的数据库包含4个表,admin表是管理员信息表,用于存储管理员的账号和密码;course表是课程信息表,用于存储课程的编号,名字等信息;student表是学生信息表,用于存储学生的学号和姓名等信息;studentcourse表是选课信息表,用于存储学生选课情况;
    其中studentcourse类由student和course类派生得到;
    admin表由成员变量 num和password还有成员函数login()函数组成;
    其他类均由成员变量组成,如下表。
    表1.admin表
    字段名称 类型 说明
    num string 管理员账号
    password string 管理员密码

表2.course表
字段名称 类型 说明
coursenum string 管理员账号
coursename string 管理员密码
teacher string 授课老师
score int 该课的学分
people int 选该课的人数

表3.student表
字段名称 类型 说明
studentnum string 学生账号
studentname string 学生姓名
password string 密码
major int 专业
Class string
表4.studentcourse表
字段名称 类型 说明
coursenum string 课程编号
coursename string 课程名
studentnum string 学号
studentname string 姓名
score int 学分

  1. 详细设计
    1) 管理员修改学生信息功能的详细设计
    (1) 流程图:

(2) 流程图说明: 登录系统后,根据提示按管理学生信息,修改学生信息。
2) 通过学生名字查看选课状态功能的详细设计

(1) 流程图:

(2)流程图说明:程序开始后,先选择管理员登录,然后选择查看选课,最后根据提示输入学生名字,最后看到选课信息。
5. 实现
1) 管理员修改学生信息功能的实现
(1) 运行效果图:

(2) 运行效果图说明:首先登录管理员界面,然后根据提示选择1进行学生系统管理.然后根据提示点4进行修改学生信息。输入要修改的学号。再输入修改后的学号。修改成功。
(3) 代码及注释:

void changeStudentInformation()//修改学生信息
{
	system("cls");//清屏
	cout<<"\t\t  管理员界面"<>a;
	for( i = 0 ; i < stu.size() ; i++ )//遍历学生信息
	{
		if(stu[i].studentnum == a)
		{
			break;
		}
	}
	if( i == stu.size())
	{
		cout<<"没有这个人,查看学号是否输入错误"<>a;
		for( j = 0 ; j < stu.size() ; j++ )
		{
			if( a == stu[j].studentnum && i != j)
			{
				cout<<"学号已存在"<>b;
		cout<<"请输入学生密码:";cin>>c;
		cout<<"请输入学生班级:";cin>>d;
		cout<<"请输入学生专业:";cin>>e;
		stu[i].studentnum = a;
		stu[i].studentname = b;
		stu[i].password = c;
		stu[i].Class = d;
		stu[i].major = e;
		cout<<"修改成功"<

2) 通过学生名字查看选课状态功能的实现
(1) 运行效果图:

(2) 运行效果图说明:程序运行后,按2执行按名字查看选课状态的功能,根据程序的提示信息,录入姓名,就可以看到该学生所有的选课状态。
(3) 代码及注释:

void findchoose()//选课查询选择
{
	system("cls");
	cout<<"\t\t   管理选课"<>n;
	switch(n)
	{
		case 1:coursefind();break;
		case 2:studentfind();break;
		case 0:adminBegin();break;
		default:findchoose();break;
	}
}
void studentfind()//学生查询
{
	system("cls");
	cout<<"\t\t  管理员界面"<>a;
	cout<<"课程编号\t\t课程名\t\t    学生编号\t\t      姓名              学分"<

五、 总结
(586字)这次课程设计我将从以下几个方面论述带给我的影响:

  1. 心理上:最初的时候感觉这个系统挺简单的。只用写几个类,再每个类写几个函数。前三天我就写了很多很多行代码,感觉一定能行,还抽出空去背了马原。从最初的跃跃欲试,到后来的光芒暗淡,到后来发现自己的代码完全运行不起来。一直在问自己当初为什么要选择这个专业,真的是因为热爱,还是随波逐流。这其中经历了太多。
  2. 生活上:虽然经历很多很多的磨难,但当验收的那一刻,我是喜悦的。无论面对什么事,马克思告诉我,量变引起质变。只要你愿意去做。所有的一切都会成真。还有就是验收的前一天晚上,我们寝室熬了一个通宵做课程设计,让我感觉很幸福,我们都在努力,从日出到日落再到日出,让我感受到了精神上的友谊。真是收获满满,我永远也不会忘记这些难得的岁月。
  3. 总体学习上:这次课程设计真的是知识也收获满满。我发现自己的代码不能很好的运行后,我看了很多网上很多关于实现功能的函数。一点一点了解它们,再把它们写到自己的程序中。之前我的代码是先用结构体和类结合写,用数组实现。可是不行。于是又花了一点时间学习容器,勉勉强强用上。还是挺开心的。还有就是,一开始写程序的时候,是大手大脚的写,自己写到哪都不知道。后来认真仔细重新阅读了一遍指导书,把功能集中,一小部分一小部分,一个功能一个功能的写。每个功能都得以实现。功能实现后还要看是否是最简易的方法实现的。未来的路还很长,无论遇到什么大风大浪我都决定前行。
    六、 参考文献

[1] 程序设计基础(C语言)/高克宁/清华大学出版社/2018年1月

[2] C++面向对象程序设计教程习题解答与上机指导/陈维兴,林小荼,陈昕/清华大学出版社/2018年10月

[3] C++面向对象程序设计教程/陈维兴,林小荼,陈昕/清华大学出版社/2018年10月
图请自行脑补吧

你可能感兴趣的:(实战项目)