PageRenderTime 25ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/cpp-homework/Bookshop/controller.cpp

https://github.com/xhbang/SRTP
C++ | 336 lines | 264 code | 63 blank | 9 comment | 37 complexity | 6047cf7c68f378dc80a3383460fc39b7 MD5 | raw file
  1. //管理员函数文件
  2. #ifndef COTROLLER_CPP
  3. #define COTROLLER_CPP
  4. #include "controller.h"
  5. #include <iostream>
  6. #include <conio.h>
  7. #include <sstream>
  8. #include <iomanip>
  9. #include <fstream>
  10. #include <functional>
  11. #include <algorithm>
  12. #include <string>
  13. #include <vector>
  14. using namespace std;
  15. //***************************查看已进的书籍************************************
  16. void Controller::read_enterbook()
  17. {
  18. string mon;
  19. string day;
  20. string year;
  21. string time;
  22. string bookname;
  23. string author;
  24. string serial_number ;
  25. int number;
  26. double price;
  27. ifstream infile ("enteredbook.txt",ios::in);
  28. if (!infile)
  29. throw 1;
  30. else
  31. while (infile>>mon)
  32. {
  33. infile >> day >> year >> time >> serial_number >> bookname >> author >> number >> price;
  34. cout << left << setw(3) << mon << setw(3) << day << setw(5) << year << setw(10) << time
  35. << setw(10) << serial_number << setw(16) << bookname << setw(16) << author
  36. << setw(6) << number << setw(6) << price << endl << endl;
  37. }
  38. }
  39. //******************************进书**************************************
  40. void Controller::enter_book()
  41. {
  42. vector< Book > a;
  43. Book book;
  44. a = setbookshop();
  45. string bookname;
  46. string author;
  47. string serial_number ;
  48. int number;
  49. double price;
  50. ofstream enter("enterbook.txt",ios::app);
  51. if (!enter)
  52. throw 1;
  53. else
  54. {
  55. b: cout << "请输入编号 : " ;
  56. cin >>serial_number ;
  57. cout << "请输入书名 : " ;
  58. cin >> bookname ;
  59. cout << "请输入作者姓名 : " ;
  60. cin >> author;
  61. cout << "请输入数量 : " ;
  62. cin>>number;
  63. cout << "请输入单价 : ";
  64. cin >> price;
  65. for( int i = 0; i <a.size() ; i++ )
  66. if( serial_number == a[i].get_serial_number() )
  67. if( bookname != a[i].get_bookname() || author !=a[i].get_author() || price != a[i].get_price() )
  68. throw 2;
  69. else
  70. {
  71. a[i].set_number(a[i].get_number() + number) ;
  72. enter <<left<<setw(12)<<__DATE__
  73. <<setw(12)<<__TIME__<<setw(10)<<serial_number
  74. << setw( 16 ) <<bookname << setw( 16 ) << author
  75. << setw( 8 ) <<number << setw( 10 ) << price << endl;
  76. break;
  77. }
  78. if( i >= a.size() )
  79. {
  80. book.set_serial_number(serial_number);
  81. book.set_bookname(bookname);
  82. book.set_author(author);
  83. book.set_number(number);
  84. book.set_price(price);
  85. a.push_back(book);
  86. enter <<left<<setw(12)<<__DATE__
  87. <<setw(12)<<__TIME__<<setw(10)<<serial_number
  88. << setw( 16 ) <<bookname << setw( 16 ) << author
  89. << setw( 8 ) <<number << setw( 10 ) << price << endl;
  90. }
  91. cout << "继续请按 y ,否则请按其他任意键。请选择 : ";
  92. char ch;
  93. cin >> ch;
  94. if( ch == 'y' )
  95. goto b;
  96. else
  97. {
  98. ofstream outfile( "Bookshop.txt" );
  99. if( !outfile )
  100. throw 1;
  101. else
  102. {
  103. for (i=0;i<a.size();i++)
  104. {
  105. outfile << left <<setw( 10 ) << a[i].get_serial_number() << setw( 16 ) << a[i].get_bookname()
  106. << setw( 16 ) << a[i].get_author() << setw( 8 ) << a[i].get_number()
  107. << setw( 10 ) << a[i].get_price() << endl;
  108. }
  109. }
  110. outfile.close();
  111. }
  112. enter.close();
  113. }
  114. }
  115. //***************************查看已销售的书******************************************
  116. void Controller::see_soldbook()
  117. {
  118. vector<Book> a;
  119. ifstream infile( "Soldbook.txt" , ios::in );
  120. if( !infile )
  121. throw 1;
  122. else {
  123. infile.read( (char *)&a,sizeof( vector<Book> ) );
  124. book_sort( a, 'M');
  125. }
  126. infile.close();
  127. cout << "需要删除销售记录请按 y , 否则请按其他任意键 :";
  128. char ch;
  129. cin >> ch;
  130. if( ch == 'y' )
  131. clear_message( "soldbook.txt" );
  132. }
  133. //*****************************输入密码 ,正确后才能进入管理员界面******************************************
  134. void Controller::enter_password()
  135. {
  136. string password;
  137. string s1;
  138. int i = 0,m = 0;
  139. ifstream infile( "Coding.txt" );
  140. if( !infile )
  141. {
  142. throw 1;
  143. infile.close();
  144. }
  145. else{
  146. infile >> s1;
  147. infile.close();
  148. cout << "\n 请输入密码 : ";
  149. password=getpwd( pwd );
  150. if( s1 == password )
  151. showControllerLoginMenu();
  152. else
  153. {
  154. while( 1 )
  155. {
  156. cout<<"\n 请输入密码 : ";
  157. password=getpwd( pwd );
  158. if(s1==password)
  159. {
  160. showControllerLoginMenu();
  161. break;
  162. }
  163. else{
  164. cout << "登录失败 ! (输入 y 表示重新登录,其他任意键表示不登录.) \n "
  165. << " 请选择 : ";
  166. char m;
  167. cin >> m;
  168. if(m == 'y')
  169. pwd.clear();
  170. else
  171. goto f;
  172. }
  173. }
  174. }
  175. f: cout << endl;
  176. }
  177. }
  178. //************************管理员界面********************************
  179. char Controller::showControllerLoginMenu()
  180. {
  181. system( "cls" );
  182. system( "color 47" );
  183. cout << endl << " 尊敬的管理员,你好! " << endl
  184. << " >>>>>>>>>>>>>>> 欢迎监督书店营业状况 <<<<<<<<<<<<<<< " << endl
  185. << " >> 请选择功能: >> " << endl
  186. << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " << endl
  187. << " >> 1.找书 >> " << endl
  188. << " >> 2.查看销售业绩 >> " << endl
  189. << " >> 3.买进书籍 >> " << endl
  190. << " >> 4.查看已卖出的书籍 >> " << endl
  191. << " >> 5.查看已售完的书籍 >> " << endl
  192. << " >> 6.修改密码 >> " << endl
  193. << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> " << endl;
  194. cout<<"请选择 : ";
  195. char ch;
  196. cin>>ch;
  197. return ch;
  198. }
  199. //********************查看留言****************************************
  200. void Controller::read_leaved_words(){
  201. string s1=0;
  202. ifstream infile( "Leavedwords.txt" );
  203. if( !infile )
  204. throw 1;
  205. else
  206. {
  207. while( infile >> s1 )
  208. {
  209. cout << s1 << endl;
  210. }
  211. cout << "是否清除留言 ? "
  212. << " (输入 y 表示清除留言 , 其他任意键表示不清除留言 .)\n"
  213. << "请选择 : ";
  214. char i;
  215. cin >> i;
  216. if( i == 'y' )
  217. clear_message( "leavewords.txt" );
  218. }
  219. }
  220. //*******************************修改密码****************************************
  221. void Controller::changepassword()
  222. {
  223. b: cout << "请输入新密码 : ";
  224. coding1 = getpwd( pwd );
  225. pwd.clear();
  226. cout << "请确认新密码 : ";
  227. coding2 = getpwd( pwd );
  228. pwd.clear();
  229. if( coding1 == coding2 )
  230. {
  231. ofstream outfile( "Coding.txt" );
  232. if( !outfile )
  233. throw 1;
  234. else{
  235. outfile << coding1 << endl;
  236. cout << "修改成功 !\n";
  237. }
  238. outfile.close();
  239. }
  240. else{
  241. cout << "输入错误 , 请确认后重新输入 !\n";
  242. goto b;
  243. }
  244. }
  245. //****************************密码设置方式******************************************
  246. string Controller::getpwd( vector<char> &vec )
  247. {
  248. char c = 0 ;
  249. while( ( c = _getch() )!= '\r' )
  250. { //_getch() 接收一个字符 且不在屏幕上显示
  251. if(c == 0x08) //0x08 为退格符 判断是不是输入的退格符
  252. {
  253. if( !vec.empty() )
  254. {
  255. cout << char(0x08) <<' '<<char(0x08); //若是退格符 进行退格 退格符不进行抹除 所以要输出一个空格
  256. vec.pop_back();
  257. }
  258. continue;
  259. }
  260. else
  261. vec.push_back( c );
  262. cout << '*' ;
  263. }
  264. cout << endl;
  265. char* cpwd = new char[ vec.size() + 1 ];
  266. char* p = cpwd;
  267. for ( int i = 0 ; i < vec.size() ; i++ , cpwd++ )
  268. *cpwd = vec[i] ;
  269. *cpwd = '\0' ;
  270. string spwd(p);
  271. return spwd;
  272. }
  273. #endif