c++课设作业之课程信息管理系统
2020-02-03 05:42
1976 查看
课程信息管理系统
课程信息包括:记录编号、课程编号、课程名、学时(讲课学时、实践学时)、学分、开课学期,考核方式(考试/报告)
功能要求:
A、 从课程信息文件中读取已有的课程信息,并实现屏幕显示。
B、 能通过课程编号对已有的课程信息进行修改,要求编号不能修改,其他信息内容都可改,修改的结果保存至课程信息文件。
C、 实现对课程信息的统计(分学期统计课程数量及开课总学分数)。
D、 实现对课程信息的查询显示(查询条件分为课程编号、课程学分、开课学期),对有多条记录的查询结果按照课程开课学期进行排序显示。
E、 新课程信息的添加并保存至课程信息文件。
F、 数据约束关系:学时=讲课学时+时间学时;学分=学时/16。
G、 课程信息的删除,根据课程编号,删除指定课程信息,并将结果写入文件。
本程序主要用到了类以及链表的知识。
头文件——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; } } 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,j,i; double t,N,c; Date *p1,*p2; p1=ClassHead; while(p1->Classnext) { 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; 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 Systemdoor() { 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<<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; }
关于这个代码的解释等上一段时间,我会将我的课设报告贴上的,谢谢。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 2013年大一上学期的C++大作业 学生信息管理系统
- C++学生信息管理系统V1(课后作业)
- 16级C++课程设计 题目1 “高校人员信息管理系统设计”
- C++课程设计:学生信息管理系统
- [置顶] 学生信息管理系统-C语言结课作业掺杂了一点c++
- C++课程设计:医院就诊预约信息管理系统
- C++课程设计:职工综合信息管理系统
- 关于c++ 课程设计(学生信息管理系统)
- 数据库课程设计-NBA球队信息管理系统(总结)
- 可执行源码:基于javaweb实现学生成绩管理系统,三种角色学生和教师 管理员,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等
- 课程设计~学生信息管理系统代码
- 实验楼学习之C++实现课程管理系统
- C++学生信息管理系统
- c程序课程设计(学生信息管理系统)
- 学生信息管理系统-数据结构课程设计
- 用C语言实现一个学生成绩管理系统 实现学生信息管理。包括:录入、查询、排序等功能。 要求: 用数据文件保存学生基本信息(学号 姓名 课程1 课程2 课程3…) ,利用菜单可以循环实现各个功能。
- C++版学生信息管理系统
- 3月7日课程作业 信息化基础知识、信息化系统服务管理
- JAVA课程设计---学生基本信息管理系统(201521123039 王兴)
- JAVA课程设计-学生信息管理系统(个人博客)