数据库课程设计.docx

上传人:b****6 文档编号:5244738 上传时间:2022-12-14 格式:DOCX 页数:18 大小:259.72KB
下载 相关 举报
数据库课程设计.docx_第1页
第1页 / 共18页
数据库课程设计.docx_第2页
第2页 / 共18页
数据库课程设计.docx_第3页
第3页 / 共18页
数据库课程设计.docx_第4页
第4页 / 共18页
数据库课程设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据库课程设计.docx

《数据库课程设计.docx》由会员分享,可在线阅读,更多相关《数据库课程设计.docx(18页珍藏版)》请在冰豆网上搜索。

数据库课程设计.docx

数据库课程设计

郑州轻工业学院

课程设计任务书

题目:

学生成绩分析问题

姓名:

任静

院(系):

数学与信息科学系

专业班级:

信科09-1班

学号:

540910010126

指导教师:

时海亮,裴云霞

时间:

2011年6月20日至2011年6月30日

一、基本要求及主要内容

1.学生成绩分析问题

(1)问题描述。

录入并保存一个班级学生多门课程的成绩,并对成绩进行分析。

(2)基本要求。

a)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat。

b)对文件input.dat中的数据进行处理,要求具有如下功能:

按各门课程成绩排序,并生成相应的文件输出;计算每个人的平均成绩,按平均成绩排序,并生成文件;求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数;根据姓名或学号查询某人的各门课成绩。

c)使用VisualC++6.0控制台应用程序开发,界面美观。

(3)测试数据,如下图所示。

学号

姓名

数学

英语

计算机

01

王芳

78

77

90

02

张强

89

67

88

03

李浩

56

66

78

04

黄鹏

89

86

85

05

尚校

67

88

76

06

赵鹏

45

54

67

07

蒋泽

78

76

70

2.职工信息管理系统

设有一个职工文件,其结构为:

职工号(no)、姓名、部门号、工资数、职工号指针、部门号指针和工资数指针。

设计一个程序,从该文件中读取记录到一个单链表中,并完成如下功能:

(1)输入。

添加一个职工信息。

(2)输入。

输出全部职工信息。

(3)按no排序。

通过pno指针将职工记录按no从小到大链接起来。

(4)按no输出。

沿pno链输出全部职工信息。

(5)按depno排序。

通过pdepno指针将职工记录按depno从小到达链接起来。

(6)按depno输出。

沿pdepno链输出全部职工信息。

(7)按salary排序。

通过psalary指针将职工记录按salary从小到大链接起来。

(8)按salary输出。

沿psalary链输出全部职工信息。

(9)清空。

删除职工文件中的全部记录。

(10)存储退出。

将单链表中的全部结点存储到职工文件中,然后退出程序运行过程。

3.通讯录管理系统

通讯录管理系统一般包括通讯者结点信息的插入、查询、删除、更新以及通讯录信息的输出等功能。

通讯者的信息一般包括编号、姓名、性别、电话以及地址等。

4.约瑟夫生者死者游戏

约瑟夫游戏的大意是:

30名旅客同乘一条船,因为超载严重,加上风雨大作,情况危急。

船长告诉旅客,只有将全船一半的旅客扔进海中,其他人才能幸免于难。

无奈,大家商议出如此办法,30个人围成一圈,由第一个人开始依次报数,数到第9人,便把他仍入海中,然后再从他的下一个人开始报数,数到第9人,便把他仍入海中,如此循环进行,直至剩下15个旅客为止。

问哪些位置是将被扔下大海的位置。

5.迷宫问题

给定MN的迷宫图,求一条从制定入口到出口的路径。

假设迷宫如图教材P73页图3.6所示。

对于图中每个方块,用个空白表示通道,用阴影表示墙。

所求路径必须是简单路径,即在求得的路径上不能重复出现同一通道块。

二、主要参考文献

[1]李春葆,尹为民等,数据结构教程(第3版),北京:

清华大学出版社,2009年.

完成期限:

2011年6月30日

指导教师签名:

时海亮,裴云霞

课程负责人签名:

时海亮

2011年6月20日

摘要

本论文选取学生成绩分析为研究对象,大致分为以下几个方面。

一、通过对问题的具体描述的理解,可知道要用结构体来解决本题目数据较多这个问题。

另外根据问题的要求,可以采用构造函数来解决每一个小要求,以实现该题的全部要求。

二、用合适的算法解决问题,并编写代码,通过计算机来实现所有的功能。

三、结合设计过程,谈谈自己的体会。

四、列出参考文献。

目录

课程设计任务书1

一、基本要求及主要内容2

1.学生成绩分析问题2

2.职工信息管理系统3

3.通讯录管理系统3

4.约瑟夫生者死者游戏4

5.迷宫问题4

二、主要参考文献4

摘要5

目录6

1问题描述7

1.1问题描述7

1.2基本要求7

1.3问题的其它注意事项8

2程序结构及功能描述9

3算法描述10

4实验数据和实验结果18

5开发难点及解决技巧22

6小结23

7参考文献24

1问题描述

1.1问题描述

(1)问题描述。

录入并保存一个班级学生多门课程的成绩,并对成绩进行分析。

(3)测试数据,如下图所示。

学号

姓名

数学

英语

计算机

01

王芳

78

77

90

02

张强

89

67

88

03

李浩

56

66

78

04

黄鹏

89

86

85

05

尚校

67

88

76

06

赵鹏

45

54

67

07

蒋泽

78

76

70

1.2基本要求

a)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat。

b)对文件input.dat中的数据进行处理,要求具有如下功能:

按各门课程成绩排序,并生成相应的文件输出;计算每个人的平均成绩,按平均成绩排序,并生成文件;求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数;根据姓名或学号查询某人的各门课成绩。

c)使用VisualC++6.0控制台应用程序开发,界面美观。

1.3问题的其它注意事项

由于该题目牵扯到三门课程,故应注意设计时考虑switch语句来减少工作量。

另外结构体也是求此类问题最佳的选择。

注意把问题归纳总结,看哪些问题可以通过一个函数实现,以减少main函数的长度,更好的实现程序的模块化,提高程序的独立性。

2程序结构及功能描述

2.1程序结构

2.2函数功能描述

subject()函数:

选择某个学科,分析与他有关的所有数据。

例如本题的各科的平均成绩、最高分、最低分等

studentave()函数:

求每个学的平均成绩并且按平均成绩排序。

nosearch()函数:

按学号查找某个学生。

namesearch()函数:

按姓名查找某个学生。

cunchu()函数:

把数据存到C盘RJ下的input.dat中。

duqu()函数:

从C盘RJ下的input.dat中读取数据。

3算法描述

3.1算法思想

首先定义student结构体,再定义结构体成员,其中字符型数组name[20]和no[10]分别来存实验数据中的姓名和学号,另外定义整型变量math、english、computer分别存储各科成绩。

再定义存储函数cunchu()和读取函数duqu()这两个函数分别通过运用文件存储函数fwrite和文件读取函数fread来实现将数据存入指定路径,以及从指定路径读取数据,并显示在显示屏上。

通过构造函数subject()来实现对各科成绩的分析,studentave()来对个人成绩进行分析,nosearch()和namesearch()来实现按条件查找不同的学生信息。

最后在主函数中输入实验数据,并通过调用各个函数来实现实验要求。

3.2程序清单

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

#defineN7

structstudent

{

charname[20];//姓名

charno[10];//学号

intmath;//数学分数

intenglish;//英语分数

intcomputer;//计算机分数

intscore;//交换用分数

inteveave;//个人平均分

};

structstudentst[N];//定义学生结构体

voidsubject(studentst[],intn)//选定某个学科进行分析

{

intnumber;

inttemp;

printf("请选择要分析的学科:

");

scanf("%d",&number);

inti=0;

switch(number)

{

case1:

printf("★★★★★★★★★以下是关于数学的成绩分析:

★★★★★★★★★★\n");

for(i=0;i

st[i].score=st[i].math;

break;

case2:

printf("★★★★★★★★★以下是关于英语的成绩分析:

★★★★★★★★★★\n");

for(i=0;i

st[i].score=st[i].english;

break;

case3:

printf("★★★★★★★★★以下是关于计算机成绩分析:

★★★★★★★★★★\n");

for(i=0;i

st[i].score=st[i].computer;

break;

}

intj;

printf("按学号每个人的原始数据为:

\n");

for(i=0;i

printf("%d\n",st[i].score);

printf("排序后的数据为\n");

for(i=0;i

{

for(j=0;j

if(st[j+1].score

{

temp=st[j].score;

st[j].score=st[j+1].score;

st[j+1].score=temp;

}

}

for(i=0;i

printf("%d\n",st[i].score);

printf("该门课的平均成绩为:

\n");

floatsum=0;

floatcourseave;

for(i=0;i

{

sum=sum+st[i].score;

}

courseave=sum/7;

printf("%f\n",courseave);

printf("该门课的最高分为:

\n");

intmax=st[0].score;

for(i=0;i

{

if(st[i].score>max)

{

max=st[i].score;

}

}

printf("%d\n",max);//最高分

printf("该门课的最低分为:

\n");

intmin=st[0].score;

for(i=0;i

{

if(st[i].score

{

min=st[i].score;

}

}

printf("%d\n",min);//最低分

intbjg=0;

intjg=0;

intzd=0;

intlh=0;

intyx=0;

for(i=0;i

{

if(st[i].score<60)//计算不及格人数

{

bjg++;

}

if(st[i].score>=60&&st[i].score<70)//计算60~69人数

{

jg++;

}

if(st[i].score>=70&&st[i].score<80)//计算70~79人数

{

zd++;

}

if(st[i].score>=80&&st[i].score<90)//计算80~89人数

{

lh++;

}

if(st[i].score>=90)//计算90分以上人数

{

yx++;

}

}

printf("该门课的不及格人数为:

\n%d\n60~69人数:

\n%d\n70~79人数:

\n%d\n80~89人数:

\n%d\n90分以上人数:

\n%d\n",bjg,jg,zd,lh,yx);

}

voidstudentave(studentst[],intn)//计算每个人的平均成绩并排序

{

inti;

inttemp;

for(i=0;i

{

st[i].eveave=(st[i].math+st[i].english+st[i].computer)/4;

}

printf("每个人平均成绩为:

\n");

for(i=0;i

printf("%d\n",st[i].eveave);

for(i=0;i

{

for(intj=0;j

if(st[j].eveave>st[j+1].eveave)

{

temp=st[j].eveave;

st[j].eveave=st[j+1].eveave;

st[j+1].eveave=temp;

}

}

printf("平均成绩排序为:

\n");

for(i=0;i

printf("%d\n",st[i].eveave);

}

voidnosearch(studentst[],intn)//按学号查找学生的各门成绩

{

inti=0;

n=7;

charno[10];

printf("请输入要查找的学生号:

");

scanf("%s",&no);

while(strcmp(no,st[i].no)==0&&i

i++;

if(i==n)

{

printf("meizhaodao\n");

}

else

printf("%s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer);

}

voidnamesearch(studentst[],intn)//按姓名查找学生的各门成绩

{

inti=0;

n=7;

charname[20];

printf("请输入要查找的姓名:

");

scanf("%s",&name);

while(strcmp(name,st[i].name)==0&&i<7)

i++;

if(i==n)

{

printf("meizhaodao\n");

}

else

printf("%s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer);

}

voidcunchu(studentst[],intn)//存盘

{

inti;

FILE*fp;

fp=fopen("C:

\\RJ\\input.dat","wb");//以“写”方式打开一个二进制文件

if(fp==NULL)

{

printf("Can'topen!

\n");

exit(0);

}

for(i=0;i

{

fwrite(&st[i],sizeof(structstudent),1,fp);//一次写入一个学生的成绩

}

fclose(fp);

}

voidduqu(studentst[],intn)//读取数据

{

inti;

FILE*fp;

fp=fopen("C:

\\RJ\\input.dat","rb");//以“读”方式打开一个二进制文件

if(fp==NULL)

{

printf("Can'topen!

\n");

exit(0);

}

for(i=0;i<7;i++)

{

fread(&st[0],sizeof(structstudent),1,fp);//一次读取一个学生的成绩

printf("%s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer);

}

fclose(fp);

}

voidmain()

{

inti;

structstudentst[7]={{"01","王芳",78,77,90},

{"02","张强",89,67,88},

{"03","李浩",56,66,78},

{"04","黄鹏",89,86,85},

{"05","尚校",67,88,76},

{"06","赵鹏",45,54,67},

{"07","蒋泽",78,76,70}};

printf("★★★★★★★★★★★★本题的实验数据为数据:

★★★★★★★★★★★★★★\n");

cunchu(st,7);//存盘input.dat

duqu(st,7);//读取数据

printf("★★★★★★★★★★★★对各科的成绩分析如下:

★★★★★★★★★★★★★★\n");

printf("本实验采取switch()语句,分别1~3中的表示不同的学科\n输入1表示计算关于数学方面的成绩;\n输入2表示计算关于英语方面的成绩;\n输入3表示计算关于计算机方面的成绩;\n");

subject(st,7);//按各科成绩排序

subject(st,7);//按各科成绩排序

subject(st,7);//按各科成绩排序

printf("★★★★★★★★★★★★关于个人平均成绩分析:

★★★★★★★★★★★★★★\n");

studentave(st,7);//计算每个人的平均成绩并排序

printf("★★★★★★★★★★★★按照不同条件查询分析:

★★★★★★★★★★★★★★\n");

nosearch(st,7);//按学号查找学生的各门成绩

namesearch(st,7);//按姓名查找学生的各门成绩

}

4实验数据和实验结果

4.1实验数据

学号

姓名

数学

英语

计算机

01

王芳

78

77

90

02

张强

89

67

88

03

李浩

56

66

78

04

黄鹏

89

86

85

05

尚校

67

88

76

06

赵鹏

45

54

67

07

蒋泽

78

76

70

4.2实验结果

选择运行后出现如下界面:

输入1即为对数学成绩的分析:

输入2即为对英语成绩的分析:

输入3即为对计算机成绩的分析:

对个人平均成绩分析:

输入要找的学号或名字后:

按任意键后退出该程序,可实现对其他数据的分析。

5开发难点及解决技巧

5.1开发难点

将多个实验要求集合到一个函数中,这是本实验的一个难点,另外本题牵扯到三门学科,如果每门学科都写一个函数,则会浪费时间和精力,而且做出的程序质量不高。

5.2解决技巧

认真的对实验进行分析,找出各个要求之间的关系,把一类问

题放到一个函数中,再通过switch语句来控制选择学科,即可解决上述问题。

6小结

这次课程设计变相的复习了c语言的一些基础知识,在设计中遇到不会的更能加深对知识的印象从而掌握更牢。

通过这两周的课程设计,我更明白了c语言在程序开发中的重要地位,因此以后一定要随时复习巩固,只有打好基础才能做出好的程序,并且可以减少工作时间,提高工作效率。

这次课程设计中犯了一个很小的错误,可是却因为这个错误浪费了好几天的时间,字符数组的输出格式为%s,而我却写成了%c,造成存进去的数据全都成了乱码,自己一直迷茫,把程序改来改去,还是一样错。

这点充分说明了两点,一是知识掌握不牢,二是做程序太少,没经验。

在以后的学习中,一定要打好基础,另外也要多找些实战机会,只有多出错才能更好的积累自己的经验。

7参考文献

[1]王成端,徐翠霞.C语言程序设计.北京:

中国水利水电出版社,2005

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1