学生成绩管理系统设计doc.docx
- 文档编号:25541941
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:18
- 大小:85.39KB
学生成绩管理系统设计doc.docx
《学生成绩管理系统设计doc.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统设计doc.docx(18页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统设计doc
学生信息管理系统设计
1、设计目的
设计该程序是为了实现更简洁的学生信息管理,满足管理学生学号、姓名和成绩等信息的要求。
2、总体设计(程序设计组成框图、流程图)
图1.系统程序功能组成框图
图2.系统总流程图
3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)
1.程序结构
该系统首先定义了包含:
学生学号、姓名、成绩的结构体。
然后定义了菜单函数供用户选择,紧接着定义了实现以上各功能的子函数。
最后是主函数,主函数通过switch语句实现对各子函数的调用。
2.数据描述——结构体类型定义说明
说明:
该程序定义了一个结构体,结构体变量名为student,结构体数组包含:
(char型)学号、(char型)学生姓名以及(int型)学生成绩。
该结构体如下:
typedefstruct/*定义结构体数组*/
{
charnum[10];/*学号*/
charname[20];/*姓名*/
intscore;/*成绩*/
}Student;
Studentstu[80];/*结构体数组变量*/
3.函数功能说明
程序包含11个函数,除主函数外,还有:
菜单函数—intmenu_select()、输入记录函数—intinput(studentstud[],intn)、显示所有记录函数—voidDisplay(studentstud[],intn)、排序函数—voidsort_by_score(studentstud[],intn)、插入记录函数—intInsert_a_record(studentstud[]intn)、删除记录函数—intDelete_a_record(studentstud[],intn)、查询函数—voidQuery_a_record(studentstud[],intn)、统计系统信息函数—voidStatistic(studentstud[],intn)、读取信息函数—intAddfromText(stuentstud[],intn)、存储信息函数—voidWritetoText(studentstud[],intn)等10个辅助系统完成各项功能函数。
各函数详细说明如下:
(1)主函数——voidmain()
算法描述:
利用无限次循环for(;;)和switch()实现对各函数的调用,系统根据输入的数字选项来调用相应的函数,实现相应的功能。
(2)菜单函数——intmenu_select()
函数功能:
使用者通过输入数字选项实现对各功能的使用。
当运行完任一功能,返回运行界面时,也要用到该函数。
算法描述:
使用do-while循环进行菜单选择,在循环内用getchar()读如所选择的序号,并且每次运行都运用system("cls")进行清屏。
(3)输入记录函数——intinput(studentstud[],intn)
函数功能:
输入学生学号、姓名和成绩,输入后有一个提示语句——是否继续输入。
根据需要选择Y:
继续输入记录;选择N:
停止输入。
算法描述:
使用while循环和标准输入函数进行数据的输入。
(4)显示所有记录函数——voidDisplay(studentstud[],intn)
函数功能:
将输入的所有记录显示在运行界面,或将按成绩排序后的记录显示在界面。
算法描述:
使用for循环进行循环输出,循环内运用if语句使十条数据可以实现暂停功能。
其中还包含了一些辅助的使界面更简洁、清晰的语句
(5)排序函数——voidsort_by_score(studentstud[],intn)
函数功能:
按学生成绩由高到底的顺序进行排序。
算法描述:
运用简单冒泡法排序,排序后通过显示记录功能将排序后的记录显示在界面。
(6)插入记录函数——intInsert_a_record(studentstud[]intn)
函数功能:
插入学生信息,包括学生学号、姓名和成绩,插入同时按成绩进行排序,并显示“添加成功”。
算法描述:
使用标准的输入函数输入一条学生记录,带到返回值中,并调用排序函数将该学生记录插入到排好序的记录中。
(7)删除记录函数—intDelete_a_record(studentstud[],intn)
函数功能:
按学号将需要删除的记录删除。
首先输入学号,判断是否存在该学生记录:
如果存在,回车后,显示“删除成功”;如果不存在,显示“无法找到该信息”。
算法描述:
运用标准输入函数输入需要删除记录的学生的学号,通过用while循环查找该学生信息,再运用if语句看是否存在该学生,无则返回“无法找到该信息”,有则运用for循环进行删除操作,即找到记录后用后面记录覆盖前面的记录。
这种方法虽不是直接将记录删除,只是将后边的学生记录复制到要删除的学生记录,但实现的功能是相同的。
执行完删除命令后返回“删除成功”。
(8)查询函数——voidQuery_a_record(studentstud[],intn)
函数功能:
定义该函数为无返回值的的有参函数,根据输入的姓名查找并显示学生的学号、姓名和成绩。
算法描述:
运用标准的输入函数输入要查找的学生姓名,然后进行while循环,用if语句进行判断是否存在该学生信息,无则显示“无法找到该信息”,有则将该学生信息运用标准输出函数输出。
(9)统计系统信息函数——voidStatistic(studentstud[],intn)
函数功能:
统计输入的学生信息,包括记录总数,成绩最低和最高学生的学号、姓名和成绩,以及所有学生的平均成绩和挂科学生(即成绩小于60分)的信息。
算法描述:
首先统计记录的条数输出总共的记录条数,然后对所有成绩求和,存入sum变量中,再求平均值并将平均值输出。
用两条if语句找到最高分和最低分,并分别将他们的信息输出。
最后运用for循环并定义flag作为标记挂科的变量,即当flag=1时,该学生挂科,输出他的信息。
若没有学生挂科,则输出“无学生挂科”。
(10)读取信息函数——intAddfromText(stuentstud[],intn)
函数功能:
定义该函数为一个有返回值的有参函数,根据输入的文件名进行读取记录。
算法描述:
运用标准输入函数输入文件名,通过if语句判断,如果有该文件则打开,并使用fscanf进行操作,无该文件则显示“打开失败”。
(11)存储信息函数——voidWritetoText(studentstud[],intn)
函数功能:
该函数定义为无返回值的有参函数,可以把学生记录保存自己命名的文件中。
算法描述:
运用while循环进行存储,并使用fprintf,存储完成之后显示“操作成功”,可以使用读取功能读取此文件的内容。
4、调试与测试:
调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施
(1)设计难点
设计难点包括:
数组的调用、按成绩运用冒泡法进行排序、查找挂科学生信息和文件的使用以及怎样将记录存储到指定文件等。
(2)解决方法
通过看书以及请教同学或者XX相关知识将难点一一解决。
5、源程序清单执行结果
#include
#include
#include
#include
typedefstruct/*定义结构体数组*/
{
charnum[10];/*学号*/
charname[20];/*姓名*/
intscore;/*成绩*/
}Student;
Studentstu[80];/*结构体数组变量*/
intmenu_select()/*菜单函数*/
{
charc;
do
{
system("color1A");/*设置界面颜色*/
system("cls");/*运行前清屏*/
printf("\t\t欢迎使用学生信息管理系统\n");
printf("\t\t****学生管理信息系统****\n");/*菜单选择*/
printf("\t\t*1.请输入学生的信息\n");
printf("\t\t*2.显示所有学生记录\n");
printf("\t\t*3.所有学生成绩排序\n");
printf("\t\t*4.添加学生管理信息\n");
printf("\t\t*5.删除学生错误记录\n");
printf("\t\t*6.查询学生成绩信息\n");
printf("\t\t*7.统计系统学生信息\n");
printf("\t\t*8.从正文中添加记录\n");
printf("\t\t*9.将记录存储到文件中\n");
printf("\t\t*0.退出学生管理信息系统\n");
printf("\t\t请选择使用选项:
(0-9):
");
c=getchar();/*读入选择*/
}while(c<'0'||c>'9');
return(c-'0');/*返回选择*/
}
intInput(Studentstud[],intn)/*输入若干条记录*/
{
inti=0;
charsign,x[10];/*x[10]为清除多余的数据所用*/
while(sign!
='n'&&sign!
='N')/*判断*/
{
printf("\t\t\t请输入学生证号:
");/*交互输入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\t请输入学生姓名:
");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\t请输入学生成绩:
");
scanf("\t\t\t%d",&stud[n+i].score);
gets(x);/*清除多余的输入*/
printf("\t\t\t是否继续输入记录?
(Y/N)");
scanf("\t\t\t%c",&sign);/*输入判断*/
i++;
}
return(n+i);
}
voidDisplay(Studentstud[],intn)/*显示所有记录*/
{
inti;
printf("\t\t\t_____________________________________\n");/*格式头*/
printf("\t\t\t学生证号姓名成绩\n");
printf("\t\t\t_____________________________________\n");
for(i=1;i { printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score); } system("pause"); } voidSort_by_score(Studentstud[],intn)/*按成绩排序*/ { inti,j,*p,*q,s; chart[10]; for(i=0;i for(j=0;j if(stud[j].score { strcpy(t,stud[j+1].num); strcpy(stud[j+1].num,stud[j].num); strcpy(stud[j].num,t); strcpy(t,stud[j+1].name); strcpy(stud[j+1].name,stud[j].name); strcpy(stud[j].name,t); p=&stud[j+1].score; q=&stud[j].score; s=*p; *p=*q; *q=s; } } intInsert_a_record(Studentstud[],intn)/*插入一条记录*/ { charx[10];/*清除多余输入所用*/ printf("\t\t\t学生证号: ");/*交互式输入*/ scanf("\t\t\t%s",stud[n].num); printf("\t\t\t学生姓名: "); scanf("\t\t\t%s",stud[n].name); printf("\t\t\t学生成绩: "); scanf("\t\t\t%d",&stud[n].score); gets(x); n++; Sort_by_score(stud,n); printf("\t\t\t添加学生信息成功! \n");/*返回成功信息*/ return(n); } intDelete_a_record(Studentstud[],intn)/*按姓名查找,删除一条记录*/ { chars[20]; inti=0,j; printf("\t\t\t请输入该学生姓名: ");/*交互式问寻*/ scanf("%s",s); while(strcmp(stud[i].name,s)! =0&&i if(i==n) { printf("\t\t\t无法找到该信息! \n");/*返回失败信息*/ return(n); } for(j=i;j { strcpy(stud[j].num,stud[j+1].num); strcpy(stud[j].name,stud[j+1].name); stud[j].score=stud[j+1].score; } printf("\t\t\t删除学生记录成功! \n");/*返回成功信息*/ return(n-1); } voidQuery_a_record(Studentstud[],intn)/*查找并显示一个记录*/ { chars[20]; inti=0; printf("\t\t\t请输入要查询的学生学号: ");/*交互式输入*/ scanf("\t\t\t%s",s); while(strcmp(stud[i].name,s)! =0&&i if(i==n) { printf("\t\t\t无法找到该信息! \n");/*输入失败信息*/ return; } printf("\t\t\t该学生学生姓名: %s\n",stud[i].num);/*输出该学生信息*/ printf("\t\t\t该学生的成绩: %d\n",stud[i].score); } voidStatistic(Studentstud[],intn)/*新增功能,输出统计信息*/ { inti,j=0,k=0,sum=0,flag,m=0; doubleaver;/*成绩平均值*/ for(i=0;i { sum+=stud[i].score; if(stud[j].score>stud[i].score)j=i; if(stud[k].score } aver=1.0*sum/n; printf("\t\t\t总计%d记录\n",n);/*总共记录数*/ printf("\t\t\t最高学生成绩: \n");/*最高分*/ printf("\t\t\t平均成绩: %5.2f\n",aver);/*平均分*/ printf("\t\t\t学生证号: %s姓名: %s成绩: %d\n",stud[k].num,stud[k].name,stud[k].score); printf("\t\t\t最低学生成绩: \n");/*最低分*/ printf("\t\t\t学生证号: %s姓名: %s成绩: %d\n",stud[j].num,stud[j].name,stud[j].score); printf("\n\t\t\t挂科学生信息: \n"); for(i=0;i { flag=0; if(stud[i].score<60) { flag=1; ++m; } if(flag==1) printf("\t\t\t学生证号: %s姓名: %s成绩: %d\n",stud[i].num,stud[i].name,stud[i].score); } if(m)printf("\t\t\t挂科人数为: %d\n",m); elseprintf("\t\t\t无学生挂科! \n"); } intAddfromText(Studentstud[],intn)/*从文件中读入数据*/ { inti=0,num; FILE*fp;/*定义文件指针*/ charfilename[20];/*定义文件名*/ printf("\t\t\t请输入文件名: "); scanf("\t\t\t%s",filename);/*输入文件名*/ if((fp=fopen(filename,"rb"))==NULL)/*打开文件*/ { printf("\t\t\t无法打开文件! \n");/*打开失败信息*/ ; system("pause"); return(n); } fscanf(fp,"%d",&num);/*读入总记录量*/ while(i { fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score); i++; } n+=num; fclose(fp);/*关闭文件*/ printf("\t\t\t成功! \n"); printf("\t\t\t"); system("pause"); return(n); } voidWritetoText(Studentstud[],intn)/*将所有记录写入文件*/ { inti=0; FILE*fp;/*定义文件指针*/ charfilename[20];/*定义文件名*/ printf("\t\t\t从正文中添加记录: \n");/*输入文件名*/ printf("\t\t\t请输入文件名: "); scanf("\t\t\t%s",filename); if((fp=fopen(filename,"w"))==NULL)/*打开文件*/ { printf("\t\t\t无法打开文件! \n"); system("pause"); return; } fprintf(fp,"%d\n",n);/*循环写入数据*/ while(i { fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score); i++; } fclose(fp);/*关闭文件*/ printf("成功! \n");/*返回成功信息*/ } voidmain()/*主函数*/ { intn=0; for(;;) { switch(menu_select())/*选择判断*/ { case1: printf("\t\t\t请输入学生信息记录: \n");/*输入若干条记录*/ n=Input(stu,n); break; case2: printf("\t\t\t显示所有学生信息记录: \n");/*显示所有记录*/ Display(stu,n); break; case3: printf("\t\t\t学生信息排序\n"); Sort_by_score(stu,n);/*按学号排序*/ printf("\t\t\t学生信息排序成功! \n"); printf("\t\t\t"); system("pause"); break; case4: printf("\t\t\t添加学生管理记录\n"); n=Insert_a_record(stu,n);/*插入一条记录*/ printf("\t\t\t"); system("pause"); break; case5: printf("\t\t\t删除错误学生信息记录\n"); n=Delete_a_record(stu,n);/*按姓名查找,删除一条记录*/ printf("\t\t\t"); system("pause"); break; case6: printf("\t\t\t查询学生成绩信息\n"); Query_a_record(stu,n);/*查找并显示一个记录*/ printf("\t\t\t"); system("pause"); break; case7: printf("\n\t\t\t统计系统学生信息: \n"); Statistic(stu,n);/*新增功能,输出统计信息*/ printf("\t\t\t"); system("pause"); break; case8: printf("\t\t\t从正文中添加记录: \n"); n=AddfromText(stu,n);/*新增功能,输出统计信息*/ break; case9: printf("\t\t\t将所有记录存储到文件中\n"); WritetoText(stu,n);/*循环写入数据*/ printf("\t\t\t"); system("pause");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 设计 doc
![提示](https://static.bdocx.com/images/bang_tan.gif)