学生档案管理系统设计分析

来源:互联网 发布:qq游戏宝宝淘宝网 编辑:程序博客网 时间:2024/04/28 22:44

大致分为以下几个摸块:

系统一运行,显示菜单的同时,
并打开文件,若文件存在(打开文件成功),则输入模块无效(文件指针pfile!= NULL),并立即关闭文件;
                          若文件不存在(打开文件不成功),则输入模块有效(pfile = NULL)。

**********************************************************************************************
【信息输入模块(int input( ) ): 】
 (返回1—成功;返回0—失败)
 主要让用户输入学生的档案信息(姓名,年龄,班级,性别,家庭住址,电话,学号);
若pfile = NULL,则做以下工作:
 1,让用户输入学生总数;
 2,系统根据学生总数创建一个结构数组;
 3,依次输入各数据域,并读入结构数组;
 4,建立文件,并写文件;
 5,关闭文件;
若pfile = NULL,则不执行此模块,并显示出错信息,按任意键返回菜单;

【信息输出模块(int output( ) ): 】
 (返回1—成功;返回0—失败)
 主要让用户输出已做改动的档案信息;
若pfile != NULL,则做以下工作:
 利用数组存储数据;
 利用表头的形式显示信息;
若pfile = NULL , 则不执行此模块,并显示出错信息,按任意键返回菜单;

***********************************************************************************************
【信息修改模块(int modify(int number[]) ): 】
 (返回1—成功;返回0—失败)(number为学号)
 主要让用户修改学生的档案信息;(&M)
若pfile != NULL,则做以下工作:
 1,输入用户想修改的学生记录的学生学号;
 2,查找此学生记录,若存在就继续;如不存在则显示出错信息;
 3,显示此学生信息;
 4,提示用户修改信息(每字段提示一下);
 5,修改完毕,返回菜单。
若pfile = NULL , 则不执行此模块,并显示出错信息,按任意贱返回菜单;
 
【信息添加模块(int add( ) ): 】
 (返回1—成功;返回0—失败)
 主要让用户增加不在数据库中的某个学生信息;(&A)
若pfile != NULL,则做以下工作:
 1,显示输入信息界面;
 2,以学号为关键字查找此学生信息,如存在,则显示出错信息;否则继续。
 3,若输入完毕,则退出此模块并返回至菜单界面。
若pfile = NULL , 则不执行此模块,并显示出错信息,按任意键返回菜单;

【信息删除模块(int delete(int number[]) ): 】
 (返回1—成功;返回0—失败)(number为学号)
 主要让用户删除已不在校的学生信息;(&D)
若pfile != NULL,则做以下工作:
 1,要求用户输入想删除的学生记录的学号;
 2,以学号为关键字查找此记录,若存在则显示信息并释放节点;不存在,则显示出错信息;
 3,退出模块并返回至菜单界面。
若pfile = NULL , 则不执行此模块,并显示出错信息,按任意键返回菜单;

【信息查找模块(int find(int number[]) ): 】
 (返回1—成功;返回0—失败)(number为学号)
 主要让用户查找某个特定的学生信息;(&F)
 本模块在删除和修改中要用到,所以宜设为外部函数;
若pfile != NULL,则做以下工作:
 1,要求用户输入要查找的学生学号;
 2,以学号为关键字查找信息;
 3,如存在,则显示此信息并返回至菜单界面;若不存在则显示出错信息。
若pfile = NULL , 则不执行此模块,并显示出错信息,按任意键返回菜单;

**********************************************************************************************
【信息存盘模块(int save(char string[]) ): 】
 (返回1—成功;返回0—失败)(string为文件名)
 主要让用户保存档案信息,以便下次读取;

【信息读盘模块(int read(char string[]) ): 】
 (返回1—成功;返回0—失败)(string为文件名)
 主要让用户读取已保存的档案信息;
**********************************************************************************************

【数据存储结构:】
    对于单个学生采取一个结构:
    struct STUDENT
    {
 char name[20];
 int number[8];
 char sex; //f&m
 int age;
 int class;
 int phcde[7];
 char address[30];
    };
   
    对于全班的所有同学(最多30人)采取链式存储结构。
 为了采取这种存储结构,在学生的结构中要再加一个next指针指向节点。

    为了节省存储空间,采取动态申请的方法( malloc() )。

    除此之外,还有各种其他的数据:
 循环变量: register int i,j....
       
【预计难点:】
 1,   文件的存储是个关键。
     当以"r"为打开方式时,只读;若文件不存在,则返回空指针。
     当以"w"为打开方式时,只写;若文件不存在,则生成文件。
     当以"a"为打开方式时,追加;此时要求文件一定存在,若不存在,则失败。
 r+,w+,a+类似;rb,wb,ab也相似,只不过是以二进制方式!
    结合以上,可以通过返回指针是否为空来判断文件是否打开成功!

【文件的存取<read,write>基本算法:】
void Data_Save(struct record *p)  /*记录文件的存取*/
{
      int j;
      fp = fopen( "tele_rec.txt " , "w" ); /*以可写方式打开记录文件*/
      while( p != NULL ) /*若未到队尾,徨将记录存储到文件中*/
      {
            fwrite(p, sizeof(struct record), 1, fp);
            p = p->next;
      }
      fclose( fp ); /*关闭指定的文件*/
}

struct event * Data_Load() /*从记录文件中读取记录*/
{
      long k;
      struct record *p, *q;11
      p = event_head.next;
      fp = fopen("tele_rec.txt", "r+t"); /*以读方式打开记录文件*/
      if ( fp != NULL )
      {
            while( !feof(fp)) /*依次读取记录并执行入队操作*/
            {
                  fread(q, sizeof( struct record ), 1, fp);
                  p->next = q; /*这里p为尾指针,q为指向新节点的指针*/
                  p = q;
            }
            p->next = NULL;
            event_end = p;
      }
      else
      {
            fp = fopen("tele_rec.txt","w"); /*若文件不存在,创建指定文件名的新文件*/
            event_head.next = NULL;
            event_end = event_head.next;
      }
}
  其实,文件操作有很多函数,除fopen,fclose外,还有fwrite,fread,fprintf,fscanf,
        rewend,ftell,fseek,ferror,fputc,fgetc等;

2,    其次,输入的界面也是个问题。
 如果用表头,则要注意回车和制表符的控制。
 如果用一行行的提示,就显得有点老套。
    结合以上,还是采取表头的输入比较好点。
****从这个问题中也就要求在今后的的实践中多注意UI的设计,尽量设计出一个比较通用的界面。

3,    删除或添加记录时,移动记录也是个关键:
 由于数据是以结构数组存储的,所以每变动一条记录,就需移动之后的所有记录,时间是个问题!

5,进入系统之前下载(读取)文件;退出系统之前保存文件。

6,菜单要显示,特别是功能键要加上大小写的处理。

7,要注意函数的设计,每个函数功能要单一,函数最好被控制在50行之内!(学以致用嘛!^_^)

【制作目的:】
1,弄清楚函数返回值以及参数传递的问题。
2,指针是另一个方面!
3,弄懂读盘和存盘的基本形式(即文件的基本操作)
4,熟悉各种常用函数的运用。

原创粉丝点击