资源描述
- .
*题目七:学生成绩管理系统设计
学生成绩信息包括:学期,学号,班别,XX,四门课程成绩(语文、数学、英语和计算机)等。
主要功能:
〔1〕 能按学期、按班级完成对学生成绩的录入、修改
〔2〕 能按班级统计学生的成绩,求学生的总分及平均分
〔3〕 能查询学生成绩,不及格科目及学生
〔4〕 能按班级输出学生的成绩单
要求:使用二进制文件方式存储数据,系统以菜单方式工作
源代码:
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
struct Student
{
int cls;
char nam[10];
char num[10];
int chinese;
int english;
int puter;
int math;
}stud1[100],stud2[100];
int menu()
{
char a;
while(a>'7'||a<'0')
{
system("cls");
printf(" 欢送使用学生成绩管理系统 \n");
printf(" 制作人:章建 \n");
printf("********************** 学生成绩管理系统 ************************\n");
printf(" 1.输入学生成绩\n");
printf(" 2.输出学生成绩\n");
printf(" 3.查找并显示学生成绩\n");
printf(" 4.按XX查找,修改学生资料\n");
printf(" 5.显示所有学生\n");
printf(" 6.查找并删除学生信息\n");
printf(" 7.从文件读取数据\n");
printf(" 0.储存学生资料并退出系统\n");
printf("**********************************************************************\n");
printf("请选择(0-7)\n");
a=getchar();
}
return(a-'0');
}
/***************************************************************************************/
int Input(Student stud[],int n) //输入数据(第一学期)。
{
int i=0;
char sign,x[10];
for(;sign !='n'&&sign !='N';)
{
printf(" XX:");
scanf("%s",stud[n+i].nam);
printf(" 班级:");
scanf("%d",&stud[n+i].cls);
printf(" 学号:");
scanf("%s",stud[n+i].num);
printf(" 语文:");
scanf("%d",&stud[n+i].chinese);
printf(" 数学:");
scanf("%d",&stud[n+i].math);
printf(" 英语:");
scanf("%d",&stud[n+i].english);
printf(" 计算机:");
scanf("%d",&stud[n+i].puter);
gets(x);
printf("还有要输入的信息吗?(y/n)");
scanf("%c",&sign);
i++;
}
return(n+i);
}
/*************************************输出数据***********************************************/
void Display(Student stud[], int n)
{
int i;
printf(" 班级 学号 XX 语文 数学 英语 计算机 总分 平均分\n");
for(i=1;i<n+1;i++)
{
int s=stud[i-1].chinese+stud[i-1].math+stud[i-1].english+stud[i-1].puter;
printf("%7d,%7s,%7s,%7d,%7d,%7d,%7d,%7d,%7d\n",stud[i-1].cls,stud[i-1].num,stud[i-1].nam,stud[i-1].chinese,stud[i-1].math,stud[i-1].english,stud[i-1].puter,s,s/4);
if(i>1 && i%10==0)
{
system("pause");
}
}
system("pause");
}
/************************************查找学生显示其信息***************************************************/
void Query(Student stud[],int n)
{
char nam[20];
printf(" 输入其XX:\n");
scanf("%s",nam);
int i=0;
while(strcmp(stud[i].nam,nam)!=0&&i<n)
i++;
if(i==n)
{
printf("\t\t\t没有发现该学生的资料!\n");
return;
}
printf(" 学号:%s\n",stud[i].num);
printf(" 班级:%d\n",stud[i].cls);
printf(" 语文:%d\n",stud[i].chinese);
printf(" 英语:%d\n",stud[i].english);
printf(" 数学:%d\n",stud[i].math);
printf(" 计算机:%d\n",stud[i].puter);
}
/*********************************删除学生信息************************************/
int Delete(Student stud[],int n)
{
char s[20];
int i=0,j;
printf(" 请输入要删除的学生的XX:\n");
scanf("%s",s);
while(strcmp(stud[i].nam,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t\t\t没有发现该学生资料!\n");
return(n);
}
for(j=i;j<n-1;j++)
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].nam,stud[j+1].nam);
stud[j].cls=stud[j+1].cls;
stud[j].chinese=stud[j+1].chinese;
stud[j].math=stud[j+1].math;
stud[j].english=stud[j+1].english;
stud[j].puter=stud[j+1].puter;
}
printf(" 当前信息已删除成功!");
return(n-1);
}
/*******************************修改信息******************************************/
int Revise(Student stud[],int n)
{
int i=0;
char na[10];
scanf("%s",na);
while(strcmp(stud[i].nam,na)!=0&&i<n)
i++;
if(i==n)
{
printf("\t\t\t没有发现该学生的资料!\n");
}
printf("修改班级:\n");
scanf("%d",&stud[i].cls);
printf("修改学号:\n");
scanf("%s",stud[i].num);
printf("修改语文成绩:\n");
scanf("%d",&stud[i].chinese);
printf("修改英语成绩:\n");
scanf("%d",&stud[i].english);
printf("修改数学成绩:\n");
scanf("%d",&stud[i].math);
printf("修改计算机成绩:\n");
scanf("%d",&stud[i].puter);
printf("修改成功\n");
return(n);
}
/***************************************显示学生**************************************/
void show(Student stud[],int n)
{
for(int i=0;i<n;i++)
{
printf(" %s\n",stud[i].nam);
}
system("pause");
}
/**************************************从文件读取数据*************************************************/
int AddfromText(Student stud[], int n)
{
int i=0,number,x=0,y=0;
FILE *fp;
char filename[20];
printf(" 输入文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf(" 无法翻开文件");
system("pause");
return(n);
}
fscanf(fp,"%d",&number);
for(;i<number;)
{
fscanf(fp,"%d%s%s%d%d%d%d%d%d\n",&stud[n+i].cls,&stud[n+i].num,&stud[n+i].nam,&stud[n+i].chinese,
&stud[n+i].math,&stud[n+i].english,&stud[n+i].puter,&x,&y);
i++;
}
n+=number;
fclose(fp);
printf(" 读入成功!");
system("pause");
return(n);
}
/**************************************将所有记录写进文件*************************************/
void WritetoText(Student stud[],int n)
{
int i=0;
FILE *fp;
char filename[20];
printf(" 将资料输入文件\n");
printf(" 输入文件名\n");
scanf("%s",filename);
if((fp=fopen(filename,"w+"))==NULL)
{
printf(" 无法翻开文件\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n);
for(;i<n;)
{
fprintf(fp,"%-8d%-8s%-8s%-5d%-5d%-5d%-5d%-5d%-5d\n",stud[i].cls,stud[i].num,stud[i].nam,
stud[i].chinese,stud[i].math,stud[i].english,stud[i].puter,
stud[i].chinese+stud[i].math+stud[i].english+stud[i].puter,
(stud[i].chinese+stud[i].math+stud[i].english+stud[i].puter)/4);
i++;
}
fclose(fp);
}
/**************************************主函数调用*********************************************/
void main()
{
int n1=0,n2=0;
for(;;)
{
switch(menu())
{
case 1:
int t;
printf(" 输入学生资料\n");
printf(" 输入学期");
scanf("%d",&t);
if(t==1)
{
n1=Input(stud1,n1);
}
else if(t==2)
{
n2=Input(stud2,n2);
}
break;
case 2:
printf(" 输出所有学生资料\n");
if(n1!=0)
{
printf(" 第一学期\n");
Display(stud1,n1);
}
if(n2!=0)
{
printf(" 第二学期\n");
Display(stud2,n2);
}
break;
case 3:
int r;
printf(" 查找学生\n");
printf(" 请输入学期\n");
scanf("%d",&r);
if(r==1)
{
Query(stud1,n1);
}
else if(r==2)
{
Query(stud2,n2);
}
system("pause");
break;
case 4:
int p;
printf(" 修改学生资料\n");
printf(" 请输入学期\n");
scanf("%d",&p);
if(p==1)
{
printf(" 输入你要修改的学生的XX:");
n1=Revise(stud1,n1);
}
else if(p==2)
{
printf(" 输入你要修改的学生的XX:");
n2=Revise(stud2,n2);
}
system("pause");
break;
case 5:
printf(" 显示所有学生:\n");
if(n1!=0)
{
printf(" 第一学期\n");
show(stud1,n1);
}
if(n2!=0)
{
printf(" 第二学期\n");
show(stud2,n2);
}
system("pause");
break;
case 6:
printf(" 查找并删除学生信息\n");
int o;
printf(" 请输入学期:");
scanf("%d",&o);
if(o==1)
{
printf(" 第一学期\n");
n1=Delete(stud1,n1);
}
if(o==2)
{
printf(" 第二学期\n");
n2=Delete(stud2,n2);
}
system("pause");
break;
case 7:
printf(" 从文件中读入数据\n");
printf(" 读取第一学期的文件\n");
n1=AddfromText(stud1,n1);
printf(" 读取第二学期的文件\n");
n2=AddfromText(stud2,n2);
break;
case 0:
printf(" 将所有资料写入文件\n");
if(n1!=0)
{
printf(" 存储第一学期学生资料\n");
WritetoText(stud1,n1);
}
if(n2!=0)
{
printf(" 存储第二学期学生资料\n");
WritetoText(stud2,n2);
}
printf(" 输入成功\n");
int b;
printf(" 请确定是否退出系统\n");
printf(" 0.退出系统\n");
printf(" 1.返回\n");
scanf("%d",&b);
if(b==0)
{
printf(" 谢谢使用\n");
system("pause");
exit(0);
}
system("pause");
break;
}
}
}
- . 可修编.
展开阅读全文