C语言课程设计学生成绩管理系统.docx
- 文档编号:27101305
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:46
- 大小:148.70KB
C语言课程设计学生成绩管理系统.docx
《C语言课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生成绩管理系统.docx(46页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生成绩管理系统
——学生成绩管理程序
题目要求···················2
设计目的···················2
总体设计···················3
详细设计···················3
调试与测试·················12
源程序···················14
总结···················30
学生成绩管理程序
一.题目要求
1.问题描述:
对在校学生几门课程的考试成绩进行统一管理.每个学生记录包括学号,姓名,年龄,数学,英语,物理成绩,默认以学号为序存放.
2.要求:
(1)一个文件按以班为单位存储学生记录.
(2)将允许的操作分为四种,以A,B,C,D,E,F为标志:
A:
插入一个学生记录;
B:
修改学生记录;
C:
删除一个学生记录;
D:
查找一个学生记录;
E:
浏览学生成绩:
F:
退出
3.计算学生的总成绩.
4.按学号排序输出全班学生成绩表
.
二.设计目的
根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择.
三.总体设计
根据上面的需求分析,可以将这个系统分为以下模块:
输入模块,修改模块,删除模块,查找模块,显示模块.
学生成绩管理系统
数据输入
数据显示
数据修改
数据删除
数据查找
四.详细设计
1.主函数:
主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择.
流程图:
显示一系列功能模块
N
输入n,判断n是否是A--F
Y
根据n的值调用各功能模块函数
[程序]:
//#include"head.h"
intmenu_select()
{
charc;
printf("\n\n");
printf("|1.增加学生记录5.统计信息|\n");
printf("|2.查询学生记录6.打开文件|\n");
printf("|3.修改学生记录7.保存文件|\n");
printf("|4.学生纪录排序8.显示记录|\n");
printf("|0.退出系统|\n");
printf("\n\n");
printf("请选择(0-8):
");
c=getchar();
getchar();
return(c-'0');
}
2.输入模块:
[分析]:
单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;分数为整数,采用整数;数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理.
如果要存放若干学生信息就用结构体数组:
voidaddrecord(studentstud[])
{
inti=0,j,num;
charstr[5];
if(numstus!
=0)
{
printf("已有记录存在是否覆盖?
(y/n)\n");
gets(str);
if(str[0]=='Y'||str[0]=='y')
i=0;
elsei=numstus;
}
printf("请输入增加的学生信息条目数:
");
scanf("%d",&num);
if(i==0)
numstus=num;
elsenumstus+=num;
if(numstus>lens)
{
lens+=50;
pointer=(student*)realloc(pointer,lens*LEN);
}
printf("请输入学生信息:
\n");
for(;i { getchar(); printf("请输入学号: "); gets(pointer[i].number); printf("请输入姓名: "); gets(pointer[i].name); printf("请输入性别(男/女1/0): "); gets(pointer[i].sex); if(pointer[i].sex[0]=='0')strcpy(pointer[i].sex,"女"); elsestrcpy(pointer[i].sex,"男"); printf("请输入各科成绩: (按“语文,数学,英语,历史,政治”的顺序): "); stud[i].score=0; for(j=0;j { scanf("%f",&stud[i].subject[j]);/*计算总分*/ stud[i].score+=stud[i].subject[j]; } stud[i].average=stud[i].score/numsubs;/*计算平均分*/ } count(stud);/*附名次*/ display(stud,0,numstus-1); getchar(); } intnumstus; intlens; student*pointer; voidmain() { inti=1; charstr[2]; lens=100; pointer=(student*)malloc(lens*LEN);/*分配内存*/ numstus=0; welcome();/*欢迎界面*/ while(i>0) { i=menu_select();/*控制菜单*/ switch(i) { case1: addrecord(pointer);break;/*增加学生信息*/ case2: findrecord(pointer);break;/*查询学生信息*/ case3: amendrecord(pointer);break;/*修改学生信息*/ case4: sort(pointer);break;/*学生信息排序*/ case5: statistic(pointer);break;/*统计信息*/ case6: openfile(pointer);break;/*打开文件*/ case7: writetotext(pointer);break;/*保存文件*/ case8: display(pointer,0,numstus-1);break;/*显示记录*/ case0: if(numstus! =0)printf("是否保存当前记录? (y/n)"); gets(str); if(str[0]=='y'||str[0]=='Y') writetotext(pointer); i=-1;break;/*退出系统*/ default: printf("请输入数字0~8: \n");i=1;/*输入错误*/ } } printf("\t\t欢迎再次使用本系统。 \n\n"); display1(); } 3.修改模块: [分析]: 用户输入要修改学生的学号,根据学生的学号等信息查找学生记录,并提示用户修改该记录的哪部分信息.根据用户选择修改相应的信息. [流程图]: 输入要修改的学号 YN Y N [程序]: voidxiugai() { if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)/*检查是否出错*/ { printf("Cannotopenthisfile.\n"); exit(0); } printf("\nPLeaseshuruxiugaixuehao: "); scanf("%d",&i);getchar(); while((fread(&data,sizeof(data),1,fp))==1) { j=atoi(data.xuehao); if(j==i) { printf("xuehao: %s\nmingzi: %s\nnianling: %s\n",data.xuehao,data.mingzi,data.nianling); printf("Pleaseshurumingzi: "); gets(data.mingzi); printf("Pleaseshurushuxuescore: "); gets(temp);data.score[0]=atof(temp); printf("Pleaseinputyingyuscore: "); gets(temp);data.score[1]=atof(temp); printf("Pleaseinputwuliscore: "); gets(temp);data.score[2]=atof(temp); data.score[3]=data.score[0]+data.score[1]+data.score[2]; }fwrite(&data,sizeof(data),1,fp1); } fseek(fp,0L,0);/*将位置指针移到离头文件0个字节处*/ fseek(fp1,0L,0); while((fread(&data,sizeof(data),1,fp1))==1) { fwrite(&data,sizeof(data),1,fp); } fclose(fp); fclose(fp1); } 4.删除模块: [分析]: 该模块的功能是,用户输入要删除的学生的学号,根据学生学号查找记录并删除. [流程图]: 输入要删除的学号 YN Y N [程序]: voiddeleterecord(studentstu[],inti)/*删除信息*/ { intj; while(i>=0) { for(j=i;j stu[j]=stu[j+1]; numstus--; printf("删除成功! \n"); } } voidcount(studentstud[]) { inti,j; for(i=0;i { stud[i].index=1; for(j=0;j if(stud[j].score>stud[i].score) stud[i].index++; } } 5.查找模块: [需求分析]: 该模块的功能是根据输入的学生的姓名查找对应的记录,找到以后,显示相应的学生信息. [流程图]: YN N Y [程序]: //#include"head.h" intfindrecord(studentstud[])/*查找信息*/ { charstr[2]; inti,num; if(numstus==0) { printf("没有可被查找的记录\n"); return-1; } else { printf("以何种方式查找? \n1.学号\t2.姓名\t3.名次\n"); gets(str); if(str[0]=='1')/*按学号查找*/ { printf("请输入学号: "); gets(str); for(i=0;i<=numstus;i++) if(strcmp(str,stud[i].number)==0) { display(stud,i,i); break; } elsecontinue; } elseif(str[0]=='2')/*按姓名查找*/ { printf("请输入姓名: "); gets(str); for(i=0;i<=numstus;i++) if(strcmp(str,stud[i].name)==0) { display(stud,i,i); break; } elsecontinue; } elseif(str[0]=='3')/*按名次查找*/ { printf("请输入名次: "); scanf("%d",&num); getchar(); for(i=0;i<=numstus;i++) if(num==stud[i].index) { display(stud,i,i); break; } elsecontinue; } if(i>numstus) { printf("没有查找所要的信息。 \n"); return-1; } returni; } } 6.显示模块: [需求分析]: 该模块的功能是显示所有学生记录信息. [程序]: voidwelcome() { printf("\t*************************************************************\n"); printf("\t\t\t\t**学生成绩管理系统**\n\t\t\t\t倾情奉献欢迎使用! \n"); printf("\t*************************************************************\n"); } voidshowtable() { printf("---------------------------------------------------------------------------------------\n"); printf("学号\t姓名\t性别\t语文\t数学\t英语\t历史\t政治\t总分\t平均分\t名次\n"); printf("---------------------------------------------------------------------------------------\n"); } voiddisplay(studentstud[],intn1,intn2) { inti; showtable();/*显示表头*/ for(i=n1;i<=n2;i++) printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index); /*通过循环输出数据*/ } voiddisplay1() { printf("\t\t本系统由计科二班制作\n\n"); printf("\t\t制作人员列表: \n\n"); printf("\t\t殷增锋\t\t\t邵超\n"); printf("\n\n"); getchar(); } 五.调试与测试 在这次课程设计中,程序编写过程中遇到了很多的问题,各种函数的运用也让人头疼,在上机编译运行过程中出现了很多的错误,例如: 各种数据类型的定义,函数的调用等等。 但最终还是在老师同学的帮助下进行了各种代码的编写与修改,最终程序成功的运行。 下面是各个模块的界面图 (1)主菜单函数: (2): 输入模块: (3): 显示模块: (4): 删除模块: (5): 查找模块: (6): 修改模块: 6.程序源 #ifndefH_STUDENT_HH #defineH_STUDENT_HH #include"stdio.h" #include"string.h" #include"malloc.h" #defineLENsizeof(structmessage_student)/*一个结构体数组元素的长度*/ #definenumsubs5/*学科数目*/ typedefstructmessage_student/*结构体定义*/ { charnumber[6]; charname[20]; charsex[4]; floatsubject[numsubs]; floatscore; floataverage; intindex; }student; externintnumstus;/*学生数目*/ externstudent*pointer;/*指向结构体数组*/ externintlens; intmenu_select();/*函数声明*/ intopenfile(studentstu[]); intfindrecord(studentstud[]); intwritetotext(studentstud[]); voidwelcome(); voiddisplay1(); voidshowtable(); voidsort(studentstu[]); voiddeleterecord(studentstu[],inti); voidaddrecord(studentstud[]); voiddisplay(studentstud[],intn1,intn2); voidamendrecord(studentstud[]); voidcount(studentstud[]); voidsortnum(studentstud[]); voidsortnum2(studentstud[]); voidsortname(studentstud[]); voidsortname2(studentstud[]); voidsortcount(studentstud[]); voidsortcount2(studentstud[]); voidstatistic(studentstud[]); voiddisplay1(); #endif //#include"head.h" intmenu_select() { charc; printf("\n\n"); printf("|1.增加学生记录5.统计信息|\n"); printf("|2.查询学生记录6.打开文件|\n"); printf("|3.修改学生记录7.保存文件|\n"); printf("|4.学生纪录排序8.显示记录|\n"); printf("|0.退出系统|\n"); printf("\n\n"); printf("请选择(0-8): "); c=getchar(); getchar(); return(c-'0'); } //#include"head.h" intfindrecord(studentstud[])/*查找信息*/ { charstr[2]; inti,num; if(numstus==0) { printf("没有可被查找的记录\n"); return-1; } else { printf("以何种方式查找? \n1.学号\t2.姓名\t3.名次\n"); gets(str); if(str[0]=='1')/*按学号查找*/ { printf("请输入学号: "); gets(str); for(i=0;i<=numstus;i++) if(strcmp(str,stud[i].number)==0) { display(stud,i,i); break; } elsecontinue; } elseif(str[0]=='2')/*按姓名查找*/ { printf("请输入姓名: "); gets(str); for(i=0;i<=numstus;i++) if(strcmp(str,stud[i].name)==0) { display(stud,i,i); break; } elsecontinue; } elseif(str[0]=='3')/*按名次查找*/ { printf("请输入名次: "); scanf("%d",&num); getchar(); for(i=0;i<=numstus;i++) if(num==stud[i].index) { display(stud,i,i); break; } elsecontinue; } if(i>numstus) { printf("没有查找所要的信息。 \n"); return-1; } returni; } } //#include"head.h" intopenfile(studentstu[]) { inti=0,j; FILE*fp; charfilename[20],str[2]; if(numstus! =0) { printf("已经有记录存在,是否保存? (y/n)"); gets(str); if(str[0]=='y'||str[0]=='Y') writetotext(stu); } printf("请输入文件名: "); gets(filename); numstus=0; if((fp=fopen(filename,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 成绩管理系统