学生成绩管理系统.docx

上传人:b****7 文档编号:10787662 上传时间:2023-02-22 格式:DOCX 页数:24 大小:190.56KB
下载 相关 举报
学生成绩管理系统.docx_第1页
第1页 / 共24页
学生成绩管理系统.docx_第2页
第2页 / 共24页
学生成绩管理系统.docx_第3页
第3页 / 共24页
学生成绩管理系统.docx_第4页
第4页 / 共24页
学生成绩管理系统.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统.docx

《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(24页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统.docx

学生成绩管理系统

级语言程序设计实验报告

班级:

计算机科学与技术姓名:

学号:

课程名称

高级语言程序设计

实验项目

学生成绩管理系统

实验项目类型

验证

演示

综合

设计

指导教师

成绩

一、实验目的

(1)综合运用C语言的知识,用模块化程序设计思想分析系统所要实现的功能,运用函数实现各功能模块,再通过相应的流程控制语句在主函数中实现所有功能。

(2)会用结构体正确描述每一条学生记录的信息,掌握用结构体数组或单链表结构存储所处理的数据。

(3)能通过文件实现数据的永久性存储,以及通过文件减少键盘录入操作。

(4)设计友好的人机交互菜单,通过相应的流程图控制语句的正确使用,在主函数中根据选择强调用实现各功能的函数,从而实现一个完整的小型管理系统。

二、实验步骤

1.定义学生结构体类型structstudent,每个学生包括学号,姓名,性别,几门功课(课程门数自己定义),总分。

为存储一批学生数据(学生人数可由用户确定),可以定义该类型的一维数组或以该类型为数据类型定义单链表结构。

结构体类型的定义如下如:

#defineN1000

#defineM3

structStudent

{

intnum;

charname[20];

charsex[4];

intscore[M];

inttotal;

}stu[N];

2.输入若干学生的信息(人数自定,这里总分不能输入,需要通过计算求得),并按学号升序输出所有学生的完整信息到屏幕,并将结果写到文件stu_info.dat中。

以写的方式创建文件stu_info.da,并检查创建是否成功:

FILE*fp;

if((fp==fopen("stu_info.dat","r"))==NULL)

{

Printf("cannotopenfile!

");

Exit(0);

}

将结构体数组中的学生信息顺序地输入到文件stu_info.da。

这样的操作我给它声明了一个函数,函数声明如下:

voidinput(structStudentst[],intn);

3.根据总分,选择一种排序方法按总分由高到低排名,用一个函数来实现,函数声明在下面,给出每个学生的名次,并将每个学生的学号,姓名,名次这3个信息写入到rank.dat文件中。

一般来说,只要是按序输入的话,名次就很好给出。

FILE*fp;

fp=fopen("Q:

\\rank.dat","wb");

if(fp==NULL)

{

printf("不能打开文件!

\n");

exit

(1);

}

voidsort_sum(structStudentst[],intn);

4.对学生信息的查找可以有多中方法,在这里我用折半查找和顺序查找这两种方法,自己定义两个函数分别实现两种功能。

注意查找的学生学号肯定是已经写入到stu_info.da文件中,下面是两个函数的声明,具体代码在源程序中:

voidseek_1(structStudentst[],intno,intn);

voidseek_2(structStudentst[],intno,intn);

5.对学生信息的更新包括插入,删除,修改等操作,将用三个函数分别来实现这些功能。

(1).增加一条学生信息时,先根据学号找到要插入的位置(数组下标),然后插入,插入点后的个数组的下标加1,如果结构体数组有n个学生信息,则结果数组中的学生信息个数为n+1,注意n+1<=N;

(2).删除一条学生信息时,先根据学号找到要删除的位置(数组下标),然后删除指定元素,删除点后的个数组的下标减1,如果结构体数组有n个学生信息,则结果数组中的学生信息个数为n-1;

(3)修改一条学生信息时,先根据学号找到要修改元素的位置(数组下标),然后对指定元素(结构体变量)的每个成员分别修改。

这个3个函数的声明如下:

voiddel(structStudentst[],intno,intn);

voidins(structStudentst[],intno,intn);

voidmod(structStudentst[],intno,intn);

6.在main()函数中设计一个菜单对以上模块选择执行,实现完整的学生成绩管理系统。

#include

#include

intmain()

{

intchoice,i,n;

printf("******************************************************\n\n");

printf("欢迎进入学生成绩管理系统\n\n");

printf("******************************************************\n\n");

menu();

while

(1)

{

printf("请选择:

");

scanf("%d",&choice);

switch(choice)

{

case1:

printf("请输入你将要录入学生的个数:

");

scanf("%d",&n);

input(stu,n);

menu();

break;

case2:

printf("按总分排序后如下:

\n");

sort_sum(stu,n);

printf("\n");

menu();

break;

case3:

printf("\n请输入你要查找的学生的学号:

\n");

scanf("%d",&i);

seek_1(stu,i,n);

menu();

break;

case4:

printf("\n请输入你要查找的学生的学号:

\n");

scanf("%d",&i);

seek_2(stu,i,n);

menu();

break;

case5:

printf("\n请输入要删除的学生的学号:

");

scanf("%d",&i);

del(stu,i,n);

menu();

break;

case6:

printf("\n请输入你要插入的学生的学号:

\n");

scanf("%d",&i);

ins(stu,i,n);

menu();

break;

case7:

printf("\n请输入你要修改的学号:

");

scanf("%d",&i);

mod(stu,i,n);

menu();

break;

case8:

printf("\n打印n个学生信息:

\n");

print(stu,n);

menu();

break;

case0:

exit(0);

default:

printf("errorinput!

请重输!

");

}

}

return0;

}可以声明一个menu()函数。

voidmenu()

{

printf("1.录入学生信息\n");

printf("2.根据总分排序\n");

printf("3.用折半查找学生信息\n");

printf("4.用顺序法查找学生信息\n");

printf("5.根据学号删除学生信息\n");

printf("6.根据学号插入学生信息\n");

printf("7.根据学号修改学生信息\n");

printf("8.打印n个学生信息\n");

printf("0.退出\n");

}

7.需要同学们自己定义的函数的原型如下:

voidinput(structStudentst[],intn);

voidsort_sum(structStudentst[],intn);

voidseek_1(structStudentst[],intno,intn);

voidseek_2(structStudentst[],intno,intn);

voiddel(structStudentst[],intno,intn);

voidins(structStudentst[],intno,intn);

voidmod(structStudentst[],intno,intn);

voidprint(structStudentst[],intn);

三.程序源代码:

#include

#include

#include

#include

#include

#defineN1000

#defineM3

voidmenu();

voidinput(structStudentst[],intn);

voidsort_sum(structStudentst[],intn);

voidseek_1(structStudentst[],intno,intn);

voidseek_2(structStudentst[],intno,intn);

voiddel(structStudentst[],intno,intn);

voidins(structStudentst[],intno,intn);

voidmod(structStudentst[],intno,intn);

voidprint(structStudentst[],intn);

structStudent

{

intnum;

charname[20];

charsex[4];

intscore[M];

inttotal;

}stu[N];

intmain()

{

intchoice,i,n;

printf("*******************************************************\n\n");

printf("欢迎进入学生成绩管理系统\n\n");

printf("*******************************************************\n");

menu();

while

(1)

{

printf("请选择:

");

scanf("%d",&choice);

switch(choice)

{

case1:

printf("请输入要录入学生的个数:

");

scanf("%d",&n);

input(stu,n);

menu();

break;

case2:

printf("按总分排序后如下:

\n");

sort_sum(stu,n);

printf("\n");

menu();

break;

case3:

printf("\n请输入你要查找的学生的学号:

\n");

scanf("%d",&i);

seek_1(stu,i,n);

menu();

break;

case4:

printf("\n请输入你要查找的学生的学号:

\n");

scanf("%d",&i);

seek_2(stu,i,n);

menu();

break;

case5:

printf("\n请输入要删除的学生的学号:

");

scanf("%d",&i);

del(stu,i,n);

menu();

break;

case6:

printf("\n请输入你要插入的学生的学号:

\n");

scanf("%d",&i);

ins(stu,i,n);

menu();

break;

case7:

printf("\n请输入你要修改的学号:

");

scanf("%d",&i);

mod(stu,i,n);

menu();

break;

case8:

printf("\n打印n个学生信息:

\n");

print(stu,n);

menu();

break;

case0:

exit(0);

default:

printf("errorinput!

请重新输入!

");

}

}

return0;

}

voidmenu()

{

printf("1.录入学生信息\n");

printf("2.根据总分排序\n");

printf("3.用折半查找学生信息\n");

printf("4.用顺序法查找学生信息\n");

printf("5.根据学号删除学生信息\n");

printf("6.根据学号插入学生信息\n");

printf("7.根据学号修改学生信息\n");

printf("8.打印n个学生信息\n");

printf("0.退出\n");

}

voidinput(structStudentst[],intn)

{

inti=0,j;

charch;

FILE*fp;

fp=fopen("F:

\\stu_info.dat","wb");

if(fp==NULL)

{

printf("不能打开文件!

\n");

exit

(1);

}

printf("\t\t\t\t1.录入学员信息\n");

do

{

printf("\t\n输入第%d个学生的信息\n",i+1);

printf("输入学生学号:

");

scanf("%d",&st[i].num);

fflush(stdin);

printf("输入学生姓名:

");

fflush(stdin);

gets(st[i].name);

printf("输入学生性别:

");

fflush(stdin);

gets(st[i].sex);

printf("输入学生成绩:

\n");

fflush(stdin);

for(j=0;j

scanf("%d",&st[i].score[j]);

fflush(stdin);

fwrite(&stu,sizeof(stu),1,fp);

printf("是否继续输入?

(Y/N)");

fflush(stdin);

ch=getchar();

if(ch=='N'&&ch=='n')

break;

else

i++;

fflush(stdin);

}while(i

fclose(fp);

}

voidsort_sum(structStudentst[],intn)

{

inti,j,sum=0,k;

structStudenttemp;

FILE*fp;

fp=fopen("F:

\\stu_info.dat","wb");

if(fp==NULL)

{

printf("不能打开文件!

\n");

exit

(1);

}

for(i=0;i

{

for(j=0;j

sum+=st[i].score[j];

st[i].total=sum;

sum=0;

}

for(i=0;i

{

for(j=n-1;j>i;j--)

if(st[j].total>st[j-1].total)

{

temp=st[j-1];

st[j-1]=st[j];

st[j]=temp;

}

}

printf("\n\t所有学生的个人信息如下\n");

for(i=0;i

{

k=i+1;

printf("\n学号:

%5姓名:

%4s性别:

%3s名次:

%5d\n",st[i].num,st[i].name,st[i].sex,k);

fwrite(&st,sizeof(stu),1,fp);

printf("这个学生的各门成绩如下:

\n");

for(j=0;j

printf("%5d",st[i].score[j]);

}

printf("\n\n\t\t\t按任意键返回主菜单...\n");

fclose(fp);

}

voidseek_1(structStudentst[],intno,intn)

{

intstart,end,flag=1,i,j,ans;

for(start=0,end=n;start<=end;)

{

i=start+(end-start)/2;

if(no==st[i].num)

{

printf("%d",i+1);

break;

}

elseif(no

end=i-1;

else

start=i+1;

}

if(i

{

flag=0;

printf("学号:

%5d姓名:

%4s性别:

%3s\n",st[i].num,st[i].name,st[i].sex);

printf("这个学生的各门成绩如下:

\n");

for(j=0;j

printf("%5d",st[i].score[j]);

printf("\n");

}

if(flag)

{

system("cls");

printf("没有你要查找的学生\n");

}

printf("按1返回主菜单\n");

scanf("%d",&ans);

if(ans==1)

{

system("cls");

}

}

voidseek_2(structStudentst[],intno,intn)

{

inti,j,a,flag=1;

for(i=0;i

{

if(st[i].num==no)

{

flag=0;

printf("\n学号:

%5d姓名:

%4s性别:

%3s\n",st[i].num,st[i].name,st[i].sex);

printf("这个学生的各门成绩如下:

\n");

for(j=0;j

printf("%5d",st[i].score[j]);

printf("\n");

break;

}

}

if(flag)

{

system("cls");

printf("\n\n\t\t\t没有你要查找的学生\n");

}

printf("\n\n\t\t\t按1返回主菜单\n");

scanf("%d",&a);

if(a==1)

{

system("cls");

}

}

voiddel(structStudentst[],intno,intn)

{

inti,j,flag=1;

charans1,ans3;

do

{

for(i=0;i

{

if(st[i].num==no)

{

flag=0;

printf("删除前此学号学生的有关信息如下:

\n");

printf("\n学号:

%5d姓名:

%4s性别:

%3s\n",st[i].num,st[i].name,st[i].sex);

printf("删除前此学号学生的各门成绩如下:

\n");

for(j=0;j

printf("%5d",st[i].score[j]);

printf("\n");

break;

}

}

if(flag)

{

printf("\n\n没有您输入的学号!

");

break;

}

}while(flag);

printf("\n是否真的要删除此学生的所有信息:

Y/N\b");

fflush(stdin);

ans1=getchar();

printf("\n");

if(ans1=='Y')

{

for(i=0;i

st[i]=st[i+1];

n--;

printf("\n您已删除该学生学员信息!

");

printf("\n\n\t\t\t是否继续删除?

Y/N\b");

fflush(stdin);

ans3=getchar();

while(ans3=='Y')

{

system("cls");

del(stu,i,n);

}

system("cls");

}

else

{

system("cls");

}

}

voidins(structStudentst[],intno,intn)

{

inti;

printf("\n\t请输入你要插入的学生的姓名:

\n");

scanf("%s",&st[no].name);

fflush(stdin);

printf("\n\t请输入你要插入的学生的性别:

\n");

scanf("%s",&st[no].sex);

fflush(stdin);

printf("\n\t请输入你要插入的学生的各门成绩:

\n");

for(i=0;i

scanf("%d",&st[no].score[i]);

printf("你要插入的学生的信息成功!

\n");

}

voidmod(structStudentst[],intno,intn)

{

inti,j,x,flag=1;

charans1,ans3;

do

{

for(i=0;i

{

if(st[i].num==no)

{

flag=0;

printf("修改前此学号学生的有关信息如下:

\n");

printf("学号:

%5d姓名:

%4s性别:

%3s\n",st[i].num,st[i].name,st[i].sex);

printf("修改前此学号学生的各门成绩如下:

\n");

for(j=0;j

printf("%5d",st[i].score[j]);

printf("\n");

break;

}

}

if(flag)

{

printf("没有您输入的学号!

\n");

menu();

}

}while(flag);

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

当前位置:首页 > 工程科技 > 能源化工

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

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