C++ 课程设计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 课程设计相关的知识,希望对你有一定的参考价值。
题目:电影院售票管理系统的设计
设计说明与要求:
1、设计资料及参数:
用C++设计一个系统,能提供下列服务:
(1)录入放映信息,格式为:
放映日期 | 放映时间 | 场次 | 电影名称 | 票价 | 会员折扣 | 剩余座位 |
2016-6-2 | 15:30 | 1 | ×× | 30 | 8 | 78 |
可不定时地增加放映数据
(2)浏览放映信息,可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息
(3)查询电影:可按日期或电影名查询
(4)售票和退票功能:
A:查询电影名。当剩余座位数大于 0 ,并且当前系统时间小于放映时间时才能售票,计算会员折扣,售票后自动更新剩余座位数。
B:退票时,输入退票的电影名和场次,当电影未放映时才能退票,如果以会员折扣购买的电影票,退票按折扣退款,退票后自动更新剩余座位数。
2、设计要求:
根据系统功能要求,可将问题解决分为以下步骤:
(1)分析系统中的各个实体质检的关系及其属性和行为;
(2)根据问题描述,设计系统的类层次;
(3)完成类层次中各个类的描述;
(4)完成类中各个成员函数的定义;
(5)完成系统的应用模块;
(6)功能调试。
源代码:
1 #include <iostream> 2 #include <ctime> 3 #include <string> 4 #include <vector> 5 #include <algorithm> 6 using namespace std; 7 8 enum size{SIZE = 100}; 9 10 // data class declaration 11 class Info 12 { 13 public: 14 Info() {} 15 Info(int d_y, int d_m, int d_d, int t_h, int t_m, int s, string nam, float p, int dis, int n) : 16 date_y(d_y), 17 date_m(d_m), 18 date_d(d_d), 19 time_h(t_h), 20 time_m(t_m), 21 session(s), 22 name(nam), 23 price(p), 24 discount(dis), 25 number(n) {} 26 bool set(); 27 void output(); 28 bool compare_time(struct tm* p); 29 bool compare_date(int y, int m, int d); 30 bool compare_name(string nam); 31 bool seat(char c, int count = 0); 32 float price_discounted() 33 { 34 return price * discount / 10; 35 } 36 private: 37 int date_y, date_m, date_d; // 放映日期,2016-6-2 38 int time_h, time_m; // 放映时间 15 30,重载 << 运算符使输出为 15:30 39 int session; // 场次 40 string name; // 电影名称 41 float price; // 票价 42 int discount; // 会员折扣 43 int number; // 剩余座位 44 }; 45 46 // class member function 47 bool Info::set() 48 { 49 cin >> date_y >> date_m >> date_d >> time_h >> time_m >> session >> name >> price >> discount >> number; 50 if(date_y == 0 || date_m == 0 || date_d == 0) 51 return false; 52 else 53 return true; 54 } 55 56 void Info::output() 57 { 58 cout << date_y << "-" << date_m << "-" << date_d << " " << time_h << ":" << time_m << "\t " << session << "\t " << name << "\t" 59 << price << "\t " << discount << "\t " << number << endl; 60 } 61 62 bool Info::compare_time(struct tm* n) // 201606021530 63 { 64 long tn = (n->tm_year + 1900) * 100000000 + (n->tm_mon + 1) * 1000000 + n->tm_mday * 10000 + n->tm_hour * 100 + n->tm_min; 65 long td = date_y * 100000000 + date_m * 1000000 + date_d * 10000 + time_h * 100 + time_m; 66 // 将年月日时分转换为一个长整数,进行比较 67 if(tn > td || tn == td) 68 return true; // out of date 69 else if(tn < td) 70 return false; // 当前系统时间小于放映时间,即电影未放映 71 } 72 73 bool Info::compare_date(int y, int m, int d) // 20160602 74 { 75 long td = date_y * 10000 + date_m * 100 + date_d; 76 long tc = y * 10000 + m * 100 + d; 77 78 if(td == tc) 79 return true; 80 else 81 return false; 82 } 83 84 bool Info::compare_name(string nam) 85 { 86 if(name == nam) 87 return true; 88 else 89 return false; 90 } 91 92 bool Info::seat(char c, int count) 93 { 94 // c == ‘a‘,剩余座位增加 95 // c == ‘d‘,剩余座位减少 96 // c == ‘c‘,剩余座位大于 0 返回 true 97 if(c == ‘a‘) 98 number += count; 99 else 100 if(c == ‘d‘) 101 number -= count; 102 else 103 if(c == ‘c‘) 104 if(number > 0) 105 return true; 106 else 107 return false; 108 else 109 cout << "unKnown command!" << endl; 110 } 111 112 113 114 // operator class declaration 115 class Operator 116 { 117 public: 118 Operator() {} 119 Operator(vector<Info> i) :v(i){} 120 void menu(); // 菜单 121 void loginMovieInfo(); // 增添信息 122 void browseMovieInfo(); // 浏览信息 123 void queryMovie(); // 查询电影 124 void sellTicket(); // 售票 125 void refundTicket(); // 退票 126 void show(); // 仅显示信息 127 private: 128 vector<Info> v; 129 }; 130 131 void Operator::menu() 132 { 133 int choose; 134 // systen("cls"); 135 system("clear"); 136 137 cout << "\t\t\t欢迎使用电影院售票管理系统" << endl; 138 cout << "\t\t\t 1、增添电影信息" << endl; 139 cout << "\t\t\t 2、浏览电影信息" << endl; 140 cout << "\t\t\t 3、查询电影" << endl; 141 cout << "\t\t\t 4、买票" << endl; 142 cout << "\t\t\t 5、退票" << endl; 143 cout << "\t\t\t 6、退出" << endl; 144 145 cout << "\n请输入你的选择:"; 146 cin >> choose; 147 switch(choose) 148 { 149 case 1:loginMovieInfo();break; 150 case 2:browseMovieInfo();break; 151 case 3:queryMovie();break; 152 case 4:sellTicket();break; 153 case 5:refundTicket();break; 154 case 6:;break; 155 default: cout << "Error: unKnown operator!\n";break; 156 } 157 } 158 159 160 int main() 161 { 162 vector<Info> test; 163 Operator o; 164 165 o.menu(); 166 return 0; 167 } 168 169 170 void Operator::show() 171 { 172 int length = v.size(); 173 cout << "\n现在系统中的电影信息为:\n"; 174 cout << "放映日期 放映时间 场次 电影名称\t票价\t会员折扣 剩余票数" << endl; 175 for(int i = 0; i < length; i++) 176 v.at(i).output(); 177 } 178 179 void Operator::loginMovieInfo() 180 { 181 // systen("cls"); 182 system("clear"); 183 Info tmp; 184 185 cout << "系统中的信息存储为:\n"; 186 cout << "放映日期\n放映时间\n场次\n电影名称\n票价\n会员折扣\n剩余票数\n" << endl; 187 188 cout << "请输入电影的信息并以空格分隔(以0 0 0 0 0 0 0 0 0 0 0结束):" << endl; 189 while(true) 190 { 191 if(!tmp.set()) 192 break; 193 else 194 v.push_back(tmp); 195 } 196 197 show(); 198 199 cout << "按任意键继续" << endl; 200 string s; 201 getline(cin, s); 202 cin.get(); 203 204 menu(); 205 } 206 207 void Operator::browseMovieInfo() 208 { 209 int length = v.size(); 210 time_t t; 211 struct tm* now = NULL; 212 t = time(&t); 213 now = localtime(&t); 214 // year: now->tm_year+1900 215 // month: now->tm_mon+1 216 // day: now->tm_mday 217 // hour: now->tm_hour 218 // min: now->tm_min 219 220 cout << "现在系统中的电影信息为:\n"; 221 cout << "放映日期 放映时间 场次 电影名称\t票价\t会员折扣 剩余票数" << endl; 222 for(int i = 0; i < length; i++) 223 { 224 if(v.at(i).compare_time(now)) 225 cout << "此电影放映结束!\n"; 226 else 227 v.at(i).output(); 228 } 229 // 暂停 230 cout << "按任意键继续" << endl; 231 string s; 232 getline(cin, s); 233 cin.get(); 234 235 menu(); 236 } 237 238 void Operator::queryMovie() 239 { 240 // systen("cls"); 241 system("clear"); 242 243 int choose, year, month, day; 244 int length = v.size(), count; 245 string nam; 246 247 cout << "请选择查询类型:\n1、电影日期\t2、电影名" << endl; 248 cout << "请输入你的选择:"; 249 cin >> choose; 250 if(choose == 1) 251 { 252 count = 0; 253 254 cout << "请输入日期(以空格分隔):"; 255 cin >> year >> month >> day; 256 for(int i = 0; i < length; i++) 257 if(v.at(i).compare_date(year, month, day)) 258 { 259 cout << "放映日期 放映时间 场次 电影名称\t票价\t会员折扣 剩余票数" << endl; 260 v.at(i).output(); 261 } 262 else 263 count++; 264 if(count == length) 265 cout << "没有此电影信息!" << endl; 266 } 267 else 268 if(choose == 2) 269 { 270 count = 0; 271 272 cout << "请输入电影名:"; 273 cin >> nam; 274 275 for(int i = 0; i < length; i++) 276 if(v.at(i).compare_name(nam)) 277 { 278 cout << "放映日期 放映时间 场次 电影名称\t票价\t会员折扣 剩余票数" << endl; 279 v.at(i).output(); 280 } 281 else 282 count++; 283 if(count == length) 284 cout << "没有此电影信息!" << endl; 285 } 286 else 287 cout << "unKnown input!" << endl; 288 289 // 暂停 290 cout << "按任意键继续" << endl; 291 string s; 292 getline(cin, s); 293 cin.get(); 294 295 menu(); 296 } 297 298 void Operator::sellTicket() 299 { 300 // 比较时间 301 int length = v.size(); 302 time_t t; 303 struct tm* now = NULL; 304 t = time(&t); 305 now = localtime(&t); 306 // 比较时间 307 308 string nam; 309 char choose; 310 int count = 0, countc = 0; 311 312 cout << "请输入要买票的电影的电影名:"; 313 cin >> nam; 314 315 for(int i = 0; i < length; i++) 316 { 317 if(v.at(i).compare_name(nam) && v.at(i).seat(‘c‘) && !v.at(i).compare_time(now)) 318 // 电影名 true && 座位数大于 0 && 电影未放映 319 { 320 cout << "会员折扣后票价为:" << v.at(i).price_discounted() << endl; 321 cout << "请确定是否购买?(y/n)"; 322 cin >> choose; 323 if(choose == ‘y‘) 324 { 325 cout << "请输入购买的数量:"; 326 cin >> count; 327 v.at(i).seat(‘d‘, count); 328 cout << "成功购买!" << endl; 329 } 330 else 331 break; 332 } 333 else 334 countc++; 335 } 336 337 if(countc == length) 338 cout << "电影不存在或票已售磐!" << endl; 339 340 // 暂停 341 cout << "按任意键继续" << endl; 342 string s; 343 getline(cin, s); 344 cin.get(); 345 346 menu(); 347 348 } 349 350 void Operator::refundTicket() 351 { 352 // 比较时间 353 int length = v.size(); 354 time_t t; 355 struct tm* now = NULL; 356 t = time(&t); 357 now = localtime(&t); 358 // 比较时间 359 360 string nam; 361 int session; 362 char choose; 363 int count = 0, countc = 0; 364 365 cout << "请输入要退票的电影的电影名:"; 366 cin >> nam; 367 368 for(int i = 0; i < length; i++) 369 { 370 if(v.at(i).compare_name(nam) && !v.at(i).compare_time(now)) 371 // 电影名 true && 电影未放映 372 { 373 cout << "请确定是否退票?(y/n)"; 374 cin >> choose; 375 if(choose == ‘y‘) 376 { 377 cout << "请输入已购买的数量:"; 378 cin >> count; 379 v.at(i).seat(‘a‘, count); 380 cout << "退还现金:" << count * v.at(i).price_discounted() << endl; 381 cout << "退票成功!" << endl; 382 } 383 else 384 break; 385 } 386 else 387 countc++; 388 } 389 390 if(countc == length) 391 cout << "电影不存在或已放映!" << endl; 392 393 // 暂停 394 cout << "按任意键继续" << endl; 395 string s; 396 getline(cin, s); 397 cin.get(); 398 399 menu(); 400 401 }
在 Ubuntu+gcc 下成功通过调试。
以上是关于C++ 课程设计的主要内容,如果未能解决你的问题,请参考以下文章