最近在做课设,用C#编写一个用户注册窗口,但必须用到数据结构知识,将用户的注册信息以链表的形式存储且写入text文件中,我用VC#2010,windows form编程,即将6个textBox中的信息写入链表,按确定保存~~

解决方案 »

  1.   

    你让老师来csdn接受下再教育。
      

  2.   

    额。
     private int Serialize()
            {
                int result = 0;
                IFormatter formatter = new BinaryFormatter();
                SaveFileDialog save = new SaveFileDialog();
                save.DefaultExt = "*.hzy";
                save.Filter = "自定义文件(*.xxx)|*.xxx";
                if (save.ShowDialog() == DialogResult.OK)
                {
                    Stream stream = new FileStream(save.FileName, FileMode.Create, FileAccess.Write, FileShare.None);
                    formatter.Serialize(stream, device_list);
                    stream.Close();
                    result = 1;
                }
                return result;      
            }
      

  3.   

    这个学习一下《数据库系统设计》课程会有基本概念。简单来说,你可以规定一个记录块占用一定的字节,例如占用4k个字节,然后就可以对文件中的记录按照记录块id随机读写了。至于记录的结构,例如用json格式来序列化public class Record
    {
       public int 前一个块id;
       public int 后一个块id;
       public string 实际对象类型;
       public string 实际数据对象的json序列化;   //当然也可以使用 JObject 而不是 string
    }然后,我们需要知道两个参数“第一个空闲数据块号,第一个记录数据块号”,这可以写到另外一个“配置”文件中(实际上这个文件还可以作为数据块文件的加锁控制)。
      

  4.   

    显然知道一个数据块id号就能随机读写记录块数据,并最终返回强类型的.net内存对象。信息需要两个链表,除了管理保存数据的数据块,你还要将空闲块也管理起来以便随时分配使用。当空闲块不足的时候,那么就需要扩展文件的大小(例如扩大一倍)并且将新的数据块放入空闲块链表中。至于用另外一个保存链表数据的文件文件来管理“业务对象类型的索引,对象的某些属性值的索引”,或者“跨服务器分布、自动产生两份数据备份”等等,只会做一个“登录窗体”的人是万万不可能涉及的。即使是这个简单的磁盘文件保存最基本的数据库记录的机制,也不是一个业余程序员会的知识。
      

  5.   

    当然,如果数据块大小是动态可变的,那么数据结构和算法需要做一点修改。如果你是软件专业,正规学过“数据结构知识”,那么这个完全可以实践。(实际上有很多软件专业学生在毕设时选择了自己开发一个简易的操作系统)即使是非常伟大的mongodb等等,也不过是这类基础。所有的数据库都是如此。所以假设你是软件专业的学生,又确实学过数据结构和数据库系统等基础课程,那么做一个课题是非常正确的。不要纠结在什么“用户注册窗口”这种所谓设计上,甚至不做也行。一个学生做的产品如果点技术含量,哪一个sb老师会纠缠你的产品有没有做“用户注册功能”呢?
      

  6.   

    楼上说的都不错,直接用.net序列化可以,用sp1234的也可以。
    也可以采用下面的思路:
    在c/c++中,链表的每个节点都包含下一个节点的指针;在c#中,链表的每一个节点都包含下一个节点的引用;如果要将链表保存到文件,并能从文件还原回链表,可以在保存文件时,将每个节点的下一个节点的引用或者指针替换为下一个节点在文件中的位置,将每个节点写入文件;从文件中读取链表时,根据每个节点的下个节点在文件中的位置依次读取各节点,实例化后加入链表。实际就是用文件位置替换内存地址,一个道理,对链表执行相应的增删操作后保存到文件时也同理。