用C语言开发小型数据库管理系统

综合性程序设计试验

实验名称: 用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_rcd(void);

void del_rcd(void);

int save_data(void);

STD *put_rcd(void);

[实验报告的具体格式示范]

[姓名:XXX] [学号:XXXXXXX] [日期:]

[题目X]

1、数据结构:

此部分要求说明用来表示题目中数据的数据结构;

如: int m[MAXNUM];

m数组用来表示一个最多12个人队列;

m[2]:表示第二个人是否在队中,其取值为1表示在队列

中,为0表示已出列,不在队列中;

2、算法描述:

此部分要求写出算法的基本思想以及程序中模块(函数)的划分原则;可选择采用伪代码或流程图的方式来说明各模块(函数)的基本思想和思路。

3、程序清单:

程序清单要求加详细注释;如下例所示:

/*本程序完成1到30的累加求和*/

main()

{int I,sum;/ *I:循环变量;sum:求和结果*/

/*开始求和*/

for(sum=0,I=1;I

sum+=I;

/*输出结果*/

printf(“SUM=%d\n”,sum);

}

【要求】

1.程序运行时,首先显示主菜单如下:

1.新建数据

2.添加数据

3.删除数据

4.排序

5.查询

6.退出

请输入序

号选择相应操作

用户输入序号后,程序进行相应操作。

2.在主菜单中选择序号4,弹出子菜单选择排序方式,子菜单如下:

1.数学成绩排序

2.程序设计成绩排序

3.总分排序。

4.返回主菜单

请按序号选择相应操作

选择子菜单的序号后,程序能正确运行并在屏幕上显示按要求排序后的相关信息。

3.在主菜单中选择序号5,弹出子菜单选择查询方式,子菜单如下:

1.学号查询

2.姓名查询

3.数学成绩查询

4.程序设计成绩查询

5.总分查询

6.返回主菜单

请按序号选择相应操作

在子菜单中选择序号后,程序按以下方式工作。

(1)学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:查询到满足条件的结果后,查询即可结束)

(2)姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:使用字符串比较函数进行比较)

(3)按科目查询:输入指定分数,程序运行后显示该科目中考试成绩大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数;

(4)总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。

综合性程序设计试验

实验名称: 用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_rcd(void);

void del_rcd(void);

int save_data(void);

STD *put_rcd(void);

[实验报告的具体格式示范]

[姓名:XXX] [学号:XXXXXXX] [日期:]

[题目X]

1、数据结构:

此部分要求说明用来表示题目中数据的数据结构;

如: int m[MAXNUM];

m数组用来表示一个最多12个人队列;

m[2]:表示第二个人是否在队中,其取值为1表示在队列

中,为0表示已出列,不在队列中;

2、算法描述:

此部分要求写出算法的基本思想以及程序中模块(函数)的划分原则;可选择采用伪代码或流程图的方式来说明各模块(函数)的基本思想和思路。

3、程序清单:

程序清单要求加详细注释;如下例所示:

/*本程序完成1到30的累加求和*/

main()

{int I,sum;/ *I:循环变量;sum:求和结果*/

/*开始求和*/

for(sum=0,I=1;I

sum+=I;

/*输出结果*/

printf(“SUM=%d\n”,sum);

}

【要求】

1.程序运行时,首先显示主菜单如下:

1.新建数据

2.添加数据

3.删除数据

4.排序

5.查询

6.退出

请输入序

号选择相应操作

用户输入序号后,程序进行相应操作。

2.在主菜单中选择序号4,弹出子菜单选择排序方式,子菜单如下:

1.数学成绩排序

2.程序设计成绩排序

3.总分排序。

4.返回主菜单

请按序号选择相应操作

选择子菜单的序号后,程序能正确运行并在屏幕上显示按要求排序后的相关信息。

3.在主菜单中选择序号5,弹出子菜单选择查询方式,子菜单如下:

1.学号查询

2.姓名查询

3.数学成绩查询

4.程序设计成绩查询

5.总分查询

6.返回主菜单

请按序号选择相应操作

在子菜单中选择序号后,程序按以下方式工作。

(1)学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:查询到满足条件的结果后,查询即可结束)

(2)姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:使用字符串比较函数进行比较)

(3)按科目查询:输入指定分数,程序运行后显示该科目中考试成绩大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数;

(4)总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。


相关文章

  • 毕业论文开题报告-小型图书馆管理系统
  • 1. 引言 本文是学生XX (学号:XXXXXXX)的毕业设计<小型图书馆管理系统>的开题报告,主要描述课题目标,课题分析,以及进度安排等. 文中的课题研究意义和图书馆信息化现状部分为网络摘抄并加以整理后的内容. 2. 目标 2 ...查看


  • 在线考试系统可行性研究报告
  • (此文档为word 格式,下载后您可任意编辑修改!) 目录 1. 编写目的 .................................................................................. ...查看


  • 办公自动化管理系统
  • 办公自动化管理系统 办公自动化管理系统 办公自动化管理系统是将现代办公和计算机网络功能结合起来的一种新型的办公方式,是信息化社会的产物.办公自动化系统可以将一个机构的办公用的计算机和其他办公设备连接成网络,这样可以为办公室工作人员和企事业负 ...查看


  • 2013本科毕业设计开题报告
  • 河北联合大学 本科生毕业设计开题报告 设计题目: 基于B2C模式的购物网站的设计与实现 学 院: 管理学院 专 业: 信息管理与信息系统 班 级: XXX 姓 名: XXX 学 号: XXX 指导教师: XXX 2013年 03 月 19 ...查看


  • 小型动物分类专家系统的设计与实现
  • 小型动物分类专家系统的设计与实现 一. 实验目的 通过本实验可使学生能够综合利用C 语言(或C++).面向对象程序设计.数据结构.数据库原理.人工智能.软件工程等课程的相关知识,设计并实现小型动物分类专家系统,培养学生综合运用所学计算机软件 ...查看


  • 基于PHP的留言板设计
  • 本科毕业设计(论文) 题 目: 基于PHP 的留言板设计 学生姓名: 学号: 系(部): 数学与计算机科学系 专业:计算机科学与技术 入学时间: 年 月 导师姓名: 职称/学位: 导师所在单位: 基于PHP 的留言板设计 摘 要 随着INT ...查看


  • 图书馆管理系统毕业设计开题报告
  • 毕业设计(论文) 开题报告 题 目 图书管理系统的设计与开发 专 业 计算机科学与技术 班 级 10 计科 0 1班 学 生 指导教师 职 称 助 教 高科学院 年 一.毕业设计(论文) 课题来源.类型 二.选题的目的及意义 目的:通过本次 ...查看


  • 教师工资管理系统
  • 课 程 设 计 报 告 学生姓名: 学 院: 班 级: 题 目: 孙海龙 学 号: 1005170222 经济管理学院 管理102 教师工资管理系统 职称: 副教授 王欣 教授 2012年 7月 11日 课 程 设 计 任 务 书 1 2 ...查看


  • 小型超市销售管理系统
  • 小型超市销售管理系统 实 验 报 告 实验课程: 信息系统分析与设计 学生姓名:曹志明 冯建明 冯伟 胡华 赖玉峰 专业班级: 信息管理041班 组 长:曹志明(6104104002) 小组成员:冯建明(6104104027) 冯 伟(61 ...查看


热门内容