您的位置:首页 > 编程语言 > C语言/C++

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++ 平台 query struct 任务 c
相关文章推荐