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

大致分为以下几个摸块:

系统一运行,显示菜单的同时,
并打开文件,若文件存在(打开文件成功),则输入模块无效(文件指针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,熟悉各种常用函数的运用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个学期专业开了一门管理信息系统的课程,虽然说老师讲的是泛泛的知识,但是讲得还有点意思,毕竟自己在学习这方面的知识,老师讲知识点时,自己联系所学有些特殊收获,可是大部分未来同学不从事IT行业,专业涉及面还是太广了,对于这门课程的实验课,开发一个管理系统出来,绝对是需要“百度”的力量。 当初自己有些为了完成任务的目的,上网百度了一个”思路“,百度了一个需要用到的管理信息系统思想的案例,简化了一些过程,写了一个非常简单的模拟学生档案管理系统,大部分知识就是数据库知识点,主要采用C/S开发模式,所以现在正在学习系统化B/S开发模式的知识。 首先是进行系统功能分析,以及系统流程分析: 紧接着就是根据分析结果设计数据库: 数据库设计主要分成大的两方面,一个是学生用户登录,另一个是管理员用户登录。 设计好数据库之后,就是代码根据系统分析结果,进行逐步实现: 第一步:根据输入信息及选择类别判断用户名和密码是否匹配 如果是学生用户登录,那么只能进行查询个人信息和档案信息 如果是管理员用户登录,那么不仅可以查看学生信息,还可以修改删除、增加学生信息 实际效果图展示: 登录界面: 学生用户查看信息: 管理员用户修改用户信息: 管理信息系统这门课程虽然知识比较理论,但是一些系统化的分析还是非常有帮助,对于我们分析一个系统如何实现功能,一步步分析设计数据库,代码实现,最后优化等等。 该系统尽管比较简单,但需要我们注意分析设计的思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值