c++课设作业之课程信息管理系统
课程信息管理系统
课程信息包括:记录编号、课程编号、课程名、学时(讲课学时、实践学时)、学分、开课学期,考核方式(考试/报告)
功能要求:
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++课设作业之课程信息管理系统相关推荐
- c++课设:高校人员信息管理系统 开发一个简易的高校人员信息管理系统,主要针对高校人员的基本信息进行管理。采用对象链表或对象数组存放各个对象,实现新增、修改、删除、查询以及统计等功能。
通过本次课程设计,深入理解类和对象.继承和派生.重载和多态,熟练掌握面向对象的程序设计思想和方法,能够对现实世界中的实际问题进行分析.设计,并学会熟练运用面向对象的编程方法(OOP)-- C++语言进 ...
- 空气质量等级c语言编程,华中科技大学C语言课设 空气质量检测信息管理系统.docx...
华中科技大学 计算机科学与技术学院PAGE PAGE \* MERGEFORMAT 128 华中科技大学 计算机科学与技术学院 PAGE \* MERGEFORMAT 1 华中科技大学计算机科学与技术 ...
- Java课设之Swing学生信息管理系统(源码)
前言: 这是我学java时,写的一个练手项目,主要用来巩固知识,还有很多地方并不完善,有很多不足之处,仅供参考. 另外,如果直接按着我的代码敲很可能会出现bug.这大概率时JDK或MySQL的版本问题 ...
- 基于javaweb的课程信息管理系统(java+springboot+freemarker+mysql)
基于javaweb的课程信息管理系统(java+springboot+freemarker+mysql) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclip ...
- c语言通讯录程序线性表,数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)...
数据结构(C语言)课设1--单位员工通讯录管理系统(线性表应用) 题目要求: 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息 ...
- 数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)
数据结构(C语言)课设1--单位员工通讯录管理系统(线性表应用) 题目要求: 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息 ...
- 用starUML画的软工课设:外卖点餐管理系统
软件工程课设:外卖点餐管理系统 一.概述 二.可行性分析 2.1技术的可行性 2.2经济的可行性 2.3操作的可行性 2.4法律的可行性 2.5结论 三.需求分析 3.1功能性需求 3.2非功能性需求 ...
- Python 小型课设作业,仅200行代码,使用youtube-dl下载视频,使用OpenCV和ffmpeg处理视频成字符视频
一.程序背后的小故事: 因为不想像传统的课设作业一样做一个很多人做过的小游戏,管理程序等,所以花了很长时间在选择一个有趣的程序方向,突然想起来以前看到的字符跳舞视频,突然引起了我的兴趣.分析字符 ...
- 课程管理系统c语言程序,课程信息管理系统C语言程序Word版
<课程信息管理系统C语言程序Word版>由会员分享,可在线阅读,更多相关<课程信息管理系统C语言程序Word版(19页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文 ...
- java简单课程_Java之从头开始编写简单课程信息管理系统
编写简单的课程管理系统对于新手并不友好,想要出色的完成并不容易以下是我的一些经验和方法 详情可参考以下链接: 一.相关的软件下载和环境配置 1.下载并配置JDK. 2.下载eclipse. 3.下载并 ...
最新文章
- 调用android系统自带功能
- python的用途实例-Python实例方法、类方法、静态方法的区别与作用详解
- scanf 接收 空格 输入_【C语言】- printf 和scanf 函数详解!
- 致各位读者,关于资源的问题
- 扩展Java EE应用程序的基础
- java 查找排序_Java类库中的一些常用的查找排序
- (总结)HTTP常见错误返回代码
- 【牛客 - 551E】CSL 的魔法(贪心,思维,STLmap,分块)
- 古早但有用:CISA 发布15个正遭利用的老旧漏洞
- 频谱感知3:合作频谱检测中的硬合并与软合并
- cocos2d高级开发
- QQ输入法用户体验评价
- RocketMQ(消息中间件)
- java中级程序员全面学习路线教程
- 自动添加控件,一次提交多条记录。
- MATLAB初阶绘图
- c语言intrins函数,【转载】KEIL C 头文件INTRINS.H中的几个函数说明
- DFS算法之无序列表转换为平衡二叉搜索树
- Destoon7.0会员中心模板 B2B系统商务中心模板源码下载
- 安装飞利浦系统服务器,飞利浦电视小飞OS系统最新软件安装教程!
热门文章
- Spring 揭秘 12.1
- 计算机组成原理与汇编语言参考答案,计算机组成原理与汇编语言试题及答案
- 关于如何用python下载文件
- 图像任意角度旋转和翻转(C#)
- 19 个接私活平台汇总,今天我们只聊用技术挣钱
- Linux - grep命令详解
- 【Transfer Learning】泛化到未知域:域泛化 (Domain Generalization) 综述论文
- 毕业季-Java分布式开发面试题
- Zynq-7000基于zynq平台裸跑LWIP协议栈的详解(万字长文)
- 发电机机房设计规范_柴油发电机的容量选择,以及柴油发电机机房设计规范要求!...