初学COM,征集方案:你会如何设计下面的组件和接口

初学COM,征集方案:你会怎么设计下面的组件和接口?
学了几天的COM,现在想把以前写的一个   学生信息管理(   控制台的)   改成COM的形式,只是想应用一下,谁知道思考了蛮久就是不知道如何下手,不知道怎样才能比较好的设计接口和组件,想来很是郁闷啊。。
        想来对大家来说应该很简单,想听听大家的意见,谢谢


以前的功能设计大致如下:

struct   address       /*家庭地址*/
{  
char   city[10];       /*城市*/
char   town[10];             /*县城*/
char   village[10];       /*乡镇*/
};

struct   telephone       /*联系方式*/
{
char   SJ[50];       /*手机*/
char   JD[30];       /*家庭电话*/
char   XD[30];       /*学校电话*/
};

struct   person /*个人信息*/
{    
char   name[20];                     /*名字*/  
char   sex[10]   ;                     /*性别*/  
char   MZ[16]; /*民族*/
char   GJ[17]; /*国籍*/    
char   XL[19]; /*学历*/
};

struct   score //成绩
{
char   num[20]; //学号
char   english[20];
char   chinese[20];
char   math[20];
char   physics[20];
};

typedef   struct   linknode //定义节点的类型
{
char   address[100]; //地址
char   birthday[100]; //出生日期
struct   score   sc; //成绩
struct   person   pe; //个人信息
struct   telephone   te; //联系方式
bool   flag;
struct   linknode*   next;
}nodetype;

class   List
{
nodetype*   head;

public:
List();
List::~List();

linknode*   creatlist(int); //创建链表
int   listlen(); //返回链表长度
nodetype*   findnode(int);//通过查找序号返回节点的指针
nodetype*   find(char   c[]); //通过查找姓名返回节点的指针
int   find2(char   c[]);//通过查找姓名返回节点的序号
nodetype*   insnode(int);//插入节点
void   delnode(int); //删除节点

nodetype*   load(); //初始化:从外部读入数据

void   readstr(FILE   *f,char   *string);//读行函数
bool   check(char   *a,   char   *b);//对比两个字符串是否相等
void   help();//显示帮助菜单

void   editperson(nodetype*); //编辑个人说明
void   editscore(nodetype*);//编辑学科成绩
void   edittelephone(nodetype*);//编辑联系方式

void   dispname(); //显示所有学生姓名
void   dispnode(nodetype*   p); //显示一个学生的所有信息
void   dispperson(nodetype*); //显示一个学生的个人说明
void   dispscore(nodetype*); //显示一个学生的学科成绩
void   disptelephone(nodetype*);//显示一个学生的联系方式

};

------解决方案--------------------
把以上你列出的所有函数改成COM标准的接口就可。
------解决方案--------------------
是的,你这些东西也不存在封装,直接做成DLL就行了
------解决方案--------------------
尽量不要传结构体,虽然大多数的程序目前都这样做.
字符串的传递尽量使用BSTR,如果你的程序不提供给VB等弱类型语言则例外.
------解决方案--------------------
应该从组件使用者的角度--来看组件接口。
这样只暴露对用户必要的接口,对其它方法则隐藏。
这样,有一个好处是:对用户简单明了。

感觉组件的关键在于接口的设计是否合理。
既做到强内聚,也要松耦合。
要从软件的宏观角度思考问题。

------解决方案--------------------
BSTR 是一个指向 UNICODE 字符串的指针,且 BSTR 向前的4个字节中,使用DWORD保存着这个字符串的字节长度( 没有含字符串的结束符)。