银行管理系统遇到的BUG+结束总结

2017年7月12日 10:10:56



     周一的时候写开户操作,当天下午发现一个段错误,然后调试了一天,发现自己代码逻辑没有错误,该分配的内存也都分配了,仍然出现“stack smashint dected”的错误。
     下面先贴出代码:
int Open::DataBase()
{
    int result = 0;
    char buf[100];

    int flag = 0;   //在数据库中存在的标志位
    My_Sql sql("Blank");
    vector<string> temp;

     //××××××××××××××××××××××××
    //这里要换成ID以后
    sprintf(buf,"select name = \"%s\" from user;",_name);
    //××××××××××××××××××××××××××××××

    sql.MySql_exec(buf);
    temp = sql.GetRowInformation();
    MyTools tool;
    flag = tool.DataHandle(temp);

    if(flag == 0)  //该处,判断内容有无,有待优化!
    {
        //可以注册
        sprintf(buf,"insert into user(id,name,passwd,action,money) values( \"%s\",\"%s\",\"%s\",\"%s\",\"%s\");",_id,_name,_passwd,OPEN,_money);
        sql.MySql_exec(buf);    //该处没判断

        sprintf(buf,"select idd from user where name = \"%s\";",_name);     //注册成功后获取自动生成的ID
        sql.MySql_exec(buf);
        temp = sql.GetRowInformation();
        strcpy(_idd,temp[0].c_str());
        printf("idd:%s\n",_idd);

        result = REGIST_SUCCESS;
    }
    else
    {
        result = HAS_ACCOUNT;
    }

    return result;
}

这段操作的功能是:开户操作的数据库处理,首先根据用户名,查找数据库中有无重复的姓名,没有则进行注册操作,后期会把用户名改为身份证号,避免重复。
                             开户成功后,会从数据库中获取自动生成的ID号码,返回给客户端,让客户端显示ID。
     有关数据库的操作都已经封装在类中,没有错误。
     用printf大法发现,程序执行到  return 前都正确,返回时候出错。
     我真是惊呆了。。。。返回个int也有错。。。

     最后我实在找不出错误,还是去百度了一下。。。

     后来发现是 mysql语句过长,没有检查 buf[100]是否够用,在我修改成buf[1024]之后就OK了。。。

     以下是百度出来的重要信息:
     Stack Smashing is actually a protection mechanism user by gcc to detect buffer overflow attacks.

     stack smashing是GCC的一种检测“缓存溢出”的保护机制,不一定会立马显示出段错误,当分配的内存不足时,会继续执行,但是在程序结束返回时才出现错误提示。


2017年7月12日 21:58:32


关于vector的操作

vector<string> t;
t.clear();

sting a = t[0];     //该步骤会出现内存溢出,不是空




2017年7月13日 20:14:51



C++项目写完,以下做一个总结。


1. 时间
    7月5号,也就是上周三,开始写这个项目。
    周三:复习QT,MySql,json的基本操作,对项目进行整体,构思
    周四:正式开始写项目,当天的完成情况已经git
    周五:同上
    周六、周日上课
    周一:同周四
    周二:休息,算是睡了一天
    周三:下午完成项目

    总的来说这个项目从无到有,花了5天的时间,项目基本上按照计划上的要求来完成的。
    这5天时间,基本上从早上来教室,就开始写,一直到晚上回去,有点想以前写聊天室的时候。

2. 总结
    累了那么多天写完项目,首先要夸自己一下。我感觉到自己明显的进步。
    寒假写聊天室,可以说前几天都在做无用功。自己写的框架,写着写着就被自己推翻了,
    功能一个一个之间联系的比较紧密,当多线程的时候互相影响非常严重,感觉自己写出来的
    东西,像是在夹缝中求生存,能活下来真的是万幸。

    这次的C++银行管理系统,首先从难度上来说,并没有聊天室大,或许是我变厉害了。
    其次,在做这个项目之前,我用C++把聊天室改好了,而且改了相当长的时间,每天
    的修改都做了git。C++的聊天室,代码写的很冗余,好多重复的部分,也有好多没必要的部分,
    其实我就像拿C++聊天室,练练手,对C++和设计模式多多了解,反正单例模式,我是很熟悉了。
    而且我注意到单利模式居然可以实现信息的共享,static关键字会对多线程造成非常致命的影响。
    或许这些只有自己花了N多小时之后才有感悟的东西,老师以前讲过,但自己写完项目之后,感触非常深。
    至少我以后写单利模式都会带把锁了。
    C++聊天室写好之后,非常能感觉到面向对象的好处。在写完之后,虽然写的很多,但自己回想,整个代码
    结构非常清晰,这一特点也延续到了现在的项目。
    这次的银行管理系统,难就难在对数据包的处理。通过对json的学习,我发现,没必要像以前一样传输结构体。
    因为这种写法的缺陷太明显了:
        1.浪费空间
        2.把所有的信息放在一个结构体里,不安全
        3.只能处理定常数据

        现在我是这么处理传输信息:
        4字节操作信息+下一个信息长度(4字节)+不定常信息+.....
        在服务器接收之后,对4字节进行处理,执行对应操作,再读取剩下的内容,每次读取到长度,就申请一段
        对应长度空间,然后再读取,以此往复

        这样做也有缺陷,就是字符串太长,造成缓冲区不够。

        服务器也可以以同样的方式发送信息给客户端,但是我懒了,没高兴继续写。。。。

    最后说说自己的不足:
        1. 对设计模式研究的不够,银行的项目我用了单例模式,抽象工厂+反射机制,但这远远不够
        2. 对面向对象的理解不够。在写项目时候,我发现自己的思维还是很像面向过程。
            往往在自己需要什么,然后再写什么,解决对应的问题。
        3. 对C++的理解不够。很多时候不知道变量该用private放在class中,还是就定义局部变量,有时候很难抉择。
        4. 项目并没有写的非常完美,如果这个是工作,客户要求肯定没有完美达成
































  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在开发后台管理系统时,常见bug 有以下几种: 1. 数据显示错误:后台管理系统通常需要展示大量数据,可能会出现数据显示不正确的问题,比如数据缺失、数据重复、数据格式错误等。你可以检查数据源和数据处理逻辑,确保数据正确性。 2. 权限问题:后台管理系统一般会涉及到权限管理,不同用户可能有不同的权限。如果用户无法执行某些操作或者能够访问未授权的页面,可能是权限配置有问题。可以检查权限控制代码和数据库中的权限设置。 3. 表单验证问题:后台管理系统中常常包含表单提交操作,如果没有进行合适的表单验证,可能会导致数据错误或者安全问题。确保表单验证逻辑完善,并对用户输入进行合理的检查和过滤。 4. 数据库操作错误:后台管理系统通常需要对数据库进行增删改查操作,如果数据库操作有误,可能会导致数据错误或者无法正常操作。检查数据库操作的语句和逻辑,确保正确性和安全性。 5. 性能问题:后台管理系统可能面对大量的数据和并发请求,如果性能不佳,可能会导致页面加载缓慢或者响应延迟。使用性能分析工具,优化数据库查询、接口调用和前端渲染等环节。 当遇到后台管理系统bug 时,可以尝试以下解决方法: 1. 仔细检查代码,特别是涉及数据处理、权限控制和表单验证的部分。 2. 使用调试工具和日志记录,查看代码执行过程中的变量和错误信息。 3. 检查数据库操作,确保正确性和安全性。 4. 分析性能问题,优化关键路径和瓶颈点。 5. 如果遇到复杂问题,可以逐步缩小范围,创建最小可复现示例,以便更好地定位问题所在。 6. 寻求同事或开发者社区的帮助,分享问题并提供相关代码和错误信息。 希望这些信息对你有所帮助!如果你有更具体的问题或者需要进一步的帮助,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值