1、河北科技大学课 程 设 计 报 告学生姓名:孟江曼 学号:专业班级:软件081班课程名称:数据构造课程设计设计题目:学生成绩管理系统年学期:-第二学期指引教师:郑广6月目录一需求分析阐明21主函数模块功能描述22文献合并模块功能描述23补考学生查找模块功能描述24排序模块功能描述25查找模块功能描述36. 推出模块功能描述3二.概要设计阐明3模块调用图:3三详细设计阐明41主函数模块42文献合并模块43学生信息查找模块54补考学生查找模块85排序模块96退出模块9四调试分析9五顾客使用阐明10六课程设计总结11七测试成果12八参照书目12一需求分析阐明本系统实现了学生成绩管理系统所需有关功能,
2、其中功能重要分为五项:试编写一管理系统,规定如下:1)实现对两个文献数据进行合并,生成新文献3.txt2)抽取出三科成绩中有补考学生并保存在一种新文献4.txt3)对合并后文献3.txt中数据按总分降序排序(至少采用两种排序办法实现)4)输入一种学生姓名后,能查找到此学生信息并输出成果5)规定使用构造体,链或数组等实现上述规定.如下是各功能模块功能描述:1主函数模块功能描述本模块重要功能是初始化图形界面,进入主菜单,调用各模块,实现软件功能。2文献合并模块功能描述本模块重要功能是实现对两个文献数据1.txt、2.txt进行合并,生成新文献3.txt3补考学生查找模块功能描述本模块重要功能是通过
3、对于查找数据中各科成绩来判断该学生与否需要补考,如果需要补考则将其信息写入此外一种文献。4排序模块功能描述本模块重要功能是实现对合并后数据3.txt内容按总分进行降序排序,系统采用排序方式有迅速排序和选取排序。依照顾客选取,进行不同排序方式选取。5查找模块功能描述该模块功能是当顾客输入学生信息后来,可以依照顾客需要按姓名进行不同方式查找。第一种是在文献3.txt中查找;第二种是在构造体中查找。6.推出模块功能描述调用exit函数,退出系统。二.概要设计阐明模块调用图:主函数模块文献合并模块学生信息查找模块排序模块文献查找补考学生查找模块退出模块构造体查找选取排序迅速排序1. void Unit
4、edfile()/合并1.txt和2.txt为3.txt2. void findout()/抽取出三科成绩中有补考学生并保存在一种新文献4.txt3. void sortfile()/提供两种排序办法4. void xuanze() /对合并后文献3.txt中数据按总分降序排序5. void QSort(int low,int high)/迅速排序6. void kuaisu()/读取文献,迅速排序,将成果写入3.txt7. void findoutstudent()/提供两种查找办法8. void derectfindoutstudent()/输入一种学生姓名,查找到此学生信息并输出成果9.
5、 void autofindoutstudent()/从构造体数组中查找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文献。实现对于文献合并。void Unitedfile()/合并1.
6、txt和2.txt为3.txtFILE *fp,*p;Student studd;fp=fopen(1.txt,r);/以读方式打开1.txtp=fopen(3.txt,w);/以写方式打开3.txtwhile(fscanf(fp,%s%s%d%d%d,studd.name,studd.id,&studd.chinese,&studd.math,&studd.english )!=EOF)fprintf(p,%-6s %-6s %-6d %-6d %-6dn,studd.name,studd.id,studd.chinese,studd.math,studd.english );/读取1.tx
7、t数据进入构造体中,写入3.txt,继续读取直结束fclose(fp);/关闭文献1.txtfp=fopen(2.txt,r);/以写方式打开2.txtwhile(fscanf(fp,%s%s%d%d%d,studd.name,studd.id,&studd.chinese,&studd.math,&studd.english )!=EOF)fprintf(p,%-6s %-6s %-6d %-6d %-6dn,studd.name,studd.id,studd.chinese,studd.math,studd.english );fclose(fp);fclose(p);3学生信息查找模块输
8、入一种学生姓名后,能查找到此学生信息并输出成果。调用函数findoutstudent()来实现。函数也提供了两种查找办法,通过调用函数derectfindoutstudent()实现从文献从3.txt中逐个读入数据,再进行查找判断,如果找到所需要数据,则查找结束,否则继续查找直至文献结束。autofindoutstudent()在进行第三步过程中,已经把3.txt中学生数据读入了构造体数组当中,调用函数autofindoutstudent()直接从构造体中进行查找。void derectfindoutstudent()/输入一种学生姓名,查找到此学生信息并输出成果char NAME30;int
9、 flag=0;FILE *fp;fp=fopen(3.txt,r);cinNAME;while(fscanf(fp,%s%s%d%d%d%d,stud1.name,stud1.id,&stud1.chinese,&stud1.math,&stud1.english,&stud1.sum )!=EOF)if(strcmp(stud1.name,NAME)=0)flag=1;cout-姓名-学号-语文-数学-英语-总分-endl;cout stud1.name stud1.id ;coutstud1.chinese stud1.math stud1.english stud1.sumendl;b
10、reak;if(flag=0)cout无此学生有关信息Name;for(k=1;k=n;k+)if(strcmp(studk.name,Name)=0)flag=1;cout-姓名-学号-语文-数学-英语-总分-endl;cout studk.name studk.id ;coutstudk.chinese studk.math studk.english studk.sumendl;break; if(flag=0)cout无此学生有关信息endl;void findoutstudent()/提供两种查找办法char c;cout请选取查找办法endl;cout1.从文献3中直接查找endl
11、;cout2.在运营第三步基本上查找c;cout请输入学生姓名:;if(sign1=0&c=2)cout请执行操作3后再执行此项操作!endl;return;switch(c)case1:derectfindoutstudent();/从文献3中直接查找break;case2:autofindoutstudent();/从构造体数据中直接查找break;4补考学生查找模块抽取出三科成绩中有补考学生并保存在一种新文献4.txt。调用函数findout()来实现。函数以读方式打开3.txt文献,以写方式打开4.txt文献。读入3.txt文献一种数据到构造体studd中,判断学生信息中语、数和英语中
12、与否具备不及格,如果有,则将数据写入4.txt中,直至遇到3.txt文献结束。void findout()/抽取出三科成绩中有补考学生并保存在一种新文献4.txtFILE *fp,*p;Student studd;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.chinese6
13、0|studd.english60|studd.math60)fprintf(p,%-6s %-6s %-6d %-6d %-6dn,studd.name,studd.id,studd.chinese,studd.math,studd.english );fclose(fp);fclose(p);5排序模块对合并后文献3.txt中数据按总分降序排序。调用函数sortfile()来实现。函数提供了两种排序办法,通过调用函数kuaisu()来实现迅速排序,通过调用函数xuanze()来实现选取排序。void sortfile()/提供两种排序办法char c;cout请选取排序办法:endl;co
14、ut1.选取排序endl;cout2.迅速排序c;switch(c)case1:xuanze();/选取排序break;case2:kuaisu();/迅速排序break;6退出模块通过调用函数exit()退出。四调试分析我遇到问题:1.在实现文献合并功能时,浮现错误信息:浮现以上状况因素1.txt和2.txt建立位置不对的,应和程序在同一根目录下。2.在文献合并功能实现过程中,我还遇到了不熟悉文本文献读取、写入困难。重要因素是函数使用不熟悉。fprintf()传送格式化输入到一种流中;fscanf()从一种流中执行格式化输入。3.尚有就是由于没有养成良好变成习惯,在编译过程中由于马虎等因素浮
15、现了许多小错误,像丢括号、函数名不统一等问题经常使程序编译不能通过。五顾客使用阐明本系统是一种学生成绩管理系统,实现了文献合并,补考学生提取,学生信息排序,信息查找功能。其中学生信息包具有姓名、学号、中文、数学、英语和某些。本系统菜单如下:1) 实现对两个文献数据进行合并,生成新文献3.txt 2) 抽取出三科成绩中有补考学生并保存在一种新文献4.txt 3) 对合并后文献3.txt中数据按总分降序排序 4) 输入一种学生姓名后,能查找到此学生信息并输出成果5)退出系统系统在进行有关选项操作时候,有有关递进关系,其中在执行第3项操作时候,需先执行第一项操作对文献进行合并生成第三项操作所需要3.
16、txt文献。在执行第二项操作时候应同样应先执行第一项操作。在执行第四项操作中autofindoutstudent()函数时候,应先执行第三项操作。六课程设计总结这次数据构造课程设计中,我项目是学生成绩管理系统,可以实现对学生有关数据文献合并,使我对文献读取和写入函数,及读/写方式有了一定理解。同步,使我进一步深刻理解了构造体数组应用。在实现对合并后数据按总分进行降序排序过程中,我采用排序方式有迅速排序和选取排序;这就让我有机会回顾各种排序算法应用。可以通过输入学生名字查找到本学生有关信息,采用排序办法有直接从文献中读取一种数据后进行比较查找,然后再读取一种数据,依次进行办法,此外尚有运用在排序过程中存入内存中数据进行查找。通过本次课程设计,是咱们有了锻炼自己算法使用及程序编写能力。可以让咱们在实际问题中检查自己数据构造及C语言编程学习状况。在这个过程中是我体会到语言只是工具,算法才是精华。只要解决了算法问题,程序编写才干顺利进行。因此对算法学习将会成为我后来学习重点。七测试成果八参照书目1数据构造(c语言版),编著蔚,吴伟民,清华大学计算机系列教材