學生成績管理系統
【注釋】:請點贊,好人一生平[yi]安[wo]。
#codeblocks程序下編寫
#include<stdio.h>
#include<stdlib.h>//顏色
#include<conio.h>//清屏
#include<string.h>
#define LEN sizeof(struct student)
#define SDJ stu[s].ID,stu[s].name,stu[s].sex,stu[s].Class,stu[s].major,stu[s].SX,stu[s].YY,stu[s].CYY,stu[s].sum/**/
#define DJ stu[k].ID,stu[k].name,stu[k].sex,stu[k].Class,stu[k].major,stu[k].SX,stu[k].YY,stu[k].CYY,stu[k].sum
#define dj stu[p].ID,stu[p].name,stu[p].sex,stu[p].Class,stu[p].major,stu[p].SX,stu[p].YY,stu[p].CYY,stu[p].sum
using namespace std;
int DengLu(); /*登錄*/
int PaiXu(); /*排序*/
int XiuGai(); /*修改*/
int XianShi(); /*顯示*/
int LuRu(); /*錄入*/
int ShanChu(); /*刪除*/
int GongNeng(); /*功能選擇*/
int ZhuCe(); /*注冊*/
int ChaXun(); /*查詢*/
int m=0; /*數據條數*/
char sr[1]; /*存放輸入的判斷字母的密碼*/
char PASSWORD[10]; /*存放輸入的密碼*/
/******************學生結構體*****************/
typedef struct student
{
char name[20] ; /*姓名*/
char sex[20]; /*性別*/
char Class[20]; /*班級*/
char ID[20]; /*學號*/
char major[20]; /*專業*/
double SX,YY,CYY,sum;/*數學,英語,c語言,總分*/
} typel;
typel stu[100];
/********************主函數*****************/
int main()
{
printf("************************************************************************************************************************\n");
printf("* *\n");
printf("* *\n");
printf("* 歡迎使用成績查詢系統! *\n");
printf("* *\n");
printf("* *\n");
printf("* 1. 【登錄】 *\n");
printf("* 2. 【注冊】 *\n");
printf("* 3. 【退出系統】 *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("************************************************************************************************************************\n");
system("color 2F"); /*綠色背景*/
int a;
printf("請選擇服務,並輸入對應數字\n");
scanf("%d",&a);
if(a!=1&&a!=2&&a!=3)
{
printf("輸入數字不合法,再給你一次機會,請重新輸入\n");
scanf("%d",&a);
}
switch(a)
{
case 1:
system("cls");
printf("歡迎進入【登錄】頁面\n");
DengLu();
break;
case 2:
system("cls");
printf("歡迎進入【注冊】頁面\n");
ZhuCe();
break;
case 3:
system("cls");
printf("謝謝惠顧,O(∩_∩)O拜拜~\n");
break;
}
return 0;
}
/********************注冊*********************/
int ZhuCe()
{
FILE *PN; /*定義文件指針*/
if((PN=fopen("PassWord.txt","ab+"))==NULL) /*打開存放密碼的文件*/
{
printf("創建密碼文件失敗!\n");
}
if((fread(&PASSWORD,sizeof(PASSWORD),1,PN))==1) /*判斷文件中是否已存有密碼*/
{
fclose(PN);
printf("注冊已完成,不可重復注冊。\n【重新注冊】請刪去密碼文件中內容。\n");
printf("按<Enter>鍵返回主頁面………………");
getch(); /*停頓一下*/
system("cls");
main();
}
else
{
char Name[10]; /*用戶名*/
char Password1[10];
char Password2[10];
printf("請設置初始用戶名:");
scanf("%s",Name);
printf("\n請設置密碼【6位數字】:"); /*輸入一次密碼*/
scanf("%s",Password1);
printf("\n請確認密碼【6位數字】:"); /*再次確認*/
scanf("%s",Password2);
if((strcmp(Password1,Password2))==0) /*比較兩次輸入是否相同密碼*/
{
printf("確認密碼成功!\n");
if((fwrite(&Password1,sizeof(Password1),1,PN))==1) /*把輸入的密碼存到文件中去*/
{
printf("恭喜,注冊成功!\n");
printf("按<Enter>鍵返回主頁面………………");
fclose(PN); /*關閉文件防止信息丟失*/
getch();
system("cls"); /*清屏*/
main();
}
else
{
printf("密碼無法保存,注冊失敗!\n");
system("color 40");
printf("按<Enter>鍵返回主頁面………………");
fclose(PN);
getch();
system("cls");
main();
}
}
else
{
printf("兩次密碼輸入不同,注冊失敗!\n");
system("color 40");
printf("按<Enter>鍵返回主頁面………………\n");
fclose(PN);
getch();
system("cls");
main();
}
}
fclose(PN);
return 0;
}
/*********************登錄********************/
int DengLu()
{
FILE *PN;
char password[10],name[10];
PN=fopen("PassWord.txt","a+");
if(PN==NULL)
{
printf("打開密碼文件失敗!\n");
system("color 40"); /*紅色背景以示警告*/
printf("按<Enter>鍵返回主頁面………………\n");
fclose(PN);
getch();
system("cls");
main();
}
printf(">>歡迎您的登陸<<\n");
printf("請輸入用戶名:");
scanf("%s",name);
printf("\n請輸入密碼:");
scanf("%s",password);
fscanf(PN,"%s",PASSWORD); /*從文件中讀一個密碼賦給PASSWORD*/
if((strcmp(password,PASSWORD))==0) /*驗證密碼*/
{
printf("密碼正確,登錄成功!\n");
printf("¥五毛錢 的特效送給你\n");
fclose(PN);
GongNeng();
return 0;
}
else
{
printf("無此用戶!!!\n");
printf("再見!\n");
system("color 40"); /*紅色背景以示警告*/
printf("按<Enter>鍵返回主頁面………………\n");
fclose(PN);
getch();
system("cls");
main();
}
fclose(PN);
return 0;
}
/********************功能選擇******************/
int GongNeng()
{
printf("************************************************************************************************************************\n");
printf("* *\n");
printf("* *\n");
printf("* 尊敬的VIP用戶,請選擇服務! *\n");
printf("* *\n");
printf("* *\n");
printf("* 1. 【成績錄入】 4. 【修改成績】 *\n");
printf("* 2. 【刪除成績】 5. 【查看排名】 *\n");
printf("* 3. 【成績查詢】 6. 【退出系統】 *\n");
printf("* *\n");
printf("* *\n");
printf("* *\n");
printf("************************************************************************************************************************\n");
system("color 2F");
int b;
printf("請選擇服務,並輸入對應數字\n");
long time;
/*******************************************************************************¥五毛錢 的特效******************************************************************************/
for (;;)
{
system("color a"); /*第一個16進制數字代表字體顏色(下同)*/
for (time = 0; time<99999999; time++); /*循環以控制該顏色存在時間*/
system("color b");
for (time = 0; time<99999999; time++);
system("color c");
for (time = 0; time<99999999; time++);
system("color d");
for (time = 0; time<99999999; time++);
system("color e");
for (time = 0; time<99999999; time++);
system("color f");
for (time = 0; time<99999999; time++);
system("color 0");
for (time = 0; time<99999999; time++);
system("color 1");
for (time = 0; time<99999999; time++);
system("color 2");
for (time = 0; time<99999999; time++);
system("color 3");
for (time = 0; time<99999999; time++);
system("color 4");
for (time = 0; time<99999999; time++);
system("color 5");
for (time = 0; time<99999999; time++);
system("color 6");
for (time = 0; time<99999999; time++);
system("color 7");
for (time = 0; time<99999999; time++);
system("color 8");
for (time = 0; time<99999999; time++);
system("color 9");
break;
}
/******************************************************************************************************************************************************************************/
system("color 2F"); /*恢復主題綠色*/
scanf("%d",&b);
getchar();
switch(b) /*選擇功能*/
{
case 1:
system("cls");
LuRu();
break;
case 2:
system("cls");
ShanChu();
break;
case 3:
system("cls");
ChaXun();
break;
case 4:
system("cls");
XiuGai();
break;
case 5:
system("cls");
PaiXu();
break;
case 6:
system("cls");
return 0;
break;
}
return 0;
}
/***************************成績錄入****************************/
int LuRu()
{
m=0;
FILE *fp;
if((fp=fopen("student.txt","ab+"))==NULL) /*以讀寫方式打開文件*/
{
printf("文件打開出錯!!!\n");
}
while(!feof(fp)) /*文件未指到末尾返回0,以此為判斷條件【計數】*/
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
if(m==0)
{
printf("暫無數據\n");
}
else
{
system("cls");
printf(">>當前共有%d條數據\n",m); /*輸出當前數據條數*/
fclose(fp);
}
if((fp=fopen("student.txt","ab+"))==NULL)
{
printf("文件打開出錯!!!");
getch();
}
printf("請確認是【Y】否【N】錄入學生信息:");
scanf("%s",sr);
while(strcmp(sr,"Y")==0||strcmp(sr,"y")==0)/*錄入學生信息*/
{
printf("請輸入姓名:");
scanf("%s",stu[m].name);
printf("請輸入性別:");
scanf("%s",stu[m].sex);
printf("請輸入班級:");
scanf("%s",stu[m].Class);
printf("請輸入學號:");
scanf("%s",stu[m].ID);
printf("請輸入專業:");
scanf("%s",stu[m].major);
printf("請輸入數學成績:");
scanf("%lf",&stu[m].SX);
printf("請輸入英語成績:");
scanf("%lf",&stu[m].YY);
printf("請輸入C語言成績:");
scanf("%lf",&stu[m].CYY);
stu[m].sum=stu[m].SX+stu[m].YY+stu[m].CYY;
if(fwrite(&stu[m],LEN,1,fp)!=1) /*將新錄入的信息寫入指定的磁盤文件*/
{
printf("對不起,不能保存!");
getch();
}
else
{
printf("%s 保存成功!\n",stu[m].name);
printf("還繼續輸嗎?(Y/N):"); /*詢問是否繼續*/
scanf("%s",sr);
if(strcmp(sr,"Y")==0||strcmp(sr,"y")==0)/*為存下一個數據開空間*/
{
m++;
}
}
}
/*if(strcmp(sr,"Y")!=0&&strcmp(sr,"y")!=0)
{
GongNeng();
// return 0;
}*/
fclose(fp); /*關閉文件防止信息丟失*/
printf("恭喜,錄入學生成績成功!\n");
XianShi();getch();
if(strcmp(sr,"Y")!=0&&strcmp(sr,"y")!=0)
{
system("cls");
GongNeng();
// return 0;
}
}
/******************成績的刪除*****************/
int ShanChu()
{
FILE *fp;
int i,j;
char id[20];
printf(">>刪除成績<<\n");
if((fp=fopen("student.txt","ab+"))==NULL)
{
printf("打開學生成績文件失敗!\n");
getch();
}
m=0; /*重新計數,確保能夠獨立運行。*/
while(!feof(fp)) /*文件指針未達到末尾返回0*/
{
if(fread(&stu[m],LEN,1,fp)==1) /*判斷讀取一個單位字節是否成功*/
{
m=m+1;
}
/*統計當前記錄條數*/
}
fclose(fp);
XianShi();
if(m==0)
{
printf("沒有成績可刪,請先錄入成績!");
getch();
}
printf("請輸入要刪除學生的學號:");
scanf("%s",&id);
for(i=0; i<m; i++) /*檢索學號*/
{
if(strcmp(id,stu[i].ID)==0)
{
break;
}
}
if(i==m) /*檢索結束未找到信息*/
{
printf("未找到該學生【%s】成績\n",id);
getch();
return 0;
}
printf("已找到%s的成績,是否刪除:\n",stu[i].name);
scanf("%s",sr);
if(strcmp(sr,"Y")==0||strcmp(sr,"y")==0)
{
for(j=i; j<(m-1); j++)
{
stu[j]=stu[j+1];//把該學生后的數據向前移動1位
}
m=m-1;//數據組總數減一
printf("刪除成功!\n");
}
else
{
return 0;
}
if((fp=fopen("student.txt","wb"))==NULL)
{
printf("無法打開文件,保存信息失敗!");
getch();
}
int u;
for(u=0; u<m; u++) /*把改動的文件重新錄入文件*/
{
fwrite(&stu[u],LEN,1,fp);
}
if(u==m)
{
printf("恭喜,保存成功!\n");
XianShi();
getch();
}
return 0;
}
/******************顯示成績*****************/
int XianShi()
{
printf("【學號】 【姓名】 【性別】 【班級】 【專業】 【數學】 【英語】 【思政】 【總分】\n");
for(int k=0; k<m; k++)
{
printf(" %s %s %s %s %s %.1lf %.1lf %.1lf %.1lf\n",DJ);
}
}
/******************成績查詢*****************/
int ChaXun()
{
FILE *fp;
int p;
char iid[20];
printf(">>成績查詢<<\n");
if((fp=fopen("student.txt","ab+"))==NULL)
{
printf("打開學生成績文件失敗!\n");
getch();
}
m=0;//重新計數,
while(!feof(fp))//文件指針未達到末尾返回0
{
if(fread(&stu[m],LEN,1,fp)==1)//判斷讀取一個單位字節是否成功
{
m=m+1;
}
/*統計當前記錄條數*/
}
fclose(fp);
if(m==0)
{
printf("沒有成績可查,請先錄入成績!");
getch();
}
printf("請輸入要查詢學生的學號:");
scanf("%s",&iid);
for(p=0; p<m; p++)
{
if(strcmp(iid,stu[p].ID)==0)
{
break;
}
}
if(p==m)
{
printf("【%s】成績不存在\n",iid);
getch();
return 0;
}
printf(">>查詢成功!\n");
printf("【學號】 【姓名】 【性別】 【班級】 【專業】 【數學】 【英語】 【思政】 【總分】\n");
printf(" %s %s %s %s %s %.1lf %.1lf %.1lf %.1lf\n",dj);
return 0;
}
/*******************成績修改******************/
int XiuGai()
{
FILE *fp;
int q;
char iiid[20];
printf(">>修改成績<<\n");
if((fp=fopen("student.txt","ab+"))==NULL)
{
printf("打開學生成績文件失敗!\n");
getch();
}
m=0;//重新計數,確保能夠獨立運行。
while(!feof(fp))//文件指針未達到末尾返回0
{
if(fread(&stu[m],LEN,1,fp)==1)//判斷讀取一個單位字節是否成功
{
m=m+1;
}
/*統計當前記錄條數*/
}
fclose(fp);
XianShi();
if(m==0)
{
printf("沒有成績可修改,請先錄入成績!");
getch();
return 0;
}
printf("請輸入要修改學生的學號:");
scanf("%s",&iiid);
for(q=0; q<m; q++)
{
if(strcmp(iiid,stu[q].ID)==0)
{
break;
}
}
if(q==m)
{
printf("未找到該學生【%s】成績\n",iiid);
getch();
return 0;
}
printf("已找到%s的成績,是否修改:\n",stu[q].name);
scanf("%s",sr);
if(strcmp(sr,"Y")==0||strcmp(sr,"y")==0)
{
printf("請輸入姓名:");
scanf("%s",stu[q].name);
printf("請輸入性別:");
scanf("%s",stu[q].sex);
printf("請輸入班級:");
scanf("%s",stu[q].Class);
printf("請輸入學號:");
scanf("%s",stu[q].ID);
printf("請輸入專業:");
scanf("%s",stu[q].major);
printf("請輸入數學成績:");
scanf("%lf",&stu[q].SX);
printf("請輸入英語成績:");
scanf("%lf",&stu[q].YY);
printf("請輸入C語言成績:");
scanf("%lf",&stu[q].CYY);
stu[q].sum=stu[q].SX+stu[q].YY+stu[q].CYY;
printf("修改成功!\n");
}
else
{
return 0;
}
if((fp=fopen("student.txt","wb"))==NULL)
{
printf("無法打開文件,保存信息失敗!");
getch();
return 0;
}
int o;
for(o=0;o<m;o++)
{
fwrite(&stu[o],LEN,1,fp); /*把改動的文件重新錄入文件*/
}
if(o==m)
{
printf("恭喜,保存成功!");
}
return 0;
}
/********************成績排序******************/
int PaiXu()
{
FILE *fp;
printf(">>成績排序<<\n");
if((fp=fopen("student.txt","ab+"))==NULL)
{
printf("打開學生成績文件失敗!\n");
getch();
}
m=0;//重新計數,不依賴輸入函數。
while(!feof(fp))//文件指針未達到末尾返回0
{
if(fread(&stu[m],LEN,1,fp)==1)//判斷讀取一個單位字節是否成功
{
m=m+1;
}
/*統計當前記錄條數*/
}
fclose(fp);
if(m==0)
{
printf("沒有成績可排序,請先錄入成績!");
getch();
}
typel t;
for(int w=0;w<m;w++) /*FOR循環排序*/
{
for(int c=w;c<m;c++)
{
if(stu[w].sum<stu[c].sum)
{
t=stu[w];
stu[w]=stu[c];
stu[c]=t;
}
}
}
printf("【學號】 【姓名】 【性別】 【班級】 【專業】 【數學】 【英語】 【思政】 【總分】\n");
for (int s=0; s<m; s++)
{
printf(" %s %s %s %s %s %.1lf %.1lf %.1lf %.1lf\n",SDJ);
}
getch();
return 0;
}