帮同学写的,不面向对象的面向对象
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;
}