首页 > 编程资源分享区 > C/C++测试题 > 这个星期老师布置的综合作业
2005
11-17

这个星期老师布置的综合作业

综合性程序设计试验


实验名称: 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;  /*链表当前结点指针,定义为全局变量*/


三、自定义函数规范


1void  create(void)


    该函数在打开数据库文件并读取记录时动态创建链表,同时初始化表头、表尾,置当前指针指向表头。


2void  add_rcd(STD *sp)


    将缓冲区sp添加到链表当前结点后,生成一新记录结点,并置当前指针指向新结点。


3int  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


(在以上的函数操作中,一定要注意头指针、尾指针、当前指针是否改变)


9STD  *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、程序清单:


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


/*本程序完成130的累加求和*/


main()


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


/*开始求和*/


for(sum=0,I=1;I<=30;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)总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。


 


 


这个星期老师布置的综合作业》有 9 条评论

  1. coolker 说:

    你都会做吗?

  2. nysan88 说:

    搞不懂!

  3. 江南以南 说:

    我昨天已经用单链表做好了,但是还有一个错误!!!!!!!!!

  4. 碧蓝右耳 说:

    基本不算很难 一个一个模块做就可以了

    高手我不能算,大嘴还差不多。
    2445708(计算机围棋)这个群的朋友才是高手,斌哥才是高手。
    下次我也多贴点东西是一定的。

    碧蓝右耳38700.7261805556

  5. 江南以南 说:

    碧蓝是高手我就不说了

    但是希望碧蓝能在编程方面帮住一下我们这些刚上路的菜鸟!!!!!!!!!!

  6. 江南以南 说:

    发过一次,出现字体问题!!!!!!

    江南以南38700.7345717593

  7. cboy 说:

    高手,写了这么多。。。

  8. 悲伤的果子 说:

    哎….这就叫做”实力强劲”….

留下一个回复