鱼C论坛

 找回密码
 立即注册
查看: 2142|回复: 8

C++转为c

[复制链接]
发表于 2016-5-16 21:54:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[10];// 名字
        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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-17 08:41:50 | 显示全部楼层
额,把类改成结构体,cout cin 改成 printf scanf 函数就行了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-17 08:43:20 | 显示全部楼层
skyseawing 发表于 2016-5-17 08:41
额,把类改成结构体,cout cin 改成 printf scanf 函数就行了吧

还有new delete 改成malloc free函数等一些小细节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-17 18:41:38 From FishC Mobile | 显示全部楼层
但是结构体里好像没有函数,而且一些函数有this指针,感觉不好改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-17 18:42:39 From FishC Mobile | 显示全部楼层
skyseawing 发表于 2016-5-17 08:43
还有new delete 改成malloc free函数等一些小细节

能否把具体的修改说一下,我是新手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-18 17:19:13 | 显示全部楼层
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[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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-18 17:20:02 | 显示全部楼层

我改了,但是不能实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-18 21:23:50 | 显示全部楼层
typedef struct node
{
    char name[256];   //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[256]; //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型的了

评分

参与人数 1荣誉 +8 鱼币 +8 收起 理由
小甲鱼 + 8 + 8 热心鱼油!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-18 21:25:00 | 显示全部楼层
skyseawing 发表于 2016-5-18 21:23
先改了这么多,下面大概都是这样的吧, 不过我不太懂C++ 里 是怎么回事,看程序的意思,我就把data 声明 ...

原谅我比较懒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-14 19:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表