在一个银行系统中,最重要的是客户的开户问题,我在这一部分,花费了一天才搞明白,都怪之前学的数据结构没学好,哎,以后还要温故而知新啊。
以下是用C语言编写的开户,
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include "head1.h"
#include "head2.h"
void kaihu(User *head)
{
system("cls");
char flag = 'y';
count1 = 1;
User *p1;
FILE *fp2 = NULL; //定义文件指针
user = (User *)malloc( sizeof(struct User)); //开辟user结点
head->next = user; //把user和head连接起来
if((fp2 = fopen("user.txt","a+")) == NULL)
{
printf("The file open error!!!");
getchar();
exit(0);
}
printf("\n\n\t\t请按照下列提示输入新用户信息\n");
while(flag == 'y' || flag == 'Y')
{
int m=rand();
printf("\n\n\t\t请输入您的用户名:");
scanf("%s",user->username); //输入用户名
encrypt(user->userpswd);
/*printf("\n\t\t请输入您的密码:");
scanf("%s",user->userpswd); //输入密码*/
srand(time(0)); //使每次产生的随机数不同
user->userID = m%10000+1000000000; //产生的随机数赋给userID
printf("\n\t\t请输入您的开户金额(不少于20元):");
scanf("%f",&user->usermoney); //输入开户金额
printf("\n\t\t请输入您的开户时间:");
scanf("%s",user->user_firsttime); //输入开户时间
user->next = NULL; //一个用户信息填写完毕后,user下一个结点为空
fprintf(fp2,"%d %s %f %s %s\n",user->userID,user->username,user->usermoney,user->userpswd,user->user_firsttime); //把用户信息写入文件user.txt
printf("是否继续添加新的用户,是输入y,否输入n: ");
scanf(" %c",&flag);
//判断输入的flag,是否继续添加用户信息
if(flag == 'n' || flag == 'N') //当不添加新用户信息了
{
printf("\n\t\t 开户成功,请牢记您的账户信息:\n ");
user = head->next; //头指针指向下一个赋给user,user移到头部
while(user) //当user不为空的时候
{
printf("\n\t\t\t 姓名:%s 卡号:%d 余额:%.2f\n",user->username,user->userID,user->usermoney); //输出之前添加过用户的用户名、账号、开户金额
user = user->next; //指针指向下一个
}
fclose(fp2);
getch();
front1(head);
}
else if(flag == 'y' || flag == 'Y') //当继续添加新用户时
{
count1 ++; //计数新客户的数量
p1 = (User *)malloc( sizeof(struct User)); //开辟一个新节点p1
p1->next = NULL; //p1指向空
user->next = p1; //user指向p1,这样user和p1就连接起来了
user = p1; //p1赋给user,即user移到p1的位置,往后移了一下
}
else //当flag不为y或n,直接退出
{
if(flag!='Y' && flag!='y'){
printf("\n\t\t***输入错误***\n");
exit(0);
}
}
}
}
另外,附上后序完整版部分功能代码:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
struct bank{
char name[20];
int num;
char pswd[100];
int money;
};
struct bank person[1000];
int i,j,jine,num,k=0;
//--------------------设置密码----------------------
void setpswd(char pswd[])
{
int x=0;
printf("\t\t\t 请输入您的密码:");
while(1){
pswd[x]=getch();
if(pswd[x]!='\r'){
printf("*");
++x;
}
else break;
}
pswd[x]='\0';
printf("\n");
}
//------------------输入卡号------------------------
int putnum(){
int resultnum=-1;
// char pswd[100];
while(resultnum<0){
printf("\t\t\t 请输入您的卡号:");
scanf("%d",&num);
for(i=0;i<1000;i++){
if(person[i].num==num){
return resultnum=1;
// break; 执行到return语句处,整个程序便结束,不会执行下边的break语句
}
else if(person[i].num==0){
printf("\t\t\t 您输入的卡号不存在,请重新输入\n"); //system("cls");
Sleep(1000);
fflush(stdin);
system("cls");
printf("\n\n\n\n\n\n\n");
break;
// return resultnum=-1;
}
}
}
}
//------------------输入密码----------------------
void putpswd(){
int z=0;
char pswd[100];
fflush(stdin);
while(1){
setpswd(pswd);
if(strcmp(person[i].pswd,pswd)==0)
break;
else{
z++;
if(z==3){
printf("\t\t\t 您已连续三次输入密码错误,系统将在三秒后自动退出!\n\n\n");
for(int i=0;i<3;i++)
{
Sleep(1000);
printf("\t\t\t\t\t %d\r",3-i);
}
exit(0);
}
printf("\t\t\t 您输入的密码有误,请重新输入!\n");
}
}
}
//----------------------开户----------------------
void kaihu(){
system("cls");
printf("\n\n\n\n\n\n\n");
printf("\t\t\t 请输入用户姓名:");
scanf("%s",person[k].name);
setpswd(person[k].pswd);
while(1){
printf("\t\t\t 请输入初始金额(不少于一元!):");
scanf("%d",&jine);
fflush(stdin);
if(jine>=1)break;
else printf("\t\t\t 金额不足,请重新输入!\n");
}
person[k].money+=jine;
// printf("\t\t\t %s\n",person[k].pswd);
// scanf("%d",&person[k].pswd);
srand(time(0)); //使每次产生的随机数不同
int m=rand();
person[k].num=m%10000+1000000000;
printf("\t\t\t 您的账号为:%d\n",person[k].num); // 随机产生账号
printf("\t\t\t 开户成功,请牢记您的账户信息:\n ");
printf("\t\t\t 姓名%s 卡号%d 余额%d\n",person[k].name,person[k].num,person[k].money);
printf("\t\t\t 请按任意键返回!");
k++;
getch();
system("cls");
}
//------------------------存款-----------------
void cunkuan(){
system("cls");
printf("\n\n\n\n\n\n\n");
int y=putnum(); fflush(stdin);
putpswd();
printf("\t\t\t 请输入存款金额:");
scanf("%d",&jine);
person[i].money+=jine;
printf("\t\t\t 您的余额为:");
printf("%d\n",person[i].money);
printf("\t\t\t 存款成功按任意键返回!");
getch();
system("cls");
}
//------------------------查询-----------------
void chaxun(){
system("cls");
printf("\n\n\n\n\n\n\n");
int y=putnum();
putpswd();
printf("\t\t\t 您的余额为:");
printf("%d\n",person[i].money);
printf("\t\t\t 查询成功按任意键返回!");
getch();
system("cls");
}
//------------------------取款-----------------
void qukuan(){
system("cls");
printf("\n\n\n\n\n\n\n");
int y=putnum();
while(1){
printf("\t\t\t 请输入您的取款金额");
scanf("%d",&jine);
if(jine>person[i].money)
printf("\t\t\t 您的余额不足,请重新输入!\n");
else break;
}
person[i].money-=jine;
printf("\t\t\t 您的余额为:");
printf("%d\n",person[i].money);
printf("\t\t\t 取款成功按任意键返回!");
getch();
system("cls");
}
//------------------------转账-----------------
int zhuanzhang(){
system("cls");
printf("\n\n\n\n\n\n\n");
int num1,c;
putnum();
putpswd();
printf("\t\t\t 请输入对方卡号:");
scanf("%d",&num1);
for(j=0;j<1000;j++){
if(person[j].num==num1)
break;
if(person[j].num==0){
j=0;
printf("\t\t\t 您输入的卡号不存在,请重新输入!\n");
printf("\t\t\t 请输入对方卡号:");
scanf("%d",&num1);
}
}
if(num!=num1){
while(1){
printf("\t\t\t 请输入您的转账金额");
scanf("%d",&jine);
if(jine>person[i].money)
printf("\t\t\t 您的余额不足,请重新输入!\n");
else break;
}
}
else {
printf("\t\t\t 不能给自己转账,请按任意键返回!");
getch();
system("cls");
return 0;
}
printf("\t\t\t 请确认您的转入用户及转账金额:\n");
printf("\t\t\t 姓名%s 卡号%d 金额%d",person[j].name,person[j].num,jine);
printf("\n\t\t\t 确认转账请按Y/y,返回请按N/n");
while(1){
c=getch();
if(c=='N'||c=='n'){
system("cls");
break;
}
if(c=='Y'||c=='y'){
person[i].money-=jine;
person[j].money+=jine;
printf("\n\t\t\t 转账成功,是否显示您的余额(按Y/y显示余额,按任意键返回)");
c=getch();
if(c=='Y'||c=='y'){
printf("\t\t\t 您的余额为:%d",person[i].money);
printf("\n\t\t\t 交易完成 按任意键返回!");
getch();
system("cls");break;
}
else system("cls");break;
}
else printf("\n\t\t\t 输入有误,请重新输入:");
}
}
//---------------------------主界面-------------------------------
void zhujiemian()
{
int i;
while(1)
{
printf("\t\t************************************************\n");
printf("\t\t* *\n");
printf("\t\t* 欢迎进入中国银行 *\n");
printf("\t\t* *\n");
printf("\t\t************************************************\n");
printf("\t\t 1.开户\n\n");
printf("\t\t 2.存款\n\n");
printf("\t\t 3.查询\n\n");
printf("\t\t 4.取款\n\n");
printf("\t\t 5.转账\n\n");
printf("\t\t 6.退出\n\n");
printf("\t\t 请输入您要办理的业务的编号:");
scanf("%d",&i);
if(1<=i&&i<=6){
switch(i)
{
case 1:kaihu();break;
case 2:cunkuan();break;
case 3:chaxun();break;
case 4:qukuan();break;
case 5:zhuanzhang();break;
case 6:exit(0);break;
}break;
}
else{
printf("\t\t\t 您输入的编号有误,请重新输入!\n");
Sleep(1000);
fflush(stdin);
system("cls");
}
}
zhujiemian();
}
//-----------------------main函数---------------------------------
int main(void)
{
int j;
system("color 1E");
printf("\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t %c ",1);
printf("欢迎登录中国银行!\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("正在进入,请等候...\n");
printf("===============================================================================\r");
for(j=0;j<80;j++){
Sleep(100);
printf(">");
}
system("cls");
zhujiemian();
return 0;
}