我的第一个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;
}

  

posted @ 2011-08-03 10:30  laputastar  阅读(2721)  评论(2编辑  收藏  举报