Requirements
I have already build a hpp file for the class architecture, and your job is to implement the specific functions.
In order to prevent name conflicts, I have already declared a namespace for payment system.
There will be some more details:
// username should be a combination of letters and numbers and the length should be in [6,20] // correct: ["Alice1995", "Heart2you", "love2you", "5201314"] // incorrect: ["222@_@222", "12306", "abc12?"] std::string username; // password should be a combination of letters and numbers and the length should be in [8,20] // correct: ["12345678", "abc00000000"] // incorrect: ["123", "21?=_=?12"] std::string password; // phone should be a number and the length should be fixed 13 // correct: ["8618819473230"] // incorrect: ["110", "330"] std::string phone; Gender::Gender gender; // because soil-rich use this system, so no decimal. long long int balance; // auxiliary function for format checking inline bool verifyPasswordFormat(const std::string & password); inline bool verifyUsernameFormat(const std::string & username); inline bool verifyPhoneFormat(const std::string & phone); // Because of the mistake of the architect of alibaba, // all the parameters of these function use c strings(char *). // you are smart, the transformation is not a problem // if the input is a valid username, set it and return true bool setUsername(const char * username); // You should confirm the old password and the new_password's format bool setPassword(const char * new_password, const char * old_password); bool setPhone(const char * new_phone); // You can not set the Gender to unknown again bool setGender(Gender::Gender gender); std::string getUsername(void); std::string getPhone(void); alipay::Gender::Gender getGender(void); long long int getMoneyAmount(const char * password); bool deposit(long long int amount); // password check is needed when withdraw bool withdraw(long long int amount, const char * password);
//user.hpp
#include <string>
#ifndef USER_H_
#define USER_H_
namespace alipay {
namespace Gender {
enum Gender { Female = 0, Male = 1, Unknown = 2 };
}
class User {
std::string username;
std::string password;
std::string phone;
Gender::Gender gender;
long long int balance;
inline bool verifyPasswordFormat(const std::string
&password);
inline bool verifyUsernameFormat(const std::string
&username);
inline bool verifyPhoneFormat(const std::string &phone);
public:
User() {
this->gender = Gender::Unknown;
this->balance = 0;
}
bool setUsername(const char *username);
bool setPassword(const char *new_password, const char
*old_password);
bool setPhone(const char *new_phone);
bool setGender(Gender::Gender gender);
std::string getUsername(void);
std::string getPhone(void);
alipay::Gender::Gender getGender(void);
// if passowrd is in correct, return -1
long long int getMoneyAmount(const char *password);
bool deposit(long long int amount);
bool withdraw(long long int amount, const char *password);
};
}
#endif // USER_H_
//test.hpp
#ifndef TEST_H_
#define TEST_H_
#include "user.hpp"
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::cerr;
using std::string;
namespace unittest {
class TEST {
public:
// complete legal operations
void TestCase1() {
cout << "Test1" << endl;
alipay::User u;
char username[20];
cin >> username;
u.setUsername(username) ? cout << "Pass" : cout <<
"Fail";
cout << "\tsetting a legal username." << username
<< endl;
char password[20];
cin >> password;
u.setPassword(password, "") ? cout << "Pass" : cout <<
"Fail";
cout << "\tsetting a legal password for a blank password."
<< password
<< endl;
char phone[20];
cin >> phone;
u.setPhone(phone) ? cout << "Pass" : cout <<
"Fail";
cout << "\tsetting a legal phone." << phone <<
endl;
int gender;
cin >> gender;
u.setGender(gender == 0 ? alipay::Gender::Female :
alipay::Gender::Male)
? cout << "Pass"
: cout << "Fail";
cout << "\tsetting a legal gender: " << (gender == 0 ?
"Female." : "Male.")
<< endl;
string username_s = u.getUsername();
username_s == username ? cout << "Pass" : cout <<
"Fail";
cout << "\tusername should be equal: (" << username
<< "," << username_s
<< ")." << endl;
string phone_s = u.getPhone();
phone == phone_s ? cout << "Pass" : cout <<
"Fail";
cout << "\tphone should be equal: (" << phone <<
"," << phone_s << ")."
<< endl;
int money;
cin >> money;
u.deposit(money) ? cout << "Pass" : cout <<
"Fail";
cout << "\ttry to deposit." << endl;
cin >> money;
u.withdraw(money, password) ? cout << "Pass" : cout <<
"Fail";
cout << "\ttry to withdraw." << endl;
cout << endl;
}
// complete illegal operations
void TestCase2() {
cout << "Test2" << endl;
alipay::User u;
char wrong_username[20];
cin >> wrong_username;
!u.setUsername(wrong_username) ? cout << "Pass" : cout
<< "Fail";
cout << "\tsetting an illegal username." <<
wrong_username << endl;
char wrong_phone[20];
cin >> wrong_phone;
!u.setPhone(wrong_phone) ? cout << "Pass" : cout <<
"Fail";
cout << "\tsetting an illegal phone." << wrong_phone
<< endl;
char wrong_password[20];
cin >> wrong_password;
!u.setPassword(wrong_password, "") ? cout << "Pass" : cout
<< "Fail";
cout << "\tsetting an illegal password." <<
wrong_password << endl;
u.setPassword("20482048123", "");
!u.setPassword("123", "123") ? cout << "Pass" : cout <<
"Fail";
cout << "\tsetting a new password using wrong old password."
<< endl;
cout << endl;
}
// complete illegal operations2
void TestCase3() {
cout << "Test3" << endl;
alipay::User u;
u.setPassword("123456789", "");
!u.withdraw(-1000, "123456789") ? cout << "Pass" : cout
<< "Fail";
cout << "\ttry to cheat money using negative number."
<< endl;
u.deposit(1000);
!u.withdraw(10000, "123456789") ? cout << "Pass" : cout
<< "Fail";
cout << "\ttry to cheat money using loan which is not
supported." << endl;
cout << endl;
}
void runAllCases() {
TestCase1();
TestCase2();
TestCase3();
}
};
}
#endif // TEST_H_
//main.cpp
#include "user.hpp"
#include "test.hpp"
int main() {
unittest::TEST t;
t.runAllCases();
return 0;
}
//user.cpp
???
user.cpp
----
#include "user.hpp"
#include <iostream>
#include <cctype>
using namespace std;
bool alipay::User::verifyPasswordFormat(const std::string
&password){
if(password.length() >= 8 &&
password.length() <= 20){
for(int i = 0; i <
password.length(); i++){
char c =
password[i];
if(!(isalpha(c)
|| isdigit(c)))
return false;
}
return true;
}
else
return false;
}
bool alipay::User::verifyUsernameFormat(const std::string
&username){
if(username.length() >= 6 &&
username.length() <= 20){
for(int i = 0; i <
username.length(); i++){
char c =
username[i];
if(!(isalpha(c)
|| isdigit(c)))
return false;
}
return true;
}
else
return false;
}
bool alipay::User::verifyPhoneFormat(const std::string
&phone){
if(phone.length() == 13){
for(int i = 0; i <
phone.length(); i++){
char c =
phone[i];
if(!isdigit(c))
return false;
}
return true;
}
else
return false;
}
bool alipay::User::setUsername(const char *uname){
if(verifyUsernameFormat(uname)){
username = uname;
return true;
}
else
return false;
}
bool alipay::User::setPassword(const char *new_password, const char
*old_password){
if(password == old_password &&
verifyPasswordFormat(new_password)){
password = new_password;
return true;
}
else
return false;
}
bool alipay::User::setPhone(const char *new_phone){
if(verifyPhoneFormat(new_phone)){
phone = new_phone;
return true;
}
else
return false;
}
bool alipay::User::setGender(Gender::Gender gen){
if(gen != Gender::Gender::Unknown){
gender = gen;
return true;
}
else
return false;
}
std::string alipay::User::getUsername(void){
return username;
}
std::string alipay::User::getPhone(void){
return phone;
}
alipay::Gender::Gender alipay::User::getGender(void){
return gender;
}
// if passowrd is in correct, return -1
long long int alipay::User::getMoneyAmount(const char *pass){
if(password != pass)
return -1;
else
return balance;
}
bool alipay::User::deposit(long long int amount){
if(amount > 0){
balance += amount;
return true;
}
else
return false;
}
bool alipay::User::withdraw(long long int amount, const char
*pass){
if(password != pass || amount <= 0 || amount >
balance)
return false;
else{
balance -= amount;
return true;
}
}
output
----
Test1
Alice1995
Pass setting a legal username.Alice1995
12345678
Pass setting a legal password for a blank
password.12345678
8618819473230
Pass setting a legal phone.8618819473230
0
Pass setting a legal gender: Female.
Pass username should be equal:
(Alice1995,Alice1995).
Pass phone should be equal:
(8618819473230,8618819473230).
1000
Pass try to deposit.
400
Pass try to withdraw.
Test2
222@_@222
Pass setting an illegal username.222@_@222
123
Pass setting an illegal phone.123
110
Pass setting an illegal password.110
Pass setting a new password using wrong old
password.
Test3
Pass try to cheat money using negative number.
Pass try to cheat money using loan which is not
supported.
Requirements I have already build a hpp file for the class architecture, and your job is to imple...
Requirements: Finish all the functions which have been declared inside the hpp file. Details: string toString(void) const Return a visible list using '->' to show the linked relation which is a string like: 1->2->3->4->5->NULL void insert(int position, const int& data) Add an element at the given position: example0: 1->3->4->5->NULL instert(1, 2); 1->2->3->4->5->NULL example1: NULL insert(0, 1) 1->NULL void list::erase(int position) Erase the element at the given position 1->2->3->4->5->NULL erase(0) 2->3->4->5->NULL //main.cpp #include <iostream> #include <string> #include "SimpleList.hpp" using std::cin; using...
Need to implement Account.cpp and AccountManager.cpp code //Account.hpp #ifndef _ACCOUNT_HPP_ #define _ACCOUNT_HPP_ #include <string> using std::string; class Account { public: Account(); Account(string, double); void deposit(double); bool withdraw(double); string getName() const; double getBalance() const; private: string name; double balance; }; #endif ////////////////////////////////////////////// //AccountManager.hpp #ifndef _ACCOUNT_MANAGER_HPP_ #define _ACCOUNT_MANAGER_HPP_ #include "Account.hpp" #include <string> using std::string; class AccountManager { public: AccountManager(); AccountManager(const AccountManager&); //copy constructor void open(string); void close(string); void depositByName(string,double); bool withdrawByName(string,double); double getBalanceByName(string); Account getAccountByName(string); void openSuperVipAccount(Account&); void closeSuperVipAccount(); bool getBalanceOfSuperVipAccount(double&) const;...
Please zoom in so the pictures become high resolution. I need
three files, FlashDrive.cpp, FlashDrive.h and user_main.cpp. The
programming language is C++. I will provide the Sample Test Driver
Code as well as the codes given so far in text below.
Sample Testing Driver Code:
cs52::FlashDrive empty;
cs52::FlashDrive drive1(10, 0, false);
cs52::FlashDrive drive2(20, 0, false);
drive1.plugIn();
drive1.formatDrive();
drive1.writeData(5);
drive1.pullOut();
drive2.plugIn();
drive2.formatDrive();
drive2.writeData(2);
drive2.pullOut();
cs52::FlashDrive combined = drive1 + drive2;
// std::cout << "this drive's filled to " << combined.getUsed( )...
10.18 LAB: Plant information (vector) Given a base Plant class and a derived Flower class, complete main() to create a vector called myGarden. The vector should be able to store objects that belong to the Plant class or the Flower class. Create a function called PrintVector(), that uses the PrintInfo() functions defined in the respective classes and prints each element in myGarden. The program should read plants or flowers from input (ending with -1), adding each Plant or Flower to...
I have a queue and stack class program that deals with a palindrome, I need someone to help to put in templates then rerun the code. I'd greatly appreciate it. It's in C++. Here is my program: #include<iostream> #include<list> #include<iterator> #include<string> using namespace std; class Queue { public: list <char> queue; Queue() { list <char> queue; } void Push(char item) { queue.push_back(item); } char pop() { char first = queue.front(); queue.pop_front(); return first; } bool is_empty() { if(queue.empty()) { return...
Program is in C++, program is called airplane reservation. It is suppose to display a screen of seating chart in the format 1 A B C D E F through 10. I had a hard time giving the seats a letter value. It displays a correct screen but when I reserve a new seat the string seats[][] doesn't update to having a X for that seat. Also there is a file for the struct called systemUser.txt it has 4 users...
Write a C++ Program. You have a following class as a header file (dayType.h) and main(). #ifndef H_dayType #define H_dayType #include <string> using namespace std; class dayType { public: static string weekDays[7]; void print() const; string nextDay() const; string prevDay() const; void addDay(int nDays); void setDay(string d); string getDay() const; dayType(); dayType(string d); private: string weekDay; }; #endif /* // Name: Your Name // ID: Your ID */ #include <iostream>...
c++, I am having trouble getting my program to compile, any help would be appreciated. #include <iostream> #include <string> #include <string.h> #include <fstream> #include <stdlib.h> using namespace std; struct record { char artist[50]; char title[50]; char year[50]; }; class CD { //private members declared private: string artist; //asks for string string title; // asks for string int yearReleased; //asks for integer //public members declared public: CD(); CD(string,string,int); void setArtist(string); void setTitle(string); void setYearReleased(int); string getArtist() const; string getTitle() const; int...
1. (40’) In myStack.cpp, implement the member functions of the class myStack, which is the class for integer stacks. 2. (20’) In stackTest.cpp, complete the implementation of function postfixTest(), which use an integer stack to evaluate post-fix expressions. For simplicity, you can assume the post-fix expression is input character by character (i.e., not an entire string), and each operand is a non-negative, single-digit integer (i.e., 0,1,…,9). However, you are supposed to detect invalid/ illegal post-fix expression input, e.g., “4 5...