软件工程综合实践专题——个人博客作业1
这次作业老师要求我们读一段别人写的小程序,并写写自己的感悟。
emmmmmmmmmmmm
首先找到一段这样的代码就十分不容易...毕竟网上许多代码都是伪代码Orz
感谢室友提供的去年小学期大作业
首先,这段代码给我的第一印象就是:这好说歹说也算是个管理系统,居然都写在一个cpp文件里......强迫症表示有些不爽
其次,这段代码一看就知道,典型的VC6.0的风格!!!这里先放一小段出来...
#include<iostream> #include<fstream> #include<string.h> using namespace std; struct Ticket { char add[20]; int num; char time[20]; }a[10]={"上海到广州",1,"7月9日8:00","上海到北京",2,"7月9日9:00","上海到深圳",3,"7月9日10:00","上海到山西",4,"7月9日11:00","上海到山东",5,"7月9日12:00","上海到广西",6,"7月9日13:00","上海到重庆",7,"7月9日14:00","上海到四川",8,"7月9日15:00","上海到成都",9,"7月9日16:00","上海到天津",10,"7月9日17:00",}; struct user { int account,password; }b[5]={1759220,123,1759221,123,1759222,123,1759223,123,1759224,123}; class menu{ public: void print_menu() { system("cls"); putchar('\n'); cout<<" 火车票售票系统 \n"; cout<<"**************************\n"; cout<<"1.查询车票\n"; cout<<"2.购买车票\n"; cout<<"3.退订车票\n"; cout<<"4.退出\n"; cout<<"**************************\n"; cout<<"\n请选择:"; } };
我之所以这么痛恨VC6.0,是因为这个IDE不会自动首行缩进!!因为根据我个人的编程习惯,每进入一个循环(或者类型循环的部分,反正就是要打括号的),我都会再原先的基础上首行缩进2个字符
因为,在有首行缩进的情况下,更容易检查出是否有存在括号漏打导致的编译错误的问题,同时也避免你的IDE被漏了“}”的代码所误导!!(因为之前有人来找我帮忙找程序编译错误的时候,曾经就有因为一个“}”漏打的情况,让IDE在编译的时候出现问题。重点是,IDE提示的时候,并没有像以往一样提示“miss ‘}’ ”这类的,而是以其他方式报错,并且提示的可能错误行也不在那一行。于是那个“}”我们找了半个多小时,直到从头到尾把程序全部读一遍之后才找到)
可想而知,如果是在一个大型项目里面,从头到尾把所有代码检查一遍是根本不可行的,费时又费力。所以,需要在一开始编写的时候就彻底杜绝这个问题。或者,括号成对打也行。(其实,括号成对打并不是我在大学里学到的,而是高中的时候玩机器人的时候学到的。虽然当时的编程还都是模块化十分小儿科的,但是在里面学到的许多方法至今都十分具有实用价值)
好了 废话不多说 我们来看一看这段代码吧
首先,他的这段代码写的是一个订票系统,是我们上一次小学期的大作业。首先他这个代码是有错误的,在后面涉及文件的部分存在一点小问题,比如无法打开文件等。(因为当时是要求要使用文件保存数据的)总的来说,这个软件的功能就是基本的增删改查,以及加了一小部分简单的UI设计以及将数据保存在本地的文件中。我认为,对于这样一个系统来说,换行、首行缩进什么的就足以让我这样的强迫症抓狂了。这么长的代码,我觉得如果可以分成模块,写在头文件里可能会更加清晰易读,并且也便于后期修改。
下面就放一部分我自己写的出来吧(这是个头文件) 格式有哪里不规范的地方还请老师帮忙指出来(emmmmmmm 我承认我一直都没有写注释的习惯,我知道这是一个致命的错误,我会改的...)
#include <iostream> #include "order.h" #include <fstream> #include <stdlib.h> using namespace std; int search(Order a[],int num,int range) { int i; for (i = 0; i < range; i++) { if (a[i].num == num) { return i; } } return 20;//20为超过范围的数,用于判断是否找到相同项 } void orderDelete(Order a[], int i, int count) { for (i++; i < count; i++) { a[i - 1] = a[i]; } } int fileSave(Order a,int num) { int i; ofstream fout("f1.dat", ios::app); if (!fout) { cout << "Cannot open file"; return 1; } fout << a.num; for (i = 0; i < 8; i++) { fout << a.getDishNum(i); } fout.close(); return 0; } void fileSearch(int num) { ifstream fin("f1.dat", ios::in); if (!fin) { cout << "file cannot be opened" << endl; } int i; char a; char b[8]; fin >> a; cout << "a=" << a << endl; while ((( a - '0' ) != num)&&!fin.eof()) { fin.seekg(8*sizeof(char), ios::cur); fin >> a; cout << "a=" << a << endl; } if (fin.eof()) { cout << "404" << endl; } else { for (i = 0; i < 8; i++) { fin >> b[i]; } cout << a << endl; for (i = 0; i < 8; i++) { cout << b[i] << endl; } Order od; od.num = num; od.setOrder(b); od.printOrder(); fin.close(); } }