实验目的:制作储蓄综合业务平台
实验内容:实现储蓄的相应功能
* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.* 文件名称:
* 作 者: 雷恒鑫
* 完成日期: 2011年12 月23 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:输入用户名和密码
* 问题描述:实现开户.存款.查询等基础功能
* 程序输出:各功能实现后的界面
* 程序头部的注释结束(此处也删除了斜杠)
--------------------------------------------------------------------------------------------------------------------------------------
bank.h
--------------------------------
//显示欢迎信息
void welcome();
//系统主菜单
void mainmenu();
//开户
void openAnAccount();
//销户
void closeAnAcount();
//存款
void deposit();
//取款
void withdraw();
//查询
void query();
//查找一个账户在数组中的位置
int findAnAccount(int accNumber);
//显示一个账户的信息
void dispAnAccount(int i);
//生成账号
int createAccNumber();
//把数据从文件中读到结构体数组中
int readDate();
//把结构体数组中的数据写入文件
int writeDate();
//检查录入的户名.密码.存入金额格式是否合法。返回值: 0: 合法.1: 非法。
//flag: 0: 户名. 1:密码. 2:存入金额。checkstr: 需要检查的项目。
int checkInput(int flag, char *checkStr);
//去除右空格
char *rightTrim(char *str);
//显示所有账户
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;/*课本上没有*/
------------------------------------------------------------------------------
---------------------------------------------------------------------------------
bank.c
-----------------------------------
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <ctype.h>
#include "bank.h"
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请输入您的密码:");
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; /*我把int型改成了char型*/
choice = -1;
do
{
printf("\n");
printf("+-------------------------------+\n");
printf("| 存款 请按1 开户 请按4 |\n");
printf("| 取款 请按2 销户 请按5 |\n");
printf("| 查询 请按3 退出 请按0 |\n");
printf("+-------------------------------+\n");
printf("请输入您的选择:");
scanf("%s", &choice); /*我把%d改成了%s*/
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无效选项!");
break;
}
}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;
//判断是否已经超过最大用户数
if (maxAccount<=(N_MAXREC_NO-2) )
{
//生成账号
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;
}
else
{
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); //不是1f而是lf;
fflush(stdin);
sprintf(ccash,"%12.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);
//存款金额不能为0或负数
if (cash<=0)
{
printf("存款金额不能为负数!按任意键返回...");
getch();
return;
}
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;//帐户在数组中的位置
int i;//循环控制变量
//初始位置是-1,表示未找到
accountPosition = -1;
//查找帐户的位置
if (accNumber<=rs[maxAccount].accNumber && accNumber>=10001)/*老师加分*/
{
for (i=0;i<=maxAccount;i++)
{
if(rs[i].accNumber == accNumber)
{
accountPosition = i;
break;
}
}
}
return accountPosition;
}
void withdraw()
{
char accPWD[7];//密码
int accNumber;//帐号
int accountPosition;//账户在数组中的位置(下标)
double cash;//取款金额
//初始化
accNumber = 0;
accountPosition = -1;//-1,表示未找到
cash = 0;
//获取取款帐号
accNumber = getaccNumber(1);
//查找该账户
accountPosition = findAnAccount(accNumber);
if (accountPosition== -1)
{
printf("查无此帐户,按任意键返回...");
getch();
return;
}
//显示帐户信息
dispAnAccount(accountPosition);
//以销户帐户,不能进行取款操作
if (strcmp(rs[accountPosition].flag,"0") !=0)
{
printf("该帐户已经销户,不能取款!,按任意键返回...");
getch();
return;
}
//获取要查询的帐户密码
getaccPWD(accPWD);
//密码不正确
if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
{
printf("\n密码不正确,按任意键返回...");
getch();
return;
}
//获取取款金额
cash = getcash(1);
//取款金额不能为0或负数
if (cash<=0)
{
printf("存款金额不能为负数!按任意键返回...");
getch();
return;
}
//取款是否超出存款金额
if ((rs[accountPosition].balance - cash)<0)
{
printf("您的取款金额已超过存款金额,不能取款!,按任意键返回...");
getch();
return;
}
rs[accountPosition].balance = rs[accountPosition].balance - cash;
//显示帐户信息
dispAnAccount(accountPosition);
printf("取款成功!按任意键返回...");
getch();
}
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("\n该账户已经销户,不能再次销户,按任意键返回...");
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;
}
========================================================================
运行的部分结果:
----------------------------------------------------------------------------------------------------------------------------------------------------------
经验积累:
1.有了自定义函数,主函数就轻松多了。
2.为了使程序更加好懂,每个自定义函数只需实现一种功能即可。
分享到:
相关推荐
储蓄业务越来越走进人们的生活。... 储蓄综合业务平台就是在此背景下开发出来的。本系统用现代化的电子信息技术,实现和发展的储蓄业务。它实现了数据自动计算、智能检查,高效数据检索和安全数据存储等功能。
C语言实现的简单银行综合储蓄业务,具有开户、销户、转账、挂失、取款、查询等功能,代码简易,适合初学者。
c语言编写的简单的的银行储蓄平台,实现存款,取款,挂失,冻结,转账,查询等功能。开发工具:visual c++;语言:c语言
在学校做的一个C语言的综合小项目,模拟银行的储蓄系统。包括开户、销户(冻结)、解冻、删除、存款、取款、转账、查询等功能,比较基础。适合初学C语言的人看,VC6写的,在vs上可能会有问题。
储蓄综合业务平台储蓄综合业务平台储蓄综合业务平台储蓄综合业务平台
【问题描述】 活期储蓄处理中,储户开户、销户、存入、支出活动频繁。设计一个活期储蓄账目管理系统。 【基本要求】 1) 能比较迅速地找到储户的帐户,以实现存款、取款记账; 2) 能比较简单,迅速地实现插入和删除,...
C语言储蓄综合平台PPT课件.pptx
C语言储蓄综合平台PPT学习教案.pptx
c语言项目管理系统 c语言初学者 简单c语言 学籍银行管理系统
4. 银行操作员根据储蓄用户要求,通过本系统完成取款业务操作。 5. 银行操作员通过本系统查询储蓄用户的余额。 6. 银行操作员根据储蓄用户要求,通过本系统完成销户业务操作。 7. 储蓄用户的帐户信息保存到文件 8. ...
此系统是一个银行活期储蓄账目管理系统,它的功能包括开户、销户、存款、取款、查询、退出并保存在文件中 一共6个功能。 菜单模式:此模块主要实现对系统全部功能的显示。 开户功能:此模块主要实现对客户信息的录入...
本项目是开发一套银行储蓄柜台的综合业务平台,它包括储蓄柜台常使用的开户、销户、存款、取款、查询、冻结、解冻、转账、挂失、日志查询、等功能。
本项目涵盖了软件工程的整个过程,需求规格说明书,概要设计说明,详细设计说明书,数据库设计说明书,测试报告等。
津津的储蓄计划save——C语言解题报告
设计目的: " "按照关系型数据库的基本原理,根据数据库设计方法,综合运用所学的知识 " ",设计开发一个小型的数据库-银行储蓄系统数据库。熟练掌握相关数据库的" "分析、设计、实现过程,以及在此数据库基础之上对...
C语言银行储蓄系统源码.doc
人民币储蓄业务流程演示
这是翰子昂培训中学习c语言的课件,对于基础的东西介绍的很详细,适合初学者学习。