c语言课程设计学生成绩管理系统3.docx
《c语言课程设计学生成绩管理系统3.docx》由会员分享,可在线阅读,更多相关《c语言课程设计学生成绩管理系统3.docx(20页珍藏版)》请在冰豆网上搜索。
c语言课程设计学生成绩管理系统3
c语言课程设计_学生成绩管理系统3
课程设计的内容:
1、每一条记录包括一个学生的学号、姓名、3门课成绩、平均成绩。
2、输入功能:
可以一次完成若干条记录的输入。
3、显示功能:
完成全部学生记录的显示。
4、查找功能:
完成按姓名查找学生记录,并显示。
5、排序功能:
按学生平均成绩进行排序。
6、插入功能:
按平均成绩高低插入一条学生记录。
7、将学生记录存在文件score中。
8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
课程设计的要求:
1、用C语言实现系统;
2、利用结构体数组实现学生成绩的数据结构设计;
3、系统具有增加,查询,插入,排序等基本功能;
4、系统的各个功能模块要求用函数的形式实现;
5、完成设计任务并书写课程设计报告。
6、将学生成绩信息存在文件中。
#include /*暂停函数*/
#include /*I/O函数*/
#include /*其它说明*/
#include /*字符串操作函数*/
#define M1000
intN=0; /*记录已经存在的记录条数*/
intH=0;
structstudent /*定义数据结构*/
{charnumber[8];
charname[16];
floatscore[3];
floataverage;
}stud[M],temp;
/*以下是函数声明*/
voidload(void); /*读入记录*/
voidinorder(structstudentstud[]); /*排列记录*/
voidinsert(structstudentstud[]); /*插入记录*/
voidsave(structstudentstud[]); /*保存记录*/
voidprint(structstudentstud[]); /*显示记录*/
voidsearch(structstudentstud[]); /*查找记录*/
voidenter(structstudentstud[]); /*输入记录*/
voiddel(void); /*删除记录*/
voidchange(void); /*改变记录*/
voidquit(void); /*退出系统*/
intflag(structstudentstud[]); /*返回值为0或1*/
intmenu(void); /*菜单*/
main() /*主函数*/
{/*以下printf语句为打印欢迎界面语句*/
printf("\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t!
!
!
!
!
\n");
printf(" w weeeeeee l ccccccc ooooo mmmmmmmmm eeeeeee !
!
!
!
\n");
printf(" w w we e l c o o m m m e e !
!
!
\n");
printf(" w ww w eeeeee l c o om m m eeeeeee !
!
\n");
printf(" ww ww e l c o o m m m e !
\n");
printf(" w w eeeeeee llllllccccccc ooooo m m m eeeeeee \n");
printf("\t\t\t\t\t\t\t\t\t\b0");
sleep
(1);
printf("\n\n\n\n\n\t\t\t\t\t\t\t\t -----pan");
sleep
(1);
load(); /*调用读入记录函数*/
for(;;) /*无限循环*/
{switch(menu()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{case1:
enter(stud); break; /*输入记录*/
case2:
print(stud); break; /*显示要看的一页的记录*/
case3:
search(stud);break; /*查找记录*/
case4:
inorder(stud);break; /*排序*/
case5:
insert(stud);break; /*插入记录*/
case6:
save(stud); break; /*保存文件*/
case7:
change(); break; /*改变记录*/
case8:
del(); break; /*删除记录*/
case9:
quit(); /*如菜单返回值为9程序结束*/
}
}
}
/*输入数据函数*/
voidenter(structstudentstud[])
{intn=0,i,j,k,c;
charb[4];
floatsum;
printf("Howmanystudent'srecorddoyouwanttoenter?
n= ?
\b\b\b");
scanf("%d",&n); /*输入一次要输入记录数*/
for(i=0;i {sum=0; /*统记三科总分*/
printf("Inputthe%dthstudent'snumber",N+1);
scanf("%s",stud[N].number); /*输入学号*/
/*以下if-else语句判断所输记录是否存在*/
if(flag(stud)) /*调用返回值为0或1函数,判断所输入的学号是否已经存在,存在就执行if语句*/
{
printf("Therecordhasexist.\n");
printf("Inputagain.");
getch();
}
else
{printf("Inputthe%dthstudent'sname",N+1);
scanf("%s",stud[N].name); /*输入姓名*/
for(j=0;j<3;j++)
{do
{
printf("Inputthe%dthstudent'sscore(%d)",N+1,j+1); /*打印提示*/
scanf("%s",b); /*输入分数*/
stud[N].score[j]=atof(b); /*将字符串强制转换成实型,得值赋给stud[N].score[j]*/
if(stud[N].score[j]<=0||stud[N].score[j]>100) /*判断分数是否在0-100之间*/
{
k=1; /*分数不在0-100之间时k值为1*/
printf("Errorinput!
!
!
\n");
printf("Inputagain...\n"); /*打印出错提示*/
}
else
k=0; /*分数在0-100之间时k值为0*/
}while(k); /*由k值决定是否要循环*/
sum+=stud[N].score[j]; /*统记三科总分*/
}
stud[N].average=sum/3.0; /*平均分*/
printf("\nEntersuccess!
!
!
\n");
printf("\nPressanykeytoreturn.");
getch();
N++; /*记录数加1*/
i++;
H=1;
}
clrscr(); /*清屏*/
}
clrscr(); /*清屏*/
}
/*显示记录函数*/
voidprint(structstudentstud[])
{inti=0,k,max,maxb,n,flag='y';
charm[6];
/*以下if-else为判断文件中是否有记录*/
if(N==0)
{
printf("Therearenotrecord.\n");
printf("Pressanykeytoreturn."); /*当N为0时(即没有记录)打印没有记录提示*/
getch();
}
else
while(flag!
='n')
{maxb=0;i=0;
/*以下分页输出记录*/
do
{if(N%10!
=0)
{printf("\n\t\tThereare%dpagesinall.",N/10+1);
printf("\n\t\tWhichpagedoyouwanttosee?
");
}
else
{printf("\n\t\tThereare%dpagesinall.",N/11+1);
printf("\n\t\tWhichpagedoyouwanttosee?
");
}
scanf("%s",m); /*输入要显示的页数*/
k=atoi(m); /*强制把m转换成整形*/
if(k)
{k=10*(k-1); /*此时k变为第k页的第一条信息的序号*/
if(k>=N) /*判断页数是否存在*/
{printf("\n\t\tThepageisnotexist!
!
!
");
printf("\n\t\tInputagain.\n");
}
}
else
k=N+1;
}while(k>=N); /*如果页数不存在进入do-whie循环*/
/*以下if-else语句是判断第k页是否有10条语句*/
if((k+10)>N)
max=N; /*当第k页不够10条记录时*/
else
max=k+10; /*当第k页够10条记录时*/
clrscr();
/*以下for语句为取得第k页名字最大字符长度*/
for(i=k;i {n=strlen(stud[i].name);
if(n>maxb)
maxb=n;
}
i=k;
/*以下if-else是为了保证表美观*/
/*如果最大字符长度不大于8则按if
输出,则按名字方格长度为8输出*/
if(maxb<8)
{while(i {/*以下为输出记录*/
if(i%10==0)
{printf("\n\t\t\t\tPage:
%d",(k+10)/10);
printf("\n\t|---|--------|--------|--------|--------|--------|--------|");
printf("\n\t|NO:
|number| name |score
(1)|score
(2)|score(3)|average|\n");
}
printf("\t|---|--------|--------|--------|--------|--------|--------|\n");
printf("\t|%-2d| %-6s|%-8s| %-5.1f| %-5.1f| %-5.1f|%-7.2f|\n",i+1,stud[i].number,
stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],
stud[i].average);
i++;
}
printf("\t|---|--------|--------|--------|--------|--------|--------|\n");
}
/*如果最大字符长度大于8则按else
输出,见则按名字格长度为16输出*/
else
{while(i {/*以下为输出记录*/
if(i%10==0)
{printf("\n\t\t\t\tPage:
%d",(k+10)/10);
printf("\n\t\b\b|---|--------|----------------|--------|--------|--------|--------|");
printf("\n\t\b\b|NO:
|number| name |score
(1)|score
(2)|score(3)|average|\n");
}
printf("\t\b\b|---|--------|----------------|--------|--------|--------|--------|\n");
printf("\t\b\b|%-2d| %-6s|%-16s| %-5.1f| %-5.1f| %-5.1f|%-7.2f|\n",i+1,stud[i].number,
stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],
stud[i].average);
i++;
}
printf("\t\b\b|---|--------|----------------|--------|--------|--------|--------|\n");
}
printf("\t\t\t\b\bDoyouwanttogoon?
yorn?
\b\b\b\b\b\b\b");
flag=getch(); /*获取一个字符判断是否要继续显示*/
clrscr(); /*清屏*/
}
}
/*查找函数*/
voidsearch(structstudentstud[])
{inti=0,n,j;
charnumber[8],flag='y';
clrscr(); /*清屏*/
while(flag!
='n')
{i=0;
printf("\n\t\t\t\t\b\b\b\bThenumber--namelist:
\n");
printf("----------------------------------------");
printf("----------------------------------------");
/*以下while语言句为输出已有的记录的学号与名字*/
while(i {/*以下保证输出的学号和名字总长度不长于14*/
if(strlen(stud[i].number)<4)
n=4;
else
n=strlen(stud[i].number);
if(n+strlen(stud[i].name)<15) /*总长度不长于14时执行if语句*/
{if(n+strlen(stud[i].name)>6)
{printf("%-4s-",stud[i].number);
printf("%s\t",stud[i].name);
i++;
}
else
{printf("%-4s-",stud[i].number);
printf("%s\t\t",stud[i].name);
i++;
}
}
else /*总长度长于14时执行else语句*/
{printf("%-4s-",stud[i].number);
if(strlen(stud[i].number)>4)
j=(12-strlen(stud[i].number));
else
j=12-4;
for(n=0;n printf("%c",stud[i].name[n]); /*以上输出总长度为13*/
printf(".."); /*长出部分用".."省略表示*/
i++;
}
}
printf("\n---------------------------------------");
printf("-----------------------------------------");
printf("\n\t\t\bInputthestudent'snumberyouwanttosearch:
");
scanf("%s",number); /*输入要查找的记录的学号*/
i=0;
while(i {if(strcmp(stud[i].number,number)==0) /*查找记录*/
{/*输出找到的记录*/
/*当名字长度小于8时执行if语句*/
if(strlen(stud[i].name)<8)
{printf("\n");
printf("\t |---|--------|--------|--------|--------|--------|--------|\n");
printf("\t |NO:
|number| name |score
(1)|score
(2)|score(3)|average|\n");
printf("\t |---|--------|--------|--------|--------|--------|--------|\n");
printf("\t |%-2d| %-6s|%-8s| %-5.1f| %-5.1f| %-5.1f|%-7.2f|\n",i+1,stud[i].number,