课程信息管理系统 课程信息包括:记录编号、课程编号、课程名、学时(讲课学时、实践学时)、学分、开课学期,考核方式(考试/报告)
功能要求:
A、 从课程信息文件中读取已有的课程信息,并实现屏幕显示。
B、 能通过课程编号对已有的课程信息进行修改,要求编号不能修改,其他信息内容都可改,修改的结果保存至课程信息文件。
C、 实现对课程信息的统计(分学期统计课程数量及开课总学分数)。
D、 实现对课程信息的查询显示(查询条件分为课程编号、课程学分、开课学期),对有多条记录的查询结果按照课程开课学期进行排序显示。
E、 新课程信息的添加并保存至课程信息文件。
F、 数据约束关系:学时=讲课学时+时间学时;学分=学时/16。
G、 课程信息的删除,根据课程编号,删除指定课程信息,并将结果写入文件。
本程序主要用到了类以及链表的知识。
后面代码中单链表及其功能的实现额解释在这个文章中
https://blog.csdn.net/xuese_luochen/article/details/104374323
头文件——Class.h
//头文件,用来定义类,并定义其成员函数
#ifndef CLASS_H_
#define CLASS_H_#include
#include
#include
using namespace std;
class Date//类Date有数据成员,是课程的各种数据和一个类指针
{
public:
string name;
string exam_method;
int semester;
double time,number,credit;
Date *Classnext;
};
class Class//类Class有成员函数——类指针(用来临时储存各个数据),和成员函数(用来实现程序的各种功能)
{
public:
Date *ClassHead;
~Class();
//析构函数
Class ();
//构造函数
void class_set ();
//输入课程信息
void show ();
//输出课程信息
void class_keep ();
//将课程信息写入文档
void class_insert(double N,string n,double t,int s,string e);
//将文档中的课程信息插入到链表中
void class_Read();
//从文档中读取课程信息
void class_delete();
//删除课程信息
void class_revise();
//修改课程信息
void class_sort();
void class_find();
//按照一定条件寻找课程
void class_renew();
//更新课程信息,并保持在文档中
void class_census();
//按学期统计课程数量和学分总数
};
Class::Class()//构造函数
{
ClassHead=new Date;
//创建链表的链头
ClassHead->Classnext=NULL;
}Class::~Class()//析构函数
{
Date *p;
while (ClassHead)//将链表清除
{
p=ClassHead;
ClassHead=ClassHead->Classnext;
delete p;
}
ClassHead=NULL;
}void Class::class_set ()//输入课程信息
{
class_sort();
Date *p;
Date *a;
int class_num;
a=ClassHead;
cout << "您要输入几个课程的信息" << endl;
cin >> class_num ;
cout << "请依次输入课程编号,课程名字,课程学时,课程开课学期,课程测试方式" << endl;
for(int k=0;
k> p->number >> p->name >> p->time >> p->semester >> p->exam_method ;
p->credit=p->time/16;
//下面三步实现将新的课程数据存放到链表中
p->Classnext=a->Classnext;
a->Classnext=p;
a=a->Classnext;
}
}void Class::show ()//输出课程信息
{
Date *p;
cout << "课程编号" << '\t' << "课程名字" << '\t' << "课程学时" << '\t' << "课程学分" << '\t' << "课程学期" << '\t' << "课程考核方式" << endl;
for(p=ClassHead->Classnext;
p!=NULL;
p =p->Classnext)//将链表各节点的数据全部输出
{
cout << p->number << '\t' << '\t' << p->name <<'\t' << p->time<<'\t'<< '\t' << p->credit<<'\t' << '\t' << p->semester << '\t' << '\t' << p->exam_method << endl;
}
class_sort();
//排序函数--方便程序排列
}void Class::class_find()//查找课程
{
Date *p;
p=ClassHead;
int m,k,a=1;
//a的作用是①如能查到则只输出一次提示②如不能查到则输出提示语
cout << "通过课程序号进行查询请按1,通过课程学期请按2,通过学分查询请按3,退出请按0" << endl;
cin >> m;
if(m==1)//按课程编号查询
{
cout << "请输入您要查询课程的编号" << endl;
cin >> k;
while (p->Classnext && p->number!=k)
{
p=p->Classnext;
}
if(p->number==k)
{
if(a==1)cout << "课程编号" << '\t' << "课程名字" << '\t' << "课程学时" << '\t' << "课程学分" << '\t' << "课程学期" << '\t' << "课程考核方式" << endl;
cout << p->number << '\t' << '\t' << p->name <<'\t' << p->time<<'\t'<< '\t' << p->credit<<'\t' << '\t' << p->semester << '\t' << '\t' << p->exam_method << endl;
a++;
}
else
{
cout << "未查询到课程" << endl;
}
}
else if(m==2)//按学期查询
{
cout << "请输入您要查询第几学期的课程" << endl;
cin >> k;
while(p!=NULL)
{
if(p->semester==k)
{
if(a==1) cout << "课程编号" << '\t' << "课程名字" << '\t' << "课程学时" << '\t' << "课程学分" << '\t' << "课程学期" << '\t' << "课程考核方式" << endl;
cout << p->number << '\t' << '\t' << p->name <<'\t' << p->time<<'\t'<< '\t' << p->credit<<'\t' << '\t' << p->semester << '\t' << '\t' << p->exam_method << endl;
a++;
}
p=p->Classnext;
}
if(a==1)cout << "未查询到课程" << endl;
}
else if(m==3)//按学分查询
{
cout << "请输入您要查询学分为几的课程" << endl;
cin >> k;
while(p!=NULL)
{
if(p->credit==k)
{
if(a==1) cout << "课程编号" << '\t' << "课程名字" << '\t' << "课程学时" << '\t' << "课程学分" << '\t' << "课程学期" << '\t' << "课程考核方式" << endl;
cout << p->number << '\t' << '\t' << p->name <<'\t' << p->time<<'\t'<< '\t' << p->credit<<'\t' << '\t' << p->semester << '\t' << '\t' << p->exam_method << endl;
a++;
}
p=p->Classnext;
}
if(a==1)cout << "未查询到课程" << endl;
;
}
else cout << "请输入正确的指令" << endl;
}void Class::class_delete()//删除某个课程
{
int k;
Date *p,*a;
p=ClassHead;
a=p;
cout << "请输入您要删除课程的序号" << endl;
cin >> k;
while (p->Classnext && p->number!=k)
{
a=p;
p=p->Classnext;
}
if(p->number==k)
{
a->Classnext=p->Classnext;
delete p;
}
else
{
cout << "未查询到课程" << endl;
}
}void Class::class_sort()//对课程进行排序(按编号大小)
{
string n;
string e;
int s,m=0,j,i;
double t,N,c;
Date *p1,*p2;
p1=ClassHead;
while(p1->Classnext!=NULL)
{
p1=p1->Classnext;
m++;
}
for(i=0;
iClassnext;
p1=p2->Classnext;
for(j=0;
j< m-i-1;
j++)
{
if(p1->number >p2->number)
{
N=p1->number;
n=p1->name;
t=p1->time;
c=p1->credit;
s=p1->semester;
e=p1->exam_method;
p1->number = p2->number;
p1->name = p2->name;
p1->time = p2->time;
p1->credit = p2->credit;
p1->semester = p2->semester;
p1->exam_method = p2->exam_method;
p2->number=N;
p2->name=n;
p2->time=t;
p2->credit=c;
p2->semester=s;
p2->exam_method=e;
}
p1=p1->Classnext;
p2=p2->Classnext;
}
}
}void Class::class_revise()//修改课程数据
{
int k;
cout << "请输入您要修改课程的编号" << endl;
cin >> k;
Date *p;
p=ClassHead;
while(p->Classnext && p->number!=k)
{
p=p->Classnext;
}
if(p->number==k)
{
cout << "请重新输入该课程信息(分别为课程名字,课程学时,课程学期,课程考核方式)" << endl;
cin>> p->name >> p->time >> p->semester >> p->exam_method ;
p->credit=p->time/16;
cout << "修改完成" << endl;
}
else cout<< "对不起,没有查询到课程,请输入已经存在的课程编号" <number=N;
p->name=n;
p->time=t;
p->credit=t/16;
p->semester=s;
p->exam_method=e;
p->Classnext=a->Classnext;
a->Classnext=p;
}void Class::class_census()//按学期来统计课程数目及学分总数
{
double a=0,b=0,k;
Date *p;
p=ClassHead;
cout << "您要查看那个学期的课程统计?" << endl;
cin >> k ;
while(p!=NULL)
{
if(p->semester==k)
{
a++;
//课程数目
b=b+p->credit;
}
p=p->Classnext;
//课程总学分
}
cout << "第" << k << "学期共有" << a << "门课程,总学分为" << b << endl;
}void Class::class_keep ()//保存到文件里面
{
class_sort();
Date *p;
p=ClassHead->Classnext;
ofstream out("class.txt",ios::app);
//打开文件,在文件class.txt的结尾处进行添加数据
if (!out) { cout << "不能打开文件!" << endl;
return;
}
while (p != NULL)
{
out << p->number << '\t' << p->name << '\t' << p->time<< '\t' << p->semester <<'\t' << p->exam_method << '\t' << endl;
p = p->Classnext;
}
out.close();
//关闭文件
}void Class::class_renew ()//将文件覆盖(更新)
{
Date *p;
p=ClassHead->Classnext;
ofstream out("class.txt");
//打开文件,直接覆盖原有数据
if (!out) { cout << "不能打开文件!" << endl;
return;
}
while (p != NULL)
{
out << p->number << '\t' << p->name << '\t' << p->time<< '\t' << p->semester <<'\t' << p->exam_method << '\t' << endl;
p = p->Classnext;
}
out.close();
//关闭文件
}void Class::class_Read()//从文件读入数据
{
int a=0;
Date *p;
p = ClassHead;
ifstream in;
in.open("class.txt");
//打开文件
if (!in) { cout << "没有课程信息,请先录入课程信息!" << endl;
return;
}
string n,e;
int s;
double N,t;
while(!in.eof())
{
in >> N >> n >> t >> s >> e;
if(in.fail()) break;
class_insert(N,n,t,s,e);
}
in.close();
//关闭文件
}int door()
{
string username = "123", password = "123";
string name, temp;
int number = 3;
while (1)
{
cout << "欢迎登陆家里蹲抗大大学教务系统"<< endl;
cout << endl;
cout << "用 户 名:";
cin >> name;
cout << "密码:";
cin >> temp;
if (name != username || temp != password)
{
number--;
if (number >0)
{
cout << "用户名/密码错误!你还有" << number << "次机会" << endl;
}
else
cout << "用户名/密码错误!" << endl, exit(0);
}
else
{
cout << "********************密码正确********************" << endl<
【c++作业|c++课设作业之课程信息管理系统】头文件有个小问题:在输入课程信息时课程名字只有在输入四个字时才会对齐,否则会偏,如果哪位大佬会就顺便教一下吧(手动滑稽)。
文章图片
主文件
//本程序为课程信息管理系统
#include
#include "Class.h"
#include
#include
using namespace std;
int main()
{
door();
int k;
string m;
Class c;
while(1)
{
system("cls");
menu();
cout << "请问您要执行哪一个功能呢,请输入相应数字" << endl;
cin >> k;
switch(k)
{
case 1:
c.class_sort();
c.show();
system("pause");
break;
case 2:
c.class_find();
system("pause");
break;
case 3:
c.class_set();
c.class_keep();
cout << "课程输出完成,现有课程如下" << endl;
c.show();
system("pause");
break;
case 4:
cout <<"现有课程如下:" << endl;
c.show();
c.class_revise();
cout << "更新成功,现有课程如下:" << endl;
c.show();
c.class_renew();
system("pause");
break;
case 5:
cout <<"现有课程如下:" << endl;
c.show();
c.class_delete();
cout << "更新成功,现有课程如下:" << endl;
c.show();
c.class_renew();
system("pause");
break;
case 6:
c.class_Read();
c.show();
system("pause");
break;
case 7:
c.class_census();
system("pause");
break;
case 0:
cout << "感谢您的使用" << endl;
exit(0);
}
}
return 0;
}
推荐阅读
- c++学习|19.1 STL总述、发展史、组成与数据结构谈
- C++|C++ 基础与深度分析 Chapter11 类与面向对象编程(构造函数(缺省、单一、拷贝、移动、赋值))
- C++|很值得学习的Linux C++线程池框架
- C++|初识C++模板(函数、类模板)
- 比赛经验|2022年6月第十三届蓝桥杯软件类国赛(决赛)C组C语言/C++真题及答案 with 感想
- Qt入门|Qt QScrollArea
- leetcode刷题|C++标准模板库方法STL和函数使用说明
- 遇见C++|【C++】STL(string类)
- STL(标准模板库)