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

技术支持课--项目实训--储蓄综合业务平台(第一期)--开户功能实现--c语言编写

2011-12-23 15:36 696 查看
实验目的:***储蓄综合业务平台

实验内容:实现储蓄的开户功能

* 程序头部注释开始

* 程序的版权和版本声明部分

* 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 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"

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 请输入您的密码:");

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()

{

int choice;

choice = -1;

do

{

printf("\n");

printf("+-------------------------------+\n");

printf("| 存款 请按1 开户 请按4 |\n");

printf("| 取款 请按2 销户 请按5 |\n");

printf("| 查询 请按3 退出 请按0 |\n");

printf("+-------------------------------+\n");



printf("请输入您的选择:");

scanf("%d", &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无效选项!");

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;

//生成账号

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("%1f",&dcash);

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;

}

========================================================================

运行结果:



经验积累:

1.我学会了这些字符%-5s | %-8s | %-6s | %-12s | %4s代表的意思。

2.c语言和C++语言差别不大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: