请评价下这个程序
请从效率,可复用性,可扩展性等评价下这个程序,谢谢!
先给出main.cpp
/*
文件名称 : main.cpp
简介 : 科技学院成绩管理系统
作者 : 笨熊
版本 : v3.1
*/
#include "stdafx.h "
#include <cstdlib>
#include <iostream>
#include <cstring>
#include "class\StuCol.h "
#include "stu.h "
using std::cin;
using std::cout;
using std::endl;
#define CLS system( "cls.exe ")
//选择标志
enum Flag
{
Display=1,Input=2,DelFile=3,Find=4,Other=0
};
//函数声明
void show();//用法展示
void DisplayStu(const STU &s);//资料显示
Flag SelectFlag(int select);//选择标志转换
/////////////////////////////////////////////////////////////////////////////
int main()
{
//初始化
int select=0;
StuCol m_col;
do
{
CLS;//清屏
//用法展示
show();
cin > > select;
cout < < endl;
switch (SelectFlag(select))
{
//列出资料
case Display:
{
CLS;
m_col.DisplayAll();
cout < < endl;
cout < < "共 " < < m_col.GetCount() < < "人 " < < endl;
system( "pause.exe ");
break;
}
//输入资料
case Input:
{
CLS;
int num=0;
cout < < "输入要加入的个数: " < < endl;
cin > > num;
const int STU_NUM=num;
for (int i=0; i <STU_NUM; ++i)
{
STU stu={0};
CLS;
cout < < "====================================================== " < < endl;
cout < < "第 " < < i+1 < < "位 " < < endl;
cout < < "学号: "; cin > > stu.id;
cout < < "姓名: "; cin > > stu.name;
cout < < "计算机基础: "; cin > > stu.base;
cout < < "高数: "; cin > > stu.math;
cout < < "英语: "; cin > > stu.english;
cout < < "C语言: "; cin > > stu.c_pro;
if (!m_col.SetStu(stu, STU_NUM))//输入资料
{
cout < < "文件输入错误! " < < endl;
}
}
system( "pause.exe ");
break;
}
//删除文件
case DelFile:
{
CLS;
if (!m_col.DelFile())
{
cout < < "文件删除失败! " < < endl;
}
else
{
cout < < "删除成功! " < < endl;
}
system( "pause.exe ");
break;
}
//查找资料
case Find:
{
CLS;
STU s={0};
int id=0;
cout < < "输入学号: " < < endl;
cin > > id;
if (!m_col.Find(s, id))
{
cout < < "未找到 " < < endl;
}
else
{
DisplayStu(s);
}
system( "pause.exe ");
break;
}
default:
break;
}//end of switch()
}while(SelectFlag(select) != Other);//end of while()
return 0;
}
//用法输出
void show()
{
const string shower[]={
"====================================\n ",
"学生成绩管理系统 v3.0 (标准C++版)\n ",
"====================================\n ",
"1.列出资料.\n ",
"2.输入资料.\n ",
"3.删除数据文件\n ",
"4.查找资料.\n ",
"0.退出系统.\n ",
"\n\n请输入数字以选择操作:> ",
};
const int length= sizeof(shower)/sizeof(shower[0]);
cout < < endl;
for (int i=0; i <length; i++)
{
cout < < shower[i];
}
}
void DisplayStu(const STU &s)
{
cout < < "============================= " < < endl;
cout < < "学号: " < < s.id < < endl;
cout < < "姓名: " < < s.name < < endl;
cout < < "计算机基础: " < < s.base < < endl;
cout < < "C语言: " < < s.c_pro < < endl;
cout < < "高数: " < < s.math < < endl;
cout < < "英语: " < < s.english < < endl;
}
Flag SelectFlag(int select)
{
switch (select)
{
case 1:
{
return Display;
break;
}
case 2:
{
return Input;
break;
}
case 3:
{
return DelFile;
break;
}
case 4:
{
return Find;
}
default:
{
return Other;
}
}
return Other;
}
//stu.h
#ifndef STU_H
#define STU_H
#include <string>
using std::string;
struct STU
{
unsigned int id;//学号
string name;//姓名
//成绩
double base;
double math;
double c_pro;
double english;
};
#endif
[解决办法]
说实话,不怎么样。
你应该看看《代码大全》、《重构》2书。
《STL源码剖析》也很好,可以知道高手写的代码是啥样的。
[解决办法]
问题还是挺多的,有大有小,我说一个吧。
拷贝构造函数和赋值操作写的有问题,你再仔细看下。事实上我觉得你根本就不需要这两个函数,考虑把它们设为私有的,并且不去实现。另外所有的对象都读写同一个全局文件也不是好的风格。
楼主多加练习,多看书。