摄殓永恒 2025-03-23 20:50 采纳率: 100%
浏览 13
已结题

分类程序出了bug咋办呀?求帮助

一个简单的垃圾分类程序,但怎么更改密码那个功能总是有bug呀?求帮助

#include<bits/stdc++.h>
#include<time.h>
#include<unistd.h>
#include<conio.h>
#include<windows.h>
using namespace std;
bool cs=false;
int sjbh[4];
int ljtbh;
int space[5]={2000,2000,2000,2000,2000};
int ccrl[4][100000];
long long cch[4][6][100000];
bool judge = false;
int clean=100;
bool function_mm(string password1)
{
    int i = 0;
    int times = 1;
    string s;
    char ch;
    char pw[50];
    while(times<=3)
    {
        i=0;
        while((ch = _getch()) != '\r')
        {
            if(ch == '\b' && i > 0)
            {
                printf("\b \b");
                i--;
            }
            else
            {
                pw[i++] = ch;
                cout << '*';
            }
        }
        pw[i] = '\0';
        cout << endl;
        if(password1.compare(pw) != 0)
        {
                cout << "密码错误,剩余" << (3-times) << "次机会:";
            times++;
        }
        else
        {
            cout << "密码正确!垃圾桶已开启。" << endl << endl;
            judge=true;
            return judge;
        }
    }
    if(times==4){
        system("color 46");
                        for(int i=3;i>=1;i--){
                            system("cls");
                            cout<<"警告!警告!警告!\n";
                            cout<<"您的计算机即将关机!剩余"<<10-i<<"秒";
                            sleep(1);
                    }
                    system("shutdown -s -p"); 
                return judge;
            return judge;
    }
}
int getRand(int x,int y){
    return (rand() % (x- y + 1)) + y;
}
int function_sj(){
    srand(time(0));
    int r=getRand(1,300); 
    return r;  
}
void function_mx(){
        cout<<"     __________    __________    __________    __________"<<"\n";
        cout<<"    |__________|  |__________|  |__________|  |__________|"<<"\n";
        cout<<"    |          |  |          |  |          |  |          | "<<"\n";
        cout<<"    |          |  |          |  |          |  |          |"<<"\n";
        cout<<"    | 其他垃圾 |  |可回收垃圾|  | 有害垃圾 |  | 厨余垃圾 |"<<"\n";
        cout<<"    |          |  |          |  |          |  |          |"<<"\n";
        cout<<"    |__________|  |__________|  |__________|  |__________|"<<"\n";
        cout<<"查看(1)\n投放(2)\n蓄能(3)\n消毒(4)\n启动(5)\n更改密码(6)\n上锁(7)\n";
}
void function_fl(int x,int y){
    int i=function_sj();
    if(space[x]-i>=0){
               if(x!=y){
            do{
                cout<<"放错了,请重新放:";
                cin>>x;
                }while(x!=y);
                cout<<"放对了!垃圾重量:"<<i<<"。"<<x<<"号垃圾桶总空间:2000  剩余空间:"<<space[x]-i;
                time_t t = time(NULL);
                struct tm *localt = localtime(&t);
                cch[ljtbh-1][0][sjbh[x-1]]=localt->tm_year+1900;
                cch[ljtbh-1][1][sjbh[x-1]]=localt->tm_mon+1;
                cch[ljtbh-1][2][sjbh[x-1]]=localt->tm_mday;
                cch[ljtbh-1][3][sjbh[x-1]]=localt->tm_hour;
                cch[ljtbh-1][4][sjbh[x-1]]=localt->tm_min;
                cch[ljtbh-1][5][sjbh[x-1]]=localt->tm_sec;
                ccrl[ljtbh-1][sjbh[x-1]]=i;
                sjbh[ljtbh-1]++;
                switch(x) {
                    case 1:
                        space[1]-=i;
                        break;
                    case 2:
                        space[2]-=i;
                        break;
                    case 3:
                        space[3]-=i;
                        break;
                    case 4:
                        space[4]-=i;
                        break;
                }
                sleep(2);
                system("cls");
            }else{
                    cout<<"放对了!垃圾重量:"<<i<<"。"<<x<<"号垃圾桶总空间:2000  剩余空间:"<<space[x]-i;
                    time_t t = time(NULL);
                    struct tm *localt = localtime(&t);
                    cch[ljtbh-1][0][sjbh[x-1]]=localt->tm_year+1900;
                    cch[ljtbh-1][1][sjbh[x-1]]=localt->tm_mon+1;
                     cch[ljtbh-1][2][sjbh[x-1]]=localt->tm_mday;
                    cch[ljtbh-1][3][sjbh[x-1]]=localt->tm_hour;
                    cch[ljtbh-1][4][sjbh[x-1]]=localt->tm_min;
                    cch[ljtbh-1][5][sjbh[x-1]]=localt->tm_sec;
                    ccrl[ljtbh-1][sjbh[x-1]]=i;
                    sjbh[ljtbh-1]++;
                    switch(x) {
                        case 1:
                            space[1]-=i;
                            break;
                        case 2:
                            space[2]-=i;
                            break;
                        case 3:
                            space[3]-=i;
                            break;
                        case 4:
                            space[4]-=i;
                            break;
            }
            sleep(2);
            system("cls");
        }
    }else{
            cout<<"空间不足,请蓄能!";
            sleep(2);
            system("cls");
    }
    return;
} 
int main(){
    string password = "123456"; 
    while(1){
        int n=function_sj();
        int m;
        char sr;
        function_mx();
        ljtbh=m+1;
        cin>>sr;
        while(sr<'1'||sr>'7'){
            cout<<"输入错误,请重新输入!\n Please type it again!\n请输入:";
            cin>>sr;
        }        
        if(sr=='5'){
            if(!judge){
                        cout<<"请输入密码:";
                        function_mm(password);
                        sleep(1);
                        system("cls"); 
            }else{
                cout<<"垃圾桶已开启,无需再次输入密码!";
                sleep(1);
                system("cls");
            }
        }
        if(sr=='2'){
                if(judge){
                    cout<<"请输入垃圾类别:其他垃圾(1),可回收垃圾(2),有害垃圾(3),厨余垃圾(4)。\n请输入:";
                    cin>>m;
                        if(m!=1&&m!=2&&m!=3&&m!=4){
                            while(m!=1&&m!=2&&m!=3&&m!=4){
                                cout<<"输入错误,请重新输入!\n Please type it again!\n请输入:";
                                cin>>m;
                            }
                        }
                    cout<<"请输入垃圾桶类别:其他垃圾(1),可回收垃圾(2),有害垃圾(3),厨余垃圾(4)。\n请输入:";
                    cin>>ljtbh;
                    function_fl(ljtbh,m);
                }else{
                    cout<<"垃圾桶未开启!";
                    sleep(1);
                    system("cls");
                }
            }
        if(sr=='3'){
                if(judge){
                    int snbh;
                    cout<<"请输入你要蓄能的垃圾桶:其他垃圾(1),可回收垃圾(2),有害垃圾(3),厨余垃圾(4)。\n请输入:";
                    cin>>snbh;
                    int nl=space[snbh]/20;
                    while(nl<=90){
                        system("cls");
                        function_mx();
                        cout<<"正在蓄能中…\n";
                        cout<<"已完成 ";
                           nl+=(function_sj())%10;
                                 cout<<nl<<"%";
                          sleep(1);
                       }
                      system("cls");
                     function_mx();
                    cout<<"正在蓄能中…\n";
                    cout<<"已完成 100%";
                    sleep(1);
                    system("cls");
                    function_mx();
                    cout<<"蓄能完成!\n";
                    sleep(1);
                    system("cls");
                    space[snbh]=2000;
                }else{
                            cout<<"垃圾桶未开启!";
                            sleep(1);
                            system("cls");
            }
        }
        if(sr=='1'){
            if(judge){
                cout<<"请输入你想查看的垃圾桶编号:其他垃圾(1),可回收垃圾(2),有害垃圾(3),厨余垃圾(4)。\n请输入:";
                int ckbh;
                cin>>ckbh;
                if(ckbh<5&&ckbh>0){
                    for(int j=0;j<sjbh[ckbh-1];j++){
                    cout<<cch[ckbh-1][0][j]<<'\\'<<cch[ckbh-1][1][j]<<'\\'<<cch[ckbh-1][2][j]<<' ';
                    if(cch[ckbh-1][3][j]==0)
                        cout<<"00:";
                    else if(cch[ckbh-1][3][j]/10)
                        cout<<cch[ckbh-1][3][j]<<":";
                    else
                        cout<<"0"<<cch[ckbh-1][3][j]<<":";
                    if(cch[ckbh-1][4][j]==0)
                        cout<<"00:";
                    else if(cch[ckbh-1][4][j]/10)
                        cout<<cch[ckbh-1][4][j]<<":";
                    else
                        cout<<"0"<<cch[ckbh-1][4][j]<<":";
                    if(cch[ckbh-1][5][j]==0)
                        cout<<"00";
                    else if(cch[ckbh-1][5][j]/10)
                        cout<<cch[ckbh-1][5][j]<<"\n";
                    else    
                        cout<<"0"<<cch[ckbh-1][5][j]<<"\n";
                    cout<<"丢入垃圾重量:"<<ccrl[ckbh-1][j]<<"\n\n";
                }
                    if(sjbh[ckbh-1]==0){
                        cout<<"暂无记录!";
                        sleep(1);
                        system("cls"); 
                }else{
                    char fh;
                    cout<<"点击f键返回。\n";
                    cin>>fh;
                    if(fh=='f'){
                        system("cls");
                        }
                    }
                }
            }else{
                cout<<"垃圾桶未开启!";
                sleep(1);
                system("cls");
            }
        }
        if(sr=='4'){
            if(judge){
                cout<<"正在消毒中…";
                for(int i=0;i<100;i++){
                                 cout<<"已完成:"<<i<<"%";
                                 system("cls");
                                 function_mx(); 
                    }
            }else{
                cout<<"垃圾桶未开启!";
                sleep(1);
                system("cls");
            }
        }
        if(sr=='7'){
            if(judge){
                judge=false;
                cout<<"已上锁!";
            }else{
                cout<<"垃圾桶未开启!";
                sleep(1);
                system("cls");
            }
        }
        if(sr=='6'){
            if(judge){
                        cout<<"请输入原密码:";
                        function_mm(password);
                        cout<<"请输入新密码:";
                        cin>>password;
                        function_mm(password);
                        cout<<"请再次输入新密码:";
                        function_mm(password);
            }else{
                cout<<"垃圾桶未开启!";
                sleep(1);
                system("cls");
            } 
        }
    }
    return 0;
} 

  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-03-24 07:15
    关注
    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供,如果还有疑问可以点击头像关注私信或评论
    如果答案让您满意,请采纳、关注,非常感谢!

    你提到的垃圾分类程序中,更改密码的功能有bug。从代码中可以看出,更改密码的逻辑在 sr=='6' 的分支中。具体来说,问题可能出在以下几个方面:

    1. 密码验证逻辑问题:在更改密码时,程序要求用户输入原密码,但并没有对原密码进行验证。即使原密码输入错误,程序仍然允许用户更改密码。

    2. 新密码输入逻辑问题:在输入新密码时,程序没有对新密码进行确认,可能会导致用户输入错误的新密码。

    3. 密码存储问题:密码是以明文形式存储的,这在实际应用中是不安全的。

    修复建议

    1. 验证原密码:在更改密码之前,应该先验证用户输入的原密码是否正确。

    2. 确认新密码:在输入新密码后,应该要求用户再次输入新密码进行确认,以确保用户输入的新密码是正确的。

    3. 密码加密存储:建议对密码进行加密存储,以提高安全性。

    修改后的代码

    if(sr=='6'){
        if(judge){
            string oldPassword, newPassword, confirmPassword;
            cout<<"请输入原密码:";
            function_mm(password);  // 验证原密码
            if(!judge){
                cout<<"原密码错误,无法更改密码!";
                sleep(1);
                system("cls");
                continue;
            }
            cout<<"请输入新密码:";
            cin>>newPassword;
            cout<<"请再次输入新密码:";
            cin>>confirmPassword;
            if(newPassword == confirmPassword){
                password = newPassword;  // 更新密码
                cout<<"密码更改成功!";
                sleep(1);
                system("cls");
            } else {
                cout<<"两次输入的密码不一致,密码更改失败!";
                sleep(1);
                system("cls");
            }
        } else {
            cout<<"垃圾桶未开启!";
            sleep(1);
            system("cls");
        }
    }
    

    解释

    1. 验证原密码:在更改密码之前,程序会先调用 function_mm(password) 来验证用户输入的原密码是否正确。如果原密码错误,程序会提示用户并返回主菜单。

    2. 确认新密码:在输入新密码后,程序会要求用户再次输入新密码进行确认。如果两次输入的密码不一致,程序会提示用户并返回主菜单。

    3. 密码更新:如果原密码验证通过且两次输入的新密码一致,程序会更新密码并提示用户密码更改成功。

    其他建议

    • 密码加密:建议使用加密算法(如MD5、SHA-256等)对密码进行加密存储,以提高安全性。
    • 错误处理:可以增加更多的错误处理逻辑,例如密码长度限制、密码复杂度要求等。

    通过这些修改,更改密码的功能应该会更加稳定和安全。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月23日