鱼C论坛

 找回密码
 立即注册
查看: 1307|回复: 6

我这个链表该怎么改

[复制链接]
发表于 2022-3-27 17:02:37 | 显示全部楼层 |阅读模式

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

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

x
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<fstream>
#include<windows.h>
#include<malloc.h>
using namespace std;

typedef struct List//链表结构体
{
        string name;
        string street;
        string city;
        string state;
        string phone;
        struct List *next;
}list,*linklist;
void creatlist(linklist &p);
void insertlist(linklist &p, list *q);
linklist search(linklist p);
void del(linklist &p,linklist s);
void tou();
void print(linklist p);
void xianshi(linklist p);
void tianjiaxinxi(linklist &p);
void shanchu(linklist &p);
void gai(linklist &p);
void savelist(linklist p);
void loadlist(linklist &p);
void menu();
int main()
{       
        linklist l=NULL;
        int choice;//自己输入的选项
        int sum=7;
        while(choice!=sum)//建立循环使菜单能重复出现并实现退出功能
        {
                menu();
                cin>>choice;
                switch(choice)//判断用户选项并做以下内容
                {
                        case 1:
                        {
                                tianjiaxinxi(l);
                                break;
                        }
                        case 2:
                        {
                                shanchu(l);
                                break;
                        }
                        case 3:
                        {       
                                linklist d=search(l);
                                system("cls");
                                if(d)
                                {
                                        system("cls");
                                        tou();
                                        print(d);
                                        Sleep(1500);
                                }
                                else
                                {
                                        system("cls");
                                        cout<<"查无此人!"<<endl;
                                        Sleep(1500);
                                }
                                break;
                        }
                        case 4:
                                tou();
                                xianshi(l);
                                system("pause");
                                break;
                        case 5:
                                gai(l);
                                break;
                        case 6:
                                loadlist(l);
                                break;
                        case 7:
                                savelist(l);
                                break;
                }
        }
        return 0;
}
void creatlist(linklist &p)//链表初始化
{       
        //申请头结点
        p=new list;
        p->next=NULL;
}
void insertlist(linklist &p, list *q)//插入
{       
        list *a=NULL;
        a=p;       
        q->next=p->next;
        p->next=q;
}
linklist search(linklist p)//查找信息
{
        string name;
        cout<<"请输入你想要查找的名字:"<<endl;
        cin>>name;
        linklist a=p->next;
        while(a)
        {
                if(a->name==name)
                        break;
                else
                        a=a->next;
        }
        return a;
}
void del(linklist &p,linklist s)//删除信息
{
        linklist q,d;
        q=p->next;
        if(q!=s)
        {
                d=q;
                q=q->next;
        }
        else
        {
                d->next=q->next;
                delete q;
                cout<<"删除成功!"<<endl;               
        }
}
void tou()
{
        cout<<"姓名"<<"\t";
        cout<<"城市"<<"\t";
        cout<<"电话"<<"\t\t\t";
        cout<<"国家"<<"\t";
        cout<<"街道"<<endl;
}
void print(linklist p)//显示一条信息
{
        cout<<p->name<<"\t";
        cout<<p->city<<"\t";
        cout<<p->phone<<"\t\t\t";
        cout<<p->state<<"\t";
        cout<<p->street<<"\t"<<endl;
}
void xianshi(linklist p)//显示信息
{
        if(!p)
        {
                cout<<"无通讯人信息!"<<endl;
        }
        else
        {
                linklist j=p->next;
                while(j)
                {       
                        print(j);
                        j=j->next;
                }
        }
}
void tianjiaxinxi(linklist &p)//添加信息
{
        list *L=new list;//分配新的空间
        system("cls");
        while(true)//名字
                {
                        cout<<"请输入名字"<<endl;
                        cin>>L->name;
                        int shuzi;
                        cout<<"是否保存?(保存请按“1”)(取消请按“2”)"<<endl;
                        cin>>shuzi;
                        if(shuzi==1)
                        {       
                                insertlist(p,L);
                                cout<<"保存成功!"<<endl;
                                Sleep(1000);
                                break;
                        }
                        else if(shuzi==2)
                        {
                                cout<<"重新输入!"<<endl;
                        }
                        else if(shuzi!=1||shuzi!=2)
                        {       
                                cout<<"请输入有效数字!"<<endl;
                        }       
                }
        system("cls");
        while(true)//城市
                {
                        cout<<"请输入城市"<<endl;
                        cin>>L->city;
                        int shuzi;
                        cout<<"是否保存?(保存请按“1”)(取消请按“2”)"<<endl;
                        cin>>shuzi;
                        if(shuzi==1)
                        {       
                                insertlist(p,L);
                                cout<<"保存成功!"<<endl;
                                Sleep(1000);
                                break;
                        }
                        else if(shuzi==2)
                        {
                                cout<<"重新输入!"<<endl;
                        }
                        else if(shuzi!=1||shuzi!=2)
                        {       
                                cout<<"请输入有效数字!"<<endl;
                        }       
                }
        system("cls");
        while(true)//国家
                {
                        cout<<"请输入国家"<<endl;
                        cin>>L->state;
                        int shuzi;
                        cout<<"是否保存?(保存请按“1”)(取消请按“2”)"<<endl;
                        cin>>shuzi;
                        if(shuzi==1)
                        {       
                                insertlist(p,L);
                                cout<<"保存成功!"<<endl;
                                Sleep(1000);
                                break;
                        }
                        else if(shuzi==2)
                        {
                                cout<<"重新输入!"<<endl;
                        }
                        else if(shuzi!=1||shuzi!=2)
                        {       
                                cout<<"请输入有效数字!"<<endl;
                        }       
                }
        system("cls");
        while(true)//街道
                {
                        cout<<"请输入街道"<<endl;
                        cin>>L->street;
                        int shuzi;
                        cout<<"是否保存?(保存请按“1”)(取消请按“2”)"<<endl;
                        cin>>shuzi;
                        if(shuzi==1)
                        {       
                                insertlist(p,L);
                                cout<<"保存成功!"<<endl;
                                Sleep(1000);
                                break;
                        }
                        else if(shuzi==2)
                        {
                                cout<<"重新输入!"<<endl;
                        }
                        else if(shuzi!=1||shuzi!=2)
                        {       
                                cout<<"请输入有效数字!"<<endl;
                        }       
                }
        system("cls");
        while(true)//电话
                {
                        cout<<"请输入电话"<<endl;
                        cin>>L->phone;
                        int shuzi;
                        cout<<"是否保存?(保存请按“1”)(取消请按“2”)"<<endl;
                        cin>>shuzi;
                        if(shuzi==1)
                        {       
                                insertlist(p,L);
                                cout<<"保存成功!"<<endl;
                                Sleep(1000);
                                break;
                        }
                        else if(shuzi==2)
                        {
                                cout<<"重新输入!"<<endl;
                        }
                        else if(shuzi!=1||shuzi!=2)
                        {       
                                cout<<"请输入有效数字!"<<endl;
                        }       
                }
        system("cls");
}
void shanchu(linklist &p)//删除
{
        string name;
        linklist l;
        cout<<"请输入你要删除的名字:";
        cin>>name;
        linklist a=p->next;
        del(p,a);
        system("pause");
}
void gai(linklist &p)//修改
{
        system("cls");
        linklist b=search(p);
        cout<<"需要修改的名字:";
        cin>>b->name;
        cout<<"需要修改的街道:";
        cin>>b->street;
        cout<<"需要修改的城市:";
        cin>>b->city;
        cout<<"需要修改的国家;";
        cin>>b->state;
        cout<<"需要修改的电话:";
        cin>>b->phone;
        cout<<"修改成功!";
        Sleep(2000);
}
void savelist(linklist p)//保存文件
{
        linklist j=p->next;
        FILE *fp=NULL;
        if((fp=fopen("通讯信息.txt","wb"))==NULL)
          {
            cout<<"无文件内容";
            exit(1);  //异常退出
        }
        fp=fopen("通讯信息.txt","wb");
        while(j)  
    {  
        fprintf(fp,"%s %s %s %s %s ",j->name.c_str(),j->city.c_str(),j->phone.c_str(),j->state.c_str(),j->street.c_str());  
        j=j->next;   
    }  
        fclose(fp);
                cout << "已保存到文件!" << endl<<"欢迎下次使用!"<<endl;
}
void loadlist(linklist &p)
{
        FILE *fp=NULL;
        if ((fp=(fopen("通讯信息.txt", "rb"))) == NULL)
        {
                cout << "找不到文件!" << endl;
                Sleep(3000);
        }
        fp=fopen("通讯信息.txt", "rb");
        linklist k=NULL;
        while(1)
        {
                k=new list;
                if (fread(k, sizeof(list), 1, fp) > 0)
                {
                        insertlist(p,k);
                }
                else
                {
                        break;
                }
        }
        fclose(fp);
        cout<<"加载中....."<< endl;
        Sleep(1000);
        cout<<"加载成功!"<<endl;
}
void menu()//菜单
{
        cout<<"***********************************"<<endl;
        cout<<"          通讯管理系统"<<endl;
        cout<<"        1.输入通讯人信息"<<endl;
        cout<<"        2.删除通讯人信息"<<endl;
        cout<<"        3.查找通讯人信息"<<endl;
        cout<<"        4.显示通讯人信息"<<endl;
        cout<<"        5.修改通讯信息"<<endl;
        cout<<"        6.加载文件"<<endl;
        cout<<"        7.保存文件并退出"<<endl;
        cout<<"***********************************"<<endl;
        cout<<"请选择:";
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-27 17:23:18 | 显示全部楼层
C++?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-27 17:31:14 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 17:47:30 | 显示全部楼层
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string>
  5. #include<fstream>
  6. #include<windows.h>
  7. #include<malloc.h>
  8. using namespace std;

  9. typedef struct List//链表结构体
  10. {
  11.     string name;
  12.     string street;
  13.     string city;
  14.     string state;
  15.     string phone;
  16.     struct List* next;
  17. }list, * linklist;
  18. void creatlist(linklist& p);
  19. void insertlist(linklist& p, list* q);
  20. linklist search(linklist p);
  21. void del(linklist& p, linklist s);
  22. void tou();
  23. void print(linklist p);
  24. void xianshi(linklist p);
  25. void tianjiaxinxi(linklist& p);
  26. void shanchu(linklist& p);
  27. void gai(linklist& p);
  28. void savelist(linklist p);
  29. void loadlist(linklist& p);
  30. void menu();
  31. int main()
  32. {
  33.     linklist l = NULL;
  34.     int choice;//自己输入的选项
  35.     int sum = 7;
  36.     while (choice != sum) // <------------------------------------------------------你的 chooice 未初始值,只是声明而已,没有任何有效值
  37.     {
  38.         menu();
  39.         cin >> choice;
  40.         switch (choice)//判断用户选项并做以下内容
  41.         {
  42.         case 1:
  43.         {
  44.             tianjiaxinxi(l);
  45.             break;
  46.         }
  47.         case 2:
  48.         {
  49.             shanchu(l);
  50.             break;
  51.         }
  52.         case 3:
  53.         {
  54.             linklist d = search(l);
  55.             system("cls");
  56.             if (d)
  57.             {
  58.                 system("cls");
  59.                 tou();
  60.                 print(d);
  61.                 Sleep(1500);
  62.             }
  63.             else
  64.             {
  65.                 system("cls");
  66.                 cout << "查无此人!" << endl;
  67.                 Sleep(1500);
  68.             }
  69.             break;
  70.         }
  71.         case 4:
  72.             tou();
  73.             xianshi(l);
  74.             system("pause");
  75.             break;
  76.         case 5:
  77.             gai(l);
  78.             break;
  79.         case 6:
  80.             loadlist(l);
  81.             break;
  82.         case 7:
  83.             savelist(l);
  84.             break;
  85.         }
  86.     }
  87.     return 0;
  88. }
  89. void creatlist(linklist& p)//链表初始化
  90. {
  91.     //申请头结点
  92.     p = new list;
  93.     p->next = NULL;
  94. }
  95. void insertlist(linklist& p, list* q)//插入
  96. {
  97.     list* a = NULL;
  98.     a = p;
  99.     q->next = p->next;
  100.     p->next = q;
  101. }
  102. linklist search(linklist p)//查找信息
  103. {
  104.     string name;
  105.     cout << "请输入你想要查找的名字:" << endl;
  106.     cin >> name;
  107.     linklist a = p->next;
  108.     while (a)
  109.     {
  110.         if (a->name == name)
  111.             break;
  112.         else
  113.             a = a->next;
  114.     }
  115.     return a;
  116. }
  117. void del(linklist& p, linklist s)//删除信息
  118. {
  119.     linklist q, d;
  120.     q = p->next;
  121.     if (q != s)
  122.     {
  123.         d = q;
  124.         q = q->next;
  125.     }
  126.     else
  127.     {
  128.         d->next = q->next; // <-------------------------------- 注意你的 d 没有分配空间,不能用 next,只能用来指向地址
  129.         delete q;
  130.         cout << "删除成功!" << endl;
  131.     }
  132. }
  133. void tou()
  134. {
  135.     cout << "姓名" << "\t";
  136.     cout << "城市" << "\t";
  137.     cout << "电话" << "\t\t\t";
  138.     cout << "国家" << "\t";
  139.     cout << "街道" << endl;
  140. }
  141. void print(linklist p)//显示一条信息
  142. {
  143.     cout << p->name << "\t";
  144.     cout << p->city << "\t";
  145.     cout << p->phone << "\t\t\t";
  146.     cout << p->state << "\t";
  147.     cout << p->street << "\t" << endl;
  148. }
  149. void xianshi(linklist p)//显示信息
  150. {
  151.     if (!p)
  152.     {
  153.         cout << "无通讯人信息!" << endl;
  154.     }
  155.     else
  156.     {
  157.         linklist j = p->next;
  158.         while (j)
  159.         {
  160.             print(j);
  161.             j = j->next;
  162.         }
  163.     }
  164. }
  165. void tianjiaxinxi(linklist& p)//添加信息
  166. {
  167.     list* L = new list;//分配新的空间
  168.     system("cls");
  169.     while (true)//名字
  170.     {
  171.         cout << "请输入名字" << endl;
  172.         cin >> L->name;
  173.         int shuzi;
  174.         cout << "是否保存?(保存请按“1”)(取消请按“2”)" << endl;
  175.         cin >> shuzi;
  176.         if (shuzi == 1)
  177.         {
  178.             insertlist(p, L);
  179.             cout << "保存成功!" << endl;
  180.             Sleep(1000);
  181.             break;
  182.         }
  183.         else if (shuzi == 2)
  184.         {
  185.             cout << "重新输入!" << endl;
  186.         }
  187.         else if (shuzi != 1 || shuzi != 2)
  188.         {
  189.             cout << "请输入有效数字!" << endl;
  190.         }
  191.     }
  192.     system("cls");
  193.     while (true)//城市
  194.     {
  195.         cout << "请输入城市" << endl;
  196.         cin >> L->city;
  197.         int shuzi;
  198.         cout << "是否保存?(保存请按“1”)(取消请按“2”)" << endl;
  199.         cin >> shuzi;
  200.         if (shuzi == 1)
  201.         {
  202.             insertlist(p, L);
  203.             cout << "保存成功!" << endl;
  204.             Sleep(1000);
  205.             break;
  206.         }
  207.         else if (shuzi == 2)
  208.         {
  209.             cout << "重新输入!" << endl;
  210.         }
  211.         else if (shuzi != 1 || shuzi != 2)
  212.         {
  213.             cout << "请输入有效数字!" << endl;
  214.         }
  215.     }
  216.     system("cls");
  217.     while (true)//国家
  218.     {
  219.         cout << "请输入国家" << endl;
  220.         cin >> L->state;
  221.         int shuzi;
  222.         cout << "是否保存?(保存请按“1”)(取消请按“2”)" << endl;
  223.         cin >> shuzi;
  224.         if (shuzi == 1)
  225.         {
  226.             insertlist(p, L);
  227.             cout << "保存成功!" << endl;
  228.             Sleep(1000);
  229.             break;
  230.         }
  231.         else if (shuzi == 2)
  232.         {
  233.             cout << "重新输入!" << endl;
  234.         }
  235.         else if (shuzi != 1 || shuzi != 2)
  236.         {
  237.             cout << "请输入有效数字!" << endl;
  238.         }
  239.     }
  240.     system("cls");
  241.     while (true)//街道
  242.     {
  243.         cout << "请输入街道" << endl;
  244.         cin >> L->street;
  245.         int shuzi;
  246.         cout << "是否保存?(保存请按“1”)(取消请按“2”)" << endl;
  247.         cin >> shuzi;
  248.         if (shuzi == 1)
  249.         {
  250.             insertlist(p, L);
  251.             cout << "保存成功!" << endl;
  252.             Sleep(1000);
  253.             break;
  254.         }
  255.         else if (shuzi == 2)
  256.         {
  257.             cout << "重新输入!" << endl;
  258.         }
  259.         else if (shuzi != 1 || shuzi != 2)
  260.         {
  261.             cout << "请输入有效数字!" << endl;
  262.         }
  263.     }
  264.     system("cls");
  265.     while (true)//电话
  266.     {
  267.         cout << "请输入电话" << endl;
  268.         cin >> L->phone;
  269.         int shuzi;
  270.         cout << "是否保存?(保存请按“1”)(取消请按“2”)" << endl;
  271.         cin >> shuzi;
  272.         if (shuzi == 1)
  273.         {
  274.             insertlist(p, L);
  275.             cout << "保存成功!" << endl;
  276.             Sleep(1000);
  277.             break;
  278.         }
  279.         else if (shuzi == 2)
  280.         {
  281.             cout << "重新输入!" << endl;
  282.         }
  283.         else if (shuzi != 1 || shuzi != 2)
  284.         {
  285.             cout << "请输入有效数字!" << endl;
  286.         }
  287.     }
  288.     system("cls");
  289. }
  290. void shanchu(linklist& p)//删除
  291. {
  292.     string name;
  293.     linklist l;
  294.     cout << "请输入你要删除的名字:";
  295.     cin >> name;
  296.     linklist a = p->next;
  297.     del(p, a);
  298.     system("pause");
  299. }
  300. void gai(linklist& p)//修改
  301. {
  302.     system("cls");
  303.     linklist b = search(p);
  304.     cout << "需要修改的名字:";
  305.     cin >> b->name;
  306.     cout << "需要修改的街道:";
  307.     cin >> b->street;
  308.     cout << "需要修改的城市:";
  309.     cin >> b->city;
  310.     cout << "需要修改的国家;";
  311.     cin >> b->state;
  312.     cout << "需要修改的电话:";
  313.     cin >> b->phone;
  314.     cout << "修改成功!";
  315.     Sleep(2000);
  316. }
  317. void savelist(linklist p)//保存文件
  318. {
  319.     linklist j = p->next;
  320.     FILE* fp = NULL;
  321.     if ((fp = fopen("通讯信息.txt", "wb")) == NULL)
  322.     {
  323.         cout << "无文件内容";
  324.         exit(1);  //异常退出
  325.     }
  326.     fp = fopen("通讯信息.txt", "wb");
  327.     while (j)
  328.     {
  329.         fprintf(fp, "%s %s %s %s %s ", j->name.c_str(), j->city.c_str(), j->phone.c_str(), j->state.c_str(), j->street.c_str());
  330.         j = j->next;
  331.     }
  332.     fclose(fp);
  333.     cout << "已保存到文件!" << endl << "欢迎下次使用!" << endl;
  334. }
  335. void loadlist(linklist& p)
  336. {
  337.     FILE* fp = NULL;
  338.     if ((fp = (fopen("通讯信息.txt", "rb"))) == NULL)
  339.     {
  340.         cout << "找不到文件!" << endl;
  341.         Sleep(3000);
  342.     }
  343.     fp = fopen("通讯信息.txt", "rb");
  344.     linklist k = NULL;
  345.     while (1)
  346.     {
  347.         k = new list;
  348.         if (fread(k, sizeof(list), 1, fp) > 0)
  349.         {
  350.             insertlist(p, k);
  351.         }
  352.         else
  353.         {
  354.             break;
  355.         }
  356.     }
  357.     fclose(fp);
  358.     cout << "加载中....." << endl;
  359.     Sleep(1000);
  360.     cout << "加载成功!" << endl;
  361. }
  362. void menu()//菜单
  363. {
  364.     cout << "***********************************" << endl;
  365.     cout << "          通讯管理系统" << endl;
  366.     cout << "        1.输入通讯人信息" << endl;
  367.     cout << "        2.删除通讯人信息" << endl;
  368.     cout << "        3.查找通讯人信息" << endl;
  369.     cout << "        4.显示通讯人信息" << endl;
  370.     cout << "        5.修改通讯信息" << endl;
  371.     cout << "        6.加载文件" << endl;
  372.     cout << "        7.保存文件并退出" << endl;
  373.     cout << "***********************************" << endl;
  374.     cout << "请选择:";
  375. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-27 19:06:25 | 显示全部楼层

这个我试过了,输入信息时不能保存在链表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 20:31:05 | 显示全部楼层
闲时 发表于 2022-3-27 19:06
这个我试过了,输入信息时不能保存在链表

每次输入新数据之前,tianjiaxinxi 这里要 new 分配内存空间这是没错,但你在初始化时 creatlist 已经分配一次,却没有用?初始化只需指向 NULL 便可,不用分配空间。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-27 23:34:34 | 显示全部楼层
傻眼貓咪 发表于 2022-3-27 20:31
每次输入新数据之前,tianjiaxinxi 这里要 new 分配内存空间这是没错,但你在初始化时 creatlist 已经分 ...

你运行一下看看那个输入信息,随便输几个数据后它就不输入了QAQ
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 16:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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