c语言课程设计学生成绩管理系统.docx

上传人:b****8 文档编号:30387295 上传时间:2023-08-14 格式:DOCX 页数:48 大小:148.49KB
下载 相关 举报
c语言课程设计学生成绩管理系统.docx_第1页
第1页 / 共48页
c语言课程设计学生成绩管理系统.docx_第2页
第2页 / 共48页
c语言课程设计学生成绩管理系统.docx_第3页
第3页 / 共48页
c语言课程设计学生成绩管理系统.docx_第4页
第4页 / 共48页
c语言课程设计学生成绩管理系统.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

c语言课程设计学生成绩管理系统.docx

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

c语言课程设计学生成绩管理系统.docx

c语言课程设计学生成绩管理系统

——学生成绩管理程序

题目要求···················2

设计目的···················2

总体设计···················3

详细设计···················3

调试与测试·················12

源程序···················14

总结···················30

学生成绩管理程序

一.题目要求

1.问题描述:

对在校学生几门课程的考试成绩进行统一管理.每个学生记录包括学号,姓名,年龄,数学,英语,物理成绩,默认以学号为序存放.

2.要求:

(1)一个文件按以班为单位存储学生记录.

(2)将允许的操作分为四种,以A,B,C,D,E,F为标志:

A:

插入一个学生记录;

B:

修改学生记录;

C:

删除一个学生记录;

D:

查找一个学生记录;

E:

浏览学生成绩:

F:

退出

3.计算学生的总成绩.

4.按学号排序输出全班学生成绩表

.

二.设计目的

根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择.

三.总体设计

根据上面的需求分析,可以将这个系统分为以下模块:

输入模块,修改模块,删除模块,查找模块,显示模块.

 

学生成绩管理系统

 

数据输入

数据显示

数据修改

数据删除

数据查找

 

四.详细设计

1.主函数:

主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择.

流程图:

显示一系列功能模块

N

输入n,判断n是否是A--F

Y

根据n的值调用各功能模块函数

[程序]:

//#include"head.h"

intmenu_select()

{

charc;

printf("\n\n");

printf("|1.增加学生记录5.统计信息|\n");

printf("|2.查询学生记录6.打开文件|\n");

printf("|3.修改学生记录7.保存文件|\n");

printf("|4.学生纪录排序8.显示记录|\n");

printf("|0.退出系统|\n");

printf("\n\n");

printf("请选择(0-8):

");

c=getchar();

getchar();

return(c-'0');

}

2.输入模块:

[分析]:

单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;分数为整数,采用整数;数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理.

如果要存放若干学生信息就用结构体数组:

voidaddrecord(studentstud[])

{

inti=0,j,num;

charstr[5];

if(numstus!

=0)

{

printf("已有记录存在是否覆盖?

(y/n)\n");

gets(str);

if(str[0]=='Y'||str[0]=='y')

i=0;

elsei=numstus;

}

printf("请输入增加的学生信息条目数:

");

scanf("%d",&num);

if(i==0)

numstus=num;

elsenumstus+=num;

if(numstus>lens)

{

lens+=50;

pointer=(student*)realloc(pointer,lens*LEN);

}

printf("请输入学生信息:

\n");

for(;i

{

getchar();

printf("请输入学号:

");

gets(pointer[i].number);

printf("请输入姓名:

");

gets(pointer[i].name);

printf("请输入性别(男/女1/0):

");

gets(pointer[i].sex);

if(pointer[i].sex[0]=='0')strcpy(pointer[i].sex,"女");

elsestrcpy(pointer[i].sex,"男");

printf("请输入各科成绩:

(按“语文,数学,英语,历史,政治”的顺序):

");

stud[i].score=0;

for(j=0;j

{

scanf("%f",&stud[i].subject[j]);/*计算总分*/

stud[i].score+=stud[i].subject[j];

}

stud[i].average=stud[i].score/numsubs;/*计算平均分*/

}

count(stud);/*附名次*/

display(stud,0,numstus-1);

getchar();

}

intnumstus;

intlens;

student*pointer;

voidmain()

{

inti=1;

charstr[2];

lens=100;

pointer=(student*)malloc(lens*LEN);/*分配内存*/

numstus=0;

welcome();/*欢迎界面*/

while(i>0)

{

i=menu_select();/*控制菜单*/

switch(i)

{

case1:

addrecord(pointer);break;/*增加学生信息*/

case2:

findrecord(pointer);break;/*查询学生信息*/

case3:

amendrecord(pointer);break;/*修改学生信息*/

case4:

sort(pointer);break;/*学生信息排序*/

case5:

statistic(pointer);break;/*统计信息*/

case6:

openfile(pointer);break;/*打开文件*/

case7:

writetotext(pointer);break;/*保存文件*/

case8:

display(pointer,0,numstus-1);break;/*显示记录*/

case0:

if(numstus!

=0)printf("是否保存当前记录?

(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

writetotext(pointer);

i=-1;break;/*退出系统*/

default:

printf("请输入数字0~8:

\n");i=1;/*输入错误*/

}

}

printf("\t\t欢迎再次使用本系统。

\n\n");

display1();

}

3.修改模块:

[分析]:

用户输入要修改学生的学号,根据学生的学号等信息查找学生记录,并提示用户修改该记录的哪部分信息.根据用户选择修改相应的信息.

[流程图]:

 

输入要修改的学号

 

YN

 

Y

N

[程序]:

voidxiugai()

{

if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)/*检查是否出错*/

{

printf("Cannotopenthisfile.\n");

exit(0);

}

printf("\nPLeaseshuruxiugaixuehao:

");

scanf("%d",&i);getchar();

while((fread(&data,sizeof(data),1,fp))==1)

{

j=atoi(data.xuehao);

if(j==i)

{

printf("xuehao:

%s\nmingzi:

%s\nnianling:

%s\n",data.xuehao,data.mingzi,data.nianling);

printf("Pleaseshurumingzi:

");

gets(data.mingzi);

printf("Pleaseshurushuxuescore:

");

gets(temp);data.score[0]=atof(temp);

printf("Pleaseinputyingyuscore:

");

gets(temp);data.score[1]=atof(temp);

printf("Pleaseinputwuliscore:

");

gets(temp);data.score[2]=atof(temp);

data.score[3]=data.score[0]+data.score[1]+data.score[2];

}fwrite(&data,sizeof(data),1,fp1);

}

fseek(fp,0L,0);/*将位置指针移到离头文件0个字节处*/

fseek(fp1,0L,0);

while((fread(&data,sizeof(data),1,fp1))==1)

{

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

}

fclose(fp);

fclose(fp1);

}

4.删除模块:

[分析]:

该模块的功能是,用户输入要删除的学生的学号,根据学生学号查找记录并删除.

[流程图]:

输入要删除的学号

 

YN

 

Y

N

[程序]:

voiddeleterecord(studentstu[],inti)/*删除信息*/

{

intj;

while(i>=0)

{

for(j=i;j

stu[j]=stu[j+1];

numstus--;

printf("删除成功!

\n");

}

}

voidcount(studentstud[])

{

inti,j;

for(i=0;i

{

stud[i].index=1;

for(j=0;j

if(stud[j].score>stud[i].score)

stud[i].index++;

}

}

5.查找模块:

[需求分析]:

该模块的功能是根据输入的学生的姓名查找对应的记录,找到以后,显示相应的学生信息.

[流程图]:

YN

N

Y

 

[程序]:

//#include"head.h"

intfindrecord(studentstud[])/*查找信息*/

{

charstr[2];

inti,num;

if(numstus==0)

{

printf("没有可被查找的记录\n");

return-1;

}

else

{

printf("以何种方式查找?

\n1.学号\t2.姓名\t3.名次\n");

gets(str);

if(str[0]=='1')/*按学号查找*/

{

printf("请输入学号:

");

gets(str);

for(i=0;i<=numstus;i++)

if(strcmp(str,stud[i].number)==0)

{

display(stud,i,i);

break;

}

elsecontinue;

}

elseif(str[0]=='2')/*按姓名查找*/

{

printf("请输入姓名:

");

gets(str);

for(i=0;i<=numstus;i++)

if(strcmp(str,stud[i].name)==0)

{

display(stud,i,i);

break;

}

elsecontinue;

}

elseif(str[0]=='3')/*按名次查找*/

{

printf("请输入名次:

");

scanf("%d",&num);

getchar();

for(i=0;i<=numstus;i++)

if(num==stud[i].index)

{

display(stud,i,i);

break;

}

elsecontinue;

}

if(i>numstus)

{

printf("没有查找所要的信息。

\n");

return-1;

}

returni;

}

}

6.显示模块:

[需求分析]:

该模块的功能是显示所有学生记录信息.

[程序]:

voidwelcome()

{

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

printf("\t\t\t\t**学生成绩管理系统**\n\t\t\t\t倾情奉献欢迎使用!

\n");

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

}

 

voidshowtable()

{

printf("---------------------------------------------------------------------------------------\n");

printf("学号\t姓名\t性别\t语文\t数学\t英语\t历史\t政治\t总分\t平均分\t名次\n");

printf("---------------------------------------------------------------------------------------\n");

}

 

voiddisplay(studentstud[],intn1,intn2)

{

inti;

showtable();/*显示表头*/

for(i=n1;i<=n2;i++)

printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);

/*通过循环输出数据*/

}

voiddisplay1()

{

printf("\t\t本系统由计科二班制作\n\n");

printf("\t\t制作人员列表:

\n\n");

printf("\t\t殷增锋\t\t\t邵超\n");

printf("\n\n");

getchar();

}

五.调试与测试

在这次课程设计中,程序编写过程中遇到了很多的问题,各种函数的运用也让人头疼,在上机编译运行过程中出现了很多的错误,例如:

各种数据类型的定义,函数的调用等等。

但最终还是在老师同学的帮助下进行了各种代码的编写与修改,最终程序成功的运行。

下面是各个模块的界面图

(1)主菜单函数:

(2):

输入模块:

(3):

显示模块:

(4):

删除模块:

(5):

查找模块:

(6):

修改模块:

6.程序源

#ifndefH_STUDENT_HH

#defineH_STUDENT_HH

#include"stdio.h"

#include"string.h"

#include"malloc.h"

 

#defineLENsizeof(structmessage_student)/*一个结构体数组元素的长度*/

#definenumsubs5/*学科数目*/

typedefstructmessage_student/*结构体定义*/

{

charnumber[6];

charname[20];

charsex[4];

floatsubject[numsubs];

floatscore;

floataverage;

intindex;

}student;

 

externintnumstus;/*学生数目*/

externstudent*pointer;/*指向结构体数组*/

externintlens;

 

intmenu_select();/*函数声明*/

intopenfile(studentstu[]);

intfindrecord(studentstud[]);

intwritetotext(studentstud[]);

voidwelcome();

voiddisplay1();

voidshowtable();

voidsort(studentstu[]);

voiddeleterecord(studentstu[],inti);

voidaddrecord(studentstud[]);

voiddisplay(studentstud[],intn1,intn2);

voidamendrecord(studentstud[]);

voidcount(studentstud[]);

voidsortnum(studentstud[]);

voidsortnum2(studentstud[]);

voidsortname(studentstud[]);

voidsortname2(studentstud[]);

voidsortcount(studentstud[]);

voidsortcount2(studentstud[]);

voidstatistic(studentstud[]);

voiddisplay1();

#endif

//#include"head.h"

intmenu_select()

{

charc;

printf("\n\n");

printf("|1.增加学生记录5.统计信息|\n");

printf("|2.查询学生记录6.打开文件|\n");

printf("|3.修改学生记录7.保存文件|\n");

printf("|4.学生纪录排序8.显示记录|\n");

printf("|0.退出系统|\n");

printf("\n\n");

printf("请选择(0-8):

");

c=getchar();

getchar();

return(c-'0');

}

//#include"head.h"

intfindrecord(studentstud[])/*查找信息*/

{

charstr[2];

inti,num;

if(numstus==0)

{

printf("没有可被查找的记录\n");

return-1;

}

else

{

printf("以何种方式查找?

\n1.学号\t2.姓名\t3.名次\n");

gets(str);

if(str[0]=='1')/*按学号查找*/

{

printf("请输入学号:

");

gets(str);

for(i=0;i<=numstus;i++)

if(strcmp(str,stud[i].number)==0)

{

display(stud,i,i);

break;

}

elsecontinue;

}

elseif(str[0]=='2')/*按姓名查找*/

{

printf("请输入姓名:

");

gets(str);

for(i=0;i<=numstus;i++)

if(strcmp(str,stud[i].name)==0)

{

display(stud,i,i);

break;

}

elsecontinue;

}

elseif(str[0]=='3')/*按名次查找*/

{

printf("请输入名次:

");

scanf("%d",&num);

getchar();

for(i=0;i<=numstus;i++)

if(num==stud[i].index)

{

display(stud,i,i);

break;

}

elsecontinue;

}

if(i>numstus)

{

printf("没有查找所要的信息。

\n");

return-1;

}

returni;

}

}

//#include"head.h"

intopenfile(studentstu[])

{

inti=0,j;

FILE*fp;

charfilename[20],str[2];

if(numstus!

=0)

{

printf("已经有记录存在,是否保存?

(y/n)");

gets(str);

if(str[0]=='y'||str[0]=='Y')

writetotext(

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

当前位置:首页 > 表格模板 > 合同协议

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

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