#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
struct Node
{
int pcode;
int num;
string pnum;
time_t tnum;
Node *next;
Node *prev;
};
//取件成功+剩余提示
void rreaction(int l) {
cout << "______________________________________________________________";
cout << endl;
cout << endl;
cout << " 取件成功!!!";
cout << endl;
cout << "______________________________________________________________";
cout << endl;
system("pause");
system("cls");
if (l != 0) {
cout << "______________________________________________________________";
cout << endl;
cout << endl;
cout << " 当前手机号还有"<< l <<"件未取!!!";
cout << endl;
cout << "______________________________________________________________";
cout << endl;
system("pause");
system("cls");
}
}
//取件码错误
void freaction() {
cout << "______________________________________________________________";
cout << endl;
cout << endl;
cout << " 取件码错误!!!";
cout << endl;
cout << "______________________________________________________________";
cout << endl;
system("pause");
system("cls");
}
//取件系统
int pcode() {
int j = 0;
int l = 0;
int list1[25];
int list2[25];
string list3[25];
int list4[25];
ifstream file1("num.txt");
ifstream file2("tnum.txt");
ifstream file3("pnum.txt");
ifstream file4("pcode.txt");
while (file1.peek() != EOF) {
file1 >> list1[j];
file2 >> list2[j];
file3 >> list3[j];
file4 >> list4[j++];
}
file1.close();
file2.close();
file3.close();
file4.close();
int pcode;
cout << "______________________________________________________________";
cout << endl;
cout << endl;
cout << " 取件码:"; cin >> pcode;
cout << endl;
cout << "______________________________________________________________";
for (int i = 0; i < j-1; i++) {
if (list4[i] == pcode) {
ofstream file1;
file1.open("num.txt");
ofstream file2;
file2.open("tnum.txt");
ofstream file3;
file3.open("pnum.txt");
ofstream file4;
file4.open("pcode.txt");
for (int k = 0; k < j-1; k++) {
if (k == i)continue;
else {
if (list3[i] == list3[k])l = l + 1;
file1 << list1[k] << endl;
file2 << list2[k] << endl;
file3 << list3[k] << endl;
file4 << list4[k] << endl;
}
}
file1.close();
file2.close();
file3.close();
file4.close();
system("cls");
cout << "______________________________________________________________";
cout << endl;
cout << endl;
cout << " 柜号"<<list1[i]<<"已打开";
cout << endl;
cout << "______________________________________________________________";
cout << endl;
system("pause");
system("cls");
return l;
}
}
system("cls");
return -1;
}
//快递员取件
Node* dnode(Node* head,int n) {
Node *p0;
p0 = head;
while (p0->prev != NULL) {
if (p0->num == n) {
if (p0 == head) {
head = head->prev;
delete p0;
return head;
}
else {
p0->prev->next = p0->next;
p0->next->prev = p0->prev;
delete p0;
return head;
}
}
p0 = p0->prev;
if (p0->prev == NULL)
{
cout << "______________________________________________________________";
cout << endl;
cout << endl;
cout << " 柜号" << n << "为空!!!";
cout << endl;
cout << "______________________________________________________________";
cout << endl;
system("pause");
system("cls");
return head;
}
}
return head;
}
//柜子界面
int ginformation(Node* head) {
Node *p0;
p0 = head;
int j = 1;
int n;
int m[26] = { 0 };
while (p0->prev != NULL) {
m[p0->num] = 1;
p0 = p0->prev;
}
cout << "_________________________________________________________________________________________________________________________" << endl;
cout << "| 1 | 2 | 3 | 4 | 5 |" << endl;
cout << "| "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " |" << endl;
cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
cout << "| 6 | 7 | 8 | 9 | 10 |" << endl;
cout << "| "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " |" << endl;
cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
cout << "| 11 | 12 | 13 | 14 | 15 |" << endl;
cout << "| | | | | |" << endl;
cout << "| "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " |" << endl;
cout << "| | | | | |" << endl;
cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
cout << "| 16 | 17 | 18 | 19 | 20 |" << endl;
cout << "| | | | | |" << endl;
cout << "| "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " |" << endl;
cout << "| | | | | |" << endl;
cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
cout << "| 21 | 22 | 23 | 24 | 25 |" << endl;
cout << "| | | | | |" << endl;
cout << "| | | | | |" << endl;
cout << "| "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " | "; if (m[j] == 0) { j++; cout << " --- "; }
else { j++; cout << "已存放"; } cout << " |" << endl;
cout << "| | | | | |" << endl;
cout << "| | | | | |" << endl;
cout << "|_______________________|_______________________|_______________________|_______________________|_______________________|" << endl;
cout << endl << " 输入要取出的智能柜的编号(输入'0'返回):";
cin >> n;
switch (n) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
system("cls");
return n;
case 0:
system("cls");
return n;
default:
system("cls");
return -1;
}
}
//初始化
Node* init()
{
Node *head;
head = new Node;
head->next = NULL;
head->prev = NULL;
return head;
}
Node* autoinput(Node* head) {
int j = 0;
int list1[25];
int list2[25];
string list3[25];
int list4[25];
ifstream file1("num.txt");
ifstream file2("tnum.txt");
ifstream file3("pnum.txt");
ifstream file4("pcode.txt");
while (file1.peek() != EOF) {
file1 >> list1[j];
file2 >> list2[j];
file3 >> list3[j];
file4 >> list4[j++];
}
file1.close();
file2.close();
file3.close();
file4.close();
for (int i = 0; i < j-1; i++) {
Node *p0, *p1;
p0 = head;
p1 = new Node;
p1->num = list1[i];
p1->tnum = list2[i];
p1->pnum = list3[i];
p1->pcode = list4[i];
p1->prev = p0;
p0->next = p1;
p1->next = NULL;
head = p1;
}
return head;
}
//柜满警告
void serror(Node* head) {
system("cls");
cout << "____________________________________________________________________________________";
cout << endl;
cout << endl;
cout << " 无可用的柜子!!!";
cout << endl;
cout << "____________________________________________________________________________________";
cout << endl;
system("pause");
system("cls");
}
//派送快递
int sedelivery(Node* head) {
int list[25];
int i = 0;
int k = 0;
Node *p0,*p1,*p2;
p0 = head;
p2 = head;
p1 = new Node;
while (p2->prev != NULL) {
list[i] = p2->num;
p2 = p2->prev;
i++;
}
string size,pnum;
unsigned seed;
time_t now = time(0);
seed = time(0);
srand(seed);
cout << "____________________________________________________________________________________";
cout << endl;
cout << endl;
cout << " 包裹大小(small | medium | large):"; cin >> size;
cout << endl;
cout << endl;
cout << " 手机号码:"; cin >> pnum;
cout << endl;
cout << "____________________________________________________________________________________";
cout << endl;
if (pnum.length() != 11) {
cout << " 请输入正确的手机号码!!!";
cout << endl;
system("pause");
system("cls");
return -1;
}
else p1->pnum = pnum;
if (size == "small") {
int j = 1;
for (; j <= 10; j++) {
for (; k <= i; k++) {
if (k == i) {
p1->num = j;
break;
}
if (j == list[k]) {
k = 0;
break;
}
}
if (k != 0)break;
}if (j == 11)return 0;
}
else if (size == "medium") {
int j = 11;
for (; j <= 20; j++) {
for (; k <= i; k++) {
if (k == i) {
p1->num = j;
break;
}
if (j == list[k]) {
k = 0;
break;
}
}
if (k != 0)break;
}if (j == 21)return 0;
}
else if (size == "large") {
int j = 21;
for (; j <= 25; j++) {
for (; k <= i; k++) {
if (k == i) {
p1->num = j;
break;
}
if (j == list[k]) {
k = 0;
break;
}
}
if (k != 0)break;
}if (j == 26)return 0;
}
else {
cout << " 请输入正确的包裹大小!!!";
cout << endl;
system("pause");
system("cls");
return -1;
}
p1->tnum = now;
p1->pcode = rand();
p1->prev = p0;
p0->next = p1;
p1->next = NULL;
head = p1;
cout << " 派送成功!!!";
cout << endl;
cout << " 包裹将投放到" << p1->num << "号柜";
cout << endl;
system("pause");
system("cls");
return 1;
}
//超时快递
int iexpress(Node* head) {
int n;
unsigned seed;
time_t now = time(0);
seed = time(0);
srand(seed);
Node *p0,*p1;
p0 = head;
while (p0->prev->prev != NULL)p0 = p0->prev;
p1 = p0;
while (p0 != NULL) {
if (p0->tnum+86400 <= now) {
char* dt = ctime(&p0->tnum);
cout << "____________________________________________________________________________________";
cout << endl;
cout << endl;
cout << " 柜号:" << p0->num << endl;
cout << " 时间:" << dt << endl;
cout << " 手机号码:" << p0->pnum;
cout << endl;
cout << "____________________________________________________________________________________";
cout << endl;
}
else break;
p0 = p0->next;
}
cout << endl << " 输入要重放的智能柜的编号(输入'0'返回):";
cin >> n;
if (n == 0);
else {
while (p1 != NULL) {
if (p1->tnum + 86400 <= now) {
if (p1->num == n) {
if (p1 == head) {
p1->tnum = now;
p1->pcode = rand();
cout << endl << " 操作成功!!!";
cout << endl;
cout << endl;
system("pause");
system("cls");
return 1;
}
else {
p1->prev->next = p1->next;
p1->next->prev = p1->prev;
p1->tnum = now;
p1->pcode = rand();
p1->prev = head;
head->next = p1;
p1->next = NULL;
cout << endl << " 操作成功!!!";
cout << endl;
cout << endl;
system("pause");
system("cls");
return 2;
}
}
}
else {
cout << endl << " 操作失败!!!";
cout << endl;
cout << endl;
system("pause");
system("cls");
return 1;
}
p1 = p1->next;
}
}
system("cls");
return 1;
}
//文件输出
void iinformation(Node* head) {
int j = 0;
Node *p0;
p0 = head;
int list1[25];
int list2[25];
string list3[25];
int list4[25];
while (p0->prev != NULL) {
list1[j] = p0->num;
list2[j] = p0->tnum;
list3[j] = p0->pnum;
list4[j++] = p0->pcode;
p0 = p0->prev;
}
ofstream file1;
file1.open("num.txt");
ofstream file2;
file2.open("tnum.txt");
ofstream file3;
file3.open("pnum.txt");
ofstream file4;
file4.open("pcode.txt");
for (j = j - 1; j >= 0;) {
file1 << list1[j] << endl;
file2 << list2[j] << endl;
file3 << list3[j] << endl;
file4 << list4[j--] << endl;
}
file1.close();
file2.close();
file3.close();
file4.close();
}
//快递员系统界面
int initialization(Node* head) {
int n;
cout << "____________________________________________________________________________________" << endl;
cout << "| |" << endl;
cout << "| 智能柜管理系统 |" << endl;
cout << "| |" << endl;
cout << "| 1.取出快递 |" << endl;
cout << "| |" << endl;
cout << "| 2.放置快递 |" << endl;
cout << "| |" << endl;
cout << "| 3.查询超时快递 |" << endl;
cout << "| |" << endl;
cout << "| 0.注销 |" << endl;
cout << "| |" << endl;
cout << "|__________________________________________________________________________________|" << endl;
cout << endl << " 输入对应数字进入相应功能:";
cin >> n;
switch (n) {
case 1:
system("cls");
return 1;
case 2:
system("cls");
return 2;
case 3:
system("cls");
return 3;
case 0:
system("cls");
return 0;
default:
system("cls");
return -1;
}
}
//登录错误提示
void lerror() {
cout << "____________________________________________________________________________________";
cout << endl;
cout << endl;
cout << " 账号或密码错误!!!";
cout << endl;
cout << endl;
cout << "____________________________________________________________________________________";
cout << endl;
system("pause");
system("cls");
}
//登录系统
int lsystem() {
int j = 0;
int anumber;
int password;
int list1[10];
int list2[10];
ifstream file1("anumber.txt");
while (!file1.eof())
file1 >> list1[j++];
file1.close();
j = 0;
ifstream file2("password.txt");
while (!file2.eof())
file2 >> list2[j++];
file2.close();
cout << "____________________________________________________________________________________";
cout << endl;
cout << endl;
cout << " 账号:"; cin >> anumber;
cout << endl;
cout << endl;
cout << " 密码:"; cin >> password;
cout << endl;
cout << "____________________________________________________________________________________";
for (int i = 0;i < j; i++) {
if (list1[i] == anumber && list2[i] == password) {
system("cls");
return 1;
}
else {
system("cls");
return -1;
}
}
return -1;
}
//系统界面
int linterface() {
int n;
cout << "____________________________________________________________________________________" << endl;
cout << "| |" << endl;
cout << "| 智能柜管理系统 |" << endl;
cout << "| |" << endl;
cout << "| 1.取快递 |" << endl;
cout << "| |" << endl;
cout << "| 2.快递员登录 |" << endl;
cout << "| |" << endl;
cout << "| 0.退出 |" << endl;
cout << "| |" << endl;
cout << "|__________________________________________________________________________________|" << endl;
cout << endl << " 输入对应数字进入相应功能:";
cin >> n;
switch (n) {
case 1:
system("cls");
return 1;
case 2:
system("cls");
return 2;
case 0:
exit(1);
default:
system("cls");
return -1;
}
}
/*
n为系统界面返回值 1为取件系统 2为快递员登录系统界面 -1为循环
m为取件系统返回值 -1为取件失败 其他为取件成功
j为登录系统返回值 1为登陆成功 -1为登录失败
k为快递员系统界面返回值 1为柜子界面 2为派送快递 3为超时快递 0为注销
l为柜子界面返回值 0为返回 -1为循环 其他为快递员取件
p为派送快递返回值 0为柜满 1为成功 -1为返回
o为超时快递返回值 1为成功 2为失败
*/
int main() {
int n,m,j,k,l,p,o;
do {
n = linterface();
if (n == 1) {
m = pcode();
if (m == -1) {
freaction();
n = -1;
}
else {
rreaction(m);
n = -1;
}
}
else if (n == 2) {
j = lsystem();
if (j == 1) {
Node *head;
head = init();
head = autoinput(head);
do {
k = initialization(head);
if (k == 1) {
do {
l = ginformation(head);
if (l > 0) {
head = dnode(head, l);
l = -1;
}
else if (l == 0) {
k = -1;
break;
}
} while (l == -1);
}
else if (k == 2) {
p = sedelivery(head);
if (p == 0) {
serror(head);
k = -1;
}
else if (p == 1) {
head = head->next;
k = -1;
}
else if (p == -1) {
k = -1;
}
}
else if (k == 3) {
o = iexpress(head);
if(o == 2)head = head->next;
k = -1;
}
else if (k == 0){
iinformation(head);
n = -1;
break;
}
else {
k = -1;
}
} while (k == -1);
}
else {
lerror();
n = -1;
}
}
} while (n == -1);
}
|