C语言课程设计学生成绩管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
——学生成绩管理程序题目要求 (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.主函数:
主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择.
流程图:
Y
[程序]:
//#include "head.h"
int menu_select()
{
char c;
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.输入模块:
[分析]:
单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;分数为整数,采用整数;数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理.
如果要存放若干学生信息就用结构体数组:
void addrecord(student stud[])
{
int i=0,j,num;
char str[5];
if(numstus!=0)
{
printf("已有记录存在是否覆盖?(y/n)\n");
gets(str);
if(str[0]=='Y'||str[0]=='y')
i=0;
else i=numstus;
}
printf("请输入增加的学生信息条目数:");
scanf("%d",&num);
if(i==0)
numstus=num;
else numstus+=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,"女"); else strcpy(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(); } int numstus; int lens; student *pointer; void main() { int i=1; char str[2]; lens=100; pointer=(student *)malloc(lens*LEN); /*分配内存*/ numstus=0; welcome(); /*欢迎界面*/ while(i>0) { i=menu_select(); /*控制菜单*/ switch(i) { case 1:addrecord(pointer);break; /*增加学生信息*/ case 2:findrecord(pointer);break; /*查询学生信息*/ case 3:amendrecord(pointer);break; /*修改学生信息*/ case 4:sort(pointer);break; /*学生信息排序*/ case 5:statistic(pointer);break; /*统计信息*/ case 6:openfile(pointer);break; /*打开文件*/ case 7:writetotext(pointer);break; /*保存文件*/ case 8:display(pointer,0,numstus-1);break; /*显示记录*/ case 0: 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; /*输入错误*/ }