学生成绩管理系统源代码 数据结构与算法课设C语言版.docx
《学生成绩管理系统源代码 数据结构与算法课设C语言版.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统源代码 数据结构与算法课设C语言版.docx(32页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统源代码数据结构与算法课设C语言版
运行前
需在功程里新建个ni.txt.内容如下
7
004sun98.089.097.094.7284.0
005li98.048.078.074.7224.0
002zhao98.078.059.078.3235.0
006zhou89.097.086.090.7272.0
003qian78.098.089.088.3265.0
001chen59.060.098.068.3205.0
007wu57.076.087.073.3220.0
代码
#include//使程序包含头文件
#include//使程序包含头文件
#include//使程序包含头文件
#defineSIZE50//定义常量SIZE来控制数组的长度
voidinput_num(structStudentstud[],intn,inti);//声明学号输入函数
voidinput_name(structStudentstud[],intn,inti);//声明姓名输入函数
voidinput_score(structStudentstud[],intn,inti);//声明成绩输入函数
voidoutput_stu(structStudentstud[],intn,inti);//声明输出函数
voidstat_stu(structStudentstud[],intn,into);//声明统计函数
floatclass_avr(structStudentstud[],intn,into);//声明排序函数
voidchenji_stu(structStudentstud[],intn,into);
voiddesc_stu(structStudentstud[],intn,into);//声明降序函数
intfind_stu(structStudentstud[],intn);//声明查找函数
voiddelete_stu(structStudentstud[],intn,inty);//声明删除函数
voidamend_stu(structStudentstud[],intn,inty);//声明修改函数
voidwrite_text(structStudentstud[],intn);//声明保存文件函数
intadd_text(structStudentstud[],intn);//声明读取文件函数
structStudent/*声明结构体*/
{
charnum[10];
charname[20];
floatscore[5];
};
voidmain()/*主函数,是程序的入口*/
{
structStudentstu[SIZE];//定义一个结构数组
intcount=0;//定义整型变量count用来存放学生信息的个数,初始化为0
intchoice;//定义choice用于存放用户对主菜单的选择
inta;//用于接收主选单中scanf()函数的返回值
charjudge;//用于帮助判断输入的选择是否正确
intflag_main;//用于判断主菜单用户输入的选择是否有误
intstat_choice=0;//定义stat_choice用于用户对统计项目的选择,初始化为0
intflag_stat;//用于接收scanf()函数的返回值
intflag_find;//定义flag_find用于接收查寻函数的返回值
charman_choice;//定义man_choice用于接收用户对是否进行修改删除的选择
intcon_choice;//定义con_choice用于接收用户对修改或删除的选择
charsign_main;//定义sign_main接收用户对是否离开程序的选择
charsign_input;//定义sign_main接收用户对是否继续输入的选择
inti;//定义i,j作为控制循环的变量
while
(1)//形成一个死循环
{
system("color71");//设置输出显示颜色
/*输出主选菜单*/
printf("\n============================欢迎使用班级成绩管理系统============================\n\n");
printf("==============================请选择您要使用的功能==============================\n\n");
printf("\t\t-◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆-\n");
printf("\t\t★※★\t\t1:
班级成绩录入★※★\n\n");
printf("\t\t★※★\t\t2:
班级成绩显示★※★\n\n");
printf("\t\t★※★\t\t3:
班级成绩统计★※★\n\n");
printf("\t\t★※★\t\t4:
班级成绩查询★※★\n\n");
printf("\t\t★※★\t\t5:
班级成绩修改★※★\n\n");
printf("\t\t★※★\t\t6:
班级成绩表★※★\n\n");
printf("\t\t★※★\t\t7:
班级成绩存档★※★\n\n");
printf("\t\t★※★\t\t8:
班级成绩读入★※★\n\n");
printf("\t\t★※★\t\t0:
退出★※★\n\n");
printf("\t\t-◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆-");
printf("================================================================================");
/*输入对菜单的选择*/
do
{
flag_main=0;
printf("\n\t\t\t请您选择需要的操作(0-6):
");
fflush(stdin);
a=scanf("%d%c",&choice,&judge);
if(a<2||judge!
='\n')
{
printf("\n\t\t\t您的选择有误,请重新输入!
\n");
flag_main--;
}
}while(flag_main<0);
printf("\n\t\t\t");
system("pause");//令屏幕暂停待输入任意键后恢复运行
system("cls");//清屏
system("color71");//设置输出显示颜色
switch(choice)//把用户对主菜单的选择作为switch结构的判断条件
{
case
(1):
printf("\n\t\t请录入学生信息:
\n");
i=0;//循环前对i清零
do
{
if(count+i==50)
{
break;
}
input_num(stu,count,i);//输入学号
input_name(stu,count,i);//输入姓名
input_score(stu,count,i);//录入成绩及总成绩平均成绩
i++;//每录入一个学员信息i加1
printf("\n\t\t还需要继续录入吗?
(Y/N)");/*产生是否继续录入的条件*/
fflush(stdin);
sign_input=getchar();
}while(sign_input=='y'||sign_input=='Y');//判断
count=count+i;//计算出本次录入后总的已录入成员个数
printf("\t\t");
break;
case
(2):
/*printf("\n显示班级成绩信息:
\n");
printf("--------------------------------------------------------------------------------");
printf("学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩");/*格式化输出提示信息*/
printf("学生信息表\n");*/
printf("==================\n\n");
printf("┏━━━━━━┳━━━━━━━━┳━━━┳━━━┳━━━┳━━━┳━━━━━┓\n");
printf("┃学号┃姓名┃数据库┃算法┃C语言┃总成绩┃平均成绩┃\n");
printf("┣━━━━━━╋━━━━━━━━╋━━━╋━━━╋━━━╋━━━╋━━━━━┫\n");
for(i=0;i{
output_stu(stu,count,i);//输出单个学员信息
}
printf("┗━━━━━━┻━━━━━━━━┻━━━┻━━━┻━━━┻━━━┻━━━━━┛\n");
break;
case(3):
while(stat_choice!
=4)/*循环统计直到用户选择退出结束*/
{
printf("\t\t0:
数据库\n");
printf("\t\t1:
算法\n");
printf("\t\t2:
C语言\n");
printf("\t\t3:
平均成绩\n");
printf("\t\t4:
结束统计\n");
printf("\n\n请选择成绩统计的项目");
fflush(stdin);
flag_stat=scanf("%d%c",&stat_choice,&a);/*接收用户选择并返回值给flag_stat*/
if(flag_stat==2&&a=='\n')/*如果成功接收用户选择则根据选择进行统计若选择有误提示重新输入*/
{
if(stat_choice==0)/*根据选择0进行统计*/
{
desc_stu(stu,count,stat_choice);
stat_stu(stu,count,stat_choice);
}
elseif(stat_choice==1)/*根据选择1进行统计*/
{
desc_stu(stu,count,stat_choice);
stat_stu(stu,count,stat_choice);
}
elseif(stat_choice==2)/*根据选择2进行统计*/
{
desc_stu(stu,count,stat_choice);
stat_stu(stu,count,stat_choice);
}
elseif(stat_choice==3)/*根据选择3进行统计*/
{
desc_stu(stu,count,stat_choice);
stat_stu(stu,count,stat_choice);
}
elseif(stat_choice==4)/*选择4则break循环退出*/
{
break;
}
else/*其它错误选择提示重新输入*/
{
printf("\n您的输入有误,请重新输入!
");
}
}
else/*若没成功接收用户选择则提示重新输入*/
{
printf("\n您的输入有误,请重新输入!
");
}
}
stat_choice=getchar();//每次循环结束stat_choice归0
printf("\n");
break;
case(4):
flag_find=find_stu(stu,count);//实现用户的查找功能
/*根据查找函数的返回值为用户显示查找的信息*/
if(flag_find>0)/*返回值大于0,用户选择的是姓名查找方式*/
{
printf("\n学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩\n");
output_stu(stu,count,flag_find-1);
printf("\n--------------------------------------------------------------------------------");
}
elseif(flag_find==0)/*查找失败返回失败信息*/
{
printf("\n对不起没有找到您的成绩!
\n");
}
else/*返回值大于0,用户选择的是学号查找方式*/
{
printf("\n学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩\n");
output_stu(stu,count,-flag_find-1);
printf("\n--------------------------------------------------------------------------------");
}
break;
case(5):
flag_find=find_stu(stu,count);//实现用户的查找功能
/*根据查找函数的返回值为用户显示查找的信息*/
if(flag_find>0)/*返回值大于0,用户选择的是姓名查找方式*/
{
printf("\n学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩\n");
output_stu(stu,count,flag_find-1);
printf("\n--------------------------------------------------------------------------------");
}
elseif(flag_find==0)/*查找失败返回失败信息*/
{
printf("\n对不起没有找到您的成绩!
\n");
}
else/*返回值大于0,用户选择的是学号查找方式*/
{
printf("\n学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩\n");
output_stu(stu,count,-flag_find-1);
printf("\n--------------------------------------------------------------------------------");
}
if(flag_find!
=0)/*查找成功的情况下用户可选择修改或删除操作*/
{
fflush(stdin);
man_choice=getchar();/*接收用户选择是否进行下一步操作*/
while(man_choice)/*判断用户的选择*/
{
printf("\t\t1:
修改\n");
printf("\t\t2:
删除\n");
printf("\t\t3:
退出\n");
printf("\n请选择您的操作");
fflush(stdin);
scanf("%d",&con_choice);/*用于接收用户选择的操作*/
/*根据用户的选择完成用户选择的操作*/
if(con_choice==1)/*进行修改操作*/
{
amend_stu(stu,count,flag_find);
}
elseif(con_choice==2)/*进行删除操作,一旦删除则无法再进行修改*/
{
delete_stu(stu,count,flag_find);
count--;
printf("\n删除成功!
\n");
break;
}
elseif(con_choice==3)/*选择4则break循环退出*/
{
break;
}
else/*用户输入错误信息返回用户选择有误*/
{
printf("您的选择有误!
\n");
}
stat_choice=0;//每次循环结束stat_choice归0
}
}//修改删除操作结束
printf("\n");
break;
case(7):
printf("\t\t\t将学生成绩信息存盘:
\n\n\n");
write_text(stu,count);/*循环写入数据*/
printf("\t\t\t");
break;
case(8):
printf("\t\t\t从文件载入学生信息:
\n\n\n");
count=add_text(stu,count);/*读入文件信息*/
break;
case(6):
printf("\t\t\t学生成绩排名信息:
\n");
chenji_stu(stu,count,stat_choice);/*读入文件信息*/
printf("\t\t\t");
break;
case(0):
printf("\n\t\t\t确定您真的要退出吗?
(y/n)");/*提醒用户是否退出并接收选择*/
fflush(stdin);
sign_main=getchar();
if(sign_main=='y'||sign_main=='Y')/*若用户确定退出则返回退出信息*/
{
printf("\n\n\n\n\t\t\t谢谢使用本软件!
\n\n\n\n\n");
exit(0);//退出主程序
}
printf("\n\t\t\t");
break;
default:
//提示用户输入错误
printf("\n\t\t\t您的输入有误,请重新输入!
\n\n\t\t\t");
}
system("pause");//令屏幕暂停待输入任意键后恢复运行
system("cls");//清屏
system("color71");//设置输出屏幕颜色
}
}
/***************************************************************************
功能:
从键盘输入正确学号依次存放入stu[n].num中
参数:
参数structStudentstud[]代表结构体数组首地址,
n代表已有成员个数,i代表本次录入的第i个学号。
返回值:
空
*/
voidinput_num(structStudentstud[],intn,inti)
{
intj;/*j用于对输入字符串的遍历*/
intk;/*k用于对是否有重复学号的判断*/
intnum_flag=0;//其值作为判断录入学号是否正确的标志
while(num_flag!
=2)/*如果num_flag=2则输入学号无误,终止循环*/
{
j=0;/*每次循环后令j和num_flag的值为0*/
num_flag=0;
printf("\n\t\t学号:
\t\t\t");/*首次录入学号*/
fflush(stdin);
scanf("%9s",stud[n+i].num);
while(stud[n+i].num[j]!
='\0')/*遍历stud[n+i].num*/
{
if(stud[n+i].num[j]<48||stud[n+i].num[j]>57)/*判断输入是否错误并重新输入*/
{
j=0;
printf("\n\t\t请您用数字输入!
请重新输入!
\n");
printf("\n\t\t学号:
\t\t\t");
fflush(stdin);
scanf("%9s",stud[n+i].num);
}//循环结束