C++转为c
#include<iostream>#include<string>
using namespace std;
template<class T> //构建节点类模板
class Node
{
public:
Node<T>*next;//可省指针
string name;
T data;
long int number;
};
template<class T>
class SavingList
{
public:
SavingList(){};
Node<T>*CreatSavingList();
void SearchAccount(long int x);
Node<T>*DeleteAccount(long int x);
Node<T>*InsertAccount(long int x);
void Record(long int x,int y);
private:
Node<T>*head;
};
template<class T> //建立已有储户数据
Node<T>*SavingList<T>::CreatSavingList()
{
head=new Node<T>;//初值
int k=1;//分配动态空间
Node<T>*p,*q;
head->next=NULL;//赋初值
long int number,Number;
int data;
string name;
cout<<"请输入账户号(八位整数):";
cin>>number;
Number=number;
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入账户余额:";
cin>>data;
while(number/1e7>=1&&number/1e7<=10)
{
p=new Node<T>;
q=new Node<T>;
p->number=number;//节点初值
p->name=name;
p->data=data;
p->next=head->next;//将p插入链中
head->next=p;
cout<<"是否继续输入信息 按1继续输入 按0退出"<<endl;
cin>>k;
if(k==0)
break;
cout<<"请输入账户号(八位整数):";
cin>>number;
q=head->next;
while(q)//账号的重复判断
{
if(q->number==number)
{
cout<<"账号已存在!"<<endl;
break;
}
else
q=q->next;
}
if(!q)
{
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入账户余额:";
cin>>data;
}
}
return head;
}
template<class T> //查找账户
void SavingList<T>::SearchAccount(long int x)
{
if(x/1e7<1||x/1e7>10)
{
cout<<"您输入的账户不存在"<<endl;
return;
}
Node<long>*p;
p=head;
while(p!=NULL&&p->number!=x)
{
p=p->next;//向下移位 继续查找
}
if(p==NULL)
{
cout<<"您输入的账户未找到"<<endl;
}
else
{
cout<<"账户名:"<<p->name<<endl;
cout<<"账户号码:"<<p->number<<endl;
cout<<"账户余额:"<<p->data<<endl;
}
}
template<class T> //销户
Node<T>*SavingList<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)
{
cout<<"您输入的账户不存在"<<endl;
}
else
{
q->next=p->next;//将q删掉
}
return head;
}
template<class T>//开户
Node<T>*SavingList<T>::InsertAccount(long int x)
{
Node<T>*p,*q;
q=new Node<T>;
char w;// 名字
int i;
p=head;
q->number=x;
q->next=p->next;
p->next=q;//插入q(新的账号)
cout<<"请输入姓名:";
cin>>w;
cout<<"请输入余额:";
cin>>i;
q->name=w;
q->data=i;
cout<<"您的新账户的信息是:"<<endl;
cout<<"账户名:"<<q->name<<endl;
cout<<"账户号码:"<<q->number<<endl;
cout<<"账户名:"<<q->data<<"元"<<endl;
return head;
}
template<class T>//存款记录
void SavingList<T>::Record(long int x,int y)
{
Node<T>*p;
p=head;
while(p!=NULL&&p->number!=x)//循环查找P的相同正确值 节点下移
{
p=p->next;
}
if(p==NULL)
cout<<"你输入的账户不存在"<<endl;
else
{
p->data=p->data+y;
if(p->data<0)
cout<<"余额不足 请充值:"<<endl;
else
{
cout<<"目前您的账户信息:"<<endl;
cout<<"账户名(八位):"<<p->name<<endl;
cout<<"账户号码:"<<p->number<<endl;
cout<<"账户余额:"<<p->data<<"元"<<endl;
}
}
}
int Menu()
{
int n;
cout<<".....................Menu......................"<<endl;
cout<<"\t1、查询账户 2、开户\n\n"<<endl;
cout<<"\t3、支出存储记录 4、销户\n\n"<<endl;
cout<<"\t5、退出"<<endl;
cout<<"...............................................";
cout<<endl;
do
{
cout<<"请输入你的选择(1-5):\n"<<endl;
cin>>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;
for(;;)
{
switch(Menu())
{
case 1:
{
cout<<"请输入您要查询的账户:";
cin>>x;
T.SearchAccount(x);
cout<<"是否需要继续进行操作?是请输入1,放弃请输入0:";
cin>>y;
if(y==1)
{
cout<<".........................................\n\n\n";
cout<<"\t1、支出存入 2、销户\n\n";
cout<<".........................................\n\n\n";
do
{
cout<<"请输入你选择的操作:";
cin>>n;
}
while(n!=1&&n!=2);
if(n==1)
{
cout<<"请输入你存取的钱数:";
cout<<"存入的钱数在前加“+”,取出的钱数在前加“-”"<<endl;
int a;
cin>>a;
T.Record(x,a);
}
if(n==2)
{
cout<<"销户请输入 1,不进行操作输入 0 !";
int b;
cin>>b;
if(b==1)
T.DeleteAccount(x);
}
}
}
break;
case 2:
{
long int c;
Node<long>*q;
q=head->next;
cout<<"请输入您的账号(八位):";
cin>>c;
while(q)
{
if(q->number==c)
{
cout<<"账号已存在:"<<endl;
break;
}
else
q=q->next;
}
if(!q)
{
while(c/1e7<1||c/1e7>10)
{
cout<<"输入的位数不正确:";
cin>>c;
}
T.InsertAccount(c);
}
}
break;
case 3:
{
long int r;
int t,l;
cout<<"请输入执行操作的账号:";
cin>>r;
cout<<"请输入你存取的钱数:";
cout<<"存入钱数在前加“+”,取出钱数在前加“-”"<<endl;
cin>>t;
T.Record(r,t);
cout<<"继续操作请输入 1,退出输入0:"<<endl;
cin>>l;
while(l==1)
{
cout<<"请输入执行操作的账号:";
cin>>r;
cout<<"请输入你存取的钱数:";
cout<<"存入钱数在前加“+”,取出钱数在前加“-”"<<endl;
cin>>t;
T.Record(r,t);
cout<<"继续操作请输入 1,退出输入0:"<<endl;
cin>>l;
}
}
break;
case 4:
{
long int k;
int m;
cout<<"请输入你想要销掉的账户(请选择以上已有的):";
cin>>k;
while(k/1e7<1||k/1e7>9)
{
cout<<"输入的位数不正确:";
cin>>k;
}
T.DeleteAccount(k);
cout<<"继续操作请输入1,退出输入0"<<endl;
cin>>m;
while(m==1)
{
cout<<"请输入你想要销掉的账户(请选择以上已有的):";
cin>>k;
while(k/1e7<1||k/1e7>9)
{
cout<<"输入的位数不正确,请你确认后再操作!:";
cin>>k;
}
T.DeleteAccount(k);
cout<<"继续操作请输入1,退出输入0"<<endl;
cin>>m;
}
}
break;
case 5:
exit(0);
}
}
return 0;
} 额,把类改成结构体,cout cin 改成 printf scanf 函数就行了吧 skyseawing 发表于 2016-5-17 08:41
额,把类改成结构体,cout cin 改成 printf scanf 函数就行了吧
还有new delete 改成malloc free函数等一些小细节 但是结构体里好像没有函数,而且一些函数有this指针,感觉不好改 skyseawing 发表于 2016-5-17 08:43
还有new delete 改成malloc free函数等一些小细节
能否把具体的修改说一下,我是新手 skyseawing 发表于 2016-5-17 08:43
还有new delete 改成malloc free函数等一些小细节
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 1000
typedef struct //构建节点类模板
{
Node T *next;//可省指针
char name;
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;
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;// 名字
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;
} tin 发表于 2016-5-18 17:19
我改了,但是不能实现 typedef struct node
{
char name; //string name
int data; // T data; ??
long int number;
struct node *next;
}Node;
Node *head = NULL;// link head
Node *CreatSavingList()
{
//head=new Node<T>;//初值
head = (Node *)malloc(sizeof(Node));
int k=1;//分配动态空间
Node *p,*q;
head->next=NULL;//赋初值
long int number;
int data;
char name; //string name;
//cout<<"请输入账户号(八位整数):";
printf("请输入账户号(八位整数):\n");
//cin>>number;
scanf("%ld", &number);//只能输入数字
//Number=number;
//cout<<"请输入姓名:";
printf("请输入姓名:\n");
//cin>>name;
scanf("%s", name); // 不要输入超过256个字符
//cout<<"请输入账户余额:";
printf("请输入账户余额:\n");
//cin>>data;
scanf("%d", &data);
while(number/1e7>=1&&number/1e7<=10) // ???
{
//p=new Node<T>;
p = (Node *)malloc(sizeof(Node));
//q=new Node<T>;
q = (Node *)malloc(sizeof(Node));
p->number=number;//节点初值
//p->name=name;
memcpy(p->name, name, sizeof(p->name));
p->data=data;
p->next=head->next;//将p插入链中
head->next=p;
//cout<<"是否继续输入信息 按1继续输入 按0退出"<<endl;
printf("是否继续输入信息 按1继续输入 按0退出\n");
//cin>>k;
scanf("%d", &k);
if(k==0)
break;
//cout<<"请输入账户号(八位整数):";
printf("请输入账户号(八位整数):\n");
//cin>>number;
scanf("%ld", &number);
q=head->next;
while(q)//账号的重复判断
{
if(q->number == number)
{
//cout<<"账号已存在!"<<endl;
printf("账号已存在\n");
break;
}
else
q=q->next;
}
if(!q)
{
//cout<<"请输入姓名:";
printf("请输入姓名:\n");
//cin>>name;
scanf("%s", name);
//cout<<"请输入账户余额:";
printf("请输入账户余额:\n");
//cin>>data;
scanf("%d");
}
}
return head;
}
先改了这么多,下面大概都是这样的吧, 不过我不太懂C++ 里 <T>是怎么回事,看程序的意思,我就把data 声明称int型的了 skyseawing 发表于 2016-5-18 21:23
先改了这么多,下面大概都是这样的吧, 不过我不太懂C++ 里 是怎么回事,看程序的意思,我就把data 声明 ...
原谅我比较懒{:5_91:}
页:
[1]