由一份漏洞百出的代码所引出来的:

由一份漏洞百出的代码所引出来的:

switch(choosen)

{
case 1:
//增加货物
system("cls");
storage1.Input();
system("pause");
break;
case 2:
//删除货物
system("cls");
storage1.Delete();
system("pause");
break;
case 3:

//查看货物信息
system("cls");
storage1.print();
system("pause");

break;
case 4:
system("cls");
//修改货物信息
storage1.modify();
//storage1.search();
system("pause");
break;
case 5:
//查找货物
system("cls");
storage1.search();
system("pause");
break;
case 6:
system("cls");
//按入库时间排序
storage1.PaiXu(paixu);
storage1.look(paixu);
system("pause");
break;
//case 7:
// system("cls");
// //按到期时间排序
// break;
case 7:
system("cls");
quit();
flag=0;
break;

}

**** 13:19:04
我觉得你这个程序有可以改进的地方吗?

### 13:19:31
少个default?

****  13:19:49
嗯。switch 没default是很糟糕的事情
****  13:19:51
还有呢?
****  13:20:10
为什么需要default?

### 13:20:24
清屏可以放在前面
### 13:20:39
程序的健壮性
### 13:20:52
防止误操作
****  13:22:29
那不是误操作。确切来说是你开放给他的

### 13:22:48

****  13:23:28
用户不会仔细地去看你的说明书,永远也不会有这么乖的用户

### 13:23:47
恩,我就是一个
### 13:23:48
呵呵
****  13:25:20
清屏那个也说对了,既然都要清屏,提取出来代码更精简
****  13:27:49
还有呢?

### 13:28:21
接口不好
### 13:28:37
不好在哪里?
### 13:29:05
一般都会给用户提供接口,让用户传参的。
### 13:29:40
直观明了么?还是移植性?
### 13:30:04
数据的安全性?
****  13:30:30
这段程序里面,你一直在用过程
****  13:30:33
没有用函数

### 13:30:36
我也不大清楚。。。我一般都是无参的
### 13:31:02
??不大懂。。
****  13:31:13
假如我说:###,你这个界面做的不好,用户说要改成这样。
****  13:31:37
你这种过程写法,会把你累垮的。

### 13:32:04
怎么会?功能就那几个?
### 13:32:40
额。。我好像知道了。。
****  13:32:41
因为你这个程序小,所以你觉得没什么

### 13:33:31
比如说洗脸刷牙。必须分开,因为不是每个人都要洗脸刷牙的。。有刷牙洗脸,只刷牙或只洗脸的。。。
### 13:33:38
对么?
****  13:34:20
不完全对,io输入输出是很容易出错的,界面是变动最大地方。你把它和你的数据处理类捆绑在一起,这是很不合理的
****  13:34:57
假如我说:###,你那个storyage,我这个函数也要用到,你给发一个

### 13:35:21
就是要检测数据的是否非法?
****  13:35:33
结果,里面一大堆cout,放到我这边就一点都不好用


****  13:36:08
因为我根本不需要cout,我的数据是从网络获取的

###13:36:25

### 13:36:48
有些还是从文件读取的。。。
### 13:37:05
那我这种写法就固定死了方法。。。
****  13:37:25
嗯。你这种写法,只能在你这个程序用。
****  13:37:47
这种代码没有一点重用性

###13:38:08
恩,我原来还不知道为什么都要传参。。现在知道了。。。
### 13:38:35
我基本上就没考虑到io的方式。。
****  13:38:51
我们不能成为码农,做过的东西还要做,可以直接拿来用不是有更多的时间考虑其它事情吗?

###s 13:39:52

**** 13:40:44
还有呢?

### 13:41:56
storage1.PaiXu(paixu);
storage1.look(paixu);
这不该放一块?
### 13:44:42
还有就不知道了。。。注释不规范?
****  13:44:55
你这个程序有没有给别人看过?

### 13:45:27
就给老师演示了一遍。。代码没人看吧。。‘
****  13:45:30
他们说了些什么?

### 13:46:14
有些函数可以直接用的。。。类可以直接赋值。。没必要这么麻烦
****  13:46:25
我先当第一个吧,为啥你要说明那个txt文档放在e:盘?
****  13:46:44
假如我不小心把它删了呢?
**** 13:50:00
我辛辛苦苦保存的东西,结果我发现找不到了。我肯定打电话给程序员###:喂,你这个软件太差劲了,我保存的东西不见了。

### 13:50:37
那要放哪?
****  13:50:55
一般放在程序运行的目录下

###s 13:51:28
但是又有人说放在那,一旦卸载了。。什么东西都不见了。。
**** 13:52:36
软件卸载的时候不是有提示吗?要保留xxx数据吗?

###13:53:21
这倒没注意。。我是上回装matlab的时候,把东西存到了目录下,人家告诉我的
****  13:53:59
是的,装QQ也这么提示过的。推荐数据放在我的文档中

### 13:54:23

### 13:56:08
了解~
****  13:56:30
while(flag)
{
system("cls");
table();
cout<<"请输入你要操作的序号:";
cin>>choosen;
system("cls");
switch(choosen)
{
case 1:
//增加货物
storage1.Input();
system("pause");
break;
case 2:
//删除货物
storage1.Delete();
system("pause");
break;
case 3:

//查看货物信息
storage1.print();
system("pause");
break;
case 4:
//修改货物信息
storage1.modify();
//storage1.search();
system("pause");

break;
case 5:
//查找货物
storage1.search();
system("pause");
break;
case 6:
//按入库时间排序
storage1.PaiXu(paixu);
storage1.look(paixu);
system("pause");
break;
//case 7:
// system("cls");
// //按到期时间排序
// break;
case 7:
quit();
flag=0;
break;
}
}
****  13:56:42
还可以改进吗?

### 13:58:20
要检测choose是不是在1~7之间吗?
### 13:58:52
我还真看不出来了。。
****  13:58:56
嗯,但不是必须得,毕竟有default了

### 13:59:58
真不知道了
****  14:00:11
Input 改成AddGoods()不是更好吗?

### 14:00:56
(⊙o⊙)哦
****  14:01:31
见名思义

### 14:01:44

### 14:04:51
现在看看。。问题还真多。。
****  14:05:27
class Date
{
private:
int year;
int month;
int day;
public:
int getyear()
{
return year;
}
void setyear(int year1)
{

        year=year1;

}
void setmonth(int month1)
{
        month=month1;
}
void setday(int day1)
{
        day=day1;
}
void setdate(Date date )
{
        year=date.getyear();
month=date.getmonth();
day=date.getday();
}
int getmonth()
{
return month;
}
int getday()
{
return day;
}
Date getdate()
{
return *this;
}
bool Sort(Date Product_date)//本身大的返回0.
{
      if(this->getyear()>Product_date.getyear())
        return 1;
       else if(this->getyear()<Product_date.getyear())
            return 0;
      else
         {
              if(this->getmonth()>Product_date.getmonth())
                 return 1;
               else if(this->getmonth()<Product_date.getmonth())
                 return 0;
               else
                   {
                           if(this->getday()>Product_date.getday())
                                  return 1;
                            else if(this->getday()<Product_date.getday())
                                  return 0;

                      }
            }
         }
};


****  14:06:03
假如我要弄个日期
****  14:06:34
Data data; data.SetYear() .SetMonth, SetDay
****  14:06:39
不是太罗嗦了吗?

### 14:06:58
还要加一个一起的。。
### 14:07:17
void setdate(Date date )
{
        year=date.getyear();
       month=date.getmonth();
      day=date.getday();
}
****  14:07:22
c++有个构造函数的。
****  14:07:35
我只需这样就可以了

### 14:07:40
恩,但没用上
****  14:07:59
Data data(2011, 8, 1);
LoTus 14:08:02
v Date(Date date )
{
        year=date.getyear();
       month=date.getmonth();
       day=date.getday();
}
### 14:08:12

**** 14:08:27
你c++不合格。好好再学学

### 14:08:29
接口又错了。。。
### 14:08:43
哦~了解
****  14:08:49
接口没错,但太罗嗦了。而且效率不高

### 14:09:31
恩,我就说我代码怎么这么长。。。。
****  14:10:24
void setdate(const Date &date )
{
        year = date.year;
month = date.month;
day = date.day;
}
****  14:10:41
QQ发得格式乱了,
****  14:11:08
###同学,你c++要重头学过。

### 14:11:47
QQ发得格式乱了。。。什么意思?
### 14:12:13
哦~
****  14:12:20
本来我的格式是漂亮的, 发到你那里就变乱了。
****  14:13:53
别迷惘了。你这c++水平,直接被面试官鄙视了。

### 14:14:42
受师父的教了,小的马上回去补课去。
### 14:15:35
师父,有漂亮的代码么?我想知道什么样的算是漂亮的代码,我都没什么概念,老按自己想的左
****  14:16:17
我有跟你说过啊。那个《高质量c/c++》编程规范

#### 14:17:21
额。。有么。。不记得了。。
****  14:17:21
case 1:
**** 14:17:44
这个被称为magic number
****  14:18:14
为啥这么说,因为过了个把月,连编程人员都不知道它是什么意思
****  14:18:32
那你得加注释。没错,但还有更好的办法

### 14:18:39
哦,还是那个。见名思意
### 14:18:56
宏定义?
****  14:18:47
enum学过吗?
****  14:18:49

### 14:18:58
学过 
### 14:19:03
枚举。。 
****  14:19:10
enum跟宏又有区别 

### 14:19:11
里面自动编号 
### 14:19:13
恩 
### 14:19:16
我知道 
### 14:19:31
宏定义只是单纯的替换 
###14:19:37
枚举是个数组 
****  14:19:39
除了自动编号,最重要可以编译的时候检查 

###14:20:06
把default的功能也省了?? 

****  14:22:11
啊 
****  14:22:19

default还是要的。 

............


至此以后,沉淀,沉淀,再沉淀。。。。不该以为学懂了C++语法就懂得了C++。。。死命抱着C++ primer plus 狂啃吧。。。不知道对大家有没有启示,反正我是被打击了。。。少年轻狂万万不可啊。。。


阅读更多
个人分类: 学习之点滴
上一篇大学随想1
下一篇讲讲Mysql中的校对规则究竟是怎么一回事
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭