学生成绩管理系统.docx
- 文档编号:4182071
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:12
- 大小:120.19KB
学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(12页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
河北科技大学
课程设计报告
学生姓名:
孟江曼学号:
080705110
专业班级:
软件081班
课程名称:
数据结构课程设计
设计题目:
学生成绩管理系统
学年学期:
2010-2011学年第二学期
指导教师:
郑广
2011年6月
目录
一.需求分析说明2
1.主函数模块功能描述2
2.文件合并模块功能描述2
3.补考学生查找模块功能描述2
4.排序模块功能描述2
5.查找模块功能描述3
6.推出模块功能描述3
二.概要设计说明3
模块调用图:
3
三.详细设计说明4
1主函数模块4
2文件合并模块4
3学生信息查找模块5
4补考学生查找模块8
5排序模块9
6退出模块9
四.调试分析9
五.用户使用说明10
六.课程设计总结11
七.测试结果12
八.参考书目12
一.需求分析说明
本系统实现了学生成绩管理系统所需的相关功能,其中的功能主要分为五项:
试编写一管理系统,要求如下:
1)实现对两个文件数据进行合并,生成新文件3.txt
2)抽取出三科成绩中有补考的学生并保存在一个新文件4.txt
3)对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)
4)输入一个学生姓名后,能查找到此学生的信息并输出结果
5)要求使用结构体,链或数组等实现上述要求.
以下是各功能模块的功能描述:
1.主函数模块功能描述
本模块的主要功能是初始化图形界面,进入主菜单,调用各模块,实现软件功能。
2.文件合并模块功能描述
本模块的主要功能是实现对两个文件数据1.txt、2.txt进行合并,生成新文件3.txt
3.补考学生查找模块功能描述
本模块的主要功能是通过对于查找数据中的各科成绩来判断该学生是否需要补考,如果需要补考则将其信息写入另外一个文件。
4.排序模块功能描述
本模块的主要功能是实现对合并后的数据3.txt的内容按总分进行降序排序,系统采用的排序方式有快速排序和选择排序。
根据用户的选择,进行不同排
序方式的选择。
5.查找模块功能描述
该模块的功能是当用户输入学生信息以后,可以根据用户需要按姓名进行不同方式的查找。
第一种是在文件3.txt中查找;第二种是在结构体中查找。
6.推出模块功能描述
调用exit函数,退出系统。
二.概要设计说明
模块调用图:
1.voidUnitedfile()//合并1.txt和2.txt为3.txt
2.voidfindout()//抽取出三科成绩中有补考的学生并保存在一个新文件4.txt
3.voidsortfile()//提供两种排序方法
4.voidxuanze()//对合并后的文件3.txt中的数据按总分降序排序
5.voidQSort(intlow,inthigh)//快速排序
6.voidkuaisu()//读取文件,快速排序,将结果写入3.txt
7.voidfindoutstudent()//提供两种查找方法
8.voidderectfindoutstudent()//输入一个学生姓名,查找到此学生的信息并输出结果
9.voidautofindoutstudent()//从结构体数组中查找
10.exit()//退出
三.详细设计说明
1主函数模块
调用各功能模块,实现文件合并、查找学生信息、排序等功能。
2文件合并模块
实现对两个文件数据进行合并,生成新文件3.txt。
调用函数Unitedfile()来实现,函数以读的方式打开1.txt文件,以写的方式打开3.txt文件,从1.txt读入一个数据并写入3.txt文件,直到遇到1.txt文件结束。
关闭1.txt文件,再以读的方式打开2.txt文件,用上述方式直到遇到2.txt文件结束。
关闭2.txt,3.txt文件。
实现对于文件的合并。
voidUnitedfile()//合并1.txt和2.txt为3.txt
{
FILE*fp,*p;
Studentstudd;
fp=fopen("1.txt","r");//以读的方式打开1.txt
p=fopen("3.txt","w");//以写的方式打开3.txt
while(fscanf(fp,"%s%s%d%d%d",studd.name,studd.id,&studd.chinese,&studd.math,&studd.english)!
=EOF)
{
fprintf(p,"%-6s%-6s%-6d%-6d%-6d\n",studd.name,studd.id,studd.chinese,studd.math,studd.english);
}//读取1.txt的数据进入结构体中,写入3.txt,继续读取直结束
fclose(fp);//关闭文件1.txt
fp=fopen("2.txt","r");//以写的方式打开2.txt
while(fscanf(fp,"%s%s%d%d%d",studd.name,studd.id,&studd.chinese,&studd.math,&studd.english)!
=EOF)
{
fprintf(p,"%-6s%-6s%-6d%-6d%-6d\n",studd.name,studd.id,studd.chinese,studd.math,studd.english);
}
fclose(fp);
fclose(p);
}
3学生信息查找模块
输入一个学生姓名后,能查找到此学生的信息并输出结果。
调用函数findoutstudent()来实现。
函数也提供了两种查找方法,通过调用函数derectfindoutstudent()实现从文件从3.txt中逐个读入数据,再进行查找判断,如果找到所需要的数据,则查找结束,否则继续查找直至文件结束。
autofindoutstudent()在进行第三步的过程中,已经把3.txt中的学生数据读入了结构体数组当中,调用函数autofindoutstudent()直接从结构体中进行查找。
voidderectfindoutstudent()//输入一个学生姓名,查找到此学生的信息并输出结果
{
charNAME[30];
intflag=0;
FILE*fp;
fp=fopen("3.txt","r");
cin>>NAME;
while(fscanf(fp,"%s%s%d%d%d%d",stud[1].name,stud[1].id,&stud[1].chinese,&stud[1].math,&stud[1].english,&stud[1].sum)!
=EOF)
{
if(strcmp(stud[1].name,NAME)==0)
{
flag=1;
cout<<"-------姓名-------学号-------语文-------数学-------英语-------总分--------"< cout<<""< cout< break; } } if(flag==0) cout<<"无此学生相关信息"< fclose(fp); } voidautofindoutstudent()//从结构体数组中查找 { intn,flag=0,k; charName[30]; n=i-1; cin>>Name; for(k=1;k<=n;k++) { if(strcmp(stud[k].name,Name)==0) { flag=1; cout<<"-------姓名-------学号-------语文-------数学-------英语-------总分--------"< cout<<""< cout< break; } } if(flag==0) cout<<"无此学生相关信息"< } voidfindoutstudent()//提供两种查找方法 { charc; cout<<"请选择查找方法"< cout<<"1.从文件3中直接查找"< cout<<"2.在运行第三步的基础上查找"< cin>>c; cout<<"请输入学生姓名: "; if(sign1==0&&c=='2') { cout<<"请执行操作3后再执行此项操作! "< return; } switch(c) { case'1': derectfindoutstudent();//从文件3中直接查找 break; case'2': autofindoutstudent();//从结构体数据中直接查找 break; } } 4补考学生查找模块 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt。 调用函数findout()来实现。 函数以读的方式打开3.txt文件,以写的方式打开4.txt文件。 读入3.txt文件的一个数据到结构体studd中,判断学生信息中语、数和英语中是否具有不及格的,如果有,则将数据写入4.txt中,直至遇到3.txt文件结束。 voidfindout()//抽取出三科成绩中有补考的学生并保存在一个新文件4.txt { FILE*fp,*p; Studentstudd; fp=fopen("3.txt","r"); p=fopen("4.txt","w"); //从3.txt中读入学生数据进结构体,判断是否有不及格的课程,如果有,则写入文件4.txt中 while(fscanf(fp,"%s%s%d%d%d",studd.name,studd.id,&studd.chinese,&studd.math,&studd.english)! =EOF) { if(studd.chinese<60||studd.english<60||studd.math<60) { fprintf(p,"%-6s%-6s%-6d%-6d%-6d\n",studd.name,studd.id,studd.chinese,studd.math,studd.english); } } fclose(fp); fclose(p); } 5排序模块 对合并后的文件3.txt中的数据按总分降序排序。 调用函数sortfile()来实现。 函数提供了两种排序方法,通过调用函数kuaisu()来实现快速排序,通过调用函数xuanze()来实现选择排序。 voidsortfile()//提供两种排序方法 { charc; cout<<"请选择排序方法: "< cout<<"1.选择排序"< cout<<"2.快速排序"< cin>>c; switch(c) { case'1': xuanze();//选择排序 break; case'2': kuaisu();//快速排序 break; } } 6退出模块 通过调用函数exit()退出。 四.调试分析 我遇到的问题: 1.在实现文件合并功能时,出现错误信息: 出现以上情况的原因1.txt和2.txt建立位置不正确,应和程序在同一根目录下。 2.在文件合并功能的实现过程中,我还遇到了不熟悉文本文件读取、写入的困难。 主要原因是函数使用不熟悉。 fprintf()传送格式化输入到一个流中;fscanf()从一个流中执行格式化输入。 3.还有就是因为没有养成良好的变成习惯,在编译的过程中因为马虎等原因出现了许多小错误,像丢括号、函数名不统一等问题经常使程序编译不能通过。 五.用户使用说明 本系统是一个学生成绩管理系统,实现了文件的合并,补考学生的提取,学生信息的排序,信息的查找的功能。 其中学生的信息包含有姓名、学号、中文、数学、英语和部分。 本系统菜单如下: 1)实现对两个文件数据进行合并,生成新文件3.txt 2)抽取出三科成绩中有补考的学生并保存在一个新文件4.txt 3)对合并后的文件3.txt中的数据按总分降序排序 4)输入一个学生姓名后,能查找到此学生的信息并输出结果 5)退出系统 系统在进行相关的选项操作的时候,有相关的递进关系,其中在执行第3项操作的时候,需先执行第一项操作对文件进行合并生成第三项操作所需要的3.txt文件。 在执行第二项操作的时候应同样应先执行第一项操作。 在执行第四项操作中的autofindoutstudent()函数的时候,应先执行第三项操作。 六.课程设计总结 这次数据结构课程设计中,我的项目是学生成绩管理系统,能够实现对学生相关数据文件的合并,使我对文件的读取和写入函数,及读/写方式有了一定了解。 同时,使我进一步深刻理解了结构体数组的应用。 在实现对合并后的数据按总分进行降序排序的过程中,我采用的排序方式有快速排序和选择排序;这就让我有机会回顾各种排序算法的应用。 能够通过输入学生名字查找到本学生的相关信息,采用的排序方法有直接从文件中读取一个数据后进行比较查找,然后再读取一个数据,依次进行方法,另外还有利用在排序过程中存入内存中的数据进行查找。 通过本次课程设计,是我们有了锻炼自己算法的使用及程序的编写能力。 可以让我们在实际的问题中检验自己数据结构及C语言编程的学习情况。 在这个过程中是我体会到语言只是工具,算法才是精华。 只要解决了算法问题,程序的编写才能顺利进行。 所以对算法的学习将会成为我以后学习的重点。 七.测试结果 八.参考书目 [1]数据结构(c语言版),编著蔚,吴伟民,清华大学计算机系列教材
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统