我的第一个C++程序( C++语言程序设计项目任务书 )
帮同学写的,不面向对象的面向对象
C++语言程序设计项目任务书
一、目的与要求:
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)功能用菜单实现
(4)数据的输入输出可根据用户选择,从文件或键盘输入。
(5)提交项目源码(带注释)和报告,报告包括设计思路,系统功能,调试过程,程序代码,
(6)提交完整的项目实施过程报告和项目总结。
3、创新要求:
在基本要求达到后,可进行创新设计。例如加入类的派生和新的属性及功能等。
二、评分标准:
1、完成基本功能:10分;
2、设计报告及使用说明书:5分;
3、创新功能:0-5分。
三、项目内容列表
项目1:学生毕业设计管理系统
某学校有本科生若干。需要存储这些学生的编号、姓名、年级和班级、论文题目、指导老师和成绩,并显示全部信息。
要求:
1)其中,学生编号在生成学生信息时同时生成,每输入一个学生信息编号顺序加1。
2)能按姓名或者编号显示、查找、增加、删除和保存学生的信息
项目2:教师课程管理系统
某学校有课程若干。需要存储这些课程的编号、名称、学时、类型,老师的编号、姓名,并显示全部信息。 其中类型分为基础课、专业课、选修课等。
要求:
1)其中,课程编号在生成课程信息时同时生成,每输入一个课程信息编号顺序加1。
2)能按课程名字或者老师编号显示、查找、增加、删除和保存各种课程和老师信息。
项目3:公交信息管理系统
某公交公司有车辆若干。现在,需要存储这些公交的编号、名称、类型、起点站和终点站,并显示全部信息。 类型包括普通车、空调车、双层车等。
要求:
1)其中,公交编号在生成公交车信息时同时生成,每输入一辆公交车信息编号顺序加1。
2)能按名称或者编号显示、查找、增加、删除和保存各类公交的信息
项目4:家具商店管理系统
某家具商店现有家具若干,类型包括椅、桌、柜和床等。要求对所有的库存家具都能按照名称或编号进行显示、查找、增加和删除、保存的功能。
项目5:服装商店管理系统
某服装商店现有服装若干,类型包括:外衣、衬衣、裤子和套装。要求对所有的库存服装都能按照名称或编号进行显示、查找、增加和删除、保存的功能。
项目6:新科公司的设备管理系统
新科公司设备若干,类型包括普通电视机、DVD、带DVD的电视机,要求对所有的库存设备都能按照品名进行显示、查找、增加和删除、保存的功能。
项目7:图书信息管理系统
某公司有图书若干。现在,需要存储这些图书的编号、名称、类型、价格,并显示全部信息。 类型包括工具书、专业书、杂志等。
要求:
1)其中,图书编号在生成图书信息时同时生成,每输入一本图书信息编号顺序加1。
2)能按名称或者编号显示、查找、增加、删除和保存各类图书的信息
#include<iostream> #include<string> #include<vector> #include<fstream> #include<set> using namespace std; //使用宏定义输出文件名 #define file_name "bus.txt" //Bus类 class Bus { public: //编号、名称、类型、起点站和终点站 //公交编号在生成公交车信息时同时生成,每输入一辆公交车信息编号顺序加1。 string name;//名称 int leixing;//类型:0.其它.1.普通车、2.空调车、3.双层车 string qidian,zhongdian;//起点、终点站 Bus(string nam1,int typ,string qd,string zd) //带参数构造 { name=nam1; leixing=typ; qidian=qd; zhongdian=zd; } }; //全局Global类 class Global { public: vector<Bus> bus; bool addBus(string nam1,int typ,string qd,string zd); bool deleteBus(int num); void displayBus(vector<Bus>::iterator iter1); void Global::displayAllBus(); void findBus1(string nam1); void findBus2(int typ); void findBus3(string qd); void findBus4(string zd); void readfromtxt(); void savetxt(); void allStop(); } ans; //添加车辆 bool Global::addBus(string nam1,int typ,string qd,string zd) { Bus tmp(nam1,typ,qd,zd); for(int i=0;i<bus.size();i++) { if( nam1==bus[i].name ) { cout << "该名称的公交车已经存在" << endl; return false; } } bus.push_back(tmp); cout<< "添加公交车"<<tmp.name<<"成功" << endl; return false; } //删除车辆 bool Global::deleteBus(int num) { if(num>bus.size()||num<1) { cout << "编号输入错误" << endl; return false; } vector<Bus>::iterator iter1; iter1=bus.begin()+num-1; bus.erase(iter1); return true; } //显示全部信息(调用显示单一车辆的方法) void Global::displayAllBus() { ////编号、名称、类型、起点站和终点站 if( bus.size()==0 ) { cout << "没有车辆信息" << endl; return; } cout << "编号\t名称\t类型\t起点站\t\t终点站" << endl; for(vector<Bus>::iterator iter1=bus.begin();iter1!=bus.end();iter1++) { displayBus(iter1); } } //显示单一车辆 void Global::displayBus(vector<Bus>::iterator iter1) { cout << (int)(iter1-bus.begin()+1) << "\t" << iter1->name << "\t"; switch( iter1->leixing ) { case 1:cout << "普通车";break; case 2:cout << "空调车";break; case 3:cout << "双层车";break; default:cout << "其它";break; } cout << "\t" << iter1->qidian << "\t\t" << iter1->zhongdian <<endl; } //用STL的set实现无重复显示全部车站 void Global::allStop() { if( bus.size() == 0 ) { cout << "无车辆信息,无法查询" << endl; return; } set<string> alstop; for(vector<Bus>::iterator iter1=bus.begin();iter1!=bus.end();iter1++) { if( !alstop.count( iter1->qidian ) ) alstop.insert( iter1->qidian ); if( !alstop.count( iter1->zhongdian) ) alstop.insert( iter1->zhongdian); } cout << "所有的车站:" << endl; for(set<string>::iterator iter2=alstop.begin();iter2!=alstop.end();iter2++) { cout << *iter2 << " "; } cout << endl; } //按名称查找 void Global::findBus1(string nam1) { bool flag(true); for(vector<Bus>::iterator iter1=bus.begin();iter1!=bus.end();iter1++) { if( iter1->name==nam1 ) { if(flag) { cout << "编号\t名称\t类型\t起点站\t终点站" << endl; flag=false; } displayBus(iter1); } } if(flag) { cout << "没有找到名称为" << nam1 << "的公交车" << endl; } } //按类型查找 void Global::findBus2(int typ) { //cout << "0.其它 1.普通车 2.空调车 3.双层车" << endl; bool flag(true); for(vector<Bus>::iterator iter1=bus.begin();iter1!=bus.end();iter1++) { if( iter1->leixing==typ ) { if(flag) { cout << "编号\t名称\t类型\t起点站\t终点站" << endl; flag=false; } displayBus(iter1); } } if(flag) { cout << "没有找到类型为"; switch( typ ) { case 1:cout << "普通车";break; case 2:cout << "空调车";break; case 3:cout << "双层车";break; default:cout << "其它";break; } cout << "的公交车" << endl; } } //按起点查找 void Global::findBus3(string qd) { bool flag(true); for(vector<Bus>::iterator iter1=bus.begin();iter1!=bus.end();iter1++) { if( iter1->qidian==qd ) { if(flag) { cout << "编号\t名称\t类型\t起点站\t终点站" << endl; flag=false; } displayBus(iter1); } } if(flag) { cout << "没有找到起点为" << qd << "的公交车" << endl; } } //按终点查找 void Global::findBus4(string zd) { bool flag(true); for(vector<Bus>::iterator iter1=bus.begin();iter1!=bus.end();iter1++) { if( iter1->zhongdian==zd ) { if(flag) { flag=false; cout << "编号\t名称\t类型\t起点站\t终点站" << endl; } displayBus(iter1); } } if(flag) { cout << "没有找到终点为" << zd << "的公交车" << endl; } } //读取文件 文件名在程序最上面 void Global::readfromtxt() { ifstream fin(file_name); string nam1,qd,zd; int typ; while(fin >> nam1 >> typ >> qd >> zd) { addBus(nam1,typ,qd,zd); } fin.close(); cout << "读取到" << bus.size() << "组数据" << endl; system("pause"); } //存储文件,文件名在程序最上面 void Global::savetxt() { ofstream fout(file_name); for(vector<Bus>::iterator iter1=bus.begin();iter1!=bus.end();iter1++) { fout << iter1->name << endl; fout << iter1->leixing << endl; fout << iter1->qidian << endl; fout << iter1->zhongdian << endl; } fout.close(); cout << "存储完毕" << endl; } //添加车辆菜单 void menu_add() { cout << "->添加车辆" << endl; cout << "您正在添加第" << ans.bus.size()+1 <<"辆车" << endl; cout << "请输入车辆名称:" << endl; string name,qidian,zhongdian; int typ; cin >> name; cout << "请输入车辆类型:" << endl << "0.其它 1.普通车 2.空调车 3.双层车" << endl; cin >> typ; cout << "请输入车辆起点:" << endl; cin >> qidian; cout << "请输入车辆终点:" << endl; cin >> zhongdian; ans.addBus(name,typ,qidian,zhongdian); return; } //删除菜单 void menu_del() { cout << "->删除车辆" << endl; if( ans.bus.size()==0 ) { cout << "没有车辆信息,无法执行删除操作" << endl; return; } ans.displayAllBus(); cout << "请选择要删除的车辆的编号:" << endl; int ipt; cin >> ipt; if(ans.deleteBus(ipt)) cout << "删除成功" << endl; else cout << "删除失败" << endl; return; } //查找菜单 void menu_find() { cout << "->查找车辆" << endl; cout << "请选择查找方式:" << endl; cout << "1.按名称" << endl; cout << "2.按类型" << endl; cout << "3.按起点" << endl; cout << "4.按终点" << endl; cout << "5.返回" << endl; int ipt,typ; string str; cin >> ipt; switch(ipt) { case 1:cout << "请输入要查找的车辆名称:" << endl;cin >> str; ans.findBus1(str); break; case 2:cout << "请输入要查找的车辆类型:" << endl << "0.其它 1.普通车 2.空调车 3.双层车" << endl;cin >> typ;ans.findBus2(typ);break; case 3:cout << "请输入要查找的车辆起点:" << endl;cin >> str;ans.findBus3(str);break; case 4:cout << "请输入要查找的车辆终点:" << endl;cin >> str;ans.findBus4(str);break; case 5:return; default:cout << "输入有误" << endl; } } //主菜单 void menu1() { int ipt; system("cls"); while(true) { cout << "----------------------------------" << endl; cout << " 欢迎使用公交信息管理系统 " << endl; cout << "----------------------------------" << endl << endl; cout << "请选择您要进行的操作:" << endl; cout << " 1.添加车辆" << endl; cout << " 2.删除车辆" << endl; cout << " 3.显示全部车辆" << endl; cout << " 4.查找车辆" << endl; cout << " 5.查看所有车站" << endl; cout << " 6.储存到文件" << endl; cout << " 7.退出程序" << endl; cin >> ipt; switch(ipt) { case 1:menu_add();break; case 2:menu_del();break; case 3:ans.displayAllBus();break; case 4:menu_find();break; case 5:ans.allStop();break; case 6:ans.savetxt();break; case 7:exit(0);break; default:cout << "输入有误,请重新输入" << endl;break; } system("pause"); system("cls"); } } //程序入口,选择数据来源 int main() { int ipt1; string str1; cout << "----------------------------------" << endl; cout << " 欢迎使用公交信息管理系统 " << endl; cout << "----------------------------------" << endl << endl; retry: cout << "请选择数据来源:" << endl; cout << "1.从文件读入" << endl; cout << "2.键盘录入" << endl; cout << "请输入:" << endl; cin >> ipt1; switch(ipt1) { case 1:ans.readfromtxt();break; case 2:break; default:cout << "输入错误,请重新输入" << endl;goto retry;break; } menu1(); return 0; }