C++技术支持项目-综合储物业务平台
2012-04-06 20:48
615 查看
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: 技术支持项目-综合储物业务平台 * 作 者: 李洪悬 * 完成日期: 2012 年 1 月 4 日 * 版 本 号: * 对任务及求解方法的描述部分 * 输入描述:帐户信息
* 问题描述:技术支持项目-综合储物业务平台
* 程序输出:生成帐户* 程序头部的注释结束
项目-综合储物平台头文件 //显示欢迎信息 void welcome(); //系统主菜单 void mainmenu(); //开户 void openAnAccount(); //销户 void closeAnAcount(); //存款 void deposit(); //取款 void withdraw(); //查询 void query(); //查找一个账户在数组中的位置 int findAnAccount(int accNumber); //显示一个账户的信息 void dispAnAccount(int i); //生成账号 int createAccNumber(); //检查录入的户名.密码.存入金额格式是否合法。返回值: 0: 合法.1: 非法。 //flag: 0: 户名. 1:密码. 2:存入金额。checkstr: 需要检查的项目。 int checkInput(int flag, char *checkStr); //显示所有账户 void queryall(); //得到键盘录入的户名 void getaccName(char accName[]); //得到键盘录入的密码 void getaccPWD(char accPWD[]); //得到键盘录入的金额 double getcash(int flag); //得到键盘录入的账号 int getaccNumber(int flag); #define N_MAXREC_NO 100//文件最大行数 #define MAXLINE 256//行最大长度 //数据文件记录结构 struct record { int accNumber;//账号 char accName[9];//户名 char accPWD[7];//密码 double balance;//余额 char flag[2];//销户标志 }; //自定义数据类型 typedef struct record RECORD; //结构体数组 RECORD rs[N_MAXREC_NO]; //最后一个账户在结构体中的位置 int maxAccount = -1; 项目-综合储物平台源文件 #include <string.h> #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <ctype.h> #include "bank.h" void main() { char userName[9]; char userPWD[7]; int i; welcome(); for(i = 0; i < 3; i++) { printf("\n"); printf("请输入您的用户名:"); scanf("%s", userName); fflush(stdin); printf("\n"); printf("请输入您的密码:"); scanf("%s",userPWD); fflush(stdin); if ( (strcmp (userName, "admin") == 0) && (strcmp (userPWD, "admin") == 0) ) { //用户名和密码正确,显示主菜单 mainmenu(); } else { if (i < 2) { //用户名或密码错误,提示用户重新输入 printf("用户名或密码错误,请重新输入!"); } else { //连续三次输错用户名或密码,退出系统。 printf("用户名或密码错误,退出系统!"); } } } } //显示欢迎的函数 void welcome() { printf("+----------------------------+\n"); printf("| |\n"); printf("| 欢迎使用储蓄综合业务平台 |\n"); printf("| |\n"); printf("+----------------------------+\n"); } //系统主菜单函数 void mainmenu() { char choice = -1; do { printf("\n"); printf("+-------------------------------------+\n"); printf("| 存款请按1 开户请按4 |\n"); printf("| 取款请按2 销户请按5 |\n"); printf("| 查询请按3 退出请按0 |\n"); printf("+-------------------------------------+\n"); printf("请输入您的选择:"); scanf("%c", &choice); fflush(stdin); switch(choice) { case '0': exit(0); case '1': deposit(); break; case '2': withdraw(); break; case '3': query(); break; case '4': openAnAccount(); break; case '5': closeAnAcount(); break; case '6': queryall(); break; default: printf("\n无效选项!"); } }while(choice != 0); } //开户函数 void openAnAccount() { int accNumber;//账号 char accName[9];//户名 char accPWD[7];//密码 double cash;//存入金额 //初始化变量 accNumber = 0; memset ( accName, 0, sizeof(accName) ); memset ( accPWD, 0, sizeof(accName) ); cash = 0; //生成账号 accNumber = createAccNumber(); //获取账户名称 getaccName(accName); //获取账户密码 getaccPWD(accPWD); //获取存入金额 cash = getcash(0); maxAccount++; rs[maxAccount].accNumber = accNumber; strcpy(rs[maxAccount].accName,accName); strcpy(rs[maxAccount].accPWD,accPWD); rs[maxAccount].balance = cash; strcpy(rs[maxAccount].flag,"0"); //显示账户信息 dispAnAccount(maxAccount); printf("开户成功!按任意键返回主菜单..."); getch(); return; } //显示用户信息函数 void dispAnAccount(int i) { printf("+-------------------------------------------------+\n"); printf("| %-5s | %-8s | %-6s | %-12s | %4s |\n","账号","户名","密码","余额","状态"); printf("+-------+----------+--------+--------------+------+\n"); printf("| %-5d | %-8s | %-6s | %-12.2f | %4s |\n",rs[i].accNumber,rs[i].accName, rs[i].accPWD,rs[i].balance,atoi(rs[i].flag)?"销户":"正常"); printf("+-------------------------------------------------+\n"); } //自动生成账号函数 int createAccNumber() { if(maxAccount == -1) { //账号从开始 return 10001; } else { //顺序产生账号 return rs[maxAccount].accNumber + 1; } } //获取账户名称函数 void getaccName(char accName[]) { char caccName[100];//户名 int i = 1; while(i) { memset(caccName, 0, sizeof(caccName)); printf("\n"); printf("请输入储户户名:"); scanf("%s", caccName); fflush(stdin); if(checkInput(0,caccName)) { printf("超过位的最大户名长度!\n"); continue; } i = 0; } memcpy(accName, caccName, 9); } //获取账户密码函数 void getaccPWD(char accPWD[]) { char caccPWD[100];//密码 int i = 1; while(i) { memset(caccPWD, 0, sizeof(caccPWD)); printf("\n"); printf("请输入储户密码:"); scanf("%s", caccPWD); fflush(stdin); if(checkInput(1,caccPWD)) { printf("超过位的最大密码长度!\n"); continue; } i = 0; } memcpy(accPWD, caccPWD, 7); } //获取存入(取款)金额函数 double getcash(int flag) { char ccash[100];//金额 double dcash;//金额 int i = 1; while(i) { memset(ccash, 0, sizeof(ccash)); dcash = 0; printf("\n"); switch(flag) { case 0: printf("请输入存入金额:");break; case 1: printf("请输入取款金额:");break; } scanf("%lf",&dcash); fflush(stdin); sprintf(ccash,".2f",dcash); if(checkInput(2,ccash)) { printf("录入的金额超过位的最大存入(取出)金额长度!\n"); continue; } i = 0; } return dcash; } //检查账户信息规范函数 int checkInput (int flag, char *checkStr) { switch(flag) { //检查户名是否超过最大长度 case 0: { if(strlen(checkStr) > 8) { return 1; } break; } //检查密码是否超过最大长度 case 1: { if(strlen(checkStr) > 6) { return 1; } break; } //检查存入金额是否超过最大长度 case 2: { if(strlen(checkStr) > 12) { return 1; } break; } default: return 0; } return 0; } //存款函数 void deposit() { int accNumber;//账号 int accountPosition;//账户在数组中位置 double cash;//存入金额 //初始化 accNumber = 0; accountPosition = -1;//-1,表示未找到 cash = 0; //获取存款账号 accNumber = getaccNumber(0); //查找该账户 accountPosition = findAnAccount(accNumber); if (accountPosition == -1) { printf("查无此账户,按任意键返回..."); getch(); return; } //显示账户信息 dispAnAccount(accountPosition); //已销户账户,不能进行存款操作 if (strcmp (rs[accountPosition].flag,"0") != 0) { printf("该账户已经销户,不能存款!按任意键返回..."); getch(); return; } //得到存款金额 cash = getcash(0); rs[accountPosition].balance = rs[accountPosition].balance + cash; dispAnAccount(accountPosition); printf("存款成功!按任意键返回..."); getch(); } //取款函数 void withdraw() { int accNumber;//账号 char accPWD[7];//密码 int accountPosition;//账户在数组中位置 double cash;//取出金额 //初始化 accNumber = 0; accountPosition = -1;//-1,表示未找到 memset (accPWD, 0, sizeof (accPWD)); cash = 0; //获取取款账号 accNumber = getaccNumber(1); //获取取款密码 getaccPWD (accPWD); //查找该账户 accountPosition = findAnAccount(accNumber); if (accountPosition == -1) { printf("查无此账户,按任意键返回..."); getch(); return; } //显示账户信息 dispAnAccount(accountPosition); //已销户账户,不能进行取款操作 if (strcmp (rs[accountPosition].flag,"0") != 0) { printf("该账户已经销户,不能取款!按任意键返回..."); getch(); return; } //密码不正确 if(strcmp(rs[accountPosition].accPWD, accPWD) != 0) { printf("\n密码不正确!按任意键返回..."); getch(); return; } //得到取款金额 cash = getcash(1); //比较金额大小 if( rs[accountPosition].balance < cash) { printf ("余额不足,按任意键返回..."); } else { rs[accountPosition].balance = rs[accountPosition].balance - cash; dispAnAccount(accountPosition); printf("取款成功!按任意键返回..."); getch(); } } //获取账号函数 int getaccNumber (int flag) { int iaccNumber;//账号 iaccNumber = 0; printf("\n"); switch(flag) { case 0: printf ("请输入要存款的账号"); break; case 1: printf ("请输入要取款的账号"); break; case 2: printf ("请输入要销户的账号"); break; case 3: printf ("请输入要查询的账号"); break; } scanf( "%d" , &iaccNumber ); fflush(stdin); return iaccNumber; } //查找账户函数 int findAnAccount (int accNumber) { int accountPosition;//账户在数组中位置 if (accNumber <= rs[maxAccount].accNumber) { accountPosition = accNumber - 10001 ; } return accountPosition; } //查询函数 void query() { int accNumber;//账号 char accPWD[7];//密码 int accountPosition;//账户在数组中的位置 //初始位置是-1,表示未找到 accountPosition = -1; accNumber = 0; memset (accPWD, 0, sizeof (accPWD)); //获取要查询的账户 accNumber = getaccNumber(3); //获取要查询的账户密码 getaccPWD(accPWD); //查找此账户 accountPosition = findAnAccount(accNumber); if (accountPosition == -1) { printf ("查无此账户,按任意键返回..."); getch(); return; } //显示账户信息 dispAnAccount (accountPosition); //密码不正确 if (strcmp (rs[accountPosition].accPWD,accPWD) != 0) { printf ("\n密码不正确!按任意键返回..."); getch(); return; } //已销户账户 if (strcmp(rs[accountPosition].flag, "0") != 0) { printf ("\n该账户已经销户!按任意键返回..."); getch(); return; } printf ("\n查询成功!按任意键返回..."); getch(); return; } //销户函数 void closeAnAcount() { int accNumber;//账号 char accPWD[7];//密码 char userAnswer;//用户的回答 int accountPosition;//账户在数组中的位置 //初始化 accountPosition = -1;//-1,表示未找到 accNumber = 0; memset ( accPWD, 0, sizeof(accPWD) ); //获取要销户的账号 accNumber = getaccNumber(2); //获取要销户的账户密码 getaccPWD(accPWD); //查找该帐户 accountPosition = findAnAccount(accNumber); if(accountPosition == -1) { printf("查无此帐户,按任意键返回..."); getch(); return; } //显示账户信息 dispAnAccount(accountPosition); //密码不正确 if ( strcmp(rs[accountPosition].accPWD , accPWD) != 0 ) { printf("\n密码不正确!按任意键返回..."); getch(); return; } //账户已销户 if( strcmp (rs[accountPosition].flag, "0") != 0 ) { //已销户帐户,不能再次销户 printf("该帐户已经销户,不能再次销户,按任意键返回..."); getch(); return; } printf("确认将帐户 %d 销户吗? [1:销户 | 其他:不销户]",rs[accountPosition].accNumber); scanf ("%c", &userAnswer); fflush(stdin); if(userAnswer == '1') { strcpy(rs[accountPosition].flag, "1"); rs[accountPosition].balance = 0; dispAnAccount (accountPosition); printf("销户成功!按任意键返回..."); getch(); return; } printf("用户取消销户!按任意键返回..."); getch(); return; } //全部查询函数 void queryall() { int accountPosition;//账户在数组中位置 int i;//循环控制变量 if (maxAccount >= 0) { for (i = 0; i <= maxAccount; i++) { accountPosition = i; dispAnAccount(accountPosition); } } else { printf ("查无此账户,按任意键返回..."); getch(); return; } if (maxAccount >= 0) { printf ("\n全部查询成功!按任意键返回..."); getch(); return; } }
相关文章推荐
- 技术支持课--项目实训--储蓄综合业务平台(第一期)--开户功能实现--c语言编写
- 技术支持课--项目实训--储蓄综合业务平台--完成--C语言编写
- 我们的目标是安全有效支持业务的信息处理技术平台
- 2011年下半年项目“银行储蓄综合业务平台”C语言版
- Ultimus 安码 签约山东空管局综合业务管控平台项目
- 2012年上半年项目实训“银行储蓄综合业务平台”C++版
- C++ 技术支持-调用函数输出水仙花数
- 【实战\Java SSM快速开发仿慕课网在线教育平台项目笔记】第2章 项目各种结构概览(业务, 技术,角色,数据库,项目)
- 软件公司内部协作平台的选型(项目/BUG/需求管理及用户支持)
- 高级软件工程2017第7次作业--C++团队项目:Beta阶段综合报告
- 业务架构平台的技术实现环境
- 【技术分享】发布本人所属 Java 与 C++ 开源项目
- 有关平台支持的从经典部署模型到 Azure Resource Manager 的迁移的技术深入探讨
- 【案例】国家信息中心:国家公共资源交易服务平台一期工程决策支持服务系统定制项目
- 技术积累应用-可视化编程平台应用层面:业务模块类
- 移动支付平台间接口报文解析技术核心架构实现、及平台交易处理项目全程实录教程
- 从技术和业务视角,认识数据平台
- Win10下Nao机器人的C++开发平台搭建环境配置流程,这学期综合实践的内容,做了一个星期,总算做出来了,写个总结吧哈哈
- 业务架构平台的技术实现环境
- [泛读]C++程序跨平台、多线程支持和x64移植问题