个人相关信息
| 班级 |
| ---- | ---- | ---- |
| 作业要求 |
| 作业目标 |编写一个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系统不算是太难,但是当真正进入编写时候还是出现了许多的问题,这也是简单的做了一下,希望在以后能有机会去更深层次的进行编译。这次的复习了很多以前许多不够扎实的知识,以前认为自己已经懂了的知识点也理解更加深刻了,多样化的处理问题,才是成功之道。