读书人

请评价下这个程序,该如何处理

发布时间: 2012-03-11 18:15:39 作者: rapoo

请评价下这个程序
请从效率,可复用性,可扩展性等评价下这个程序,谢谢!

先给出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源码剖析》也很好,可以知道高手写的代码是啥样的。
[解决办法]
问题还是挺多的,有大有小,我说一个吧。



拷贝构造函数和赋值操作写的有问题,你再仔细看下。事实上我觉得你根本就不需要这两个函数,考虑把它们设为私有的,并且不去实现。另外所有的对象都读写同一个全局文件也不是好的风格。

楼主多加练习,多看书。

读书人网 >C++

热点推荐