《c++课程设计---学生成绩管理系统设计589.pdf》由会员分享,可在线阅读,更多相关《c++课程设计---学生成绩管理系统设计589.pdf(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 c+课程设计-学生成绩管理系统设计 2 课 程 设 计 课程设计名称:C 语言程序设计 专 业 班 级:xxxxxxxxxxxxxxxxx 学 生 姓 名:xxxxxx _ 学 号:xxxxxxx _ 指 导 教 师:_ 课程设计时间:2011 年 12 月 _ 3 计算机科学与技术 专业课程设计任务书 学生姓名 专业班级 学号 题 目 学生成绩管理系统设计 指导教师 同组姓名 主要内容 学习掌握并熟练运用 C 语言进行程序设计;学习使用数组、指针、结构体和文件等数据结构;根据具体题目进行简单的需求分析,给出设计方案。4 任务要求 综合运用和融化所学理论知识,提高分析和解决实际问题的能力,使
2、用 C语言设计一个简单的学生成绩管理系统;完成需求分析报告,报告中对关键部分给出图表说明。要求格式规范,工作量饱满。参考文献 C 语言程序设计基础与项目实训 中国人民大学出版社。C 语言程序设计案例教程 中国铁道出版社。C 语言程序设计案例实践 清华大学出版社 5 C 语言程序设计实验报告 一、需求分析 随着计算机的飞速发展,它的应用已经十分广泛,它在人们的生产、生活、工作和学习中发挥着重要的作用。例如一个高等教育的学校,拥有数千名乃至数万名的学生,那么如何管理这么庞大的学生成绩档案呢?这时,开发一个功能完善的学生成绩管理系统就必不可少了。从学生的成绩的查询到管理实现了自动化的模式,从而提高了
3、老师的工作效率和减少工作中的出错率,对学校的学生管理更加方便。本系统根据学生成绩管理的需要,而建立一个“学生成绩管理系统”,一方便对成绩各项管理操作。本系统能对成绩进行输入和输出:能按姓名对学生进行排序,并显示学生的资料、成绩等,不过得以系统输入学生资料、成绩为前提;能添加学生成绩资料;能根据学生的姓名来查询该学生的成绩资料,并修改或是删除该学生信息;能够从文件中读取学生信息,并且添加到系统中;能把对系统锁进行的操作进行保存,及时更新系统中的数据。二、人员分工 姓名 主要负责内容 总体设计;数据程序查询主菜单程序 主菜单程序、录入数据程序的编码与调试、输出、统计、删除、追加数据程序的编码与调试
4、 修改数据程序的编码与调试 三、运行环境 硬件环境:CPU(pentium4 2.4Hz)、内存(256MB)、硬盘(80G)6 软件环境:Windows7、VC6.0 四、系统模版功能 1、系统总体框图 2、模块设计 在我们设计的程序中:包括了个人成绩录入,修改学生成绩,查询个人成绩,删除个人成绩,四大模块组成。本系统定义了结构体 allstudentinfo,用于存放学生的基本信息和成绩管理信息。进入该程序后会看到总的页面菜单,包括 1、录入学生个人成绩;2、修改学生个人成绩;3、查询学生个人成绩;4、删除学生个人成绩;5、退出成绩管理系统;再按个人需求分别进入需要的界面。我们用到了 sw
5、itch 函数语句和 if 语句和 for 循环语句等本学期学到的相关知识。个人成绩录入:首先,打开文件“个人成绩录入.dat”如果成功,将输入学生姓名,学号及语、数、外,三科成绩录入到文件当中(在录入学生信息时,系统调用函数”inputsorc()”,将新的学生信息录入到文件中。),然后判断输入是否结束,如 7 果没有错误,请继续输入,否则推出录入模块。如有错误,要按照当前操作进行修正。再依次录入要输入的学生信息,按照之前的操作进行。修改学生成绩:当用户在“学生个人信息管理”界面中按“2”进入“修改学生个人成绩”。可以对当前已录入的学生成绩进行修改,在此界面中课选择“13”之间的数值,调用相
6、应功能进行操作,并将修改后的信息保存在“学生个人成绩.dat”中。如果成功,选择要修改的内容和要修改的姓名。(在修改学生信息时,调用mofsorc()函数实现对学生 3 科成绩的修改)如果学生存在,则输入新的信息,并保存在文件中;如果不存在,输入错误信息,并选择要重新修改的内容。如果打开文件有错误,输出错误信息并推出学生管理系统。主要功能是用来修改学生资料。在系统保存了某学生资料的前提下,想要查找学生资料,可以输入学生姓名,系统就会显示学生资料和各科成绩等信息,这样就可以修改学生的资料,成绩等信息。查询个人成绩:用户在“学生个人信息界面”中,按“3”,回车,便可进入“查询个人成绩”中。在查询学
7、生个人成绩时,可调用“seasorc()”函数实现,并按照 1、学生姓名;2、学号;进行查询。如果成功,则选择学生的姓名或学号,则显示该学生信息;如果不存在,重新输入要查询的内容。然后判断是否继续查询,否则退出模块。如果打开文件有错误,输出模块信息有错误并退出信息管理器。主要功能是用来查询学生资料。在系统保存了某学生资料的前提下,想要查找学生资料,可以输入学生姓名,系统就会显示学生资料和各科成绩等信息。删除学生个人成绩:当用户在“学生个人信息管理”界面中按“4”,回车,即可进入“删除个人信息“。即出现:printf(请选择你的操作选项:1.按姓名查找删除 2.按学号查找删除);在删除学生个人信
8、息时,可调用“delsorc()”函数,按学生的姓名字段或学号查找要删除的学生个人信息,并将删除后的信息保存在文件“学生个人成绩.dat”中。主要功能是用来删除学生资料。在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生的姓名,系统查找学生资料后,就可以删除了。由于学生辍学,毕业等原因,即使对系统进行更新,删除一些没有用的信息,可以使系统更加优化。退出学生个人成绩:按照当前程序输入的步骤退出该程序。主要功能是在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统的最新操作进行保存,即使更新系统,方便下一次的操作。8 五、源程序代码 /*源程序:学生成绩管理系统*/*/学生学籍
9、管理系统./*/#include#include#include#include#include#define NAME 20#define SEX 10#define SORC 3#define STUDENTMAX 10000000 Struct studentsorc /学生成绩结构 char nameNAME;/学生姓名 int ID;/学生学号 float sorc6;/记录学生成绩 float aver;/平均分 float sum;/总分;/*学生个人成绩管理*/void sorcmeun(struct allstudentinfo*p_student)int in;char c
10、h;do 9 printf(nn);printf(t -n);printf(t|学 生 个 人 成 绩 管 理|n);printf(t|-|n);printf(t|1、录 入 学 生 个 人 成 绩|n);printf(t|2、修 改 学 生 个 人 成 绩|n);printf(t|3、查 询 学 生 个 人 成 绩|n);printf(t|4、删 除 学 生 个 人 成 绩|n);printf(t|5、浏 览 所 有 学 生 成 绩|n);printf(t|6、退 出 成 绩 管 理 系 统|n);printf(t|-|n);printf(t 请您正确的选择:);if(!scanf(%d,&
11、in)=1)while(ch=getchar()!=n)putchar(ch);printf(没有此选项,请正确选择!);getch();continue;fflush(stdin);switch(in)case 1:inputsorc(p_student);break;case 2:mofsorc(p_student);break;case 3:seasorc(p_student);break;10 case 4:delsorc(p_student);break;case 5:return;default:printf(没有此选项,请正确选择!);break;while(l);/*个人成绩录
12、入*/void inputsorc(struct allstudentinfo*p_student)int i.count,countinfo;char*tempname,ch;system(cls);if(sorcfile=fopen(filenamel,a+b)=NULL)printf(不能打开文件,请确认磁盘已满或文件是否存在);getch();exit(l);rewind(sorcfile);for(count=0;ferad(&p_studentcount.student1,sizeof(struct studentsorc),1,sorcfile)=1;count+)countin
13、e;tempname=(char*)malloc(20*sizeof(char);printf(请输入第%d 学生的姓名:,count+1);while(countSTUDENTMAX&gets(tempname)!=NULL&tempname0!=0)strcpy(p_studentcount.student1.name,tempname);printf(请输入该学生的学号:);scanf(%d,&p_studentcount.student1.ID);fflush(stdin);printf(请输入该个学生的 3 科成绩n);printf(-n);printf(n 语文:);11 scan
14、f(%f,&p_studentcount.student1.sorc0);fflush(stdin);printf(n 数学:);scanf(%f,&p_studentcount.student1.sorc0);fflush(stdin);printf(n 英语:);scanf(%f,&p_studentcount.student1.sorc0);fflush(stdin);printf(-n);fwrite(&p_studentcount+.student,sizeof(struct studentsorc),1,sorcfile);printf(确定要继续输入下一个学生的成绩吗?(y/n)
15、;ch=getchar();if(ch=y|ch=Y)system(cls);free(tempname);tempname=(char*)malloc(20*sizeof(char);printf(请输入第%d 个学生的姓名:,count+1);countinue;else system(cls);free(tempname);fclose(sorcfile);return;printf(输入有误请返回重新选择操作.!);free(tempname);fclose(sorcfile);getch();system(cls);return;/*修改学生成绩*/void mofsorc(stru
16、ct allstudengtinfo *p_student)int i,j,k,count;float sorc;12 char ch;char*tempname;count=sorcdatfile(p_student);if(!count)printf(“读取数据失败,请确认已成功录入或文件是否损坏”);getch();system(“cls”);return;tempname=(char*)malloc(20*sizeof(char);printf(“请输入要修改成绩的学生姓名:”);while(gets(tempname)!=NULL&tempname0!=o)if(strcmp(tem
17、pname,p_studenti.student1.name)continue;else printf(“请选择要修改的科目成绩:1.语文 2.英语 3.数学n”);scanf(“%d”&j);fflush(stdin);if(j=1)printf(“请重新输入%s 的语文成绩:”,tempname);scanf(“%f”&sorc);p_studenti.student1.sorc0=sorc;fflush(stdin);sorcfile=fopen(filenamel,”w+b”);/把修改后的重新写入文件夹 for(k=0;kcount;k+)if(fwrite(&p_studentk.
18、student1,sizeof(struct studentsorc),1,sorcfile)!=1)free(tempname);fclose(sorcfile);/写入失败关闭文件 printf(“修改失败,.!”);getch();system(“cls”);return;13 free(tempname);fclose(sorcfile);printf(“修改成功,返回.!”);getch();system(“cls”);return;else if(j=2)printf(“请重新输入%s 的英语成绩:”,tempname);scanf(“%f”&sorc);p_studenti.st
19、udent1.sorc2=sorc;fflush(stdin);sorcfile=fopen(filenamel,”w+b”);/把修改后的重新写入文件夹 for(k=0;kcount;k+)if(fwrite(&p_studentk.student1,sizeof(struct studentsorc),1,sorcfile)!=1)free(tempname);fclose(sorcfile);/写入失败关闭文件 printf(“修改失败,.!”);getch();system(“cls”);return;free(tempname);fclose(sorcfile);printf(“修改
20、成功,返回.!”);getch();system(“cls”);return;else if(j=3)printf(“请重新输入%s 的数学成绩:”,tempname);scanf(“%f”&sorc);p_studenti.student1.sorc2=sorc;fflush(stdin);sorcfile=fopen(filenamel,”w+b”);/把修改后的重新写入文件夹 for(k=0;kcount;k+)if(fwrite(&p_studentk.student1,sizeof(struct 14 studentsorc),1,sorcfile)!=1)free(tempname
21、);fclose(sorcfile);/写入失败关闭文件 printf(“修改失败,.!”);getch();system(“cls”);return;free(tempname);fclose(sorcfile);printf(“修改成功,返回.!”);getch();system(“cls”);return;else printf(“没有此科目,返回.!”);free(tempname);getch()system(“cls”);return;printf(“没有找到%s 的学习成绩,返回.!”,tempname);free(tempname);getch()system(“cls”);r
22、eturn;printf(“输入有误,返回.!”,tempname);free(tempname);getch()system(“cls”);return;/*查询个人成绩*/void seasorc(struct allstudentinfo*p_student)15 char*tempname;int tempID,stuID;int i,j,cont;float sum=0.0,aver;count=sorcdatfile(p_student);if(!count)printf(读取数据失败,请确认数据是否存在或文件是否损坏);getch();system(cls);return;pri
23、ntf(请选择要操作的类型:n);printf(1.按姓名查找 2.按学号查找n);scanf(%d,&tempID);fflush(stdin);if(tempID=1)tempname=(char*)malloc(20*sizeof(char);printf(请输入该学生的姓名:);while(gets(tempname)!=NULL&tempname0!=0)for(i=0;icount;i+)if(strcmp(tempname,p_studenti.student1.name)continue;else for(j=0;j3;j+)sum+=p_studenti.student1.s
24、orcj;/计算总分 aver=sum/3.0;/计算平均分 printf(%s 的学生成绩表n,tempname);printf(-n);printf(n 学号:%dn,p_studenti.student1.ID);printf(n 姓名:%dn,p_studenti.student1.name);printf(n语 16 文:%.2fn,p_studenti.student1.sorc0);printf(n数学:%.2fn,p_studenti.student1.sorc1);printf(n英语:%.2fn,p_studenti.student1.sorc2);printf(n 总分:
25、%.2fn,sum);printf(n 平均分:%.2fn,aver);printf(-n);printf(查询完毕,按任意键返回!);free(tempname);getch();system(cls);return;printf(找不到该学生的成绩,返回.!);free(tempname);getch();system(cls);return;else if(tempID=2)printf(请输入该学生的 ID 学号:);scanf(%d,&stuID);fflush(stdin);for(i=0;icount;i+)if(stuID!=p_studenti.student1.ID)con
26、tinue;else for(j=0;j3;j+)sum+=p_studenti.student1.sorcj;/计算总分 aver=sum/3.0;/计算平均分 printf(学号为%d 的学生成绩表n,stuID);printf(-n);printf(n 学号:%dn,p_studenti.student1.ID);printf(n 姓名:%dn,p_studenti.student1.name);17 printf(n语文:%.2fn,p_studenti.student1.sorc0);printf(n数学:%.2fn,p_studenti.student1.sorc1);printf
27、(n英语:%.2fn,p_studenti.student1.sorc2);printf(n 总分:%.2fn,sum);printf(n 平均分:%.2fn,aver);printf(-n);printf(查询完毕,按任意键返回!);getch();system(cls);return;printf(没有找到该学生的成绩,返回.!);getch();system(cls);return;printf(没有此选择,返回.!);getch();system(cls);return;/*删除学生成绩*voiddelsorc(struct allstudentinfo*p_student)int i
28、n,stuID;int i,count;char ch;char*empname;count=sorcdatfile(p_student);if(!count)printf(“读取数据失败!请确认已成功录入或文件是否损坏!);getch();system(cls);reyurn;18 printf(请选择你的操作选项:1.按姓名查找删除 2.按学号查找删除);scanf(%d,&in);fflush(stdin);if(in=1)tempname=(char*)malloc(20*sizeof(char);printf(*请输入你要删除的学生姓名:);gets(tempname);for(i=
29、0;icount;i+)if(strcmp(tempname,p_studenti.student1.name)continue;else for(;icount;i+)p_studenti.student1=p_studenti+1.student1;-count;/成绩减 1 sorcfile=fopen(filenamel,w+b);for(i=0;icount;i+)if(fwrite(&p_studenti.student1,sizeof(structstudentsorc),1,sorcfile)=1)continue;else printf(删除失败.!);free(tempna
30、me);fclose(sorcfile);getch();system(cls);return;printf(删除成功.!);free(tempname);fclose(sorcfile);getch();system(cls);return;19 printf(找不到该学生,返回.!);free(tempname);getch();system(cls);return;else if(in=2)printf(*请输入你要删除的学生学号:);scanf(%d,&stuID);fflush(stdin);for(i=0;icount;i+)if(stuID!=p_studenti.student
31、1.ID)continue;else for(;icount;i+)p_studenti.student1=p_studenti+1.student1;-count;sorcfile=fopen(filenamel,w+b);for(i=0;icount;i+)if(fwrite(&p_studenti.student1,sizeof(structstudentsorc),l,sorcfile)=1)continue;else printf(*删除失败.!);fclose(sorcfile);getch();system(cls);return;printf(删除成功.!);fclose(so
32、rcfile);getch();system(cls);return;20 printf(找不到该学生,返回.!);getch(0;system(cls);return;printf(输入有误,返回.!);getch();system(cls);return;else if(in=2)printf(“请输入你要删除的学生学号:”);scanf(“%d”,&stuID);fflssh(stdin);for(i=0;icount;i+)if(stuID!=p_studenti.student1.ID)countinue;else for(;icount;i+)P_studenti.studen1=
33、p_studenti+1.student1;-count;Sorcfile=fopen(filename,”w+b”);for(i=0;icount;i+)if(fwrite(&p_studenti.student1,sizeof(struct studentsorc),1,sorcfile)=1)countinue;else printf(“删除失败.”);fclose(sorcfile);getch();system(“cls”);return;printf(“删除成功”);21 fclose(sorcfile);getch();system(“cls”);return;printf(“找
34、不到该学生,返回.!”);getch();system(“cls”);return;printf(“输入有误,返回.!”);getch();system(“cls”);return;/*显示模块*/void fun()printf(tt*n);printf(tt*n);printf(tt*谢 谢 使 用!*n);printf(tt*n);printf(tt*制作人:xxxxxxx *n);printf(tt*n);printf(tt*n);printf(tt*n);六、运行结果 22 23 24 八、参考文献 1、参考书籍 总策划 北京科海。C 语言程序设计基础与项目实训。中国人民大学出版社。
35、主编 沈大林。C 语言程序设计案例教程。中国铁道出版社。那俊著 C 语言程序设计案例实践 清华大学出版社。2、网上查询 http:/ http:/ http:/ 结束语 接到 C 语言课程设计的作业我十分高兴,终 25 于学到的东西可以运用了。在老师的指导和大家的共同努力下,我们终于完成了程序的大体编制。程序中包括主函数、输入模块、查询模块、修改模块、删除模块、统计模块、输出模块、追加模块。其中在输入模块中指针文件运用的比较好,因为指针是 C 的一个特色,它能有效的表示复杂的数据结构,动态的分配内存,方便的使用字符串、数组,可谓是 C 的精华。在程序设计中我们最大的收获就是:我们真正从实践的角度体会到了 C 语言在实际生活中的作用,也深刻体会到了它带来的方便快捷。不但使我们对 C 语言有更进一步的巩固和认识还使我们懂得了团队协作的重要!让我们将一年所学的 C 语言知识学为所用,让我们感觉到了它的神奇魅力。美中不足的就是:由于我们知识的不足以及条件的限制,本系统还有许多漏洞与不足,希望老师给以批评与帮助,我们会积极改正。而且本 26 程序还处于初级阶段的学生成绩管理功能中,只实现了对学生成绩的录入、删除、修改、查询、统计、显示等简单功能,功能较简单,不一定在实际中有大的用途,程序编排中可能有烦琐之处有待进一步简化。
限制150内