C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(多文件)
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
elemtype.h
/***************************** * 這是學(xué)生成績(jī)管理系統(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ī)定各個(gè)字符串?dāng)?shù)據(jù)項(xiàng)的最大長度。 //定義姓名最大長度 #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é)號(hào) float score[SCORE_NUM];//所修課程分?jǐn)?shù) }ElemType; /*函數(shù)功能: 從文件中讀取數(shù)據(jù)并保存到數(shù)組中,n為文件中保存的記錄條數(shù) 參數(shù)說明: filename-數(shù)據(jù)文件名稱 n-數(shù)組中當(dāng)前保存的有效記錄條數(shù) array-用于存儲(chǔ)學(xué)生信息的數(shù)組 返回值: true-成功添加了一條記錄; false-添加記錄不成功 */ bool ReadDataFromFile(char *filename, ElemType array[], int n); /*函數(shù)功能: 顯示所有學(xué)生信息 參數(shù)說明: n-數(shù)組中當(dāng)前保存的有效記錄條數(shù) array-用于存儲(chǔ)學(xué)生信息的數(shù)組 返回值: 無 */ void DispalyAll(ElemType array[], int n); /*函數(shù)功能: 修改學(xué)生信息,即從控制臺(tái)輸入一個(gè)學(xué)生信息,根據(jù)該信息在數(shù)組中進(jìn)行查找并修改 參數(shù)說明: n-數(shù)組中當(dāng)前保存的有效記錄條數(shù) array-用于存儲(chǔ)學(xué)生信息的數(shù)組 返回值: true-成功修改了一條記錄 false-修改記錄不成功 */ bool ModifyStudentInfo(ElemType array[],int n); /*函數(shù)功能: 計(jì)算某一科目平均分 參數(shù)說明: n-數(shù)組中當(dāng)前保存的有效記錄條數(shù) array-用于存儲(chǔ)學(xué)生信息的數(shù)組 返回值: -1-沒有找到對(duì)應(yīng)記錄 對(duì)應(yīng)記錄的下標(biāo) */ void CalcSubjectScore(ElemType array[], int n ); /*函數(shù)功能: 根據(jù)學(xué)號(hào)查找學(xué)生,計(jì)算其平均分 參數(shù)說明: n-數(shù)組中當(dāng)前保存的有效記錄條數(shù) array-用于存儲(chǔ)學(xué)生信息的數(shù)組 返回值: -1-沒有找到對(duì)應(yīng)記錄 對(duì)應(yīng)記錄的下標(biāo) */ void CalcStudentScore(ElemType array[], int n ); /*函數(shù)功能: 添加學(xué)生信息,即從控制臺(tái)輸入一條學(xué)生信息,然后將輸入的學(xué)生信息保存到數(shù)組中 參數(shù)說明: n-數(shù)組中當(dāng)前保存的有效記錄條數(shù) array-用于存儲(chǔ)學(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-用于存儲(chǔ)學(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é)生信息,保存到一個(gè)足夠大的數(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é)號(hào):"); scanf("%d",&number); for(i=0;i<n;i++) { if(number==array[i].ID) { printf("請(qǐng)輸入該同學(xué)的新信息,按姓名,學(xué)科種類,學(xué)號(hào),各科成績(jī)的順序\n"); printf("(學(xué)科種類只需填對(duì)應(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("請(qǐng)輸入查找學(xué)生的學(xué)號(hào):"); 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("請(qǐng)輸入添加的學(xué)生信息(按姓名,學(xué)科種類,學(xué)號(hào),各科分?jǐn)?shù)的順序)\n"); printf("(學(xué)科種類只需輸入對(duì)應(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ù)組中所有有效記錄以二進(jìn)制形式保存到文件中 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
//這是主測(cè)試文件 #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é)計(jì)算機(jī)(軟件)學(xué)院學(xué)生管理系統(tǒng)V1.0" ); puts("********************************************************************\n" ); } // ///function void run(ElemType* array, int n) { int option = 0; //提示用戶選擇操作 puts(" "); puts("請(qǐng)選擇操作:\n" ); puts("0:直接退出 "); puts("1:顯示所有學(xué)生信息 ") ; puts("2:修改某個(gè)學(xué)生信息 ") ; puts("3:計(jì)算所有學(xué)生某一科平均分 ") ; puts("4:計(jì)算某一個(gè)學(xué)生分?jǐn)?shù) ") ; puts("5:添加一個(gè)學(xué)生信息 ") ; puts("6:寫回文件并退出 \n" ) ; do { scanf("%d", &option ); //根據(jù)用戶選擇調(diào)用相關(guān)函數(shù)完成指定的操作 switch(option ) { //顯示所有學(xué)生信息 case 1: DispalyAll(array,n); break; //修改某個(gè)學(xué)生信息 case 2: { if( ModifyStudentInfo(array,n) ) { printf("\n"); DispalyAll(array,n); printf("修改成功!\n"); } else printf("未找到此學(xué)生!\n"); } break; //計(jì)算所有學(xué)生某一科平均分 case 3: CalcSubjectScore(array,n); break; //計(jì)算某一個(gè)學(xué)生分?jǐn)?shù) case 4: CalcStudentScore(array,n); break; //添加一個(gè)學(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 ); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++ 使用模板實(shí)現(xiàn)一個(gè)List的實(shí)例
這篇文章主要介紹了 C++ 使用模板實(shí)現(xiàn)一個(gè)List的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05opencv實(shí)現(xiàn)定時(shí)錄像功能
這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)定時(shí)錄像功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06C語言實(shí)現(xiàn)考試報(bào)名管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)考試報(bào)名管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06Microsoft Visual Studio 2022的安裝與使用詳細(xì)教程
Microsoft Visual Studio 2022是Microsoft Visual Studio軟件的一個(gè)高版本,能夠編寫和執(zhí)行C/C++代碼,具有強(qiáng)大的功能,是開發(fā)C/C++程序的主流軟件,這篇文章主要介紹了Microsoft Visual Studio 2022的安裝與使用詳細(xì)教程2024-01-01詳解C語言中的getgrgid()函數(shù)和getgrnam()函數(shù)
這篇文章主要介紹了詳解C語言中的getgrgid()函數(shù)和getgrnam()函數(shù),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08C++實(shí)現(xiàn)圖書館管理系統(tǒng)源碼
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖書館管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03