上嵌培训笔记:RHEL5环境下C开发的学生管理系统

  学生管理系统分为前端和后端,前端是供用户使用,提供人机交互界面,后端对用户是直接不可见的,服务器和数据库。本学生管理系统也只是简单的使用文件作为数据的存储方式,用户登录时将文件中的信息加载到双向链表中,然后对链表进行增删改查的操作。

  本文讨论的重点,在于用户界面的生成。和很多以界面为重点的项目开发类似,比如本人以前做过的基于LCD12864液晶屏的ATM机模拟机系统、基于TFT触摸屏的小车控制系统,这些都系统都很依赖于用户根据交互界面进行相应的操作,完成人机交互的过程。这就是涉及到界面的设计与生成的问题。

  之前做的那两个项目都是类似如下的代码方式实现界面的显示与接受用户的操作:

  int choose;
  do 
  {
  system("clear");   // 清屏
  printf("\n欢迎使用学生管理系统\n\n");
  printf("1.管理员登录\n");
  printf("2.教师登录\n");
  printf("3.学生登录\n");
  printf("0.退出系统\n\n\n");
  printf("请选择登录方式:");
  
  choose = -1;
  scanf("%d",&choose);
  switch(choose)
  {
   case 1:
    admlogin_menu();//管理员登录界面
    break;
   case 2:
    tchlogin_menu();//教师登录界面
    break;
   case 3:
    stulogin_menu();//学生登录界面
    break;
  }
 }while(choose!=0);

  每一个界面都是printf绘制,然后接受用户输入,switch,do  while,case里面每个函数也是这样的结构,有多少个菜单就得有多少个这样的结构,代码重复度很高,利用率很低,而且菜单的跳转次序不清晰,特别是返回上一级菜单。此外,如果菜单要修改时,或者菜单要重构,亦或要进行别的菜单系统的开发时,需要修改大量的代码,移植性很差。

  下面则是我这次写的学生管理系统的另外一种菜单界面生成的方法:

//定义一种结构体类型MENU——菜单结构体,包括父菜单、子菜单、子菜单个数、
//本菜单名称以及本菜单的功能函数
typedef struct listmenu
{
 struct listmenu *pFather;        //指向父菜单
 struct listmenu *pFstSon;        //指向子菜单 
 Uint CountSonMenus;           //子菜单个数
 Char *MenuName;              //本菜单名称
 int (*Function)(void);             //本菜单的功能
} MENU;

 

//主菜单(备注:各登录身份的子菜单存放在各自的.c文件中)
MENU const MainMenu[] = 
{
 {(MENU *) &RootMenu, (MENU *) &StuLogMenu, 3,"1.学生登录", NULL},
 {(MENU *) &RootMenu, (MENU *) &TchMenu, 6,"2.教师登录", TchLogByName},
 {(MENU *) &RootMenu, (MENU *) &AdminMenu, 4, "3.管理员登录", AdminLog},
 {(MENU *) &RootMenu, (MENU *) &MainMenu[3], 0, "4.帮助", Help},
 {(MENU *) &RootMenu, (MENU *) &MainMenu[4], 0,"0.退出", NULL},   
};

  菜单本身就类似于双向链表,在菜单结构体中我们包含父菜单的指针,子菜单指针,本菜单的个数,本菜单名以及本菜单所要完成的功能。这样的话,所有菜单都可以类似上面给出的形式定义好,在主函数中使用一个Print函数就可以完成所有菜单的切换显示,因为每个菜单数组都携带了所有显示需要的信息,当用户进行了选择操作后,直接执行菜单指针的跳转,即可完成菜单的切换显示,并且直接执行菜单函数,完成用户所需的功能。

  上述这种方式程序思路非常清晰,菜单构建很容易,而且移植性也很高。这几天学完C++,然后发现我这个菜单构建的方法和C++中的类极其类似,类中含有类成员和类函数,MENU这个结构体中也是有菜单这个对象的成员,和对菜单的操作函数,恍然大悟,原来我已经在这里用到了面向对象的编程思想!

  这里也要感谢我的好朋友谢贤斌同学,我的这个思路也是受到了他的一个TFT触摸屏的程序的启发!共勉呵!

 

 

 

posted on 2013-03-23 12:00  Einstein2012  阅读(184)  评论(0)    收藏  举报