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++ 课程设计的主要内容,如果未能解决你的问题,请参考以下文章

C++程序设计课程主页-2015级

课程设计|C++设计一个哈夫曼编码器/译码器设计

C语言课程设计:学生学籍管理系统。有谁有代码给我做个参考吗?谢谢了,C语言和C++的都可以。

数据结构课程设计:高铁信息管理系统(C++实现)

数据结构课程设计:高铁信息管理系统(C++实现)

课程设计|C++实现两个链表的合并