个人相关信息
| 班级 |


| ---- | ---- | ---- |
| 作业要求 |
| 作业目标 |编写一个ATM管理系统|
| 学号 |3180701331|

一.题目要求

编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
允许网上查询参考,但请注意不要直接抄袭,可以理解看懂别人的代码,再自己编写。

二.代码部分

结构体

typedef struct Node
{
	char ID[6];/*账号*/
	char Password[6];/*密码*/
    char Name[20];/*名字*/
    char IDcard[20];/*身份证号*/
    char Tele[20];/*电话号码*/
    char Deposit[20];/*存款*/
    struct Node* next;
}member, * LinkList;

创建链表

member* create()//创建链表//
{
	int i = 0;
	char conti[5];
	member* head, * p, * q;
	head = (member*)malloc(sizeof(member));
	head->next = NULL;
	p = q = (member*)malloc(sizeof(member));
	printf("是否輸入(y,n)");
	scanf("%s", conti);
	while (strcmp(conti, "n") != 0)//输入n结束输入//
	{
		printf("请输入第%d个人的开户信息\n(账号,密码,姓名,身份证号,电话,存款)\n", i++);
		scanf("%s%s%s%s%s%s", p->ID,p->Password,p -> Name, p->IDcard, p->Tele, p ->Deposit);
		if (i = 1)head ->next = p;
		else q->next = p;
		q = p;
		printf("'n");
		p = (member*)malloc(sizeof(member));
		printf("是否继续输入(Y,n)");
		scanf("%s", conti);
	}
	free(p);//释放
	q->next = NULL;
	return head;
}

开户

void Opening(member* head)   //开户
{
	member* q, * p, * s;
	s= (member*)malloc(sizeof(member));
	printf("请输入您的账号,密码,姓名,身份证号,电话,存款\n");
	scanf("%s%s%s%s%s%s", p->ID, p->Password, p->Name, p->IDcard, p->Tele, p->Deposit);
	q=head;
	p = head->next;
	while (p != NULL)
	{
		q = p;
		p = q->next;
	}
	s->next = NULL;
	q->next = s;
}

存款

void Deposit(member* head)  //存款
{
	char t[6], d[6],n[6];
	member* p;
	printf("请输入账号");
	scanf_s("%s", t);
	printf("请输入存款入后金额");
	scanf("%s", d);
	p =head->next;
	while (p != NULL)
	{
		if (strcmp(p->Deposit, d) == 0)
		{
			printf("原有金额数不変");
			scanf("%s", d);
		}
		p = p->next;
	}
	if (p == NULL)
	{
		p = head->next;
		while (p != NULL)
		{
			if (strcmp(p->ID, t) == 0)
			{
				if (strcmp(p->Password, n) == 0)
				{
					strcpy(p->Deposit, d);
					printf("信息:\n账号:%s,密码:%s,姓名:%s,身份证号:%s,电话:%s ,金额:%s\n", p->ID, p->Password, p->Name, p->IDcard, p->Tele, p->Deposit);
					printf("恭喜存款成功");
				}
				else
				{
					printf("密码输入不正确,无法查询");
					break;
				}
			}
			p = p->next;
		}
	}
}

取款

void Withdrawal(member* head)  //取款
{
	char t[6], d[6],n[6];
	member* p;
	printf("请输入账号");
	scanf_s("%s", t);
	printf("请输入取款入后金额");
	scanf("%s", d);
	p = head->next;
	while (p != NULL)
	{
		if (strcmp(p->Deposit, d) == 0)
		{
			printf("原有金额数不変");
			scanf("%s", d);
		}
		p = p->next;
	}
	if (p == NULL)
	{
		p = head->next;
		while (p != NULL)
		{
			if (strcmp(p->ID, t) == 0)
			{
				if (strcmp(p->Password, n) == 0)
				{
					strcpy(p->Deposit, d);
					printf("信息:\n账号:%s,密码:%s,姓名:%s,身份证号:%s,电话:%s ,金额:%s\n", p->ID, p->Password, p->Name, p->IDcard, p->Tele, p->Deposit);
					printf("恭喜存款成功");
				}
				else
				{
					printf("密码输入不正确,无法查询");
					break;
				}
			}
			p = p->next;
		}
	}
}

查询

void Inquire(member* head)      //查询
{
	char m[4],n[6];
	member* p;
	printf("请输入想查询的账号\n");
	scanf_s("%s", m);
	p = head->next;
	while (p != NULL)
	{
		if (strcmp(p->ID, m) == 0)//输入的账号与记录相同时
		{
			printf("请输入密码\n");
			scanf_s("%s", n);
			if (strcmp(p->Password, n) == 0)//输入的密码与记录相同时
			{
				printf("信息:\n账号:%s,密码:%s,姓名:%s,身份证号:%s,电话:%s ,金额:%s\n", p->ID, p->Password, p->Name, p->IDcard, p->Tele, p->Deposit);
				break;
			}
			else
			{
				printf("密码输入不正确,无法查询");
				break;
			}
		}
		p = p->next;
	}
	if(p == NULL)
		printf("暂无此账号存在\n");
}

转账

void Account( member* head)    //转账
{
	printf("请输入您的账户卡号:\n");
	int oid = 0;
	scanf("%d", &oid);
	while (check(base[oid - first]) == false) {
		scanf("%d", &oid);
	}

	printf("请输入您所要转入的账户卡号:\n");
	int iid = 0;
	scanf("%d", &iid);
	while (check(base[oid - first]) == false) {
		scanf("%d", &oid);
	}

	float input = 0;
	printf("请输入您要转出的金额数目\n");
	scanf("%f", &input);
	if (base[oid - first].balance < input) {
		printf("抱歉,您的存款不足,不能转出\n");
	}
	else {
		base[oid - first].balance -= input;
		base[iid - first].balance += input;
		printf("您的余额为: %f ¥\n", base[oid - first].balance);
		printf("对方余额为: %f ¥\n", base[iid - first].balance);
	}
}

销户

void Closing(member *head)
{                              //销户
	char k[20];    
	struct *p = *head, * t;
	if (NULL == (*head))     //若指针最后指向空,则没有客户信息
	{
		printf("没有客户信息可删除!\n");
		return;
	}
	printf("请输入要删除的客户卡号:\n");
	scanf("%s", k);
	if (p->kehu.ID == k)  //若第一个客户就是,则让头指针指向下一个结点
		*head = (*head)->next, free(p);
	else
	{
		while (NULL == p->next && p->next->kehu.ID != k)   //遍历寻找,核对客户卡号
			p = p->next;   //当p->next没指向空,并且客户的卡号还没找到,则继续寻找
		if (p->next == NULL)
			printf("对不起,没有该客户!\n");
		else
		{
			t = p->next;  //如果找到,则把p->next的值赋给t
			p->next = p->next->next;
		}
	}
}

主函数

void main()
{
	struct member* head = NULL;
	int choice;
	while (choice)
	{
		printf(" ================================================================ \n");
		printf("||                       欢迎使用本ATM机                        ||\n");
		printf("||                                                              ||\n");
		printf("||                   1.开户       2.销户                        ||\n");
		printf("||                   3.查询       4.存款                        ||\n");
		printf("||                   5.取款       6.转账                        ||\n");
		printf("||                         0.退出                              ||\n");
		printf("||                                                              ||\n");
		printf(" ================================================================ \n");
		printf("请选择您的操作:  \n");
		scanf_s("%d", &choice);
		printf("\n");
		switch (choice)
		{
		case 1:                                      //开户
			Opening();
			break;
		case 2:                                        //销户
			Closing();
			break;
		case 3:                                        //查询
			Inquire();
			break;
		case 4:                                        //存款
			Deposit();
			break;
		case 5:                                        //取款
			Withdrawal();
			break;
		case 6:                                        //转账
			Account();
			break;
		case 0:
			printf("期待您的再次光临!\n");
			exit(0);
			break;
		}
	}
}

运行界面

三 个人小结

1.psp表格

psp2.1 | 任务内容 | 计划完成需要的时间(min)| 实际完成需要的时间(min) |

  • | :-: | :-: | :-: | -:
    Planing |计划 |30 |25 |
    Estimate |估计这个任务需要多少时间,
    并规划大致工作步骤 |300 | 500 |
    Development |开发| 300| 300|
    Analysis |需求分析(包括学习新技能)|60|70|
    Design Spec|生成设计文档|10|20|
    Design Review|设计审核|15|17|
    Coding Standard|代码规范|8|19|
    Design|具体设计|10|14|
    Coding|具体编码|200|340|
    Code Review|代码复核|15|20|
    Test|测试(自我测试,修改代码
    提交修改)|60|60|
    Reporting|报告|15|20|
    Test Report|测试报告|6|17|
    Size Measurement|计算工作量|25|20|
    Postmortem & Process
    Improvement|事后总结,并提出过程修改计划|5|5|
    小结:虽然这次的ATM系统不算是太难,但是当真正进入编写时候还是出现了许多的问题,这也是简单的做了一下,希望在以后能有机会去更深层次的进行编译。这次的复习了很多以前许多不够扎实的知识,以前认为自己已经懂了的知识点也理解更加深刻了,多样化的处理问题,才是成功之道。
posted on 2020-11-18 23:30  阳宝冲冲冲  阅读(68)  评论(0编辑  收藏  举报