#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 1000
typedef struct //构建节点类模板
{
Node T *next;//可省指针
char name[30];
T data;
long int number;
};
typedef struct T
struct SavingList
{
Node<T>*head;
};
typedef struct T //建立已有储户数据
Node<T>*CreatSavingList()
{
head=malloc(Node<T>);//初值
int k=1;//分配动态空间
Node<T>*p,*q;
head->next=NULL;//赋初值
long int number,Number;
int data;
char name[30];
printf("请输入账户号(八位整数):");
scanf(%8d",&number);
Number=number;
printf("请输入姓名:");
scanf("%s",&name);
printf("请输入账户余额:");
scanf("%d",&data);
while(number/1e7>=1&&number/1e7<=10)
{
p=malloc(Node<T>);
q=malloc(Node<T>);
p->number=number;//节点初值
p->name=name;
p->data=data;
p->next=head->next;//将p插入链中
head->next=p;
printf("是否继续输入信息 按1继续输入 按0退出\n");
scanf("%d",&k);
if(k==0)
break;
printf("请输入账户号(八位整数):");
scanf("%d",&number);
q=head->next;
while(q)//账号的重复判断
{
if(q->number==number)
{
printf("账号已存在!\n");
break;
}
else
q=q->next;
}
if(!q)
{
printf("请输入姓名:");
scanf("%s",&name);
printf("请输入账户余额:");
scanf("%d",&data);
}
}
return head;
}
typedef struct T //查找账户
void SearchAccount(long int x)
{
if(x/1e7<1||x/1e7>10)
{
printf("您输入的账户不存在\n");
return;
}
Node<long>*p;
p=head;
while(p!=NULL&&p->number!=x)
{
p=p->next;//向下移位 继续查找
}
if(p==NULL)
{
printf("您输入的账户未找到\n");
}
else
{
printf("账户名: %s \n",p->name);
printf("账户号码: %d \n",p->number);
printf("账户余额: %d\n",p->data);
}
}
typedef struct T //销户
Node<T>*DeleteAccount(long int x)
{
Node<T>*p,*q;//节点类型
p=head;
while(p!=NULL&&p->number!=x)
{
q=p;
p=p->next;
}
if(p==NULL)
{
printf("您输入的账户不存在\n");
}
else
{
q->next=p->next;//将q删掉
}
return head;
}
typedef struct T>//开户
Node<T>*InsertAccount(long int x)
{
Node<T>*p,*q;
q=new Node<T>;
char w[10];// 名字
int i;
p=head;
q->number=x;
q->next=p->next;
p->next=q;//插入q(新的账号)
printf("请输入姓名:");
scanf("%s",&w);
printf("请输入余额:");
scanf("%d",&i);
q->name=w;
q->data=i;
printf("您的新账户的信息是:\n");
printf("账户名: %s\n",q->name);
printf("账户号码: %d\n",q->number);
printf("账户名: %d 元\n",q->data);
return head;
}
typedef struct T//存款记录
void Record(long int x,int y)
{
Node<T>*p;
p=head;
while(p!=NULL&&p->number!=x)//循环查找P的相同正确值 节点下移
{
p=p->next;
}
if(p==NULL)
printf("你输入的账户不存在\n");
else
{
p->data=p->data+y;
if(p->data<0)
printf("余额不足 请充值:\n";
else
{
printf("目前您的账户信息:\n");
printf("账户名(八位):%s\n",p->name);
printf("账户号码:%d\n",p->number);
printf("账户余额:%d元\n",p->data);
}
}
}
int Menu()
{
int n;
printf(".....................Menu......................\n");
printf("\t1、查询账户 2、开户\n\n\n");
printf("\t3、支出存储记录 4、销户\n\n\n");
printf("\t5、退出\n");
printf("...............................................\n");
do
{
printf("请输入你的选择(1-5):\n\n");
scanf("%d",&n;
}
while(n<1||n>5);
return n;
}
int main()
{
SavingList<long>T;
Node<long>*head;
head=T.CreatSavingList();
long int x;
int y,n,a,b;
for(;;)
{
switch(Menu())
{
case 1:
{
printf("请输入您要查询的账户:");
scanf("%ld",&x);
T.SearchAccount(x);
printf("是否需要继续进行操作?是请输入1,放弃请输入0:");
scanf("%d",&y);
if(y==1)
{
printf(".........................................\n\n\n");
printf("\t1、支出存入 2、销户\n\n");
printf(".........................................\n\n\n");
do
{
printf("请输入你选择的操作:");
scanf("%d",&n);
}
while(n!=1&&n!=2);
if(n==1)
{
printf("请输入你存取的钱数:");
printf("存入的钱数在前加“+”,取出的钱数在前加“-”\n");
scanf("%d",&a);
T.Record(x,a);
}
if(n==2)
{
printf("销户请输入 1,不进行操作输入 0 !");
scanf("%d",&b);
if(b==1)
T.DeleteAccount(x);
}
}
}
break;
case 2:
{
long int c;
Node<long>*q;
q=head->next;
printf("请输入您的账号(八位):");
scanf("%s",&c);
while(q)
{
if(q->number==c)
{
printf("账号已存在:\n");
break;
}
else
q=q->next;
}
if(!q)
{
while(c/1e7<1||c/1e7>10)
{
printf("输入的位数不正确:");
scanf("%s",&c);
}
T.InsertAccount(c);
}
}
break;
case 3:
{
long int r;
int t,l;
printf("请输入执行操作的账号:");
scanf("ld",&r);
printf("请输入你存取的钱数:");
printf("存入钱数在前加“+”,取出钱数在前加“-”\n");
scanf("%d",&t);
T.Record(r,t);
printf("继续操作请输入 1,退出输入0:\n");
scanf("%d",&l);
while(l==1)
{
printf("请输入执行操作的账号:");
scanf("%ld",&r);
printf("请输入你存取的钱数:");
printf("存入钱数在前加“+”,取出钱数在前加“-”\n");
scanf("%d",&t);
T.Record(r,t);
printf("继续操作请输入 1,退出输入0:\n");
scanf("%d",&l);
}
}
break;
case 4:
{
long int k;
int m;
printf("请输入你想要销掉的账户(请选择以上已有的):");
scanf("%ld",&k);
while(k/1e7<1||k/1e7>9)
{
printf("输入的位数不正确:");
scanf("%ld",&k);
}
T.DeleteAccount(k);
printf("继续操作请输入1,退出输入0\n");
scanf("%d",&m);
while(m==1)
{
printf("请输入你想要销掉的账户(请选择以上已有的):");
scanf("%ld",&k);
while(k/1e7<1||k/1e7>9)
{
printf("输入的位数不正确,请你确认后再操作!:");
scanf("%ld",&k);
}
T.DeleteAccount(k);
printf("继续操作请输入1,退出输入0\n");
scanf("%d",&m);
}
}
break;
case 5:
exit(0);
}
}
return 0;
}