ATM管理系统
博客班级 | 软件工程 |
---|---|
作业要求 | 作业要求 |
作业目标 | 根据ATM机的功能设计代码,并完成ATM系统代码的创建 |
学号 | 3180701221 |
题目要求:
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
代码提交
头文件
#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];
开户、销户
开户
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 xiaohu() {
int m, i, j, pswd[10], x = 0, z;
system("cls");
printf("\n\n\n\n\n\n\n");
while (1) {
printf("\t\t\t 请输入注销用户账号:");
scanf("%d", &m);
for (i = 0; i < k; i++) {
if (m == person[i].num)
break;
}
if (i == k) {
printf("\t\t\t未检测到此用户");
system("pause");
continue;
}
printf("\t\t\t请问是要注销用户名为%s的账户么?\n", person[i].name);
printf("\t\t\t[1]YES\t\t\t[2]NO");
scanf("%d", &j);
if (j == 2) {
getch();
system("cls");
break;
}
else {
for (z = 3; z > 0; z--) {
printf("\t\t\t请输入用户账户密码:");
//输入密码的
x = 0;
while (1) {
pswd[x] = getch();
if (pswd[x] != '\r') {
printf("*");
++x;
}
else break;
}
//检测密码的
for (j = 0; j < 6; j++) {
if (pswd[j] != person[i].pswd[j]) {
printf("密码输入错误,请重新输入");
break;
}
}
if (j != 6)
continue;
person[i].num = 0;
person[i].money = 0;
person[i].pswd[100] = 0;
person[i].name[20] = 0;
printf("账号注销成功");
getch();
system("cls");
break;
}
printf("密码错误次数超限,请退出重新操作");
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 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");
}
查询账号信息
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");
}
转账
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 menu()
{
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].开户------------------------------[2].存款\n\n");
printf("\t\t[3].查询------------------------------[4].取款\n\n");
printf("\t\t[5].转账------------------------------[6].销户\n\n");
printf("\t\t[7].退出------------------------------\n\n");
printf("\t\t 请输入您要办理的业务的编号:");
scanf("%d", &i);
if (1 <= i && i <= 7) {
switch (i)
{
case 1:kaihu(); break;
case 2:cunkuan(); break;
case 3:chaxun(); break;
case 4:qukuan(); break;
case 5:zhuanzhang(); break;
case 6:xiaohu(); break;
case 7:exit(0); break;
}break;
}
else {
printf("\t\t\t 您输入的编号有误,请重新输入!\n");
Sleep(1000);
fflush(stdin);
system("cls");
}
}
menu();
}
主函数
int main(void)
{
int j;
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");
menu();
return 0;
}
程序运行界面
主菜单
创建账户
存款界面
转账界面
注销账户
三.个人小结
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 20 | 15 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 200 | 240 |
Development | 开发 | 10 | 30 |
Analysis | 需求分析(包括学习新技术) | 10 | 10 |
Design Spec | 生成设计文档 | 10 | 20 |
Design Review | 设计复审 | 10 | 20 |
Coding Standard | 代码规范 | 10 | 10 |
Design | 具体设计 | 20 | 30 |
Coding | 具体编码 | 30 | 20 |
Code Review | 代码复审 | 20 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 20 | 30 |
Reporting | 报告 | 10 | 20 |
Test Report | 测试报告 | 10 | 15 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 5 | 10 |
个人总结
本次ATM系统代码,让我回顾了c语言程序设计结构体相关的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的经验不足,在代码的编写方面也开始出现了生疏。实践出真知,通过亲自动手制作,让我们再次。