C课程设计学生成绩数据库管理系统.docx
- 文档编号:7024477
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:22
- 大小:272.69KB
C课程设计学生成绩数据库管理系统.docx
《C课程设计学生成绩数据库管理系统.docx》由会员分享,可在线阅读,更多相关《C课程设计学生成绩数据库管理系统.docx(22页珍藏版)》请在冰豆网上搜索。
C课程设计学生成绩数据库管理系统
课程设计任务书
课程名称C语言课程设计
课题学生成绩数据库管理系统设计
专业班级
学生姓名
学号
指导老师
审批
任务书下达日期2010年06月26日
任务完成日期2010年07月06日
1.1、设计内容与设计要求
1.1.1.设计内容:
涉及的知识点:
①掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控制语句;
②掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。
③掌握并熟练运用C语言的图形处理功能和库函数的应用。
④掌握数组的基本概念。
熟练掌握一维数组、二维数组的应用、掌握字符数组
与字符串的关系以及字符串的简单处理。
⑤掌握结构的概念,结构类型的定义,结构变量的定义和初始化,结构成员的表示,结构的赋值含义,结构与指针、函数的关系。
⑥掌握文件、文件类型指针的基本概念,熟练掌握文件的打开与关闭以及文件的建立、读写等有关操作。
学生成绩数据库管理系统设计
从文件(成绩库)读取数据,提供新增、删除、修改和显示等功能,并将修改后的数据写入一个新的文件。
成绩单如下:
学号:
long4bytes
姓名:
char20bytes
语文:
int2bytes
数学:
int2bytes
总分:
int2bytes
名次:
int2bytes
系统功能模块如下:
(1)建立学生成绩库(单独一个执行文件创建数据库);
(2)将学生成绩库读入到一个结构体数组中,并计算;
(3)菜单实现以下功能:
①计算每个学生的总成绩;
②按总成绩排定学生名次;
③学号为单号的学生实现以下功能:
新增一个学生成绩并显示、按学号查询学生成绩;
④学号为双号的学生实现以下功能:
修改一个学生成绩并显示、按学号查询学生成绩。
(4)修改后的成绩库数据写入到另一个新文件中。
1.1.2.设计要求:
1)要求每个学生必须独立思考,认真并按时完成本课程设计所包含的所有内容;
2)要求学生必须按照课程设计报告的完整格式说明设计内容,设计任务分析过程和算法,给出程序流程图和全部源程序;
3)设计报告的完整格式应包括以下部分的内容:
1设计总体思路;
2程序及各个模块说明;
3总体模块框图;
4各个程序模块说明;
5程序流程图;
6程序清单;
7课程设计总结与体会(不少于400字)。
4)上机时要求必到,设计完成,必须演示程序,答辩并提交设计报告。
5)总评成绩由三部分组成:
报告占20%,平时占20%,课程设计题目各占30%。
1.2、进度安排
星期
8:
00至12:
00
14:
00至18:
00
备注
19周星期二
上机编程
老师指导
19周星期三
上机编程
学生自选
19周星期四
上机编程
老师指导
19周星期五
上机编程
上机答辩
上午学生自选
2、设计内容
2.1设计总思路
1.创建一个构建数据库程序,将学生成绩写入并保存在文件中。
2.创建主函数,在主函数中实现学生成绩数据库的建立,并且将菜单在主函数中建立,将输入的学生的语文和数学相加得到学生的总分,按学生的总分排序(用冒泡法),按排序的结果排名。
在菜单中实现各函数的调用,
以实现各功能的实现。
在调用个函数时用一个循环,这样可以一次性的完成题目的要求。
3.在插入的模块中,将要插入的学生信息放在另一个结构体数据中,将插入的语文和数学相加得其总分,将总分和前面的学生总分比较,将排名在插入学生后的学生后移一位,并按这个顺序排名。
4.修改的函数中输入学生的学号,用一个循环将每一个学生的学号和这个学生相比,检验学生的学号是否和要修改的学号相一致,如果一致,就将要修改的成绩输入到该学号中。
5.查询的模块中,输入要查询的学号,并又用一个循环将要查询的学号和学生的学号相比,如果相同则显示该学生的信息。
6.在显示的模块中,又将每一个的学生排序(冒泡法),按排序的结果排名,并按讯排序的结果依次显示出来。
7.在复制的函数中先将数据从文件中读出,在将数据写到另一个文件中。
2.2各个模块的说明
程序的模块组成:
构建数据库程序主函数:
voidmain()
成绩管理系统程序主函数:
voidmain();
成绩修改函数:
voidedit();
成绩查询函数:
voidfind();
成绩显示函数:
voidshow();
总分排名函数:
voidarray();
新增学生成绩函数:
voidinsert();
计算总分函数:
voidadd();
保存修改后学生成绩函数:
voidfileput();
各个模块功能描述:
在构建数据库程序函数中实现学生成绩的写入,并保存到文件中。
在成绩管理系统程序主函数中实现学生数据库的读取,以及菜单的选择。
voidadd():
计算学生成绩总分;
voidarray():
将总分排名;
voidinsert():
将要插入的数据插入函数中;
voidedit():
输入学生的学号,修改该学生的成绩;
voidfind():
输入学生的学号,查询该学生的成绩;
voidshow():
显示学生的所有信息,包括学生的姓名,学号,语文数学成绩,总分,排名。
voidfileput():
将修改后的成绩保存到另一文件中。
2.3各个程序模块的说明
学生信息结构体:
structstu/*定义一个结构体*/
{
longintstuNum;
charname[20];
intmath;
intchinese;
intsum;
intpos;
}U[N];
学生数据显示模块:
voidshow(intn)
{printf("学号姓名数学语文总分排名\n");
inti;
for(i=0;i printf("%ld%5s%3d%3d%3d%3d\n",U[i].stuNum,U[i].name,U[i].math,U[i].chinese,U[i].sum,U[i].pos); printf("********************************************************************************\n"); } 总成绩计算函数: voidadd(intn) { inti; for(i=0;i U[i].sum=U[i].math+U[i].chinese; } 总分排名函数: voidarray(intn) { inti,j,min,temp,Upos; min=U[0].sum,Upos; for(i=0;i if(min>U[i].sum)min=U[i].sum; for(i=0;i { Upos=0; temp=U[0].sum; for(j=0;j { if(temp { temp=U[j].sum; Upos=j; } } U[Upos].pos=i+1; U[Upos].sum=min-1;/*使每一轮的循环得到的最大值小于结构数组中sum的最小值*/ } } 新增学生信息函数: voidinsert(intn) { intj; printf("请输入新增学生总数\n"); scanf("%d",&addnum); printf("学号姓名数学语文\n"); for(j=n-1;j scanf("%ld%s%d%d",&U[j].stuNum,U[j].name,&U[j].math,&U[j].chinese); } 成绩查询(修改)函数: longintfind(intn) { longintnum; inti; printf("请输入要查找(修改)学号\n"); scanf("%ld",&num); printf("学号姓名数学语文总分排名\n"); for(i=0;i { if(U[i].stuNum==num) { printf("%ld%5s%3d%3d%3d%3d\n",U[i].stuNum,U[i].name,U[i].math,U[i].chinese,U[i].sum,U[i].pos); printf("********************************************************************************\n");break; } } if(i==n) printf("error! can'tfindthestudent\n"); returni; } voidedit(intn) { printf("请输入该生成绩\n数学语文\n"); scanf("%d%d",&U[n].math,&U[n].chinese); } 保存修改后成绩函数: voidfileput(intn) { FILE*fp; inti; if((fp=fopen("teminaldata.txt","w"))==NULL) { printf("writetofileerror.\n"); exit (1); } for(i=0;i fprintf(fp,"%ld%5s%3d%3d%3d%3d\n",U[i].stuNum,U[i].name,U[i].math,U[i].chinese,U[i].sum,U[i].pos);/*利用文件格式化输出函数顺序向文件写入数据*/ fclose(fp); } 2.4原程序流程图: 输2 输1 学生成绩的插入 文件的复制 程序的结束 2.5原程序清单 2.5.1构建数据库程序清单: #include #include #defineN1000 voidmain() { FILE*fp; inti,n; printf("请输入学生总数\n"); scanf("%d",&n); structstu/*定义一个结构体*/ { longintstuNum; charname[20]; intmath; intchinese; intsum; intpos; }U[N]; printf("请输入一个或多个学生在成绩并以回车结束输入\n学号姓名数学语文\n"); for(i=0;i { U[i].sum=U[i].pos=0; scanf("%ld%s%d%d",&U[i].stuNum,U[i].name,&U[i].math,&U[i].chinese); } if((fp=fopen("basedata.txt","w"))==NULL) { printf("cannotopenfile.\n"); exit (1); } for(i=0;i fprintf(fp,"%ld%5s%3d%3d%3d%3d\n",U[i].stuNum,U[i].name,U[i].math,U[i].chinese,U[i].sum,U[i].pos);/*利用文件格式化输出函数顺序向文件写入数据*/ fclose(fp); } 2.5.2学生成绩管理系统程序清单: #include #include #defineN1000 intaddnum=0;/*定义新增学生成绩数为外部变量*/ structstu/*定义一个结构体*/ { longintstuNum; charname[20]; intmath; intchinese; intsum; intpos; }U[N]; voidadd(int);/*计算学生的总成绩*/ voidarray(int);/*对学生的总成绩进行排名*/ voidinsert(int);/*新增学生成绩*/ longintfind(int);/*根据学号查找学生成绩*/ voidedit(int);/*根据学号修改学生成绩*/ voidfileput(int);/*将修改后的数据存入一个新的文件中*/ voidshow(int);/*显示所有学生成绩*/ voidmain() { FILE*fp; if((fp=fopen("basedata.txt","r"))==NULL) { printf("cannotopenfile.\n"); exit (1); } intn,j; for(n=0;! feof(fp);n++) fscanf(fp,"%ld%s%d%d%d%d",&U[n].stuNum,U[n].name,&U[n].math,&U[n].chinese,&U[n].sum,&U[n].pos);/*利用文件格式化输入函数顺序读取文件内容*/ add(n); printf("********************************请输入下列序号**********************************\n"); printf("1按总成绩排定学生名次;2新增学生成绩;\n3查找学生成绩;4修改学生成绩;\n"); printf("********************************************************************************\n"); do { scanf("%d",&j); switch(j) { case1: {array(n);add(n);show(n);}break; case2: {insert(n);add(n+addnum);array(n+addnum);add(n+addnum);show(n);}break; case3: {array(n);add(n);find(n);}break; case4: {edit(find(n))/*函数作为实参*/;add(n);array(n);add(n);show(n);}break; default: printf("error\n"); } }while (1); fileput(n); } voidshow(intn) {printf("学号姓名数学语文总分排名\n"); inti; for(i=0;i printf("%ld%5s%3d%3d%3d%3d\n",U[i].stuNum,U[i].name,U[i].math,U[i].chinese,U[i].sum,U[i].pos); printf("********************************************************************************\n"); } voidadd(intn) { inti; for(i=0;i U[i].sum=U[i].math+U[i].chinese; } voidarray(intn) { inti,j,min,temp,Upos; min=U[0].sum,Upos; for(i=0;i if(min>U[i].sum)min=U[i].sum; for(i=0;i { Upos=0; temp=U[0].sum; for(j=0;j { if(temp { temp=U[j].sum; Upos=j; } } U[Upos].pos=i+1; U[Upos].sum=min-1;/*使每一轮的循环得到的最大值小于结构数组中sum的最小值*/ } } voidinsert(intn) { intj; printf("请输入新增学生总数\n"); scanf("%d",&addnum); printf("学号姓名数学语文\n"); for(j=n-1;j scanf("%ld%s%d%d",&U[j].stuNum,U[j].name,&U[j].math,&U[j].chinese); } longintfind(intn) { longintnum; inti; printf("请输入要查找(修改)学号\n"); scanf("%ld",&num); printf("学号姓名数学语文总分排名\n"); for(i=0;i { if(U[i].stuNum==num) { printf("%ld%5s%3d%3d%3d%3d\n",U[i].stuNum,U[i].name,U[i].math,U[i].chinese,U[i].sum,U[i].pos); printf("********************************************************************************\n");break; } } if(i==n) printf("error! can'tfindthestudent\n"); returni; } voidedit(intn) { printf("请输入该生成绩\n数学语文\n"); scanf("%d%d",&U[n].math,&U[n].chinese); } voidfileput(intn) { FILE*fp; inti; if((fp=fopen("teminaldata.txt","w"))==NULL) { printf("writetofileerror.\n"); exit (1); } for(i=0;i fprintf(fp,"%ld%5s%3d%3d%3d%3d\n",U[i].stuNum,U[i].name,U[i].math,U[i].chinese,U[i].sum,U[i].pos);/*利用文件格式化输出函数顺序向文件写入数据*/ fclose(fp); } 3、调试与分析 构建数据库系统的调试: 输入学生成绩信息. 学生成绩管理系统: 1.显示菜单: 2.显示成绩,按高低排序得出总分和排名. 3.插入学生的信息: 4.查询学生的信息: 5.修改学生的信息: 4、总结与体会 本次的C语言程序设计是我步入大学以来第一个程序设计。 由于是第一次,所以当我看到课题要求时,又是好奇又是茫然。 一时间真不知如何下手。 后来自己逐渐静下心来自习审题,发现这个程序比较复杂,设计到很多C语言知识,特别是本程序包涵了“文件”一章的内容,而不巧的是,老师在课堂上并没有重点讲授本章内容,所以我又不得不拿起书来自学,经过一番女里,终于对“文件”有一定的了解,但还是不够深刻,接下来变开始编写程序了,首先我花了很多功夫打好一个结构,主函数框架。 依靠同学的帮助,成功的讲“文件”内容应用到了程序中。 再后来,就是将一个个调用函数补充完整,就这样一个程序的雏形完工了。 最后,经过2次上机调试,对程序进行了部分修改,将输入格式进一步美化,终于,我的程序诞生了。 这次的编程,让我感触良多。 我进一步的掌握了书本上的知识。 我懂得了如何运用C语言知识去解决某些实际问题。 当然,老师的悉心指导和同学的帮助也是不可忽视的,在此感谢本次课程设计中所有辅导老师对我的关心和帮助,诚心诚意感谢他们对我的鼓励与教导,是她们在我迷茫的时候给了我些许提示,激发了我编程的灵感;还有,我在此也十分感谢本次课程设计中同学们对我的帮助,尽管本次不是团队合作,但是他们也给了我不少的提示和帮助,是他们让我有信心坚持做下来,在此感谢他们! 总之,获益匪浅啊! 电气信息学院课程设计评分表 课题名称: 学生成绩数据库管理系统设计 项目 评价 设计方案的合理性与创造性 设计与调试结果 设计说明书的质量 答辩陈述与回答问题情况 课程设计周表现情况 综合成绩 教师签名: 日期:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 学生 成绩 数据库 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)