学生成绩管理系统设计1Word文档下载推荐.docx

上传人:b****6 文档编号:20259034 上传时间:2023-01-21 格式:DOCX 页数:15 大小:64.76KB
下载 相关 举报
学生成绩管理系统设计1Word文档下载推荐.docx_第1页
第1页 / 共15页
学生成绩管理系统设计1Word文档下载推荐.docx_第2页
第2页 / 共15页
学生成绩管理系统设计1Word文档下载推荐.docx_第3页
第3页 / 共15页
学生成绩管理系统设计1Word文档下载推荐.docx_第4页
第4页 / 共15页
学生成绩管理系统设计1Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统设计1Word文档下载推荐.docx

《学生成绩管理系统设计1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统设计1Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统设计1Word文档下载推荐.docx

)和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<

stdio.h>

/*引用库函数*/

stdlib.h>

ctype.h>

string.h>

charnum[10];

charname[20];

intscore;

/*结构体数组变量*/

intmenu_select()/*菜单函数*/

charc;

do

{

system("

color1A"

);

/*设置界面颜色*/

/*运行前清屏*/

printf("

\t\t欢迎使用学生信息管理系统\n"

\t\t****学生管理信息系统****\n"

/*菜单选择*/

\t\t*1.请输入学生的信息\n"

\t\t*2.显示所有学生记录\n"

\t\t*3.所有学生成绩排序\n"

\t\t*4.添加学生管理信息\n"

\t\t*5.删除学生错误记录\n"

\t\t*6.查询学生成绩信息\n"

\t\t*7.统计系统学生信息\n"

\t\t*8.从正文中添加记录\n"

\t\t*9.将记录存储到文件中\n"

\t\t*0.退出学生管理信息系统\n"

\t\t请选择使用选项:

(0-9):

"

c=getchar();

/*读入选择*/

}while(c<

'

0'

||c>

9'

return(c-'

/*返回选择*/

}

intInput(Studentstud[],intn)/*输入若干条记录*/

{

inti=0;

charsign,x[10];

/*x[10]为清除多余的数据所用*/

while(sign!

='

n'

&

sign!

N'

)/*判断*/

\t\t\t请输入学生证号:

/*交互输入*/

scanf("

\t\t\t%s"

stud[n+i].num);

\t\t\t请输入学生姓名:

stud[n+i].name);

\t\t\t请输入学生成绩:

\t\t\t%d"

&

stud[n+i].score);

gets(x);

/*清除多余的输入*/

\t\t\t是否继续输入记录?

(Y/N)"

\t\t\t%c"

sign);

/*输入判断*/

i++;

}

return(n+i);

voidDisplay(Studentstud[],intn)/*显示所有记录*/

inti;

printf("

\t\t\t_____________________________________\n"

/*格式头*/

\t\t\t学生证号姓名成绩\n"

for(i=1;

i<

n+1;

i++)/*循环输入*/

\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;

n-1;

i++)/*冒泡法排序*/

for(j=0;

j<

n-1-i;

j++)

if(stud[j].score<

stud[j+1].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];

/*清除多余输入所用*/

\t\t\t学生证号:

/*交互式输入*/

scanf("

stud[n].num);

\t\t\t学生姓名:

stud[n].name);

\t\t\t学生成绩:

stud[n].score);

gets(x);

n++;

Sort_by_score(stud,n);

\t\t\t添加学生信息成功!

\n"

/*返回成功信息*/

return(n);

intDelete_a_record(Studentstud[],intn)/*按姓名查找,删除一条记录*/

chars[20];

inti=0,j;

\t\t\t请输入该学生姓名:

/*交互式问寻*/

%s"

s);

while(strcmp(stud[i].name,s)!

=0&

n)i++;

/*查找判断*/

if(i==n)

\t\t\t无法找到该信息!

/*返回失败信息*/

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;

\t\t\t删除学生记录成功!

return(n-1);

voidQuery_a_record(Studentstud[],intn)/*查找并显示一个记录*/

\t\t\t请输入要查询的学生学号:

{

/*输入失败信息*/

return;

\t\t\t该学生学生姓名:

%s\n"

stud[i].num);

/*输出该学生信息*/

\t\t\t该学生的成绩:

%d\n"

stud[i].score);

voidStatistic(Studentstud[],intn)/*新增功能,输出统计信息*/

inti,j=0,k=0,sum=0,flag,m=0;

doubleaver;

/*成绩平均值*/

n;

i++)/*循环输入判断*/

sum+=stud[i].score;

if(stud[j].score>

stud[i].score)j=i;

if(stud[k].score<

stud[i].score)k=i;

aver=1.0*sum/n;

\t\t\t总计%d记录\n"

n);

/*总共记录数*/

\t\t\t最高学生成绩:

/*最高分*/

\t\t\t平均成绩:

%5.2f\n"

aver);

/*平均分*/

%s姓名:

%s成绩:

stud[k].num,stud[k].name,stud[k].score);

\t\t\t最低学生成绩:

/*最低分*/

stud[j].num,stud[j].name,stud[j].score);

\n\t\t\t挂科学生信息:

i++)

flag=0;

if(stud[i].score<

60)

{

flag=1;

++m;

}

if(flag==1)

stud[i].num,stud[i].name,stud[i].score);

}

if(m)printf("

\t\t\t挂科人数为:

m);

elseprintf("

\t\t\t无学生挂科!

intAddfromText(Studentstud[],intn)/*从文件中读入数据*/

inti=0,num;

FILE*fp;

/*定义文件指针*/

charfilename[20];

/*定义文件名*/

\t\t\t请输入文件名:

filename);

/*输入文件名*/

if((fp=fopen(filename,"

rb"

))==NULL)/*打开文件*/

\t\t\t无法打开文件!

/*打开失败信息*/

;

fscanf(fp,"

%d"

num);

/*读入总记录量*/

while(i<

num)/*循环读入数据*/

fscanf(fp,"

%s%s%d"

stud[n+i].num,stud[n+i].name,&

n+=num;

fclose(fp);

/*关闭文件*/

\t\t\t成功!

\t\t\t"

voidWritetoText(Studentstud[],intn)/*将所有记录写入文件*/

\t\t\t从正文中添加记录:

w"

fprintf(fp,"

/*循环写入数据*/

n)

fprintf(fp,"

%-16s%-15s%d\n"

成功!

voidmain()/*主函数*/

intn=0;

for(;

switch(menu_select())/*选择判断*/

{

case1:

printf("

\t\t\t请输入学生信息记录:

/*输入若干条记录*/

n=Input(stu,n);

break;

case2:

\t\t\t显示所有学生信息记录:

/*显示所有记录*/

Display(stu,n);

break;

case3:

\t\t\t学生信息排序\n"

Sort_by_score(stu,n);

/*按学号排序*/

\t\t\t学生信息排序成功!

system("

case4:

\t\t\t添加学生管理记录\n"

n=Insert_a_record(stu,n);

/*插入一条记录*/

case5:

\t\t\t删除错误学生信息记录\n"

n=Delete_a_record(stu,n);

/*按姓名查找,删除一条记录*/

case6:

\t\t\t查询学生成绩信息\n"

Query_a_record(stu,n);

/*查找并显示一个记录*/

case7:

\n\t\t\t统计系统学生信息:

Statistic(stu,n);

/*新增功能,输出统计信息*/

case8:

n=AddfromText(stu,n);

case9:

\t\t\t将所有记录存储到文件中\n"

WritetoText(stu,n);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1