一、系统简介
1、使用技术点:
数组:把具有相同数据类型的若干变量按有序的形式组起来,以便于程序处理,这些数据元素的集合就是数组。
指针:指针是一个特殊的变量,它里面存储的是地址。
文本文件:数据在相关介质上的表现形式。
函数:具有某种特定意义的代码的集合,利用它可实现代码的重用。
2、主要功能模块:
欢迎界面、登陆界面、操作界面、退出系统。
二、演示效果
进入系统后,有提示信息,界面为绿色代表安全。
选择Y登陆系统
登陆界面密码星号化,使得系统更安全,用户信息存储在文件中。
登陆成功后进入主界面。
选择相应的选项可以执行相应的功能
三、功能实现
1、欢迎界面的实现用函数welcom实现,建立.h文件命名welcom.h
void wel()//欢迎界面; { FILE *fp; if((fp=fopen("data/welcome.txt","r"))!=NULL) { char ch[10000]; while(!feof(fp)) { fgets(ch,100,fp); printf(ch); Sleep(200); } printf("\n\n"); fclose(fp); } } void menu()//主菜单; { FILE *fp; if((fp=fopen("data/menu.txt","r"))!=NULL) { char ch[100]; while(!feof(fp)) { fgets(ch,100,fp); printf(ch); } fclose(fp); } }
2.用户的功能由函数client实现,也是存储在client.h文件中。3、登陆功能用函数login实现void showmoney()//功能1:查询余额 { printf("\t用户名 :%s\n",user.name); printf("\t账户余额:%d\n",user.money); printf("\t请按Enter键返回\n"); getchar(); } void drawmoney()//功能2:取款业务 { FILE *fp; int a,i; char c; while(1){ printf("\t请输入您的取款金额:"); scanf("%d",&a); if(a>user.money) printf("\t账户余额不足,请重新输入!\n"); else if(a<0) printf("\t输入有误,请重新输入!\n"); else break; } getchar(); user.money-=a; if((fp=fopen("data/client.dat","wb"))!=NULL) { fwrite(&user, sizeof(client), 1 ,fp); fclose(fp); } printf("\t取款成功,请收好您的钞票!\n"); printf("\t是否打印凭条? y/n "); scanf("%c",&c); getchar(); if(c=='Y' || c=='y') { printf("\t正在打印请稍后。。。。。\n\t\t"); for(i=0;i<10;i++) { printf("■"); Sleep(400); } printf("\n"); printf("\t打印完成,请收好您的凭条\n"); printf("\t请按Enter键退出\n"); getchar(); } else { printf("\t请按Enter键退出\n"); getchar(); } } void savemoney()//功能3:存款业务 { FILE *fp; int a,i; char c; printf("\t请输入您的存款数额:"); scanf("%d",&a); getchar(); user.money+=a; if((fp=fopen("data/client.dat","wb"))!=NULL) { fwrite(&user, sizeof(client), 1 ,fp); fclose(fp); } printf("\t存款成功\n"); printf("\t是否打印凭条? y/n "); scanf("%c",&c); getchar(); if(c=='Y' || c=='y') { printf("\t正在打印请稍侯。。。。。\n\t\t"); for(i=0;i<10;i++) { printf("■"); Sleep(400); } printf("\n"); printf("\t打印完成,请收好您的凭条\n"); printf("\t请按Enter键退出\n"); getchar(); } else { printf("\t请按Enter键退出\n"); getchar(); } } void updatekey()//功能5:改密业务 { char ch[10]; char str[10]; FILE *fp; int i; printf("\t请输入您的初始密码 :"); strcpy(ch,get_password()); while(1) { if(strcmp(ch,user.key) != 0) { printf("\t您的初始密码输入错误请重新输入:"); strcpy(ch,get_password()); } else break; } while(1){ printf("\t请输入您要修改的密码 :"); strcpy (ch,get_password()); printf("\t请再次输入要修改的密码:"); strcpy(str,get_password()); if(strcmp(ch,str)==0) { strcpy(user.key,ch); printf("\t正在为您修改,请稍候\n\t"); for(i=0;i<10;i++) { printf("■"); Sleep(400); } if((fp=fopen("data/client.dat","wb"))!=NULL) { fwrite(&user, sizeof(client), 1 ,fp); fclose(fp); } printf("\n\t密码修改成功\n"); printf("\t请按回车键退出\n"); getchar(); break; } else printf("\t您两次密码输入不一致,请重新输入!\n"); } } void rename()//功能5:修改用户名 { FILE *fp; char name[30]; char mame[30]; while(1) { printf("\t请输入您要修改的用户名:"); scanf("%s",&name); printf("\t请确认您的用户名 :"); scanf("%s",&mame); getchar(); if(strcmp(name,mame)==0) { strcpy(user.name,name); if((fp=fopen("data/client.dat","wb"))!=NULL) { fwrite(&user, sizeof(client), 1 ,fp); fclose(fp); } printf("\t已成功修改您的用户名,请牢记!\n"); printf("\t请按回车键退出\n"); getchar(); break; } else printf("\t您两次输入的用户名不一致,请重新输入!\n"); } } void exitsystem()//功能6:退出系统 { system("cls"); FILE *fp; char ch; fp=fopen("data/exit.txt","r"); while(!feof(fp)) { ch=fgetc(fp); putchar(ch); } fclose(fp); printf("\n"); printf("请按Enter键退出\n"); getchar(); }
struct client //结构体用于存储信息; { char name[50]; //用户名 char key[10]; //密码 int money; }user; char *get_password()//星号密码获取函数; { int i=0; char a[50]; char ch='\0'; while(ch != '\r') { ch = getch();//无回显的从键盘接收一个字符, if(ch == 8) //8是退格符的 ASSIC码。 { a[--i]='\0'; putchar(8); putchar(' '); putchar(8); } else { if(ch=='\r') break; a[i++] = ch; printf("*");//输出星号 } } a[i]='\0'; printf("\n"); return &a[0]; } int login() //登陆函数; { FILE *fp; //读取文件保存的用户名及密码,赋值给结构体。 if((fp=fopen("data/client.dat","rb"))!=NULL) { fread(&user,sizeof(user),1,fp); } else { printf("该用户信息错误!\n"); } char a[50]; char b[50]; int count=0,i,flag=0; while(1) { printf("\t请输入您的用户名:"); scanf("%s",a); printf("\t请输入您的密码 :"); strcpy(b,get_password()); if(strcmp(a,user.name)!=0 || strcmp(b,user.key)!=0) printf("\t用户名或者密码输入错误!请重新输入!\n"); else { printf("\t\t\t正在登陆 请稍后\n"); printf("\t\t\t"); for(i=0;i<8;i++) { printf("■"); Sleep(500); //让系统在此处停留500毫秒之后在运行。 } printf("\n"); break; } count++; if(count == 3) { printf("\t\t您输入错误已超过三次,系统已退出!\n"); system("color 4a"); flag=1; break; } } return flag; }
4、主函数ATM.cpp中值调用,使得结构更清晰合理。#include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #include "login.h" //登陆函数模块 #include "Welcome.h" //界面欢迎模块 #include "client.h" //用户操作界面 int main() { system("color 2a"); wel(); printf("\t\t\t确定登陆?Y/N "); char c; scanf("%c",&c); getchar(); if(c=='n'||c=='N') { exitsystem(); } else { int f; system("cls"); //清屏 printf("\t\t\t进入中,请稍候.......\n\n"); Sleep (800); f=login(); system("cls"); if(f==1) { printf("正在退出系统。。。。"); Sleep(3000); exitsystem(); } else { while(1) { menu(); printf("\n\t请输入代号:"); int m; scanf("%d",&m); getchar(); if(m==1) { Sleep (500); showmoney(); system("cls"); } else if(m==2) { Sleep (500); drawmoney(); system("cls"); } else if(m==3) { Sleep (500); savemoney(); system("cls"); } else if(m==4) { Sleep (500); updatekey(); system("cls"); } else if(m==5) { Sleep (500); rename(); system("cls"); } else if(m==6) { exitsystem(); break; } } } } return 0; }
四、补充
该系统还有很多特效,但是由于不会在博客展示动态效果,更多信息,课在本地运行展示。