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

编程入门 行业动态 更新时间:2024-10-10 09:17:48

银行<a href=https://www.elefans.com/category/jswz/34/1769858.html style=管理系统遇到的BUG+结束总结"/>

银行管理系统遇到的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. 项目并没有写的非常完美,如果这个是工作,客户要求肯定没有完美达成































更多推荐

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

本文发布于:2024-03-23 23:04:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1743902.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:管理系统   结束   银行   BUG

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!