Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67225
  • 博文数量: 18
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 195
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-23 10:22
文章分类
文章存档

2013年(3)

2011年(1)

2007年(3)

2006年(11)

我的朋友

分类: C/C++

2007-02-19 15:44:54

学生管理系统的说明以及心得

作者:陆驰

对数据结构的说明:

typedef struct  Lnode {

     struct student onestud; //学生的情况

     struct Lnode *next;     //用于读入顺序连接的学生

     struct Lnode *hnext;    //用于姓名hash后的学生连接

     struct Lnode *cnext;    //用于同一个班级学生的连接

} node;

 

typedef struct classnode {  //班级的节点

     struct node *cnext;    //连接第一个学生用的

     char class[6];           //存放学生的班级名字

} cnode;

 

       下面上我对我的程序框架的一个简单描述:

       msm.c 主函数,主要的功能是新建一个学校或者是加载一个以有的学校,还有就是打印主菜单!

              intmsm( ) 初始化一些东西!

        load( )   把文件上的内容读入到内存中!

              new( )    重新建立一个空的学校!

       query.c 查找,主要完成各种查找的工作

              directid( ) 利用求模%hash,主要在idhhtb.c中实现的!

             directname( ) 姓名查找,利用用26个字母,把第一个字母一样的放在一起(一个数组26),利用asscii就可以直接找到了!然后在找,应该算是hash table呵呵!(关于这个一建立在nahhtb.c)

       input.c  输入,主要是完成输入功能!

       output.c 输出,把学生依次打印出来!

       modify.c 修改,有修改和删除两个功能!

       stat.c   用于统计,以班级为单位,有统计平均成绩和及格率!

       other.c  还没有想好要干什么呢!

       myexit.c 用于退出的时候把内存中的数据在写到文件中,每一次合法退出的时候都会调用一次!

       nahhtb.c 用于建立姓名的hash table,还有关于这个的修改,查找,插入等!

       idhhtb.c 用于建立idhash table,还有关于这个的修改,查找,插入等!

       checkid.c 用于当用一个学生输入的时候检测是否有重名的id!有返回0,没有返回1!以供input.c调用!        

       classok.c 用于把一个班级的学生放到一起!放在一个指针数组中!以便以后统计的工作使用!

       myinput.c 实际的学生输入

       myoutput.c 实际的学生输出

 

 

这个程序的一些不足之处:

       1.还有一些功能没有实现,比如说高级查找!

       2.classok.c的处理上,没有用什么好的查找方式,而是用了简单的线行查找!速度可能会慢一点!

       3.班级结点的记录的数据比较少,可以加入一些统计的信息,这样可以使得在不改变数据的情况下,统计的速度提高!

       4.因为要提高速度,一开始系统就建立了一个三张表,这样可能会造成系统的一定浪费!

       5.每一次合法退出时都要对文件做一次写入,其实在没修改文件的情况下是不需要在一次写入的!

 

 

以下的想法实现起来交为复杂,到现在还是没有实现(试过一次,没有成功):

对于学号的说明:前两位代表是第几界的,04,代表04,接这两位是代表是什么系科的如01代表学校的第一个系科,接着的 两位是代表是哪个班级的如02代表是02班的,接着的两位是代表在班中是什么学号!

想建立一个四重索引表,使得每一个学生都可以通过四次索引查找马上定位,这样会有内存的一定程度的浪费,但是保证了查找的快速性! 物理上的保存也是按照这个方式的!(还是有疑问,用的内存空间太多了,另外学号有要判断他的合法性!

 

 

以下是我的在这个程序的编写过程中的体会:

       当我第一次想写这个程序的时候由于对c 的不熟悉,和自身的能力有限,想法和思路都很乱,最终当然是写不下去了,多亏了我哥哥不倦的指导,给了我很多启发!我在他的思路下重新写了!这样感觉就好多了!写程序是很费时间的事,有时候明明是有思路的,但是实现起来就是很困难,要想和现实一样是不太可能的(我感觉我那个没有成功的想法也许就是太理想了)!

       以前感觉学习编程很累(尤其用c),有那么多现成的软件还用自己写,写的也没有人家好!学编程没有什么使用价值!但是,现在我发现我错了,我当时的想法太无知了,其实编程是计算机的基础,也是精髓(自己认为的)!学好了程序才能很好的理解理论知识,把理论变成实践!在可以从实践中体会理论!(学数学,一般体会不到实践)

       有时候我感觉写程序就想组装一个玩具的汽车,你要自己做很多零件,使这些零件可以独立的工作,但是也要保证他们能连在一起工作(但是有一点不同,在编程中你还要注意每一个可能出现非法输入,程序要对此做处理).在我学的这一点计算机知识中,我感觉分解,封装是计算机的精髓(不管是网络的几个层次结构,还是计算机系统的,编译原理,都是一层向一层提供服务,然后在把他们的细节问题都封装起来,化难为简),其实这个和数学一直用到的化不熟悉到熟悉倒是有点相似的!当我自己写了程序后,我就深刻体会到了这一点!

       当我沉浸在编程中的时候,把所有的事都忘了,整个世间就只有我和程序是一件每美好的事,当然把晚上在床上想好的想法在程序中实践也是一个不错的事情!(不象数学感觉十分抽象,有时候有点不可琢磨,只能靠证明来驾驭他).

       写一个完美的程序是不可能的,今天还是感觉这个程序是听完美的,但是到了第二天就会发现有很多问题了!总是会有错误的,顾及了这一点就会忽略了其他东西!

       现在学编译原理,感觉太神奇了,决定学完了以后,自己写个小的编译程序!

阅读(3567) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-05-29 12:10:21

希望你的新程序尽快出来,让我们一起分享一下。