实习题目之一:订票系统(source)

数据结构实习题目 数据结构课程设计任务书 实验方式与基本要求设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。(一)问题分析和任务定义对问题的描述应避开具体的算法和涉及的数据结构,它是对要完成的任务作出明确的回答。强调的是做什么,而不是怎么做。 (二)逻辑设计和数据结构的选择 阅读详情

头文件:

#ifndef USER_H
#define USER_H

#include <string>
class user
{
private:
 std::string id;//id用于登陆系统(readonly)
 std::string pwd;//密码(read and write)
 std::string power;//权限(readonly)
 std::string name;//用户真实姓名(read and write)
 std::string identity;//证件号码(read and write)
public:
 user();
 ~user();
private:
 
public://属性
 //读属性
 std::string get_id();
 std::string get_pwd();
 std::string get_power();
 std::string get_name();
 std::string get_identity();
 //写属性
 void set_power(std::string new_power);
 void set_pwd(std::string new_pwd);
 void set_name(std::string new_name);
 void set_identity(std::string new_identity);
 void set_id(std::string value);
public://方法
 void powerup(user &u,std::string new_power);//提升用户权限
 void load(std::string);
 std::string toxml();
 std::string face();
};
#endif
-------------------------------------------------------------------------------------------

#ifndef PLAN_H
#define PLAN_H
#include <string>
class plan
{
private:
 std::string id;
 std::string sta_adr;
 std::string arv_adr;
 std::string sta_time;
 std::string arv_time;
 std::string price;
 std::string zhekou;
 std::string total;
 std::string selled;
public:
 std::string get_id();
 std::string get_sta_adr();
 std::string get_arv_adr();
 std::string get_sta_time();
 std::string get_arv_time();
 float      get_price();
 float  get_zhekou();
 int   get_total();
 int   get_selled();
 int   get_remain();

 void set_id(std::string);
 void set_sta_adr(std::string);
 void set_arv_adr(std::string);
 void set_sta_time(std::string);
 void set_arv_time(std::string);
 void plan::set_price(std::string value);
 void plan::set_zhekou(std::string value);
 void plan::set_total(std::string value);
 void plan::set_selled(std::string value);
public:
 plan();
 ~plan();
 std::string toxml();
 void load(std::string &buf);
 std::string face();
 void change(std::string ,std::string );
};

#endif
-------------------------------------------------------------------------------

#ifndef SYSTEM_H
#define SYSTEM_H
#include <string>
#include <vector>

#include "user.h"
#include "plan.h"
#include "order.h"
class CSystem
{
private:
 std::vector<user> users;//所有的用户
 std::vector<plan> plans;//所有的航班
 std::vector<order> orders;//所有的订单

 user *cur_user;//当前用户
private://系统的一些设置
 char *user_file;
 char *plan_file;
 char *order_file;
private:
 //从文件中加载信息
 void load_users();
 void load_plans();
 void load_orders();
 void clear();
 void welcome();//显示欢迎信息,和版本信息

 void help();
 void login();
 void logout();
 void badcmd(std::string cmd);
 void signin();
 void show(std::vector<std::string> &);
 void insert(std::vector<std::string> &);
private://核心算法
 void show_plans();
 void show_users();
 void show_orders();

 void insert_plan(std::vector<std::string> &);
 void insert_user(std::vector<std::string> &);
 void insert_order(std::vector<std::string> &);

 void alert(std::vector<std::string> &);
 void alert_plan(std::vector<std::string> &);

 void find(std::vector<std::string> &);
 void find_plan(std::string );
 void buy_tikets(std::string );
 void return_tikets(std::string );
public:
 std::string get_cmd();//获取命令
 void parse_cmd(std::string);//解析命令
public://
 CSystem();
 ~CSystem();
 void startup();
 void shutdown();
};
#endif
--------------------------------------------------------------------------------------------

源文件;


#include <string>
#include "user.h"
#include <iostream>

using namespace std;
user::user()
{
}
user::~user()
{
}
//读属性
string user::get_id(){ return id;}
string user::get_pwd(){return pwd;}
string user::get_power(){return power;}
string user::get_name(){ return name;}
string user::get_identity(){return identity;}
 //写属性
void user::set_id(string value){id = value;}
void user::set_pwd(string new_pwd){pwd = new_pwd;}
void user::set_name(string new_name){name = new_name;}
void user::set_identity(string new_identity){identity = new_identity;}
void user::set_power(string new_power)
{
 power = new_power;
}

void user::powerup(user &u,string new_power)
{
 if(power != "admin")
 {
  cout<<"你不是管理员不能设置用户权限!"<<endl;
  return;
 }
 u.set_power(new_power);
}
void user::load(string tem)
{
 size_t sta,end;

 sta = tem.find("<id>",0);
 end = tem.find("</id>",sta);
 sta += strlen("<id>");

 id = tem.substr(sta,end-sta);

 sta = tem.find("<pwd>",0);
 end = tem.find("</pwd>",sta);
 sta += strlen("<pwd>");

 pwd = tem.substr(sta,end-sta);
 
 sta = tem.find("<power>",0);
 end = tem.find("</power>",sta);
 sta += strlen("<power>");

 power = tem.substr(sta,end-sta);
 
 sta = tem.find("<name>",0);
 end = tem.find("</name>",sta);
 sta += strlen("<name>");

 name = tem.substr(sta,end-sta);
 
 sta = tem.find("<identity>",0);
 end = tem.find("</identity>",sta);
 sta += strlen("<identity>");

 identity = tem.substr(sta,end-sta);
}
string user::toxml()
{
 string tem;
 tem += "<user><id>" + id + "</id>";
 tem += "<power>" + power + "</power>";
 tem += "<name>" + name + "</name>";
 tem += "<pwd>" + pwd + "</pwd>";
 tem += "<identity>" + identity + "</identity></user>";
 return tem;
}
string user::face()
{
  string result;
  result += "user id:" + id + '/n';
  result += "user pwd:" + pwd + '/n';
  result += "ture name:" + name +'/n';
  result += "power:" + power +'/n';
  result += "identity:" + identity + '/n';
  return result;
}
-------------------------------------------------------------------------------------

#include "plan.h"
#include <string>
using namespace std;

plan::plan()
{
}
plan::~plan()
{
}
string plan::get_id(){return id;}
string plan::get_sta_adr(){return sta_adr;}
string plan::get_arv_adr(){return arv_adr;}
string plan::get_sta_time(){return sta_time;}
string plan::get_arv_time(){return arv_time;}
float  plan::get_price(){return atof(price.c_str());}
float  plan::get_zhekou(){return atof(zhekou.c_str());}
int    plan::get_total(){return atoi(total.c_str());}
int    plan::get_selled(){return atoi(selled.c_str());}
int    plan::get_remain(){return get_total()-get_selled();};

void plan::set_id(string value){id = value;}
void plan::set_sta_adr(string new_saddr){sta_adr = new_saddr;}
void plan::set_arv_adr(string new_aaddr){arv_adr = new_aaddr;}
void plan::set_sta_time(string new_stime){sta_time = new_stime;}
void plan::set_arv_time(string new_atime){arv_time = new_atime;}
void plan::set_price(string value){price = value;}
void plan::set_zhekou(string value){zhekou = value;}
void plan::set_total(string value){total=value;}
void plan::set_selled(string value){selled=value;}

string plan::toxml()
{
 string result;
 result += "<plan><id>" + id + "</id>";
 result += "<sta_adr>" + sta_adr + "</sta_adr>";
 result += "<arv_adr>" + arv_adr + "</arv_adr>";
 result += "<sta_time>" + sta_time + "</sta_time>";
 result += "<arv_time>" + arv_time + "</arv_time>";
 result += "<price>" + price + "</price>";
 result += "<zhekou>" + zhekou + "</zhekou>";
 result += "<total>" + total + "</total>";
 result += "<selled>" + selled + "</selled></plan>";
 return result;
}
void plan::load(string &buf)
{
 size_t sta=0,end=0;

 sta = buf.find("<id>",0);
 end = buf.find("</id>",0);
 sta += strlen("<id>");

 id = buf.substr(sta,end-sta);
 

 sta = buf.find("<sta_adr>",0);
 end = buf.find("</sta_adr>",0);
 sta += strlen("<sta_adr>");

 sta_adr = buf.substr(sta,end-sta);
 

 sta = buf.find("<arv_adr>",0);
 end = buf.find("</arv_adr>",0);
 sta += strlen("<arv_adr>");

 arv_adr = buf.substr(sta,end-sta);
 

 sta = buf.find("<sta_time>",0);
 end = buf.find("</sta_time>",0);
 sta += strlen("<sta_time>");

 sta_time = buf.substr(sta,end-sta);
 

 sta = buf.find("<arv_time>",0);
 end = buf.find("</arv_time>",0);
 sta += strlen("<arv_time>");

 arv_time = buf.substr(sta,end-sta);
 

 sta = buf.find("<price>",0);
 end = buf.find("</price>",0);
 sta += strlen("<price>");

 price = buf.substr(sta,end-sta);
 

 sta = buf.find("<zhekou>",0);
 end = buf.find("</zhekou>",0);
 sta += strlen("<zhekou>");

 zhekou = buf.substr(sta,end-sta);
 

 sta = buf.find("<total>",0);
 end = buf.find("</total>",0);
 sta += strlen("<total>");
 
 total = buf.substr(sta,end-sta);
 
 sta = buf.find("<selled>",0);
 end = buf.find("</selled>",0);
 sta += strlen("<selled>");

 selled = buf.substr(sta,end-sta);
}
string plan::face()
{
  string result;
  int remain;

  remain = get_total() - get_selled();
  char cnum[10];
  itoa(remain,cnum,10);

  result += "plan id:" + id + '/n';
  result += "start address:" + sta_adr + '/n';
  result += "arrive address:" + arv_adr + '/n';
  result += "start time:" + sta_time + '/n';
  result += "arrive time:" + arv_time + '/n';
  result += "price:" + price +"rmb/n";
  result += "zhekou:"+ zhekou +'/n';
  result += "total tikets:" + total + '/n';
  result += "tikets selled:" + selled + '/n';
  result += "tikets remain:";
  result += cnum ;
 result += '/n';
  return result;
}
void plan::change(string str1,string str2)
{
  if(str1 == "id")
    {
      id = str2;
      return;
    }
  if(str1 == "sta_adr")
    {
      sta_adr = str2;
      return;
    }
  if(str1 == "arv_adr")
    {
      arv_adr = str2;
      return;
    }
  if(str1 == "sta_time")
    {
      sta_time = str2;
      return;
    }
  if(str1 == "arv_time")
    {
      arv_time = str2;
      return;
    }
  if(str1 == "price")
    {
      price = str2;
      return;
    }
  if(str1 == "zhekou")
    {
      zhekou = str2;
      return;
    }
  if(str1 == "total")
    {
      total = str2;
      return;
    }
}
------------------------------------------------------------------------------------

#include "order.h"
#include <string>
using namespace std;
order::order()
{
}
order::~order()
{
}
string order::get_id()
{
 return id;
}
string order::get_pid()
{
 return pid;
}
string order::get_uid()
{
 return uid;
}
string order::get_date()
{
 return date;
}
int order::get_num()
{
 return atoi(num.c_str());
}

void order::set_id(string value)
{
 id = value;
}
void order::set_pid(string value)
{
 pid = value;
}
void order::set_uid(string value)
{
 uid = value;
}
void order::set_date(string value)
{
 date = value;
}
void order::set_num(string value)
{
 num = value;
}
string order::toxml()
{
 string result;
 result += "<order><id>" + id + "</id>";
 result += "<pid>" + pid + "</pid>";
 result += "<uid>" + uid + "</uid>";
 result += "<date>" + date + "</date>";
 result += "<num>" + num + "</num>";
 return result;
}
void order::load(string &buf)
{
 size_t sta=0,end=0;

 sta = buf.find("<id>",0);
 end = buf.find("</id>",0);
 sta += strlen("<id>");

 id = buf.substr(sta,end-sta);

 sta = buf.find("<pid>",0);
 end = buf.find("</pid>",0);
 sta += strlen("<pid>");

 pid = buf.substr(sta,end-sta);

 sta = buf.find("<uid>",0);
 end = buf.find("</uid>",0);
 sta += strlen("<uid>");

 uid = buf.substr(sta,end-sta);

 sta = buf.find("<date>",0);
 end = buf.find("</date>",0);
 sta += strlen("<date>");

 date = buf.substr(sta,end-sta);

 sta = buf.find("<num>",0);
 end = buf.find("</num>",0);
 sta += strlen("<num>");

 num = buf.substr(sta,end-sta);

}
string order::face()
{
  string result;

  result += "order id:" + id + '/n';
  result += "user id:" + uid + '/n';
  result += "plan id:" + pid + '/n';
  result += "date:" + date + '/n';
  result += "tikets number:" + num + '/n';
  return result;
}
------------------------------------------------------------------------------------

#include "system.h"
#include "user.h"
#include "plan.h"
#include "order.h"

#include <vector>
#include <string>
#include <fstream>
#include <iostream>

using namespace std;

CSystem::CSystem()
{
 order_file = "order.xml";
 plan_file = "plan.xml";
 user_file = "user.xml";

 cur_user = NULL;
}
CSystem::~CSystem()
{
}

void CSystem::load_orders()
{
 ifstream in(this->order_file);
 string line;
 string temp;
 string anorder;
 size_t sta,end;
 order *porder;
 while(getline(in,line))
 {
  temp += line;
 }
 in.close();
 for(sta = temp.find("<order>",0);sta != string::npos;sta = temp.find("<order>",sta))
 {
  end = temp.find("</order>",sta);
  end += strlen("</order>");

  anorder = temp.substr(sta,end - sta);
  porder = new order;
  porder->load(anorder);
  orders.push_back(*porder);
  sta ++;
 }

}
void CSystem::load_plans()
{
 ifstream in(this->plan_file);
 string line;
 string temp;
 string aplan;
 size_t sta,end;
 plan *pplan;
 while(getline(in,line))
 {
  temp += line;
 }
 in.close();
 for(sta = temp.find("<plan>",0);sta != string::npos;sta = temp.find("<plan>",sta))
 {
  end = temp.find("</plan>",sta);
  end += strlen("</plan>");

  aplan = temp.substr(sta,end - sta);
  pplan = new plan;
  pplan->load(aplan);
  plans.push_back(*pplan);
  sta ++;
 }
}
void CSystem::load_users()
{
 ifstream in(this->user_file);
 string line;
 string temp;
 string auser;
 size_t sta,end;
 user *puser;
 while(getline(in,line))
 {
  temp += line;
 }
 in.close();
 for(sta = temp.find("<user>",0);sta != string::npos;sta = temp.find("<user>",sta))
 {
  end = temp.find("</user>",sta);
  end += strlen("</user>");

  auser = temp.substr(sta,end - sta);
  puser = new user;
  puser->load(auser);
  users.push_back(*puser);
  sta ++;
 }
}
void CSystem::welcome()
{
 cout<<"欢迎进入航班订票系统"<<endl;
 cout<<"   made by efish    "<<endl;
 cout<<"type /"help/" or '?' to get help"<<endl;
 getchar();
 system("cls");
}
void CSystem::startup()
{
 cout<<"系统正在启动,请稍后..."<<endl;
 system("cls");
 cout<<"加载用户信息";
 load_users();
 cout<<"               OK"<<endl;
 cout<<"加载航班信息";
 load_plans();
 cout<<"               OK"<<endl;
 cout<<"加载订单信息";
 load_orders();
 cout<<"               OK"<<endl;
 system("cls");
 welcome();
}
void CSystem::shutdown()
{
 unsigned int i;
 string temp;
 
 string save;

 cout<<"系统正在退出,是否要保存修改?( yes/no)"<<endl;
 while(getline(cin,save))
 {
  
  if(save == "no")exit(0);
  else if(save == "yes")break;
  else cout<<"请回答yes or no?"<<endl;
 }

 cout<<"保存修改..."<<endl;
 ofstream fuser(user_file);
 temp = "<xml><users>";
 for(i=0;i < users.size();i++)
 {
  temp +=users[i].toxml();
 }
 temp += "</users>";

 fuser<<temp;
 fuser.close();
 
 ofstream fplan(plan_file);
 temp = "<xml><plans>";
 for(i=0;i<plans.size();i++)
 {
  temp +=plans[i].toxml();
 }
 temp += "</plans>";

 fplan<<temp;
 fplan.close();
 
 ofstream forder(order_file);
 temp = "<xml><orders>";
 for(i=0;i<orders.size();i++)
 {
  temp +=orders[i].toxml();
 }
 temp += "</orders>";

 forder<<temp;
 cout<<"保存完毕"<<endl;
 exit(0);
}

string CSystem::get_cmd()//获取命令
{
 string result;
 if(cur_user != NULL)
  cout<<cur_user->get_name().c_str()<<":";
 else
  cout<<"COMMAND:";
 getline(cin,result);
 return result;
}
void CSystem::parse_cmd(std::string cmd)//解析命令
{
 size_t sta=0,end=0;
 vector<string> cmd_arr;
 unsigned int pcmd=0;
 while(1)
 {
  sta = cmd.find_first_not_of(" ",end);
  if(sta == string::npos) break;
  end = cmd.find_first_of(" ",sta);
  if(end == string::npos) end = cmd.size();
  cmd_arr.push_back(cmd.substr(sta,end-sta));
 }
 if(cmd_arr[0] == "goodbey" || cmd_arr[0] == "bey" || cmd_arr[0] == "beybey")
 {
  shutdown();//退出
  return;
 }
 else if(cmd_arr[0] == "help" || cmd_arr[0] == "?")
 {
  help();
  return;
 }
 else if(cmd_arr[0] == "login")
 {
  login();
  return;
 }
 else if(cmd_arr[0] == "sign")
 {
  if(pcmd < cmd.size() && cmd[1])
  {
   signin();
   return;
  }
 }
 else if(cmd_arr[0] == "clear")
 {
  clear();
  return;
 }
 else if(cmd_arr[0] == "show")
 {
  show(cmd_arr);
  return;
 }
 else if(cmd_arr[0] == "insert")
   {
     insert(cmd_arr);
     return;
   }
 else if(cmd_arr[0] == "logout")
 {
  logout();
  return;
 }
 else if(cmd_arr[0] == "alert")
   {
     alert(cmd_arr);
     return;
   }
 else if(cmd_arr[0] == "find")
   {
     find(cmd_arr);
     return;
   }
 else if(cmd_arr[0] == "buy"&&cmd_arr[1] == "tikets")
   {
     if(cmd_arr.size() != 3)
       {
  cout<<"bad use of command."<<endl;
       }
     buy_tikets(cmd_arr[2]);
     return;
   }
 else if(cmd_arr[0] == "return" && cmd_arr[1] == "tikets")
   {
     if(cmd_arr.size() != 3)
       {
  cout<<"bad use of command."<<endl;
       }
     return_tikets(cmd_arr[2]);
     return;
   }
 badcmd(cmd_arr[0]);
}
void CSystem::help()
{
}
void CSystem::login()
{
 string uid,pwd;
 string temp;
 unsigned int i;
 system("cls");
 cout<<"用户登录..."<<endl<<endl;
 while(1)
 {
  cout<<"uid:";
  getline(cin,uid);
  cout<<"pwd:";
  getline(cin,pwd);
  for(i=0;i<users.size();i++)
  {
   if(users[i].get_id() == uid)
   {
    if(users[i].get_pwd() == pwd)
    {
     cur_user = &users[i];
     system("cls");
     cout<<cur_user->get_name().c_str()<<",欢迎进入系统!"<<endl;
     return;
    }
    else
    {
     break;
    }
   }
  }
  cout<<"用户id不存在,或者密码不正确!"<<endl<<endl;
  cout<<"是否注册?(输入'yes'注册,'no'重新输入,'exit'退出登入)"<<endl;
  getline(cin,temp);
  if(temp == "no");
  if(temp == "yes")
  {
   system("cls");
   signin();return;
  }
  if(temp == "exit")
  {
   return;
  }
  system("cls");
  cout<<"重新输入:"<<endl;
 }
}

void CSystem::logout()
{
 string temp;
 while(1)
 {
  cout<<"你确定要登出?(yes/no) "<<endl;
  getline(cin,temp);
  if(temp == "no")return;
  else if(temp == "yes")
  {
   cur_user = NULL;
   cout<<"你已经退出系统!"<<endl;
   return;
  }
  cout<<"my god,我english不好,只认识yes,no"<<endl;
 }
}
void CSystem::badcmd(string cmd)
{
 cout<<cmd.c_str()<<"命令无法识别,或者使用语法错误"<<endl;
}
void CSystem::signin()
{
 user new_user;
 vector<string> info;
 string temp;
 unsigned int i;
 int ok=0;
 cout<<"清输入你的信息:"<<endl;
 while(!ok)
 {
  info.clear();
  cout<<"user id:";
  getline(cin,temp);
  info.push_back(temp);

  cout<<"user pwd:";
  getline(cin,temp);
  info.push_back(temp);

  cout<<"pwd again:";
  getline(cin,temp);
  info.push_back(temp);

  cout<<"ture name:";
  getline(cin,temp);
  info.push_back(temp);

  cout<<"identity:";
  getline(cin,temp);
  info.push_back(temp);

  ok = 1;
  for(i=0;i<users.size();i++)
  {
   if(info[0] == users[i].get_id())
   {
    ok = 0;
    cout<<"用户id已存在!"<<endl;
    break;
   }
  }
  if(info[1] != info[2])
  {
   cout<<"两次输入密码不一致:"<<endl;
   ok = 0;
  }
 }
 if(ok)
 {
  new_user.set_id(info[0]);
  new_user.set_pwd(info[1]);
  new_user.set_name(info[3]);
  new_user.set_identity(info[4]);
  
  temp = "ordinary";
  new_user.set_power(temp);
  users.push_back(new_user);
  cout<<"注册成功!"<<endl;
 }
}
void CSystem::clear()
{
 system("cls");
}

void CSystem::show(std::vector<std::string> &cmd_vec)
{
 switch(cmd_vec.size())
 {
 case 1:
  {
   cout<<"缺少参数"<<endl;
  }break;
 case 2:
  {
   if(cmd_vec[1] == "myself" || cmd_vec[1] == "me")
   {
    if(cur_user == NULL)
    {
     cout<<"你还没有登陆,请先登录系统"<<endl;
     return;
    }
    else
    {
     cout<<"你的信息:"<<endl;
     cout<<cur_user->face().c_str()<<endl;
     return;
    }
   }
  }break;
 case 3:
  {
   if(cmd_vec[1] == "all" && cmd_vec[2] == "plan")
   {
    show_plans();
    return;
   }
   if(cmd_vec[1] == "all" &&cmd_vec[2] == "user")
   {
    show_users();
    return;
   }
   if(cmd_vec[1] == "all" && cmd_vec[2] == "order")
   {
    show_orders();
    return;
   }
  }break;
 default:
  {
   cout<<"参数太多!"<<endl;
  }break;
 }
 cout<<"命令格式不对"<<endl;

}
void CSystem::show_users()
{
  size_t i;
  if(cur_user ==NULL)
    {
      cout<<"you are not login,please login at first..."<<endl;;
      return;
    }
 
 cout<<"所有的用户信息如下:"<<endl;
  for(i = 0;i<users.size();i++)
    {
      cout<<users[i].face().c_str()<<endl<<endl;
    }
 cout<<endl;
}
void CSystem::show_plans()
{
  size_t i;
  if(plans.size() == 0)
    {
      cout<<"these is no plan now"<<endl;
      return;
    }
 cout<<"所有的机票信息如下:"<<endl;
  for(i =0;i<plans.size();i++)
    {
      cout<<plans[i].face().c_str()<<endl<<endl;
    }
 cout<<endl;
}
void CSystem::show_orders()
{
  size_t i;
  if(orders.size() == 0)
    {
      cout<<"these is no order now"<<endl;
      return;
    }
 cout<<"所有的订单信息如下:"<<endl;
  for(i = 0;i<orders.size();i++)
    {
      cout<<orders[i].face().c_str()<<endl<<endl;
    }
 cout<<endl;
}
void CSystem::insert(vector<string> &vecarg)
{
  if(vecarg.size()<2)
    {
      cout<<"参数太少!"<<endl;
      return;
    }
  else if(vecarg[1] == "user")
    {
      insert_user(vecarg);
      return;
    }
  else if(vecarg[1] == "plan")
    {
      insert_plan(vecarg);
      return;
    }
  else if(vecarg[1] == "order")
    {
      insert_order(vecarg);
      return;
    }
  else
    {
      cout<<"insert命令的试用不正确!"<<endl;
      return;
    }

}
void CSystem::insert_user(vector<string> &vecarg)
{
  if(vecarg.size()<3)
    {
      cout<<"too few argments in command 'insert'"<<endl;
      return;
    }
  cout<<"you can not insert user"<<endl;
}
void CSystem::insert_plan(vector<string> &vecarg)
{
 if(cur_user == NULL)
 {
  cout<<"请先登入"<<endl;
  return;
 }
  if(cur_user->get_power() != "admin" && cur_user->get_power() != "typer")
    {
      cout<<"权限太低!"<<endl;
      return;
    }
 if(vecarg.size() <3)
 {
  cout<<"参数太少!"<<endl;
  return;
 }
 if(vecarg.size() > 3)
 {
  cout<<"参数太多!"<<endl;
  return;
 }
 vector<string> vectemp;
 size_t sta=0,end =0;
 while(1)
 {
  sta = vecarg[2].find_first_not_of("(,",sta);
  if(sta == string::npos)
   break;
  end = vecarg[2].find_first_of("(,)",sta);
  if(end == string::npos)
  {
   end = vecarg[2].size();
  }
  vectemp.push_back(vecarg[2].substr(sta,end-sta));
  sta=end+1;
 }
 if(vectemp.size() <8)
 {
  cout<<"参数太少!"<<endl;
  return;
 }
 if(vectemp.size() >8)
 {
  cout<<"参数太多!"<<endl;
  return;
 }
 bool have=false;
 size_t i;
 for(i=0;i<plans.size();i++)
 {
  if(plans[i].get_id() == vectemp[0])
  {
   cout<<"此航班号已经存在,请换一个航班号!"<<endl;
   return;
  }
 }
 plan new_plan;
 new_plan.set_id(vectemp[0]);
 new_plan.set_sta_adr(vectemp[1]);
 new_plan.set_arv_adr(vectemp[2]);
 new_plan.set_sta_time(vectemp[3]);
 new_plan.set_arv_time(vectemp[4]);
 new_plan.set_price(vectemp[5]);
 new_plan.set_zhekou(vectemp[6]);
 new_plan.set_total(vectemp[7]);
 new_plan.set_selled("0");
 plans.push_back(new_plan);
 cout<<"航班添加成功!"<<endl;
}
void CSystem::insert_order(vector<string> &vecarg)
{
 cout<<"你不能添加订单!"<<endl;
}
void CSystem::alert(vector<string> &vecarg)
{
  if(cur_user == NULL)
    {
      cout<<"please login at first!"<<endl;
      return;
    }
  if(vecarg.size()<4)
    {
      cout<<"arguments too few!"<<endl;
      return;
    }
  if(vecarg.size()>4)
    {
      cout<<"too many arguments,or the style of it is not recognised!"<<endl;
      return;
    }
  if(vecarg[1] == "plan")
    {
      alert_plan(vecarg);
      return;
    }
}
void CSystem::alert_plan(vector<string> &vecarg)
{
  vector<string> temp;
  size_t sta=0,end=0;
  sta = vecarg[2].find_first_not_of("( =)",sta);
  end = vecarg[2].find_first_of("( = )",sta);
  temp.push_back(vecarg[2].substr(sta,end-sta));

  sta = vecarg[2].find_first_not_of("(= )",end);
  end = vecarg[2].find_first_of("(= )",sta);
  temp.push_back(vecarg[2].substr(sta,end-sta));

  sta = vecarg[2].find_first_not_of("( =)",end);
  end = vecarg[2].find_first_of("(= )",sta);
  if(end == string::npos)end = vecarg[2].size();
  temp.push_back(vecarg[2].substr(sta,end-sta));

  if(temp[0] != "where" || temp[1] != "id")
    {
      cout<<"bad use of command alert"<<endl;
      return;
    }
  size_t u=-1,i;
  for(i=0;i<plans.size();i++)
    {
      if(plans[i].get_id() == temp[2])
 {
   u = i;
   break;
 }
    }
  if(u == -1)
    {
      cout<<"plan id is not exsit."<<endl;
      return;
    }
  temp.clear();
  sta=0;end=0;
  while(1)
    {
      sta = vecarg[3].find_first_not_of("( =),",end);
      if(sta == string::npos)break;
      end = vecarg[3].find_first_of("( =),",sta);
      if(end == string::npos)end = vecarg[3].size();
      temp.push_back(vecarg[3].substr(sta,end - sta));
    }
  if(temp[0] != "set")
    {
      cout<<"bad use of command."<<endl;
      return;
    }
  for(i=1;i<temp.size();i+=2)
    {
      plans[u].change(temp[i],temp[i+1]);
    }
 cout<<"修改完毕!"<<endl;
}
void CSystem::find(vector<string> &vecarg)
{
  if(vecarg.size() != 3 && vecarg[1] != "plan")
    {
      cout<<"arguments not right!"<<endl;
      return;
    }
  find_plan(vecarg[2]);
  return;
}
void CSystem::buy_tikets(string str)
{
 if(cur_user == NULL)
 {
  cout<<"请先登入!"<<endl;
  return;
 }

  size_t sta=0,end = 0;
  sta = str.find_first_not_of("( ,)",end);
  end = str.find_first_of("( ,)",sta);
  string pid = str.substr(sta,end-sta);
  sta = str.find_first_not_of("( ,)",end);
  end = str.find_first_of("( ,)",sta);
  if(end == string::npos)end = str.size();
  string num = str.substr(sta,end-sta);

  //find plan by id
  plan *p = NULL;
  size_t i;
  for(i=0;i<plans.size();i++)
    {
      if(plans[i].get_id() == pid)
 {
 p = &plans[i];
 break;
 }
    }
  if(p == NULL)
    {
      cout<<"plan not find."<<endl;
      return;
    }
  else
    {
      if(p->get_selled() + atoi(num.c_str()) > p->get_total())
 {
   cout<<"sorry , these only "<<p->get_remain()<<" remain."<<endl;
   return;
 }
      char cnum[10];
      itoa(p->get_selled()+atoi(num.c_str()),cnum,10);
      string snum;
      snum += cnum;
      p->set_selled(snum);

      char tem[10];
      itoa(orders.size()+1,tem,10);
      string oid;
      oid += tem;

      order new_order;
      new_order.set_id(oid);
      new_order.set_pid(pid);
      new_order.set_uid(cur_user->get_id());
      new_order.set_date("can not get date");
      new_order.set_num(num);

      cout<<"buy tikets ok./nyour order id is "<<new_order.get_id()<<endl;
      cout<<endl<<new_order.face()<<endl<<endl;
      orders.push_back(new_order);
    }
  return;
}
void CSystem::return_tikets(string str)
{
 if(cur_user == NULL)
 {
  cout<<"请先登录!"<<endl;
 }
  size_t sta=0,end=0;
  sta = str.find_first_not_of("( ,)",end);
  end = str.find_first_of("( ,)",sta);
  string oid = str.substr(sta,end-sta);
  sta = str.find_first_not_of("( ,)",end);
  end = str.find_first_of("( ,)",sta);
  if(end == string::npos)end = str.size();
  string num = str.substr(sta,end-sta);

  order *o= NULL;
  unsigned i;
  for(i=0;i<orders.size();i++)
    {
      if(orders[i].get_id() == oid)
 o = &orders[i];
    }
  if(o == NULL)
    {
      cout<<"can not find the order as your requst"<<endl;
      return;
    }
 if(o->get_uid() != cur_user->get_id())
 {
  cout<<"你不能退别人的票!"<<endl;
 }
  int inum = atoi(num.c_str());
  if(inum > o->get_num())
    {
      cout<<"the number of tikets is to big"<<endl;
      return;
    }

  char stemp[10];
  itoa(o->get_num() - inum,stemp,10);
  string strnum(stemp);
  o->set_num(strnum);

  plan *p = NULL;
  for(i=0;i<plans.size();i++)
    {
      if(plans[i].get_id() == o->get_pid())
 p = &plans[i];
    }
  if(p == NULL)
    {
      cout<<"plan not find while return order"<<endl;
      return;
    }
  itoa(p->get_selled() - inum,stemp,10);
  string sselled(stemp);
  p->set_selled(sselled);
  cout<<"tikets return ok."<<endl;
  return;
}
void CSystem::find_plan(string str)
{
  size_t sta,end;
  vector<string> temp;
  if(str.substr(0,5) != "where")
    {
      cout<<"arguments not right."<<endl;
      return;
    }
  sta = 0;end = 5;
  while(1)
    {
      sta = str.find_first_not_of("( =),",end);
      if(sta == string::npos)break;
      end = str.find_first_of("( = ),",sta);
      if(end == string::npos)end = str.size();
      temp.push_back(str.substr(sta,end-sta));
    }

  vector<string>::iterator i;
  vector<plan>::iterator j;
  vector<plan> result;
  result = plans;
  for(i=temp.begin();i != temp.end();i+=2)
    {
      if(*(i) == "id")
 {
   for(j = result.begin();j!=result.end();j++)
     {
       if((*j).get_id() != *(i+1))
    {
   result.erase(j);
   j--;
    }
     }
 }
      else if(*(i) == "sta_adr")
 {
   for(j = result.begin();j!=result.end();j++)
     if((*j).get_sta_adr() != *(i+1))
  {
       result.erase(j);
    j--;
  }
 }
      else if(*(i) == "arv_adr")
 {
   for(j = result.begin();j!=result.end();j++)
     if((*j).get_arv_adr() != *(i+1))
  {
       result.erase(j);
    j--;
  }
 }
      else if(*(i) == "sta_time")
 {
   for(j = result.begin();j!=result.end();j++)
     if((*j).get_sta_time() != *(i+1))
  {
       result.erase(j);
    j--;
  }
 }
      else if(*(i) == "arv_time")
 {
   for(j = result.begin();j!=result.end();j++)
     if((*j).get_arv_time() != *(i+1))
  {
       result.erase(j);
    j--;
  }
 }
    }
  if(result.size() == 0)
    {
      cout<<"can not find the plan as your requst."<<endl;
      return;
    }
  cout<<"find "<<result.size()<<" as your requst."<<endl<<endl;
  for(j = result.begin();j!=result.end();j++)
    {
      cout<<(*j).face()<<endl<<endl;
    }
  return;
}
---------------------------------------------------------------------------------------


#include "system.h"

#include <fstream>
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main(int argc,char **argv)
{
 CSystem sys ;
 string cmd;
 sys.startup();
 while(1)
 {
  cmd = sys.get_cmd();
  sys.parse_cmd(cmd);
 }
 sys.shutdown();
 return 0;
}

数据结构课程设计之航空订票系统 题目:航空订票系统 功能:通过此系统可以录入、查询、修改航班情况,完成用户订票和退票功能并且可以保存客户和航班的资料。 1, 录入航班信息。 没个航班的信息包括航班号,起飞、抵达城市,座位总数,剩余座位数。数据存储在txt 文件中采用线性表的链式结构。 2, 加载航班和客户信息。 可以自动加载保存在txt 文件中的航班和客户的信息。 3, 查询航班。 可以通过输入航班号,查询该航班的 阅读详情

相关推荐

〈数据结构〉课程设计综合题目 (题目一部分调试展示)

题目 1.小明是一个计算机专业top student,祝贺他毕业了。并准备到银行参加工作。上班第一天,经理叫他编制一个实现一个活期储蓄处理程序,算作考查。上班第一天,一定要给领导一个好印象,小明二话没说,就答应了。现要你是小明了,请完成如下题目功能。储户开户、销户、存入、支出活动频繁,系统设计要求:(1)能比较迅速地找到储户的帐户,以实现存款、取款记账; (2)能比较简单,迅

king_wang10086的专栏 859

c语言time头文件作用,C语言中 time相关的函数 头文件

1. time相关的函数在 time.h 中可以查看原型。如下命令可以找出time.h的路径:whereis time.h2.先看代码,要包含time.h===================================void main() {struct timeval val;gettimeofday(&val, NULL);printf("sec=%ld, usec=%ld...

weixin_30889555的博客 5055

AI时代真正的入口:Agent Runtime基础设施解析

在大模型应用从‘能对话’迈向‘可托付’的关键阶段,AI入口的本质已从用户界面转向底层调度能力——即Agent Runtime。它融合自然语言意图理解、状态感知的执行编排与可解释可审计的决策机制,构成AI与业务系统深度协同的技术基座。千问通过解耦Agent框架、工具市场与记忆中枢,推动企业服务从‘调用API’升级为‘注册原子能力’,使CRM、ERP乃至工业PLC均可被语义化寻址。这种开放不是功能叠加,而是构建类TCP/IP的交互协议层,支撑跨场景、跨系统的智能协作。本文聚焦Agent Runtime的核心原理

weixin_30681615的博客 379

java飞机订票系统项目源码

Oracle飞机订票系统(ppt ER图 流程图 需求背景数据库 架构说明有lun文视频源码齐全)

weixin_43735086的博客 512

PCAS系统架构与多代理策略控制解析

访问控制是计算机安全的核心概念,通过定义和执行策略来限制系统资源的访问权限。PCAS(Policy-Controlled Agentic System)采用创新的依赖图建模和Datalog规则引擎,解决了传统访问控制模型在多代理环境中的局限性。其技术价值在于实现细粒度的授权决策,特别是在处理动态、交互式工作流时表现出色。PCAS的无状态设计和分布式一致性保证,使其适用于复杂的企业级应用场景,如医疗健康、金融服务和IoT边缘计算。该系统通过污点分析和递归推理等高级特性,有效防御提示注入等安全威胁,同时提升多代

ajsyipsc40270的博客 657

量化投资之工具篇一:Backtrader从入门到精通(1)-手把手教你零基础实现一个策略案例

Backtrader是重要的量化框架,本文记录学习该框架的笔记,内容主要基于Backtrader的网站指导文档。虽然该框架目前用于量化投资领域,但是可以作为数据处理的基本架构,进行改造后用于各种数据的处理,尤其适用于对原始数据处理完成后应用一定的策略进行预测以及可视化处理。 1、简介 Backtrader的特点,就是两点: 1、易于使用; 2、参见第1条。 那么如何使用Backtrader呢?比把大象装进冰箱复杂点,一共4步: 创建一个Cerebro引擎: 加入一个Strategy...

仓鼠王的博客 5万+

【亲测免费】 基于Web的影院在线订票系统设计与实现

基于Web的影院在线订票系统设计与实现 去发现同类优质开源项目:https://gitcode.com/ 资源文件介绍 文件名 基于Web的影院在线订票系统的设计与实现(19毕设+源码+数据库+论文+ppt).zip 文件内容 本资源文件包含了基于Web的影院在线订票系统的设计与实现相关内容,具体包括: 毕业设计论文:详细描述了系统的开发背景、需求分析、系统设计、实现过程以及测试结果。 源代码:...

gitblog_09768的博客 325

基于FPGA的 SelectIO IP核 的仿真验证-----( LVDS差分高速传输)

SelectIO IP核 的仿真验证

qq_43618170的博客 1万+

Java项目:飞机订票系统(java+swing+Oracle)

功能简介: 机票查询、改签处理、航班动态、退票处理、销售统计、后台管理、退出系统 了解详情可以私聊,感谢大家支持与帮助! 点击查看更多java精品项目 >>>

常年被追砍的博客 1604

从JTAG到AS模式:一文搞懂EP4CE10E22C8N所有配置引脚(MSEL, nCONFIG, DATA0)的用法

本文深入解析EP4CE10E22C8N FPGA的配置引脚(MSEL, nCONFIG, DATA0)在不同模式下的使用方法,特别关注从JTAG到AS模式的切换要点。通过详细的配置模式对比、状态机分析和PCB布局建议,帮助开发者避免常见陷阱,提升FPGA配置成功率。

weixin_33713350的博客 320

mipi deskew原理理解

何为skew, 从字面意思看是倾斜了,不对齐了;放在mipi的传输中意思就是clock lane和data lane 及data lane与data lane间出现了相位差;一旦出现相位差,大家采样数据时就可能不在同一个节拍上,会出现传输错误。所以就要做deskew,通过做deskew来使得大家重新对齐,在同一个节奏下传输数据. 一般当data rate高于1.5G时建议开启deskew。

lx123010的专栏 8102

可能泄露数百万旅客信息的Amadeus机票预订系统漏洞

近日,Safety Detective的安全研究人员发现Amadeus在线订票系统存在一个严重的安全隐患,攻击者利用此漏洞可以查看、更改一些大型国际航空公司旅客的订票信息及私人信息,将涉及数百万客户的隐私安全。 目前,全球共有141家国际航空公司采用Amadeus的订票系统,Amadeus控制了全球近44%的在线订票市场,一些大型航空公司,比如联合航空、汉莎航空和加拿大航空都是Amadeus的客...

qq_41892675的博客 632

信息流广告ROI线性预测看板&投放分析监控看板展示&数据处理入库全流程

此看板数据量太大,在tableau public部署运行速度极慢,因此用图片作展示 数据清洗

Larry_Westside的博客 2317

航空购票系统源码java_航空售票系统 - WEB源码|JSP源码/Java|源代码 - 源码中国

文件名大小更新时间airOnLine\.classpath2262008-05-23airOnLine\log.txt1092008-05-23airOnLine\.project3852008-05-23airOnLine\planeModel.dat4032008-05-23airOnLine\agent.dat3612008-05-23airOnLine\help.txt5972008-05...

weixin_30725317的博客 355

华为OD机试双机位C卷-MVP争夺战 (C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【MVP争夺战】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - MVP争夺战,

qq_45776114的博客 1172

1、符号回归:原理、应用与实践

本文全面介绍了符号回归(Symbolic Regression)的原理、发展历程、核心算法及其在科学与工程领域的广泛应用。文章从基本概念出发,详细阐述了基于遗传编程的符号回归机制,并探讨了其在游艇水动力学、化学过程、锂离子电池、生物医学等多个领域的实际应用。同时,博文还涵盖了高级技术如知识集成、系数优化、预测区间计算及微分方程发现等内容,对比了开源与商业软件工具,并展望了未来发展趋势,旨在为研究人员和从业者提供一本实用的符号回归指南。

ipfs8storage的博客 248

COBOL编程入门:从结构到数据处理

本文系统介绍了COBOL语言的基础知识,涵盖程序结构、数据表示、算术运算、字符串处理、流程控制及文件操作等核心内容。通过具体示例讲解了COBOL的书写格式、层次结构、PICTURE子句用法以及表处理和子程序调用机制,适合初学者快速掌握这一经典商业编程语言。

weixin_42603332的博客 723

ROS2 机械臂末端刀具执行曲面路径规划入门教程

Noether工具路径规划系统摘要 Noether是一款用于网格曲面刀具路径规划的软件,支持喷涂、打磨、检测等机器人工艺流程。其核心流程分为三步:1)网格修改(平滑、分割等预处理);2)刀具路径规划(生成有序路径点序列);3)刀具路径修改(姿态调整等后期处理)。系统提供栅格规划和边界规划两种模式,支持自定义扩展。配套GUI工具可配置完整流程,包含网格处理、路径生成和可视化功能。通过示例演示了多组件网格处理、拼图边缘铣削等典型应用场景,并指导用户进行插件开发,实现圆柱体提取、摄像机悬停等定制化功能。系统采用模

机器人控制与仿真应用 916

AI工程实践:从模型到服务的完整开发与部署指南

机器学习模型从实验到生产部署,是AI工程化的核心挑战。其原理在于将训练好的模型通过服务化封装,转化为稳定、可扩展的API服务,从而实现其技术价值。这涉及环境配置、依赖管理、性能优化等一系列软件工程实践,以确保服务的高可用性与可维护性。典型的应用场景包括在线推理服务、批处理任务以及集成到更复杂的业务系统中。本文聚焦于使用FastAPI等框架构建AI服务,并深入探讨了模型加载优化和API设计等关键环节,为开发者提供从零搭建到生产部署的完整路径。

weixin_30824599的博客 778

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

7.73 亿邮箱信息泄露;IntelliJ IDEA 18 周岁

(给技术最前线加星标,每天看技术热点)转自:开源中国、solidot、cnBeta、腾讯科技、快科技等【技术资讯】0、7.73 亿 email 信息泄露,你的密码可能在里...

redditnote的博客 1029

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

基于微信小程序的线上影院平台设计与实现-计算机毕设 【课程设计】65550

注册登录:提供注册与登录功能,支持手机号验证和密码找回,保障账户安全与便捷访问。 (2) 首页:展示轮播图、影片推荐、影院信息、电影资讯入口,实现信息快速浏览与功能导航。 (3) 影片信息:查看影片详情(类型、价格、预告片、剧情简介、演员、排片计划),支持在线购票和点播。 (4) 购票流程:选择场次、数量、座位并完成支付,生成购票记录。 (5) 电影资讯:阅读平台发布的各类影视资讯文章。 (6) 社交互动:发表评论、点赞、收藏内容,参与话题讨论。 (7) 我的:管理个人信息、查看收藏、评论、观影记录、购票/

WeiXin_DZbishe的博客 343

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【课程设计】spring boot火车票预订系统毕业设计-附源码091029

火车票预订系统主要实现的功能有以下几点:首页、个人中心、列车班次管理、订单中心管理、改签退票管理等 这篇文章研究了基于java的网络销售系统的开发和实现,从需求分析、总体设计到具体实现,最终完成了整个在线火车票预订系统,从而方便了用户和提高了火车站的管理水平。 关键词:火车订票管理,互联网模式,mysql数据库...

Biye_Design的博客 3600

基于SSM架构的电影院售票系统设计与实现-计算机毕设 【课程设计】 24698

普通用户功能: 登录注册:实现用户的登录和账号注册功能。 首页:展示最新电影和影院信息。 公告信息:查看影院发布的最新公告。 电影资讯:获取电影相关的新闻和评论。 影院信息:查询影院地址、设施等详情。 影片信息:查看电影简介、预告片及放映时间。 优惠活动:浏览并参与影院优惠活动。 我的账户:管理个人资料和支付信息。 个人中心:包含个人中心页面,购票、退票信息及收藏管理。 后台管理端: 登录:实现管理员的登录验证。 首页:展示管理系统的概览和导航。 公共管理:管理系统级别的公告和通知。 用户管理:管理和审核用

WeiXin_DZbishe的博客 1313

Oracle数据库入门:从核心架构到安装部署与SQL实战指南

数据库作为企业信息系统的核心,负责数据的存储、管理和高效访问。其基本原理是通过结构化存储和事务机制保障数据的一致性与完整性。在众多数据库产品中,Oracle数据库以其卓越的可靠性、安全性和强大的功能集,成为金融、电信等关键行业的标准选择,尤其适用于要求7x24小时高可用的核心业务场景。理解Oracle,不仅是学习一个软件,更是掌握一套工业级的数据管理哲学。本文将从初学者视角,系统解析Oracle的核心架构,包括其实例与数据库的区分、SGA/PGA内存结构以及关键后台进程的工作原理。在此基础上,结合**Ora

weixin_34209851的博客 337

Amadeus航班预定系统漏洞影响全球141家航空公司

全球近一半的航班乘客因在线机票预订系统中的一个严重漏洞面临信息暴露风险,该漏洞允许黑客远程访问和修改他们的旅行细节,甚至获得他们的飞行常客奖励计划。 以色列网络安全研究员Noam Rotem在预订以色列航空公司ELAL航班时发现了这一漏洞,成功利用该航班只需要受害者的PNR(乘客姓名记录)号码。 漏洞存在于由Amadeus开发的广泛使用的在线航班预订系统中,系统目前被近141家国际航空公司使用...

mozhe_的博客 462
上一篇: stl
下一篇: 数据结构实习报告
efiish
博客等级 码龄21年 7粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值