关于文本文件数据库的开发思路

第一步只处理数据查询问题,不涉及修改动作。
数据库系统从整体上,分为查询解释器和数据存储两部分。
数据存储内容又分为元数据和实际数据两部分。
元数据储存考虑采用mysql来进行存储。
实际存储考虑采用文本文件格式来进行存储。

将实际存储的读取动作抽象为一个数据流,经过文件读取流封装出来,一次读取一行,并根据指定的元数据转换为内部行对象。
这个内部的行对象再传入变量表中,利用变量表和经过AST解析的表达式进行逻辑布尔计算,得到where子句的具体结果。
通过内部行对象的逻辑运算计算支持where表达式。
通过表名来定位使用那个具体的数据文件作为数据源。
通过元数据的定义将数据文件的行转换为行对象,进而转换为变量表。
问题总体上是有解的,需要细化设计方案,找时间来实现一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
综合性程序设计试验 实验名称: 用C语言开发小型数据库管理系统 【目的】 1.利用所学的三种程序基本结构以及数组、指针、结构体、用户自定义函数、文件进行一个中型程序的设计,进一步理解和掌握C语言的语法以及三种基本程序结构的综合应用。 2.通过程序中涉及到的排序、查找、求和等操作加深对算法、程序设计思路、常用程序设计技巧的理解与掌握,逐步培养学生的程序开发能力。 【内容】 设某班有n位同学,每位同学的数据包括以下内容:学号(字符串)、姓名(字符串)、数学成绩(字符串)、程序设计成绩(字符串)。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。 注: 1. 采用模块化程序设计思想对系统进行设计; 2. 学生的数据要求用文件保存; 3. 学生的学号作为关键字段,不能相同,姓名可以相同。 4. 要求使用结构体,链或数组等实现。 【步骤】 1. 画出程序流程图; 2. 编制程序; 3. 调试程序,对调试程序时出现的错误进行分析,思考导致错误的原因; 4. 写出通过调试并修改后的正确程序代码。 5. 提交实验报告(电子文档) 【规范】 一、文件名规定 1. 数据库文件名: students.dat(文本文件) 2. 数学成绩排序文件名:sxcj.dat(文本文件) 3. 程序设计成绩排序名:cxsj.dat(文本文件) 二、宏定义、记录结构和全局变量 #define NULL 0 #define LEN sizof(STD) typedef struct { char xh[12]; /*学号*/ char xm[12]; /*姓名*/ char sxcj[5]; /*数学成绩*/ char cxsj[5]; /*程序设计成绩*/ char zf[5]; /*总分*/ struct std *next /*指向下条记录*/ struct std *prev /*指向上条记录*/ }STD; STD *head=NULL; /*链表头指针,定义为全局变量*/ STD *tail=NULL; /*链表尾指针,定义为全局变量*/ STD *current=NULL; /*链表当前结点指针,定义为全局变量*/ 三、自定义函数规范 1.void create(void) 该函数在打开数据库文件并读取记录时动态创建链表,同时初始化表头、表尾,置当前指针指向表头。 2.void add_rcd(STD *sp) 将缓冲区sp添加到链表当前结点后,生成一新记录结点,并置当前指针指向新结点。 3.int find_rcd(char *xh) 从当前结点开始按学号搜索结点,成功返回1,并置当前指针指向该结点,失败返回0,当前指针不移动。 4. void verify_rcd( char *info) 修改当前结点指定字段信息。 5. void next_rcd(void) 指向当前结点的下一结点,如果当前结点为尾结点,不移动当前结点指针。 6. void prev_rcd(void) 指向当前结点的前一结点,如果当前结点为头结点,不移动当前结点指针。 7. void del_rcd(void) 删除当前结点,使当前指针指向下一结点,如果当前结点为尾结点,重置尾结点,使当前指针指向尾结点。如果当前结点为头结点,重置头结点,使当前指针指向头结点。 8. int save_data(void) 保存结点记录,文件名为students.dat (在以上的函数操作中,一定要注意头指针、尾指针、当前指针是否改变) 9.STD *put_rcd(void) 提供记录输入界面,将记录输入缓冲区,并返回该缓冲区指针。 [头文件data.h] #define NULL 0 #define LEN sizof(STD) typedef struct { char xh[12]; /*学号*/ char xm[12]; /*姓名*/ char sxcj[5]; /*数学成绩*/ char cxsj[5]; /*程序设计成绩*/ char zf[5]; /*总分*/ struct std *next /*指向下条记录*/ struct std *prev /*指向上条记录*/ }STD; STD *head=NULL; /*链表头指针,定义为全局变量*/ STD *tail=NULL; /*链表尾指针,定义为全局变量*/ STD *current=NULL; /*链表当前结点指针,定义为全局变量*/ STD *create(void); void add_rcd(STD *sp); int find_rcd(char *xh); void verify_rcd(char *info); void next_rcd(void); void prev

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值