C++航空系统

时间:2022-08-28 13:01:23
/*
* SHA-256 implementation, Mark 2
*
* Copyright (c) 2010,2014 Ilya O. Levin, http://www.literatecode.com
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include "sha256.h"
/* #define MINIMIZE_STACK_IMPACT */ #ifdef __cplusplus
extern "C" {
#endif #define FN_ inline static static const uint32_t K[64] = {
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
}; #ifdef MINIMIZE_STACK_IMPACT
static uint32_t W[64];
#endif /* -------------------------------------------------------------------------- */
FN_ uint8_t _shb(uint32_t x, uint32_t n)
{
return ( (x >> (n & 31)) & 0xff );
} /* _shb */ /* -------------------------------------------------------------------------- */
FN_ uint32_t _shw(uint32_t x, uint32_t n)
{
return ( (x << (n & 31)) & 0xffffffff );
} /* _shw */ /* -------------------------------------------------------------------------- */
FN_ uint32_t _r(uint32_t x, uint8_t n)
{
return ( (x >> n) | _shw(x, 32 - n) );
} /* _r */ /* -------------------------------------------------------------------------- */
FN_ uint32_t _Ch(uint32_t x, uint32_t y, uint32_t z)
{
return ( (x & y) ^ ((~x) & z) );
} /* _Ch */ /* -------------------------------------------------------------------------- */
FN_ uint32_t _Ma(uint32_t x, uint32_t y, uint32_t z)
{
return ( (x & y) ^ (x & z) ^ (y & z) );
} /* _Ma */ /* -------------------------------------------------------------------------- */
FN_ uint32_t _S0(uint32_t x)
{
return ( _r(x, 2) ^ _r(x, 13) ^ _r(x, 22) );
} /* _S0 */ /* -------------------------------------------------------------------------- */
FN_ uint32_t _S1(uint32_t x)
{
return ( _r(x, 6) ^ _r(x, 11) ^ _r(x, 25) );
} /* _S1 */ /* -------------------------------------------------------------------------- */
FN_ uint32_t _G0(uint32_t x)
{
return ( _r(x, 7) ^ _r(x, 18) ^ (x >> 3) );
} /* _G0 */ /* -------------------------------------------------------------------------- */
FN_ uint32_t _G1(uint32_t x)
{
return ( _r(x, 17) ^ _r(x, 19) ^ (x >> 10) );
} /* _G1 */ /* -------------------------------------------------------------------------- */
FN_ uint32_t _word(uint8_t *c)
{
return ( _shw(c[0], 24) | _shw(c[1], 16) | _shw(c[2], 8) | (c[3]) );
} /* _word */ /* -------------------------------------------------------------------------- */
FN_ void _addbits(sha256_context *ctx, uint32_t n)
{
if ( ctx->bits[0] > (0xffffffff - n) )
ctx->bits[1] = (ctx->bits[1] + 1) & 0xFFFFFFFF;
ctx->bits[0] = (ctx->bits[0] + n) & 0xFFFFFFFF;
} /* _addbits */ /* -------------------------------------------------------------------------- */
static void _hash(sha256_context *ctx)
{
register uint32_t a, b, c, d, e, f, g, h, i;
uint32_t t[2];
#ifndef MINIMIZE_STACK_IMPACT
uint32_t W[64];
#endif a = ctx->hash[0];
b = ctx->hash[1];
c = ctx->hash[2];
d = ctx->hash[3];
e = ctx->hash[4];
f = ctx->hash[5];
g = ctx->hash[6];
h = ctx->hash[7]; for (i = 0; i < 64; i++) {
if ( i < 16 )
W[i] = _word(&ctx->buf[_shw(i, 2)]);
else
W[i] = _G1(W[i - 2]) + W[i - 7] + _G0(W[i - 15]) + W[i - 16]; t[0] = h + _S1(e) + _Ch(e, f, g) + K[i] + W[i];
t[1] = _S0(a) + _Ma(a, b, c);
h = g;
g = f;
f = e;
e = d + t[0];
d = c;
c = b;
b = a;
a = t[0] + t[1];
} ctx->hash[0] += a;
ctx->hash[1] += b;
ctx->hash[2] += c;
ctx->hash[3] += d;
ctx->hash[4] += e;
ctx->hash[5] += f;
ctx->hash[6] += g;
ctx->hash[7] += h;
} /* _hash */ /* -------------------------------------------------------------------------- */
void sha256_init(sha256_context *ctx)
{
if ( ctx != NULL ) {
ctx->bits[0] = ctx->bits[1] = 0;
ctx->len = 0;
ctx->hash[0] = 0x6a09e667;
ctx->hash[1] = 0xbb67ae85;
ctx->hash[2] = 0x3c6ef372;
ctx->hash[3] = 0xa54ff53a;
ctx->hash[4] = 0x510e527f;
ctx->hash[5] = 0x9b05688c;
ctx->hash[6] = 0x1f83d9ab;
ctx->hash[7] = 0x5be0cd19;
}
} /* sha256_init */ /* -------------------------------------------------------------------------- */
void sha256_hash(sha256_context *ctx, const void *data, size_t len)
{
register size_t i;
const uint8_t *bytes = (const uint8_t *)data; if ( (ctx != NULL) && (bytes != NULL) )
for (i = 0; i < len; i++) {
ctx->buf[ctx->len] = bytes[i];
ctx->len++;
if (ctx->len == sizeof(ctx->buf) ) {
_hash(ctx);
_addbits(ctx, sizeof(ctx->buf) * 8);
ctx->len = 0;
}
}
} /* sha256_hash */ /* -------------------------------------------------------------------------- */
void sha256_done(sha256_context *ctx, uint8_t *hash)
{
register uint32_t i, j; if ( ctx != NULL ) {
j = ctx->len % sizeof(ctx->buf);
ctx->buf[j] = 0x80;
for (i = j + 1; i < sizeof(ctx->buf); i++)
ctx->buf[i] = 0x00; if ( ctx->len > 55 ) {
_hash(ctx);
for (j = 0; j < sizeof(ctx->buf); j++)
ctx->buf[j] = 0x00;
} _addbits(ctx, ctx->len * 8);
ctx->buf[63] = _shb(ctx->bits[0], 0);
ctx->buf[62] = _shb(ctx->bits[0], 8);
ctx->buf[61] = _shb(ctx->bits[0], 16);
ctx->buf[60] = _shb(ctx->bits[0], 24);
ctx->buf[59] = _shb(ctx->bits[1], 0);
ctx->buf[58] = _shb(ctx->bits[1], 8);
ctx->buf[57] = _shb(ctx->bits[1], 16);
ctx->buf[56] = _shb(ctx->bits[1], 24);
_hash(ctx); if ( hash != NULL )
for (i = 0, j = 24; i < 4; i++, j -= 8) {
hash[i ] = _shb(ctx->hash[0], j);
hash[i + 4] = _shb(ctx->hash[1], j);
hash[i + 8] = _shb(ctx->hash[2], j);
hash[i + 12] = _shb(ctx->hash[3], j);
hash[i + 16] = _shb(ctx->hash[4], j);
hash[i + 20] = _shb(ctx->hash[5], j);
hash[i + 24] = _shb(ctx->hash[6], j);
hash[i + 28] = _shb(ctx->hash[7], j);
}
}
} /* sha256_done */ /* -------------------------------------------------------------------------- */
void sha256(const void *data, size_t len, uint8_t *hash)
{
sha256_context ctx; sha256_init(&ctx);
sha256_hash(&ctx, data, len);
sha256_done(&ctx, hash);
} /* sha256 */ } /*********************************************************************************/ #include<iostream>
#include<algorithm>
#include<windows.h>
#include<string>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<stdio.h>
using namespace std;
class Time {
private:
int month;
int day;
int houor;
int minute;
public:
Time();
Time(int m, int d, int h, int mi);
int get_month();
int get_day();
int get_houor();
int get_minute();
void show();
bool operator<(const Time &t);
bool check();
};
Time::Time() {
;
}
Time::Time(int m, int d, int h, int mi) {
month = m;
day = d;
houor = h;
minute = mi;
}
int Time::get_month() {
return month;
}
int Time::get_day(){
return day;
}
void Time::show() {
printf("%02d月%02d日 %02d:%02d ", month, day, houor, minute);
}
bool Time::operator<(const Time &t) {
if (month < t.month)
return true;
else if (month==t.month && day< t.day)
return true;
else if (month==t.month&& day==t.day && houor < t.houor)
return true;
else if (month==t.month && day==t.day&& houor==t.houor && minute < t.minute)
return true;
else
return false;
}
bool Time::check(){
if(!(month>=0 && month<=12 && day>=1 && day<=31 && houor>=0 && houor<=24 && minute>=0 && minute<=60))
return false;
return true;
}
class Passenger {
private:
string name;
string passport;
string country;
string tel_number;
public:
Passenger();
Passenger(string n, string p, string c, string t);
string get_passport();
void Delete();
void set(string n, string p, string c, string t);
void show();
}*TP;
int Count;
Passenger::Passenger() {
;
}
Passenger::Passenger(string n, string p, string c, string t) {
name = n;
passport = p;
country = t;
tel_number = t;
}
string Passenger::get_passport() {
return passport;
}
void Passenger::Delete() {
this->name = " ";
this->passport = " ";
this->country = " ";
this->tel_number = " ";
}
void Passenger::set(string n, string p, string c, string t) {
name = n;
passport = p;
country = t;
tel_number = t;
} void Passenger::show() {
cout << name << " " << passport << " " << country << " " << tel_number << endl;
} struct user_data
{
string ID;
int Role;
int i;
};
class User {
private:
user_data *u;
int length;
int number;
public:
User(int length=100,int number=0){
u=new user_data[length];
this->number=number;
}
void add(string ID,int role,int i){
u[number].ID=ID;
u[number].Role=role;
u[number].i=i;
number++;
}
int change_i(string s){
for(int i=0;i<number;i++){
if(u[i].ID==s){
u[i].i=u[i].i-1;
}
}
}
user_data &get(string s){
int flag=0;
for(int i=0;i<number;i++){
if(u[i].ID==s){
flag=1;
return u[i];
}
}
if(flag==0){
cout<<"用户名错误"<<endl;
exit(0);
}
}
}U; class Flight {
private:
string flight_number;
string type;
string origin_place;
string dest_place;
Time start_time;
Time end_time;
int price;
char S[20][20];
Passenger P[20][20];
int seat;
int x;
int y;
int a_seat;
public:
Flight();
Flight(string f, string t, string o, string d, Time start, Time end, int p, int x, int y, int a = 0);
void set(string f, string t, string o, string d, Time start, Time end, int p, int x, int y, int a = 0);
string get_flight_number();
string get_origin_place();
string get_dest_place();
Time get_start_time();
bool book(Passenger p);
bool book(Passenger p, int x1, int y1);
bool cancel(string s);
void show();
void show_seat();
void show_passenger();
};
Flight::Flight() {
;
}
Flight::Flight(string f, string t, string o, string d, Time start, Time end, int p, int x,int y, int a ) {
this->flight_number = f;
this->origin_place = o;
this->dest_place = d;
this->start_time = start;
this->end_time = end;
this->price = p;
this->type = t;
this->x = x;
this->y = y;
this->a_seat = 0;
this->seat = x * y;
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++)
S[i][j] = '0';
}
}
void Flight::set(string f, string t, string o, string d, Time start, Time end, int p, int x,int y, int a) {
this->flight_number = f;
this->origin_place = o;
this->dest_place = d;
this->start_time = start;
this->end_time = end;
this->price = p;
this->type = t;
this->x = x;
this->y = y;
this->a_seat = 0;
this->seat = x * y;
for (int i = 0; i < this->x; i++) {
for (int j = 0; j < this->y; j++)
S[i][j] = '1';
}
}
string Flight::get_flight_number() {
return flight_number;
}
string Flight::get_origin_place() {
return origin_place;
}
string Flight::get_dest_place(){
return dest_place;
}
Time Flight::get_start_time(){
return start_time;
}
bool Flight::book(Passenger p) {
if (a_seat == seat)
return false;
srand((unsigned)time(NULL));
int x1 = rand() % x;
int y1 = rand() % y;
while (S[x1][y1] != '1') {
x1 = rand() % x;
y1 = rand() % y;
}
P[x1][y1] = p;
//P[x1][y1].show();
S[x1][y1] = '*';
a_seat++;
TP[Count++] = p;
return true;
}
bool Flight::book(Passenger p, int x1, int y1) {
if (a_seat == seat) {
cout << "该航班已没有剩余座位" << endl;
return false;
}
if (S[x1][y1] == '*'){
cout << "该座位已被预订" << endl;
return false;
}
S[x1][y1] = '*';
P[x1][y1] = p;
//P[x1][y1].show();
a_seat++;
TP[Count++] = p;
return true; }
bool Flight::cancel(string s) {
int flag = false;
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
if (S[i][j] == '*') {
//cout<<P[i][j].get_passport();
if (P[i][j].get_passport() == s) {
flag = true;
S[i][j] = '1';
P[i][j].Delete();
}
}
}
}
if (flag == false)
cout << "不存在此护照号" << endl;
return flag;
}
void Flight::show() {
printf("%-10s%-30s%-10s%-10s ",flight_number.c_str(),type.c_str(),origin_place.c_str(),dest_place.c_str());
start_time.show();
cout<<" ";
end_time.show();
printf("%10d%10d\n",seat,a_seat);
}
void Flight::show_seat() {
cout << " ";
for (int i = 0; i < y; i++)
printf("%d ",i);
cout << endl;
for (int i = 0; i < x; i++) {
printf("%02d ",i);
for (int j = 0; j < y; j++) {
cout << S[i][j]<<" ";
}
cout << endl;
}
}
void Flight::show_passenger(){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
if(S[i][j]=='*')
P[i][j].show();
}
}
}
class Menu {
private:
int length;
int number;
int max_increase;
Flight *F;
public:
Menu(int n = 100, int m = 10);
void Increase();
bool Add(string f, string t, string o, string d, Time start, Time end, int p, int x,int y, int a = 0);
void Delete(string f);
void Query();
void Query(string f);
void Query(string s1, string s2);
void Query(Time t);
void Query(string s1, string s2, Time t);
bool Book(string f,Passenger p);
bool Book(string f, Passenger p, int x1, int y1);
void Refund(string f);
void show_seat(string f);
void show_passenger(string f);
bool cancel(string s1, string s2);
};
Menu::Menu(int n, int m) {
F = new Flight[n];
length = n;
max_increase = m;
number = 0;
}
void Menu::Increase() {
Flight *tF = new Flight[length + max_increase];
for (int i = 0; i < length; i++) {
tF[i] = F[i];
}
delete[]F;
F = tF;
length += max_increase;
}
bool Menu::Add(string f, string t, string o, string d, Time start, Time end, int p, int x,int y, int a) {
if (number + 1 <= length) {
Increase();
}
F[number].set(f,t,o,d,start,end,p,x,y,a);
number = number + 1;
return true;
}
void Menu::Delete(string f) {
for (int i = 0; i <= number; i++) {
if (f == F[i].get_flight_number()) {
for (int j = i; j <= number; j++)
F[j] = F[j + 1];
//delete F[j + 1];
number--;
}
}
}
void Menu::Query() {
printf("%-10s%-30s%-10s%-10s%-20s%-20s%-10s%-10s\n","航班号","飞机类型","出发地","目的地","出发时间","到达时间","载客量","已预定数");
for (int i = 0; i <number; i++) {
F[i].show();
}
}
void Menu::Query(string f) {
bool falg = false;
for (int i = 0; i < number; i++) {
if (F[i].get_flight_number() == f) {
F[i].show();
falg = true;
}
}
if (falg == false)
cout << "无此航班" << endl;
}
void Menu::Query(Time t) {
Time t1(t.get_month(), t.get_day(), 0, 0);
Time t2(t.get_month(), t.get_day() + 1, 0, 0);
bool flag = false;
for (int i = 0; i < number; i++) {
if (t1 < F[i].get_start_time() && F[i].get_start_time() < t2) {
flag = true;
F[i].show();
}
}
if (flag == false)
cout << "无符合条件的航班" << endl;
}
void Menu::Query(string s1, string s2) {
bool flag = false;
for (int i = 0; i < number; i++) {
if (F[i].get_origin_place() == s1 && F[i].get_dest_place() == s2 ) {
F[i].show();
flag = true;
}
}
if (flag == false)
cout << "无符合条件的航班" << endl;
}
void Menu::Query(string s1, string s2, Time t) {
Time t1(t.get_month(), t.get_day(), 0, 0);
Time t2(t.get_month(), t.get_day() + 1, 0, 0);
bool flag = false;
for (int i = 0; i < number; i++) {
if (F[i].get_origin_place() == s1 && F[i].get_dest_place() == s2 && t1 < F[i].get_start_time() && F[i].get_start_time() < t2) {
F[i].show();
flag = true;
}
}
}
bool Menu::Book(string f,Passenger p) {
for (int i = 0; i <= number; i++) {
if (f == F[i].get_flight_number()) {
bool J = F[i].book(p);
if (J == false)
return false;
else
return true;
}
}
}
bool Menu::Book(string f, Passenger p, int x1, int y1) {
for (int i = 0; i <= number; i++) {
if (f == F[i].get_flight_number()) {
bool J = F[i].book(p,x1,y1);
if (J == false)
return false;
else
return true;
}
}
}
void Menu::Refund(string f) {
bool flag = false;
for (int i = 0; i < number; i++) {
if (f == F[i].get_flight_number()) {
flag == true;
for (int j = i; j < number-1; j++) {
F[j] = F[j + 1];
}
}
}
number--;
if (flag == false) {
cout << "无此航班" << endl;
}
}
void Menu::show_seat(string f) {
for (int i = 0; i <number; i++) {
if (f == F[i].get_flight_number())
F[i].show_seat();
}
}
bool Menu::cancel(string s1, string s2) {
bool flag = false;
for (int i = 0; i < number; i++) {
if (s1 == F[i].get_flight_number()) {
flag = true;
if (F[i].cancel(s2) == false)
return false;
}
}
if (flag == false) {
cout << "无此航班";
}
return flag;
}
void Menu::show_passenger(string f){
for(int i=0;i<number;i++){
if(f==F[i].get_flight_number()){
F[i].show_passenger();
}
}
}
class Check{
public:
bool time(Time t){
return t.check();
}
bool time(Time t1,Time t2){
if(t1<t2)
return true;
else
return false;
}
bool tel_number(string s){
int len=s.length();
for(int i=0;i<len;i++)
if(!s[i]>='0' && s[i]<='9')
return false;
return true;
}
};
/****************************************************************************************************/
Menu M;
Check C;
void Init() {
FILE *P;
if ((P = fopen("data.txt", "r+")) == NULL) {
cout << "Error" << endl;
exit(0);
}
char f[100];
char t[100];
char o[100];
char d[100];
Time start;
Time end;
int p;
int x;
int y;
int a;
int m1, d1, h1, mi1;
int m2, d2, h2, mi2;
while (fscanf(P, "%s%s%s%s%d%d%d%d%d%d%d%d%d%d%d%d", f, t, o, d, &m1, &d1, &h1, &mi1, &m2, &d2, &h2, &mi2, &p, &x,&y,&a) != EOF) {
M.Add(f, t, o, d, Time(m1, d1, h1, mi1), Time(m2, d2, h2, mi2), p, x,y,a);
}
//M.Query();
}
void Init2(){
FILE *P;
TP=new Passenger[10000];
Count=0;
if((P=fopen("Passenger.txt","r+"))==NULL){
cout<<"error"<<endl;
exit(0);
}
char n[100];
char p[100];
char c[100];
char t[100];
while(fscanf(P,"%s%s%s%s",n,p,c,t)!=EOF){
M.Book("KN5838",Passenger(n,p,c,t));
}
}
void p_query(){
for(int i=0;i<Count;i++)
TP[i].show();
}
void p_query(string s){
bool flag=false;
for(int i=0;i<Count;i++){
if(s==TP[i].get_passport()){
TP[i].show();
flag=true;
}
}
if(flag==false)
cout<<"无此证件号"<<endl;
} bool enroll(){
FILE *P;
srand((unsigned)time(NULL));
char s1[100],s2[100];
uint8_t hash[SHA256_BYTES];
uint8_t hash1[SHA256_BYTES];
size_t i, j;
int judge;
cout<<"1.管理员注册"<<endl;
cout<<"2.普通用户注册:"<<endl;
cin>>judge;
cout<<"输入用户名:";
cin>>s1;
cout<<"输入密码:";
cin>>s2;
// judge=rand()%2;
if(judge==2){
U.add(s1,judge,0);
if((P=fopen("ID1.txt","r+"))==NULL){
cout<<"can not open ID1.txt"<<endl;
return false;
}
char *salt=new char[20];
for(int i=0;i<16;i++)
salt[i]=33+rand()%95;
salt[16]='\0';
int l1=strlen(s2);
int t=l1+16;
for(int i=l1;i<t;i++)
s2[i]=salt[i-l1];
s2[t]='\0';
//for(int i=0;i<strlen(s2);i++)
// cout<<s2[i];
//cout<<endl;
sha256(s2,strlen(s2),hash);
//for(j=0;j<SHA256_BYTES;j++)
// printf("%0x",hash[j]);
fprintf(P,"%s %s\n",s1,salt);
for(j=0;j<SHA256_BYTES;j++)
fprintf(P,"%x ",hash[j]);
fprintf(P,"\n");
fclose(P);
}
else if(judge==1){
int i=1000;
U.add(s1,judge,i);
if((P=fopen("ID2.txt","r+"))==NULL){
cout<<"can not open ID2.txt"<<endl;
exit(0);
}
fprintf(P,"%s\n",s1);
for(i=1;i<=1001;i++){
if(i==1){
sha256(s2,strlen(s2),hash);
// for(j=0;j<SHA256_BYTES;j++)
// printf("%x",hash[j]);
cout<<endl;
}
else{
for(j=0;j<SHA256_BYTES;j++)
hash1[j]=hash[j];
sha256(hash1,SHA256_BYTES,hash);
}
}
for(j=0;j<SHA256_BYTES;j++){
fprintf(P,"%x ",hash[j]); }
// for(j=0;j<SHA256_BYTES;j++)
// printf("%x",hash[j]);
//cout<<endl;
fclose(P);
}
return true;
}
bool land1(){
FILE *P;
if((P=fopen("ID1.txt","r"))==NULL){
cout<<"can not open ID1.txt"<<endl;
return false;
}
uint8_t hash[SHA256_BYTES];
uint8_t hash1[SHA256_BYTES];
size_t j;
char s[100],salt[100];
cout<<"输入用户名:";
char s1[100],s2[100];
cin>>s1;
cout<<"输入密码:";
cin>>s2;
while(fscanf(P,"%s%s",s,salt)!=EOF){
if(strcmp(s,s1)==0){
for(j=0;j<SHA256_BYTES;j++)
fscanf(P,"%x",&hash[j]);
break;
}
}
int l1=strlen(s2);
int t=l1+16;
for(int i=l1;i<t;i++)
s2[i]=salt[i-l1];
s2[t]='\0';
// for(j=0;j<strlen(s2);j++)
// cout<<s2[j];
//cout<<endl;
//for(j=0;j<SHA256_BYTES;j++)
// printf("%0x",hash[j]);
//cout<<endl;
sha256(s2,strlen(s2),hash1);
//for(j=0;j<SHA256_BYTES;j++)
// printf("%0x",hash1[j]);
for(j=0;j<SHA256_BYTES;j++){
if(hash[j]!=hash1[j])
return false;
}
cout<<"登陆成功"<<endl;
return true;
}
bool judge(uint8_t h1[],uint8_t h2[]){
uint8_t h[SHA256_BYTES];
sha256(h1,SHA256_BYTES,h);
size_t j;
for(j=0;j<SHA256_BYTES;j++){
if(h[j]!=h2[j])
return false;
}
return true;
}
bool land2(){
char s1[100],s2[100];
cout<<"请输入用户名:";
cin>>s1;
cout<<"请输入密码:";
cin>>s2;
FILE *P;
user_data u=U.get(s1);
char s[100];
int i=u.i;
uint8_t hash[SHA256_BYTES];
uint8_t hash1[SHA256_BYTES];
uint8_t thash[SHA256_BYTES];
size_t j;
if((P=fopen("ID2.txt","r+"))==NULL){
cout<<"error"<<endl;
return false;
}
while(fscanf(P,"%s",s)!=EOF){
if(strcmp(s1,s)==0){
for(j=0;j<SHA256_BYTES;j++){
fscanf(P,"%x",&thash[j]);
}
break;
}
}
fclose(P);
//for(j=0;j<SHA256_BYTES;j++)
// printf("%x",thash[j]);
//cout<<endl;
for(int k=1;k<=i;k++){
if(k==1){
sha256(s2,strlen(s2),hash);
}
else{
for(j=0;j<SHA256_BYTES;j++)
hash1[j]=hash[j];
sha256(hash1,SHA256_BYTES,hash);
}
}
/*for(j=0;j<SHA256_BYTES;j++){
if(thash[j]!=hash[j])
return false;
}*/
if(judge(hash,thash)==false)
return false;
U.change_i(s1);
for(j=0;j<SHA256_BYTES;j++)
fprintf(P,"%0x",hash[j]);
cout<<"登陆成功"<<endl;
return true;
}
void Operation() {
int judge,Role,operation;
cout<<"请选择 1.注册 2.登陆"<<endl;
while(cin>>judge){
if(judge==1){
if(enroll()==true){
cout<<"注册成功!"<<endl;
}
else{
cout<<"注册失败!"<<endl;
continue;
}
}
else if(judge==2){
cout<<"请选择 1.管理员 2.用户"<<endl;
cin>>Role;
if(Role==1){
if(land2()==true)
break;
else{
cout<<"登陆失败,请重新登陆"<<endl;
continue;
}
}
else if(Role==2){
if(land1()==true)
break;
else{
cout<<"登陆失败,请重新登陆"<<endl;
continue;
}
}
break;
}
else{
cout<<"输入不合法"<<endl;
}
}
cout<<"**************************************************************************************"<< endl;
cout<<"** **"<<endl;
cout<<"** 欢迎进入航班管理系统 **"<< endl;
cout<<"** **"<<endl;
cout<<"**************************************************************************************"<< endl;
int way;
if (Role == 1) {
cout << "请选择操作" << endl;
cout << "0.退出"<<endl;
cout << "1.查询航班信息" << endl;
cout << "2.预约航班" << endl;
cout << "3.取消航班" << endl;
cout << "4.修改航班信息" << endl;
cout << "5.查询旅客信息" << endl;
}
else if (Role == 2) {
cout << "请选择操作" << endl;
cout << "0.退出" << endl;
cout << "1.查询航班信息" << endl;
cout << "2.预约航班" << endl;
cout << "3.取消航班" << endl;
}
else {
cout << "输入不合法" << endl;
exit(0);
}
while (cin >> operation) {
if (operation == 0)
break;
else if (operation == 1) {
int next = 0;
cout << "请选择" << endl;
cout << "1.查询所有航班信息" << endl;
cout << "2.输入航班号查询单个航班信息" << endl;
cout << "3.输入出发地和目的地查询航班信息" << endl;
cout << "4.输入出发时间查询航班信息" << endl;
cout << "5.输入出发地目的地和出发时间查询航班信息" << endl;
cin >> next;
if(next==1){
M.Query();
continue;
}
else if (next == 2) {
string s;
cout << "输入航班号" << endl;
cin >> s;
M.Query(s);
continue;
}
else if (next == 3) {
string s1, s2;
cout << "输入出发地和目的地" << endl;
cin >> s1 >> s2;
M.Query(s1, s2);
continue;
}
else if (next == 4) {
int m, d;
cout << "输入出发时间" << endl;
cin >> m >> d;
M.Query(Time(m, d, 0, 0));
continue;
}
else if (next == 5) {
string s1, s2;
int m, d;
cout << "输入出发地、目的地、出发时间" << endl;
cin >> s1 >> s2;
cin >> m >> d;
M.Query(s1, s2, Time(m, d, 0, d));
continue;
}
}
else if (operation == 2) {
string s;
string s1, s2, s3, s4;
int i;
bool flag;
cout << "输入航班号" << endl;
cin >> s;
cout << "请输入个人信息" << endl;
cout << "请输入您的名字:";
cin >> s1;
cout << endl;
cout << "请输入您的护照号:";
cin >> s2;
cout << endl;
cout << "请输入您的国籍:";
cin >> s3;
cout << endl;
cout << "请输入您的电话号码:";
cin >> s4;
while(C.tel_number(s4)==false){
cout<<"电话号码格式错误,请重新输入"<<endl;
cin>>s4;
}
cout << endl;
//Passenger p(s1, s2, s3, s4);
cout << "是否选择座位(1.是 2.否)" << endl;
cin >> i;
if (i == 1) {
M.show_seat(s);
int x, y;
cout << "请输入座位号(行坐标+列坐标)" << endl;
cin >> x >> y;
flag=M.Book(s,Passenger(s1,s2,s3,s4), x, y);
while (flag == false){
cout<<"订票失败"<<endl;
cout<<"请重新选择座位:";
cin>>x>>y;
flag=M.Book(s,Passenger(s1,s2,s3,s4),x,y);
}
cout<<"订票成功"<<endl;
M.show_seat(s);
}
else {
flag = M.Book(s, Passenger(s1,s2,s3,s4));
if (flag == false)
cout << "订票失败" << endl;
else
cout << "订票成功" << endl;
}
}
else if (operation == 3) {
string s1, s2;
cout << "请输入需要取消的航班号 和 你的护照号" << endl;
cin >> s1 >> s2;
bool flag=M.cancel(s1, s2);
if (flag == false)
cout << "取消航班失败" << endl;
else{
cout<<"操作成功"<<endl;
M.show_seat(s1);
}
}
else if(operation==4){ if(Role==2){
cout<<"您没有此权限"<<endl;
continue;
}
else{
int next;
cout<<"请选择"<<endl;
cout<<"1.增加航班"<<endl;
cout<<"2.删除航班"<<endl;
cin>>next;
if(next==1){
string s1;
cout<<"需要增加的航班信息"<<endl;
char f[100];
char t[100];
char o[100];
char d[100];
int p;
int x;
int y;
int a;
int m1,d1,h1,mi1;
int m2,d2,h2,mi2;
cout<<"航班号:";
cin>>f;
cout<<"飞机类型:";
cin>>t;
cout<<"出发地:";
cin>>o;
cout<<"目的地:";
cin>>d;
int flag=0;
while(flag==0){
cout<<"出发时间:";
cin>>m1>>d1>>h1>>mi1;
while(C.time(Time(m1,d1,h1,mi1))==false){
cout<<endl;
cout<<"时间不合法,请重新输入:";
cin>>m1>>d1>>h1>>mi1;
}
cout<<"到达时间:";
cin>>m2>>d2>>h2>>mi2;
while(C.time(Time(m2,d2,h2,mi2))==false){
cout<<endl;
cout<<"时间不合法,请重新输入:";
cin>>m2>>d2>>h2>>mi2;
}
if(C.time(Time(m1,d1,h1,mi1),Time(m2,d2,h2,mi2))==false){
cout<<"出发时间比到达时间晚,请重新输入"<<endl;
}
else
flag=1;
}
cout<<"价格:";
cin>>p;
cout<<"机舱行数 列数:";
cin>>x>>y;
if(M.Add(f, t, o, d, Time(m1, d1, h1, mi1), Time(m2, d2, h2, mi2), p, x,y,0)==true){
M.Query();
}
else{
cout<<"添加失败"<<endl;
}
}
else{
string number;
cout<<"需要删除的机舱号:";
cin>>number;
M.Delete(number);
M.Query();
}
}
}
else if(operation==5){
if(Role==2){
cout<<"您没有此权限:"<<endl;
continue;
}
else{
int next;
cout<<"请选择:"<<endl;
cout<<"1.查询所有乘客信息:"<<endl;
cout<<"2.查询某个航班乘客信息:"<<endl;
cout<<"3.查询单个乘客信息:"<<endl;
cin>>next;
if(next==1)
p_query();
else if(next==2){
string s;
cout<<"输入航班号"<<endl;
cin>>s;
M.show_passenger(s);
}
else if(next==3){
string s;
cout<<"输入所要查询乘客额护照号:";
cin>>s;
p_query(s);
}
}
}
}
}
int main()
{
Init();
Init2();
Operation();
return 0;
}

  sha256.h

/*
* SHA-256 implementation, Mark 2
*
* Copyright (c) 2010,2014 Ilya O. Levin, http://www.literatecode.com
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef SHA256_H_
#define SHA256_H_ #include <stddef.h>
#ifdef _MSC_VER
#ifndef uint8_t
typedef unsigned __int8 uint8_t;
#endif
#ifndef uint32_t
typedef unsigned __int32 uint32_t;
#endif
#else
#include <stdint.h>
#endif #define SHA256_BYTES 32 #ifdef __cplusplus
extern "C"
{
#endif typedef struct {
uint8_t buf[];
uint32_t hash[];
uint32_t bits[];
uint32_t len;
} sha256_context; void sha256_init(sha256_context *ctx);
void sha256_hash(sha256_context *ctx, const void *data, size_t len);
void sha256_done(sha256_context *ctx, uint8_t *hash); void sha256(const void *data, size_t len, uint8_t *hash); #ifdef __cplusplus
}
#endif #endif