online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
#include <bits/stdc++.h> using namespace std; struct node { int real_order; //真實的順序 string order; //病人的號碼 string id; //病人的身分證字號 string name; //病人的名字 node *next; }; node *head = new node; int r_order = 0; //真實總人數 //掛號 void add_node (string order, string id, string name) { node *temp = head; //掛第一號的情況 if (r_order == 0) { //開始新增節點 head -> real_order = r_order; head -> order = order; head -> id = id; head -> name = name; r_order += 1; } //掛其他號的情況 else { //搜尋目標節點 for (int i=0; i<r_order-1; i++) { if (temp -> next -> order > order) break; temp = temp -> next; } //開始新增節點 node *new_node = new node; new_node -> next = temp -> next; temp -> next = new_node; new_node -> real_order = temp -> real_order+1; new_node -> order = order; new_node -> id = id; new_node -> name = name; r_order += 1; //新增的節點後面的節點真實順序+1 temp = new_node -> next; for (int i=new_node -> real_order+1; i<r_order; i++) { temp -> real_order += 1; temp = temp -> next; } } } //取消掛號 void delete_node (string id) { node *temp = head; //判斷ID number是否存在 if (r_order == 1 && head -> id != id) { cout << "Please enter a correct ID number!\n" << '\n'; return; } //取消首項的情況 if (head -> id == id) { //開始刪除節點 if (r_order == 1) { free(head); //釋放記憶體 head = new node; } else { head = temp -> next; free(temp); //釋放記憶體 temp = head; //刪除的節點後面的節點真實順序-1 for (int i=temp -> real_order; i< r_order; i++) { temp -> real_order -= 1; temp = temp -> next; } } r_order -= 1; } //取消其他項的情況 else { //搜尋目標節點 for (int i=0; i<r_order-1; i++) { if (temp -> next -> id == id) break; //判斷ID number是否存在 else if (i == r_order-2) { cout << "Please enter a correct ID number!\n" << '\n'; return; } temp = temp -> next; } //開始刪除節點 //刪除最後一項 if (temp -> next -> real_order == r_order-1) { temp -> next = NULL; } //刪除其他項 else { temp -> next = temp -> next -> next; temp = temp -> next; //刪除的節點後面的節點真實順序-1 for (int i=temp -> real_order; i< r_order-1; i++) { temp -> real_order -= 1; temp = temp -> next; } } r_order -= 1; } } //過號 void drag_node (string id) { node *temp = head; node *target; //判斷ID number是否存在 if (r_order == 1 && head -> id != id) { cout << "Please enter a correct ID number!\n" << '\n'; return; } //第一項過號 if (head -> id == id) { //開始拖動節點 //長度>=5的串列情況 if (r_order >= 5) { head = temp -> next; if (temp -> order[temp -> order.size()-1] != '*') temp -> order += '*'; //標註過號 target = temp -> next -> next -> next; temp -> next = target -> next; target -> next = temp; temp -> real_order = target -> real_order; target = temp; temp = head; //越過的節點真實順序-1 for (int i=0; i<3; i++) { temp -> real_order -= 1; temp = temp -> next; } } //長度>=2且<5的情況 else if (r_order >= 2) { head = temp -> next; if (temp -> order[temp -> order.size()-1] != '*') temp -> order += '*'; //標註過號 target = temp; //搜尋目標節點位置 for (int i=0; i<r_order-1; i++) { target = target -> next; } temp -> real_order = target -> real_order; target -> next = temp; temp -> next = NULL; temp = head; //越過的節點真實順序-1 for (int i=0; i<r_order-1; i++) { temp -> real_order -= 1; temp = temp -> next; } } } //其他項過號 else { for (int i=0; i<r_order-1; i++) { if (temp -> next -> id == id) { //判斷該號是否為最後一號 if (i == r_order-2) { cout << "This is the last person!\n" << '\n'; return; } break; } //判斷ID number是否存在 else if (i == r_order-2) { cout << "Please enter a correct ID number!\n" << '\n'; return; } temp = temp -> next; } node *pre_temp = temp; temp = pre_temp -> next; if (temp -> order[temp -> order.size()-1] != '*') temp -> order += '*'; //標註過號 int r_minus = r_order - temp -> real_order; //開始拖動節點 //從該節點到最後一個節點>=5項的情況 if (r_minus >= 5) { target = temp -> next -> next -> next; pre_temp -> next = temp -> next; temp -> next = target -> next; target -> next = temp; temp -> real_order = target -> real_order; temp = pre_temp -> next; //越過的節點真實順序-1 for (int i=0; i<3; i++) { temp -> real_order -= 1; temp = temp -> next; } } //其他情況 else { pre_temp -> next = temp -> next; target = temp; for (int i=0; i<r_minus-1; i++) { target = target -> next; } target -> next = temp; temp -> next = NULL; temp -> real_order = target -> real_order; temp = pre_temp -> next; //越過的節點真實順序-1 for (int i=0; i<r_minus-1; i++) { temp -> real_order -= 1; temp = temp -> next; } } } } //輸出病人排序清單 void print_list () { node *temp = head; cout << "Patients order list:\n"; if (r_order == 0) cout << "None\n"; //判斷是否有連結串列 else { for (int i=0; i<r_order; i++) { cout << temp -> order << ' ' << temp -> id << ' ' << temp -> name << '\n'; temp = temp -> next; } } cout << '\n'; } int main () { cout << "TS Hospital online appointment system\n" << '\n' << '\n'; cout << "Please choose one task:\n" << '\n' << "A. Make an appointment.\nB. Cancel an appointment.\nC. Miss\nD. End\n" << '\n'; string to_do; while (getline(cin, to_do)) { if (to_do.size() == 0) continue; //無輸入不回應 if (to_do == "A" || to_do == "a") { cout << "Enter (number, ID number, Name)\n" << '\n'; string order, id, name; cin >> order >> id; getline(cin, name); add_node(order, id, name); print_list(); cout << '\n'; } else if (to_do == "B" || to_do == "b") { if (r_order == 0) { cout << "Please make an appointment first!\n" << '\n' << '\n'; cout << "Please choose one task:\n" << '\n' << "A. Make an appointment.\nB. Cancel an appointment.\nC. Miss\nD. End\n" << '\n'; continue; } cout << "Enter (ID number)\n" << '\n'; string id; cin >> id; delete_node(id); print_list(); cout << '\n'; } else if (to_do == "c" || to_do == "C") { if (r_order == 0) { cout << "Please make an appointment first!\n" << '\n' << '\n'; cout << "Please choose one task:\n" << '\n' << "A. Make an appointment.\nB. Cancel an appointment.\nC. Miss\nD. End\n" << '\n'; continue; } if(r_order > 1) { cout << "Enter (ID number)\n" << '\n'; string id; cin >> id; drag_node(id); } else cout << "There is only one patient!\n" << '\n'; print_list(); cout << '\n'; } else if (to_do == "d" || to_do == "D") break; else cout << "Please enter a correct command\n" << '\n'; //指令輸入錯誤 to_do.clear(); cout << "Please choose one task:\n" << '\n' << "A. Make an appointment.\nB. Cancel an appointment.\nC. Miss\nD. End\n" << '\n'; } return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue