模拟ATM(C语言)

约定不等于承诺〃 2022-07-03 14:54 163阅读 0赞
  1. //****************模拟ATM****************
  2. //作者:马露露
  3. //版本:v1.0
  4. //创建时间:2017.04.10
  5. //主要功能:
  6. // 1.模拟ATM(自动柜员机)主界面。
  7. // 2.模拟ATM(自动柜员机)查询功能(Quary)。
  8. // 3.模拟ATM(自动柜员机)存款功能(Credit)。
  9. // 4.模拟ATM(自动柜员机)取款功能(Debit)。
  10. // 5.退出功能(即返回主界面)。
  11. //要求:
  12. // 1.用文件保存用户卡号和密码,用以进行身份验证。
  13. // 2.完成打印凭条功能。
  14. //****************************************
  15. #include<stdio.h>
  16. #include<stdlib.h>
  17. #include<conio.h>
  18. #define N 200
  19. void enterATM(); //ATM账号输入函数
  20. void inputMima(); //密码输入函数
  21. void menu(); //基本操作界面
  22. void Debit(); //取款函数
  23. void success(); //操作成功函数
  24. void delay(); //延时函数
  25. void Quary(); //余额查询函数
  26. void Credit(); //存款函数
  27. void panDuan(double z); //判断取款是否合法函数
  28. void exit(); //退出界面函数
  29. void miMa(); //密码修改
  30. void read(); //文件写入函数
  31. void write(); //文件读取函数
  32. typedef struct
  33. {
  34. int zhanghao;
  35. int mima;
  36. double yu_e;
  37. }atm;
  38. atm ATM[N];
  39. int k;
  40. //ATM账号输入函数
  41. void enterATM()
  42. {
  43. delay();
  44. system("cls");
  45. read();
  46. printf("*******************************\n");
  47. printf("* 欢迎使用 ATM 柜台机 *\n");
  48. printf("* 请输入卡号 *\n");
  49. int user;
  50. scanf("%d",&user);
  51. if(user==0)
  52. {
  53. printf("* 账号错误 *\n");
  54. enterATM();
  55. }
  56. else if(user!=(ATM[k].zhanghao))
  57. {
  58. for(k=1;k<N;k++)
  59. {
  60. if(user==(ATM[k].zhanghao))
  61. inputMima( );
  62. }
  63. system("cls");
  64. printf("* 账户不存在,请从新输入 *\n");
  65. enterATM();
  66. }
  67. else
  68. inputMima( );
  69. }
  70. //密码输入函数
  71. void inputMima( )
  72. {
  73. int code;
  74. int temp=3;
  75. read();
  76. system("cls");
  77. printf("* 请输入密码 *\n");
  78. scanf("%d",&code);
  79. while(code!=ATM[k].mima)
  80. {
  81. temp--;
  82. system("cls");
  83. printf("* 密码错误,请重新输入 *\n");
  84. printf("* 您还有 ");
  85. printf("%d",temp);
  86. printf(" 次机会 *\n");
  87. scanf("%d",&code);
  88. if(temp==1)
  89. {
  90. system("cls");
  91. printf("* 您已经 3 次输入密码 *\n");
  92. printf("* 系统将退出操作 *\n");
  93. delay();
  94. enterATM();
  95. }
  96. }
  97. menu();
  98. }
  99. //取款函数
  100. void Debit()
  101. {
  102. double temp;
  103. system("cls");
  104. printf(" 请选择您要取款的金额 \n");
  105. printf(" 1.100 2.200 \n");
  106. printf(" 3.500 4.800 \n");
  107. printf(" 5.1000 6.其它 \n");
  108. printf(" 7.返回 8.退出 \n");
  109. switch(getch())
  110. {
  111. case '1': panDuan(100);
  112. break;
  113. case '2': panDuan(200);
  114. break;
  115. case '3': panDuan(500);
  116. break;
  117. case '4': panDuan(800);
  118. break;
  119. case '5': panDuan(1000);
  120. break;
  121. case '6':
  122. system("cls");
  123. printf("请输入您要取款的金额:");
  124. scanf("%lf",&temp);
  125. panDuan(temp);
  126. break;
  127. case '7':menu();
  128. break;
  129. case '8':exit();
  130. break;
  131. }
  132. }
  133. //余额查询函数
  134. void Quary()
  135. {
  136. read();
  137. system("cls");
  138. printf("你的余额为:%lf\n",(ATM[k].yu_e));
  139. printf("1.返回 2.退出 \n");
  140. switch(getch())
  141. {
  142. case '1': menu();
  143. break;
  144. case '2': exit();
  145. break;
  146. }
  147. }
  148. //判断取款是否合法函数
  149. void panDuan(double z)
  150. {
  151. int beishu;
  152. if(z>(ATM[k].yu_e))
  153. {
  154. system("cls");
  155. printf(" 余额不足! \n");
  156. printf(" 请重新操作 \n");
  157. printf(" 1.返回 2.退出 \n");
  158. switch(getch())
  159. {
  160. case '1': Debit();
  161. case '2': exit();
  162. }
  163. }
  164. beishu=(int)z%100;
  165. if(beishu!=0)
  166. {
  167. system("cls");
  168. delay( );
  169. printf(" 本ATM机只支持 100 的人民币 \n");
  170. printf(" 请重新操作 \n");
  171. printf(" \n");
  172. printf(" 1.返回 2.退出 \n");
  173. switch(getch())
  174. {
  175. case '1': Debit();
  176. case '2': exit();
  177. }
  178. }
  179. if(z==5000.00||z>5000.00)
  180. {
  181. system("cls");
  182. printf(" 每次取款不能超过 5000 元 \n");
  183. printf(" 请重新操作 \n");
  184. printf(" \n");
  185. printf(" 1.返回 2.退出 \n");
  186. switch(getch())
  187. {
  188. case '1': Debit();
  189. case '2': exit();
  190. }
  191. }
  192. (ATM[k].yu_e)-=z;
  193. write();
  194. success();
  195. }
  196. //存款函数
  197. void Credit( )
  198. {
  199. double cun;
  200. system("cls");
  201. printf(" 请放入人民币:");
  202. scanf("%lf",&cun);
  203. while(cun<0)
  204. {
  205. system("cls");
  206. printf(" 非法存款 \n");
  207. printf(" 请重新放入人民币 \n");
  208. scanf("%lf",&cun);
  209. }
  210. (ATM[k].yu_e)+=cun;
  211. write();
  212. success();
  213. }
  214. //密码修改函数
  215. void miMa()
  216. {
  217. int mm1,mm2,mm3;
  218. int temp;
  219. system("cls");
  220. printf("旧密码:");
  221. scanf("%d",&mm1);
  222. printf("\n");
  223. if(mm1!=ATM[k].mima)
  224. {
  225. system("cls");
  226. printf("旧密码错误,请重新输入\n");
  227. delay();
  228. miMa();
  229. }
  230. printf("新密码:");
  231. scanf("%d",&mm2);
  232. if(mm2<100000||mm2>999999)
  233. {
  234. system("cls");
  235. printf(" 密码必须等于6位数 \n");
  236. printf(" 请重新输入! \n");
  237. delay();
  238. miMa();
  239. }
  240. temp=mm2%111111;
  241. if(temp==0)
  242. {
  243. system("cls");
  244. printf(" 密码过于简单 \n");
  245. printf(" 请重新输入! \n");
  246. delay( );
  247. miMa( );
  248. }
  249. printf("\n");
  250. printf("确认新密码:");
  251. scanf("%d",&mm3);
  252. if(mm2!=mm3)
  253. {
  254. system("cls");
  255. printf("确认密码不一致,请重新输入\n");
  256. delay( );
  257. miMa();
  258. }
  259. if(mm3=mm2)
  260. {
  261. ATM[k].mima=mm3;
  262. write();
  263. success();
  264. }
  265. }
  266. //延时函数
  267. void delay( )
  268. {
  269. long int bl1;
  270. int bl2;
  271. for(bl1=600000;bl1>0;bl1--)
  272. {
  273. for(bl2=300;bl2>0;bl2--);
  274. }
  275. }
  276. //操作成功函数
  277. void success( )
  278. {
  279. system("cls");
  280. printf(" 操作已成功 \n");
  281. printf(" \n");
  282. printf(" 1.返回 2.退出 \n");
  283. switch(getch())
  284. {
  285. case '1':menu();
  286. break;
  287. case '2':exit();
  288. break;
  289. }
  290. }
  291. //系统退出函数
  292. void exit()
  293. {
  294. system("cls");
  295. printf("* 欢迎您的再次使用 *\n");
  296. printf("* 系统正在退出... *\n");
  297. delay();
  298. enterATM();
  299. }
  300. //文件读取函数
  301. void read()
  302. {
  303. int i;
  304. FILE *fp;
  305. fp=fopen("xinxi.txt","r");
  306. if(fp==NULL)
  307. {
  308. printf("打开文件失败\n");
  309. return;
  310. }
  311. for(i=0;i<N;i++)
  312. {
  313. fscanf(fp,"%d",&(ATM[i].zhanghao));
  314. fscanf(fp,"%d",&(ATM[i].mima));
  315. fscanf(fp,"%lf\n",&(ATM[i].yu_e));
  316. }
  317. fclose(fp);
  318. }
  319. //文件写入函数
  320. void write()
  321. {
  322. int i;
  323. FILE *fp;
  324. fp=fopen("xinxi.txt","w");
  325. if(fp==NULL)
  326. {
  327. printf("打开文件失败\n");
  328. return;
  329. }
  330. for(i=0;i<N;i++)
  331. {
  332. fprintf(fp,"%d",ATM[i].zhanghao);
  333. fprintf(fp,"%d",ATM[i].mima);
  334. fprintf(fp,"%lf\n",ATM[i].yu_e);
  335. }
  336. fclose(fp);
  337. }
  338. //主操作界面函数
  339. void menu( )
  340. {
  341. system("cls");
  342. printf("********************************\n");
  343. printf("* 请选择一下业务 *\n");
  344. printf("* 1.修改密码 *\n");
  345. printf("* 2.余额查询 *\n");
  346. printf("* 3.取款 *\n");
  347. printf("* 4.存款 *\n");
  348. printf("* 5.退出 *\n");
  349. printf("********************************\n");
  350. switch(getch())
  351. {
  352. case '1': miMa();
  353. break;
  354. case '2': Quary();
  355. break;
  356. case '3': Debit();
  357. break;
  358. case '4': Credit();
  359. break;
  360. case '5': exit();
  361. break;
  362. default:
  363. {
  364. printf("\a非法操作\n");
  365. menu();
  366. };
  367. }
  368. }
  369. //主函数
  370. void main()
  371. {
  372. enterATM();
  373. }

发表评论

表情:
评论列表 (有 0 条评论,163人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c语言模拟实现memmove

    为什么写这篇博客,因为我很多次都被它考住了!!!!!!!!!! 首先 memmove 是一个内存操作函数,不是字符串操作函数,它可以处理多种类型的数据。 它的原型

    相关 【C语言模拟实现链表

    链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)访问特定编号的节点

    相关 [C语言] 模拟线程池

    / 题目 【线程池】是一种多任务处理模型,由一个任务队列和若干工作线程组成 【任务队列】任务队列包含若干任务 1. 每个任务包含指向任务数据的指针和处理该任务的函数指