学生成绩管理系统
Posted zhou753099943
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学生成绩管理系统相关的知识,希望对你有一定的参考价值。
解析:
最近帮朋友做的一个相当于课程设计的学生成绩管理系统,她们要求是用c语言写,对于一个用惯c++的孩子来说真是感觉写起来的各种限制真心感觉到无语,不说了直接上代码
#include "student.h"
void main()
char ch='0';
int index=0;
char id[ID_SIZE];
student students;
student phead;
FILE *output=fopen("output.txt","w+");
FILE *input=fopen("input.txt","r");
if(input==NULL)
printf("打开失败input\\n");
exit(1);
if(input==NULL)
printf("打开失败output\\n");
exit(1);
phead.next=NULL;
InitStudent(&students);
while(1)
ShowList();
printf("请选择:");
ch=getchar();
switch(ch)
case '1':
Student_Insert(&students);
break;
case '2':
Student_Display(&students);
break;
case '3':
printf("请输入需要查找多少个学生:");
scanf("%d",&index);
Student_DisplaySingle(&students,index);
break;
case '4':
printf("请输入需要删除的学号:");
scanf("%s",id);
Student_Delete(&students,id);
break;
case '5':
Student_Modify(&students);
break;
case '6':
printf("请输入需要查找学生姓名:");
scanf("%s",id);
Student_Select(&students,id);
break;
case '7':
Student_SortByAverage(&students,&phead);
break;
case '8':
IO_ReadInfo(&students,output);
fclose(output);
break;
case '9':
IO_WriteInfo(&students,output);
fclose(output);
break;
case '0':
printf("欢迎使用学生管理成绩系统\\n");
exit(1);
default:
break;
getchar();
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <string.h>
#define ID_SIZE 128
#define NAME_SIZE 128
#define SIZE 125
struct student
char Id[ID_SIZE]; //学生学号
char Name[NAME_SIZE]; //学生姓名
float Math; //数学
float English; //英语
float Chinese; //语文
float TotalScore; //总分
float AverageScore; //平均分
int PassStudent; //及格人数
struct student *next;
;
typedef struct student student;
static float PassRate=0.0; //及格率
//初始化学生信息
void InitStudent(student *head)
strcpy(head->Id,"");
strcpy(head->Name,"");
head->Chinese=0.0;
head->English=0.0;
head->Math=0.0;
head->PassStudent=0;
head->TotalScore=0;
head->next=NULL;
//插入学生成绩
void Student_Insert(student *head)
int flag=0;
student *cur=head;
student *tmp=(student *)malloc(sizeof(student));
tmp->next=NULL;
assert(tmp !=NULL);
printf("***开始录入学生信息***\\n");
printf("请输入学号:");
scanf("%s",tmp->Id);
printf("请输入姓名:");
scanf("%s",tmp->Name);
printf("请输入数学成绩:");
scanf("%f",&tmp->Math);
printf("请输入英语成绩:");
scanf("%f",&tmp->English);
printf("请输入语文成绩:");
scanf("%f",&tmp->Chinese);
tmp->TotalScore=tmp->Chinese+tmp->English+tmp->Math;
tmp->AverageScore=tmp->TotalScore/3;
tmp->PassStudent=0;
if(tmp->Chinese >=60)
tmp->PassStudent++;
if(tmp->English >=60)
tmp->PassStudent++;
if(tmp->Math >=60)
tmp->PassStudent++;
if(tmp->PassStudent==3)
flag++;
tmp->AverageScore=tmp->TotalScore/3;
printf("学生及格人数:%d\\n",flag);
while(cur->next !=NULL)
cur=cur->next;
cur->next=tmp;
/*删除学生信息*/
void Student_Delete(student *head,char *id)
student *del=NULL;
student *cur=head;
while(cur->next !=NULL)
if(strcmp(cur->next->Id,id)==0)
del=cur->next;
cur->next=del->next;
free(del);
printf("删除成功\\n");
return;
cur=cur->next;
printf("删除失败\\n");
/*修改学生信息*/
void Student_Modify(student *head)
char number[ID_SIZE];
int flag=0;
student *cur=head->next;
assert(cur !=NULL);
printf("请输入学生学号:");
scanf("%s",number);
printf("开始查找\\n");
while(cur !=NULL)
if(strcmp(cur->Id,number)==0)
printf("请输入准备修改的语文成绩:");
scanf("%f",&cur->Chinese);
printf("请输入准备修改的数学成绩:");
scanf("%f",&cur->Math);
printf("请输入准备修改的英语成绩:");
scanf("%f",&cur->English);
flag=1;
break;
cur->next;
if(flag)
printf("修改成功\\n");
else
printf("修改失败\\n");
/*按姓名查询*/
void Student_Select(student *head,char *name)
student *cur=head->next;
while(cur!=NULL)
if(strcmp(cur->Name,name)==0)
printf("存在这个学生\\n");
return;
cur=cur->next;
printf("按姓名查找失败\\n");
/*显示单条学生记录*/
void Student_DisplaySingle(student *head,int index)
int count=1;
student *cur=head->next;
while(count <index && cur !=NULL)
cur=cur->next;
count++;
if(count >index)
printf("没有这个学生\\n");
else
printf("%s\\t%s\\t%.3f\\t%.3f\\t%.3f\\t",cur->Id,cur->Name,cur->Chinese,cur->Math,cur->English);
printf("%.3f\\t%.3f\\n",cur->AverageScore,cur->TotalScore);
//显示所有学生成绩
void Student_Display(student *head)
int count=0;
int number=0;
student *cur=head->next;
printf("学号\\t姓名\\t语文\\t数学\\t英语\\t平均分\\t总分\\n");
while(cur !=NULL)
printf("%s\\t%s\\t%.3f\\t%.3f\\t%.3f\\t",cur->Id,cur->Name,cur->Chinese,cur->Math,cur->English);
printf("%.3f\\t%.3f\\n",cur->AverageScore,cur->TotalScore);
if(cur->Chinese >=60 && cur->English>=60 && cur->Math>=60)
count++;
cur=cur->next;
number++;
PassRate=(float)count/number*100;
printf("及格率:%.1f%%\\n",PassRate);
/*按平均值排序*/
void Student_SortByAverage(student *head,student *phead)
student *pcur=NULL;
student *tmp=NULL;
student *ptmp=NULL;
student *cur=head->next;
while(cur !=NULL)
pcur=cur;
while(pcur !=NULL && pcur->AverageScore ==INT_MAX)
pcur=pcur->next;
if(pcur==NULL)
break;
tmp=pcur;
while(pcur !=NULL)
if(pcur->AverageScore > tmp->AverageScore && pcur->AverageScore !=INT_MAX)
tmp=pcur;
pcur=pcur->next;
if(tmp->AverageScore !=INT_MAX)
ptmp=(student *)malloc(sizeof(student));
assert(ptmp !=NULL);
strcpy(ptmp->Id,tmp->Id);
strcpy(ptmp->Name,tmp->Name);
ptmp->Chinese=tmp->Chinese;
ptmp->English=tmp->English;
ptmp->Math=tmp->Math;
ptmp->AverageScore=tmp->AverageScore;
ptmp->PassStudent=tmp->PassStudent;
ptmp->TotalScore=tmp->TotalScore;
ptmp->next=phead->next;
phead->next=ptmp;
tmp->AverageScore=INT_MAX;
Student_Display(phead);
/*将学生信息从文件读出*/
void IO_ReadInfo(student *head,FILE *path)
student *cur=head->next;
while(cur !=NULL)
if(fread(cur,sizeof(student),1,path) < 0)
printf("fread failed\\n");
break;
cur=cur->next;
printf("读入成功\\n");
/*将学生信息写入文件*/
void IO_WriteInfo(student *head,FILE *path)
student *cur=head->next;
while(cur !=NULL)
fprintf(path,"%s %s %f %f %f %f %f %d %s",\\
cur->Id,cur->Name,cur->Math,cur->English,cur->Chinese,\\
cur->TotalScore,cur->AverageScore,cur->PassStudent,"\\n");
cur=cur->next;
printf("写入数据成功\\n");
//显示列表
void ShowList()
printf("**********************************************\\n");
printf("**【1】插入学生成绩 【2】显示全部学生信息 **\\n");
printf("**【3】显示单个学生 【4】删除学生信息 **\\n");
printf("**【5】修改学生信息 【6】按姓名查询 **\\n");
printf("**【7】按平均值排序 【8】从文件读出学生信息 **\\n");
printf("**【9】写入文件 【0】退出学生管理系统 **\\n");
printf("**********************************************\\n");
以上是关于学生成绩管理系统的主要内容,如果未能解决你的问题,请参考以下文章