最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ī)定各個字符串?dāng)?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ù)組中當(dāng)前保存的有效記錄條數(shù)
 array-用于存儲學(xué)生信息的數(shù)組
 返回值:
 true-成功添加了一條記錄;
 false-添加記錄不成功
*/
bool ReadDataFromFile(char *filename, ElemType array[], int n);


/*函數(shù)功能:
 顯示所有學(xué)生信息
 參數(shù)說明:
 n-數(shù)組中當(dāng)前保存的有效記錄條數(shù)
 array-用于存儲學(xué)生信息的數(shù)組
 返回值:
 無
*/
void DispalyAll(ElemType array[], int n);


/*函數(shù)功能:
 修改學(xué)生信息,即從控制臺輸入一個學(xué)生信息,根據(jù)該信息在數(shù)組中進行查找并修改
 參數(shù)說明:
 n-數(shù)組中當(dāng)前保存的有效記錄條數(shù)
 array-用于存儲學(xué)生信息的數(shù)組
 返回值:
 true-成功修改了一條記錄
 false-修改記錄不成功
*/
bool ModifyStudentInfo(ElemType array[],int n);


/*函數(shù)功能:
 計算某一科目平均分
 參數(shù)說明:
 n-數(shù)組中當(dāng)前保存的有效記錄條數(shù)
 array-用于存儲學(xué)生信息的數(shù)組
 返回值:
 -1-沒有找到對應(yīng)記錄
 對應(yīng)記錄的下標(biāo)
*/
void CalcSubjectScore(ElemType array[], int n );


/*函數(shù)功能:
 根據(jù)學(xué)號查找學(xué)生,計算其平均分
 參數(shù)說明:
 n-數(shù)組中當(dāng)前保存的有效記錄條數(shù)
 array-用于存儲學(xué)生信息的數(shù)組
 返回值:
 -1-沒有找到對應(yīng)記錄
 對應(yīng)記錄的下標(biāo)
*/
void CalcStudentScore(ElemType array[], int n );


/*函數(shù)功能:
 添加學(xué)生信息,即從控制臺輸入一條學(xué)生信息,然后將輸入的學(xué)生信息保存到數(shù)組中
 參數(shù)說明:
 n-數(shù)組中當(dāng)前保存的有效記錄條數(shù)
 array-用于存儲學(xué)生信息的數(shù)組
 返回值:
 true-成功添加了一條記錄,提示:此種情況下n需要增加1
 false-添加記錄不成功
*/
void SortStu(ElemType array[], int n);


/*函數(shù)功能:
 把數(shù)組中的數(shù)據(jù)寫到文件中保存
 參數(shù)說明:
 filename-數(shù)據(jù)文件名稱 
 n-數(shù)組中當(dāng)前保存的記錄條數(shù)
 array-用于存儲學(xué)生信息的數(shù)組
 返回值:
 true-成功添加了一條記錄;
 false-添加記錄不成功
*/
bool WriteDataToFile(char *filename, ElemType array[], int n); 

#endif

elemtype.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)文章

  • C/C++ 讀取16進制文件的方法

    C/C++ 讀取16進制文件的方法

    下面小編就為大家?guī)硪黄狢/C++ 讀取16進制文件的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 詳解C語言中accept()函數(shù)和shutdown()函數(shù)的使用

    詳解C語言中accept()函數(shù)和shutdown()函數(shù)的使用

    這篇文章主要介紹了詳解C語言中accept()函數(shù)和shutdown()函數(shù)的使用,用來操作socket相關(guān)的網(wǎng)絡(luò)通信,需要的朋友可以參考下
    2015-09-09
  • C語言數(shù)組長度的計算方法實例總結(jié)(sizeof與strlen)

    C語言數(shù)組長度的計算方法實例總結(jié)(sizeof與strlen)

    數(shù)組一旦創(chuàng)建,程序運行期間,長度不可改變,下面這篇文章主要給大家介紹了關(guān)于C語言數(shù)組長度的計算方法,主要利用的是sizeof與strlen,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • VS2019使用Windows桌面應(yīng)用程序模塊創(chuàng)建Win32窗口

    VS2019使用Windows桌面應(yīng)用程序模塊創(chuàng)建Win32窗口

    這篇文章主要介紹了VS2019使用Windows桌面應(yīng)用程序模塊創(chuàng)建Win32窗口,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • OpenCV實現(xiàn)圖像邊緣檢測

    OpenCV實現(xiàn)圖像邊緣檢測

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)圖像邊緣檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++之OpenCV圖像高光調(diào)整具體流程

    C++之OpenCV圖像高光調(diào)整具體流程

    PS中的高光命令是一種校正由于太接近相機閃光燈而有些發(fā)白的焦點的方法,對高光區(qū)和非高光區(qū)的邊緣作平滑處理,接下來通過本文給大家分享C++之OpenCV圖像高光調(diào)整具體流程,感興趣的朋友一起看看吧
    2021-09-09
  • C++采用ring3讀取MBR實例

    C++采用ring3讀取MBR實例

    這篇文章主要介紹了C++采用ring3讀取MBR實例,可實現(xiàn)對硬盤的主引導(dǎo)記錄的讀取,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • 如何在C++類的外部調(diào)用類的私有方法

    如何在C++類的外部調(diào)用類的私有方法

    這篇文章主要介紹了如何在C++類的外部調(diào)用類的私有方法,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • C語言入門篇--四大常量(字面,const修飾,宏,枚舉)及標(biāo)識符

    C語言入門篇--四大常量(字面,const修飾,宏,枚舉)及標(biāo)識符

    本篇文章是c語言基礎(chǔ)篇,主要講述一下常量,常量即不可被直接修改的量(const修飾的常變量可間接修改,后續(xù)文章會繼續(xù)說明)請大家持續(xù)關(guān)注腳本之家
    2021-08-08
  • 詳解C語言如何實現(xiàn)雙向帶頭循環(huán)鏈表

    詳解C語言如何實現(xiàn)雙向帶頭循環(huán)鏈表

    雙向帶頭循環(huán)鏈表應(yīng)該是鏈表中非常方便的一種,可以很容易的在任意位置上進行插入和刪除,可以很容易的對鏈表進行管理。本文將利用C語言實現(xiàn)雙向帶頭循環(huán)鏈表,需要的可以參考一下
    2022-08-08

最新評論

衡南县| 宣恩县| 临猗县| 甘泉县| 两当县| 得荣县| 大同县| 平南县| 岫岩| 吉隆县| 丹阳市| 舞阳县| 井研县| 庆城县| 西丰县| 新野县| 正宁县| 遵义县| 江油市| 荆门市| 安福县| 封开县| 陇川县| 儋州市| 信宜市| 修武县| 新泰市| 定兴县| 炉霍县| 亳州市| 铜山县| 金湖县| 如东县| 南部县| 乌拉特中旗| 突泉县| 浪卡子县| 中阳县| 南溪县| 太谷县| 京山县|