课程信息管理系统

课程信息包括:记录编号、课程编号、课程名、学时(讲课学时、实践学时)、学分、开课学期,考核方式(考试/报告)
功能要求:
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 <iostream>
#include <string>
#include <fstream>
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<class_num;k++){p= new Date;cin >> 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;i<m-i;i++){p2=ClassHead->Classnext;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<< "对不起,没有查询到课程,请输入已经存在的课程编号" <<endl;
}void Class::class_insert(double N,string n,double t,int s,string e)            //将文件中的数课程据插入到链表中
{Date *a;Date *p;a=ClassHead;p=new Date;p->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;}elsecout << "用户名/密码错误!" << endl, exit(0);}else{cout << "********************密码正确********************" << endl<<endl;return 1;}}}void menu ()
{cout << "                    ----------------------------------------" <<endl;cout << "                    |                                     | " <<endl;cout << "                    |     欢迎使用本课程信息管理系统      | " <<endl;cout << "                    |     如需查看已有课程请按  1         | " <<endl;cout << "                    |     如需查找课程请按      2         | " <<endl;cout << "                    |     如需添加新课程请按    3         | " <<endl;cout << "                    |     如需修改课程信息请按  4         | " <<endl;cout << "                    |     如需删除课程请按      5         | " <<endl;cout << "                    |     如需导入课程请按      6           | " <<endl;cout << "                    |     如需统计学期课程请按  7         | " <<endl; cout << "                    |     如需退出系统请按      0         | " <<endl;cout << "                    |                                     | " <<endl; cout << "                    ----------------------------------------" <<endl;
}#endif;

头文件有个小问题:在输入课程信息时课程名字只有在输入四个字时才会对齐,否则会偏,如果哪位大佬会就顺便教一下吧(手动滑稽)。

主文件

//本程序为课程信息管理系统
#include <iostream>
#include "Class.h"
#include<cstdlib>
#include <String>
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++课设作业之课程信息管理系统相关推荐

  1. c++课设:高校人员信息管理系统 开发一个简易的高校人员信息管理系统,主要针对高校人员的基本信息进行管理。采用对象链表或对象数组存放各个对象,实现新增、修改、删除、查询以及统计等功能。

    通过本次课程设计,深入理解类和对象.继承和派生.重载和多态,熟练掌握面向对象的程序设计思想和方法,能够对现实世界中的实际问题进行分析.设计,并学会熟练运用面向对象的编程方法(OOP)-- C++语言进 ...

  2. 空气质量等级c语言编程,华中科技大学C语言课设 空气质量检测信息管理系统.docx...

    华中科技大学 计算机科学与技术学院PAGE PAGE \* MERGEFORMAT 128 华中科技大学 计算机科学与技术学院 PAGE \* MERGEFORMAT 1 华中科技大学计算机科学与技术 ...

  3. Java课设之Swing学生信息管理系统(源码)

    前言: 这是我学java时,写的一个练手项目,主要用来巩固知识,还有很多地方并不完善,有很多不足之处,仅供参考. 另外,如果直接按着我的代码敲很可能会出现bug.这大概率时JDK或MySQL的版本问题 ...

  4. 基于javaweb的课程信息管理系统(java+springboot+freemarker+mysql)

    基于javaweb的课程信息管理系统(java+springboot+freemarker+mysql) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclip ...

  5. c语言通讯录程序线性表,数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)...

    数据结构(C语言)课设1--单位员工通讯录管理系统(线性表应用) 题目要求: 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息 ...

  6. 数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)

    数据结构(C语言)课设1--单位员工通讯录管理系统(线性表应用) 题目要求: 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息 ...

  7. 用starUML画的软工课设:外卖点餐管理系统

    软件工程课设:外卖点餐管理系统 一.概述 二.可行性分析 2.1技术的可行性 2.2经济的可行性 2.3操作的可行性 2.4法律的可行性 2.5结论 三.需求分析 3.1功能性需求 3.2非功能性需求 ...

  8. Python 小型课设作业,仅200行代码,使用youtube-dl下载视频,使用OpenCV和ffmpeg处理视频成字符视频

    一.程序背后的小故事:    因为不想像传统的课设作业一样做一个很多人做过的小游戏,管理程序等,所以花了很长时间在选择一个有趣的程序方向,突然想起来以前看到的字符跳舞视频,突然引起了我的兴趣.分析字符 ...

  9. 课程管理系统c语言程序,课程信息管理系统C语言程序Word版

    <课程信息管理系统C语言程序Word版>由会员分享,可在线阅读,更多相关<课程信息管理系统C语言程序Word版(19页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文 ...

  10. java简单课程_Java之从头开始编写简单课程信息管理系统

    编写简单的课程管理系统对于新手并不友好,想要出色的完成并不容易以下是我的一些经验和方法 详情可参考以下链接: 一.相关的软件下载和环境配置 1.下载并配置JDK. 2.下载eclipse. 3.下载并 ...

最新文章

  1. 调用android系统自带功能
  2. python的用途实例-Python实例方法、类方法、静态方法的区别与作用详解
  3. scanf 接收 空格 输入_【C语言】- printf 和scanf 函数详解!
  4. 致各位读者,关于资源的问题
  5. 扩展Java EE应用程序的基础
  6. java 查找排序_Java类库中的一些常用的查找排序
  7. (总结)HTTP常见错误返回代码
  8. 【牛客 - 551E】CSL 的魔法(贪心,思维,STLmap,分块)
  9. 古早但有用:CISA 发布15个正遭利用的老旧漏洞
  10. 频谱感知3:合作频谱检测中的硬合并与软合并
  11. cocos2d高级开发
  12. QQ输入法用户体验评价
  13. RocketMQ(消息中间件)
  14. java中级程序员全面学习路线教程
  15. 自动添加控件,一次提交多条记录。
  16. MATLAB初阶绘图
  17. c语言intrins函数,【转载】KEIL C 头文件INTRINS.H中的几个函数说明
  18. DFS算法之无序列表转换为平衡二叉搜索树
  19. Destoon7.0会员中心模板 B2B系统商务中心模板源码下载
  20. 安装飞利浦系统服务器,飞利浦电视小飞OS系统最新软件安装教程!

热门文章

  1. Spring 揭秘 12.1
  2. 计算机组成原理与汇编语言参考答案,计算机组成原理与汇编语言试题及答案
  3. 关于如何用python下载文件
  4. 图像任意角度旋转和翻转(C#)
  5. 19 个接私活平台汇总,今天我们只聊用技术挣钱
  6. Linux - grep命令详解
  7. 【Transfer Learning】泛化到未知域:域泛化 (Domain Generalization) 综述论文
  8. 毕业季-Java分布式开发面试题
  9. Zynq-7000基于zynq平台裸跑LWIP协议栈的详解(万字长文)
  10. 发电机机房设计规范_柴油发电机的容量选择,以及柴油发电机机房设计规范要求!...