飞道的博客

C++课程设计之快件管理系统

484人阅读  评论(0)

面向对象程序课程设计任务书

【题目】快件管理系统

【目的】

通过设计一个小型的快件管理系统,训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念,使自己的程序设计与调试水平有一个明显的提高。

【要求】

1、每个学生必须独立完成;
2、课程设计时间为1周;
3、设计语言采用C++;
4、学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,未按规定上交实验报告的学生,其成绩按不及格处理。

【内容简介】

有一个快递服务代收点,现在需要你为这个服务代收点开发一个简单的快件管理系统,使收件人能够查询自己的快件情况,服务人员能够使用该系统管理该点代收的所有快件,并通知收件人取件,加快工作效率,提高服务质量。

【考核标准】

该系统为两种角色的用户提供服务,一种是代收点服务人员,一种是收件人。代收点服务人员根据账号、密码登录系统。收件人无需登录即可使用系统。
1、 代收点服务人员可将快件信息录入系统,快件信息包括快递单号、快递公司、收件人、收件人联系电话、收件人地址、邮编、寄件人、寄件人联系电话、寄件人地址、邮编,系统可自动为该快件生成取件号。如收件人来取件,服务人员可根据手机号或者取件号查询到该快件并标记取件成功。收件人可以通过手机号查询自己在该代收点的快件的取件号以及是否收取的情况,成绩≥60;
2、 系统退出后能保存当天的快件信息,要求每天一个文档,文档名按照日期命名。代收点服务人员可以根据快递单号查找、删除、修改某个快件,还可以查询所有未取快件,成绩≥70;
3、 系统可根据历史记录对收取件情况进行统计,根据服务人员的输入日期统计某天的收取件情况并显示,包括当天的收件量、各快递公司的收件量、取件量、各快递公司的取件量、未取件数量、各快递公司的未取件数量,成绩≥80;
4、 取件号可以根据快件的大小、快递公司等信息实现自动编码,成绩≥90;
要求:
用面向对象的程序设计方法设计该系统。本系统涉及的基本对象有快件对象、快件管理对象、系统界面对象。实现对这些对象的合理抽象和封装,正确定义类之间的关系。界面合理,代码文件组织清晰,命名符合规范,代码注释清楚,课设报告书质量高。

【工作内容及工作计划】

面向对象程序课程设计任务书

目 录
这是简略版,完整内容请下载附件查看

一、 题目

快件管理系统

二、 需求分析

这是简略版,完整内容请下载附件查看

三、 系统结构图

这是简略版,完整内容请下载附件查看

四、 类的设计

这是简略版,完整内容请下载附件查看

五、 程序代码与说明

Cdate.h

#ifndef CDATE_H
#define CDATE_H

#include <time.h>
#include <string>
using namespace std;

class Cdate
{
private:
	int year, month, day;
public:
	int GetYear() { return year; }
	int GetMonth() { return month; }
	int GetDay() { return day; }
	string DateToString(int y, int m, int d);
	void DatetoCdate(string date);
	string NowDate();
	bool IsLeapYear();
};

#endif

Locker.h

#ifndef LOCKER_H
#define LOCKER_H

#include <vector>
#include "Package.h"
#include <map>

using namespace std;

class Locker
{
private:
	vector<Package> Locker_Floor[6];	//5层
	string LockerID;
	int Size_All;				//总容量
	int Size_Floor[6];			//每层容量
public:
	Locker();
	void SetLockerID(string id) { LockerID = id; }
	string GetLockerID() { return LockerID; }
	void Stock_In(Package& P);
	bool SearchPackage(Package** P,string method);
	bool IsLockerFull();
	bool IsFloorFull(int Floor);
	bool IsLockerEmpty();
	void ReadInfo(Package& P);
	void SaveInfo();
	void WaybillSearch(int flag,string Waybill);
};

#endif

Manager.h

#ifndef MANAGER_H
#define MANAGER_H

#include <string>
#include "Package.h"
#include <map>

using namespace std;

class Manager
{
private:
	string Username = "admin";
	string Password = "admin";
public:
	void SetUsername(string text) { Username = text; }
	void SetPassword(string text) { Password = text; }
	string GetUsername() { return Username; }
	string GetPassword() { return Password; }
	bool Stock_In(Package& P);
	void SearchPackage(Package** SP,string method);
	void ReadInfo(Package& P);
	void SaveInfo();
	void WaybillSearch(Package** SP, string method);
};

#endif

Package.h

#ifndef PACKAGE_H
#define PACKAGE_H

#include <string>
using namespace std;

/*
	快件信息
	快递单号、快递公司;
	收件人:姓名、联系电话、地址、邮编;
	寄件人:姓名、联系电话、地址、邮编;
*/

class Package
{
private:
	string WaybillNum;			//快递单号
	string ExpressCompany;		//快递公司
	string Recipient;			//收件人
	string RecPhone;			//收件人联系方式
	string RecAddress;			//收件人地址
	string RecZip;				//收件人邮编
	string Sender;				//寄件人
	string SenPhone;			//寄件人联系方式
	string SenAddress;			//寄件人地址
	string SenZip;				//寄件人邮编
	string SearchID;			//取件码
	string Date;
	bool State;					//状态:true已取件 false未取件
	bool Stores = false;
public:
	Package();

	void SetWaybillNum(const string& text) { WaybillNum = text; }
	void SetExpressCompany(const string& text) { ExpressCompany = text; }
	void SetRecipient(const string& text) { Recipient = text; }
	void SetRecPhone(const string& text) { RecPhone = text; }
	void SetRecAddress(const string& text) { RecAddress = text; }
	void SetRecZip(const string& text) { RecZip = text; }
	void SetSender(const string& text) { Sender = text; }
	void SetSenPhone(const string& text) { SenPhone = text; }
	void SetSenAddress(const string& text) { SenAddress = text; }
	void SetSenZip(const string& text) { SenZip = text; }
	void SetSearchID(const string& text) { SearchID = text; }
	void SetDate(const string& text) { Date = text; }
	void SetState(bool flag) { State = flag; }
	void SetStores(bool flag) { Stores = flag; }
	string GetWaybillNum() { return WaybillNum; }
	string GetExpressCompany() { return ExpressCompany; }
	string GetRecipient() { return Recipient; }
	string GetRecPhone() { return RecPhone; }
	string GetRecAddress() { return RecAddress; }
	string GetRecZip() { return RecZip; }
	string GetSender() { return Sender; }
	string GetSenPhone() { return SenPhone; }
	string GetSenAddress() { return SenAddress; }
	string GetSenZip() { return SenZip; }
	string GetSearchID() { return SearchID; }
	bool GetState() { return State; }
	bool GetStores() { return Stores; }
	string GetDate() { return Date; }
	void ShowInfo();

	bool operator==(Package &temp);     

};

#endif

System.h

/*
	用来显示各操作界面
*/

#ifndef SYSTEM_H
#define SYSTEM_H

#include "Package.h"

class System
{
public:
	void Frame();				//初始边框
	void Start();				//身份选择
	void Error(int flag);		//错误界面
	void Exit();				//退出程序
	bool SignIn();				//登录系统
	void SignOut();				//登出系统
	void ManagerMeun();			//管理员界面
	void Stock_In();  //快件入库
	void Stock_Pick();			//快件出库
	void SearchPackage(string text);
	void RecipientMeun();
	void ReadSurplusInfo();
	void SaveInfo();
	void StatisticsInfo();
	void WayBillSearch(int type);
	void CheckPackage(int type);

};

#endif

main.h

#include <iostream>
#include <direct.h>
#include <conio.h>
#include <cstdio>
#include <stdlib.h>
#include <windows.h>
#include "System.h"
#include "Package.h"
#include "Locker.h"
#include "Manager.h"
#include "Cdate.h"

using namespace std;

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO _Close_Cursor = { 1,FALSE };
CONSOLE_CURSOR_INFO _Open_Cursor = { 1,TRUE };

Cdate Date;
System SYS;
Manager MAN;
Locker Lock[21];

int main()
{
	SetConsoleTitle(L"快件管理系统");
	for (int i = 1; i < 21; i++)	//初始化柜台编号
	{
		if (i < 10) Lock[i].SetLockerID(to_string(0) + to_string(i));
		else Lock[i].SetLockerID(to_string(i));
	} 
	system("mode con cols=60 lines=20");
	system("md history");
	SYS.ReadSurplusInfo();
	SYS.Start();
	while (1)
	{	
		system("cls");
		SYS.Start();
		int mode = 1;
		cin >> mode;
		
		if (mode == 1)			//管理员功能
		{
			int flag = 1;	//登录次数  3次超时
			int choice = 10;
			while (!SYS.SignIn() && flag<3)
			{
				flag++;
			}
			if (flag == 3)
			{
				SYS.Error(2);
				continue;
			}
			while (choice != 0)
			{
				SYS.ManagerMeun();
				cin >> choice;
				switch (choice)
				{
				case 0:					//退出登录
					SYS.SaveInfo();
					SYS.SignOut();
					break;
				case 1:					//录入快件
					SYS.Stock_In();
					break;
				case 2:					//查找快件
					SYS.SearchPackage("Manager");
					break;
				case 3:
					SYS.WayBillSearch(1);
					break;
				case 4:
					SYS.WayBillSearch(3);
					break;
				case 5:
					SYS.WayBillSearch(2);
					break;
				case 6:
					SYS.CheckPackage(3);
					break;
				case 7:
					SYS.CheckPackage(1);
					break;
				case 8:
					SYS.CheckPackage(2);
					break;
				case 9:
					SYS.SaveInfo();
					SYS.StatisticsInfo();
					break;
				default:
					SYS.Error(1);
					break;
				}
			}
		}
		else if(mode ==2)		//收件人功能
		{
			int choise = 1;

			while (choise != 2)
			{
				SYS.RecipientMeun();
				cin >> choise;
				switch (choise)
				{
				case 1:
					SYS.SearchPackage("Recipient");
					break;
				default:
					break;
				}
			}
		}
		else if (mode == 3)		//退出系统
		{
			SYS.SaveInfo();
			SYS.Exit();
		}
		else					//错误输入
		{
			SYS.Error(1);
		}
	}
	return 0;
}

六、 运行结果与分析


七、 心得与体会

这是简略版,完整内容请下载附件查看

附件:
资源下载
资料包括测试数据文件,可执行程序,以及源代码



转载:https://blog.csdn.net/qq_30445397/article/details/107890539
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场