Guest User

Untitled

a guest
Dec 1st, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.44 KB | None | 0 0
  1. /* このプログラムでは、コピーコンストラクタを使用して
  2. strtypeオブジェクトを関数に渡す */
  3. #include <iostream>
  4. #include <cstdlib>
  5. #include <string.h>
  6. using namespace std;
  7.  
  8. class User{
  9. int id;
  10. char *name;
  11. char *pass;
  12. int balance;
  13. public:
  14. User(){};
  15. User(const int id);
  16. User(const User &user);
  17. ~User();
  18. void set_n_p(char *name, char *pass);
  19. int get_id();
  20. char* get_name();
  21. void check_balance();
  22. void deposit(int add_money);
  23. void withdraw(int sub_money);
  24. };
  25.  
  26. // 引数1つのコンストラクタ
  27. User::User(const int id){
  28. this->id = id;
  29. }
  30.  
  31. // コピーコンストラクタ
  32. User::User(const User &user){
  33. id = user.id;
  34. balance = user.balance;
  35.  
  36. int l_n;
  37. int l_p;
  38.  
  39. l_n = strlen(name)+1;
  40. l_p = strlen(pass)+1;
  41.  
  42. name = new char [l_n];
  43. pass = new char [l_p];
  44. if(!name){
  45. cout << "p_nメモリ割り当てエラー\n";
  46. exit(1);
  47. }
  48. if(!pass){
  49. cout << "p_pメモリ割り当てエラー\n";
  50. exit(1);
  51. }
  52. strcpy(name, user.name);
  53. strcpy(pass, user.pass);
  54. }
  55.  
  56. // デストラクタ
  57. User::~User(){
  58. delete name;
  59. delete pass;
  60. }
  61.  
  62. int User::get_id(){
  63. return id;
  64. }
  65.  
  66. char* User::get_name(){
  67. return name;
  68. }
  69.  
  70. void User::check_balance(){
  71. cout << "残高は," << this->balance << "円になります." << endl;
  72. }
  73.  
  74. void User::deposit(int add_money){
  75. this->balance += add_money;
  76. }
  77.  
  78. void User::withdraw(int sub_money){
  79. if(this->balance < sub_money){
  80. cout << "残高が不足しています。処理が行えませんでした。" << endl;
  81. }
  82. else{
  83. this->balance -= sub_money;
  84. }
  85. }
  86.  
  87. void User::set_n_p(char *temp_name, char *temp_pass){
  88. int l_n;
  89. int l_p;
  90.  
  91. l_n = strlen(temp_name) + 1;
  92. l_p = strlen(temp_pass) + 1;
  93.  
  94. name = new char [l_n];
  95. pass = new char [l_p];
  96. if(!name){
  97. cout << "p_nメモリ割り当てエラー\n";
  98. exit(1);
  99. }
  100. if(!pass){
  101. cout << "p_pメモリ割り当てエラー\n";
  102. exit(1);
  103. }
  104. strcpy(name, temp_name);
  105. strcpy(pass, temp_pass);
  106. }
  107.  
  108. int select_user(User* users, int num_user){
  109. cout << "ユーザーIDに対応する番号を下記から選択し、入力してください。" << endl;
  110. for(int i = 0; i < num_user; i++){
  111. cout << i << ". " << users[i].get_name() << endl;
  112. }
  113. int target_id;
  114. while(true){
  115. cout << "<<";
  116. cin >> target_id;
  117. if(0 <= target_id <= num_user-1){
  118. target_id = users[target_id].get_id();
  119. break;
  120. }
  121. }
  122. return target_id;
  123. }
  124.  
  125. int main(){
  126. cout << "======= 銀行のATMアプリ =======" << endl;
  127. cout << "ユーザを作りますか?(Yes=>1, No=>0)" << endl;
  128. int answer;
  129. cin >> answer;
  130. if(answer){
  131. cout << "何人のユーザを作りますか?(N>1)" << endl;
  132. int num_user;
  133. cin >> num_user;
  134. if (num_user == 0){
  135. // For debug.
  136. cout << "ユーザを作ります。" << endl;
  137. int temp_id = rand();
  138. User user_1 = User(temp_id);
  139. char temp_name[80];
  140. cout << "アカウント名の入力: ";
  141. cin >> temp_name;
  142. char temp_pass[80];
  143. cout << "パスワードの入力: ";
  144. cin >> temp_pass;
  145. user_1.set_n_p(temp_name, temp_pass);
  146. cout << "アカウント名: " << *user_1.get_name();
  147. cout << ", ユーザのシステムID: " << user_1.get_id() << endl;
  148. }
  149. else{
  150. User* users = new User[num_user];
  151. for (int i = 0; i < num_user; i++){
  152. int temp_id = rand();
  153. users[i] = User(temp_id);
  154. cout << "ユーザ[" << i << "]の"<< endl;
  155. char temp_name[80];
  156. cout << "名前の入力: ";
  157. cin >> temp_name;
  158. char temp_pass[80];
  159. cout << "パスワードの入力: ";
  160. cin >> temp_pass;
  161. cout << endl;
  162. users[i].set_n_p(temp_name, temp_pass);
  163. }
  164. cout << "ユーザを作成しました。" << endl;
  165. cout << "\n行いたい処理を選んでください。"
  166. << "1. お金を預ける, 2. お金を引き出す, 3.残高を確認する, 4.取引をやめる: ";
  167. int process_choice;
  168. while(true){
  169. cin >> process_choice;
  170.  
  171. //if(process_choice == 1){
  172. if(process_choice == 1){
  173. int target_id = select_user(users, num_user);
  174. for(int i = 0; i < num_user; i++){
  175. if(target_id == users[i].get_id()){
  176. cout << users[i].get_name() << "さんが預ける値を入力してください: ";
  177. int deposit_value;
  178. cin >> deposit_value;
  179. users[i].deposit(deposit_value);
  180. }
  181. }
  182. }
  183. else if(process_choice == 2){
  184. int target_id = select_user(users, num_user);
  185. for(int i = 0; i < num_user; i++){
  186. if(target_id == users[i].get_id()){
  187. cout << users[i].get_name() << "さんが引き出したい値を入力してください: ";
  188. int with_value;
  189. cin >> with_value;
  190. users[i].withdraw(with_value);
  191. }
  192. }
  193. }
  194. else if(process_choice == 3){
  195. int target_id = select_user(users, num_user);
  196. for(int i = 0; i < num_user; i++){
  197. if(target_id == users[i].get_id()){
  198. cout << users[i].get_name() << "さんの";
  199. users[i].check_balance();
  200. }
  201. }
  202. }
  203. else if(process_choice == 4){
  204. break;
  205. }
  206. cout << "行いたい処理を選んでください。"
  207. << "1. お金を預ける, 2. お金を引き出す, 3.残高を確認する, 4.取引をやめる:";
  208. }
  209. cout << "システムを終了します。ありがとうございました。" << endl;
  210. }
  211. }
  212. else{
  213. cout << "システムを終了します。";
  214. }
  215. return 0;
  216. }
Add Comment
Please, Sign In to add comment