问题
1. 问题描述
每当考试结束后,老师的一个重要任务就是对学生的成绩进行输入和统计。如果每学期的课程固定,简单的成绩管理系统的开发应该难度不大,但是如果每学期的课程都要变动,每次都要修改源程序是比较麻烦的。
2. 基本功能
(1)实现一个简单的成绩管理系统,主要功能包括,学生成绩的增加、删除、修改、按学号排列显示和按学号查询。
(2)学生成绩主要包含学号、姓名、语文、数学、和英语等字段。
3.扩展功能
(1)增加对学生成绩汇总功能,能实现按总分对学生成绩排序(同分不处理)。能实现学生成绩的存储,将学生成绩保持在外部文件中以方便下次读入和处理。
(2)能实现学生课程的自定义输入,老师只要开始时输入本学期的课程就可实现对各学期不同课程的成绩管理。
源码
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
#define M 10
int k;
int q;
struct student
{
int num;
char name[20];
char sub[M][20];
int scroe[M];
int sum;
int status;
};
void menu();
int input (struct student stu[],char kc[M][20]);
int add (struct student stu[]);
int delet(struct student stu[]);
int delet1(struct student stu[],int i);
int revise(struct student stu[]);
void menurevise0();
void menurevise();
void numrevise(struct student stu[],int t);
void namerevise(struct student stu[]);
void chineserevise(struct student stu[N]);
void mathrevise(struct student stu[N]);
void englishrevise(struct student stu[N]);
int rank(struct student stu[]);
void menurank();
void xuehaorank(struct student stu[]);
void sumrank(struct student stu[]);
int find(struct student stu[]);
void menufind();
int findnum(struct student stu[]);
int findname(struct student stu[]);
int main(void)
{
FILE *fp;
if((fp=fopen("0313.txt","w+"))==NULL){
printf("File open error!\n");
exit(1);
}
while (!feof(fp))
{
int x,k,t,h;
int m,g,i;
struct student stu[N];
struct student *p;
char kc[M][20];
printf("=============成绩管理系统================\n");
fprintf(fp,"=============成绩管理系统=============\n");
printf("请输入要录入成绩的科目数量:(<10)\n");
scanf("%d",&m);
q=m;
getchar();
for(h=0;h<m;h++)
{
printf("请输入第%d门课的名称:\n",h+1);
gets(kc[h]);
}
for(i=0;i<N;i++)
{
for(h=0;h<q;h++)
{
strcpy(stu[i].sub[h],kc[h]);
}
}
menu();
while(1)
{
scanf("%d",&x);
switch(x)
{
case 1: input(stu,kc);
menu();
break;
case 2:k=add(stu);
menu();
break;
case 3:delet(stu);
menu();
break;
case 4:revise(stu);
menu();
break;
case