C語言實現(xiàn)學(xué)生信息管理系統(tǒng)(多文件)
更新時間:2022年06月20日 11:12:24 作者:零商
這篇文章主要為大家詳細介紹了C語言實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
elemtype.h
/*****************************
* 這是學(xué)生成績管理系統(tǒng)中的記錄結(jié)構(gòu)文件。
* 文件名:elemtype.h
* 作者:
* 創(chuàng)建日期:2012-12-05
* 完成日期:2012-12-07
* 版本:1.0
* 修改記錄:
*
*
******************************/
#ifndef ELEMTYPE
#define ELEMTYPE
#include <stdio.h>
//用宏定義來規(guī)定各個字符串數(shù)據(jù)項的最大長度。
//定義姓名最大長度
#define MAX_NAME 30
//定義學(xué)生課程數(shù)量
#define SCORE_NUM 3
/*學(xué)生分類信息*/
typedef enum
{
SCIENCE =0,//理科
ARTS,//文科
MEDICINE,//醫(yī)科
OTHER//其它
}StuType;
/*學(xué)生信息結(jié)構(gòu)體*/
typedef struct
{
char name[MAX_NAME+1];//學(xué)生姓名
StuType type;//學(xué)生分類,具體定義見學(xué)生分類信息
int ID;//學(xué)號
float score[SCORE_NUM];//所修課程分數(shù)
}ElemType;
/*函數(shù)功能:
從文件中讀取數(shù)據(jù)并保存到數(shù)組中,n為文件中保存的記錄條數(shù)
參數(shù)說明:
filename-數(shù)據(jù)文件名稱
n-數(shù)組中當前保存的有效記錄條數(shù)
array-用于存儲學(xué)生信息的數(shù)組
返回值:
true-成功添加了一條記錄;
false-添加記錄不成功
*/
bool ReadDataFromFile(char *filename, ElemType array[], int n);
/*函數(shù)功能:
顯示所有學(xué)生信息
參數(shù)說明:
n-數(shù)組中當前保存的有效記錄條數(shù)
array-用于存儲學(xué)生信息的數(shù)組
返回值:
無
*/
void DispalyAll(ElemType array[], int n);
/*函數(shù)功能:
修改學(xué)生信息,即從控制臺輸入一個學(xué)生信息,根據(jù)該信息在數(shù)組中進行查找并修改
參數(shù)說明:
n-數(shù)組中當前保存的有效記錄條數(shù)
array-用于存儲學(xué)生信息的數(shù)組
返回值:
true-成功修改了一條記錄
false-修改記錄不成功
*/
bool ModifyStudentInfo(ElemType array[],int n);
/*函數(shù)功能:
計算某一科目平均分
參數(shù)說明:
n-數(shù)組中當前保存的有效記錄條數(shù)
array-用于存儲學(xué)生信息的數(shù)組
返回值:
-1-沒有找到對應(yīng)記錄
對應(yīng)記錄的下標
*/
void CalcSubjectScore(ElemType array[], int n );
/*函數(shù)功能:
根據(jù)學(xué)號查找學(xué)生,計算其平均分
參數(shù)說明:
n-數(shù)組中當前保存的有效記錄條數(shù)
array-用于存儲學(xué)生信息的數(shù)組
返回值:
-1-沒有找到對應(yīng)記錄
對應(yīng)記錄的下標
*/
void CalcStudentScore(ElemType array[], int n );
/*函數(shù)功能:
添加學(xué)生信息,即從控制臺輸入一條學(xué)生信息,然后將輸入的學(xué)生信息保存到數(shù)組中
參數(shù)說明:
n-數(shù)組中當前保存的有效記錄條數(shù)
array-用于存儲學(xué)生信息的數(shù)組
返回值:
true-成功添加了一條記錄,提示:此種情況下n需要增加1
false-添加記錄不成功
*/
void SortStu(ElemType array[], int n);
/*函數(shù)功能:
把數(shù)組中的數(shù)據(jù)寫到文件中保存
參數(shù)說明:
filename-數(shù)據(jù)文件名稱
n-數(shù)組中當前保存的記錄條數(shù)
array-用于存儲學(xué)生信息的數(shù)組
返回值:
true-成功添加了一條記錄;
false-添加記錄不成功
*/
bool WriteDataToFile(char *filename, ElemType array[], int n);
#endifelemtype.cpp
#include "elemtype.h"
#include <stdlib.h>
#include <string.h>
//
///function
///從文件中讀取學(xué)生信息,保存到一個足夠大的數(shù)組中。
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("輸入需要修改學(xué)生信息的學(xué)生學(xué)號:");
scanf("%d",&number);
for(i=0;i<n;i++)
{
if(number==array[i].ID)
{
printf("請輸入該同學(xué)的新信息,按姓名,學(xué)科種類,學(xué)號,各科成績的順序\n");
printf("(學(xué)科種類只需填對應(yīng)代碼---理科0,文科1,醫(yī)科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("請輸入查找學(xué)生的學(xué)號:");
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("該學(xué)生總分為:%.2f\n",sum);
}
void SortStu(ElemType array[], int n)
{
//add your code here
int j;
printf("請輸入添加的學(xué)生信息(按姓名,學(xué)科種類,學(xué)號,各科分數(shù)的順序)\n");
printf("(學(xué)科種類只需輸入對應(yīng)代碼---理科0,文科1,醫(yī)科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
///把數(shù)組中所有有效記錄以二進制形式保存到文件中
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 為數(shù)組中有效記錄條數(shù),初始文件中為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大學(xué)計算機(軟件)學(xué)院學(xué)生管理系統(tǒng)V1.0" );
puts("********************************************************************\n" );
}
//
///function
void run(ElemType* array, int n)
{
int option = 0;
//提示用戶選擇操作
puts(" ");
puts("請選擇操作:\n" );
puts("0:直接退出 ");
puts("1:顯示所有學(xué)生信息 ") ;
puts("2:修改某個學(xué)生信息 ") ;
puts("3:計算所有學(xué)生某一科平均分 ") ;
puts("4:計算某一個學(xué)生分數(shù) ") ;
puts("5:添加一個學(xué)生信息 ") ;
puts("6:寫回文件并退出 \n" ) ;
do
{
scanf("%d", &option );
//根據(jù)用戶選擇調(diào)用相關(guān)函數(shù)完成指定的操作
switch(option )
{
//顯示所有學(xué)生信息
case 1:
DispalyAll(array,n);
break;
//修改某個學(xué)生信息
case 2:
{
if( ModifyStudentInfo(array,n) )
{
printf("\n");
DispalyAll(array,n);
printf("修改成功!\n");
}
else
printf("未找到此學(xué)生!\n");
}
break;
//計算所有學(xué)生某一科平均分
case 3:
CalcSubjectScore(array,n);
break;
//計算某一個學(xué)生分數(shù)
case 4:
CalcStudentScore(array,n);
break;
//添加一個學(xué)生信息
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 );
}以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Microsoft Visual Studio 2022的安裝與使用詳細教程
Microsoft Visual Studio 2022是Microsoft Visual Studio軟件的一個高版本,能夠編寫和執(zhí)行C/C++代碼,具有強大的功能,是開發(fā)C/C++程序的主流軟件,這篇文章主要介紹了Microsoft Visual Studio 2022的安裝與使用詳細教程2024-01-01
詳解C語言中的getgrgid()函數(shù)和getgrnam()函數(shù)
這篇文章主要介紹了詳解C語言中的getgrgid()函數(shù)和getgrnam()函數(shù),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-08-08

