这篇文章给大家介绍使用C语言项目编写一个学生信息管理系统,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
elemtype.h
#ifndef ELEMTYPE
#define ELEMTYPE
#include <stdio.h>
//用宏定义来规定各个字符串数据项的最大长度。
//定义姓名最大长度
#define MAX_NAME 30
//定义学生课程数量
#define SCORE_NUM 3
/*学生分类信息*/
typedef enum
{
SCIENCE =0,//理科
ARTS,//文科
MEDICINE,//医科
OTHER//其它
}StuType;
/*学生信息结构体*/
typedef struct
{
char name[MAX_NAME+1];//学生姓名
StuType type;//学生分类,具体定义见学生分类信息
int ID;//学号
float score[SCORE_NUM];//所修课程分数
}ElemType;
/*函数功能:
从文件中读取数据并保存到数组中,n为文件中保存的记录条数
参数说明:
filename-数据文件名称
n-数组中当前保存的有效记录条数
array-用于存储学生信息的数组
返回值:
true-成功添加了一条记录;
false-添加记录不成功
*/
bool ReadDataFromFile(char *filename, ElemType array[], int n);
/*函数功能:
显示所有学生信息
参数说明:
n-数组中当前保存的有效记录条数
array-用于存储学生信息的数组
返回值:
无
*/
void DispalyAll(ElemType array[], int n);
/*函数功能:
修改学生信息,即从控制台输入一个学生信息,根据该信息在数组中进行查找并修改
参数说明:
n-数组中当前保存的有效记录条数
array-用于存储学生信息的数组
返回值:
true-成功修改了一条记录
false-修改记录不成功
*/
bool ModifyStudentInfo(ElemType array[],int n);
/*函数功能:
计算某一科目平均分
参数说明:
n-数组中当前保存的有效记录条数
array-用于存储学生信息的数组
返回值:
-1-没有找到对应记录
对应记录的下标
*/
void CalcSubjectScore(ElemType array[], int n );
/*函数功能:
根据学号查找学生,计算其平均分
参数说明:
n-数组中当前保存的有效记录条数
array-用于存储学生信息的数组
返回值:
-1-没有找到对应记录
对应记录的下标
*/
void CalcStudentScore(ElemType array[], int n );
/*函数功能:
添加学生信息,即从控制台输入一条学生信息,然后将输入的学生信息保存到数组中
参数说明:
n-数组中当前保存的有效记录条数
array-用于存储学生信息的数组
返回值:
true-成功添加了一条记录,提示:此种情况下n需要增加1
false-添加记录不成功
*/
void SortStu(ElemType array[], int n);
/*函数功能:
把数组中的数据写到文件中保存
参数说明:
filename-数据文件名称
n-数组中当前保存的记录条数
array-用于存储学生信息的数组
返回值:
true-成功添加了一条记录;
false-添加记录不成功
*/
bool WriteDataToFile(char *filename, ElemType array[], int n);
#endif
elemtype.cpp
#include "elemtype.h"
#include <stdlib.h>
#include <string.h>
//
///function
///从文件中读取学生信息,保存到一个足够大的数组中。
bool ReadDataFromFile(char *filename, ElemType array[], int n)
{
FILE* fp;
int i;
if ((fp=fopen(filename,"rb"))==NULL )
{
return false;
}
for (i=0; i<n; i++)
{
fread(array+i,sizeof(ElemType),1,fp);
}
fclose(fp);
return true;
}
void DispalyAll(ElemType array[], int n)
{
//add your code here
int i;
printf("%s%10s%9s%12s%10s%10s\n","NAME","TYPE","ID","SCORE1","SCORE2","SCORE3");
for(i=0;i<n;i++)
{
printf("%s",array[i].name);
switch(array[i].type)
{
case 0:
printf("%10s","SCIENCE");
break;
case 1:
printf("%10s","ARTS");
break;
case 2:
printf("%10s","MEDICIEN");
break;
case 3:
printf("%10s","OTHER");
default:
break;
}
printf("%10d%10.2f%10.2f%10.2f\n",array[i].ID,array[i].score[0],array[i].score[1],array[i].score[2]);
}
printf("\n");
}
bool ModifyStudentInfo(ElemType array[],int n)
{
//add your code here
int number;
int i,j;
printf("输入需要修改学生信息的学生学号:");
scanf("%d",&number);
for(i=0;i<n;i++)
{
if(number==array[i].ID)
{
printf("请输入该同学的新信息,按姓名,学科种类,学号,各科成绩的顺序\n");
printf("(学科种类只需填对应代码---理科0,文科1,医科2,其他3):\n");
scanf("%s %d %d",array[i].name,&array[i].type,&array[i].ID);
for(j=0;j<SCORE_NUM;j++)
{
scanf("%f",&array[i].score[j]);
}
return true;
break;
}
}
return false;
}
void CalcSubjectScore(ElemType array[], int n)
{
//add your code here
int i,j;
float sum[SCORE_NUM]={0},ave[SCORE_NUM];
for(j=0;j<SCORE_NUM;j++)
{
for(i=0;i<n;i++)
{
sum[j]=sum[j]+array[i].score[j];
}
ave[j]=sum[j]/n;
}
for(j=0;j<SCORE_NUM;j++)
{
printf("科目 %d 均分:%.2f\n",j+1,ave[j]);
}
}
void CalcStudentScore(ElemType array[], int n)
{
//add your code here
int findID,i,j;
float sum=0;
printf("请输入查找学生的学号:");
scanf("%d",&findID);
for(i=0;i<n;i++)
{
if(findID==array[i].ID)
{
for(j=0;j<SCORE_NUM;j++)
{
sum=sum+array[i].score[j];
}
break;
}
}
printf("该学生总分为:%.2f\n",sum);
}
void SortStu(ElemType array[], int n)
{
//add your code here
int j;
printf("请输入添加的学生信息(按姓名,学科种类,学号,各科分数的顺序)\n");
printf("(学科种类只需输入对应代码---理科0,文科1,医科2,其他3):\n");
scanf("%s %d %d",array[n].name,&array[n].type,&array[n].ID);
for(j=0;j<SCORE_NUM;j++)
{
scanf("%f",&array[n].score[j]);
}
n=n+1;
printf("添加成功!\n");
DispalyAll(array,n);
}
//
///function
///把数组中所有有效记录以二进制形式保存到文件中
bool WriteDataToFile(char *filename, ElemType array[], int n)
{
//add your code here
int i;
FILE* fp;
if( (fp=fopen(filename,"rw"))==NULL )
{
printf("cannot open file\n");
return false;
}
for(i=0;i<n+1;i++)
{
fwrite(array+i,sizeof(ElemType),1,fp);
}
fclose(fp);
return true;
}
main.cpp
//这是主测试文件
#include "elemtype.h"
#define MAX_STUDENT_NUM 100
void displayInfo();
void run(ElemType* array, int n);
int main()
{
int n = 5;//n 为数组中有效记录条数,初始文件中为5
ElemType total[MAX_STUDENT_NUM];
char filename[] = "student.dat";
if (!ReadDataFromFile(filename,total,n))
{
printf("打开文件%s失败",filename);
}
displayInfo();
run(total,n);
return 0;
}
//
///function
void displayInfo()
{
puts("********************************************************************" );
puts(" 欢迎使用x大学计算机(软件)学院学生管理系统V1.0" );
puts("********************************************************************\n" );
}
//
///function
void run(ElemType* array, int n)
{
int option = 0;
//提示用户选择操作
puts(" ");
puts("请选择操作:\n" );
puts("0:直接退出 ");
puts("1:显示所有学生信息 ") ;
puts("2:修改某个学生信息 ") ;
puts("3:计算所有学生某一科平均分 ") ;
puts("4:计算某一个学生分数 ") ;
puts("5:添加一个学生信息 ") ;
puts("6:写回文件并退出 \n" ) ;
do
{
scanf("%d", &option );
//根据用户选择调用相关函数完成指定的操作
switch(option )
{
//显示所有学生信息
case 1:
DispalyAll(array,n);
break;
//修改某个学生信息
case 2:
{
if( ModifyStudentInfo(array,n) )
{
printf("\n");
DispalyAll(array,n);
printf("修改成功!\n");
}
else
printf("未找到此学生!\n");
}
break;
//计算所有学生某一科平均分
case 3:
CalcSubjectScore(array,n);
break;
//计算某一个学生分数
case 4:
CalcStudentScore(array,n);
break;
//添加一个学生信息
case 5:
SortStu(array,n);
break;
//写回文件并退出
case 6:
{
if( WriteDataToFile("student.dat",array,n) )
{
printf("保存成功!\n");
DispalyAll(array,n+1);
}
break;
}
default:
break;
}
}while(option != 0 );
}
关于使用C语言项目编写一个学生信息管理系统就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。