基於檔案的學生資訊管理系統
前面基於連結串列、陣列完成了基於檔案的學生資訊管理系統,這裡基於檔案給出相應的版本,供大家參考。
學生成績管理系統主要是對檔案進行操作,同時需要對學生的資訊進行詳細定義。為了操作上的方便,假設學生的資訊包括以下幾部分:學號、姓名、語文成績、數學成績、平均成績。其中平均成績是根據輸入的語文成績和數學成績計算出來的。
根據要求設計7個函式:Menu()、inputScore()、Search()、Insert()、Delete()、Count()和Show()函式。
① Menu()模組
該模組執行後,給出5個選單項的內容和輸入提示。
*1.成績錄入
*2.成績查詢
*3.成績插入
*4.成績刪除
*5.成績統計
*0.退出
請輸入0~5:
使用數字0~5來選擇選單項,其它輸入不起作用。在選擇時,通過switch語句進行選擇,使用迴圈控制選單項的顯示,迴圈條件恆為真,選擇正確的項,轉向相應的操作;選擇退出,結束操作;選擇其它項,螢幕總是顯示選單項,直至滿足相應的條件為止。
② inputScore ()模組
本模組實現的功能是對學生的資訊進行錄入,每輸入一條學生記錄,將其寫入檔案,並詢問是否繼續錄入,根據需求輸入若干條記錄。
③ Search()模組
本模組實現的功能是查詢學生的相關資訊,首先輸入學生學號,在檔案中查詢與輸入的學號相同的記錄,並在螢幕上顯示出來。當檔案中不存在該學生的資訊時,系統將做出相關提示。
④ Insert()模組
本模組實現的功能是要求使用者輸入某一學生的相關資訊,並將該學生插入到檔案末尾。
⑤ Delete()模組
本模組實現的功能是要求使用者輸入某一學生的學號,從檔案中查詢該學生的資訊,如果存在,刪除該學生的資訊;反之提供相關提示。
⑥ Count()模組
本模組實現的功能是對學生的資訊進行統計,主要實現三方面的功能:按照數學成績對學生進行分段統計,按照語文成績對學生進行分段統計,按照平均成績對學生進行分段統計。
⑦ Show()模組
本模組實現的功能是將檔案中的所有資訊在螢幕上顯示出來。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxNum 100 //定義學生的最大數量
typedef struct stud{
int number; //學號
char name[20]; //姓名
float math; //數學成績
float chinese; //語文成績
float average; //平均成績
}StudentInfor;
//函式宣告
void Menu(); //主選單模組
void inputScore(); //輸入模組
void Search(); //查詢模組
void Insert(); //插入模組
void Delete(); //刪除模組
void Count(); //統計模組
void Show(); //檢視模組
int main()
{
int choice;
while(1){
Menu();
scanf("%d",&choice);
switch(choice){
case 1: inputScore(); Show();break;
case 2: Search(); break;
case 3: Insert();Show();break;
case 4: Delete();Show();break;
case 5: Count(); break;
case 0: return 0;
default: printf("\n\t輸入錯誤,請重新選擇!\n");
}
return 0;
}
//*******************************************************************
//功能:顯示系統選單,選擇要執行的操作
//引數:無
//返回值:無
//主要思路:用printf輸出選擇項
//*******************************************************************
void Menu()
{
printf("\t學生成績管理系統\n");
printf("\t*1. 學生成績輸入\n");
printf("\t*2. 學生成績查詢\n");
printf("\t*3. 學生成績修改\n");
printf("\t*4. 學生成績插入\n");
printf("\t*5. 學生成績刪除\n");
printf("\t*6. 學生成績統計\n");
printf("\t*0. 退出\n");
printf("請選擇您要進行的操作:");
}
//*******************************************************************
//功能:建立二進位制檔案,並輸入學生的相關資訊
//引數:無
//返回值:無
//主要思路:通過鍵盤輸入學生的相關資訊,每輸入一個學生的資訊,使用fread函式將該資訊寫
// 入指定檔案中。
//*******************************************************************
void inputScore()
{
char ch='y'; //用來控制是否繼續輸入
FILE *fp;
StudentInfor varStu;
if((fp=fopen("studentScore.dat","wb"))==NULL)
{
printf("檔案無法開啟!\n");
return;
}
printf("請輸入學生的學號,姓名,數學成績,語文成績\n");
while(ch=='y')
{
scanf("%d", &varStu.number);
getchar();
scanf("%s",varStu.name);
scanf("%f%f", &varStu.math,&varStu.chinese);
varStu.average=(varStu.math+varStu.chinese)/2;
fwrite(&varStu,sizeof(StudentInfor),1,fp);
printf("是否需要繼續輸入?(y/n)");
scanf("%c",&ch);
ch=(ch=='Y')?ch+32:ch;
}
fclose(fp);
}
//*******************************************************************
//功能:在存放學生資訊的檔案中查詢符合條件的記錄
//引數:無
//返回值:無
//主要思路:通過鍵盤輸入學生的學號,讀取學生資訊檔案中的記錄,查詢檔案中是否存在與輸入學
// 號相同的記錄,並在螢幕上顯示相應的資訊。
//*******************************************************************
void Search()
{
int number,flag; //flag判斷查詢是否成功;
FILE *fp;
StudentInfor varStu;
char ch='y'; //用於控制是否繼續查詢
if((fp=fopen("studentScore.dat","rb"))==NULL)
{
printf("檔案無法開啟!\n");
return;
}
while(ch=='y')
{
flag=0;
printf("請輸入您要查詢的學生學號:");
scanf("%d", &number);
getchar();
rewind(fp);
while(!feof(fp))
{
fread(&varStu,sizeof(StudentInfor),1,fp);
if (number==varStu.number){
flag=1;
printf("%d %s %.2f ",varStu.number, varStu.name, varStu.math);
printf("%.2f %.2f\n",varStu.chinese, varStu.average);
}
}
if (!flag)
printf("您要查詢的學生資訊不存在!\n");
printf("你是否繼續查詢?(y/n)");
scanf("%c",&ch);
ch=(ch=='Y')?ch+32:ch;
}
fclose(fp);
}
//*******************************************************************
//功能:根據讀入的學生資訊,將其插入到檔案中
//引數:無
//返回值:無
//主要思路:通過鍵盤輸入學生的相關資訊,使用fprintf函式將該資訊寫入指定檔案的末尾。
//*******************************************************************
void Insert()
{
FILE *fp;
StudentInfor varStu;
printf("請輸入學生的學號,姓名,數學成績,語文成績\n");
scanf("%d", &varStu.number);
getchar();
scanf("%s",varStu.name);
scanf("%f%f",&varStu.math,&varStu.chinese);
varStu.average=(varStu.math+varStu.chinese)/2;
if((fp=fopen("studentScore.dat","ab"))==NULL)
{
printf("檔案無法開啟!");
return;
}
fwrite(&varStu,sizeof(StudentInfor),1,fp);
fclose(fp);
}
//*******************************************************************
//功能:根據讀入的學生學號,從檔案中將與其學號相同的記錄從檔案中刪除
//引數:無
//返回值:無
//主要思路:通過鍵盤輸入學生的學號,在學生檔案中查詢與該學號相同的記錄,並將其刪除。
//*******************************************************************
void Delete()
{
StudentInfor varStu;
int number,exists,i;
FILE *fp,*fp1;
exists=0; //用於記錄待查詢的資訊是否在檔案中
if((fp=fopen("studentScore.dat","rb"))==NULL)
{
printf("檔案無法開啟!\n");
return;
}
if((fp1=fopen("studentScore1.dat","wb"))==NULL)
{
printf("檔案無法開啟!\n");
return;
}
printf("請輸入要刪除的學生學號:");
scanf("%d", &number);
//將檔案中的未被刪除的學生資訊儲存到檔案studentScore1.dat中
fread(&varStu,sizeof(varStu),1,fp);
while(!feof(fp))
{
if(varStu.number!=number)
fwrite(&varStu,sizeof(StudentInfor),1,fp1);
else
exists=1;
fread(&varStu,sizeof(varStu),1,fp);
}
fclose(fp); fclose(fp1);
//將刪除相關學生資訊後的其它學生資訊copy到檔案studentScore.dat中
system("copy studentScore1.dat studentScore.dat");
if (exists)
printf("學號為%d的學生資訊已成功刪除!\n", number);
else
printf("您要刪除的學生資訊不存在!");
}
//*******************************************************************
//功能:分別統計數學、語文成績和平均分在不同分數段的人數
//引數:無
//返回值:無
//主要思路:掃描檔案中的每條記錄,通過呼叫Select函式,統計每個分數段的學生人數。
//*******************************************************************
void Select(float score,int Num[])
{//判斷某一門課的等級
int level;
level=(int)(score)/10;
switch(level)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5: Num[0]++; break;
case 6: Num[1]++; break;
case 7: Num[2]++; break;
case 8: Num[3]++; break;
case 9:
case 10: Num[4]++; break;
}
}
void Count()
{
FILE *fp;
int mathNum[5], chineseNum[5], averageNum[5]; //統計五分制的人數
int i,level;
StudentInfor varStu;
for(i=0;i<5;i++)
{
mathNum[i]=0;
chineseNum[i]=0;
averageNum[i]=0;
}
if((fp=fopen("studentScore.dat","rb"))==NULL)
{
printf("檔案無法開啟!");
return;
}
while(!feof(fp))
{
fread(&varStu,sizeof(varStu),1,fp);
Select(varStu.math,mathNum);
Select(varStu.chinese,chineseNum);
Select(varStu.average,averageNum);
}
fclose(fp);
printf("統計結果如下:\n");
printf("=====================\n");
printf("數學成績:\n");
printf("\t 60分以下人數:%d\n", mathNum[0]);
printf("\t 60分到70分之間:%d\n", mathNum[1]);
printf("\t 70分到80分之間:%d\n", mathNum[2]);
printf("\t 80分到90分之間:%d\n", mathNum[3]);
printf("\t 90分以上人數:%d\n", mathNum[4]);
printf("=====================\n");
printf("語文成績:\n");
printf("\t 60分以下人數:%d\n", chineseNum[0]);
printf("\t 60分到70分之間:%d\n", chineseNum[1]);
printf("\t 70分到80分之間:%d\n", chineseNum[2]);
printf("\t 80分到90分之間:%d\n", chineseNum[3]);
printf("\t 90分以上人數:%d\n", chineseNum[4]);
printf("=====================\n");
printf("平均成績:\n");
printf("\t 60分以下人數:%d\n", averageNum[0]);
printf("\t 60分到70分之間:%d\n", averageNum[1]);
printf("\t 70分到80分之間:%d\n", averageNum[2]);
printf("\t 80分到90分之間:%d\n", averageNum[3]);
printf("\t 90分以上人數:%d\n", averageNum[4]);
}
//*******************************************************************
//功能:顯示所有學生的資訊
//引數:無
//返回值:無
//主要思路:掃描檔案中的每條記錄,並將記錄在螢幕上顯示出來。
//*******************************************************************
void Show()
{
FILE *fp;
StudentInfor varStu;
if((fp=fopen("studentScore.dat","rb"))==NULL)
{
printf("檔案無法開啟!\n");
return;
}
printf("輸出學生的所有資訊\n");
printf(" 學號 姓名 數學 語文 平均分\n");
fread(&varStu,sizeof(varStu),1,fp);
while(!feof(fp))
{
printf("%6d%8s%7.1f ",varStu.number,varStu.name,varStu.math);
printf("%8.1f%8.2f\n",varStu.chinese, varStu.average);
fread(&varStu,sizeof(varStu),1,fp);
}
fclose(fp);
}
相關文章
- 基於檔案管理的學生資訊管理系統(C語言/C++)C語言C++
- 探討基於資訊系統的專案型生產管理
- 基於php學生資訊管理系統PHP
- 學生選題資訊管理系統
- 基於陣列的學生管理系統【C語言版】陣列C語言
- 基於jsp學生資訊管理系統的設計與實現(含原始檔)JS
- 檔案管理系統助力檔案資訊化建設
- 基於java的大學生健康資訊管理系統的設計與實現Java
- 基於java的社群居民資訊管理系統Java
- 學生管理系統
- 基於JSP開發的物流資訊管理系統JS
- 基於javaEE的土地檔案管理系統的設計及開發Java
- 中小企業基於資訊系統的存貨管理
- 基於“結構體”實現簡易版學生管理系統(Golang)結構體Golang
- day09 集合基礎、學生管理系統
- 關於學生選課管理系統的用例圖
- 基於ThinkPHP框架開發的響應式學生資訊後臺管理系統PHP框架
- 學生管理系統(springMVC)SpringMVC
- JAVA學生宿舍管理系統Java
- 【C++】學生管理系統C++
- 學生管理系統程式碼
- Linux系統學習之檔案管理Linux
- 【Solaris】Solaris檔案系統管理1 UFS檔案系統的建立
- 【Solaris】Solaris檔案系統管理3 ZFS檔案系統的建立
- 基於SpringBoot+Mybatis+Thymeleaf商品資訊管理系統Spring BootMyBatis
- 基於ssm、Vue.js的簡單教師資訊管理系統SSMVue.js
- 關於生產管理系統中的BOM!
- 學生學籍管理系統~~功能介面
- 10個基於Web的開源專案管理系統Web專案管理
- 八個免費基於Web的專案管理系統Web專案管理
- 南天住房檔案及住房補貼管理資訊系統
- R檔案系統管理
- 檔案管理系統 (轉)
- 基於MVC的企業人事管理系統(含原始檔)MVC
- 一種基於記憶體的檔案系統tmpfs記憶體
- 基於AWS的檔案同步服務系統架構架構
- java+SQL做學生資訊管理系統(增刪改查)學生新作JavaSQL
- 資訊系統監理之資訊系統專案管理專案管理