学生成绩管理系统.doc_第1页
学生成绩管理系统.doc_第2页
学生成绩管理系统.doc_第3页
学生成绩管理系统.doc_第4页
学生成绩管理系统.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学校代码: 学 号: Hefei University 计算机实训报告 BACHELOR DISSERTATION 实训题目: 学生成绩管理系统 学位类别: 工学学士 摘要利用c+语言编写学习成绩管理系统,通过一个学期的学习,了解c+的用处几前景,并能做出一个小型系统,通过指针,数组,字符串,结构体,文件之间的联系与运用,建立一个学生成绩管理系统,了解并运用c+语法,算法,结构编程的思想,与c+面向对象与面向过程的思想与算法方式,通过这个系统可以做个总体概述。关键字:结构体,数组,指针,循环学生成绩管理系统1、 系统功能1. 成绩录入:借助循环输入结构体中各个成员。2. 成绩显示:借助循环输出所有录入的数据后面几个功能都可以调用。3. 数据删除:通过结构体成员的推移实现数据的删除。4. 分数排序:通过选择法对分数进行排序,可以让使用者清晰的看到成绩的优劣。5. 数据保存:通过文件读写函数建立txt文件,用以保存数据,备用,位后面的调用做准备。6. 数据调用:通过txt文件的保存,利用读写函数进行调用,为使用者节省了大量时间。7. 成绩查询:通过输入学号或者考生姓名进行对所有成绩的检索,方便查询。8. 成绩修改:借助文件指针对以保存的数据进行修改,修改姓名或分数。9. 数据增加:可能有学生补考或者缺考进行补录。成绩管理系统排序录入显示删除增加调用保存查询修改2、 界面的设计1.主界面如下图一。图一2.分数显示界面如图二图二3.分数排序界面如图三图三4.分数查询界面如图四图四5.查询界面如图五图五本系统的基本界面如上,本着简单明了的思想设计界面,清晰条理性强,没有用太多花哨的东西。三、模型设计利用专业绘图软件Microsoft Office Visio 2003制作如下图六,小组分工如图七。图六人物角色模块提供时间周建建制作int1.cpp,主模块,协同做报告(模型图)int1.cpp,intmain.cpp6-11左博伟制作int1.cpp,协同做报告(表格)int1.cpp,int1.h6-11杨柳制作int2.cpp,协同做报告(格式)int2.cpp6-11毛文云制作in1.cpp,协同做报告(文本)int2.h6-11图七四、系统实现模块一:(一)选择功能号的实现1. 模块功能:通过输入序号来进行功能的实现利用swtich循环。2. 输入输出:choicechoicechoice 形式:int choice()归属:int1.cpp3. 解决思路:通过输入choice返回choice,利用switch对于choice函数的功能的实现。4. 算法步骤:第一步:输入choice;第二步:功能号的列些;第三步:返回choice;5. 模块代码:int chioce()int chioce;cout + 欢迎进入本系统 +endl;cout1.数据录入 tt2.数据显示 endl; cout3.数据删除 tt4.数据排序 endl;cout5.数据保存 tt6.数据调用 endl;cout7.分数查询 tt8.信息修改 endl;cout9.数据添加 tt0.退出系统 endl;cout请输入序号(..9)chioce;return chioce;(2) 录入数据的实现1. 模块功能:通过本函数实现输入数据。2. 输入输出:shuru &scorenall &num 40形式:void shuru(score*scoreall,int n,int *num)归属:int1.cpp3. 解决思路:通过指针实现地址的传递,利用while循环进行数据的输入。4. 算法步骤:第一步:输入一个字符;第二步:利用while循环判断字符是否正确;第三步:输入数据,返回选择;5. 模块代码:void shuru(score*scoreall,int n,int *num)/数据的录入if(*num=n)cout对不起人数已满endl;elsecoutchoice;while(choice=y)cout请输入数据(先学号,姓名再分数)scoreall*num.noscoreall*scoreall*num.fscore;*num=*num+1;coutchoice;(3) 显示数据1. 模块功能:显示已经录入的数据。2. 输入输出:xianshi&scoreall&num40形式:void xianshi(score*scoreall,int n,int *num)归属:int1.cpp3. 解决思路:利用for循环输出。4. 算法步骤:利用for循环,结构体输出。5. 模块代码:void xianshi(score*scoreall,int n,int *num)/显示代码cout*学生分数显示如下*endl;coutt序号t学号t姓名t成绩endl;for(int i=0;i*num;i+) coutti+1tscorealli.fscoreendl;cout*学生分数显示结束*endl;(4) 删除数据1. 模块功能:输入要删除的学号,将这条记录删除。2. 输入输出: &scoreallshanchu &num 40形式:void shanchu(score*scoreall,int n,int*num)归属:int1.cpp3. 解决思路:利用for循环查找,利用for循环进行删除。4. 算法步骤:第一步:输入要删除的序号;第二步:利用for循环查找该序号;第三步:利用for循环把整个记录前移一条记录删除该条记录;5. 模块代码:void shanchu(score*scoreall,int n,int*num)/删除代码cout请输入要删除的序号a;for(int b=0;b*num;b+)/找到删除的序号if(a=scoreallb.no)break;for(;b*num;b+)scoreallb=scoreallb+1;/利用循环整体向前挪一位*num=*num-1;/注意局部变量减一(5) 分数排序1. 模块功能:对于输入的数据进行排序。2. 输入输出: &scoreallpaixu &num40形式:void paixu(score*scoreall,int n,int*num)归属:int1.cpp3. 解决思路:利用冒泡法进行数据的排序。4. 算法步骤:第一步:利用二重循环第一重控制轮数,第二轮控制次数;第二步:定义一个结构体临时变量;第三步:利用for循环显示。5. 模块代码:void paixu(score*scoreall,int n,int*num)/排序代码for(int i=0;i=*num-2;i+)/利用选择法控制轮数,控制次数for(int j=i+1;j=*num-1;j+)if(scorealli.fscorescoreallj.fscore) score t;t=scorealli;scorealli=scoreallj;scoreallj=t;cout*学生分数排序如下*endl;coutt序号t学号t姓名t成绩endl;for(int k=0;k*num;k+) couttk+1tscoreallk.fscoreendl;cout*学生分数显示结束*endl;(6) 保存数据1. 模块功能:保存已输入的数据到txt文档中。2. 输入输出:savescoretxt&scoreall&num40形式:void savescoretxt(score*scoreall,int n,int*num)归属:int1.cpp3. 解决思路:利用文件指针while判断循环进行保存。4. 算法步骤:第一步:定义文件指针;第二步:利用while循环;第三步:利用fprintf函数保存数据。5. 模块代码:void savescoretxt(score*scoreall,int n,int*num)/保存数据FILE*pfile=fopen(score.txt,w);/w表示写入for(int i=0;i*num;i+)fprintf(pfile,%4d %10s %6.2fn,scorealli.no,,scorealli.fscore);/控制格式fclose(pfile);/保存的格式(七)数据调用1. 模块功能:调用以保存的数据。2. 输入输出: loadscoretxt&scoreall&num40形式:void loadscoretxt(score*scoreall,int n,int*num)归属:int1.cpp3. 解决思路:利用文件指针while判断循环进行调用。4. 算法步骤:第一步:定义文件指针;第二步:利用while循环;第三步:利用fscanf函数调用数据,指针加一。5. 模块代码:void loadscoretxt(score*scoreall,int n,int*num)/调用代码int i=0;/定义一变量与局部变量相对应FILE*pfile=fopen(score.txt,r);/读出数据while(fscanf(pfile,%d %s %fn,&scorealli.no,&,&scorealli.fscore)=3)/一条记录的读入i+;/记录加1*num=i;/与局部变量相等 fclose(pfile);模块二:(1) 数据修改(姓名,分数)1. 模块功能:对已有数据进行修改,可以是姓名修改也可以是分数修改。2. 输入输出: xiugainamexiugaino &scoreall &num 40形式:void xiugaino(score*scoreall,int n,int*num) void xiugainame(score*scoreall,int n,int*num)归属:int2.cpp3. 解决思路:利用for循环找到记录位置,利用位置函数,用位置来改变原始数据并保存。4. 算法步骤:第一步:for循环找到该记录的序号;第二步:位置函数找到要修改记录的位置末端;第三步:修改并用文件指针保存。5. 模块代码:void xiugaino(score*scoreall,int n,int*num)/修改分数FILE*pfile=fopen(score.txt,a+);/a+表示可读可写char c1=y;while(c1=y)cout请输入要修改的姓名endl;char name20;/格式与scoreall【i】.name相对应cout请输入姓名:name;for(int i=0;i*num;i+)if(strcmp(,name)=0)/利用string中的函数进行比较break;if(in)fseek(pfile,(i+1)*24,SEEK_SET);/找到该记录的最末端 cout该学生原始信息为:tscorealli.fscoreendl;/printf(%d,ftell(pfile);找到此时的位置数coutc2;fflush(stdin);/清楚输入字符的enter与换行字符缓冲字符if(c2=y)cout请输入新的分数scorealli.fscore;/不能用为什么scanf(%d,scorealli.no);fseek(pfile,-(24-2),SEEK_CUR);/从此时的位置向前推移22字节回到本条记录的首部fprintf(pfile,%4d %10s %6.2fn,scorealli.no,,scorealli.fscore);/从此条记录的开始保存elsecout查无此人endl;c1=n;/结束死循环fclose(pfile);void xiugainame(score*scoreall,int n,int*num)/修改姓名FILE*pfile=fopen(score.txt,r+);char c1=y;while(c1=y)cout请输入要修改的姓名endl;char name20;cout请输入姓名:name;for(int i=0;in;i+)if(strcmp(,name)=0)break;if(in)fseek(pfile,(i+1)*24,SEEK_SET); cout该学生原始信息为:tscorealli.fscoreendl;coutc2;fflush(stdin);/清除缓存字符if(c2=y)cout请输入新的姓名endl;scanf(%s,);fseek(pfile,-(24-2),SEEK_CUR);fprintf(pfile,%4d %10s %6.2fn,scorealli.no,,scorealli.fscore);elsecout查无此人endl;c1=n;fclose(pfile);(2) 查找数据1. 模块功能:用于分数查询2. 输入输出:serchscorenoserchscorename &scoreall &num 40形式:void serchscoreno(score*scoreall,int n,int *num) void serchscorename(score*scoreall,int n,int *num)归属:int2.cpp3. 解决思路:利用for循环查找并显示。4. 算法步骤:第一步:输入姓名或学号;第二步:利用for循环。5. 模块代码:void serchscoreno(score*scoreall,int n,int *num)int no;cout请输入学号:no;for(int i=0;i*num;i+)if(scorealli.no=no)/找到该位置break;if(i*num)cout该学生信息为:tscorealli.fscoreendl;else cout该学生未参加过此次考试endl;void serchscorename(score*scoreall,int n,int *num)char name20;cout请输入姓名:name;for(int i=0;i*num;i+)if(strcmp(,name)=0)break;if(i*num)cout该学生信息为:tscorealli.fscoreendl;else cout该学生未参加过此次考试endl;(3) 增加数据1. 模块功能:增加学生成绩记录。2. 输入输出:add &scoreall &num 40 形式:void add(score*scoreall,int n,int*num)归属:int2.cpp3. 解决思路:利用文件指针以及位置函数进行添加数据。4. 算法步骤:第一步:利用位置指针移动到最末端;第二步:利用fprintf函数保存数据。5. 模块代码:void add(score*scoreall,int n,int*num)FILE*pfile=fopen(score.txt,a+);coutchoice;while(choice=y)fseek(pfile,(*num+1)*24,SEEK_SET);/是位置指针移到预备加1的记录的末尾cout请输入数据(先学号,姓名再分数)scoreall*num.noscoreall*scoreall*num.fscore;fseek(pfile,-(24-2),SEEK_CUR);/移到本条记录的首部fprintf(pfile,%4d %10s %6.2fn,scoreall*num.no,scoreall*,scoreall*num.fscore);*num=*num+1;coutchoice;五、项目总结通过这次项目的实现,我们基本上把这学期上的内容串联了一遍,相当于复习了一遍;对于while,for,if else等循环的格式与运用有了一定的了解,可以说熟练运用;对于指针,指针返回在各个模块中都有定义有了一定的了解;对于结构体;文件指针;位置指针都有了很大的认识,会用了,虽然不是很熟练;现在是属于有些语法,函数,可以熟练使用,但是对于里面的更加细小的区分还有不足;比如cin,scanf之间的区别还是有些模糊,在本项目的修改模块中就有体现。在制作的过程中,我发现一旦开始就不想停下来,但是一旦卡住,就会很郁闷;有些时候自己想也不一定能想出来还是需要借鉴百度,或者专业书籍进行学习;而且在编写的时候一定得养成一种理想的格式;不能那个很随意,这样的活,回来连花括号都可能遗忘,还有有些不理解的函数还得画图加以分析然后编写,比如数组,结构体等;对于c+一定得养成一种面向对象的思想,自顶而下,逐步求精;一个模块一个模块的编写与拼凑;展开多人合作编写,文件的保存录入等等,这是一个工作量很大的项目,对于初学者的我们确实是一个挑战,更是一个自我发挥的机会;感谢小组之间的默契配合,与相互理解。六、课程学习心得1.周建建的心得:学习方面:对电脑比较熟悉和了解,但是编程中涉及到太多的字符和英文代码,会出现编程错误的问题,但是能够自己解决,所以总体的学习还是不错的。老师教学:老师讲的足够详细也特别多,特别快,没有一个重点和条理,容易听漏,造成偶尔的编程错误。但是因为讲的多也容易懂。课本学习:课本有一个大致的概论,比起老师讲的,要少好多的内容,但是课本的内容不容易看的进去,比较地烦。不过课本上有很多的例题可以帮助我们学习和了解。课本知识结合老师所讲的,才能更好的学习。单靠一方面都不可以。2.毛文云的心得:学习方面:以前没有遇到过编程方面的学习,因此对这个领域比较陌生,没有基础,没有一个好的方法来快速学习。对程序的操作部熟悉,对代码和英文字符更是不了解,容易造成编程错误。老师教学:老师讲的比较详细,讲的也比较多,但是往往一次性讲完,在短时间内很难记得那么多内容,还是要靠自己领悟和学习。但是认真听老师讲过后,结合课本和网上知识还是可以自己写出编程的,就是课堂时间不能充分利用,要花自己课下的时间。教材使用:教材上讲的比较理论化,不够详细,更多的是定义和概念,需要自己去理解和实践,而编程出现错误时,并不能通过课本了解。但是教材比较具有条理性,有一个笼统的大纲。3.左博伟心得:现阶段我们已经完成了对c+的初步学习,在学习过程中,我发现对于语言的学习,是一个枯燥的学习过程,在虚拟的世界中,你需要去让你的学习更加有趣,同时,你需要去了解一个个代码,但在学习中,我同样会发现当你完成一个程序的快乐,所以,难处就是你的耐心有多大。在老师教学方面,我认为老师教学应更加严厉,更加负责,而不是简单的让我们在电脑上编程序,对于答辩,也应更加常规,让老师了解到个个学生的学习情况,这样才能让每个学生更好的学习。至于教材方面,我认为,教材的内容丰富,但是,对于教材后面的题目,我认为应提供更详细的答案讲解,因为老师不可能每个题目都讲到位,你也不可能每个题目都上课听懂。4.杨柳的心得:在学习C+的过程中,以前从未接触过这方面课程,所以学习起来比较吃力,要从头认识这门课程并深入学习,难度较大。老师的教学非常详细,讲解比较透彻。当时老师在上课过程中应该加大提问力度,这样学习起来效果可能更好。教学材料是学校自己编写,内容很丰富也很不错,给我们在学习过程中带来了很多便利。然而有时候教材的例题解读可能欠佳。七、附录代码主模块:# include# include# includeint1.h# includeint2.h# define N 40int main()score scoreallN;int num=0;while(1)switch(chioce()case 1:shuru(scoreall,40,&num);break;case 2:xianshi(scoreall,40,&num);break;case 3:shanchu(scoreall,40,&num);xianshi(scoreall,40,&num);break;case 4:paixu(scoreall,40,&num);break;case 5:savescoretxt(scoreall,40,&num);break; case 6:loadscoretxt(scoreall,40,&num);break;case 7:switch(chioce1()case 1:serchscoreno(scoreall, 40,&num);break;case 2:serchscorename(scoreall,40,&num);break;break;case 8:switch(chioce2()case 1:xiugainame(scoreall,40,&num);savescoretxt(scoreall,40,&num);break;case 2:xiugaino(scoreall,40,&num);savescoretxt(scoreall,40,&num);break;break;case 9:add(scoreall,40,&num);break;case 0:return 0;break;default: cout输错endl;自定义模块:# includeint1.h# includeint2.h# include# include # includeint chioce()int chioce;cout + 欢迎进入本系统 +作者:自动化二班第九组+endl;cout1.数据录入 tt2.数据显示 endl; cout3.数据删除 tt4.数据排序 endl;cout5.数据保存 tt6.数据调用 endl;cout7.分数查询 tt8.信息修改 endl;cout9.数据添加 tt0.退出系统 endl;cout请输入序号(..9)chioce;return chioce;void shuru(score*scoreall,int n,int *num)/数据的录入if(*num=n)cout对不起人数已满endl;elsecoutchoice;while(choice=y)cout请输入数据(先学号,姓名再分数)scoreall*num.noscoreall*scoreall*num.fscore;*num=*num+1;coutchoice;void xianshi(score*scoreall,int n,int *num)/显示代码cout*学生分数显示如下*endl;coutt序号t学号t姓名t成绩endl;for(int i=0;i*num;i+) coutti+1tscorealli.fscoreendl;cout*学生分数显示结束*endl;void shanchu(score*scoreall,int n,int*num)/删除代码cout请输入要删除的序号a;for(int b=0;b*num;b+)/找到删除的序号if(a=scoreallb.no)break;for(;b*num;b+)scoreallb=scoreallb+1;/利用循环整体向前挪一位*num=*num-1;/注意局部变量减一void paixu(score*scoreall,int n,int*num)/排序代码for(int i=0;i=*num-2;i+)/利用选择法控制轮数,控制次数for(int j=i+1;j=*num-1;j+)if(scorealli.fscorescoreallj.fscore) score t;t=scorealli;scorealli=scoreallj;scoreallj=t;cout*学生分数排序如下*endl;coutt序号t学号t姓名t成绩endl;for(int k=0;k*num;k+) couttk+1tscoreallk.fscoreendl;cout*学生分数显示结束*endl;void savescoretxt(score*scoreall,int n,int*num)/保存数据FILE*pfile=fopen(score.txt,w);/w表示写入for(int i=0;i*num;i+)fprintf(pfile,%4d %10s %6.2fn,scorealli.no,,scorealli.fscore);/控制格式fclose(pfile);/保存的格式void loadscoretxt(score*scoreall,int n,int*num)/调用代码int i=0;/定义一变量与局部变量相对应FILE*pfile=fopen(score.txt,r);/读出数据while(fscanf(pfile,%d %s %fn,&scorealli.no,&,&scorealli.fscore)=3)/一条记录的读入i+;/记录加1*num=i;/与局部变量相等 fclose(pfile);void xiugaino(score*scoreall,int n,int*num)FILE*pfile=fopen(score.txt,a+);/a+表示可读可写char c1=y;while(c1=y)cout请输入要修改的姓名endl;char name20;/格式与scoreall【i】.name相对应cout请输入姓名:name;for(int i=0;i*num;i+)if(strcmp(,name)=0)/利用string中的函数进行比较break;if(in)fseek(pfile,(i+1)*24,SEEK_SET);/找到该记录的最末端 cout该学生原始信息为:tscorealli.fscoreendl;/printf(%d,ftell(pfile);找到此时的位置数coutc2;fflush(stdin);/清楚输入字符的enter与换行字符缓冲字符if(c2=y)cout请输入新的分数scorealli.fscore;/不能用为什么scanf(%d,scorealli.no);fseek(pfile,-(24-2),SEEK_CUR);/从此时的位置向前推移22字节回到本条记录的首部fprintf(pfile,%4d %10s %6.2fn,scorealli.no,,scorealli.fscore);/从此条记录的开始保存elsecout查无此人endl;c1=n;/结束死循环fclose(pfile);void add(score*scoreall,int n,int*num)FILE*pfile=fopen(score.txt,a+);coutchoice;while(choice=y)fseek(pfile,(*num+1)*24,SEEK_SET);/是位置指针移到预备加1的记录的末尾cout请输入数据(先学号,姓名再分数)scoreall*num.noscoreall*scoreall*num.fscore;fseek(pfile,-(24-2),SEEK_CUR);/移到本条记录的首部fprintf(pfile,%4d %10s %6.2fn,scoreall*num.no,scoreall*,scoreall*num.fscore);*num=*num+1;coutchoice;# includeint1.h# includeint2.h# include# include# include int chioce1()int chioce;cout 欢迎进入查询界面 endl;cout1.学号查询 tt2.姓名查询 endl;cout请输入序号(1.2.):chioce;return chioce;void serchscoreno(score*scoreall,int n,int *num)int no;cout请输入学号:no;for(int i=0;i*num;i+)if(scorealli.no=no)/找到该位置break;if(i*num)cout该学生信息为:tscorealli.fscoreendl;else cout该学生未参加过此次考试endl;void serchscorename(score*scoreall,int n,int *num)char name20;cout请输入姓名:name;for(int i=0;i*num;i+)if(strcmp(,name)=0)break;if(i*num)cout该学生信息为:tscorealli.fscoreendl;else cout该学生未参加过此次考试endl;void xiugainame(score*scoreall,int n,int*num)FILE*pfile=fopen(score.txt,r+);char c1=y;while(c1=y)cout请输入要修改的姓名endl;char name20;cout请输入姓名:name;for(int i=0;in;i+)if(strcmp(,name)=0)break;if(in)fseek(pfile,(i+1)*24,SEEK_SET); cout该学生原始信息为:tscorealli.fsc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论