用c语言编写ATM的程序,实现开户、存款、取款、查询余额、转账的业务逻辑。

Python013

用c语言编写ATM的程序,实现开户、存款、取款、查询余额、转账的业务逻辑。,第1张

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

void regist()

void login()

void quite()

void inputpassword(char mima[])

void service()

struct bank

{

char name[20]

char password[7]

int account

double money

}kehu

int find

int a[10]

struct bank one

FILE *fp

void main()

{

int i

int t=1

for(i=0i<100i++)

{

printf("\t\t\t\t\t\t欢迎使用青软ATM系统\n")

printf("\t\t\t\t\t\t正在进入主界面,请稍等")

int j

for(j=1j<tj++)

{

printf(".")

}

t++

if(t==10)

{

t=1

}

printf("\n\t\t\t\t\t\t%d%%",i)

system("cls")

}

while(1)

{

printf("\t\t\t\t\t\t服务类型: \n")

printf("\t\t\t\t\t\t[a]: 用户注册\n")

printf("\t\t\t\t\t\t[b]: 用户登录\n")

printf("\t\t\t\t\t\t[c]: 退出系统\n")

printf("\t\t\t\t\t\t请选择服务: ")

fflush(stdin)

char xz

scanf("%c",&xz)

if(xz=='a'||xz=='A')

{

regist()

} else if (xz=='b'||xz=='B')

{

login()

} else if(xz=='c'||xz=='C')

{

quite()

} else

{

printf("输入有误,请重新输入")

}

getch()

system("cls")

}

}

void inputpassword(char mima[])

{

int i=0

char ch

while(1)

{

ch=getch()

if(ch!='\r')

{

if(ch!='\b'){

mima[i]=ch

i++

printf("*")

}else{

if(i>0){

i--

printf("\b \b")

}

}

}else{

break

}

}

mima[i]='\0'

printf("\n")

}

void regist()

{

fp=fopen("atm.txt","ab+")

if(fp==NULL)

{

printf("\n\t\t\t文件打开失败!")

return

}

system("cls")

printf("\t\t\t现在执行的是注册函数的使用\n")

printf("\t\t请输入用户名: ")

fflush(stdin)

gets(kehu.name)

char password1[7]

while(1)

{

while(1)

{

printf("\n\n\t\t请输入密码:")

fflush(stdin)

inputpassword(kehu.password)

int n=strlen(kehu.password)

if(n==6)

{

break

}else

{

printf("\n\t\t密码必须为6位!")

}

}

printf("\n\t\t请输入正确密码!: ")

fflush(stdin)

inputpassword(password1)

if(strcmp(kehu.password,password1)==0)

{

break

}else{

printf("\n\n\t\t两次密码必须相同!")

}

}

rewind(fp)

struct bank k

if(fread(&k,sizeof(struct bank),1,fp)==1)

{

fseek(fp,-sizeof(k),2)

fread(&k,sizeof(k),1,fp)

kehu.account=k.account+1

}else{

kehu.account=20170001

}

kehu.money=0

fseek(fp,0,2)

fwrite(&kehu,sizeof(struct bank),1,fp)

fclose(fp)

printf("\n\n\t\t开户成功! ")

printf("\n\t\t您的账号为%d!",kehu.account)

printf("\n\t\t现在请您重新登录!")

}

void searchmoney()

{

system("cls")

printf("您现在使用的是查询余额功能: \n")

printf("\n\n\t\t您的余额是%0.2lf",one.money)

}

void savemoney()

{

system("cls")

double inmoney

printf("请您选择您要存款的金额 \n")

scanf("%lf",&inmoney)

int q

int r=1

for(q=0q<100q++)

{

int w

for(w=1w<rw++)

{

printf(".")

}

r++

if(r==10)

{

r=1

}

printf("\n\t\t\t\t\t\t正在存款%d%%",q)

system("cls")

}

one.money=one.money+inmoney

fseek(fp,-sizeof(one),1)

fwrite(&one,sizeof(one),1,fp)

printf("\n\n\t\t\t\t\t\t您已存款成功!")

}

void withdrawalmoney()

{

system("cls")

double outputsomemoney

printf("请您选择您要取款的金额 \n")

scanf("%lf",&outputsomemoney)

if(one.money<outputsomemoney){

printf("您的余额已不足,请您注意!")

}else {

int q

int r=1

for(q=0q<100q++)

{

int w

for(w=1w<rw++)

{

printf(".")

}

r++

if(r==10)

{

r=1

}

printf("\n\t\t\t\t\t\t正在取款%d%%",q)

system("cls")

}

one.money=one.money-outputsomemoney

fseek(fp,-sizeof(one),1)

fwrite(&one,sizeof(one),1,fp)

printf("\n\n\t\t\t\t\t\t您已取款成功!请点清钞票!")

printf("\n\n\t\t\t\t\t\t您现在的余额为%lf",one.money)

}

}

void transfermoney()

{

system("cls")

int duifang

int qian

fflush(stdin)

printf("\n\n\n\t\t您现在使用的是转账功能")

printf("\n\t\t\t请输入您要转账的账户:")

scanf("%d",&duifang)

int n=ftell(fp)

rewind(fp)

int flag=0

struct bank temp

while(fread(&temp,sizeof(temp),1,fp)==1)

{

if(temp.account==duifang)

{

flag=1

break

}

}

if(flag==1)

{

printf("请输入转账金额:")

scanf("%d",&qian)

if(one.money>=qian)

{

int q

int r=1

for(q=0q<100q++)

{

int w

for(w=1w<rw++)

{

printf(".")

}

r++

if(r==10)

{

r=1

}

printf("\n\t\t\t\t\t\t正在转账,请稍后!%d%%",q)

system("cls")

}

temp.money=temp.money+qian

fseek(fp,-sizeof(temp),1)

fwrite(&temp,sizeof(temp),1,fp)

one.money=one.money-qian

fseek(fp,n-sizeof(one),0)

fwrite(&one,sizeof(one),1,fp)

printf("\n\t\t\t\t转账成功!")

}else{

printf("\n\t\t\t\t您的余额已不足!")

}

}

}

void xiugai(){

system("cls")

printf("\n\n\t\t 现在进行的是修改密码功能\n")

char oldpassword[7]

char newpassword[7]

char newpassword1[7]

int i

for(i=0i<3i++){

printf("\n\t\t\t 请输入旧密码:\n")

inputpassword(oldpassword)

if(strcmp(oldpassword,one.password)==0){

printf("\n\t\t\t 输入成功!\n")

break

}else{

printf("\n\t\t\t 密码输入有误,请重新输入!\n")

}

}

if(i<3){

while(1){

printf("\n\t\t\t 请输入您的新密码:\n")

inputpassword(newpassword)

printf("\n\t\t\t 请输入您的确认密码:\n ")

inputpassword(newpassword1)

if(strcmp(newpassword,newpassword1)==0){

strcpy(one.password,newpassword)

fseek(fp,-sizeof(one),1)

fwrite(&one,sizeof(one),1,fp)

printf("\n\t\t\t 密码修改成功!")

break

}else{

printf("\n\t\t\t 两次密码输入不一致!")

}

}

}else{

printf("\n\t\t\t 密码输入错误!")

}

}

int zhuxiaozhanghao()

{

system("cls")

int zhuxiaoxitong

char sf

printf("你要注销的账号是%d",one.account)

printf("你是否要对此账号进行注销?\n\n\t\t请您选择:注销(Y)or不注销(N):")

fflush(stdin)

scanf("%c",&sf)

if(sf=='y'||sf=='Y')

{

printf("正在为您注销!\n",one.account)

zhuxiaoxitong=1

}else{

printf("不注销系统!\n",one.account)

}

return zhuxiaoxitong

}

void service()

{

while(1){

system("cls")

printf("\n\n\n\t\t\t\t\t\t现在是服务系统,本系统有以下服务")

printf("\n\t\t\t\t\t\t[a] 查询余额\n")

printf("\n\t\t\t\t\t\t[b] 存款服务\n")

printf("\n\t\t\t\t\t\t[c] 转账服务\n")

printf("\n\t\t\t\t\t\t[d] 取款服务\n")

printf("\n\t\t\t\t\t\t[e] 修改密码\n")

printf("\n\t\t\t\t\t\t[f] 注销\n")

printf("\n\t\t\t\t\t\t[g] 退出系统\n")

char e

printf("\n\t\t\t\t\t\t您要选择的服务是:")

fflush(stdin)

scanf("%c",&e)

switch(e)

{ case'A':

case'a': searchmoney() break

case'B':

case'b': savemoney() break

case'C':

case'c': transfermoney() break

case'D':

case'd': withdrawalmoney() break

case'E':

case'e': xiugai() break

case'F':

case'f': {int zhuxiaoxitong=zhuxiaozhanghao(){if(zhuxiaoxitong==1) return}break}

case'G':

case'g': quite()break

}

printf("\n\n\n\t\t\t\t按任意键继续......\n")

getch()

}

}

void login()

{

fp=fopen("atm.txt","rb+")

if(fp==NULL)

{

printf("\n\n\n\t\t\t\t文件打开失败!")

return

}

system("cls")

printf("\n\t\t\t\t\t\t现在执行的是登录函数的使用\n")

int zhanghao

printf("\n\t\t\t\t\t\t请输入账号:")

scanf("%d",&zhanghao)

int flag=0

while(fread(&one,sizeof(one),1,fp)==1)

{

if(zhanghao==one.account){

flag=1

break

}

}

char password2[7]

if(flag==1){

int h

for(h=0h<3h++){

printf("\n\t\t\t\t\t\t请输入密码:")

fflush(stdin)

inputpassword(password2)

if(strcmp(password2,one.password)==0)

{

printf("\n\t\t\t\t\t\t登陆成功!")

service()

break

}else{

printf("密码不正确!")

}

}

if(h==3){

printf("\n\t\t\t您的密码三次输入有误,返回")

}

}else{

printf("无此账号!")

}

fclose(fp)

}

void quite()

{

system("cls")

printf("\t\t\t现在执行的是退出函数的使用\n")

exit(0)

}

#include <stdio.h>#include <string.h>struct information { char account[20]char IDcardNumchar workUintchar homeAddressfloat moneychar cardNumlong int password}void openAccount(){ cardNum++user[cardNum].cardNum = cardNumprintf("请输入您的姓名:")gets(user[cardNum].account)printf("请输入您的身份证号:")gets(user[cardNum].IDcardNum)printf("请输入您的工作单位:")gets(user[cardNum].workUnit)print("请输入您的家庭住址:")gets(user[cardNum].homeAddress)printf("请输入您的密码:")gets(user[cardNum].password)printf("请输入您要存入的金额:")scanf("%d",user[cardNum].money)//写入文件out.txt中,写入后,光标移至下一行 read()//读取文件 write()//写入文件 cardNum++} void deposit(){ int moneyprintf("请输入您的卡号:")scanf("%d",&cardNum)printf("请输入您要存入的金额:")scanf("%f",money)user[cardNum].money = user[cardNum].money + moneyprintf("您现在账户中的余额是¥%f",user[cardNum].money)} void withdraw(){ int moneyprintf("请输入您的卡号:")scanf("%d",&cardNum)printf("请输入您要存入的金额:")scanf("%f",money)user[cardNum].money = user[cardNum].money - moneyprintf("您现在账户中的余额是¥%f",user[cardNum].money) } void changeInformation(){ printf("请输入您的卡号:")scanf("%d",&cardNum)user[cardNum].cardNum = cardNumprintf("请输入您的姓名:")gets(user[cardNum].account)printf("请输入您的身份证号:")gets(user[cardNum].IDcardNum)printf("请输入您的工作单位:")gets(user[cardNum].workUnit)print("请输入您的家庭住址:")gets(user[cardNum].homeAddress)printf("请输入您的密码:")gets(user[cardNum].password)printf("请输入您要存入的金额:")scanf("%d",user[cardNum].money)//写入文件out.txt中,写入后,光标移至下一行 read()//读取文件 write()//写入文件 } void reportLoss(){ } void closeAccount(){ } void read(){ } void write(){ } int main() { int iunsigned long int cardNum = 00001information user[cardNum]printf("请您选择要进行的操作:\n")printf("------------------------------------------------------\n")printf("1、开户/办卡 2、存款 3、取款 4、修改信息 5、挂失 6、销户\n")printf("------------------------------------------------------\n")scanf("%d",&i)if(i <1 || i >6) printf("ERROR!\n")else { switch(i) { case 1 : openAccount()breakcase 2 : deposit()breakcase 3 : withdraw()breakcase 4 : changeInformation()breakcase 5 : reportLoss()breakcase 6 : closeAccount()break} } return 0} 没有写完,楼主可以参考一下!

文件I/O函数。

fopen打开本地文件

fseek定位到文件某个位置(可用来修改已经存在的用户信息等)

fwrite写入

fclose关闭

带f的IO函数是标准IO,下面资料是linux特有的。用法差不多。

网上有很多例子,可以参考资料,希望对你有帮助